[Home] [Help]
PACKAGE BODY: APPS.PA_TASK_PUB1
Source
1 PACKAGE BODY PA_TASK_PUB1 AS
2 /* $Header: PATSK1PB.pls 120.23.12010000.4 2009/02/13 11:39:28 amehrotr 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_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
20 -- p_object_type IN VARCHAR2 N Not Null
21 -- p_project_id IN NUMBER N Not Null
22 -- p_task_number IN VARCHAR2 N Not Null
23 -- p_task_name IN VARCHAR2 N Not Null
24 -- p_task_description IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25 -- p_location_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
26 -- p_country IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27 -- p_territory_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28 -- p_state_region IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29 -- p_city IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30 -- p_task_manager_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31 -- p_task_manager_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32 -- p_carrying_out_org_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33 -- p_carrying_out_org_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34 -- p_priority_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35 -- p_TYPE_ID IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36 -- p_status_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37 -- p_inc_proj_progress_flag IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38 -- p_pm_product_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
39 -- p_pm_task_reference IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
40 -- p_closed_date IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
41 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
44 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
45 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
46 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
47 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
48 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
49 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
50 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
51 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
52 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
53 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
54 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
55 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
56 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
57 --FP M development bug 3301192
58 -- p_structure_type IN VARCHAR2 := 'WORKPLAN',
59 -- p_financial_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
60 --End FPM changes
61 -- x_task_id OUT NUMBER N Not Null
62 -- x_return_status OUT VARCHAR2 N Null
63 -- x_msg_count OUT NUMBER N Null
64 -- x_msg_data OUT VARCHAR2 N Null
65 --
66 -- History
67 --
68 -- 23-OCT-01 Majid Ansari -Created
69 --
70 --
71
72 PROCEDURE Create_Task(
73 p_api_version IN NUMBER :=1.0,
74 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
75 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
76 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
77 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
78 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
79 p_debug_mode IN VARCHAR2 :='N',
80 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
81 p_object_type IN VARCHAR2,
82 p_project_id IN NUMBER,
83 p_structure_id IN NUMBER,
84 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
85 p_task_number IN VARCHAR2,
86 p_task_name IN VARCHAR2,
87 p_ref_task_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
88 p_peer_or_sub IN VARCHAR2 :='PEER',
89 p_task_description IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
90 p_location_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
91 p_country IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
92 p_territory_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
93 p_state_region IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
94 p_city IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
95 p_task_manager_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
96 p_task_manager_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
97 p_carrying_out_org_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
98 p_carrying_out_org_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
99 p_priority_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
100 p_TYPE_ID IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
101 p_status_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
102 p_inc_proj_progress_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
103 p_pm_product_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
104 p_pm_task_reference IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
105 p_closed_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
106 p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
107 p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
108 p_link_task_flag IN VARCHAR2 := 'N',
109 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
110 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
111 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
112 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
113 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
114 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
115 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
116 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
117 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
118 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
119 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
120 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
121 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
122 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
123 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
124 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
125 p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
126 p_address1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
127 p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
128 p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
129 p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
130 p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
131 p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
132
133 p_task_weighting_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
134 p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
135 p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
136 p_wq_actual_entry_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
137 p_task_progress_entry_page_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
138 p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
139 p_parent_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
140 p_phase_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
141 p_phase_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
142 -- xxlu added task DFF attributes
143 p_tk_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
144 p_tk_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
145 p_tk_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
146 p_tk_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
147 p_tk_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
148 p_tk_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
149 p_tk_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
150 p_tk_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
151 p_tk_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
152 p_tk_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
153 p_tk_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
154 -- end xxlu changes
155 --FP M development bug 330119
156 p_structure_type IN VARCHAR2 := 'WORKPLAN',
157 p_financial_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
158 p_Base_Perc_Comp_Deriv_Code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
159 --End FPM changes bug 330119
160 x_task_id IN OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
161 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
162 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
163 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
164 ) IS
165
166 l_api_name CONSTANT VARCHAR(30) := 'CREATE_TASK';
167 l_api_version CONSTANT NUMBER := 1.0;
168
169 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
170 l_return_status VARCHAR2(1);
171 l_msg_count NUMBER;
172 l_msg_data VARCHAR2(250);
173 l_data VARCHAR2(250);
174 l_msg_index_out NUMBER;
175 l_error_msg_code VARCHAR2(250);
176
177 l_carrying_out_org_id NUMBER;
178 -- added for Bug: 4537865
179 l_new_carrying_out_org_id NUMBER;
180 -- added for Bug: 4537865
181 l_task_manager_id NUMBER;
182 l_task_progress_entry_page_id NUMBER;
183
184 -- hyau Bug 2852753
185 l_delete_project_allowed VARCHAR2(1);
186 l_update_proj_num_allowed VARCHAR2(1);
187 l_update_proj_name_allowed VARCHAR2(1);
188 l_update_proj_desc_allowed VARCHAR2(1);
189 l_update_proj_dates_allowed VARCHAR2(1);
190 l_update_proj_status_allowed VARCHAR2(1);
191 l_update_proj_manager_allowed VARCHAR2(1);
192 l_update_proj_org_allowed VARCHAR2(1);
193 l_add_task_allowed VARCHAR2(1);
194 l_delete_task_allowed VARCHAR2(1);
195 l_update_task_num_allowed VARCHAR2(1);
196 l_update_task_name_allowed VARCHAR2(1);
197 l_update_task_dates_allowed VARCHAR2(1);
198 l_update_task_desc_allowed VARCHAR2(1);
199 l_update_parent_task_allowed VARCHAR2(1);
200 l_update_task_org_allowed VARCHAR2(1);
201
202 l_err_code NUMBER := 0;
203 l_err_stack VARCHAR2(200) := NULL;
204 l_err_stage VARCHAR2(200) := NULL;
205
206 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
207
208 CURSOR get_product_code ( c_project_id NUMBER ) IS
209 SELECT pm_product_code
210 FROM PA_PROJECTS_ALL
211 WHERE project_id = c_project_id;
212
213 -- end hyau Bug 2852753
214
215 BEGIN
216 pa_debug.init_err_stack ('PA_TASK_PUB1.CREATE_TASK');
217
218 IF (p_debug_mode = 'Y') THEN
219 pa_debug.debug('PA_TASK_PUB1.CREATE_TASK begin');
220 END IF;
221
222 IF (p_commit = FND_API.G_TRUE) THEN
223 savepoint create_Task;
224 END IF;
225
226 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
227 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
228 END IF;
229
230
231 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
232 FND_MSG_PUB.initialize;
233 END IF;
234
235 --Bug 2168170
236
237 --hsiu: bug 2669388
238 /*
239 --dbms_output.put_line('task number');
240 IF p_task_number IS NULL
241 THEN
242 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
243 p_msg_name => 'PA_PS_TASK_NUMBER_NULL');
244 raise FND_API.G_EXC_ERROR;
245 END IF;
246
247 --dbms_output.put_line('task name');
248 IF p_task_name IS NULL
249 THEN
250 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
251 p_msg_name => 'PA_PS_TASK_NAME_NULL');
252 raise FND_API.G_EXC_ERROR;
253 END IF;
254
255 --Bug 2168170
256
257 IF PA_PROJ_ELEMENTS_UTILS.Check_element_number_Unique
258 (
259 p_element_number => rtrim(p_task_number)
260 ,p_element_id => null
261 ,p_project_id => p_project_id
262 ,p_structure_id => p_parent_structure_id
263 ,p_object_type => 'PA_TASKS'
264 ) = 'N'
265 THEN
266 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
267 p_msg_name => 'PA_PS_TASK_NOT_NUM_UNIQ');
268 raise FND_API.G_EXC_ERROR;
269
270 END IF;
271 */
272 --end bug 2669388
273
274 -- hyau Bug 2852753
275 IF p_calling_module = 'SELF_SERVICE'
276 and p_link_task_flag = 'N' -- Bug # 5072032.
277 THEN
278
279 OPEN get_product_code(p_project_id);
280 FETCH get_product_code INTO l_pm_product_code;
281 CLOSE get_product_code;
282
283 If l_pm_product_code IS NOT NULL THEN
284 pa_pm_controls.Get_Project_actions_allowed
285 (P_PM_PRODUCT_CODE => l_pm_product_code,
286 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
287 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
288 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
289 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
290 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
291 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
292 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
293 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
294 P_ADD_TASK_ALLOWED => l_add_task_allowed,
295 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
296 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
297 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
298 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
299 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
300 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
301 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
302 P_ERROR_CODE => l_err_code,
303 P_ERROR_STACK => l_err_stack,
304 P_ERROR_STAGE => l_err_stage );
305 IF l_err_code <> 0 THEN
306 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
307 p_msg_name => l_err_stage);
308 END IF;
309 IF l_add_task_allowed = 'N' THEN
310 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
311 p_msg_name => 'PA_PR_PM_CANNOT_ADDTASK');
312 raise FND_API.G_EXC_ERROR;
313 END IF;
314 END IF;
315 END IF;
316
317 -- end hyau Bug 2852753
318
319 --dbms_output.put_line( 'Before check_task_mgr_name_or_id' );
320 --my_error_msg( 'Before check_task_mgr_name_or_id' );
321
322 --The following check is required bcoz AMG passes only task manager id but not task manager
323 --name. So for AMG p_check_id_flag should always be 'Y' not 'A'.
324 --Confirmed with Selva.
325
326 IF (p_calling_module = 'AMG')
327 THEN
328 --Check Task Manager and Task Manager Id
329 IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
330 (p_task_manager_name IS NOT NULL)) OR
331 ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
332 (p_task_manager_id IS NOT NULL)) THEN
333 --Call Check API.
334 pa_tasks_maint_utils.check_task_mgr_name_or_id(
335 p_task_mgr_name => p_task_manager_name,
336 p_task_mgr_id => p_task_manager_id,
337 p_project_id => p_project_id,
338 p_check_id_flag => 'Y',
339 x_task_mgr_id => l_task_manager_id,
340 x_return_status => l_return_status,
341 x_error_msg_code => l_error_msg_code);
342 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
343 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
344 p_msg_name => l_error_msg_code);
345 END IF;
346 END IF; --End Name-Id Conversion
347 END IF;
348
349 IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
350 --Check Task Manager and Task Manager Id
351
352 --dbms_output.put_line('task manager');
353 IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
354 (p_task_manager_name IS NOT NULL)) OR
355 ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
356 (p_task_manager_id IS NOT NULL)) THEN
357 --Call Check API.
358 pa_tasks_maint_utils.check_task_mgr_name_or_id(
359 p_task_mgr_name => p_task_manager_name,
360 p_task_mgr_id => p_task_manager_id,
361 p_project_id => p_project_id,
362 --p_check_id_flag => PA_STARTUP.G_Check_ID_Flag,
363 p_check_id_flag => 'A', --bug fix 2646762
364 x_task_mgr_id => l_task_manager_id,
365 x_return_status => l_return_status,
366 x_error_msg_code => l_error_msg_code);
367 --dbms_output.put_line( 'l_error_msg_code '||l_error_msg_code );
368 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
369 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
370 p_msg_name => l_error_msg_code);
371 END IF;
372 --dbms_output.put_line( 'Task manager id '||l_task_manager_id||'flag '||PA_STARTUP.G_Check_ID_Flag );
373 END IF; --End Name-Id Conversion
374
375 --dbms_output.put_line('carrying out org');
376 --Check Carrying out organization name and Carrying out organization Id
377 IF ((p_carrying_out_org_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
378 (p_carrying_out_org_name IS NOT NULL)) OR
379 ((p_carrying_out_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
380 (p_carrying_out_org_id IS NOT NULL)) THEN
381
382 --dbms_output.put_line( 'Before Check_OrgName_Or_Id' );
383
384 IF p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
385 THEN
386 l_carrying_out_org_id := FND_API.G_MISS_NUM;
387 ELSE
388 l_carrying_out_org_id := p_carrying_out_org_id;
389 END IF;
390
391 pa_hr_org_utils.Check_OrgName_Or_Id
392 (p_organization_id => l_carrying_out_org_id
393 ,p_organization_name => p_carrying_out_org_name
394 ,p_check_id_flag => 'Y'
395 -- ,x_organization_id => l_carrying_out_org_id * commented for Bug: 4537865
396 ,x_organization_id => l_new_carrying_out_org_id -- added for Bug: 4537865
397 ,x_return_status => l_return_status
398 ,x_error_msg_code => l_error_msg_code);
399
400 -- added for Bug: 4537865
401 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
402 l_carrying_out_org_id := l_new_carrying_out_org_id;
403 END IF;
404 -- added for Bug: 4537865
405
406 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
407 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
408 p_msg_name => l_error_msg_code);
409 END IF;
410 END IF; --End Name-Id Conversion
411 ELSE
412 l_task_manager_id := p_task_manager_id;
413 l_carrying_out_org_id := p_carrying_out_org_id;
414 END IF;
415
416 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
417 x_msg_count := FND_MSG_PUB.count_msg;
418 IF x_msg_count = 1 then
419 pa_interface_utils_pub.get_messages
420 (p_encoded => FND_API.G_TRUE,
421 p_msg_index => 1,
422 p_msg_count => l_msg_count,
423 p_msg_data => l_msg_data,
424 p_data => l_data,
425 p_msg_index_out => l_msg_index_out);
426 x_msg_data := l_data;
427 END IF;
428 raise FND_API.G_EXC_ERROR;
429 END IF;
430
431 IF ((p_task_progress_entry_page <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
432 (p_task_progress_entry_page IS NOT NULL)) OR
433 ((p_task_progress_entry_page_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
434 (p_task_progress_entry_page_id IS NOT NULL)) THEN
435
436 IF (p_task_progress_entry_page_ID = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
437 l_task_progress_entry_page_id := FND_API.G_MISS_NUM;
438 ELSE
439 l_task_progress_entry_page_id := p_task_progress_entry_page_id;
440 END IF;
441
442 pa_page_layout_utils.Check_pagelayout_Name_Or_Id(
443 p_pagelayout_name => p_task_progress_entry_page
444 ,p_pagetype_code => 'AI'
445 ,x_pagelayout_id => l_task_progress_entry_page_id
446 ,x_return_status => l_return_status
447 ,x_error_message_code => l_error_msg_code
448 );
449
450 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
451 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
452 p_msg_name => l_error_msg_code);
453 END IF;
454 END IF;
455
456 -- 3944597 Added code to validate task type , if it is not null and not G_PA_MISS_NUM
457 -- check task type is valid and effective
458 -- if it is not valid or not effective , throw error message
459
460 IF ( p_TYPE_ID IS NOT NULL AND p_TYPE_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN
461 IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_effective(p_TYPE_ID)) THEN
462 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_EFF_TASK_TYPE_ERR');
463 l_return_status := FND_API.G_RET_STS_ERROR;
464 END IF;
465 END IF;
466
467 -- 3944597 end
468
469 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
470 x_msg_count := FND_MSG_PUB.count_msg;
471 IF x_msg_count = 1 then
472 pa_interface_utils_pub.get_messages
473 (p_encoded => FND_API.G_TRUE,
474 p_msg_index => 1,
475 p_msg_count => l_msg_count,
476 p_msg_data => l_msg_data,
477 p_data => l_data,
478 p_msg_index_out => l_msg_index_out);
479 x_msg_data := l_data;
480 END IF;
481 raise FND_API.G_EXC_ERROR;
482 END IF;
483
484 --dbms_output.put_line( 'Inside CREATE_TASK API '||p_project_id );
485
486 --my_error_msg( 'Inside CREATE_TASK API '||p_project_id );
487
488 --my_error_msg( 'Ref Task Id in create task'||p_ref_task_id );
489
490 --dbms_output.put_line('create task pvt');
491 -- xxlu added task DFF attributes
492 PA_TASK_PVT1.Create_Task(
493 p_api_version => p_api_version
494 ,p_init_msg_list => p_init_msg_list
495 ,p_commit => p_commit
496 ,p_validate_only => p_validate_only
497 ,p_validation_level => p_validation_level
498 ,p_calling_module => p_calling_module
499 ,p_debug_mode => p_debug_mode
500 ,p_max_msg_count => p_max_msg_count
501 ,p_ref_task_id => p_ref_task_id
502 ,p_peer_or_sub => p_peer_or_sub
503 ,p_object_type => p_object_type
504 ,p_project_id => p_project_id
505 ,p_structure_id => p_structure_id
506 ,p_structure_version_id => p_structure_version_id
507 ,p_task_number => rtrim(p_task_number)
508 ,p_task_name => rtrim(p_task_name)
509 ,p_task_description => rtrim(p_task_description)
510 ,p_location_id => p_location_id
511 ,p_country => p_country
512 ,p_territory_code => p_territory_code
513 ,p_state_region => p_state_region
514 ,p_city => p_city
515 ,p_task_manager_id => l_task_manager_id
516 ,p_carrying_out_org_id => l_carrying_out_org_id
517 ,p_priority_code => p_priority_code
518 ,p_TYPE_ID => p_TYPE_ID
519 ,p_status_code => p_status_code
520 ,p_inc_proj_progress_flag => p_inc_proj_progress_flag
521 ,p_pm_product_code => p_pm_product_code
522 ,p_pm_task_reference => p_pm_task_reference
523 ,p_closed_date => p_closed_date
524 ,p_scheduled_start_date => p_scheduled_start_date
525 ,p_scheduled_finish_date => p_scheduled_finish_date
526 ,p_link_task_flag => p_link_task_flag
527 ,p_attribute_category => p_attribute_category
528 ,p_attribute1 => rtrim(p_attribute1)
529 ,p_attribute2 => rtrim(p_attribute2)
530 ,p_attribute3 => rtrim(p_attribute3)
531 ,p_attribute4 => rtrim(p_attribute4)
532 ,p_attribute5 => rtrim(p_attribute5)
533 ,p_attribute6 => rtrim(p_attribute6)
534 ,p_attribute7 => rtrim(p_attribute7)
535 ,p_attribute8 => rtrim(p_attribute8)
536 ,p_attribute9 => rtrim(p_attribute9)
537 ,p_attribute10 => rtrim(p_attribute10)
538 ,p_attribute11 => rtrim(p_attribute11)
539 ,p_attribute12 => rtrim(p_attribute12)
540 ,p_attribute13 => rtrim(p_attribute13)
541 ,p_attribute14 => rtrim(p_attribute14)
542 ,p_attribute15 => rtrim(p_attribute15)
543 ,p_address_id => p_address_id
544 ,p_address1 => p_address1
545 ,p_work_type_id => p_work_type_id
546 ,p_service_type_code => p_service_type_code
547 ,p_chargeable_flag => p_chargeable_flag
548 ,p_billable_flag => p_billable_flag
549 ,p_receive_project_invoice_flag => p_receive_project_invoice_flag
550 ,p_task_weighting_deriv_code => p_task_weighting_deriv_code
551 ,p_work_item_code => p_work_item_code
552 ,p_uom_code => p_uom_code
553 ,p_wq_actual_entry_code => p_wq_actual_entry_code
554 ,p_task_progress_entry_page_id => l_task_progress_entry_page_id
555 ,p_task_progress_entry_page => p_task_progress_entry_page
556 ,p_parent_structure_id => p_parent_structure_id
557 ,p_phase_code => p_phase_code
558 ,p_phase_version_id => p_phase_version_id
559 ,p_tk_attribute_category => p_tk_attribute_category
560 ,p_tk_attribute1 => p_tk_attribute1
561 ,p_tk_attribute2 => p_tk_attribute2
562 ,p_tk_attribute3 => p_tk_attribute3
563 ,p_tk_attribute4 => p_tk_attribute4
564 ,p_tk_attribute5 => p_tk_attribute5
565 ,p_tk_attribute6 => p_tk_attribute6
566 ,p_tk_attribute7 => p_tk_attribute7
567 ,p_tk_attribute8 => p_tk_attribute8
568 ,p_tk_attribute9 => p_tk_attribute9
569 ,p_tk_attribute10 => p_tk_attribute10
570 -- Begin : Added for FP_M changes Bug 3305199
571 ,p_structure_type => p_structure_type
572 ,p_financial_flag => p_financial_flag
573 ,p_Base_Perc_Comp_Deriv_Code => p_Base_Perc_Comp_Deriv_Code
574 -- End : Added for FP_M changes Bug 3305199
575 ,x_task_id => x_task_id
576 ,x_return_status => l_return_status
577 ,x_msg_count => l_msg_count
578 ,x_msg_data => l_msg_data
579 );
580 -- end xxlu changes
581 --dbms_output.put_line( 'After CREATE_TASK API ' );
582
583 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
584 x_msg_count := FND_MSG_PUB.count_msg;
585 IF x_msg_count = 1 then
586 pa_interface_utils_pub.get_messages
587 (p_encoded => FND_API.G_TRUE,
588 p_msg_index => 1,
589 p_msg_count => l_msg_count,
590 p_msg_data => l_msg_data,
591 p_data => l_data,
592 p_msg_index_out => l_msg_index_out);
593 x_msg_data := l_data;
594 END IF;
595 raise FND_API.G_EXC_ERROR;
596 END IF;
597
598 --x_task_id := l_task_id;
599 x_return_status := FND_API.G_RET_STS_SUCCESS;
600
601 IF (p_commit = FND_API.G_TRUE) THEN
602 COMMIT;
603 END IF;
604
605 IF (p_debug_mode = 'Y') THEN
606 pa_debug.debug('PA_TASK_PUB1.CREATE_TASK END');
607 END IF;
608 EXCEPTION
609 when FND_API.G_EXC_ERROR then
610 if p_commit = FND_API.G_TRUE then
611 rollback to create_task;
612 end if;
613 x_return_status := FND_API.G_RET_STS_ERROR;
614 when FND_API.G_EXC_UNEXPECTED_ERROR then
615 if p_commit = FND_API.G_TRUE then
616 rollback to create_task;
617 end if;
618 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
619 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
620 p_procedure_name => 'CREATE_TASK',
621 p_error_text => SUBSTRB(SQLERRM,1,240));
622 when OTHERS 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 raise;
631 END Create_Task;
632
633 -- API name : Update_Task
634 -- Type : Public procedure
635 -- Pre-reqs : None
636 -- Return Value : N/A
637 -- Prameters
638 -- p_api_version IN NUMBER N Not Null 1.0
639 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
640 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
641 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
642 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
643 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
644 -- p_debug_mode IN VARCHAR2 N Null N
645 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
646 -- p_task_id IN NUMBER N Not Null
647 -- p_task_number IN VARCHAR2 N Not Null
648 -- p_task_name IN VARCHAR2 N Not Null
649 -- p_task_description IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
650 -- p_location_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
651 -- p_country IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
652 -- p_territory_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
653 -- p_state_region IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
654 -- p_city IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
655 -- p_task_manager_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
656 -- p_task_manager_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
657 -- p_carrying_out_org_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
658 -- p_carrying_out_org_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
659 -- p_priority_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
660 -- p_TYPE_ID IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
661 -- p_status_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
662 -- p_inc_proj_progress_flag IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
663 -- p_pm_product_code IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
664 -- p_pm_task_reference IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
665 -- p_closed_date IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
666 -- p_transaction_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
667 -- p_transaction_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
668 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
669 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
670 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
671 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
672 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
673 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
674 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
675 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
676 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
677 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
678 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
679 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
680 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
681 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
682 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
683 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
684 -- p_record_version_number IN NUMBER N Not Null
685 -- x_return_status OUT VARCHAR2 N Null
686 -- x_msg_count OUT NUMBER N Null
687 -- x_msg_data OUT VARCHAR2 N Null
688 --
689 -- History
690 --
691 -- 23-OCT-01 Majid Ansari -Created
692 -- 31-JUL-02 H Siu -Added transaction dates
693 --
694
695 PROCEDURE Update_Task(
696 p_api_version IN NUMBER :=1.0,
697 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
698 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
699 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
700 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
701 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
702 p_debug_mode IN VARCHAR2 :='N',
703 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
704 p_ref_task_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
705 p_peer_or_sub IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
706 p_task_id IN NUMBER,
707 p_task_number IN VARCHAR2,
708 p_task_name IN VARCHAR2,
709 p_task_description IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
710 p_location_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
711 p_country IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
712 p_territory_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
713 p_state_region IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
714 p_city IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
715 p_task_manager_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
716 p_task_manager_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
717 p_carrying_out_org_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
718 p_carrying_out_org_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
719 p_priority_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
720 p_TYPE_ID IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
721 p_status_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
722 p_inc_proj_progress_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
723 p_pm_product_code IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
724 p_pm_task_reference IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
725 p_closed_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
726 p_transaction_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
727 p_transaction_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
728 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
729 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
730 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
731 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
732 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
733 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
734 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
735 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
736 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
737 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
738 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
739 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
740 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
741 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
742 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
743 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
744 p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
745 p_address1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
746 p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
747 p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
748 p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
749 p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
750 p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
751
752 p_task_weighting_deriv_code IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
753 p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
754 p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
755 p_wq_actual_entry_code IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
756 p_task_progress_entry_page_id IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
757 p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
758 p_parent_structure_id IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
759 p_phase_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
760 p_phase_version_id IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
761
762 p_record_version_number IN NUMBER,
763 -- xxlu added task DFF attributes
764 p_tk_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
765 p_tk_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
766 p_tk_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
767 p_tk_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
768 p_tk_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
769 p_tk_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
770 p_tk_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
771 p_tk_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
772 p_tk_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
773 p_tk_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
774 p_tk_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
775 -- end xxlu changes
776 p_Base_Perc_Comp_Deriv_Code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
777 p_gen_etc_src_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
778 -- Bug#3491609 : Workflow Chanegs FP M
779 p_wf_item_type IN pa_proj_elements.wf_item_type%TYPE :=NULL,
780 p_wf_process IN pa_proj_elements.wf_process%TYPE :=NULL,
781 p_wf_lead_days IN pa_proj_elements.wf_start_lead_days%TYPE :=NULL,
782 p_wf_enabled_flag IN pa_proj_elements.enable_wf_flag%TYPE :=NULL,
783 -- Bug#3491609 : Workflow Chanegs FP M
784 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
785 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
786 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
787 p_shared IN VARCHAR2 := 'X' -- Bug 3451073
788 ) IS
789 l_api_name CONSTANT VARCHAR(30) := 'UPDATE_TASK';
790 l_api_version CONSTANT NUMBER := 1.0;
791
792 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
793 l_return_status VARCHAR2(1);
794 l_msg_count NUMBER;
795 l_msg_data VARCHAR2(250);
796 l_data VARCHAR2(250);
797 l_msg_index_out NUMBER;
798 l_error_msg_code VARCHAR2(250);
799 l_dummy VARCHAR2(1);
800
801 l_carrying_out_org_id NUMBER;
802 -- added for bug 4537865
803 l_new_carrying_out_org_id NUMBER;
804 -- added for bug 4537865
805 l_task_manager_id NUMBER;
806 l_task_progress_entry_page_id NUMBER;
807
808 --task manager changes;
809 l_cur_task_mgr_person_id NUMBER;
810 l_cur_task_mgr_person VARCHAR2(250);
811 l_project_id NUMBER;
812
813 CURSOR get_mgr_info IS
814 select ppe.MANAGER_PERSON_ID, papf.FULL_NAME
815 from pa_proj_elements ppe, per_all_people_f papf
816 where ppe.proj_element_id = p_task_id
817 AND ppe.manager_person_id = papf.person_id
818 AND trunc(sysdate) between papf.effective_start_date
819 and nvl(papf.effective_end_date, sysdate+1); --Included by avaithia for Bug # 3448680
820 --end task manager changes
821
822 -- hyau Bug 2852753
823 l_delete_project_allowed VARCHAR2(1);
824 l_update_proj_num_allowed VARCHAR2(1);
825 l_update_proj_name_allowed VARCHAR2(1);
826 l_update_proj_desc_allowed VARCHAR2(1);
827 l_update_proj_dates_allowed VARCHAR2(1);
828 l_update_proj_status_allowed VARCHAR2(1);
829 l_update_proj_manager_allowed VARCHAR2(1);
830 l_update_proj_org_allowed VARCHAR2(1);
831 l_add_task_allowed VARCHAR2(1);
832 l_delete_task_allowed VARCHAR2(1);
833 l_update_task_num_allowed VARCHAR2(1);
834 l_update_task_name_allowed VARCHAR2(1);
835 l_update_task_dates_allowed VARCHAR2(1);
836 l_update_task_desc_allowed VARCHAR2(1);
837 l_update_parent_task_allowed VARCHAR2(1);
838 l_update_task_org_allowed VARCHAR2(1);
839
840 l_err_code NUMBER := 0;
841 l_err_stack VARCHAR2(200) := NULL;
842 l_err_stage VARCHAR2(200) := NULL;
843
844 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
845
846 CURSOR get_product_code ( c_project_id NUMBER ) IS
847 SELECT pm_product_code
848 FROM PA_PROJECTS_ALL
849 WHERE project_id = c_project_id;
850
851 l_cur_project_id NUMBER;
852 CURSOR cur_proj_id IS
853 SELECT project_id
854 FROM pa_proj_elements
855 WHERE proj_element_id = p_task_id;
856
857 CURSOR cur_trans_dates ( c_task_id NUMBER ) IS
858 SELECT START_DATE, COMPLETION_DATE
859 FROM pa_tasks
860 WHERE task_id = c_task_id;
861
862 CURSOR cur_task_attr IS
863 SELECT pe.ELEMENT_NUMBER, pe.NAME, pe.DESCRIPTION, hou.name
864 FROM pa_proj_elements pe, hr_all_organization_units hou
865 WHERE pe.proj_element_id = p_task_id
866 AND pe.carrying_out_organization_id = hou.organization_id;
867
868 --Bug 3940203 avaithia <start>
869 CURSOR cur_is_fin_task IS
870 SELECT task_id
871 FROM PA_TASKS
872 WHERE task_id = p_task_id ;
873
874 l_tsk_id PA_TASKS.task_id%TYPE ;
875 l_err_message fnd_new_messages.message_text%TYPE ;
876 --Bug 3940203 avaithia <End>
877
878 l_trans_start_date DATE;
879 l_trans_finish_date DATE;
880 l_task_number VARCHAR2(100);
881 l_task_name VARCHAR2(240);
882 l_task_description VARCHAR2(2000);
883 l_organization_name VARCHAR2(240);
884
885 -- end hyau Bug 2852753
886 BEGIN
887
888 --dbms_output.put_line( 'Entered ' );
889
890 pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK');
891
892 IF (p_debug_mode = 'Y') THEN
893 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK begin');
894 END IF;
895
896 IF (p_commit = FND_API.G_TRUE) THEN
897 savepoint update_Task;
898 END IF;
899
900 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
901 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
902 END IF;
903
904
905 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
906 FND_MSG_PUB.initialize;
907 END IF;
908
909 --Bug 3940203 avaithia <<Start>>
910 -- From Forms and SelfService ,User should not be able to null out Organisation Field
911 -- for Financial Tasks (because Organisation field is a NOT NULL Column in pa_tasks table)
912
913 -- Actually ,If No Org. Value is passed from UI ,(If user explicitly nulls out the org. field)
914 -- in PA_TASKS table , the Org. for the task is defaulted as the Project's Org.
915
916 -- Current Behaviour is : Though it is populating default org.id (project's org.id) for task
917 -- in pa_tasks table,In UI it is showing Org. field as NULL
918
919 -- We should not allow this (Org. field being nulled out )
920 -- Note : Same should be the case with AMG also .Because ,AMG changes will be reflected in UI
921
922 IF p_calling_module = 'SELF_SERVICE' OR
923 p_calling_module = 'FORMS' OR
924 p_calling_module = 'AMG'
925 THEN
926 OPEN cur_is_fin_task ;
927 FETCH cur_is_fin_task INTO l_tsk_id ;
928
929 IF cur_is_fin_task%FOUND THEN
930 CLOSE cur_is_fin_task ;
931 --The task is a financial task
932 --So,If Organisation is passed as NULL
933 --Then throw error message
934
935 --In Self Service ,We pass Organisation Name anyway.So,If it is not passed throw error
936 --In FORMS / AMG ,We may be getting the Org. ID .So,Check If any of name or id is available,it is ok.
937 -- If both are not available then throw error.
938
939 IF (p_carrying_out_org_name IS NULL)
940 OR (p_carrying_out_org_name =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
941
942 l_err_message := FND_MESSAGE.GET_STRING('PA','PA_SU_NO_ORG');
943 --Now,Organisation Name is not passed .
944 --If it is AMG /FORMS ,If Org.Id is not also there ,throw error
945 IF p_calling_module = 'AMG' OR p_calling_module = 'FORMS' THEN
946
947 IF (p_carrying_out_org_id IS NULL)
948 THEN /*We should not check for MISS_NUM In case of AMG/FORMS - Review Comment Incorporated :3940203 */
949
950 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
951 p_msg_name => 'PA_PS_TASK_NAME_NUM_ERR',
952 p_token1 => 'TASK_NAME',
953 p_value1 => p_task_name,
954 p_token2 => 'TASK_NUMBER',
955 p_value2 => p_task_number,
956 p_token3 => 'MESSAGE',
957 p_value3 => l_err_message);
958 RAISE FND_API.G_EXC_ERROR ;
959 END IF;
960
961 ELSE -- This is case of Self Service
962 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
963 p_msg_name => 'PA_PS_TASK_NAME_NUM_ERR',
964 p_token1 => 'TASK_NAME',
965 p_value1 => p_task_name,
966 p_token2 => 'TASK_NUMBER',
967 p_value2 => p_task_number,
968 p_token3 => 'MESSAGE',
969 p_value3 => l_err_message);
970 RAISE FND_API.G_EXC_ERROR ;
971 END IF ; --End If AMG Context
972 END IF; --End If Org.Name is NULL
973 END IF; --End If Financial Task
974
975 END IF;
976
977 --Bug 3940203 avaithia <<End>>
978
979 -- hyau Bug 2852753
980 IF p_calling_module = 'SELF_SERVICE' THEN
981
982 OPEN cur_proj_id;
983 FETCH cur_proj_id INTO l_cur_project_id;
984 CLOSE cur_proj_id;
985
986 OPEN get_product_code(l_cur_project_id);
987 FETCH get_product_code INTO l_pm_product_code;
988 CLOSE get_product_code;
989
990 If l_pm_product_code IS NOT NULL THEN
991 pa_pm_controls.Get_Project_actions_allowed
992 (P_PM_PRODUCT_CODE => l_pm_product_code,
993 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
994 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
995 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
996 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
997 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
998 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
999 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
1000 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
1001 P_ADD_TASK_ALLOWED => l_add_task_allowed,
1002 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
1003 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
1004 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
1005 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
1006 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
1007 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
1008 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
1009 P_ERROR_CODE => l_err_code,
1010 P_ERROR_STACK => l_err_stack,
1011 P_ERROR_STAGE => l_err_stage );
1012
1013 IF l_err_code <> 0 THEN
1014 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1015 p_msg_name => l_err_stage);
1016 END IF;
1017
1018 OPEN cur_task_attr;
1019 FETCH cur_task_attr INTO l_task_number, l_task_name, l_task_description, l_organization_name;
1020 CLOSE cur_task_attr;
1021
1022 -- Check Update Task number
1023 IF ( l_task_number <> p_task_number ) THEN
1024 IF l_update_task_num_allowed = 'N' THEN
1025 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1026 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_NUM');
1027 raise FND_API.G_EXC_ERROR;
1028 END IF;
1029 END IF;
1030
1031 -- Check Update Task Name
1032 IF ( l_task_name <> p_task_name ) THEN
1033 IF l_update_task_name_allowed = 'N' THEN
1034 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1035 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_NAME');
1036 raise FND_API.G_EXC_ERROR;
1037 END IF;
1038 END IF;
1039
1040 -- If financial task exists, Check Update Task Date
1041 IF ('Y' = PA_PROJECT_DATES_UTILS.CHECK_FINANCIAL_TASK_EXISTS(p_proj_element_id => p_task_id)) THEN
1042 OPEN cur_trans_dates(p_task_id);
1043 FETCH cur_trans_dates INTO l_trans_start_date, l_trans_finish_date;
1044 CLOSE cur_trans_dates;
1045
1046 -- if dates are different then check the pm controls
1047 IF ( nvl(p_transaction_start_date, sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) OR
1048 ( nvl(p_transaction_finish_date, sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) THEN
1049
1050 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
1051 ( 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
1052 ( l_trans_start_date is null and p_transaction_start_date is not null) OR
1053 ( l_trans_start_date is not null and p_transaction_start_date is null) OR
1054 ( l_trans_finish_date is null and p_transaction_finish_date is not null) OR
1055 ( l_trans_finish_date is not null and p_transaction_finish_date is null) THEN
1056 IF l_update_task_dates_allowed = 'N' THEN
1057 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1058 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_DATES');
1059 raise FND_API.G_EXC_ERROR;
1060 END IF;
1061 END IF;
1062 END IF;
1063 END IF;
1064
1065 -- Check Update Task Description
1066 IF (l_task_description is not null and p_task_description is not null and l_task_description <> p_task_description ) OR
1067 (l_task_description is null and p_task_description is not null) OR
1068 (l_task_description is not null and p_task_description is null) THEN
1069 IF l_update_task_desc_allowed = 'N' THEN
1070 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1071 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_DESC');
1072 raise FND_API.G_EXC_ERROR;
1073 END IF;
1074 END IF;
1075
1076 -- Check Update Task Organization
1077 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
1078 (l_organization_name is null and p_carrying_out_org_name is not null) OR
1079 (l_organization_name is not null and p_carrying_out_org_name is null) THEN
1080 IF l_update_task_org_allowed = 'N' THEN
1081 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1082 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_ORG');
1083 raise FND_API.G_EXC_ERROR;
1084 END IF;
1085 END IF;
1086
1087 END IF;
1088 END IF;
1089
1090 -- end hyau Bug 2852753
1091
1092
1093 --dbms_output.put_line( 'Lock row ' );
1094
1095 IF (p_calling_module <> 'FORMS')
1096 THEN
1097 --Lock row
1098 IF( p_validate_only <> FND_API.G_TRUE) THEN
1099 BEGIN
1100 select 'x' into l_dummy
1101 from PA_PROJ_ELEMENTS
1102 where proj_element_id = p_task_id
1103 and record_version_number = p_record_version_number
1104 for update of record_version_number NOWAIT;
1105 EXCEPTION
1106 WHEN TIMEOUT_ON_RESOURCE THEN
1107 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1108 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1109 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1110 WHEN NO_DATA_FOUND THEN
1111 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1112 p_msg_name => 'PA_XC_RECORD_CHANGED');
1113 l_msg_data := 'PA_XC_RECORD_CHANGED';
1114 WHEN OTHERS THEN
1115 IF SQLCODE = -54 then
1116 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1117 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1118 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1119 ELSE
1120 raise;
1121 END IF;
1122 END;
1123 ELSE
1124 --dbms_output.put_line( 'check record_version_number ' );
1125
1126 --check record_version_number
1127 BEGIN
1128 select 'x' into l_dummy
1129 from PA_PROJ_ELEMENTS
1130 where proj_element_id = p_task_id
1131 and record_version_number = p_record_version_number;
1132 EXCEPTION
1133 WHEN NO_DATA_FOUND THEN
1134 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1135 p_msg_name => 'PA_XC_RECORD_CHANGED');
1136 l_msg_data := 'PA_XC_RECORD_CHANGED';
1137 WHEN OTHERS THEN
1138 RAISE;
1139 END;
1140 END IF;
1141
1142 l_msg_count := FND_MSG_PUB.count_msg;
1143
1144 IF l_msg_count > 0 THEN
1145 x_msg_count := l_msg_count;
1146 x_return_status := 'E';
1147 RAISE FND_API.G_EXC_ERROR;
1148 END IF;
1149 END IF;
1150
1151 --Bug 2168170
1152 IF p_task_number IS NULL
1153 THEN
1154 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1155 p_msg_name => 'PA_PS_TASK_NUMBER_NULL');
1156 raise FND_API.G_EXC_ERROR;
1157 END IF;
1158
1159 IF p_task_name IS NULL
1160 THEN
1161 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1162 p_msg_name => 'PA_PS_TASK_NAME_NULL');
1163 raise FND_API.G_EXC_ERROR;
1164 END IF;
1165
1166 --Bug 2168170
1167
1168 --dbms_output.put_line( 'Before calling Name to Id conv ' );
1169
1170 --my_error_msg( 'Before calling Name to Id conv. ' );
1171 --The following check is required bcoz AMG passes only task manager id but not task manager
1172 --name. So for AMG p_check_id_flag should always be 'Y' not 'A'.
1173 --Confirmed with Selva.
1174
1175 IF (p_calling_module = 'AMG')
1176 THEN
1177 --Check Task Manager and Task Manager Id
1178 IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1179 (p_task_manager_name IS NOT NULL)) OR
1180 ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1181 (p_task_manager_id IS NOT NULL)) THEN
1182 --Call Check API.
1183 select project_id into l_project_id
1184 from PA_PROJ_ELEMENTS
1185 where proj_element_id = p_task_id;
1186
1187 select MANAGER_PERSON_ID into l_cur_task_mgr_person_id
1188 from pa_proj_elements
1189 where proj_element_id = p_task_id;
1190
1191 If (p_task_manager_id <> l_cur_task_mgr_person_id)
1192 OR (l_cur_task_mgr_person_id IS NULL)
1193 OR (p_task_manager_id IS NULL) THEN
1194 --end changes for task manager
1195
1196 pa_tasks_maint_utils.check_task_mgr_name_or_id(
1197 p_task_mgr_name => p_task_manager_name,
1198 p_task_mgr_id => p_task_manager_id,
1199 p_project_id => l_project_id,
1200 p_check_id_flag => 'Y',
1201 x_task_mgr_id => l_task_manager_id,
1202 x_return_status => l_return_status,
1203 x_error_msg_code => l_error_msg_code);
1204 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1205 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1206 p_msg_name => l_error_msg_code);
1207 raise FND_API.G_EXC_ERROR; -- bug 4165509
1208 END IF;
1209 ELSE
1210 l_task_manager_id := l_cur_task_mgr_person_id;
1211 END IF;
1212 END IF; --End Name-Id Conversion
1213 END IF;
1214
1215 IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
1216 --Check Task Manager and Task Manager Id
1217 /* Bug 2769960 -- added check for task_manager is passed as null
1218 If task manager is passed as null it means user want to remove task manager.
1219 there is no way in self service, so that mgr_id is passed but not mgr_name
1220 */
1221 IF p_task_manager_name IS NULL THEN
1222 l_task_manager_id := null;
1223 ELSIF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1224 (p_task_manager_name IS NOT NULL)) THEN
1225 --Call Check API.
1226 --added for task manager changes
1227 select project_id into l_project_id
1228 from PA_PROJ_ELEMENTS
1229 where proj_element_id = p_task_id;
1230
1231 OPEN get_mgr_info;
1232 FETCH get_mgr_info INTO l_cur_task_mgr_person_id, l_cur_task_mgr_person;
1233 CLOSE get_mgr_info;
1234
1235 If (p_task_manager_id <> l_cur_task_mgr_person_id or p_task_manager_name <> l_cur_task_mgr_person)
1236 --hsiu: added for bug 2688475
1237 --need these validation for expired project members
1238 -- who are still task managers
1239 OR (l_cur_task_mgr_person_id IS NULL)
1240 OR (p_task_manager_id IS NULL)
1241 OR (l_cur_task_mgr_person IS NULL)
1242 OR (p_task_manager_name IS NULL) THEN
1243 --end changes for task manager
1244
1245 pa_tasks_maint_utils.check_task_mgr_name_or_id(
1246 p_task_mgr_name => p_task_manager_name,
1247 p_task_mgr_id => p_task_manager_id,
1248 p_project_id => l_project_id,
1249 p_check_id_flag => 'A', --bug fix 2646762
1250 x_task_mgr_id => l_task_manager_id,
1251 x_return_status => l_return_status,
1252 x_error_msg_code => l_error_msg_code);
1253
1254 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1255 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1256 p_msg_name => l_error_msg_code);
1257 raise FND_API.G_EXC_ERROR; -- bug 4165509
1258 END IF;
1259
1260 --task manager changes
1261 --hsiu: added for bug 2688475
1262 ELSE
1263 l_task_manager_id := l_cur_task_mgr_person_id;
1264 END IF;
1265 --end task manager changes
1266 END IF; --End Name-Id Conversion
1267
1268 --Check Carrying out organization name and Carrying out organization Id
1269 IF ((p_carrying_out_org_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1270 (p_carrying_out_org_name IS NOT NULL)) OR
1271 ((p_carrying_out_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1272 (p_carrying_out_org_id IS NOT NULL)) THEN
1273 --dbms_output.put_line( 'Before calling Name to Id conv : Check_OrgName_Or_Id' );
1274
1275 --dbms_output.put_line( 'Before Id to name p_carrying_out_org_id '||p_carrying_out_org_id );
1276 --dbms_output.put_line( 'Before Id to name p_carrying_out_org_name '||p_carrying_out_org_name );
1277
1278 --my_error_msg( 'p_carrying_out_org_id '||p_carrying_out_org_id );
1279 --my_error_msg( 'p_carrying_out_org_name '||p_carrying_out_org_name );
1280
1281 IF p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1282 THEN
1283 l_carrying_out_org_id := FND_API.G_MISS_NUM;
1284 ELSE
1285 l_carrying_out_org_id := p_carrying_out_org_id;
1286 END IF;
1287
1288 pa_hr_org_utils.Check_OrgName_Or_Id
1289 (p_organization_id => l_carrying_out_org_id
1290 ,p_organization_name => p_carrying_out_org_name
1291 ,p_check_id_flag => 'A'
1292 --,x_organization_id => l_carrying_out_org_id * commented for Bug: 4537865
1293 ,x_organization_id => l_new_carrying_out_org_id -- added for bug 4537865
1294 ,x_return_status => l_return_status
1295 ,x_error_msg_code => l_error_msg_code);
1296
1297 -- added for bug 4537865
1298 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1299 l_carrying_out_org_id := l_new_carrying_out_org_id;
1300 END IF;
1301 -- added for bug 4537865
1302 --dbms_output.put_line( 'After Id to name p_carrying_out_org_id '||p_carrying_out_org_id );
1303 --dbms_output.put_line( 'After Id to name l_carrying_out_org_id '||l_carrying_out_org_id );
1304
1305
1306 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1307 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1308 p_msg_name => l_error_msg_code);
1309 END IF;
1310 END IF; --End Name-Id Conversion
1311 ELSE
1312 l_task_manager_id := p_task_manager_id;
1313 l_carrying_out_org_id := p_carrying_out_org_id;
1314 END IF;
1315 --dbms_output.put_line( 'After calling Name to Id conv : Check_OrgName_Or_Id' );
1316 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1317 x_msg_count := FND_MSG_PUB.count_msg;
1318 IF x_msg_count = 1 then
1319 pa_interface_utils_pub.get_messages
1320 (p_encoded => FND_API.G_TRUE,
1321 p_msg_index => 1,
1322 p_msg_count => l_msg_count,
1323 p_msg_data => l_msg_data,
1324 p_data => l_data,
1325 p_msg_index_out => l_msg_index_out);
1326 x_msg_data := l_data;
1327 END IF;
1328 raise FND_API.G_EXC_ERROR;
1329 END IF;
1330
1331 IF ((p_task_progress_entry_page <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1332 (p_task_progress_entry_page IS NOT NULL)) OR
1333 ((p_task_progress_entry_page_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1334 (p_task_progress_entry_page_id IS NOT NULL)) THEN
1335
1336 IF (p_task_progress_entry_page_ID = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1337 l_task_progress_entry_page_id := FND_API.G_MISS_NUM;
1338 ELSE
1339 l_task_progress_entry_page_id := p_task_progress_entry_page_id;
1340 END IF;
1341
1342 pa_page_layout_utils.Check_pagelayout_Name_Or_Id(
1343 p_pagelayout_name => p_task_progress_entry_page
1344 ,p_pagetype_code => 'AI'
1345 ,x_pagelayout_id => l_task_progress_entry_page_id
1346 ,x_return_status => l_return_status
1347 ,x_error_message_code => l_error_msg_code
1348 );
1349
1350 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1351 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1352 p_msg_name => l_error_msg_code);
1353 END IF;
1354
1355
1356 END IF;
1357
1358 /*Bug 4089623 Lead Days Cannot be negative */
1359 IF ( nvl(p_wf_lead_days,0) < 0 )
1360 THEN
1361 PA_UTILS.add_message('PA','PA_INVALID_LEAD_DAYS');
1362 l_return_status := FND_API.G_RET_STS_ERROR;
1363 END IF;
1364
1365 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1366 x_msg_count := FND_MSG_PUB.count_msg;
1367 IF x_msg_count = 1 then
1368 pa_interface_utils_pub.get_messages
1369 (p_encoded => FND_API.G_TRUE,
1370 p_msg_index => 1,
1371 p_msg_count => l_msg_count,
1372 p_msg_data => l_msg_data,
1373 p_data => l_data,
1374 p_msg_index_out => l_msg_index_out);
1375 x_msg_data := l_data;
1376 END IF;
1377 raise FND_API.G_EXC_ERROR;
1378 END IF;
1379
1380 --my_error_msg( 'Before calling private API. ' );
1381
1382 --dbms_output.put_line( 'Before calling private API.' );
1383 PA_TASK_PVT1.Update_Task(
1384 p_api_version => p_api_version
1385 ,p_init_msg_list => p_init_msg_list
1386 ,p_commit => p_commit
1387 ,p_validate_only => p_validate_only
1388 ,p_validation_level => p_validation_level
1389 ,p_calling_module => p_calling_module
1390 ,p_debug_mode => p_debug_mode
1391 ,p_max_msg_count => p_max_msg_count
1392 ,p_ref_task_id => p_ref_task_id
1393 ,p_peer_or_sub => p_peer_or_sub
1394 ,p_task_id => p_task_id
1395 ,p_task_number => rtrim(p_task_number)
1396 ,p_task_name => rtrim(p_task_name)
1397 ,p_task_description => rtrim(p_task_description)
1398 ,p_location_id => p_location_id
1399 ,p_country => p_country
1400 ,p_territory_code => p_territory_code
1401 ,p_state_region => p_state_region
1402 ,p_city => p_city
1403 ,p_task_manager_id => l_task_manager_id
1404 ,p_carrying_out_org_id => l_carrying_out_org_id
1405 ,p_priority_code => p_priority_code
1406 ,p_TYPE_ID => p_TYPE_ID
1407 ,p_status_code => p_status_code
1408 ,p_inc_proj_progress_flag => p_inc_proj_progress_flag
1409 ,p_pm_product_code => p_pm_product_code
1410 ,p_pm_task_reference => p_pm_task_reference
1411 ,p_closed_date => p_closed_date
1412 ,p_transaction_start_date => p_transaction_start_date
1413 ,p_transaction_finish_date => p_transaction_finish_date
1414 ,p_attribute_category => p_attribute_category
1415 ,p_attribute1 => rtrim(p_attribute1)
1416 ,p_attribute2 => rtrim(p_attribute2)
1417 ,p_attribute3 => rtrim(p_attribute3)
1418 ,p_attribute4 => rtrim(p_attribute4)
1419 ,p_attribute5 => rtrim(p_attribute5)
1420 ,p_attribute6 => rtrim(p_attribute6)
1421 ,p_attribute7 => rtrim(p_attribute7)
1422 ,p_attribute8 => rtrim(p_attribute8)
1423 ,p_attribute9 => rtrim(p_attribute9)
1424 ,p_attribute10 => rtrim(p_attribute10)
1425 ,p_attribute11 => rtrim(p_attribute11)
1426 ,p_attribute12 => rtrim(p_attribute12)
1427 ,p_attribute13 => rtrim(p_attribute13)
1428 ,p_attribute14 => rtrim(p_attribute14)
1429 ,p_attribute15 => rtrim(p_attribute15)
1430 ,p_address_id => p_address_id
1431 ,p_address1 => p_address1
1432 ,p_work_type_id => p_work_type_id
1433 ,p_service_type_code => p_service_type_code
1434 ,p_chargeable_flag => p_chargeable_flag
1435 ,p_billable_flag => p_billable_flag
1436 ,p_receive_project_invoice_flag => p_receive_project_invoice_flag
1437 ,p_task_weighting_deriv_code => p_task_weighting_deriv_code
1438 ,p_work_item_code => p_work_item_code
1439 ,p_uom_code => p_uom_code
1440 ,p_wq_actual_entry_code => p_wq_actual_entry_code
1441 ,p_task_progress_entry_page_id => l_task_progress_entry_page_id
1442 ,p_task_progress_entry_page => p_task_progress_entry_page
1443 ,p_parent_structure_id => p_parent_structure_id
1444 ,p_phase_code => p_phase_code
1445 ,p_phase_version_id => p_phase_version_id
1446
1447 ,p_record_version_number => p_record_version_number
1448 ,p_tk_attribute_category => p_tk_attribute_category
1449 ,p_tk_attribute1 => p_tk_attribute1
1450 ,p_tk_attribute2 => p_tk_attribute2
1451 ,p_tk_attribute3 => p_tk_attribute3
1452 ,p_tk_attribute4 => p_tk_attribute4
1453 ,p_tk_attribute5 => p_tk_attribute5
1454 ,p_tk_attribute6 => p_tk_attribute6
1455 ,p_tk_attribute7 => p_tk_attribute7
1456 ,p_tk_attribute8 => p_tk_attribute8
1457 ,p_tk_attribute9 => p_tk_attribute9
1458 ,p_tk_attribute10 => p_tk_attribute10
1459 -- Begin : Added for FP_M changes Bug 3305199
1460 ,p_Base_Perc_Comp_Deriv_Code => p_Base_Perc_Comp_Deriv_Code
1461 -- End : Added for FP_M changes Bug 3305199
1462 ,p_gen_etc_src_code => p_gen_etc_src_code
1463 ,p_wf_item_type => p_wf_item_type
1464 ,p_wf_process => p_wf_process
1465 ,p_wf_lead_days => p_wf_lead_days
1466 ,p_wf_enabled_flag => p_wf_enabled_flag
1467 ,x_return_status => l_return_status
1468 ,x_msg_count => x_msg_count
1469 ,x_msg_data => x_msg_data
1470 ,p_shared => p_shared -- Bug 3451073
1471 );
1472
1473 --dbms_output.put_line( 'After calling private API.' );
1474
1475 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1476 x_msg_count := FND_MSG_PUB.count_msg;
1477 IF x_msg_count = 1 then
1478 pa_interface_utils_pub.get_messages
1479 (p_encoded => FND_API.G_TRUE,
1480 p_msg_index => 1,
1481 p_msg_count => l_msg_count,
1482 p_msg_data => l_msg_data,
1483 p_data => l_data,
1484 p_msg_index_out => l_msg_index_out);
1485 x_msg_data := l_data;
1486 END IF;
1487 raise FND_API.G_EXC_ERROR;
1488 END IF;
1489
1490 x_return_status := FND_API.G_RET_STS_SUCCESS;
1491
1492 IF (p_commit = FND_API.G_TRUE) THEN
1493 COMMIT;
1494 END IF;
1495
1496 IF (p_debug_mode = 'Y') THEN
1497 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK END');
1498 END IF;
1499 EXCEPTION
1500 when FND_API.G_EXC_ERROR then
1501 if p_commit = FND_API.G_TRUE then
1502 rollback to update_task;
1503 end if;
1504 x_return_status := FND_API.G_RET_STS_ERROR;
1505 when FND_API.G_EXC_UNEXPECTED_ERROR then
1506 if p_commit = FND_API.G_TRUE then
1507 rollback to update_task;
1508 end if;
1509 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1510 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1511 p_procedure_name => 'UPDATE_TASK',
1512 p_error_text => SUBSTRB(SQLERRM,1,240));
1513 when OTHERS 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_UNEXP_ERROR;
1518 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1519 p_procedure_name => 'UPDATE_TASK',
1520 p_error_text => SUBSTRB(SQLERRM,1,240));
1521 raise;
1522
1523 END Update_Task;
1524
1525 -- API name : Create_Task_version
1526 -- Type : Public procedure
1527 -- Pre-reqs : None
1528 -- Return Value : N/A
1529 -- Prameters
1530 -- p_api_version IN NUMBER N Not Null 1.0
1531 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
1532 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
1533 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
1534 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
1535 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
1536 -- p_debug_mode IN VARCHAR2 N Null N
1537 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1538 -- p_ref_task_version_id IN NUMBER N Not Null
1539 -- p_peer_or_sub IN VARCHAR2 N Not Null
1540 -- p_task_id IN NUMBER N Not Null
1541 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1542 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1543 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1544 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1545 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1546 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1547 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1548 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1549 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1550 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1551 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1552 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1553 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1554 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1555 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1556 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1557 -- x_task_version_id OUT NUMBER N Null
1558 -- x_return_status OUT VARCHAR2 N Null
1559 -- x_msg_count OUT NUMBER N Null
1560 -- x_msg_data OUT VARCHAR2 N Null
1561 --
1562 -- History
1563 --
1564 -- 23-OCT-01 Majid Ansari -Created
1565 --
1566
1567 PROCEDURE Create_Task_Version(
1568 p_api_version IN NUMBER :=1.0,
1569 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
1570 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
1571 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
1572 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
1573 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
1574 p_debug_mode IN VARCHAR2 :='N',
1575 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1576 p_ref_task_version_id IN NUMBER,
1577 p_peer_or_sub IN VARCHAR2,
1578 p_task_id IN NUMBER,
1579 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1580 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1581 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1582 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1583 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1584 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1585 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1586 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1587 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1588 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1589 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1590 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1591 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1592 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1593 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1594 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1595
1596 p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1597 p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
1598 --bug 3301192
1599 p_financial_task_flag IN VARCHAR2 := 'N',
1600 --bug 3301192
1601 x_task_version_id OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1602 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1603 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1604 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1605 ) IS
1606 l_api_name CONSTANT VARCHAR(30) := 'CREATE_TASK_VERSION';
1607 l_api_version CONSTANT NUMBER := 1.0;
1608
1609 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1610 l_return_status VARCHAR2(1);
1611 l_msg_count NUMBER;
1612 l_msg_data VARCHAR2(250);
1613 l_data VARCHAR2(250);
1614 l_msg_index_out NUMBER;
1615 l_error_msg_code VARCHAR2(250);
1616
1617 l_carrying_out_org_id NUMBER;
1618 l_task_manager_id NUMBER;
1619 BEGIN
1620
1621 pa_debug.init_err_stack ('PA_TASK_PUB1.CREATE_TASK_VERSION');
1622
1623 IF (p_debug_mode = 'Y') THEN
1624 pa_debug.debug('PA_TASK_PUB1.CREATE_TASK_VERSION begin');
1625 END IF;
1626
1627 IF (p_commit = FND_API.G_TRUE) THEN
1628 savepoint create_Task_version;
1629 END IF;
1630
1631 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
1632 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1633 END IF;
1634
1635
1636 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
1637 FND_MSG_PUB.initialize;
1638 END IF;
1639
1640 --dbms_output.put_line( 'Before private API' );
1641
1642 PA_TASK_PVT1.Create_Task_Version(
1643 p_api_version => p_api_version
1644 ,p_init_msg_list => p_init_msg_list
1645 ,p_commit => p_commit
1646 ,p_validate_only => p_validate_only
1647 ,p_validation_level => p_validation_level
1648 ,p_calling_module => p_calling_module
1649 ,p_debug_mode => p_debug_mode
1650 ,p_max_msg_count => p_max_msg_count
1651 ,p_ref_task_version_id => p_ref_task_version_id
1652 ,p_peer_or_sub => p_peer_or_sub
1653 ,p_task_id => p_task_id
1654 ,p_attribute_category => p_attribute_category
1655 ,p_attribute1 => p_attribute1
1656 ,p_attribute2 => p_attribute2
1657 ,p_attribute3 => p_attribute3
1658 ,p_attribute4 => p_attribute4
1659 ,p_attribute5 => p_attribute5
1660 ,p_attribute6 => p_attribute6
1661 ,p_attribute7 => p_attribute7
1662 ,p_attribute8 => p_attribute8
1663 ,p_attribute9 => p_attribute9
1664 ,p_attribute10 => p_attribute10
1665 ,p_attribute11 => p_attribute11
1666 ,p_attribute12 => p_attribute12
1667 ,p_attribute13 => p_attribute13
1668 ,p_attribute14 => p_attribute14
1669 ,p_attribute15 => p_attribute15
1670 ,p_WEIGHTING_PERCENTAGE => p_WEIGHTING_PERCENTAGE
1671 ,p_TASK_UNPUB_VER_STATUS_CODE => p_TASK_UNPUB_VER_STATUS_CODE
1672 ,p_financial_task_flag => p_financial_task_flag -- FP_M changes : Bug 3305199 : Bhumesh
1673 ,x_task_version_id => x_task_version_id
1674 ,x_return_status => x_return_status
1675 ,x_msg_count => x_msg_count
1676 ,x_msg_data => x_msg_data
1677 );
1678
1679 --dbms_output.put_line( 'Status after private call in public API '||x_return_status );
1680 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1681 --IF (x_return_status <> 'S' ) THEN
1682 x_msg_count := FND_MSG_PUB.count_msg;
1683 IF x_msg_count = 1 then
1684 pa_interface_utils_pub.get_messages
1685 (p_encoded => FND_API.G_TRUE,
1686 p_msg_index => 1,
1687 p_msg_count => l_msg_count,
1688 p_msg_data => l_msg_data,
1689 p_data => l_data,
1690 p_msg_index_out => l_msg_index_out);
1691 x_msg_data := l_data;
1692 END IF;
1693 --dbms_output.put_line( 'raising exception '||x_return_status );
1694
1695 raise FND_API.G_EXC_ERROR;
1696 END IF;
1697
1698 --dbms_output.put_line( 'Final status '||x_return_status );
1699
1700 x_return_status := FND_API.G_RET_STS_SUCCESS;
1701
1702 --dbms_output.put_line( 'Final status asasas'||x_return_status );
1703
1704 IF (p_commit = FND_API.G_TRUE) THEN
1705 COMMIT;
1706 END IF;
1707
1708 IF (p_debug_mode = 'Y') THEN
1709 pa_debug.debug('PA_PROJECT_STRUCTURE_PUB1.CREATE_TASK_VERSION END');
1710 END IF;
1711 EXCEPTION
1712 when FND_API.G_EXC_ERROR then
1713 if p_commit = FND_API.G_TRUE then
1714 rollback to create_task_version;
1715 end if;
1716 x_return_status := FND_API.G_RET_STS_ERROR;
1717 --dbms_output.put_line( 'Status in public API exception '||x_return_status );
1718
1719 when FND_API.G_EXC_UNEXPECTED_ERROR then
1720 if p_commit = FND_API.G_TRUE then
1721 rollback to create_task_version;
1722 end if;
1723 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1724 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1725 p_procedure_name => 'CREATE_TASK_VERSION',
1726 p_error_text => SUBSTRB(SQLERRM,1,240));
1727 when OTHERS then
1728 if p_commit = FND_API.G_TRUE then
1729 rollback to create_task_version;
1730 end if;
1731 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1732 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1733 p_procedure_name => 'CREATE_TASK_VERSION',
1734 p_error_text => SUBSTRB(SQLERRM,1,240));
1735 raise;
1736 END Create_Task_Version;
1737
1738 -- API name : Update_Task_version
1739 -- Type : Public procedure
1740 -- Pre-reqs : None
1741 -- Return Value : N/A
1742 -- Prameters
1743 -- p_api_version IN NUMBER N Not Null 1.0
1744 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
1745 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
1746 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
1747 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
1748 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
1749 -- p_debug_mode IN VARCHAR2 N Null N
1750 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1751 -- p_task_version_id IN NUMBER N Null
1752 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1753 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1754 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1755 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1756 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1757 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1758 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1759 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1760 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1761 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1762 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1763 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1764 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1765 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1766 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1767 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1768 -- p_record_version_number IN NUMBER
1769 -- x_return_status OUT VARCHAR2 N Null
1770 -- x_msg_count OUT NUMBER N Null
1771 -- x_msg_data OUT VARCHAR2 N Null
1772 --
1773 -- History
1774 --
1775 -- 23-OCT-01 Majid Ansari -Created
1776 --
1777 --
1778
1779 PROCEDURE Update_Task_Version(
1780 p_api_version IN NUMBER :=1.0,
1781 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
1782 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
1783 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
1784 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
1785 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
1786 p_debug_mode IN VARCHAR2 :='N',
1787 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1788 p_ref_task_version_id IN NUMBER,
1789 p_peer_or_sub IN VARCHAR2,
1790 p_task_version_id IN NUMBER,
1791 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1792 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1793 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1794 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1795 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1796 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1797 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1798 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1799 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1800 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1801 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1802 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1803 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1804 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1805 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1806 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1807 p_record_version_number IN NUMBER,
1808 p_action IN VARCHAR2 := 'NULL',
1809
1810 p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1811 p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
1812
1813 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1814 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1815 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1816 ) IS
1817 l_api_name CONSTANT VARCHAR(30) := 'UPDATE_TASK_VERSION';
1818 l_api_version CONSTANT NUMBER := 1.0;
1819
1820 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1821 l_return_status VARCHAR2(1);
1822 l_msg_count NUMBER;
1823 l_msg_data VARCHAR2(250);
1824 l_data VARCHAR2(250);
1825 l_msg_index_out NUMBER;
1826 l_error_msg_code VARCHAR2(250);
1827 l_dummy VARCHAR2(1);
1828
1829 --l_carrying_out_org_id NUMBER;
1830 --l_task_manager_id NUMBER;
1831 BEGIN
1832
1833 pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK_VERSION');
1834
1835 IF (p_debug_mode = 'Y') THEN
1836 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_VERSION begin');
1837 END IF;
1838
1839 IF (p_commit = FND_API.G_TRUE) THEN
1840 savepoint update_Task_version;
1841 END IF;
1842
1843 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
1844 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1845 END IF;
1846
1847
1848 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
1849 FND_MSG_PUB.initialize;
1850 END IF;
1851
1852 --Lock row
1853 IF( p_validate_only <> FND_API.G_TRUE) THEN
1854 BEGIN
1855 select 'x' into l_dummy
1856 from PA_PROJ_ELEMENT_VERSIONS
1857 where element_version_id = p_task_version_id
1858 and record_version_number = p_record_version_number
1859 for update of record_version_number NOWAIT;
1860 EXCEPTION
1861 WHEN TIMEOUT_ON_RESOURCE THEN
1862 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1863 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1864 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1865 WHEN NO_DATA_FOUND THEN
1866 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1867 p_msg_name => 'PA_XC_RECORD_CHANGED');
1868 l_msg_data := 'PA_XC_RECORD_CHANGED';
1869 WHEN OTHERS THEN
1870 IF SQLCODE = -54 then
1871 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1872 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1873 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1874 ELSE
1875 raise;
1876 END IF;
1877 END;
1878 ELSE
1879 --check record_version_number
1880 BEGIN
1881 select 'x' into l_dummy
1882 from PA_PROJ_ELEMENT_VERSIONS
1883 where element_version_id = p_task_version_id
1884 and record_version_number = p_record_version_number;
1885 EXCEPTION
1886 WHEN NO_DATA_FOUND THEN
1887 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1888 p_msg_name => 'PA_XC_RECORD_CHANGED');
1889 l_msg_data := 'PA_XC_RECORD_CHANGED';
1890 WHEN OTHERS THEN
1891 RAISE;
1892 END;
1893 END IF;
1894
1895 l_msg_count := FND_MSG_PUB.count_msg;
1896 IF l_msg_count > 0 THEN
1897 x_msg_count := l_msg_count;
1898 x_return_status := 'E';
1899 RAISE FND_API.G_EXC_ERROR;
1900 END IF;
1901
1902
1903 --dbms_output.put_line('call update task version pvt');
1904 PA_TASK_PVT1.Update_Task_Version(
1905 p_api_version => p_api_version
1906 ,p_init_msg_list => p_init_msg_list
1907 ,p_commit => p_commit
1908 ,p_validate_only => p_validate_only
1909 ,p_validation_level => p_validation_level
1910 ,p_calling_module => p_calling_module
1911 ,p_debug_mode => p_debug_mode
1912 ,p_max_msg_count => p_max_msg_count
1913 ,p_ref_task_version_id => p_ref_task_version_id
1914 ,p_peer_or_sub => p_peer_or_sub
1915 ,p_task_version_id => p_task_version_id
1916 ,p_attribute_category => p_attribute_category
1917 ,p_attribute1 => p_attribute1
1918 ,p_attribute2 => p_attribute2
1919 ,p_attribute3 => p_attribute3
1920 ,p_attribute4 => p_attribute4
1921 ,p_attribute5 => p_attribute5
1922 ,p_attribute6 => p_attribute6
1923 ,p_attribute7 => p_attribute7
1924 ,p_attribute8 => p_attribute8
1925 ,p_attribute9 => p_attribute9
1926 ,p_attribute10 => p_attribute10
1927 ,p_attribute11 => p_attribute11
1928 ,p_attribute12 => p_attribute12
1929 ,p_attribute13 => p_attribute13
1930 ,p_attribute14 => p_attribute14
1931 ,p_attribute15 => p_attribute15
1932 ,p_record_version_number => p_record_version_number
1933 ,p_action => p_action
1934 ,p_WEIGHTING_PERCENTAGE => p_WEIGHTING_PERCENTAGE
1935 ,p_TASK_UNPUB_VER_STATUS_CODE => p_TASK_UNPUB_VER_STATUS_CODE
1936 ,x_return_status => l_return_status
1937 ,x_msg_count => x_msg_count
1938 ,x_msg_data => x_msg_data
1939 );
1940
1941 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1942 x_msg_count := FND_MSG_PUB.count_msg;
1943 IF x_msg_count = 1 then
1944 pa_interface_utils_pub.get_messages
1945 (p_encoded => FND_API.G_TRUE,
1946 p_msg_index => 1,
1947 p_msg_count => l_msg_count,
1948 p_msg_data => l_msg_data,
1949 p_data => l_data,
1950 p_msg_index_out => l_msg_index_out);
1951 x_msg_data := l_data;
1952 END IF;
1953 raise FND_API.G_EXC_ERROR;
1954 END IF;
1955
1956 x_return_status := FND_API.G_RET_STS_SUCCESS;
1957
1958 IF (p_commit = FND_API.G_TRUE) THEN
1959 COMMIT;
1960 END IF;
1961
1962 IF (p_debug_mode = 'Y') THEN
1963 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_VERSION END');
1964 END IF;
1965 EXCEPTION
1966 when FND_API.G_EXC_ERROR then
1967 if p_commit = FND_API.G_TRUE then
1968 rollback to update_task_version;
1969 end if;
1970 x_return_status := FND_API.G_RET_STS_ERROR;
1971 when FND_API.G_EXC_UNEXPECTED_ERROR then
1972 if p_commit = FND_API.G_TRUE then
1973 rollback to update_task_version;
1974 end if;
1975 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1976 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1977 p_procedure_name => 'UPDATE_TASK_VERSION',
1978 p_error_text => SUBSTRB(SQLERRM,1,240));
1979 when OTHERS 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_UNEXP_ERROR;
1984 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
1985 p_procedure_name => 'UPDATE_TASK_VERSION',
1986 p_error_text => SUBSTRB(SQLERRM,1,240));
1987 raise;
1988 END update_task_version;
1989
1990 -- API name : Delete_Task_version
1991 -- Type : Public procedure
1992 -- Pre-reqs : None
1993 -- Return Value : N/A
1994 -- Prameters
1995 -- p_api_version IN NUMBER N Not Null 1.0
1996 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
1997 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
1998 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
1999 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
2000 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
2001 -- p_debug_mode IN VARCHAR2 N Null N
2002 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2003 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2004 -- p_task_version_id IN NUMBER N Null
2005 -- p_record_version_number IN NUMBER
2006 -- x_return_status OUT VARCHAR2 N Null
2007 -- x_msg_count OUT NUMBER N Null
2008 -- x_msg_data OUT VARCHAR2 N Null
2009 --
2010 -- History
2011 --
2012 -- 23-OCT-01 Majid Ansari -Created
2013 --
2014 --
2015
2016 PROCEDURE Delete_Task_Version(
2017 p_api_version IN NUMBER :=1.0,
2018 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
2019 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
2020 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
2021 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
2022 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
2023 p_debug_mode IN VARCHAR2 :='N',
2024 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2025 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2026 p_task_version_id IN NUMBER,
2027 p_record_version_number IN NUMBER,
2028 p_called_from_api IN VARCHAR2 := 'ABCD',
2029 p_structure_type IN VARCHAR2 := 'WORKPLAN', --bug 3301192
2030 p_calling_from IN VARCHAR2 := 'XYZ', -- Bug 6023347
2031 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2032 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2033 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2034 ) IS
2035 l_api_name CONSTANT VARCHAR(30) := 'DELETE_TASK_VERSION';
2036 l_api_version CONSTANT NUMBER := 1.0;
2037
2038 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2039 l_return_status VARCHAR2(1);
2040 l_msg_count NUMBER;
2041 l_msg_data VARCHAR2(250);
2042 l_data VARCHAR2(250);
2043 l_msg_index_out NUMBER;
2044 l_error_msg_code VARCHAR2(250);
2045 l_dummy VARCHAR2(1);
2046 l_err_code NUMBER := 0;
2047 l_err_stack VARCHAR2(630);
2048 l_err_stage VARCHAR2(80);
2049 --l_carrying_out_org_id NUMBER;
2050 --l_task_manager_id NUMBER;
2051
2052 -- hyau Bug 2852753
2053 l_delete_project_allowed VARCHAR2(1);
2054 l_update_proj_num_allowed VARCHAR2(1);
2055 l_update_proj_name_allowed VARCHAR2(1);
2056 l_update_proj_desc_allowed VARCHAR2(1);
2057 l_update_proj_dates_allowed VARCHAR2(1);
2058 l_update_proj_status_allowed VARCHAR2(1);
2059 l_update_proj_manager_allowed VARCHAR2(1);
2060 l_update_proj_org_allowed VARCHAR2(1);
2061 l_add_task_allowed VARCHAR2(1);
2062 l_delete_task_allowed VARCHAR2(1);
2063 l_update_task_num_allowed VARCHAR2(1);
2064 l_update_task_name_allowed VARCHAR2(1);
2065 l_update_task_dates_allowed VARCHAR2(1);
2066 l_update_task_desc_allowed VARCHAR2(1);
2067 l_update_parent_task_allowed VARCHAR2(1);
2068 l_update_task_org_allowed VARCHAR2(1);
2069
2070 x_err_code NUMBER := 0;
2071 x_err_stack VARCHAR2(200) := NULL;
2072 x_err_stage VARCHAR2(200) := NULL;
2073 l_error_occured VARCHAR2(1) := 'N' ; --Bug2929411
2074
2075 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
2076
2077 CURSOR get_product_code ( c_project_id NUMBER ) IS
2078 SELECT pm_product_code
2079 FROM PA_PROJECTS_ALL
2080 WHERE project_id = c_project_id;
2081
2082 l_project_id NUMBER;
2083 CURSOR cur_proj_id
2084 IS
2085 SELECT project_id
2086 FROM pa_proj_element_versions
2087 WHERE element_version_id = p_task_version_id;
2088
2089 -- end hyau Bug 2852753
2090
2091
2092 --hsiu: added for task version status
2093 CURSOR get_task_info(c_task_version_id NUMBER) IS
2094 select a.project_id, b.proj_element_id, parent_structure_version_id,
2095 TASK_UNPUB_VER_STATUS_CODE, b.link_task_flag
2096 from pa_proj_element_versions a,
2097 pa_proj_elements b --bug 4501280
2098 where element_version_id = c_task_version_id
2099 --bug 4501280
2100 AND a.proj_element_id = b.proj_element_id
2101 AND a.project_id = b.project_id
2102 --bug 4501280
2103 ;
2104 l_task_info_rec get_task_info%ROWTYPE;
2105 --end changes for task version status
2106
2107 l_structure_version_id pa_proj_element_versions.parent_structure_version_id%TYPE ;
2108
2109 -- Bug Fix 4576640
2110 -- Adding a new check to stop users from deleting a linked task.
2111 -- Example:
2112 -- P1 - T1
2113 -- T2-P2
2114 -- In the above scenario we are not allowing the user to delete T2, as this is causing issues in PJI.
2115 -- Though this is a corner case as this happens only in deleting a task in a program which already has a
2116 -- published version.
2117 -- As per the bug updates, we are now stopping user from deleting a linked task and now user has to delete
2118 -- the link manually and then delete the task.
2119
2120 CURSOR is_linked_task(c_task_version_id NUMBER) IS
2121 SELECT 'Y'
2122 FROM DUAL
2123 WHERE EXISTS(
2124 SELECT pors.object_relationship_id
2125 FROM pa_object_relationships pors,
2126 pa_object_relationships pors1
2127 WHERE pors1.object_id_from1 = c_task_version_id
2128 AND pors.object_id_from1 = pors1.object_id_to1
2129 AND pors1.relationship_type = 'S'
2130 AND pors.relationship_type IN ('LW','LF')
2131 AND pors.object_id_from2 <> pors.object_id_to2
2132 AND pors.object_type_from = 'PA_TASKS'
2133 AND pors.object_type_to = 'PA_STRUCTURES');
2134
2135 l_linked_task VARCHAR2(1);
2136
2137 BEGIN
2138
2139 pa_debug.init_err_stack ('PA_TASK_PUB1.DELETE_TASK_VERSION');
2140
2141 IF (p_debug_mode = 'Y') THEN
2142 pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_VERSION begin');
2143 END IF;
2144
2145 IF (p_commit = FND_API.G_TRUE) THEN
2146 savepoint delete_Task_version;
2147 END IF;
2148
2149 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2150 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2151 END IF;
2152
2153
2154 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
2155 FND_MSG_PUB.initialize;
2156 END IF;
2157
2158 IF p_calling_module <> 'FORMS'
2159 THEN
2160 --Lock row
2161 IF( p_validate_only <> FND_API.G_TRUE) THEN
2162 BEGIN
2163 select 'x' into l_dummy
2164 from PA_PROJ_ELEMENT_VERSIONS
2165 where element_version_id = p_task_version_id
2166 and record_version_number = p_record_version_number
2167 for update of record_version_number NOWAIT;
2168 EXCEPTION
2169 WHEN TIMEOUT_ON_RESOURCE THEN
2170 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2171 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2172 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2173 l_error_occured := 'Y' ; --Bug2929411
2174 WHEN NO_DATA_FOUND THEN
2175 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2176 p_msg_name => 'PA_XC_RECORD_CHANGED');
2177 l_msg_data := 'PA_XC_RECORD_CHANGED';
2178 l_error_occured := 'Y' ; --Bug2929411
2179 WHEN OTHERS THEN
2180 IF SQLCODE = -54 then
2181 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2182 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2183 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2184 l_error_occured := 'Y' ; --Bug2929411
2185 ELSE
2186 raise;
2187 END IF;
2188 END;
2189 ELSE
2190 --check record_version_number
2191 BEGIN
2192 select 'x' into l_dummy
2193 from PA_PROJ_ELEMENT_VERSIONS
2194 where element_version_id = p_task_version_id
2195 and record_version_number = p_record_version_number;
2196 EXCEPTION
2197 WHEN NO_DATA_FOUND THEN
2198 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2199 p_msg_name => 'PA_XC_RECORD_CHANGED');
2200 l_msg_data := 'PA_XC_RECORD_CHANGED';
2201 l_error_occured := 'Y' ; --Bug2929411
2202 WHEN OTHERS THEN
2203 RAISE;
2204 END;
2205 END IF;
2206
2207 l_msg_count := FND_MSG_PUB.count_msg;
2208
2209 IF l_msg_count > 0 AND l_error_occured = 'Y' THEN
2210 x_msg_count := l_msg_count;
2211 x_return_status := 'E';
2212 RAISE FND_API.G_EXC_ERROR;
2213 END IF;
2214 END IF; --<< p_calling module >>
2215
2216 -- hyau Bug 2852753
2217 IF p_calling_module = 'SELF_SERVICE' THEN
2218
2219 OPEN cur_proj_id;
2220 FETCH cur_proj_id INTO l_project_id;
2221 CLOSE cur_proj_id;
2222
2223 OPEN get_product_code(l_project_id);
2224 FETCH get_product_code INTO l_pm_product_code;
2225 CLOSE get_product_code;
2226
2227 If l_pm_product_code IS NOT NULL THEN
2228 pa_pm_controls.Get_Project_actions_allowed
2229 (P_PM_PRODUCT_CODE => l_pm_product_code,
2230 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
2231 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
2232 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
2233 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
2234 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
2235 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
2236 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
2237 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
2238 P_ADD_TASK_ALLOWED => l_add_task_allowed,
2239 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
2240 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
2241 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
2242 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
2243 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
2244 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
2245 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
2246 P_ERROR_CODE => x_err_code,
2247 P_ERROR_STACK => x_err_stack,
2248 P_ERROR_STAGE => x_err_stage );
2249
2250 IF x_err_code <> 0 THEN
2251 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2252 p_msg_name => x_err_stage);
2253 END IF;
2254 IF l_delete_task_allowed = 'N' THEN
2255 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2256 p_msg_name => 'PA_PR_PM_CANNOT_DELETE');
2257 raise FND_API.G_EXC_ERROR;
2258 END IF;
2259 END IF;
2260 END IF;
2261
2262 -- end hyau Bug 2852753
2263
2264 --hsiu: task version status changes
2265 --check delete task ok
2266 OPEN get_task_info(p_task_version_id);
2267 FETCH get_task_info into l_task_info_rec;
2268 CLOSE get_task_info;
2269
2270 /* Bug 4068685 : If p_structure_version_id is not passed to this Delete_Task_Version API
2271 then it will be defaulted to MISS_NUM .In that case ,Use the retrieved value of
2272 parent_structure_version_id from l_task_info_rec
2273 */
2274
2275 IF (p_structure_version_id IS NOT NULL)
2276 AND (p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
2277 THEN
2278 l_structure_version_id := l_task_info_rec.parent_structure_version_id ;
2279 ELSE
2280 l_structure_version_id := p_structure_version_id ;
2281 END IF;
2282
2283 /*In the following function call , changed value of p_parent_structure_ver_id parameter
2284 from p_structure_version_id to l_structure_version_id
2285 for Bug 4068685
2286 */
2287 --6023347: No need to check tasks if complete version is to be deleted from Workplan Version Disabling
2288 IF p_calling_from <> 'DEL_WP_STRUC_DISABLE_VERSION' THEN -- 6023347
2289 --Check if it is okay to delete task version. Also checks financial task
2290 PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok(p_project_id => l_task_info_rec.project_id
2291 ,p_task_version_id => p_task_version_id
2292 ,p_parent_structure_ver_id => l_structure_version_id -- 4068685
2293 ,x_return_status => l_return_status
2294 ,x_error_message_code => l_error_msg_code);
2295 IF (l_return_status <> 'S') THEN
2296 PA_UTILS.ADD_MESSAGE('PA', l_error_msg_code);
2297 l_msg_data := l_error_msg_code;
2298 RAISE FND_API.G_EXC_ERROR;
2299 END IF;
2300 END IF; -- 6023347
2301
2302 -- Bug Fix 4576640.
2303 -- Now stopping the user from deleting a linked task.
2304
2305 OPEN is_linked_task(p_task_version_id);
2306 FETCH is_linked_task INTO l_linked_task;
2307 CLOSE is_linked_task;
2308
2309 IF l_linked_task = 'Y' THEN
2310 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2311 p_msg_name => 'PA_PS_CANT_DEL_LINKED_TASK');
2312 RAISE FND_API.G_EXC_ERROR;
2313 END IF;
2314
2315 -- End of Bug Fix 4576640.
2316
2317 --ok to delete. decide whether to delete or modify version status
2318 --Check if shared
2319 --bug 4501280
2320 IF l_task_info_rec.link_task_flag = 'N'
2321 THEN
2322 --bug 4501280
2323 IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_task_info_rec.project_id) = 'Y') THEN
2324 --sharing enabled
2325 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_task_info_rec.project_id) = 'Y') THEN
2326 --versioning on
2327 IF (l_task_info_rec.task_unpub_ver_status_code = 'PUBLISHED' OR
2328 l_task_info_rec.task_unpub_ver_status_code = 'TO_BE_DELETED')
2329 AND p_called_from_api <> 'DELETE_STRUCTURE_VERSION' THEN -- Bug 3056077. We need to delete the task versions
2330 --change status to TO_BE_DELETED -- when the structure version is to be deleted.
2331
2332 -- 3955848 Added following code to validate task to deliverable association deletion
2333 -- related validations , p_delete_or_validate is passed as 'V' because only validation will be done
2334
2335 PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
2336 (
2337 p_task_element_id => l_task_info_rec.proj_element_id
2338 ,p_project_id => l_task_info_rec.project_id
2339 ,p_task_version_id => p_task_version_id
2340 ,p_delete_or_validate => 'V'
2341 ,x_return_status => x_return_status
2342 ,x_msg_count => x_msg_count
2343 ,x_msg_data => x_msg_data
2344 );
2345
2346 IF x_return_status = FND_API.G_RET_STS_ERROR then
2347 RAISE FND_API.G_EXC_ERROR;
2348 End If;
2349
2350 -- 3955848 end
2351
2352 PA_TASK_PVT1.update_task_ver_delete_status(
2353 p_task_version_id => p_task_version_id
2354 ,x_return_status => l_return_status
2355 ,x_msg_count => x_msg_count
2356 ,x_msg_data => x_msg_data);
2357
2358 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2359 x_msg_count := FND_MSG_PUB.count_msg;
2360 IF x_msg_count = 1 then
2361 pa_interface_utils_pub.get_messages
2362 (p_encoded => FND_API.G_TRUE,
2363 p_msg_index => 1,
2364 p_msg_count => l_msg_count,
2365 p_msg_data => l_msg_data,
2366 p_data => l_data,
2367 p_msg_index_out => l_msg_index_out);
2368 x_msg_data := l_data;
2369 END IF;
2370 raise FND_API.G_EXC_ERROR;
2371 END IF;
2372
2373 return; --only set the version status
2374 ELSE --not published
2375 NULL; --continue to delete
2376 END IF; --task version status
2377 ELSE -- versioning off
2378 NULL; --continue to delete
2379 END IF;
2380 ELSE --not shared
2381 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_task_info_rec.parent_structure_version_id, 'FINANCIAL') = 'Y') THEN
2382 --Financial structure
2383 NULL; --continue to delete
2384 ELSE --Workplan structure
2385 --check if versioning is on
2386 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_task_info_rec.project_id) = 'Y') THEN
2387 --versioning on
2388 IF (l_task_info_rec.task_unpub_ver_status_code = 'PUBLISHED' OR
2389 l_task_info_rec.task_unpub_ver_status_code = 'TO_BE_DELETED')
2390 AND p_called_from_api <> 'DELETE_STRUCTURE_VERSION' THEN -- Bug 3056077. We need to delete the task versions
2391 --change status to TO_BE_DELETED -- when the structure version is to be deleted.
2392
2393 -- 3955848 Added following code to validate task to deliverable association deletion
2394 -- related validations , p_delete_or_validate is passed as 'V' because only validation will be done
2395
2396 PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
2397 (
2398 p_task_element_id => l_task_info_rec.proj_element_id
2399 ,p_project_id => l_task_info_rec.project_id
2400 ,p_task_version_id => p_task_version_id
2401 ,p_delete_or_validate => 'V'
2402 ,x_return_status => x_return_status
2403 ,x_msg_count => x_msg_count
2404 ,x_msg_data => x_msg_data
2405 );
2406
2407 IF x_return_status = FND_API.G_RET_STS_ERROR then
2408 RAISE FND_API.G_EXC_ERROR;
2409 End If;
2410
2411 -- 3955848 end
2412
2413 PA_TASK_PVT1.update_task_ver_delete_status(
2414 p_task_version_id => p_task_version_id
2415 ,x_return_status => l_return_status
2416 ,x_msg_count => x_msg_count
2417 ,x_msg_data => x_msg_data);
2418
2419 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2420 x_msg_count := FND_MSG_PUB.count_msg;
2421 IF x_msg_count = 1 then
2422 pa_interface_utils_pub.get_messages
2423 (p_encoded => FND_API.G_TRUE,
2424 p_msg_index => 1,
2425 p_msg_count => l_msg_count,
2426 p_msg_data => l_msg_data,
2427 p_data => l_data,
2428 p_msg_index_out => l_msg_index_out);
2429 x_msg_data := l_data;
2430 END IF;
2431 raise FND_API.G_EXC_ERROR;
2432 END IF;
2433
2434 return; --only set the status
2435 ELSE
2436 NULL; --delete task version
2437 END IF;
2438 ELSE
2439 --versioning off
2440 NULL; --delete task version
2441 END IF;
2442 END IF;
2443 END IF;
2444 END IF; --bug 4501280
2445 --end task version status changes
2446
2447
2448 --dbms_output.put_line('delete pvt');
2449 PA_TASK_PVT1.Delete_Task_Version(
2450 p_api_version => p_api_version
2451 ,p_init_msg_list => p_init_msg_list
2452 ,p_commit => p_commit
2453 ,p_validate_only => p_validate_only
2454 ,p_validation_level => p_validation_level
2455 ,p_calling_module => p_calling_module
2456 ,p_debug_mode => p_debug_mode
2457 ,p_max_msg_count => p_max_msg_count
2458 ,p_structure_version_id => l_structure_version_id -- Old Value : p_structure_version_id : 4068685
2459 ,p_task_version_id => p_task_version_id
2460 ,p_record_version_number => p_record_version_number
2461 ,p_called_from_api => p_called_from_api
2462 ,p_structure_type => p_structure_type -- FP_M changes 3305199
2463 ,x_return_status => l_return_status
2464 ,x_msg_count => x_msg_count
2465 ,x_msg_data => x_msg_data
2466 );
2467
2468 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2469 x_msg_count := FND_MSG_PUB.count_msg;
2470 IF x_msg_count = 1 then
2471 pa_interface_utils_pub.get_messages
2472 (p_encoded => FND_API.G_TRUE,
2473 p_msg_index => 1,
2474 p_msg_count => l_msg_count,
2475 p_msg_data => l_msg_data,
2476 p_data => l_data,
2477 p_msg_index_out => l_msg_index_out);
2478 x_msg_data := l_data;
2479 END IF;
2480 raise FND_API.G_EXC_ERROR;
2481 END IF;
2482
2483 x_return_status := FND_API.G_RET_STS_SUCCESS;
2484
2485 IF (p_commit = FND_API.G_TRUE) THEN
2486 COMMIT;
2487 END IF;
2488
2489 IF (p_debug_mode = 'Y') THEN
2490 pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_VERSION END');
2491 END IF;
2492 EXCEPTION
2493 when FND_API.G_EXC_ERROR then
2494 if p_commit = FND_API.G_TRUE then
2495 rollback to delete_task_version;
2496 end if;
2497 x_return_status := FND_API.G_RET_STS_ERROR;
2498 when FND_API.G_EXC_UNEXPECTED_ERROR then
2499 if p_commit = FND_API.G_TRUE then
2500 rollback to delete_task_version;
2501 end if;
2502 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2503 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
2504 p_procedure_name => 'DELETE_TASK_VERSION',
2505 p_error_text => SUBSTRB(SQLERRM,1,240));
2506 when OTHERS then
2507 if p_commit = FND_API.G_TRUE then
2508 rollback to delete_task_version;
2509 end if;
2510 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2511 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
2512 p_procedure_name => 'DELETE_TASK_VERSION',
2513 p_error_text => SUBSTRB(SQLERRM,1,240));
2514 raise;
2515 END delete_task_version;
2516
2517 -- API name : Create_Schedule_Version
2518 -- Type : Public procedure
2519 -- Pre-reqs : None
2520 -- Return Value : N/A
2521 -- Prameters
2522 -- p_api_version IN NUMBER N Not Null 1.0
2523 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
2524 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
2525 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
2526 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
2527 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
2528 -- p_debug_mode IN VARCHAR2 N Null N
2529 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2530 -- p_element_version_id IN NUMBER N Not Null
2531 -- p_calendar_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2532 -- p_calendar_name IN VARCHAR2 N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2533 -- p_scheduled_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2534 -- p_scheduled_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2535 -- p_obligation_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2536 -- p_obligation_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2537 -- p_actual_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2538 -- p_actual_finish_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2539 -- p_estimate_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2540 -- p_estimate_finish_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2541 -- p_duration IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2542 -- p_early_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2543 -- p_early_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2544 -- p_late_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2545 -- p_late_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2546 -- p_milestone_flag IN VARCHAR2 N NULL N
2547 -- p_critical_flag IN VARCHAR2 N NULL N
2548 -- x_pev_schedule_id OUT NUMBER N NULL
2549 -- x_return_status OUT VARCHAR2 N Null
2550 -- x_msg_count OUT NUMBER N Null
2551 -- x_msg_data OUT VARCHAR2 N Null
2552 --
2553 -- History
2554 --
2555 -- 23-OCT-01 Majid Ansari -Created
2556 -- 16-OCT-02 XXLU - Added DFF parameters.
2557 --
2558
2559 PROCEDURE Create_Schedule_Version(
2560 p_api_version IN NUMBER :=1.0,
2561 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
2562 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
2563 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
2564 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
2565 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
2566 p_debug_mode IN VARCHAR2 :='N',
2567 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2568 p_element_version_id IN NUMBER,
2569 p_calendar_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2570 p_calendar_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2571 p_scheduled_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2572 p_scheduled_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2573 p_obligation_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2574 p_obligation_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2575 p_actual_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2576 p_actual_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2577 p_estimate_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2578 p_estimate_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2579 p_duration IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2580 p_early_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2581 p_early_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2582 p_late_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2583 p_late_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2584 p_milestone_flag IN VARCHAR2 :='N',
2585 p_critical_flag IN VARCHAR2 :='N',
2586
2587 p_WQ_PLANNED_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2588 p_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2589 p_PLANNED_EQUIP_EFFORT IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --bug 3305199
2590 --bug 3305199 schedule options
2591 p_def_sch_tool_tsk_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2592 p_def_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2593 p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2594 p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2595 p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2596 p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2597 p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2598 p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2599 --end bug 3305199
2600 p_ext_act_duration IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2601 p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2602 p_ext_sch_duration IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2603 p_attribute_category IN pa_proj_elem_ver_schedule.attribute_category%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2604 p_attribute1 IN pa_proj_elem_ver_schedule.attribute1%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2605 p_attribute2 IN pa_proj_elem_ver_schedule.attribute2%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2606 p_attribute3 IN pa_proj_elem_ver_schedule.attribute3%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2607 p_attribute4 IN pa_proj_elem_ver_schedule.attribute4%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2608 p_attribute5 IN pa_proj_elem_ver_schedule.attribute5%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2609 p_attribute6 IN pa_proj_elem_ver_schedule.attribute6%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2610 p_attribute7 IN pa_proj_elem_ver_schedule.attribute7%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2611 p_attribute8 IN pa_proj_elem_ver_schedule.attribute8%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2612 p_attribute9 IN pa_proj_elem_ver_schedule.attribute9%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2613 p_attribute10 IN pa_proj_elem_ver_schedule.attribute10%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2614 p_attribute11 IN pa_proj_elem_ver_schedule.attribute11%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2615 p_attribute12 IN pa_proj_elem_ver_schedule.attribute12%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2616 p_attribute13 IN pa_proj_elem_ver_schedule.attribute13%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2617 p_attribute14 IN pa_proj_elem_ver_schedule.attribute14%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2618 p_attribute15 IN pa_proj_elem_ver_schedule.attribute15%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2619 x_pev_schedule_id OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2620 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2621 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2622 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2623 ) IS
2624 l_api_name CONSTANT VARCHAR(30) := 'CREATE_SCHEDULE_VERSION';
2625 l_api_version CONSTANT NUMBER := 1.0;
2626
2627 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2628 l_return_status VARCHAR2(1);
2629 l_msg_count NUMBER;
2630 l_msg_data VARCHAR2(250);
2631 l_data VARCHAR2(250);
2632 l_msg_index_out NUMBER;
2633 l_error_msg_code VARCHAR2(250);
2634 BEGIN
2635 pa_debug.init_err_stack ('PA_TASK_PUB1.create_schedule_VERSION');
2636
2637 IF (p_debug_mode = 'Y') THEN
2638 pa_debug.debug('PA_TASK_PUB1.CREATE_SCHEDULE_VERSION begin');
2639 END IF;
2640
2641 IF (p_commit = FND_API.G_TRUE) THEN
2642 savepoint create_schedule_version;
2643 END IF;
2644
2645 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2646 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2647 END IF;
2648
2649
2650 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
2651 FND_MSG_PUB.initialize;
2652 END IF;
2653
2654 PA_TASK_PVT1.Create_Schedule_Version(
2655 p_api_version => p_api_version
2656 ,p_init_msg_list => p_init_msg_list
2657 ,p_commit => p_commit
2658 ,p_validate_only => p_validate_only
2659 ,p_validation_level => p_validation_level
2660 ,p_calling_module => p_calling_module
2661 ,p_debug_mode => p_debug_mode
2662 ,p_max_msg_count => p_max_msg_count
2663 ,p_element_version_id => p_element_version_id
2664 ,p_calendar_id => p_calendar_id
2665 ,p_scheduled_start_date => p_scheduled_start_date
2666 ,p_scheduled_end_date => p_scheduled_end_date
2667 ,p_obligation_start_date => p_obligation_start_date
2668 ,p_obligation_end_date => p_obligation_end_date
2669 ,p_actual_start_date => p_actual_start_date
2670 ,p_actual_finish_date => p_actual_finish_date
2671 ,p_estimate_start_date => p_estimate_start_date
2672 ,p_estimate_finish_date => p_estimate_finish_date
2673 ,p_duration => p_duration
2674 ,p_early_start_date => p_early_start_date
2675 ,p_early_end_date => p_early_end_date
2676 ,p_late_start_date => p_late_start_date
2677 ,p_late_end_date => p_late_end_date
2678 ,p_milestone_flag => p_milestone_flag
2679 ,p_critical_flag => p_critical_flag
2680 ,x_pev_schedule_id => x_pev_schedule_id
2681 ,p_wq_planned_quantity => p_wq_planned_quantity
2682 ,p_planned_effort => p_planned_effort
2683 ,p_PLANNED_EQUIP_EFFORT => p_PLANNED_EQUIP_EFFORT
2684 ,p_def_sch_tool_tsk_type_code => p_def_sch_tool_tsk_type_code
2685 ,p_constraint_type_code => p_constraint_type_code
2686 ,p_constraint_date => p_constraint_date
2687 ,p_free_slack => p_free_slack
2688 ,p_total_slack => p_total_slack
2689 ,p_effort_driven_flag => p_effort_driven_flag
2690 ,p_level_assignments_flag => p_level_assignments_flag
2691 ,p_ext_act_duration => p_ext_act_duration
2692 ,p_ext_remain_duration => p_ext_remain_duration
2693 ,p_ext_sch_duration => p_ext_sch_duration
2694 ,p_attribute_category => p_attribute_category
2695 ,p_attribute1 => p_attribute1
2696 ,p_attribute2 => p_attribute2
2697 ,p_attribute3 => p_attribute3
2698 ,p_attribute4 => p_attribute4
2699 ,p_attribute5 => p_attribute5
2700 ,p_attribute6 => p_attribute6
2701 ,p_attribute7 => p_attribute7
2702 ,p_attribute8 => p_attribute8
2703 ,p_attribute9 => p_attribute9
2704 ,p_attribute10 => p_attribute10
2705 ,p_attribute11 => p_attribute11
2706 ,p_attribute12 => p_attribute12
2707 ,p_attribute13 => p_attribute13
2708 ,p_attribute14 => p_attribute14
2709 ,p_attribute15 => p_attribute15
2710 ,x_return_status => l_return_status
2711 ,x_msg_count => x_msg_count
2712 ,x_msg_data => x_msg_data
2713 );
2714
2715 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2716 x_msg_count := FND_MSG_PUB.count_msg;
2717 IF x_msg_count = 1 then
2718 pa_interface_utils_pub.get_messages
2719 (p_encoded => FND_API.G_TRUE,
2720 p_msg_index => 1,
2721 p_msg_count => l_msg_count,
2722 p_msg_data => l_msg_data,
2723 p_data => l_data,
2724 p_msg_index_out => l_msg_index_out);
2725 x_msg_data := l_data;
2726 END IF;
2727 raise FND_API.G_EXC_ERROR;
2728 END IF;
2729
2730 x_return_status := FND_API.G_RET_STS_SUCCESS;
2731
2732 IF (p_commit = FND_API.G_TRUE) THEN
2733 COMMIT;
2734 END IF;
2735
2736 IF (p_debug_mode = 'Y') THEN
2737 pa_debug.debug('PA_TASK_PUB1.CREATE_SCHEDULE_VERSION END');
2738 END IF;
2739 EXCEPTION
2740 when FND_API.G_EXC_ERROR then
2741 if p_commit = FND_API.G_TRUE then
2742 rollback to create_schedule_version;
2743 end if;
2744 x_return_status := FND_API.G_RET_STS_ERROR;
2745 when FND_API.G_EXC_UNEXPECTED_ERROR then
2746 if p_commit = FND_API.G_TRUE then
2747 rollback to create_schedule_version;
2748 end if;
2749 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2750 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
2751 p_procedure_name => 'CREATE_SCHEDULE_VERSION',
2752 p_error_text => SUBSTRB(SQLERRM,1,240));
2753 when OTHERS then
2754 if p_commit = FND_API.G_TRUE then
2755 rollback to create_schedule_version;
2756 end if;
2757 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2758 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
2759 p_procedure_name => 'CREATE_SCHEDULE_VERSION',
2760 p_error_text => SUBSTRB(SQLERRM,1,240));
2761 raise;
2762
2763 END Create_Schedule_Version;
2764
2765
2766 -- API name : Update_Schedule_Version
2767 -- Type : Public procedure
2768 -- Pre-reqs : None
2769 -- Return Value : N/A
2770 -- Prameters
2771 -- p_api_version IN NUMBER N Not Null 1.0
2772 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
2773 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
2774 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
2775 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
2776 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
2777 -- p_debug_mode IN VARCHAR2 N Null N
2778 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2779 -- p_element_version_id IN NUMBER N Not Null
2780 -- p_calendar_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2781 -- p_calendar_name IN VARCHAR2 N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2782 -- p_scheduled_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2783 -- p_scheduled_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2784 -- p_obligation_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2785 -- p_obligation_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2786 -- p_actual_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2787 -- p_actual_finish_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2788 -- p_estimate_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2789 -- p_estimate_finish_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2790 -- p_duration IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2791 -- p_early_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2792 -- p_early_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2793 -- p_late_start_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2794 -- p_late_end_date IN DATE N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2795 -- p_milestone_flag IN VARCHAR2 N NULL N
2796 -- p_critical_flag IN VARCHAR2 N NULL N
2797 -- x_pev_schedule_id OUT NUMBER N NULL
2798 -- x_return_status OUT VARCHAR2 N Null
2799 -- x_msg_count OUT NUMBER N Null
2800 -- x_msg_data OUT VARCHAR2 N Null
2801 --
2802 -- History
2803 --
2804 -- 23-OCT-01 Majid Ansari -Created
2805 -- 16-OCT-02 XXLU - Added DFF parameters.
2806 --
2807
2808 PROCEDURE Update_Schedule_Version(
2809 p_api_version IN NUMBER :=1.0,
2810 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
2811 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
2812 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
2813 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
2814 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
2815 p_debug_mode IN VARCHAR2 :='N',
2816 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2817 p_pev_schedule_id IN NUMBER,
2818 p_calendar_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2819 p_calendar_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2820 p_scheduled_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2821 p_scheduled_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2822 p_obligation_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2823 p_obligation_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2824 p_actual_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2825 p_actual_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2826 p_estimate_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2827 p_estimate_finish_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2828 p_duration IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2829 p_early_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2830 p_early_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2831 p_late_start_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2832 p_late_end_date IN DATE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2833 p_milestone_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
2834 p_critical_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
2835
2836 p_WQ_PLANNED_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2837 p_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2838 p_PLANNED_EQUIP_EFFORT IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --bug 3305199
2839 --bug 3305199 schedule options
2840 p_def_sch_tool_tsk_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2841 p_def_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2842 p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2843 p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2844 p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2845 p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2846 p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2847 p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2848 --end bug 3305199
2849
2850 p_record_version_number IN NUMBER,
2851 p_ext_act_duration IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2852 p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2853 p_ext_sch_duration IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2854 p_attribute_category IN pa_proj_elem_ver_schedule.attribute_category%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2855 p_attribute1 IN pa_proj_elem_ver_schedule.attribute1%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2856 p_attribute2 IN pa_proj_elem_ver_schedule.attribute2%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2857 p_attribute3 IN pa_proj_elem_ver_schedule.attribute3%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2858 p_attribute4 IN pa_proj_elem_ver_schedule.attribute4%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2859 p_attribute5 IN pa_proj_elem_ver_schedule.attribute5%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2860 p_attribute6 IN pa_proj_elem_ver_schedule.attribute6%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2861 p_attribute7 IN pa_proj_elem_ver_schedule.attribute7%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2862 p_attribute8 IN pa_proj_elem_ver_schedule.attribute8%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2863 p_attribute9 IN pa_proj_elem_ver_schedule.attribute9%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2864 p_attribute10 IN pa_proj_elem_ver_schedule.attribute10%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2865 p_attribute11 IN pa_proj_elem_ver_schedule.attribute11%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2866 p_attribute12 IN pa_proj_elem_ver_schedule.attribute12%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2867 p_attribute13 IN pa_proj_elem_ver_schedule.attribute13%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2868 p_attribute14 IN pa_proj_elem_ver_schedule.attribute14%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2869 p_attribute15 IN pa_proj_elem_ver_schedule.attribute15%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2870 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2871 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2872 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2873 ) IS
2874
2875 l_api_name CONSTANT VARCHAR(30) := 'Update_Schedule_Version';
2876 l_api_version CONSTANT NUMBER := 1.0;
2877
2878 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2879 l_return_status VARCHAR2(1);
2880 l_msg_count NUMBER;
2881 l_msg_data VARCHAR2(250);
2882 l_data VARCHAR2(250);
2883 l_msg_index_out NUMBER;
2884 l_error_msg_code VARCHAR2(250);
2885 l_dummy VARCHAR2(1);
2886
2887 -- hyau Bug 2852753
2888 l_delete_project_allowed VARCHAR2(1);
2889 l_update_proj_num_allowed VARCHAR2(1);
2890 l_update_proj_name_allowed VARCHAR2(1);
2891 l_update_proj_desc_allowed VARCHAR2(1);
2892 l_update_proj_dates_allowed VARCHAR2(1);
2893 l_update_proj_status_allowed VARCHAR2(1);
2894 l_update_proj_manager_allowed VARCHAR2(1);
2895 l_update_proj_org_allowed VARCHAR2(1);
2896 l_add_task_allowed VARCHAR2(1);
2897 l_delete_task_allowed VARCHAR2(1);
2898 l_update_task_num_allowed VARCHAR2(1);
2899 l_update_task_name_allowed VARCHAR2(1);
2900 l_update_task_dates_allowed VARCHAR2(1);
2901 l_update_task_desc_allowed VARCHAR2(1);
2902 l_update_parent_task_allowed VARCHAR2(1);
2903 l_update_task_org_allowed VARCHAR2(1);
2904
2905 l_err_code NUMBER := 0;
2906 l_err_stack VARCHAR2(200) := NULL;
2907 l_err_stage VARCHAR2(200) := NULL;
2908
2909 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
2910
2911 CURSOR get_product_code ( c_project_id NUMBER ) IS
2912 SELECT pm_product_code
2913 FROM PA_PROJECTS_ALL
2914 WHERE project_id = c_project_id;
2915
2916 l_project_id NUMBER;
2917
2918 CURSOR cur_proj_id
2919 IS
2920 SELECT project_id
2921 FROM pa_proj_elem_ver_schedule
2922 WHERE pev_schedule_id = p_pev_schedule_id;
2923
2924 CURSOR cur_schedule_dates IS
2925 SELECT SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE
2926 FROM pa_proj_elem_ver_schedule
2927 WHERE pev_schedule_id = p_pev_schedule_id;
2928
2929 l_cur_sch_start_date DATE;
2930 l_cur_sch_end_date DATE;
2931
2932 l_Structure_Version_ID NUMBER;
2933
2934 -- end hyau Bug 2852753
2935
2936 BEGIN
2937
2938 pa_debug.init_err_stack ('PA_TASK_PUB1.update_schedule_VERSION');
2939
2940 IF (p_debug_mode = 'Y') THEN
2941 pa_debug.debug('PA_TASK_PUB1.update_SCHEDULE_VERSION begin');
2942 END IF;
2943
2944 IF (p_commit = FND_API.G_TRUE) THEN
2945 savepoint update_schedule_version;
2946 END IF;
2947
2948 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2949 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2950 END IF;
2951
2952
2953 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
2954 FND_MSG_PUB.initialize;
2955 END IF;
2956
2957 -- Added for FP_M changes 3305199
2958
2959 OPEN cur_proj_id;
2960 FETCH cur_proj_id INTO l_project_id;
2961 CLOSE cur_proj_id;
2962
2963 If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_Project_ID) = 'Y' Then
2964
2965 Select a.Parent_Structure_Version_ID
2966 Into l_Structure_Version_ID
2967 From PA_Proj_Element_Versions a, pa_proj_elem_ver_schedule b
2968 Where a.Element_Version_ID = b.Element_Version_ID
2969 and b.pev_schedule_id = p_pev_schedule_id;
2970
2971 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
2972 p_structure_version_id => l_Structure_Version_ID
2973 ,p_dirty_flag => 'Y' --bug 3902282
2974 ,x_return_status => x_return_status
2975 ,x_msg_count => x_msg_count
2976 ,x_msg_data => x_msg_data
2977 );
2978
2979 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
2980 x_msg_count := FND_MSG_PUB.count_msg;
2981 If x_msg_count = 1 then
2982 pa_interface_utils_pub.get_messages
2983 (p_encoded => FND_API.G_TRUE,
2984 p_msg_index => 1,
2985 p_msg_count => l_msg_count,
2986 p_msg_data => l_msg_data,
2987 p_data => l_data,
2988 p_msg_index_out => l_msg_index_out);
2989 x_msg_data := l_data;
2990 End If;
2991 raise FND_API.G_EXC_ERROR;
2992 End If;
2993 End If;
2994 -- End of FP_M changes
2995
2996 -- hyau Bug 2852753
2997 IF p_calling_module = 'SELF_SERVICE' THEN
2998
2999 OPEN cur_proj_id;
3000 FETCH cur_proj_id INTO l_project_id;
3001 CLOSE cur_proj_id;
3002
3003 OPEN get_product_code(l_project_id);
3004 FETCH get_product_code INTO l_pm_product_code;
3005 CLOSE get_product_code;
3006
3007 If l_pm_product_code IS NOT NULL THEN
3008 -- check to see if the schedule dates are actually different
3009 OPEN cur_schedule_dates;
3010 FETCH cur_schedule_dates INTO l_cur_sch_start_date, l_cur_sch_end_date;
3011 CLOSE cur_schedule_dates;
3012
3013 --Bug 3736889
3014 -- IF ((p_scheduled_start_date is not null) and (p_scheduled_start_date - l_cur_sch_start_date <> 0 )) OR
3015 -- ((p_scheduled_end_date is not null) and (p_scheduled_end_date - l_cur_sch_end_date <> 0)) THEN
3016 IF ((p_scheduled_start_date is not null) and
3017 (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) and
3018 (p_scheduled_start_date - l_cur_sch_start_date <> 0 )) OR
3019 ((p_scheduled_end_date is not null) and
3020 (p_scheduled_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) and
3021 (p_scheduled_end_date - l_cur_sch_end_date <> 0)) THEN
3022
3023 pa_pm_controls.Get_Project_actions_allowed
3024 (P_PM_PRODUCT_CODE => l_pm_product_code,
3025 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
3026 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
3027 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
3028 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
3029 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
3030 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
3031 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
3032 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
3033 P_ADD_TASK_ALLOWED => l_add_task_allowed,
3034 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
3035 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
3036 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
3037 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
3038 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
3039 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
3040 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
3041 P_ERROR_CODE => l_err_code,
3042 P_ERROR_STACK => l_err_stack,
3043 P_ERROR_STAGE => l_err_stage );
3044
3045 IF l_err_code <> 0 THEN
3046 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3047 p_msg_name => l_err_stage);
3048 END IF;
3049 IF l_update_task_dates_allowed = 'N' THEN
3050 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3051 p_msg_name => 'PA_PR_PM_NO_CHG_TASK_DATES');
3052 raise FND_API.G_EXC_ERROR;
3053 END IF;
3054 END IF;
3055 END IF;
3056 END IF;
3057
3058 -- end hyau Bug 2852753
3059
3060
3061 --Lock row
3062 IF( p_validate_only <> FND_API.G_TRUE) THEN
3063 BEGIN
3064 select 'x' into l_dummy
3065 from PA_PROJ_ELEM_VER_SCHEDULE
3066 where pev_schedule_id = p_pev_schedule_id
3067 and record_version_number = p_record_version_number
3068 for update of record_version_number NOWAIT;
3069 EXCEPTION
3070 WHEN TIMEOUT_ON_RESOURCE THEN
3071 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3072 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
3073 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
3074 WHEN NO_DATA_FOUND THEN
3075 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3076 p_msg_name => 'PA_XC_RECORD_CHANGED');
3077 l_msg_data := 'PA_XC_RECORD_CHANGED';
3078 WHEN OTHERS THEN
3079 IF SQLCODE = -54 then
3080 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3081 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
3082 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
3083 ELSE
3084 raise;
3085 END IF;
3086 END;
3087 ELSE
3088 --check record_version_number
3089 BEGIN
3090 select 'x' into l_dummy
3091 from PA_PROJ_ELEM_VER_SCHEDULE
3092 where pev_schedule_id = p_pev_schedule_id
3093 and record_version_number = p_record_version_number;
3094 EXCEPTION
3095 WHEN NO_DATA_FOUND THEN
3096 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3097 p_msg_name => 'PA_XC_RECORD_CHANGED');
3098 l_msg_data := 'PA_XC_RECORD_CHANGED';
3099 WHEN OTHERS THEN
3100 RAISE;
3101 END;
3102 END IF;
3103
3104 l_msg_count := FND_MSG_PUB.count_msg;
3105
3106 IF l_msg_count > 0 THEN
3107 x_msg_count := l_msg_count;
3108 x_return_status := 'E';
3109 RAISE FND_API.G_EXC_ERROR;
3110 END IF;
3111
3112
3113 PA_TASK_PVT1.Update_Schedule_Version(
3114 p_api_version => p_api_version
3115 ,p_init_msg_list => p_init_msg_list
3116 ,p_commit => p_commit
3117 ,p_validate_only => p_validate_only
3118 ,p_validation_level => p_validation_level
3119 ,p_calling_module => p_calling_module
3120 ,p_debug_mode => p_debug_mode
3121 ,p_max_msg_count => p_max_msg_count
3122 ,p_pev_schedule_id => p_pev_schedule_id
3123 ,p_calendar_id => p_calendar_id
3124 ,p_scheduled_start_date => p_scheduled_start_date
3125 ,p_scheduled_end_date => p_scheduled_end_date
3126 ,p_obligation_start_date => p_obligation_start_date
3127 ,p_obligation_end_date => p_obligation_end_date
3128 ,p_actual_start_date => p_actual_start_date
3129 ,p_actual_finish_date => p_actual_finish_date
3130 ,p_estimate_start_date => p_estimate_start_date
3131 ,p_estimate_finish_date => p_estimate_finish_date
3132 ,p_duration => p_duration
3133 ,p_early_start_date => p_early_start_date
3134 ,p_early_end_date => p_early_end_date
3135 ,p_late_start_date => p_late_start_date
3136 ,p_late_end_date => p_late_end_date
3137 ,p_milestone_flag => p_milestone_flag
3138 ,p_critical_flag => p_critical_flag
3139 ,p_WQ_PLANNED_QUANTITY => p_WQ_PLANNED_QUANTITY
3140 ,p_PLANNED_EFFORT => p_PLANNED_EFFORT
3141 ,p_PLANNED_EQUIP_EFFORT => p_PLANNED_EQUIP_EFFORT
3142 ,p_def_sch_tool_tsk_type_code => p_def_sch_tool_tsk_type_code
3143 ,p_constraint_type_code => p_constraint_type_code
3144 ,p_constraint_date => p_constraint_date
3145 ,p_free_slack => p_free_slack
3146 ,p_total_slack => p_total_slack
3147 ,p_effort_driven_flag => p_effort_driven_flag
3148 ,p_level_assignments_flag => p_level_assignments_flag
3149 ,p_record_version_number => p_record_version_number
3150 ,p_ext_act_duration => p_ext_act_duration
3151 ,p_ext_remain_duration => p_ext_remain_duration
3152 ,p_ext_sch_duration => p_ext_sch_duration
3153 ,p_attribute_category => p_attribute_category
3154 ,p_attribute1 => p_attribute1
3155 ,p_attribute2 => p_attribute2
3156 ,p_attribute3 => p_attribute3
3157 ,p_attribute4 => p_attribute4
3158 ,p_attribute5 => p_attribute5
3159 ,p_attribute6 => p_attribute6
3160 ,p_attribute7 => p_attribute7
3161 ,p_attribute8 => p_attribute8
3162 ,p_attribute9 => p_attribute9
3163 ,p_attribute10 => p_attribute10
3164 ,p_attribute11 => p_attribute11
3165 ,p_attribute12 => p_attribute12
3166 ,p_attribute13 => p_attribute13
3167 ,p_attribute14 => p_attribute14
3168 ,p_attribute15 => p_attribute15
3169 ,x_return_status => l_return_status
3170 ,x_msg_count => x_msg_count
3171 ,x_msg_data => x_msg_data
3172 );
3173
3174 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3175 x_msg_count := FND_MSG_PUB.count_msg;
3176 IF x_msg_count = 1 then
3177 pa_interface_utils_pub.get_messages
3178 (p_encoded => FND_API.G_TRUE,
3179 p_msg_index => 1,
3180 p_msg_count => l_msg_count,
3181 p_msg_data => l_msg_data,
3182 p_data => l_data,
3183 p_msg_index_out => l_msg_index_out);
3184 x_msg_data := l_data;
3185 END IF;
3186 raise FND_API.G_EXC_ERROR;
3187 END IF;
3188
3189 x_return_status := FND_API.G_RET_STS_SUCCESS;
3190
3191 IF (p_commit = FND_API.G_TRUE) THEN
3192 COMMIT;
3193 END IF;
3194
3195 IF (p_debug_mode = 'Y') THEN
3196 pa_debug.debug('PA_TASK_PUB1.UPDATE_SCHEDULE_VERSION END');
3197 END IF;
3198 EXCEPTION
3199 when FND_API.G_EXC_ERROR then
3200 if p_commit = FND_API.G_TRUE then
3201 rollback to update_schedule_version;
3202 end if;
3203 x_return_status := FND_API.G_RET_STS_ERROR;
3204 when FND_API.G_EXC_UNEXPECTED_ERROR then
3205 if p_commit = FND_API.G_TRUE then
3206 rollback to update_schedule_version;
3207 end if;
3208 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3209 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
3210 p_procedure_name => 'UPDATE_SCHEDULE_VERSION',
3211 p_error_text => SUBSTRB(SQLERRM,1,240));
3212 when OTHERS then
3213 if p_commit = FND_API.G_TRUE then
3214 rollback to update_schedule_version;
3215 end if;
3216 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3217 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
3218 p_procedure_name => 'UPDATE_SCHEDULE_VERSION',
3219 p_error_text => SUBSTRB(SQLERRM,1,240));
3220 raise;
3221 END Update_Schedule_Version;
3222
3223 -- API name : Copy_Task
3224 -- Type : Public procedure
3225 -- Pre-reqs : None
3226 -- Return Value : N/A
3227 -- Prameters
3228 -- p_api_version IN NUMBER N Not Null 1.0
3229 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
3230 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
3231 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
3232 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
3233 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
3234 -- p_debug_mode IN VARCHAR2 N Null N
3235 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3236 -- p_src_project_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3237 -- p_src_project_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3238 -- p_src_structre_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3239 -- p_src_structure_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3240 -- p_src_structure_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3241 -- p_src_structure_version_name IN VARCHAR2 N null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3242 -- p_src_task_version_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3243 -- p_src_task_name IN VARCHAR2 N null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3244 -- p_dest_structure_id IN NUMBER N null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3245 -- p_dest_structure_version_id IN NUMBER N NOT Null
3246 -- p_dest_task_version_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3247 -- p_dest_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3248 -- p_task_unpub_ver_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3249 -- p_fin_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3250 -- p_sharing_enabled IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3251 -- p_versioning_enabled IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3252 -- p_copy_option IN VARCHAR2 N NOT NULL
3253 -- p_peer_or_sub IN VARCHAR2 N Not Null
3254 -- p_called_from_bulk_api IN VARCHAR2 N NULL
3255 -- x_return_status OUT VARCHAR2 N Null
3256 -- x_msg_count OUT NUMBER N Null
3257 -- x_msg_data OUT VARCHAR2 N Null
3258 --
3259 -- History
3260 --
3261 -- 23-OCT-01 Majid Ansari -Created --
3262 --
3263
3264 PROCEDURE Copy_Task(
3265 p_api_version IN NUMBER :=1.0,
3266 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
3267 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
3268 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
3269 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
3270 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
3271 p_debug_mode IN VARCHAR2 :='N',
3272 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3273 p_src_project_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3274 p_src_project_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3275 p_src_structure_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3276 p_src_structure_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3277 p_src_structure_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3278 p_src_structure_version_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3279 p_src_task_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3280 p_src_task_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3281 p_dest_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, -- 4201927
3282 p_dest_structure_version_id IN NUMBER,
3283 p_dest_task_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3284 p_dest_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, -- 4201927
3285 p_task_unpub_ver_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- 4201927
3286 p_fin_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3287 p_sharing_enabled IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3288 p_versioning_enabled IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3289 p_copy_external_flag IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3290 p_called_from_api IN VARCHAR2 := 'ABCD',
3291 p_copy_option IN VARCHAR2,
3292 p_peer_or_sub IN VARCHAR2,
3293 p_prefix IN VARCHAR2,
3294 -- Added for FP_M changes. Refer to tracking Bug 3305199
3295 p_structure_type IN VARCHAR2 :='WORKPLAN',
3296 p_cp_dependency_flag IN VARCHAR2 :='N',
3297 p_cp_deliverable_asso_flag IN VARCHAR2 :='N',
3298 p_cp_tk_assignments_flag IN VARCHAR2 :='N',
3299 p_cp_people_flag IN VARCHAR2 :='N',
3300 p_cp_financial_elem_flag IN VARCHAR2 :='N',
3301 p_cp_material_items_flag IN VARCHAR2 :='N',
3302 p_cp_equipment_flag IN VARCHAR2 :='N',
3303 -- End of FP_M changes
3304 p_called_from_bulk_api IN VARCHAR2 :='N', -- 4201927
3305 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
3306 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
3307 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3308 ) IS
3309 l_api_name CONSTANT VARCHAR(30) := 'COPY_TASK';
3310 l_api_version CONSTANT NUMBER := 1.0;
3311
3312 l_task_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
3313 l_return_status VARCHAR2(1);
3314 l_msg_count NUMBER;
3315 l_msg_data VARCHAR2(2000); --bug 3637956
3316 l_data VARCHAR2(2000); --bug 3637956
3317 l_msg_index_out NUMBER;
3318 l_error_msg_code VARCHAR2(250);
3319
3320 l_src_project_id NUMBER;
3321 l_src_structure_id NUMBER;
3322 l_src_structure_version_id NUMBER;
3323 l_src_task_version_id NUMBER;
3324
3325 -- hyau Bug 2852753
3326 l_delete_project_allowed VARCHAR2(1);
3327 l_update_proj_num_allowed VARCHAR2(1);
3328 l_update_proj_name_allowed VARCHAR2(1);
3329 l_update_proj_desc_allowed VARCHAR2(1);
3330 l_update_proj_dates_allowed VARCHAR2(1);
3331 l_update_proj_status_allowed VARCHAR2(1);
3332 l_update_proj_manager_allowed VARCHAR2(1);
3333 l_update_proj_org_allowed VARCHAR2(1);
3334 l_add_task_allowed VARCHAR2(1);
3335 l_delete_task_allowed VARCHAR2(1);
3336 l_update_task_num_allowed VARCHAR2(1);
3337 l_update_task_name_allowed VARCHAR2(1);
3338 l_update_task_dates_allowed VARCHAR2(1);
3339 l_update_task_desc_allowed VARCHAR2(1);
3340 l_update_parent_task_allowed VARCHAR2(1);
3341 l_update_task_org_allowed VARCHAR2(1);
3342
3343 l_err_code NUMBER := 0;
3344 l_err_stack VARCHAR2(200) := NULL;
3345 l_err_stage VARCHAR2(200) := NULL;
3346
3347 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
3348
3349 ----------------------------------- FP_M changes : Begin
3350 -- Refer to tracking bug 3305199
3351 /* Bug #: 3305199 SMukka */
3352 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3353 /* l_Old_Task_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
3354 /* l_New_Task_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
3355 l_Old_Task_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3356 l_New_Task_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3357 Rec_Count NUMBER;
3358 ----------------------------------- FP_M changes : End
3359
3360 CURSOR get_product_code ( c_project_id NUMBER ) IS
3361 SELECT pm_product_code
3362 FROM PA_PROJECTS_ALL
3363 WHERE project_id = c_project_id;
3364
3365 -- end hyau Bug 2852753
3366
3367 --hsiu
3368 --added for advanced structure - versioning
3369 l_versioned VARCHAR2(1) := 'N';
3370 l_shared VARCHAR2(1) := 'N';
3371 --end changes
3372
3373 --hsiu
3374 --added for task weighing
3375 CURSOR get_cur_task_ver_weighting(c_ver_id NUMBER) IS
3376 select WEIGHTING_PERCENTAGE
3377 from pa_object_relationships
3378 where object_id_to1 = c_ver_id
3379 and object_type_to = 'PA_TASKS'
3380 and relationship_type = 'S';
3381 --end changes
3382
3383 /* Bug 2680486 -- Performance changes -- Selected project_id also in the following cursor, which will
3384 be used in other cursors. Also Restructured it to avoid Non-mergable view issue */
3385
3386 CURSOR cur_obj_rel( x_element_version_id NUMBER )
3387 IS
3388 SELECT b.element_version_id task_version_id, b.display_sequence display_sequence, b.proj_element_id,
3389 b.parent_Structure_version_id parent_Structure_version_id, b.wbs_level wbs_level,
3390 b.project_id,
3391 b.attribute_category,
3392 b.attribute1,
3393 b.attribute2,
3394 b.attribute3,
3395 b.attribute4,
3396 b.attribute5,
3397 b.attribute6,
3398 b.attribute7,
3399 b.attribute8,
3400 b.attribute9,
3401 b.attribute10,
3402 b.attribute11,
3403 b.attribute12,
3404 b.attribute13,
3405 b.attribute14,
3406 b.attribute15,
3407 Financial_Task_Flag -- FP_M changes 3305199 Bhumesh
3408 FROM pa_proj_element_versions b,
3409 pa_proj_elements c
3410 WHERE b.proj_element_id = c.proj_element_id
3411 AND c.link_task_flag = 'N'
3412 AND p_copy_option IN ( 'PA_TASK_SUBTASK', 'PA_ENTIRE_VERSION' )
3413 /*
3414 -- Added for FP_M changes : Bug 3305199
3415 and ( p_structure_type = 'WORKPLAN' OR
3416 ( p_structure_type = 'FINANCIAL' and Financial_Task_Flag = 'Y')
3417 )
3418 -- End of FP_M changes : Bug 3305199
3419 */
3420 AND b.element_version_id IN ( SELECT object_id_to1
3421 FROM pa_object_relationships
3422 WHERE relationship_type = 'S'
3423 START WITH object_id_from1 = x_element_version_id AND relationship_type = 'S'
3424 CONNECT BY object_id_from1 = PRIOR object_id_to1 AND relationship_type = prior relationship_type AND relationship_type = 'S' )
3425 UNION
3426 SELECT element_version_id task_version_id, display_sequence display_sequence, ppev.proj_element_id proj_element_id,
3427 parent_Structure_version_id parent_Structure_version_id, wbs_level wbs_level,
3428 project_id,
3429 attribute_category,
3430 attribute1,
3431 attribute2,
3432 attribute3,
3433 attribute4,
3434 attribute5,
3435 attribute6,
3436 attribute7,
3437 attribute8,
3438 attribute9,
3439 attribute10,
3440 attribute11,
3441 attribute12,
3442 attribute13,
3443 attribute14,
3444 attribute15,
3445 Financial_Task_Flag -- FP_M changes 3305199 Bhumesh
3446 FROM pa_proj_element_versions ppev
3447 WHERE ppev.element_version_id = p_src_task_version_id
3448 /* not required any more
3449 -- Added for FP_M changes : Bug 3305199
3450 and ( p_structure_type = 'WORKPLAN' OR
3451 ( p_structure_type = 'FINANCIAL' and Financial_Task_Flag = 'Y')
3452 )
3453 -- End of FP_M changes : Bug 3305199
3454 */
3455 AND p_copy_option IN( 'PA_TASK_ONLY', 'PA_TASK_SUBTASK' ) --here PA_TASK_SUBTASK is included in the in list to
3456 --include the task version id since it will not have any peer
3457 --relationship record in object rel table.
3458 ORDER BY 2;
3459
3460 CURSOR cur_proj_elems( p_proj_element_id NUMBER )
3461 IS
3462 SELECT
3463 PROJ_ELEMENT_ID
3464 ,PROJECT_ID
3465 ,OBJECT_TYPE
3466 ,ELEMENT_NUMBER
3467 ,NAME
3468 ,DESCRIPTION
3469 ,STATUS_CODE
3470 ,WF_STATUS_CODE
3471 ,PM_SOURCE_CODE
3472 ,PM_SOURCE_REFERENCE
3473 ,CLOSED_DATE
3474 ,LOCATION_ID
3475 ,MANAGER_PERSON_ID
3476 ,CARRYING_OUT_ORGANIZATION_ID
3477 ,TYPE_ID
3478 ,PRIORITY_CODE
3479 ,INC_PROJ_PROGRESS_FLAG
3480 ,RECORD_VERSION_NUMBER
3481 ,REQUEST_ID
3482 ,PROGRAM_APPLICATION_ID
3483 ,PROGRAM_ID
3484 ,PROGRAM_UPDATE_DATE
3485 ,ATTRIBUTE_CATEGORY
3486 ,ATTRIBUTE1
3487 ,ATTRIBUTE2
3488 ,ATTRIBUTE3
3489 ,ATTRIBUTE4
3490 ,ATTRIBUTE5
3491 ,ATTRIBUTE6
3492 ,ATTRIBUTE7
3493 ,ATTRIBUTE8
3494 ,ATTRIBUTE9
3495 ,ATTRIBUTE10
3496 ,ATTRIBUTE11
3497 ,ATTRIBUTE12
3498 ,ATTRIBUTE13
3499 ,ATTRIBUTE14
3500 ,ATTRIBUTE15
3501 ,WQ_ITEM_CODE
3502 ,WQ_UOM_CODE
3503 ,WQ_ACTUAL_ENTRY_CODE
3504 ,TASK_PROGRESS_ENTRY_PAGE_ID
3505 ,PARENT_STRUCTURE_ID
3506 ,PHASE_CODE
3507 ,PHASE_VERSION_ID
3508 ,WF_ITEM_TYPE
3509 ,WF_PROCESS
3510 ,WF_START_LEAD_DAYS
3511 ,BASE_PERCENT_COMP_DERIV_CODE
3512 FROM pa_proj_elements
3513 WHERE proj_element_id = p_proj_element_id;
3514
3515 cur_proj_elems_rec cur_proj_elems%ROWTYPE;
3516
3517
3518 /* Bug 2680486 -- Performance changes -- Commented the following cursor definition. Restructured it to
3519 avoid Non-mergable view issue*/
3520
3521 /* CURSOR cur_rev_parent_task( x_child_task_id NUMBER, x_wbs_level NUMBER )
3522 IS
3523 SELECT a.object_id_from1 parent_task_id
3524 FROM( SELECT object_id_from1
3525 FROM pa_object_relationships
3526 WHERE relationship_type = 'S'
3527 START WITH OBJECT_ID_TO1 = x_child_task_id
3528 --hsiu: bug 2669388
3529 -- START WITH object_id_from1 = x_child_task_id
3530 --traverse reverse
3531 CONNECT BY object_id_to1 = PRIOR object_id_from1 AND relationship_type = 'S' ) a, pa_proj_element_versions b
3532 WHERE a.object_id_from1 = b.element_version_id
3533 AND b.wbs_level = x_wbs_level;
3534 */
3535
3536 CURSOR cur_rev_parent_task( x_child_task_id NUMBER, x_wbs_level NUMBER )
3537 IS
3538 SELECT b.element_version_id parent_task_id
3539 FROM pa_proj_element_versions b
3540 WHERE b.wbs_level = x_wbs_level
3541 AND b.element_version_id IN ( SELECT object_id_from1
3542 FROM pa_object_relationships
3543 WHERE relationship_type = 'S'
3544 START WITH OBJECT_ID_TO1 = x_child_task_id
3545 --hsiu: bug 2669388
3546 -- START WITH object_id_from1 = x_child_task_id
3547 --traverse reverse
3548 CONNECT BY object_id_to1 = PRIOR object_id_from1 AND relationship_type = 'S'
3549 AND relationship_type = PRIOR relationship_type) ;
3550
3551
3552 /* Bug 2680486 -- Performance changes -- Passing project_id also to use the index in the following cursor */
3553
3554 CURSOR cur_struc_id( x_structure_version_id NUMBER, x_project_id NUMBER )
3555 IS
3556 SELECT proj_element_id
3557 FROM pa_proj_elem_ver_structure
3558 WHERE element_version_id = x_structure_version_id
3559 AND project_id = x_project_id;
3560
3561
3562 CURSOR cur_struc_type( x_structure_id NUMBER )
3563 IS
3564 SELECT 'Y'
3565 FROM pa_proj_structure_types ppst
3566 ,pa_structure_types pst
3567 WHERE ppst.proj_element_id = x_structure_id
3568 AND ppst.structure_type_id = pst.structure_type_id
3569 AND pst.structure_type_class_code = 'WORKPLAN';
3570
3571 CURSOR cur_struc_type2( c_structure_id NUMBER )
3572 IS
3573 SELECT 'Y'
3574 FROM pa_proj_structure_types ppst
3575 ,pa_structure_types pst
3576 WHERE ppst.proj_element_id = c_structure_id
3577 AND ppst.structure_type_id = pst.structure_type_id
3578 AND pst.structure_type_class_code IN( 'FINANCIAL' );
3579
3580 /* Bug 2623999 -- Commented the following cursor def'n and added a new one below it.
3581 We should check a structure version is and not structure id to
3582 find out a structure version is publised or not */
3583 /* CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
3584 select 'Y'
3585 from pa_proj_elem_ver_structure
3586 where proj_element_id = c_structure_id
3587 AND project_id = c_project_id
3588 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3589 */
3590
3591 --bug 3074706
3592 --added project_id
3593 CURSOR cur_pub_versions( c_structure_version_id NUMBER, c_project_id NUMBER ) is
3594 select 'Y'
3595 from pa_proj_elem_ver_structure
3596 where element_version_id = c_structure_version_id
3597 and project_id = c_project_id
3598 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3599 --end bug 3074706
3600
3601 CURSOR cur_dest_proj_id
3602 IS
3603 SELECT project_id
3604 FROM pa_proj_element_versions
3605 WHERE element_version_id = p_dest_task_version_id;
3606
3607 /* Added the Cursor For Bug #3573143*/
3608 CURSOR cur_task_id (c_element_version_id IN NUMBER, c_project_id IN NUMBER) IS
3609 SELECT proj_element_id
3610 FROM pa_proj_element_versions
3611 where element_version_id = c_element_version_id
3612 AND project_id = c_project_id;
3613 l_cur_task_id cur_task_id%ROWTYPE;
3614 /* Ended Bug 3573143*/
3615
3616 -- xxlu added task DFF attributes
3617 CURSOR cur_task_attr (c_task_id IN NUMBER) IS
3618 SELECT *
3619 FROM pa_tasks
3620 WHERE task_id = c_task_id;
3621 l_cur_task_attr cur_task_attr%ROWTYPE;
3622 -- end xxlu changes
3623
3624 l_dest_project_id NUMBER;
3625
3626 l_dummy_char VARCHAR2(1);
3627 l_task_number VARCHAR2(100);
3628 l_task_name VARCHAR2(240);
3629 l_structure_id NUMBER;
3630 l_project_id NUMBER;
3631 l_published_version VARCHAR2(1);
3632 l_copy_node_flag VARCHAR2(1);
3633 l_ref_task_id NUMBER;
3634 l_ref_project_id NUMBER;
3635
3636 l_old_wbs_level NUMBER;
3637
3638 l_ref_task_version_id NUMBER;
3639 l_peer_or_sub VARCHAR2(4);
3640 l_task_version_id NUMBER;
3641 l_pev_schedule_id NUMBER;
3642 l_element_version_id NUMBER;
3643
3644 --Hsiu added for date rollup
3645 --bug 3991067
3646 -- l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3647 l_tasks_ver_ids PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
3648 l_task_cnt NUMBER := 0;
3649 --end bug 3991067
3650
3651 --hsiu added for task weighting
3652 l_weighting NUMBER(17,2);
3653
3654 --hsiu added for task status rollup
3655 l_rollup_task_id NUMBER;
3656
3657 cursor sub_task_exists(l_parent_task_version_id NUMBER) IS
3658 select '1'
3659 from pa_object_relationships
3660 where object_id_from1 = l_parent_task_version_id
3661 and object_type_from IN ('PA_TASKS','PA_STRUCTURES')
3662 and object_type_to IN ('PA_TASKS','PA_STRUCTURES')
3663 and relationship_type = 'S';
3664
3665 --hsiu added for task version status
3666 CURSOR cur_proj_is_template(c_project_id NUMBER)
3667 IS select 'Y'
3668 from pa_projects_all
3669 where project_id = c_project_id
3670 and template_flag = 'Y';
3671 l_template_flag VARCHAR2(1);
3672
3673 l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
3674 --end hsiu changes
3675
3676 -- xxlu added for DFF attributes for calling create_schedule_version
3677 CURSOR cur_proj_elem_ver_sch(c_element_version_id NUMBER, c_project_id NUMBER) IS
3678 SELECT * FROM pa_proj_elem_ver_schedule
3679 WHERE project_id = c_project_id
3680 AND element_version_id = c_element_version_id;
3681
3682 v_cur_sch cur_proj_elem_ver_sch%ROWTYPE;
3683
3684 -- end xxlu changes
3685
3686 --hsiu added for task status
3687 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
3688 select object_id_from1
3689 from pa_object_relationships
3690 where object_id_to1 = c_elem_ver_id
3691 and object_type_to = 'PA_TASKS'
3692 and relationship_type = 'S';
3693 l_parent_ver_id NUMBER;
3694
3695 --hsiu added for bug 2669388
3696 CURSOR get_ref_tk_wbs(c_element_version_id NUMBER) IS
3697 select WBS_LEVEL
3698 from pa_proj_element_versions
3699 where element_version_id = c_element_version_id;
3700
3701 l_ref_tk_wbs_level NUMBER;
3702 l_src_tasks_found boolean := false; --Bug2741989
3703
3704 --3035902: process update flag changes
3705 l_wp_process_flag VARCHAR2(1);
3706 l_wp_type VARCHAR2(1);
3707
3708 l_src_wp_type VARCHAR2(1); -- 4223490
3709
3710 l_weighting_basis_code VARCHAR2(30);
3711 --3035902: end process update flag changes
3712
3713 /* Included for Bug 4201927*/
3714 l_ver_enabled VARCHAR2(1);
3715 l_copy_external_flag VARCHAR2(1);
3716
3717 --bug 3301192 fin plan
3718 /* Bug #: 3305199 SMukka */
3719 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3720 /* l_old_task_ver_ids PA_PLSQL_DATATYPES.IdTabTyp; */
3721 /* l_new_task_ver_ids PA_PLSQL_DATATYPES.IdTabTyp; */
3722 /* l_old_task_ids PA_PLSQL_DATATYPES.IdTabTyp; */
3723 /* l_new_task_ids PA_PLSQL_DATATYPES.IdTabTyp; */
3724
3725 l_old_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3726 l_new_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3727
3728 l_old_task_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3729 l_new_task_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3730
3731 l_lowest_task_flag1 VARCHAR2(1);
3732 l_lowest_task_flag2 VARCHAR2(1);
3733 l_fin_task_flag VARCHAR2(1); -- fin html changes
3734 --bug 3301192 fin plan
3735
3736
3737 -- for bug# 3905123 , added cursor and local variable
3738
3739 CURSOR cur_is_top_task( task_ver_id NUMBER, struct_ver_id number)
3740 IS
3741 SELECT
3742 'x'
3743 FROM
3744 pa_object_relationships obj
3745 WHERE
3746 obj.object_id_to1 = task_ver_id
3747 AND obj.object_id_from1 = struct_ver_id
3748 AND object_type_from = 'PA_STRUCTURES'
3749 AND object_type_to = 'PA_TASKS'
3750 AND relationship_type = 'S'
3751 AND relationship_subtype = 'STRUCTURE_TO_TASK';
3752
3753 is_top_task_in_dest varchar2(1) := 'N';
3754 is_top_task varchar2(1) := NULL;
3755
3756 -- 3905123 end
3757
3758 BEGIN
3759 pa_debug.init_err_stack ('PA_TASK_PUB1.COPY_TASK');
3760
3761 IF (p_debug_mode = 'Y') THEN
3762 pa_debug.debug('PA_TASK_PUB1.COPY_TASK begin');
3763 END IF;
3764
3765 IF (p_commit = FND_API.G_TRUE) THEN
3766 savepoint copy_task;
3767 END IF;
3768
3769 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
3770 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3771 END IF;
3772
3773 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
3774 FND_MSG_PUB.initialize;
3775 END IF;
3776
3777 --bug 4075697 copy_task
3778 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
3779 --bug 4075697
3780
3781 --3035902: process update flag changes
3782 l_wp_process_flag := 'N';
3783 --3035902: end process update flag changes
3784
3785 -- Added for FP_M changes. Bug 3305199 : Bhumesh xxx
3786
3787 If p_called_from_bulk_api = 'N' THEN -- 4201927
3788
3789 OPEN cur_dest_proj_id;
3790 FETCH cur_dest_proj_id INTO l_dest_project_id;
3791 CLOSE cur_dest_proj_id;
3792
3793 ELSE --If called from Bulk API
3794 l_dest_project_id := p_dest_project_id ;
3795 END IF;
3796 /* If p_structure_type = 'WORKPLAN' and
3797 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id)
3798 IN ('SHARE_PARTIAL')
3799 Then
3800
3801 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
3802 p_task_version_id =>
3803 , p_ref_task_version_id => p_dest_task_version_id
3804 , x_return_status => x_return_status
3805 , x_msg_count => x_msg_count
3806 , x_msg_data => x_msg_data
3807 , x_error_msg_code => l_error_msg_code);
3808
3809 IF (x_return_status <> 'Y') THEN
3810 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3811 p_msg_name => l_error_msg_code);
3812 raise FND_API.G_EXC_ERROR;
3813 End If;
3814 End If;
3815 */ --moved below
3816
3817 -- End of FP_M changes
3818
3819 -- hyau Bug 2852753
3820 IF p_calling_module = 'SELF_SERVICE' THEN
3821
3822 --3035902: process update flag changes
3823 l_weighting_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_dest_project_id);
3824 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_dest_structure_version_id, 'WORKPLAN');
3825 --3035902: end process update flag changes
3826
3827
3828 OPEN get_product_code(l_dest_project_id);
3829 FETCH get_product_code INTO l_pm_product_code;
3830 CLOSE get_product_code;
3831
3832 If p_called_from_bulk_api = 'N' THEN
3833
3834 If l_pm_product_code IS NOT NULL THEN
3835 pa_pm_controls.Get_Project_actions_allowed
3836 (P_PM_PRODUCT_CODE => l_pm_product_code,
3837 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
3838 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
3839 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
3840 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
3841 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
3842 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
3843 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
3844 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
3845 P_ADD_TASK_ALLOWED => l_add_task_allowed,
3846 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
3847 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
3848 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
3849 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
3850 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
3851 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
3852 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
3853 P_ERROR_CODE => l_err_code,
3854 P_ERROR_STACK => l_err_stack,
3855 P_ERROR_STAGE => l_err_stage );
3856
3857 IF l_err_code <> 0 THEN
3858 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3859 p_msg_name => l_err_stage);
3860 END IF;
3861 IF l_add_task_allowed = 'N' THEN
3862 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3863 p_msg_name => 'PA_PR_PM_CANNOT_COPY');
3864 raise FND_API.G_EXC_ERROR;
3865 END IF;
3866 END IF;
3867
3868 End IF; -- End p_called_from_bulk_Api is N
3869 END IF;
3870
3871 -- end hyau Bug 2852753
3872
3873 ----dbms_output.put_line( 'Before Id to name conv.' );
3874
3875 /* Performance Bug 4201927 : Commenting as this API not called in Move Task version Context
3876 IF p_called_from_api <> 'MOVE_TASK_VERSION'
3877 THEN
3878 */
3879 --do not do any validations if called from Move task version API.
3880 IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
3881
3882
3883 If p_called_from_bulk_api = 'N' THEN
3884
3885 IF ((p_src_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3886 (p_src_project_name IS NOT NULL)) OR
3887 ((p_src_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
3888 (p_src_project_id IS NOT NULL)) THEN
3889 --Call Check API.
3890 PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
3891 p_project_name => p_src_project_name,
3892 p_project_id => p_src_project_id,
3893 x_project_id => l_src_project_id,
3894 x_return_status => l_return_status,
3895 x_error_msg_code => l_error_msg_code);
3896 --dbms_output.put_line('after proj name 2 id conv: '||l_src_project_id);
3897 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3898 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3899 p_msg_name => l_error_msg_code);
3900 END IF;
3901 END IF;
3902
3903 IF ((p_src_structure_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3904 (p_src_structure_name IS NOT NULL)) OR
3905 ((p_src_structure_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
3906 (p_src_structure_id IS NOT NULL)) THEN
3907 --Call Check API.
3908 PA_PROJECT_STRUCTURE_UTILS.Structure_Name_Or_Id
3909 (
3910 p_project_id => l_src_project_id
3911 ,p_structure_name => p_src_structure_name
3912 ,p_structure_id => p_src_structure_id
3913 ,x_structure_id => l_src_structure_id
3914 ,x_return_status => l_return_status
3915 ,x_error_message_code => l_error_msg_code
3916 );
3917 --dbms_output.put_line('after struct name 2 id conv: '||l_src_structure_id);
3918 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3919 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3920 p_msg_name => l_error_msg_code);
3921 END IF;
3922 END IF; --End Name-Id Conversion
3923
3924 --dbms_output.put_line( 'Before Id to name conv. Structure_Version_Name_Or_Id' );
3925 IF ((p_src_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3926 (p_src_structure_version_name IS NOT NULL)) OR
3927 ((p_src_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
3928 (p_src_structure_version_id IS NOT NULL)) THEN
3929 --Call Check API.
3930 l_src_structure_version_id := p_src_structure_version_id;
3931 PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id
3932 (
3933 p_structure_id => l_src_structure_id
3934 ,p_structure_version_name => p_src_structure_version_name
3935 ,p_structure_version_id => p_src_structure_version_id
3936 ,x_structure_version_id => l_src_structure_version_id
3937 ,x_return_status => l_return_status
3938 ,x_error_message_code => l_error_msg_code
3939 );
3940 --dbms_output.put_line('after struct ver name 2 id conv: '||l_src_structure_version_id);
3941 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3942 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3943 p_msg_name => l_error_msg_code);
3944 END IF;
3945
3946 END IF; --End Name-Id Conversion
3947
3948 /*Task Name to ID Conversion : This is not needed in case of call from SS (i.e) Copy Bulk API */
3949 IF ((p_src_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3950 (p_src_task_name IS NOT NULL)) OR
3951 ((p_src_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
3952 (p_src_task_version_id IS NOT NULL)) THEN
3953 --Call Check API.
3954
3955 --dbms_output.put_line( 'Before Id to name conv. task_Ver_Name_Or_Id' );
3956
3957 PA_PROJ_ELEMENTS_UTILS.task_Ver_Name_Or_Id
3958 (
3959 p_task_name => p_src_task_name
3960 ,p_task_version_id => p_src_task_version_id
3961 ,p_structure_version_id => l_src_structure_version_id
3962 ,x_task_version_id => l_src_task_version_id
3963 ,x_return_status => l_return_status
3964 ,x_error_msg_code => l_error_msg_code
3965 );
3966 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3967 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3968 p_msg_name => l_error_msg_code);
3969 END IF;
3970 END IF; --End Name-Id Conversion
3971
3972 /*4201927 : Moved this code outside the Loop*/
3973 -- bug 3301192 financial HTML changes
3974 IF p_structure_type = 'WORKPLAN'
3975 THEN
3976 IF
3977 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) =
3978 'SHARE_FULL'
3979 THEN
3980 l_fin_task_flag := 'Y';
3981 ELSE
3982 l_fin_task_flag := 'N';
3983 END IF;
3984 ELSE
3985 l_fin_task_flag := 'Y';
3986 END IF;
3987 -- bug 3301192 financial HTML changes
3988 /*4201927 : Moved this code outside the Loop*/
3989
3990 /*4201927 Start <<B>> */
3991 OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id );
3992 FETCH cur_struc_id INTO l_structure_id;--This is Destination StructureID
3993 CLOSE cur_struc_id;
3994
3995
3996 OPEN cur_proj_is_template(l_dest_project_id);
3997 FETCH cur_proj_is_template into l_template_flag;
3998 IF cur_proj_is_template%NOTFOUND THEN
3999 l_template_flag := 'N';
4000 END IF;
4001 CLOSE cur_proj_is_template;
4002
4003 /*4201927 : Moved this code outside the Loop*/
4004 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
4005 l_dest_project_id);
4006 /*4201927 : Moved this code outside the Loop*/
4007
4008 /*4201927 : Deriving whether versioned or not only once*/
4009 l_ver_enabled :=
4010 PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id);
4011
4012 /*4201927 : <<C>> Value for Copy External Flag*/
4013 IF p_src_project_id = l_dest_project_id
4014 THEN
4015 l_copy_external_flag := 'N';
4016 ELSE
4017 l_copy_external_flag := 'Y';
4018 ENd IF;
4019
4020 --hsiu added for task version status changes
4021 IF (l_template_flag = 'N') THEN
4022 --check if structure is shared
4023 -- if shared, check if versioned
4024 -- 'WORKING' if versioned; 'PUBLISHED' if not
4025 -- if split, check if 'FINANCIAL'
4026 -- 'PUBLISHED' if financial
4027 -- check if versioned
4028 -- 'WORKING' if versioend; 'PUBLISHED' if not
4029 IF ('Y' = l_shared) THEN
4030 IF ('Y' = l_ver_enabled) THEN
4031 l_task_unpub_ver_status_code := 'WORKING';
4032 ELSE
4033 l_task_unpub_ver_status_code := 'PUBLISHED';
4034 END IF;
4035 ELSE --split
4036 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id,'FINANCIAL') AND
4037 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id,'WORKPLAN')) THEN
4038 l_task_unpub_ver_status_code := 'PUBLISHED';
4039 ELSE --workplan only
4040 IF ('Y' = l_ver_enabled) THEN
4041 l_task_unpub_ver_status_code := 'WORKING';
4042 ELSE
4043 l_task_unpub_ver_status_code := 'PUBLISHED';
4044 END IF;
4045 END IF;
4046 END IF;
4047 ELSE
4048 l_task_unpub_ver_status_code := 'WORKING';
4049 END IF;
4050 --end task version status changes
4051
4052 /*4201927 End <<B>> */
4053 Else -- If called from copy bulk APi
4054 l_src_structure_version_id := p_src_structure_version_id;
4055 l_src_project_id := p_src_project_id ;
4056 l_src_structure_id := p_src_structure_id ;
4057 l_src_task_version_id := p_src_task_version_id ;
4058
4059 l_task_unpub_ver_status_code := p_task_unpub_ver_status_code;
4060 l_structure_id := p_dest_structure_id ;
4061 l_fin_task_flag := p_fin_task_flag;
4062
4063 l_shared :=p_sharing_enabled ;
4064 l_ver_enabled := p_versioning_enabled;
4065 l_copy_external_flag := p_copy_external_flag;
4066 -- as we have already derived this value in copy bulk api
4067
4068 End If ; -- If p_called_from_bulk_api = 'N'
4069
4070 END IF; -- End If Calling module is SS or Exchange
4071
4072
4073 IF l_src_project_id IS NULL OR l_src_structure_id IS NULL OR
4074 l_src_structure_version_id IS NULL OR (l_src_task_version_id IS NULL AND p_copy_option <> 'PA_ENTIRE_VERSION')
4075 THEN
4076 /* This Copy API not used in Move Task version context : Hence this check is not needed : 4201927
4077 IF p_called_from_api <> 'MOVE_TASK_VERSION'
4078 THEN
4079 */
4080
4081 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4082 p_msg_name => 'PA_PS_NOT_ENOUGH_PARAMS' );
4083 x_msg_data := 'COPY TASK : PA_PS_NOT_ENOUGH_PARAMS';
4084 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4085 RAISE FND_API.G_EXC_ERROR;
4086 /*END IF; : 4201927 */
4087 END IF;
4088
4089 /* 4201927 : Perf Fix : END IF; --move_task_version check. */
4090
4091 -- 4223490 Included for Copy External Flow
4092 IF l_copy_external_flag = 'Y' THEN
4093 l_src_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_src_structure_version_id,'WORKPLAN');
4094 ELSE
4095 l_src_wp_type := l_wp_type;
4096 END IF;
4097
4098 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4099 x_msg_count := FND_MSG_PUB.count_msg;
4100 IF x_msg_count = 1 then
4101 pa_interface_utils_pub.get_messages
4102 (p_encoded => FND_API.G_TRUE,
4103 p_msg_index => 1,
4104 p_msg_count => l_msg_count,
4105 p_msg_data => l_msg_data,
4106 p_data => l_data,
4107 p_msg_index_out => l_msg_index_out);
4108 x_msg_data := l_data;
4109 END IF;
4110 raise FND_API.G_EXC_ERROR;
4111 END IF;
4112 --If source task is empty and user not selected copy PA_ENTIRE_VERSION
4113 IF ( l_src_task_version_id IS NULL AND
4114 l_src_structure_version_id IS NOT NULL AND
4115 p_copy_option <> 'PA_ENTIRE_VERSION' ) OR
4116 ( p_copy_option NOT IN( 'PA_ENTIRE_VERSION', 'PA_TASK_ONLY', 'PA_TASK_SUBTASK' ) )
4117 THEN
4118 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4119 p_msg_name => 'PA_PS_WRONG_COPY_OPTION' );
4120 x_msg_data := 'PA_PS_WRONG_COPY_OPTION';
4121 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4122 RAISE FND_API.G_EXC_ERROR;
4123 END IF;
4124
4125 IF p_copy_option = 'PA_TASK_ONLY' OR p_copy_option = 'PA_TASK_SUBTASK'
4126 THEN
4127 l_element_version_id := l_src_task_version_id;
4128
4129 /*4201927 : This API not used in Move Task Version Context
4130 --If called from move_task versionsd then just copy parameter in l_element_verion_id var.
4131 IF p_called_from_api = 'MOVE_TASK_VERSION'
4132 THEN
4133 l_element_version_id := p_src_task_version_id;
4134 END IF;
4135 */
4136
4137 ELSIF p_copy_option = 'PA_ENTIRE_VERSION'
4138 THEN
4139 l_element_version_id := l_src_structure_version_id;
4140 END IF;
4141 IF p_dest_structure_version_id = p_dest_task_version_id THEN
4142 --Copying under a structure;
4143 l_ref_task_version_id := p_dest_structure_version_id;
4144
4145 --hsiu: bug 2669388
4146 l_ref_tk_wbs_level := 0;
4147 --end bug 2669388
4148 ELSE
4149 l_ref_task_version_id := p_dest_task_version_id;
4150 --hsiu: bug 2669388
4151 OPEN get_ref_tk_wbs(l_ref_task_version_id);
4152 FETCH get_ref_tk_wbs into l_ref_tk_wbs_level;
4153 CLOSE get_ref_tk_wbs;
4154
4155 IF (p_peer_or_sub = 'SUB') THEN
4156 l_ref_tk_wbs_level := l_ref_tk_wbs_level;
4157 ELSE
4158 l_ref_tk_wbs_level := l_ref_tk_wbs_level-1;
4159 END IF;
4160 --end bug 2669388
4161 END IF;
4162
4163 l_peer_or_sub := p_peer_or_sub;
4164 --hsiu task status changes
4165 --check if ok to create subtask
4166 IF (l_peer_or_sub = 'PEER') THEN
4167 OPEN get_parent_version_id(l_ref_task_version_id);
4168 FETCH get_parent_version_id into l_parent_ver_id;
4169 CLOSE get_parent_version_id;
4170 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
4171 p_parent_task_ver_id => l_parent_ver_id
4172 ,x_return_status => l_return_status
4173 ,x_error_message_code => l_error_msg_code);
4174
4175 IF (l_return_status <> 'Y') THEN
4176 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4177 p_msg_name => l_error_msg_code);
4178 raise FND_API.G_EXC_ERROR;
4179 END IF;
4180 ELSE
4181 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
4182 p_parent_task_ver_id => l_ref_task_version_id
4183 ,x_return_status => l_return_status
4184 ,x_error_message_code => l_error_msg_code
4185 );
4186 IF (l_return_status <> 'Y') THEN
4187 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4188 p_msg_name => l_error_msg_code);
4189 raise FND_API.G_EXC_ERROR;
4190 END IF;
4191 END IF;
4192 --end task status changes
4193 /* not required in the context of copy_task bcoz when a task is copied, copied as financial if copied under Fin tab and
4194 workplan if copied under WP tab for a partial share structures.
4195 If p_structure_type = 'WORKPLAN' and
4196 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) = 'SHARE_PARTIAL'
4197 Then
4198 IF p_dest_structure_version_id <> p_dest_task_version_id -- reference should not be str ver
4199 THEN
4200 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
4201 p_task_version_id => l_element_version_id
4202 , p_ref_task_version_id => l_ref_task_version_id
4203 , x_return_status => x_return_status
4204 , x_msg_count => x_msg_count
4205 , x_msg_data => x_msg_data
4206 , x_error_msg_code => l_error_msg_code);
4207
4208 IF (x_return_status <> 'Y') THEN
4209 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4210 p_msg_name => l_error_msg_code);
4211 raise FND_API.G_EXC_ERROR;
4212 End If;
4213 END IF;
4214 End If;
4215 */
4216
4217 --check the task is a lowest task bug 3301192
4218 IF p_dest_structure_version_id <> p_dest_task_version_id /* reference should not be str ver */
4219 THEN
4220 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_dest_task_version_id );
4221 END IF;
4222
4223 --dbms_output.put_line( 'l_element_version_id '||l_element_version_id );
4224
4225 ----------------------------------------------
4226 Rec_Count := 0; -- <-- Added for FP_M changes
4227 -- Refer to tracking bug 3305199
4228 ----------------------------------------------
4229 FOR cur_obj_rel_rec IN cur_obj_rel( l_element_version_id ) LOOP
4230
4231 l_src_tasks_found := true; -- Bug2741989
4232
4233 OPEN cur_proj_elems( cur_obj_rel_rec.proj_element_id );
4234 FETCH cur_proj_elems INTO cur_proj_elems_rec;
4235 CLOSE cur_proj_elems;
4236
4237 IF length( p_prefix||cur_proj_elems_rec.element_number ) > 100 OR
4238 length( p_prefix||cur_proj_elems_rec.name ) > 240
4239 THEN
4240 l_task_number := SUBSTR( p_prefix||cur_proj_elems_rec.element_number, 1, 100 );
4241 l_task_name := SUBSTR( p_prefix||cur_proj_elems_rec.name, 1, 240 );
4242 ELSE
4243 l_task_number := p_prefix||cur_proj_elems_rec.element_number;
4244 l_task_name := p_prefix||cur_proj_elems_rec.name;
4245 END IF;
4246
4247 /*4201927 */
4248 IF cur_obj_rel%ROWCOUNT = 1
4249 THEN
4250 /* Bug 2680486 -- Performance changes -- Passed project_id also in the following statement */
4251
4252 OPEN cur_struc_id( cur_obj_rel_rec.parent_structure_version_id, cur_obj_rel_rec.project_id );
4253 FETCH cur_struc_id INTO l_structure_id;
4254 CLOSE cur_struc_id;
4255 END IF;
4256 l_structure_id := p_dest_structure_id ;
4257 /*4201927 */
4258
4259 --dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Task' );
4260 --dbms_output.put_line( 'Org Id '||cur_proj_elems_rec.carrying_out_organization_id);
4261
4262 /*4201927 : This Copy API not used in Move Task Version Context , Hence Commenting
4263 IF (p_called_from_api <> 'MOVE_TASK_VERSION') THEN */
4264 --bug 2846700
4265 --the rest has been moved above create_task_version
4266
4267 /* 4201927 This l_structure_id correspond's to the destination project's structure id
4268 for the passed p_dest_structure_version_id.
4269 In Copy Bulk API we are already deriving this value and passing
4270 as p_dest_structure_id
4271 Also,This code need not be present inside FOR LOP for each and every task
4272
4273 Hence moving it outside the loop
4274 */
4275 /* OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id );
4276 FETCH cur_struc_id INTO l_structure_id; -- (<<A>>)
4277 CLOSE cur_struc_id;
4278 */
4279 /*This code refers to finding whether the destination is a template or project
4280 It need not be present inside the loop
4281 /*
4282 --hsiu: added for task version status
4283 OPEN cur_proj_is_template(l_dest_project_id);
4284 FETCH cur_proj_is_template into l_template_flag;
4285 IF cur_proj_is_template%NOTFOUND THEN
4286 l_template_flag := 'N';
4287 END IF;
4288 CLOSE cur_proj_is_template;
4289 4201927 */
4290 /* ============ Moved this block of code above the FOR LOOP tagged by <<B>> =====*/
4291
4292 --bug 2846700
4293 /* END IF; 4201927*/
4294
4295 --hsiu modified for calculating weighting.
4296 OPEN get_cur_task_ver_weighting(cur_obj_rel_rec.task_version_id);
4297 FETCH get_cur_task_ver_weighting into l_weighting;
4298 CLOSE get_cur_task_ver_weighting;
4299
4300 IF cur_obj_rel%ROWCOUNT > 1
4301 THEN
4302 IF l_old_wbs_level < cur_obj_rel_rec.wbs_level
4303 THEN
4304 l_peer_or_sub := 'SUB';
4305 ELSIF l_old_wbs_level = cur_obj_rel_rec.wbs_level
4306 THEN
4307 l_peer_or_sub := 'PEER';
4308 ELSE
4309 --if the new task being created is the lower level than the previous one.
4310 --write logic to find out the task at cur_obj_rel_rec.wbs_level
4311 -- t1
4312 -- t1.1
4313 -- t1.2
4314 -- t1.2.1
4315 -- t1.2.2
4316 -- t1.2.2.1
4317 -- t1.3 ( new task created here. For this task the ref is t1.2 )
4318 l_peer_or_sub := 'PEER';
4319 --hsiu: bug 269388
4320 -- OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level);
4321 OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level + l_ref_tk_wbs_level);
4322 --end bug 2669388
4323 FETCH cur_rev_parent_task INTO l_ref_task_version_id;
4324 /** Code added for Bug 4046751 . **/
4325 -- While doing Copy Tasks of the structure below
4326 -- t1
4327 -- t1.1
4328 -- t1.1.1
4329 -- t1.1.1.1
4330 -- t1.1.2
4331 -- If we Copy t1.1, then task t1.1.2 was being created as a peer task of t1.1.1.1.
4332 -- The code below will ensure that its p_ref_task_id is set to t1.1.1 and not t1.1.1.1
4333 IF cur_rev_parent_task%NOTFOUND then
4334 CLOSE cur_rev_parent_task;
4335 OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level);
4336 FETCH cur_rev_parent_task INTO l_ref_task_version_id;
4337 END if;
4338 /** Code changes end for BUg 4046751 **/
4339 CLOSE cur_rev_parent_task;
4340 END IF;
4341 --hsiu added, for task weighting
4342 ELSIF cur_obj_rel%ROWCOUNT = 1 THEN
4343 IF (l_peer_or_sub = 'PEER') THEN
4344 l_weighting := 0;
4345 ELSE --'SUB'
4346 OPEN sub_task_exists(l_ref_task_version_id);
4347 FETCH sub_task_exists into l_dummy_char;
4348 IF sub_task_exists%NOTFOUND THEN
4349 If (p_copy_option <> 'PA_ENTIRE_VERSION') THEN
4350 l_weighting := 100;
4351 END IF;
4352 ELSE
4353 l_weighting := 0;
4354 END IF;
4355 END IF;
4356 --end task weighting modification
4357 END IF;
4358
4359 /* This code need not execute for each and every task in LOOP
4360 4201927 : Moved this code to tagging marked by <<B>>
4361 -- Start of block moved
4362
4363 ----dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Task_Version' );
4364 --hsiu added for task version status changes
4365 IF (l_template_flag = 'N') THEN
4366 --check if structure is shared
4367 -- if shared, check if versioned
4368 -- 'WORKING' if versioned; 'PUBLISHED' if not
4369 -- if split, check if 'FINANCIAL'
4370 -- 'PUBLISHED' if financial
4371 -- check if versioned
4372 -- 'WORKING' if versioend; 'PUBLISHED' if not
4373 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_dest_project_id)) THEN
4374 IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id)) THEN
4375 l_task_unpub_ver_status_code := 'WORKING';
4376 ELSE
4377 l_task_unpub_ver_status_code := 'PUBLISHED';
4378 END IF;
4379 ELSE --split
4380 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL') AND
4381 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
4382 l_task_unpub_ver_status_code := 'PUBLISHED';
4383 ELSE --workplan only
4384 IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id)) THEN
4385 l_task_unpub_ver_status_code := 'WORKING';
4386 ELSE
4387 l_task_unpub_ver_status_code := 'PUBLISHED';
4388 END IF;
4389 END IF;
4390 END IF;
4391 ELSE
4392 l_task_unpub_ver_status_code := 'WORKING';
4393 END IF;
4394 --end task version status changes
4395
4396 End Moving Code to <<B>> for 4201927*/
4397
4398 --bug 2846700
4399 --moved here from above to get correct referenct task id and peer_or_sub value
4400 /* IF p_called_from_api <> 'MOVE_TASK_VERSION'
4401 THEN
4402 4201927 : This Copy API not used in Move Task version Context
4403 Hence Commented
4404 */
4405 --added for task version status
4406
4407 /* Bug 3573143 */
4408 OPEN cur_task_id(p_src_task_version_id, p_src_project_id);
4409 FETCH cur_task_id INTO l_cur_task_id;
4410 CLOSE cur_task_id;
4411 /* Ended Bug 3573143 */
4412 -- xxlu added task DFF attributes
4413
4414 /* Commented the following code Bug 3573143 */
4415 /* OPEN cur_task_attr(p_src_structure_id); */
4416 OPEN cur_task_attr(l_cur_task_id.proj_element_id); -- Added Bug 3573143
4417 FETCH cur_task_attr INTO l_cur_task_attr;
4418 CLOSE cur_task_attr;
4419
4420 l_task_id := null; --bug 2625556
4421
4422 /* Bug 2623999 -- added the following select to get the ref_task_id*/
4423 --bug 2846700
4424 --modified sql to get correct reference task
4425 --mwasowic: handle a case when we're copying the top task and
4426 -- l_ref_task_version_id is really a structure version id, bug 3587047
4427
4428 IF p_dest_structure_version_id = p_dest_task_version_id THEN
4429
4430 -- 3905123 added below code
4431
4432 -- check whether source task is top task or not
4433 -- if source task is top task
4434 -- in destination structure, check the task is getting created as PEER or SUB
4435 -- if task is getting created as SUB
4436 -- pass l_ref_task_id as NULL
4437 -- else
4438 -- derive proj_element_id for the destination task and pass as l_ref_task_id
4439 -- end if
4440 -- else
4441 -- if copy_option is 'PA_TASK_ONLY' or 'PA_TASK_SUBTASK' and source task is not the top task
4442 -- and first task is getting created in destination structure then
4443 -- pass l_ref_task_id as NULL
4444 -- ( this code will be only called once while creating the first top task in dest struct,
4445 -- which is not the top task in source structure , copy option is PA_TASK_ONLY or PA_TASK_SUBTASK )
4446 -- else
4447 -- derive proj_element_id for the destination and pass as l_ref_task_id
4448 -- end if
4449 -- end if
4450
4451 -- Exp : Copy Option is 'ENTIRE_STRUCTURE' and source structure is
4452
4453 -- |_T1 ( l_ref_task_id will be passed as NULL )
4454 -- | |_T1.1 ( l_ref_task_id will be passed as detn task T1's proj_element_id )
4455 -- |_T2 ( l_ref_task_id will be passed as detn task T1's proj_element_id )
4456
4457 is_top_task := null;
4458
4459 open cur_is_top_task(cur_obj_rel_rec.task_version_id, l_src_structure_version_id);
4460 fetch cur_is_top_task INTO is_top_task;
4461 CLOSE cur_is_top_task;
4462
4463 IF is_top_task = 'x' THEN
4464 IF l_peer_or_sub = 'PEER' THEN
4465 SELECT proj_element_id
4466 INTO l_ref_task_id
4467 FROM pa_proj_element_versions
4468 WHERE element_version_id = l_ref_task_version_id;
4469 ELSE
4470 l_ref_task_id := null;
4471 END IF;
4472 ELSE
4473 IF is_top_task_in_dest = 'N' AND (p_copy_option IN ('PA_TASK_ONLY','PA_TASK_SUBTASK')) THEN
4474 l_ref_task_id := NULL;
4475 ELSE
4476 SELECT proj_element_id
4477 INTO l_ref_task_id
4478 FROM pa_proj_element_versions
4479 WHERE element_version_id = l_ref_task_version_id;
4480 END IF;
4481 END IF;
4482
4483 -- 3905123 end
4484 ELSE
4485 SELECT proj_element_id
4486 INTO l_ref_task_id
4487 FROM pa_proj_element_versions
4488 WHERE element_version_id = l_ref_task_version_id;
4489 --commented for bug 2846700
4490 --WHERE element_version_id = p_dest_task_version_id;
4491 END IF;
4492
4493 -- 3905123 , once the first task is created in destination, change the value of is_top_task_in_dest var to 'Y'
4494
4495 IF is_top_task_in_dest = 'N' AND p_dest_structure_version_id = p_dest_task_version_id THEN
4496 is_top_task_in_dest := 'Y';
4497 END IF;
4498
4499 -- 3905123 end
4500
4501 --3035902: process update flag changes
4502 --set update process flag if necessary;
4503
4504 IF (l_wp_process_flag = 'N') THEN
4505 --may need to update process flag
4506 IF ((l_shared = 'N') AND
4507 (l_wp_type = 'Y') AND
4508 (pa_task_type_utils.check_tk_type_progressable(cur_proj_elems_rec.TYPE_ID)='Y') AND
4509 (l_weighting_basis_code <> 'MANUAL'))
4510 THEN
4511 --split and workplan; only update if progressable task added
4512 l_wp_process_flag := 'Y';
4513 ELSIF ((l_shared = 'N') AND
4514 (l_wp_type = 'N')) THEN
4515 --split and financial; update
4516 l_wp_process_flag := 'Y';
4517 ELSIF (l_shared = 'Y') THEN
4518 l_wp_process_flag := 'Y';
4519 END IF;
4520 END IF;
4521 --3035902: end process update flag changes
4522
4523 PA_TASK_PVT1.Create_Task(
4524 p_api_version => p_api_version
4525 ,p_init_msg_list => p_init_msg_list
4526 ,p_commit => p_commit
4527 ,p_validate_only => p_validate_only
4528 ,p_validation_level => p_validation_level
4529 ,p_calling_module => p_calling_module
4530 ,p_debug_mode => p_debug_mode
4531 ,p_max_msg_count => p_max_msg_count
4532 ,p_object_type => cur_proj_elems_rec.object_type
4533 ,p_project_id => l_dest_project_id
4534 ,p_structure_id => l_structure_id
4535 ,p_structure_version_id => p_dest_structure_version_id
4536 ,p_task_number => l_task_number
4537 ,p_task_name => l_task_name
4538 ,p_task_description => cur_proj_elems_rec.description
4539 ,p_location_id => cur_proj_elems_rec.location_id
4540 --p_country => null
4541 --p_territory_code => null
4542 --p_state_region => null
4543 --p_city => null
4544 ,p_task_manager_id => cur_proj_elems_rec.manager_person_id
4545 --p_task_manager_name => null
4546 ,p_carrying_out_org_id => cur_proj_elems_rec.carrying_out_organization_id
4547 --p_carrying_out_org_name => null
4548 ,p_priority_code => cur_proj_elems_rec.priority_code
4549 ,p_TYPE_ID => cur_proj_elems_rec.TYPE_ID
4550 --,p_status_code => cur_proj_elems_rec.status_code
4551 ,p_inc_proj_progress_flag => cur_proj_elems_rec.inc_proj_progress_flag
4552 --,p_pm_product_code => cur_proj_elems_rec.pm_product_code
4553 --,p_pm_task_reference => cur_proj_elems_rec.pm_task_reference
4554 ,p_closed_date => cur_proj_elems_rec.closed_date
4555 --p_scheduled_start_date => null
4556 --p_scheduled_finish_date => null
4557 ,p_attribute_category => cur_proj_elems_rec.attribute_category
4558 ,p_attribute1 => cur_proj_elems_rec.attribute1
4559 ,p_attribute2 => cur_proj_elems_rec.attribute2
4560 ,p_attribute3 => cur_proj_elems_rec.attribute3
4561 ,p_attribute4 => cur_proj_elems_rec.attribute4
4562 ,p_attribute5 => cur_proj_elems_rec.attribute5
4563 ,p_attribute6 => cur_proj_elems_rec.attribute6
4564 ,p_attribute7 => cur_proj_elems_rec.attribute7
4565 ,p_attribute8 => cur_proj_elems_rec.attribute8
4566 ,p_attribute9 => cur_proj_elems_rec.attribute9
4567 ,p_attribute10 => cur_proj_elems_rec.attribute10
4568 ,p_attribute11 => cur_proj_elems_rec.attribute11
4569 ,p_attribute12 => cur_proj_elems_rec.attribute12
4570 ,p_attribute13 => cur_proj_elems_rec.attribute13
4571 ,p_attribute14 => cur_proj_elems_rec.attribute14
4572 ,p_attribute15 => cur_proj_elems_rec.attribute15
4573 ,p_task_weighting_deriv_code =>NULL
4574 ,p_work_item_code =>cur_proj_elems_rec.WQ_ITEM_CODE
4575 ,p_uom_code =>cur_proj_elems_rec.WQ_UOM_CODE
4576 ,p_wq_actual_entry_code =>cur_proj_elems_rec.WQ_ACTUAL_ENTRY_CODE
4577 ,p_task_progress_entry_page_id =>cur_proj_elems_rec.TASK_PROGRESS_ENTRY_PAGE_ID
4578 ,p_parent_structure_id => cur_proj_elems_rec.parent_structure_id
4579 /* hy Bug 2767403 Fix - Should not copy phase when copy task
4580 ,p_phase_code => cur_proj_elems_rec.phase_code
4581 ,p_phase_version_id => cur_proj_elems_rec.phase_version_id
4582 end hy Bug 2767403 Fix */
4583 ,p_tk_attribute_category => l_cur_task_attr.attribute_category
4584 ,p_tk_attribute1 => l_cur_task_attr.attribute1
4585 ,p_tk_attribute2 => l_cur_task_attr.attribute2
4586 ,p_tk_attribute3 => l_cur_task_attr.attribute3
4587 ,p_tk_attribute4 => l_cur_task_attr.attribute4
4588 ,p_tk_attribute5 => l_cur_task_attr.attribute5
4589 ,p_tk_attribute6 => l_cur_task_attr.attribute6
4590 ,p_tk_attribute7 => l_cur_task_attr.attribute7
4591 ,p_tk_attribute8 => l_cur_task_attr.attribute8
4592 ,p_tk_attribute9 => l_cur_task_attr.attribute9
4593 ,p_tk_attribute10 => l_cur_task_attr.attribute10
4594 ,p_peer_or_sub => l_peer_or_sub /* Bug 2623999 -- added this parameter*/ --bug 2846700: modified to use l_peer_or_sub
4595 ,p_ref_task_id => l_ref_task_id /* Bug 2623999 -- added this parameter*/
4596 ,p_structure_type => p_structure_type
4597 -- Bug#3811846 : added p_base_perc_comp_deriv_code
4598 ,p_base_perc_comp_deriv_code => cur_proj_elems_rec.base_percent_comp_deriv_code
4599 -- Bug#3491609 : Workflow Chanegs FP M
4600 ,p_wf_item_type => cur_proj_elems_rec.wf_item_type
4601 ,p_wf_process => cur_proj_elems_rec.wf_process
4602 ,p_wf_lead_days => cur_proj_elems_rec.wf_start_lead_days
4603 -- Bug#3491609 : Workflow Chanegs FP M
4604 ,x_task_id => l_task_id
4605 ,x_return_status => l_return_status
4606 ,x_msg_count => l_msg_count
4607 ,x_msg_data => l_msg_data );
4608 -- end xxlu changes
4609 /* 4201927 : THIS COPY API is not used in MOVE_TASK_VERSION context
4610 hence commenting
4611 ELSIF p_called_from_api = 'MOVE_TASK_VERSION'
4612 THEN
4613 l_task_id := cur_obj_rel_rec.proj_element_id;
4614 END IF;
4615 4201927*/
4616
4617 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4618 x_msg_count := FND_MSG_PUB.count_msg;
4619 IF x_msg_count = 1 then
4620 pa_interface_utils_pub.get_messages
4621 (p_encoded => FND_API.G_TRUE,
4622 p_msg_index => 1,
4623 p_msg_count => l_msg_count,
4624 p_msg_data => l_msg_data,
4625 p_data => l_data,
4626 p_msg_index_out => l_msg_index_out);
4627 x_msg_data := l_data;
4628 END IF;
4629 raise FND_API.G_EXC_ERROR;
4630 END IF;
4631 --end bug 2846700
4632
4633
4634 PA_TASK_PUB1.Create_Task_Version(
4635 p_api_version => p_api_version
4636 ,p_init_msg_list => p_init_msg_list
4637 ,p_commit => p_commit
4638 ,p_validate_only => p_validate_only
4639 ,p_validation_level => p_validation_level
4640 ,p_calling_module => p_calling_module
4641 ,p_debug_mode => p_debug_mode
4642 ,p_max_msg_count => p_max_msg_count
4643 ,p_ref_task_version_id => l_ref_task_version_id
4644 ,p_peer_or_sub => l_peer_or_sub
4645 ,p_task_id => l_task_id
4646 ,p_attribute_category => cur_obj_rel_rec.attribute_category
4647 ,p_attribute1 => cur_obj_rel_rec.attribute1
4648 ,p_attribute2 => cur_obj_rel_rec.attribute2
4649 ,p_attribute3 => cur_obj_rel_rec.attribute3
4650 ,p_attribute4 => cur_obj_rel_rec.attribute4
4651 ,p_attribute5 => cur_obj_rel_rec.attribute5
4652 ,p_attribute6 => cur_obj_rel_rec.attribute6
4653 ,p_attribute7 => cur_obj_rel_rec.attribute7
4654 ,p_attribute8 => cur_obj_rel_rec.attribute8
4655 ,p_attribute9 => cur_obj_rel_rec.attribute9
4656 ,p_attribute10 => cur_obj_rel_rec.attribute10
4657 ,p_attribute11 => cur_obj_rel_rec.attribute11
4658 ,p_attribute12 => cur_obj_rel_rec.attribute12
4659 ,p_attribute13 => cur_obj_rel_rec.attribute13
4660 ,p_attribute14 => cur_obj_rel_rec.attribute14
4661 ,p_attribute15 => cur_obj_rel_rec.attribute15
4662 ,p_WEIGHTING_PERCENTAGE => l_weighting
4663 ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
4664 ,p_financial_task_flag => l_fin_task_flag --bug 3301192
4665 ,x_task_version_id => l_task_version_id
4666 ,x_return_status => l_return_status
4667 ,x_msg_count => l_msg_count
4668 ,x_msg_data => l_msg_data
4669 );
4670
4671 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4672 x_msg_count := FND_MSG_PUB.count_msg;
4673 IF x_msg_count = 1 then
4674 pa_interface_utils_pub.get_messages
4675 (p_encoded => FND_API.G_TRUE,
4676 p_msg_index => 1,
4677 p_msg_count => l_msg_count,
4678 p_msg_data => l_msg_data,
4679 p_data => l_data,
4680 p_msg_index_out => l_msg_index_out);
4681 x_msg_data := l_data;
4682 END IF;
4683 raise FND_API.G_EXC_ERROR;
4684 END IF;
4685
4686
4687 --------------------------------------------- FP_M changes: Begin
4688 -- Refer to tracking bug 3305199
4689 -- Populate the source and destination task version ID in
4690 -- PL/SQL tables
4691
4692 Rec_Count := Rec_Count + 1;
4693 l_old_task_versions_tab.extend(1);
4694 l_new_task_versions_tab.extend(1);
4695 l_Old_Task_Versions_Tab(Rec_Count) := cur_obj_rel_rec.Task_Version_ID;
4696 l_New_Task_Versions_Tab(Rec_Count) := l_task_version_id;
4697
4698 --bug 3301192 fin plan
4699 l_old_task_ver_ids.extend(1); /* Venky */
4700 l_new_task_ver_ids.extend(1); /* Venky */
4701 l_old_task_ids.extend(1); /* Venky */
4702 l_new_task_ids.extend(1); /* Venky */
4703 l_old_task_ver_ids(Rec_Count) := cur_obj_rel_rec.Task_Version_ID;
4704 l_old_task_ids(Rec_Count) := cur_obj_rel_rec.proj_element_id;
4705 l_new_task_ver_ids(Rec_Count) := l_task_version_id;
4706 l_new_task_ids(Rec_Count) := l_task_id;
4707 --bug 3301192 fin plan
4708
4709 --------------------------------------------- FP_M changes: End
4710
4711 --set the reference id.
4712 --l_ref_task_version_id := cur_obj_rel_rec.task_version_id;
4713 l_ref_task_version_id := l_task_version_id;
4714 l_old_wbs_level := cur_obj_rel_rec.wbs_level;
4715
4716 --If structure type is workplan.
4717 OPEN cur_struc_type( l_structure_id );
4718 FETCH cur_struc_type INTO l_dummy_char;
4719 IF cur_struc_type%FOUND
4720 THEN
4721
4722 --dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Scheduele_version' );
4723
4724 /*4201927 : This Copy API not called in Move Task Version Context.
4725 Hence Commenting
4726 IF p_called_from_api <> 'MOVE_TASK_VERSION'
4727 THEN
4728 */
4729 --Hsiu added for date rollup; workplan only
4730 --bug 3991067
4731 l_task_cnt := l_task_cnt + 1;
4732 l_tasks_ver_ids(l_task_cnt) := l_task_version_id;
4733 -- l_tasks_ver_ids.extend;
4734 -- l_tasks_ver_ids(l_tasks_ver_ids.count) := l_task_version_id;
4735 --end bug 3991067
4736 --hsiu added for task status rollup
4737 l_rollup_task_id := l_task_version_id;
4738 --note: as long as one of the id of the new task is selected, the rollup will work.
4739 -- xxlu
4740 --bug 3074706
4741 --added src_project_id
4742 -- OPEN cur_proj_elem_ver_sch(p_src_structure_version_id, l_src_project_id); --Bug No 3609001
4743 -- OPEN cur_proj_elem_ver_sch(p_src_task_version_id, l_src_project_id); --Bug No 3609001
4744 OPEN cur_proj_elem_ver_sch(cur_obj_rel_rec.task_version_id, l_src_project_id); --Bug No 3675385
4745 FETCH cur_proj_elem_ver_sch INTO v_cur_sch;
4746 CLOSE cur_proj_elem_ver_sch;
4747
4748 PA_TASK_PVT1.Create_Schedule_Version(
4749 p_api_version => p_api_version
4750 ,p_init_msg_list => p_init_msg_list
4751 ,p_commit => p_commit
4752 ,p_validate_only => p_validate_only
4753 ,p_validation_level => p_validation_level
4754 ,p_calling_module => p_calling_module
4755 ,p_debug_mode => p_debug_mode
4756 ,p_max_msg_count => p_max_msg_count
4757 ,p_element_version_id => l_task_version_id
4758 ,p_scheduled_start_date => v_cur_sch.SCHEDULED_START_DATE
4759 ,p_scheduled_end_date => v_cur_sch.scheduled_finish_date
4760 ,p_attribute_category => v_cur_sch.attribute_category
4761 ,p_attribute1 => v_cur_sch.attribute1
4762 ,p_attribute2 => v_cur_sch.attribute2
4763 ,p_attribute3 => v_cur_sch.attribute3
4764 ,p_attribute4 => v_cur_sch.attribute4
4765 ,p_attribute5 => v_cur_sch.attribute5
4766 ,p_attribute6 => v_cur_sch.attribute6
4767 ,p_attribute7 => v_cur_sch.attribute7
4768 ,p_attribute8 => v_cur_sch.attribute8
4769 ,p_attribute9 => v_cur_sch.attribute9
4770 ,p_attribute10 => v_cur_sch.attribute10
4771 ,p_attribute11 => v_cur_sch.attribute11
4772 ,p_attribute12 => v_cur_sch.attribute12
4773 ,p_attribute13 => v_cur_sch.attribute13
4774 ,p_attribute14 => v_cur_sch.attribute14
4775 ,p_attribute15 => v_cur_sch.attribute15
4776 ,p_def_sch_tool_tsk_type_code => v_cur_sch.DEF_SCH_TOOL_TSK_TYPE_CODE
4777 ,p_constraint_type_code => v_cur_sch.CONSTRAINT_TYPE_CODE
4778 ,p_constraint_date => v_cur_sch.CONSTRAINT_DATE
4779 ,p_free_slack => v_cur_sch.FREE_SLACK
4780 ,p_total_slack => v_cur_sch.TOTAL_SLACK
4781 ,p_effort_driven_flag => v_cur_sch.EFFORT_DRIVEN_FLAG
4782 ,p_level_assignments_flag => v_cur_sch.LEVEL_ASSIGNMENTS_FLAG
4783 ,p_ext_act_duration => v_cur_sch.EXT_ACT_DURATION
4784 ,p_ext_remain_duration => v_cur_sch.EXT_REMAIN_DURATION
4785 ,p_ext_sch_duration => v_cur_sch.EXT_SCH_DURATION
4786 ,x_pev_schedule_id => l_pev_schedule_id
4787 ,x_return_status => l_return_status
4788 ,x_msg_count => l_msg_count
4789 ,x_msg_data => l_msg_data
4790 );
4791 -- end xxlu changes
4792 /*END IF; 4201927 : This Copy API not called in Move Task Version Context. */
4793
4794 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4795 x_msg_count := FND_MSG_PUB.count_msg;
4796 IF x_msg_count = 1 then
4797 pa_interface_utils_pub.get_messages
4798 (p_encoded => FND_API.G_TRUE,
4799 p_msg_index => 1,
4800 p_msg_count => l_msg_count,
4801 p_msg_data => l_msg_data,
4802 p_data => l_data,
4803 p_msg_index_out => l_msg_index_out);
4804 x_msg_data := l_data;
4805 END IF;
4806 raise FND_API.G_EXC_ERROR;
4807 END IF;
4808 END IF;
4809 CLOSE cur_struc_type;
4810
4811 END LOOP;
4812
4813
4814 -- Added for FP_M changes 3305199 : Bhumesh
4815
4816 If P_cp_Dependency_Flag = 'Y' then
4817 PA_Relationship_Pvt.Copy_Intra_Dependency (
4818 P_Source_Ver_Tbl => l_Old_Task_Versions_Tab,
4819 P_Destin_Ver_Tbl => l_New_Task_Versions_Tab,
4820 X_Return_Status => X_Return_Status,
4821 X_Msg_Count => X_Msg_Count,
4822 X_Msg_Data => X_Msg_Data
4823 );
4824
4825 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4826 RAISE FND_API.G_EXC_ERROR;
4827 END IF;
4828
4829 PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
4830 P_Source_Ver_Tbl => l_Old_Task_Versions_Tab,
4831 P_Destin_Ver_Tbl => l_New_Task_Versions_Tab,
4832 X_Return_Status => X_Return_Status,
4833 X_Msg_Count => X_Msg_Count,
4834 X_Msg_Data => X_Msg_Data
4835 );
4836 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4837 RAISE FND_API.G_EXC_ERROR;
4838 END IF;
4839
4840 End If;
4841 -- End of FP_M changes
4842
4843 /* Bug2741989 -- Following message is populated in stack */
4844 IF (NOT l_src_tasks_found AND p_copy_option = 'PA_ENTIRE_VERSION')THEN
4845 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4846 p_msg_name => 'PA_CANT_COPY_EMPTY_STRUCT_VER' );
4847 x_msg_data := 'PA_CANT_COPY_EMPTY_STRUCT_VER';
4848 x_return_status := FND_API.G_RET_STS_ERROR;
4849 RAISE FND_API.G_EXC_ERROR;
4850 END IF;
4851
4852 /* Bug 2623999 coomnted out the code below. It is redundant and causing issues */
4853 /*
4854 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
4855 FROM pa_proj_element_versions
4856 WHERE element_version_id = p_dest_structure_version_id
4857 AND object_type = 'PA_STRUCTURES';
4858
4859 --Do financial task check
4860 --If financial
4861 OPEN cur_struc_type2( l_structure_id );
4862 FETCH cur_struc_type2 INTO l_dummy_char;
4863 IF cur_struc_type2%FOUND
4864 THEN
4865 --If structure has any published versions.
4866 l_published_version := 'N';
4867 OPEN cur_pub_versions( l_structure_id, l_project_id );
4868 FETCH cur_pub_versions INTO l_published_version;
4869 CLOSE cur_pub_versions;
4870
4871 --hsiu
4872 --changes for versioning
4873 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
4874 l_project_id);
4875 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
4876 l_project_id);
4877
4878 IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y') THEN
4879 -- IF NVL( l_published_version, 'N' ) = 'N'
4880 -- THEN
4881 --end changes
4882
4883 --get the reference task and project ids
4884 SELECT proj_element_id, project_id
4885 INTO l_ref_task_id, l_ref_project_id
4886 FROM pa_proj_element_versions
4887 WHERE element_version_id = p_dest_task_version_id;
4888
4889 --get the task and project ids
4890 SELECT proj_element_id, project_id
4891 INTO l_task_id, l_project_id
4892 FROM pa_proj_element_versions
4893 WHERE element_version_id = p_src_task_version_id;
4894
4895 IF p_copy_option = 'PA_TASK_ONLY'
4896 THEN
4897 l_copy_node_flag := 'S'; ---copy selected task only
4898 ELSIF p_copy_option = 'PA_TASK_SUBTASK'
4899 THEN
4900 l_copy_node_flag := 'T'; ---copy selected task and sub tasks
4901 ELSIF p_copy_option = 'PA_ENTIRE_VERSION'
4902 THEN
4903 l_copy_node_flag := 'P'; ---copy entire project
4904 END IF;
4905
4906 PA_TASKS_MAINT_PUB.Copy_Task(
4907 p_reference_project_id => l_ref_project_id
4908 ,p_reference_task_id => l_ref_task_id
4909 ,p_project_id => l_project_id
4910 ,p_task_id => l_task_id
4911 ,p_project_name => NULL
4912 ,p_task_name => NULL
4913 ,p_peer_or_sub => p_peer_or_sub
4914 ,p_copy_node_flag => l_copy_node_flag
4915 ,p_task_prefix => p_prefix
4916 ,p_wbs_record_version_number => 1
4917 ,x_return_status => l_return_status
4918 ,x_msg_count => l_msg_count
4919 ,x_msg_data => l_msg_data );
4920
4921 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4922 x_msg_count := FND_MSG_PUB.count_msg;
4923 IF x_msg_count = 1 then
4924 pa_interface_utils_pub.get_messages
4925 (p_encoded => FND_API.G_TRUE,
4926 p_msg_index => 1,
4927 p_msg_count => l_msg_count,
4928 p_msg_data => l_msg_data,
4929 p_data => l_data,
4930 p_msg_index_out => l_msg_index_out);
4931 x_msg_data := l_data;
4932 END IF;
4933 raise FND_API.G_EXC_ERROR;
4934 END IF;
4935 END IF;
4936 END IF;
4937 CLOSE cur_struc_type2;
4938 */
4939
4940 /* 4201927: This value is already derived as the variable l_wp_type */
4941 /*IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_dest_structure_version_id, 'WORKPLAN') = 'Y' then
4942 */
4943 IF l_wp_type = 'Y' then
4944 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
4945 p_commit => FND_API.G_FALSE,
4946 p_element_versions => l_tasks_ver_ids,
4947 x_return_status => l_return_status,
4948 x_msg_count => l_msg_count,
4949 x_msg_data => l_msg_data);
4950
4951 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
4952 x_msg_count := FND_MSG_PUB.count_msg;
4953 if x_msg_count = 1 then
4954 pa_interface_utils_pub.get_messages
4955 (p_encoded => FND_API.G_TRUE,
4956 p_msg_index => 1,
4957 p_msg_count => l_msg_count,
4958 p_msg_data => l_msg_data,
4959 p_data => l_data,
4960 p_msg_index_out => l_msg_index_out);
4961 x_msg_data := l_data;
4962 end if;
4963 raise FND_API.G_EXC_ERROR;
4964 end if;
4965
4966 --hsiu added for task status
4967 --if versioning is off, rollup.
4968
4969 /* 4201927 : Replaced Call to Version ENabled with l_ver_enabled */
4970 /*IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_dest_project_id)) AND*/
4971 IF ('N' = l_ver_enabled) AND
4972 (l_rollup_task_id IS NOT NULL) THEN
4973 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
4974 p_structure_version_id => p_dest_structure_version_id
4975 ,p_element_version_id => l_rollup_task_id
4976 ,x_return_status => l_return_status
4977 ,x_msg_count => l_msg_count
4978 ,x_msg_data => l_msg_data
4979 );
4980
4981 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
4982 x_msg_count := FND_MSG_PUB.count_msg;
4983 if x_msg_count = 1 then
4984 pa_interface_utils_pub.get_messages
4985 (p_encoded => FND_API.G_TRUE,
4986 p_msg_index => 1,
4987 p_msg_count => l_msg_count,
4988 p_msg_data => l_msg_data,
4989 p_data => l_data,
4990 p_msg_index_out => l_msg_index_out);
4991 x_msg_data := l_data;
4992 end if;
4993 raise FND_API.G_EXC_ERROR;
4994 end if;
4995
4996 END IF;
4997
4998 --end task status changes
4999
5000 END IF;
5001
5002
5003 --bug 3301192 fin plan changes
5004 declare
5005 /* Bug #: 3305199 SMukka */
5006 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
5007 /* l_task_ver_ids2 PA_PLSQL_DATATYPES.IdTabTyp; */
5008 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
5009 /* 4201927 : This value is already derived l_wp_type VARCHAR2(1); */
5010 /* 4201927 : This value is already derived l_copy_external_flag VARCHAR2(1); */
5011 begin
5012
5013 /* 4201927 : This value is already derived
5014 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_dest_structure_version_id, 'WORKPLAN');
5015 4201927 */
5016 --3305199: deliverable changes
5017 IF (p_cp_deliverable_asso_flag = 'Y' AND l_wp_type = 'Y') THEN
5018 PA_DELIVERABLE_PUB.COPY_ASSOCIATIONS
5019 (p_validate_only => FND_API.G_FALSE
5020 ,p_src_task_versions_tab => l_Old_Task_Versions_Tab
5021 ,p_dest_task_versions_tab => l_New_Task_Versions_Tab
5022 ,x_return_status => l_return_status
5023 ,x_msg_count => l_msg_count
5024 ,x_msg_data => l_msg_data);
5025
5026 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5027 x_msg_count := FND_MSG_PUB.count_msg;
5028 if x_msg_count = 1 then
5029 pa_interface_utils_pub.get_messages
5030 (p_encoded => FND_API.G_TRUE,
5031 p_msg_index => 1,
5032 p_msg_count => l_msg_count,
5033 p_msg_data => l_msg_data,
5034 p_data => l_data,
5035 p_msg_index_out => l_msg_index_out);
5036 x_msg_data := l_data;
5037 end if;
5038 raise FND_API.G_EXC_ERROR;
5039 end if;
5040 END IF;
5041 --3305199: end deliverable changes
5042
5043 /*=====================P1 BUG 4210796 ===================
5044 * COPY PLANNING TXNS MOVED BEFORE DELETE PLANNING TXNS CALL
5045 * =======================================================*/
5046
5047 -- START OF BLOCK MOVED
5048 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
5049 THEN
5050
5051 /* 4201927 : l_copy_external_flag is already derived as in <<C>>
5052 IF p_src_project_id = l_dest_project_id
5053 THEN
5054 l_copy_external_flag := 'N';
5055 ELSE
5056 l_copy_external_flag := 'Y';
5057 ENd IF;
5058 */
5059
5060 /*Smukka Bug No. 3474141 Date 03/01/2004 */
5061 /*moved pa_fp_planning_transaction_pub.copy_planning_transactions into plsql block */
5062 BEGIN
5063 pa_fp_planning_transaction_pub.copy_planning_transactions(
5064 p_context => 'WORKPLAN'
5065 ,p_copy_external_flag => l_copy_external_flag
5066 ,p_src_project_id => p_src_project_id
5067 ,p_target_project_id => l_dest_project_id
5068 --,p_src_element_id_tbl => l_old_task_ids
5069 ,p_src_version_id_tbl => l_old_task_ver_ids
5070 --,p_targ_element_id_tbl => l_new_task_ids
5071 ,p_targ_version_id_tbl => l_new_task_ver_ids
5072 ,p_copy_people_flag => p_cp_people_flag
5073 ,p_copy_equip_flag => p_cp_equipment_flag
5074 ,p_copy_mat_item_flag => p_cp_material_items_flag
5075 ,p_copy_fin_elem_flag => p_cp_financial_elem_flag
5076 -- ,p_maintain_reporting_lines => 'Y'
5077 ,x_return_status => l_return_status
5078 ,x_msg_count => l_msg_count
5079 ,x_msg_data => l_msg_data
5080 );
5081 EXCEPTION
5082 WHEN OTHERS THEN
5083 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5084 p_procedure_name => 'COPY_TASK',
5085 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.copy_planning_transactions:'||SQLERRM,1,240));
5086 RAISE FND_API.G_EXC_ERROR;
5087 END;
5088
5089
5090 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5091 x_msg_count := FND_MSG_PUB.count_msg;
5092 if x_msg_count = 1 then
5093 pa_interface_utils_pub.get_messages
5094 (p_encoded => FND_API.G_TRUE,
5095 p_msg_index => 1,
5096 p_msg_count => l_msg_count,
5097 p_msg_data => l_msg_data,
5098 p_data => l_data,
5099 p_msg_index_out => l_msg_index_out);
5100 x_msg_data := l_data;
5101 end if;
5102 raise FND_API.G_EXC_ERROR;
5103 end if;
5104 END IF;
5105
5106 -- END OF BLOCK MOVED FOR P1 BUG 4210796
5107
5108 IF l_wp_type = 'Y' AND p_dest_structure_version_id <> p_dest_task_version_id
5109 THEN
5110 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_dest_task_version_id );
5111
5112 IF l_lowest_task_flag1 = 'Y' AND
5113 l_lowest_task_flag2 = 'N' /* reference task is no more a lowest task therefore call delete planning api */
5114 THEN
5115 l_task_ver_ids2.extend(1); /* Venky */
5116 l_task_ver_ids2(1) := p_dest_task_version_id;
5117 /*Smukka Bug No. 3474141 Date 03/01/2004 */
5118 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
5119 DECLARE
5120 --p1 bug 3888432
5121 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5122 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
5123 SELECT resource_assignment_id
5124 FROM pa_resource_assignments
5125 WHERE wbs_element_Version_id = c_task_ver_id
5126 AND ta_display_flag = 'N';
5127 l_assign_id NUMBER := NULL;
5128 BEGIN
5129 OPEN get_assignment_id(p_dest_task_version_id);
5130 FETCH get_assignment_id into l_assign_id;
5131 CLOSE get_assignment_id;
5132
5133 IF (l_assign_id IS NOT NULL) THEN
5134 l_assign_ids.extend(1);
5135 l_assign_ids(1) := l_assign_id;
5136 pa_fp_planning_transaction_pub.delete_planning_transactions
5137 (
5138 p_context => 'WORKPLAN'
5139 ,p_task_or_res => 'ASSIGNMENT'
5140 -- ,p_element_version_id_tbl => l_task_ver_ids2
5141 -- ,p_maintain_reporting_lines => 'Y'
5142 ,p_resource_assignment_tbl => l_assign_ids
5143 ,x_return_status => l_return_status
5144 ,x_msg_count => l_msg_count
5145 ,x_msg_data => l_msg_data
5146 );
5147 END IF;
5148 EXCEPTION
5149 WHEN OTHERS THEN
5150 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5151 p_procedure_name => 'COPY_TASK',
5152 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
5153 RAISE FND_API.G_EXC_ERROR;
5154 END;
5155
5156 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5157 x_msg_count := FND_MSG_PUB.count_msg;
5158 if x_msg_count = 1 then
5159 pa_interface_utils_pub.get_messages
5160 (p_encoded => FND_API.G_TRUE,
5161 p_msg_index => 1,
5162 p_msg_count => l_msg_count,
5163 p_msg_data => l_msg_data,
5164 p_data => l_data,
5165 p_msg_index_out => l_msg_index_out);
5166 x_msg_data := l_data;
5167 end if;
5168 raise FND_API.G_EXC_ERROR;
5169 end if;
5170 END IF;
5171 END IF;
5172
5173 /*==========================================================================================
5174 MOVED THIS BLOCK OF CODE FOR COPYING PLANNING TRANSACTIONS before DELETING PLANNING TXNS .
5175 THIS FIX IS NEEDED FOR P1 BUG 4210796 . REFER *** MAANSARI 02/28/05 12:59 pm ***
5176 FOR THE SOLUTION STRATEGY
5177
5178 IF l_wp_type = 'Y'
5179 THEN
5180
5181 /* 4201927 : l_copy_external_flag is already derived as in <<C>>
5182 IF p_src_project_id = l_dest_project_id
5183 THEN
5184 l_copy_external_flag := 'N';
5185 ELSE
5186 l_copy_external_flag := 'Y';
5187 ENd IF;
5188 */
5189
5190 /*Smukka Bug No. 3474141 Date 03/01/2004 */
5191 /*moved pa_fp_planning_transaction_pub.copy_planning_transactions into plsql block */
5192 /* P1 4210796
5193 BEGIN
5194 pa_fp_planning_transaction_pub.copy_planning_transactions(
5195 p_context => 'WORKPLAN'
5196 ,p_copy_external_flag => l_copy_external_flag
5197 ,p_src_project_id => p_src_project_id
5198 ,p_target_project_id => l_dest_project_id
5199 --,p_src_element_id_tbl => l_old_task_ids
5200 ,p_src_version_id_tbl => l_old_task_ver_ids
5201 --,p_targ_element_id_tbl => l_new_task_ids
5202 ,p_targ_version_id_tbl => l_new_task_ver_ids
5203 ,p_copy_people_flag => p_cp_people_flag
5204 ,p_copy_equip_flag => p_cp_equipment_flag
5205 ,p_copy_mat_item_flag => p_cp_material_items_flag
5206 ,p_copy_fin_elem_flag => p_cp_financial_elem_flag
5207 -- ,p_maintain_reporting_lines => 'Y'
5208 ,x_return_status => l_return_status
5209 ,x_msg_count => l_msg_count
5210 ,x_msg_data => l_msg_data
5211 );
5212 EXCEPTION
5213 WHEN OTHERS THEN
5214 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5215 p_procedure_name => 'COPY_TASK',
5216 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.copy_planning_transactions:'||SQLERRM,1,240));
5217 RAISE FND_API.G_EXC_ERROR;
5218 END;
5219
5220
5221 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5222 x_msg_count := FND_MSG_PUB.count_msg;
5223 if x_msg_count = 1 then
5224 pa_interface_utils_pub.get_messages
5225 (p_encoded => FND_API.G_TRUE,
5226 p_msg_index => 1,
5227 p_msg_count => l_msg_count,
5228 p_msg_data => l_msg_data,
5229 p_data => l_data,
5230 p_msg_index_out => l_msg_index_out);
5231 x_msg_data := l_data;
5232 end if;
5233 raise FND_API.G_EXC_ERROR;
5234 end if;
5235 END IF;
5236
5237 END OF BLOCK MOVED FOR P1 BUG 4210796
5238 ======================================================================*/
5239 end;
5240 --bug 3301192 fin plan changes
5241
5242 --3035902: process update flag changes
5243 --set process flag
5244 --Bug No 3450684 SMukka Commented if condition
5245 --IF (l_wp_process_flag = 'Y') THEN
5246 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
5247 (
5248 p_calling_context => 'SELF_SERVICE'
5249 ,p_project_id => l_dest_project_id
5250 ,p_structure_version_id => p_dest_structure_version_id
5251 ,p_update_wbs_flag => 'Y'
5252 ,x_return_status => l_return_status
5253 ,x_msg_count => l_msg_count
5254 ,x_msg_data => l_msg_data);
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 --END IF;
5271 --3035902: process update flag changes
5272
5273 --bug 4149392
5274 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
5275 --end bug 4149392
5276
5277 x_return_status := FND_API.G_RET_STS_SUCCESS;
5278
5279 IF (p_commit = FND_API.G_TRUE) THEN
5280 COMMIT;
5281 END IF;
5282
5283 IF (p_debug_mode = 'Y') THEN
5284 pa_debug.debug('PA_TASK_PUB1.COPY_TASK END');
5285 END IF;
5286 EXCEPTION
5287 when FND_API.G_EXC_ERROR then
5288 if p_commit = FND_API.G_TRUE then
5289 rollback to Copy_Task;
5290 end if;
5291 x_return_status := FND_API.G_RET_STS_ERROR;
5292 when FND_API.G_EXC_UNEXPECTED_ERROR then
5293 if p_commit = FND_API.G_TRUE then
5294 rollback to Copy_Task;
5295 end if;
5296 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5297 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5298 p_procedure_name => 'COPY_TASK',
5299 p_error_text => SUBSTRB(SQLERRM,1,240));
5300 when OTHERS then
5301 if p_commit = FND_API.G_TRUE then
5302 rollback to Copy_Task;
5303 end if;
5304 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5305 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
5306 p_procedure_name => 'COPY_TASK',
5307 p_error_text => SUBSTRB(SQLERRM,1,240));
5308 raise;
5309 END Copy_Task;
5310
5311 -- API name : Move_Task
5312 -- Type : Public procedure
5313 -- Pre-reqs : None
5314 -- Return Value : N/A
5315 -- Prameters
5316 -- p_api_version IN NUMBER N Not Null 1.0
5317 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
5318 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
5319 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
5320 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
5321 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
5322 -- p_debug_mode IN VARCHAR2 N Null N
5323 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5324 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5325 -- p_task_version_id IN NUMBER N Not Null
5326 -- p_ref_task_version_id IN NUMBER N Not Null
5327 -- p_ref_project_id IN NUMBER N Null
5328 -- p_peer_or_sub IN VARCHAR2 N Not Null
5329 -- prefix IN VARCHAR2 N Not Null
5330 -- x_return_status OUT VARCHAR2 N Null
5331 -- x_msg_count OUT NUMBER N Null
5332 -- x_msg_data OUT VARCHAR2 N Null
5333 --
5334 -- History
5335 --
5336 -- 23-OCT-01 Andrew Lee -Created
5337 --
5338 --
5339
5340 PROCEDURE MOVE_TASK_VERSION (
5341 p_api_version IN NUMBER := 1.0,
5342 p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE,
5343 p_commit IN VARCHAR2 := FND_API.G_FALSE,
5344 p_validate_only IN VARCHAR2 := FND_API.G_TRUE,
5345 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
5346 p_calling_module IN VARCHAR2 := 'SELF_SERVICE',
5347 p_debug_mode IN VARCHAR2 := 'N',
5348 p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5349 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5350 p_task_version_id IN NUMBER,
5351 p_ref_task_version_id IN NUMBER,
5352 /*4269830 : Performance Enhancements : Start*/
5353 p_ref_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5354 p_structure_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5355 p_published_version IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5356 p_shared IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5357 p_sharing_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5358 p_versioned IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5359 p_wp_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5360 p_fin_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5361 p_weighting_basis_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5362 p_check_third_party_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5363 /*4269830 : Performance Enhancements : End */
5364 p_peer_or_sub IN VARCHAR2,
5365 p_record_version_number IN NUMBER,
5366 p_called_from_bulk_api IN VARCHAR2 := 'N' ,
5367 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
5368 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
5369 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5370 ) IS
5371 l_api_name CONSTANT VARCHAR(30) := 'MOVE_TASK_VERSION';
5372 l_api_version CONSTANT NUMBER := 1.0;
5373
5374 l_return_status VARCHAR2(1);
5375 l_msg_count NUMBER;
5376 l_msg_data VARCHAR2(250);
5377 l_data VARCHAR2(250);
5378 l_msg_index_out NUMBER;
5379
5380 l_ref_display_sequence NUMBER;
5381 l_display_sequence NUMBER;
5382 l_ref_parent_struct_ver_id NUMBER;
5383 l_parent_struct_ver_id NUMBER;
5384
5385 l_parent_id NUMBER;
5386 l_parent_task_id NUMBER;
5387 l_parent_object_type PA_PROJ_ELEMENT_VERSIONS.object_type%TYPE;
5388
5389 l_project_id NUMBER;
5390 l_ref_task_id NUMBER;
5391 l_task_id NUMBER;
5392 l_task_record_version_number NUMBER;
5393 l_wbs_record_version_number NUMBER;
5394
5395 l_record_version_number NUMBER;
5396 l_published_version VARCHAR2(1);
5397 l_dummy_char VARCHAR2(1);
5398 l_structure_id NUMBER;
5399 l_structure_ver_id NUMBER;
5400 --l_project_id NUMBER;
5401 --l_ref_task_id NUMBER;
5402 --l_task_id NUMBER;
5403
5404 --hsiu
5405 --added for advanced structure - versioning
5406 l_versioned VARCHAR2(1) := 'N';
5407 l_shared VARCHAR2(1) := 'N';
5408
5409 --end changes
5410
5411 --hyau
5412 --added for lifecycle version
5413 l_proj_element_id NUMBER;
5414 -- end changes
5415
5416 CURSOR cur_struc_type( c_structure_id NUMBER )
5417 IS
5418 SELECT 'Y'
5419 FROM pa_proj_structure_types ppst
5420 ,pa_structure_types pst
5421 WHERE ppst.proj_element_id = c_structure_id
5422 AND ppst.structure_type_id = pst.structure_type_id
5423 AND pst.structure_type_class_code IN( 'FINANCIAL' );
5424
5425 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
5426 select 'Y'
5427 from pa_proj_elem_ver_structure
5428 where proj_element_id = c_structure_id
5429 AND project_id = c_project_id
5430 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
5431
5432 --hsiu added, for dates rollup
5433 CURSOR get_peer_tasks
5434 IS
5435 select b.object_id_to1 object_id_to1
5436 from pa_object_relationships a,
5437 pa_object_relationships b
5438 where a.object_id_to1 = p_task_version_id
5439 and a.object_type_to = 'PA_TASKS'
5440 and a.relationship_type = 'S' -- Bug # 4622939.
5441 and a.object_id_from1 = b.object_id_from1
5442 and a.object_type_from = b.object_type_from
5443 and b.object_type_to = 'PA_TASKS'
5444 and b.relationship_type = 'S' -- Bug # 4622939.
5445 and b.object_id_to1 <> p_task_version_id;
5446 c_get_peer_tasks get_peer_tasks%ROWTYPE;
5447
5448 --Hsiu added, for dates rollup
5449 /* Bug 5768425 Start*/
5450 --l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
5451 l_tasks_ver_ids PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
5452 l_task_cnt NUMBER := 0;
5453 /* Bug 5768425 End */
5454
5455 --hsiu added for task status rollup
5456 l_old_peer_task_id NUMBER;
5457
5458 --hsiu added for task status
5459 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
5460 select object_id_from1
5461 from pa_object_relationships
5462 where object_id_to1 = c_elem_ver_id
5463 and object_type_to = 'PA_TASKS'
5464 and relationship_type = 'S';
5465 l_parent_ver_id NUMBER;
5466 l_error_msg_code VARCHAR2(30);
5467
5468 -- hyau Bug 2852753
5469 l_delete_project_allowed VARCHAR2(1);
5470 l_update_proj_num_allowed VARCHAR2(1);
5471 l_update_proj_name_allowed VARCHAR2(1);
5472 l_update_proj_desc_allowed VARCHAR2(1);
5473 l_update_proj_dates_allowed VARCHAR2(1);
5474 l_update_proj_status_allowed VARCHAR2(1);
5475 l_update_proj_manager_allowed VARCHAR2(1);
5476 l_update_proj_org_allowed VARCHAR2(1);
5477 l_add_task_allowed VARCHAR2(1);
5478 l_delete_task_allowed VARCHAR2(1);
5479 l_update_task_num_allowed VARCHAR2(1);
5480 l_update_task_name_allowed VARCHAR2(1);
5481 l_update_task_dates_allowed VARCHAR2(1);
5482 l_update_task_desc_allowed VARCHAR2(1);
5483 l_update_parent_task_allowed VARCHAR2(1);
5484 l_update_task_org_allowed VARCHAR2(1);
5485
5486 l_err_code NUMBER := 0;
5487 l_err_stack VARCHAR2(200) := NULL;
5488 l_err_stage VARCHAR2(200) := NULL;
5489
5490 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
5491
5492 CURSOR get_product_code ( c_project_id NUMBER ) IS
5493 SELECT pm_product_code
5494 FROM PA_PROJECTS_ALL
5495 WHERE project_id = c_project_id;
5496
5497 l_cur_project_id NUMBER;
5498 CURSOR cur_proj_id
5499 IS
5500 SELECT project_id
5501 FROM pa_proj_element_versions
5502 WHERE element_version_id = p_structure_version_id;
5503
5504 -- Merged from 85
5505 -- end hyau Bug 2852753
5506
5507 l_old_top_task_id NUMBER; --bug 2967204
5508
5509 --Bug 2947492 ( move )
5510
5511 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
5512 --l_parent_task_id NUMBER;
5513 l_old_parent_task_id NUMBER;
5514 l_top_task_id NUMBER;
5515
5516 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
5517 SELECT parent_task_id, top_task_id FROM pa_tasks
5518 WHERE project_id = c_project_id and task_id = c_task_id;
5519
5520 --End Bug 2947492 ( move )
5521 -- Merged from 85
5522
5523 --bug 3053281
5524 l_wp_type VARCHAR2(1);
5525 l_weighting_basis_Code VARCHAR2(30);
5526 l_wp_process_flag VARCHAR2(1);
5527 --end bug 3053281
5528 --3035902: process update flag changes
5529 cursor get_task_type_id(c_proj_element_id NUMBER) IS
5530 select type_id
5531 from pa_proj_elements
5532 where proj_element_id = c_proj_element_id;
5533 l_task_type_id NUMBER;
5534 --3035902: end process update flag changes
5535
5536 --bug 3911698
5537 --cursor to get all child
5538 cursor get_child_ver_id(c_task_ver_id NUMBER) IS
5539 select object_id_to1
5540 from pa_object_relationships
5541 where relationship_type = 'S'
5542 and object_type_to = 'PA_TASKS'
5543 start with object_id_from1 = c_task_ver_id
5544 and object_type_from = 'PA_TASKS'
5545 connect by prior object_id_to1 = object_id_from1
5546 and prior object_type_to = object_type_from
5547 and prior relationship_type = relationship_type
5548 UNION
5549 select element_version_id
5550 from pa_proj_element_versions
5551 where element_version_id = c_task_ver_id;
5552 l_child_ver_id NUMBER;
5553 --end bug 3911698
5554
5555
5556 --bug 3069306
5557 Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
5558 select object_id_to1
5559 from pa_object_relationships
5560 where relationshiP_type = 'S'
5561 and object_type_to = 'PA_TASKS'
5562 start with object_id_to1 = c_task_ver_id
5563 and object_type_to = 'PA_TASKS'
5564 connect by prior object_id_from1 = object_id_to1
5565 and prior object_type_from = object_type_to
5566 and prior relationship_type = relationship_type
5567 intersect
5568 select a.object_id_to1
5569 from pa_object_relationships a, pa_proj_element_versions b
5570 where a.relationshiP_type = 'S'
5571 and a.object_id_from1 = b.parent_structure_version_id
5572 and b.element_version_id = c_task_ver_id
5573 and a.object_type_from = 'PA_STRUCTURES';
5574 l_old_par_ver_id NUMBER;
5575 l_new_par_ver_id NUMBER;
5576 --end bug 3069306
5577
5578 --bug 3301192 fin plan changes
5579 l_lowest_task_flag1 VARCHAR2(1);
5580 l_lowest_task_flag2 VARCHAR2(1);
5581 l_fin_task_flag VARCHAR2(1);
5582 --bug 3301192
5583 --
5584 l_ref_parent_task_ver_id NUMBER; --Bug 3475920
5585
5586 /*4269830*/
5587 l_sharing_code VARCHAR2(30);
5588 l_fin_type VARCHAR2(1);
5589 l_check_third_party_flag VARCHAR2(1);
5590 /*4269830*/
5591
5592 BEGIN
5593
5594
5595 pa_debug.init_err_stack ('PA_TASK_PUB1.MOVE_TASK_VERSION');
5596
5597 IF (p_debug_mode = 'Y') THEN
5598 pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSION begin');
5599 END IF;
5600
5601 IF (p_commit = FND_API.G_TRUE) THEN
5602 savepoint move_task_version;
5603 END IF;
5604
5605 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
5606 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5607 END IF;
5608
5609 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
5610 FND_MSG_PUB.initialize;
5611 END IF;
5612
5613 --bug 4075697
5614 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
5615 --bug 4075697
5616
5617 IF p_called_from_bulk_api = 'Y'/*4269830*/
5618 THEN
5619 l_cur_project_id := p_ref_project_id;
5620 l_project_id := p_ref_project_id;
5621 l_structure_id := p_structure_id ;
5622 l_structure_ver_id := p_structure_version_id ;
5623 l_published_version := p_published_version;
5624 l_shared := p_shared;
5625 l_sharing_code := p_sharing_code;
5626 l_versioned := p_versioned;
5627 l_wp_type := p_wp_type;
5628 l_fin_type := p_fin_type;
5629 l_weighting_basis_code := p_weighting_basis_code;
5630 l_check_third_party_flag := p_check_third_party_flag;
5631 ELSE
5632
5633 /* 4269830 <Existing Block> <<--A-->> */
5634 OPEN cur_proj_id;
5635 FETCH cur_proj_id INTO l_cur_project_id;
5636 CLOSE cur_proj_id;
5637
5638 l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_cur_project_id);
5639 l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
5640 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id,'WORKPLAN');
5641 l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_cur_project_id);
5642 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_cur_project_id);
5643 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(l_cur_project_id);
5644 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_cur_project_id);
5645
5646 END IF; /*4269830*/
5647
5648 --bug 3911698
5649 --check if reference task is child of moving task
5650 OPEN get_child_ver_id(p_task_version_id);
5651 LOOP
5652 FETCH get_child_ver_id into l_child_ver_id;
5653 EXIT when get_child_ver_id%NOTFOUND;
5654 IF l_child_ver_id = p_ref_task_version_id THEN
5655 CLOSE get_child_ver_id;
5656 --add error PA_TSK_MV_BELOW_SELF
5657 PA_UTILS.ADD_MESSAGE('PA', 'PA_TSK_MV_BELOW_SELF');
5658 raise FND_API.G_EXC_ERROR;
5659 END IF;
5660 END LOOP;
5661 CLOSE get_child_ver_id;
5662 --end bug 3911698
5663
5664 -- Added for FP_M changes. Bug 3305199 : xxx
5665 If l_sharing_code = 'SHARE_PARTIAL' /*4269830 : Replaced function usage with l_sharing_code*/
5666 Then
5667
5668 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
5669 p_task_version_id => p_task_version_id
5670 , p_ref_task_version_id => p_ref_task_version_id
5671 , x_return_status => x_return_status
5672 , x_msg_count => x_msg_count
5673 , x_msg_data => x_msg_data
5674 , x_error_msg_code => l_error_msg_code);
5675 --Bug No 3491045
5676 --Replaced the return status value to 'S' from 'Y'
5677 IF (x_return_status <> 'S') THEN
5678 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5679 p_msg_name => l_error_msg_code);
5680 raise FND_API.G_EXC_ERROR;
5681 End If;
5682 End If;
5683 -- End of FP_M changes
5684
5685 --3035902: process update flag changes
5686 l_wp_process_flag := 'N';
5687 --3035902: end process update flag changes
5688 -- hyau Bug 2852753
5689
5690 IF p_called_from_bulk_api = 'N' THEN
5691 IF p_calling_module = 'SELF_SERVICE' THEN
5692
5693 OPEN get_product_code(l_cur_project_id);
5694 FETCH get_product_code INTO l_pm_product_code;
5695 CLOSE get_product_code;
5696
5697 If l_pm_product_code IS NOT NULL THEN
5698 pa_pm_controls.Get_Project_actions_allowed
5699 (P_PM_PRODUCT_CODE => l_pm_product_code,
5700 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
5701 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
5702 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
5703 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
5704 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
5705 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
5706 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
5707 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
5708 P_ADD_TASK_ALLOWED => l_add_task_allowed,
5709 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
5710 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
5711 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
5712 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
5713 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
5714 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
5715 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
5716 P_ERROR_CODE => l_err_code,
5717 P_ERROR_STACK => l_err_stack,
5718 P_ERROR_STAGE => l_err_stage );
5719
5720 IF l_err_code <> 0 THEN
5721 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5722 p_msg_name => l_err_stage);
5723 END IF;
5724 IF l_update_parent_task_allowed = 'N' THEN
5725 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5726 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
5727 raise FND_API.G_EXC_ERROR;
5728 END IF;
5729 END IF;
5730 END IF;
5731 END IF ; -- Called From Bulk API is 'N'
5732 -- end hyau Bug 2852753
5733
5734
5735 -- hyau
5736 -- Lifecycle Phase validation Changes. Check if task has phase associated with it
5737 IF (p_task_version_id IS NOT NULL) AND
5738 (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
5739
5740 SELECT proj_element_id
5741 INTO l_proj_element_id
5742 FROM PA_PROJ_ELEMENT_VERSIONS
5743 WHERE element_version_id = p_task_version_id;
5744
5745 IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
5746 l_proj_element_id)) THEN
5747 --Indenting a task with phase. Error
5748 PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_MOVE_PHASE_TASK');
5749 END IF;
5750
5751 l_msg_count := FND_MSG_PUB.count_msg;
5752 if l_msg_count > 0 then
5753 x_msg_count := l_msg_count;
5754 if x_msg_count = 1 then
5755 pa_interface_utils_pub.get_messages
5756 (p_encoded => FND_API.G_TRUE,
5757 p_msg_index => 1,
5758 p_msg_count => l_msg_count,
5759 p_msg_data => l_msg_data,
5760 p_data => l_data,
5761 p_msg_index_out => l_msg_index_out);
5762 x_msg_data := l_data;
5763 end if;
5764 raise FND_API.G_EXC_ERROR;
5765 end if;
5766 END IF;
5767 -- end hyau. Lifecycle Phase validation Changes.
5768
5769 -- get the display sequence of the reference task
5770 SELECT display_sequence, parent_structure_version_id
5771 INTO l_ref_display_sequence, l_ref_parent_struct_ver_id
5772 FROM PA_PROJ_ELEMENT_VERSIONS
5773 WHERE element_version_id = p_ref_task_version_id;
5774
5775 -- get the display sequence of the task being moved
5776 SELECT display_sequence, parent_structure_version_id
5777 INTO l_display_sequence, l_parent_struct_ver_id
5778 FROM PA_PROJ_ELEMENT_VERSIONS
5779 WHERE element_version_id = p_task_version_id;
5780
5781 -- get the parent of the task being moved
5782 SELECT object_id_from1, object_type_from
5783 INTO l_parent_id, l_parent_object_type
5784 FROM PA_OBJECT_RELATIONSHIPS
5785 WHERE object_type_to = 'PA_TASKS'
5786 AND object_id_to1 = p_task_version_id
5787 AND relationship_type = 'S'
5788 AND object_type_from in ('PA_STRUCTURES', 'PA_TASKS');
5789
5790 --hsiu added, for dates rollup
5791 --need to get peer task before it has been moved.
5792 OPEN get_peer_tasks;
5793 LOOP
5794 FETCH get_peer_tasks INTO c_get_peer_tasks;
5795 EXIT WHEN get_peer_tasks%NOTFOUND;
5796 /* Bug 5768425 Start */
5797 --l_tasks_ver_ids.extend;
5798 --l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
5799 l_task_cnt := l_task_cnt + 1;
5800 l_tasks_ver_ids(l_task_cnt) := c_get_peer_tasks.object_id_to1;
5801 /* Bug 5768425 End */
5802 l_old_peer_task_id := c_get_peer_tasks.object_id_to1;
5803 END LOOP;
5804 CLOSE get_peer_tasks;
5805
5806 if l_parent_object_type = 'PA_STRUCTURES' then
5807 l_parent_task_id := NULL;
5808 else
5809 l_parent_task_id := l_parent_id;
5810 end if;
5811
5812 --hsiu added for task status
5813 --check if ok to move this task
5814 PA_PROJ_ELEMENTS_UTILS.check_move_task_ok(
5815 p_task_ver_id => p_task_version_id
5816 ,x_return_status => l_return_status
5817 ,x_error_message_code => l_error_msg_code
5818 );
5819 IF (l_return_status <> 'Y') THEN
5820 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5821 p_msg_name => l_error_msg_code);
5822 raise FND_API.G_EXC_ERROR;
5823 END IF;
5824
5825 --check if ok to create subtask
5826 IF (p_peer_or_sub = 'PEER') THEN
5827 OPEN get_parent_version_id(p_ref_task_version_id);
5828 FETCH get_parent_version_id into l_parent_ver_id;
5829 CLOSE get_parent_version_id;
5830
5831 --bug 3069306
5832 --if financial task, check if changing parent ok
5833 IF (l_fin_type = 'Y') THEN /*4269830 : replaced Function usage with l_fin_type*/
5834 OPEN get_top_task_ver_id(l_parent_ver_id);
5835 FETCH get_top_task_ver_id into l_new_par_ver_id;
5836 CLOSE get_top_task_ver_id;
5837
5838 OPEN get_top_task_ver_id(p_task_version_id);
5839 FETCH get_top_task_ver_id into l_old_par_ver_id;
5840 CLOSE get_top_task_Ver_id;
5841
5842 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
5843 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5844 p_msg_name => 'PA_CANT_CHANGE_PARENT');
5845 raise FND_API.G_EXC_ERROR;
5846 END IF;
5847 END IF;
5848 --end bug 3069306
5849
5850 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
5851 p_parent_task_ver_id => l_parent_ver_id
5852 ,x_return_status => l_return_status
5853 ,x_error_message_code => l_error_msg_code
5854 );
5855
5856 IF (l_return_status <> 'Y') THEN
5857 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5858 p_msg_name => l_error_msg_code);
5859 raise FND_API.G_EXC_ERROR;
5860 END IF;
5861
5862 --bug 4099488
5863 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
5864 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5865 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
5866 raise FND_API.G_EXC_ERROR;
5867 END IF;
5868 --end bug 4099488
5869 ELSE
5870 --bug 3069306
5871 --if financial task, check if changing parent ok
5872 IF (l_fin_type = 'Y') THEN /* 4269830: Replaced Function call with l_fin_type*/
5873 OPEN get_top_task_ver_id(p_ref_task_version_id);
5874 FETCH get_top_task_ver_id into l_new_par_ver_id;
5875 CLOSE get_top_task_ver_id;
5876
5877 OPEN get_top_task_ver_id(p_task_version_id);
5878 FETCH get_top_task_ver_id into l_old_par_ver_id;
5879 CLOSE get_top_task_Ver_id;
5880
5881 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
5882 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5883 p_msg_name => 'PA_CANT_CHANGE_PARENT');
5884 raise FND_API.G_EXC_ERROR;
5885 END IF;
5886 END IF;
5887 --end bug 3069306
5888
5889 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
5890 p_parent_task_ver_id => p_ref_task_version_id
5891 ,x_return_status => l_return_status
5892 ,x_error_message_code => l_error_msg_code
5893 );
5894
5895 IF (l_return_status <> 'Y') THEN
5896 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5897 p_msg_name => l_error_msg_code);
5898 raise FND_API.G_EXC_ERROR;
5899 END IF;
5900
5901 --bug 4099488
5902 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_ref_task_version_id, p_task_version_id) = 'N' THEN
5903 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5904 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
5905 raise FND_API.G_EXC_ERROR;
5906 END IF;
5907 --end bug 4099488
5908 END IF;
5909
5910 --end task status changes
5911
5912 --bug 3301192 fin plan changes.
5913 --check whether the reference task was lowest task before
5914 --check the task is a lowest task bug 3301192
5915
5916 IF l_ref_parent_struct_ver_id <> p_ref_task_version_id
5917 THEN
5918 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_ref_task_version_id );
5919 END IF;
5920 --
5921 --Bug No 3475920
5922 IF p_peer_or_sub = 'PEER' THEN
5923 l_ref_parent_task_ver_id:=PA_PROJ_ELEMENTS_UTILS.GET_PARENT_TASK_VERSION_ID(p_ref_task_version_id);
5924 ELSE
5925 l_ref_parent_task_ver_id:=p_ref_task_version_id;
5926 END IF;
5927 --
5928 IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,l_ref_parent_task_ver_id) = 'Y' THEN
5929 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5930 p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
5931 RAISE FND_API.G_EXC_ERROR;
5932 END IF;
5933 --
5934 PA_TASK_PUB1.Update_Task_Version
5935 ( p_validate_only => FND_API.G_FALSE,
5936 p_ref_task_version_id => p_ref_task_version_id,
5937 p_peer_or_sub => p_peer_or_sub,
5938 p_task_version_id => p_task_version_id,
5939 p_record_version_number => p_record_version_number,
5940 p_action => 'MOVE',
5941 x_return_status => l_return_status,
5942 x_msg_count => l_msg_count,
5943 x_msg_data => l_msg_data );
5944
5945 x_msg_count := FND_MSG_PUB.count_msg;
5946
5947 --dbms_output.put_line( 'Count '|| x_msg_count );
5948
5949 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5950 x_msg_count := FND_MSG_PUB.count_msg;
5951 IF x_msg_count = 1 then
5952 pa_interface_utils_pub.get_messages
5953 (p_encoded => FND_API.G_TRUE,
5954 p_msg_index => 1,
5955 p_msg_count => l_msg_count,
5956 p_msg_data => l_msg_data,
5957 p_data => l_data,
5958 p_msg_index_out => l_msg_index_out);
5959 x_msg_data := l_data;
5960 END IF;
5961 raise FND_API.G_EXC_ERROR;
5962 END IF;
5963
5964
5965 /* SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
5966 FROM pa_proj_element_versions
5967 WHERE element_version_id = p_structure_version_id
5968 AND object_type = 'PA_STRUCTURES';*/
5969
5970 IF p_called_from_bulk_api = 'N' -- 4269830
5971 THEN
5972
5973 SELECT proj_element_id, project_id, element_version_id INTO l_structure_id, l_project_id, l_structure_ver_id
5974 FROM pa_proj_element_versions
5975 WHERE element_version_id = ( Select parent_structure_version_id
5976 from pa_proj_element_versions
5977 where element_version_id = p_task_version_id )
5978 AND object_type = 'PA_STRUCTURES';
5979 END IF; -- 4269830
5980
5981 IF p_calling_module NOT in ( 'FORMS', 'AMG' )
5982 THEN
5983
5984 IF p_called_from_bulk_api ='N' -- 4269830 : Already derived in BULK API
5985 then
5986
5987 --Do financial task check
5988 --If financial
5989 OPEN cur_struc_type( l_structure_id );
5990 FETCH cur_struc_type INTO l_dummy_char;
5991 IF cur_struc_type%FOUND
5992 THEN
5993 --If structure has any published versions.
5994 l_published_version := 'N';
5995 OPEN cur_pub_versions( l_structure_id, l_project_id );
5996 FETCH cur_pub_versions INTO l_published_version;
5997 CLOSE cur_pub_versions;
5998
5999 END IF; --4269830
6000 CLOSE cur_struc_type;--4269830
6001
6002 END IF;--4269830
6003
6004 --hsiu
6005 --changes for versioning
6006 /* 4269830 :
6007 This code has been moved to block tagged by <<--A-->>
6008
6009 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
6010 l_project_id);
6011 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
6012 l_project_id);
6013 */
6014
6015 IF l_fin_type = 'Y' -- 4269830 this is equivalent to cur_struc_type%FOUND
6016 THEN
6017
6018 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.
6019
6020 IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y') OR
6021 (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
6022 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
6023 THEN
6024 -- IF NVL( l_published_version, 'N' ) = 'N'
6025 -- THEN
6026 --end changes
6027
6028 --hsiu Fixed parent_structure_version_id condition
6029 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
6030 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
6031 FROM PA_TASKS pt,
6032 pa_proj_elem_ver_structure ppa,
6033 PA_PROJ_ELEMENT_VERSIONS ppev
6034 WHERE ppev.element_version_id = p_task_version_id
6035 AND ppev.project_id = ppa.project_id
6036 AND ppev.parent_structure_version_id = ppa.element_version_id
6037 AND ppev.proj_element_id = pt.task_id;
6038
6039 SELECT proj_element_id
6040 INTO l_ref_task_id
6041 FROM PA_PROJ_ELEMENT_VERSIONS
6042 WHERE element_version_id = p_ref_task_version_id;
6043 -- merged from 85
6044 SELECT record_version_number, parent_task_id --get old parent id for bug 2947492 (move )
6045 ,top_task_id --bug 2967204
6046 INTO l_record_version_number, l_old_parent_task_id
6047 ,l_old_top_task_id --bug 2967204
6048 FROM pa_tasks
6049 WHERE task_id = l_task_id
6050 AND project_id = l_project_id;
6051 -- merged from 85
6052
6053 x_msg_count := FND_MSG_PUB.count_msg;
6054
6055 --dbms_output.put_line( 'before move task old '|| x_msg_count );
6056
6057 PA_TASKS_MAINT_PUB.Move_Task(
6058 p_reference_project_id => l_project_id
6059 ,p_reference_task_id => l_ref_task_id
6060 ,p_project_id => l_project_id
6061 ,p_task_id => l_task_id
6062 ,p_peer_or_sub => p_peer_or_sub
6063 ,p_record_version_number => l_record_version_number
6064 ,p_wbs_record_version_number => 1 --temporarily passing 1. Lock project is commented out in PA_TASKS_MAIN_PUB.Move_Task api.
6065 ,x_return_status => l_return_status
6066 ,x_msg_count => l_msg_count
6067 ,x_msg_data => l_msg_data );
6068
6069 x_msg_count := FND_MSG_PUB.count_msg;
6070
6071 --dbms_output.put_line( 'After move task old '|| x_msg_count );
6072
6073
6074 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6075 x_msg_count := FND_MSG_PUB.count_msg;
6076 IF x_msg_count = 1 then
6077 pa_interface_utils_pub.get_messages
6078 (p_encoded => FND_API.G_TRUE,
6079 p_msg_index => 1,
6080 p_msg_count => l_msg_count,
6081 p_msg_data => l_msg_data,
6082 p_data => l_data,
6083 p_msg_index_out => l_msg_index_out);
6084 x_msg_data := l_data;
6085 END IF;
6086 raise FND_API.G_EXC_ERROR;
6087 END IF;
6088
6089 -- merged from 85
6090 --Bug 2947492 ( Move )
6091 --
6092
6093 OPEN get_parent_task_id( l_task_id , l_project_id );
6094 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
6095 CLOSE get_parent_task_id;
6096
6097 --bug 2967204
6098 --Cannot move out of the current hierarchy
6099 IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
6100 THEN
6101 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6102 p_msg_name => 'PA_CANT_CHANGE_PARENT');
6103 raise FND_API.G_EXC_ERROR;
6104 END IF;
6105 --End bug 2967204
6106
6107 /*
6108 --First call the check_reparent ok
6109 --This should have been called in the beginning but due to lot of complexity involved in getting
6110 --new parent task id it is decided to call this later stage as long as we rollback the whole operation
6111 --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
6112
6113 PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
6114 p_task_id => l_task_id
6115 ,p_old_parent_task_id => l_old_parent_task_id
6116 ,p_new_parent_task_id => l_parent_task_id
6117 ,x_return_status => l_return_status
6118 ,x_msg_count => l_msg_count
6119 ,x_msg_data => l_msg_data
6120 );
6121
6122 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6123 x_msg_count := FND_MSG_PUB.count_msg;
6124 IF x_msg_count = 1 then
6125 pa_interface_utils_pub.get_messages
6126 (p_encoded => FND_API.G_TRUE,
6127 p_msg_index => 1,
6128 p_msg_count => l_msg_count,
6129 p_msg_data => l_msg_data,
6130 p_data => l_data,
6131 p_msg_index_out => l_msg_index_out);
6132 x_msg_data := l_data;
6133 END IF;
6134 raise FND_API.G_EXC_ERROR;
6135 END IF;
6136 */ --commenting out, please refer mails from venkatesh dates 22 jan 04
6137
6138 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
6139 l_plannable_tasks_tbl(1).impacted_task_id := l_task_id;
6140 l_plannable_tasks_tbl(1).action := 'REPARENT';
6141 l_plannable_tasks_tbl(1).old_parent_task_id := l_old_parent_task_id;
6142 l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
6143 l_plannable_tasks_tbl(1).top_task_id := l_top_task_id;
6144
6145 PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
6146 p_project_id => l_project_id
6147 , p_impacted_tasks_tbl => l_plannable_tasks_tbl
6148 , x_return_status => l_return_status
6149 , x_msg_data => l_msg_data
6150 , x_msg_count => l_msg_count
6151 );
6152
6153 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6154 x_msg_count := FND_MSG_PUB.count_msg;
6155 IF x_msg_count = 1 then
6156 pa_interface_utils_pub.get_messages
6157 (p_encoded => FND_API.G_TRUE,
6158 p_msg_index => 1,
6159 p_msg_count => l_msg_count,
6160 p_msg_data => l_msg_data,
6161 p_data => l_data,
6162 p_msg_index_out => l_msg_index_out);
6163 x_msg_data := l_data;
6164 END IF;
6165 raise FND_API.G_EXC_ERROR;
6166 END IF;
6167 bug 3010538 */
6168
6169 --End Bug 2947492 ( Move )
6170 END IF;
6171
6172 -- END IF; 4269830
6173 -- CLOSE cur_struc_type; 4269830
6174
6175 END IF; -- 4269830 IF l_fin_type ='Y'
6176 -- merged from 85
6177 END IF; --<<p_calling_module >>
6178
6179 --bug 3010538 (move )
6180 --bug 3053281 --set flag if not (manual and workplan only)
6181
6182 /* 4269830 :
6183 This code has been moved to block tagged by <<--A-->>
6184 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_parent_struct_ver_id, 'WORKPLAN');
6185 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_project_id);
6186 */
6187 --3035902: process update flag changes
6188 OPEN get_task_type_id(l_proj_element_id);
6189 FETCH get_task_type_id INTO l_task_type_id;
6190 CLOSE get_task_type_id;
6191
6192 --set update process flag if necessary;
6193 IF (l_wp_process_flag = 'N') THEN
6194 --may need to update process flag
6195 IF ((l_shared = 'N') AND
6196 (l_wp_type = 'Y') AND
6197 (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
6198 (l_weighting_basis_code <> 'MANUAL'))
6199 THEN
6200 --split and workplan; only update if progressable task added
6201 l_wp_process_flag := 'Y';
6202 ELSIF ((l_shared = 'N') AND
6203 (l_wp_type = 'N')) THEN
6204 --split and financial; update
6205 l_wp_process_flag := 'Y';
6206 ELSIF (l_shared = 'Y') THEN
6207 l_wp_process_flag := 'Y';
6208 END IF;
6209 END IF;
6210 --3035902: end process update flag changes
6211 /* commented for process update flag changes
6212 IF (l_shared = 'N') AND
6213 (l_wp_type = 'Y') AND
6214 (l_weighting_basis_Code = 'MANUAL') THEN
6215 --do not set the flag to 'Y'
6216 NULL;
6217 ELSE
6218 */
6219 --3035902: process update flag changes
6220 --Bug No 3450684 SMukka Commented if condition
6221 -- IF (l_wp_process_flag = 'Y') THEN
6222 --set the flag
6223 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
6224 (
6225 p_calling_context => 'SELF_SERVICE'
6226 ,p_project_id => l_project_id
6227 ,p_structure_version_id => l_parent_struct_ver_id
6228 ,p_update_wbs_flag => 'Y'
6229 ,x_return_status => l_return_status
6230 ,x_msg_count => l_msg_count
6231 ,x_msg_data => l_msg_data);
6232
6233 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6234 x_msg_count := FND_MSG_PUB.count_msg;
6235 if x_msg_count = 1 then
6236 pa_interface_utils_pub.get_messages
6237 (p_encoded => FND_API.G_TRUE,
6238 p_msg_index => 1,
6239 p_msg_count => l_msg_count,
6240 p_msg_data => l_msg_data,
6241 p_data => l_data,
6242 p_msg_index_out => l_msg_index_out);
6243 x_msg_data := l_data;
6244 end if;
6245 raise FND_API.G_EXC_ERROR;
6246 end if;
6247 --3035902: end process update flag changes
6248 --END IF;
6249
6250
6251 IF l_fin_type = 'Y' /* 4269830: Replaced Function call with l_fin_type*/
6252 THEN
6253 IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and l_published_version = 'N' ) THEN
6254 --Move
6255 pa_fp_refresh_elements_pub.set_process_flag_proj(
6256 p_project_id => l_project_id
6257 ,p_request_id => null
6258 ,p_process_code => null
6259 ,p_refresh_required_flag => 'Y'
6260 ,x_return_status => l_return_status
6261 ,x_msg_count => l_msg_count
6262 ,x_msg_data => l_msg_data );
6263
6264 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6265 x_msg_count := FND_MSG_PUB.count_msg;
6266 if x_msg_count = 1 then
6267 pa_interface_utils_pub.get_messages
6268 (p_encoded => FND_API.G_TRUE,
6269 p_msg_index => 1,
6270 p_msg_count => l_msg_count,
6271 p_msg_data => l_msg_data,
6272 p_data => l_data,
6273 p_msg_index_out => l_msg_index_out);
6274 x_msg_data := l_data;
6275 end if;
6276 raise FND_API.G_EXC_ERROR;
6277 end if;
6278 END IF;
6279 END IF;
6280
6281
6282 --End bug 3010538 (move)
6283
6284
6285 --Hsiu added for date rollup; workplan only
6286 --dbms_output.put_line('check structure version type '||l_structure_ver_id);
6287 IF l_wp_type = 'Y' then /*4269830 Function call replaced by l_wp_type*/
6288
6289 -- Added for FP_M changes Bug 3305199 : Bhumesh
6290 If l_check_third_party_flag = 'Y' Then /*4269830 Function call replaced by l_check_third_party_flag*/
6291
6292 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
6293 p_structure_version_id => P_Structure_Version_ID
6294 ,p_dirty_flag => 'Y' --bug 3902282
6295 ,x_return_status => x_return_status
6296 ,x_msg_count => x_msg_count
6297 ,x_msg_data => x_msg_data
6298 );
6299
6300 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
6301 x_msg_count := FND_MSG_PUB.count_msg;
6302 If x_msg_count = 1 then
6303 pa_interface_utils_pub.get_messages
6304 (p_encoded => FND_API.G_TRUE,
6305 p_msg_index => 1,
6306 p_msg_count => l_msg_count,
6307 p_msg_data => l_msg_data,
6308 p_data => l_data,
6309 p_msg_index_out => l_msg_index_out);
6310 x_msg_data := l_data;
6311 End If;
6312 raise FND_API.G_EXC_ERROR;
6313 End If;
6314 End If;
6315 -- End of FP_M changes
6316
6317 /* Bug 5768425 Start */
6318 --l_tasks_ver_ids.extend;
6319 --l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6320 l_task_cnt := l_task_cnt + 1;
6321 l_tasks_ver_ids(l_task_cnt) := p_task_version_id;
6322
6323 --PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6324 PA_STRUCT_TASK_ROLLUP_PUB.TASKS_ROLLUP_UNLIMITED(
6325 p_commit => FND_API.G_FALSE,
6326 p_element_versions => l_tasks_ver_ids,
6327 x_return_status => l_return_status,
6328 x_msg_count => l_msg_count,
6329 x_msg_data => l_msg_data);
6330
6331 /* Bug 5768425 End */
6332
6333 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6334 x_msg_count := FND_MSG_PUB.count_msg;
6335 if x_msg_count = 1 then
6336 pa_interface_utils_pub.get_messages
6337 (p_encoded => FND_API.G_TRUE,
6338 p_msg_index => 1,
6339 p_msg_count => l_msg_count,
6340 p_msg_data => l_msg_data,
6341 p_data => l_data,
6342 p_msg_index_out => l_msg_index_out);
6343 x_msg_data := l_data;
6344 end if;
6345 raise FND_API.G_EXC_ERROR;
6346 end if;
6347
6348 --hsiu added for task status
6349 --if versioning is off, rollup.
6350 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
6351 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
6352 p_structure_version_id => l_structure_ver_id
6353 ,p_element_version_id => p_task_version_id
6354 ,x_return_status => l_return_status
6355 ,x_msg_count => l_msg_count
6356 ,x_msg_data => l_msg_data
6357 );
6358
6359 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6360 x_msg_count := FND_MSG_PUB.count_msg;
6361 if x_msg_count = 1 then
6362 pa_interface_utils_pub.get_messages
6363 (p_encoded => FND_API.G_TRUE,
6364 p_msg_index => 1,
6365 p_msg_count => l_msg_count,
6366 p_msg_data => l_msg_data,
6367 p_data => l_data,
6368 p_msg_index_out => l_msg_index_out);
6369 x_msg_data := l_data;
6370 end if;
6371 raise FND_API.G_EXC_ERROR;
6372 end if;
6373
6374 IF (l_old_peer_task_id IS NOT NULL) THEN
6375 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
6376 p_structure_version_id => l_structure_ver_id
6377 ,p_element_version_id => l_old_peer_task_id
6378 ,x_return_status => l_return_status
6379 ,x_msg_count => l_msg_count
6380 ,x_msg_data => l_msg_data
6381 );
6382
6383 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6384 x_msg_count := FND_MSG_PUB.count_msg;
6385 if x_msg_count = 1 then
6386 pa_interface_utils_pub.get_messages
6387 (p_encoded => FND_API.G_TRUE,
6388 p_msg_index => 1,
6389 p_msg_count => l_msg_count,
6390 p_msg_data => l_msg_data,
6391 p_data => l_data,
6392 p_msg_index_out => l_msg_index_out);
6393 x_msg_data := l_data;
6394 end if;
6395 raise FND_API.G_EXC_ERROR;
6396 end if;
6397 END IF;
6398
6399 END IF;
6400
6401 --end task status changes
6402
6403 END IF;
6404
6405 --bug 3301192 fin plan changes
6406 declare
6407 /* Bug #: 3305199 SMukka */
6408 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
6409 /* l_task_ver_ids2 PA_PLSQL_DATATYPES.IdTabTyp; */
6410 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
6411 /*l_wp_type VARCHAR2(1); Commented for 4269830 - This value is already derived*/
6412 begin
6413 /*4269830 Commented for 4269830 - This value is already derived
6414 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_ver_id, 'WORKPLAN');
6415 */
6416 IF l_wp_type = 'Y'
6417 AND l_ref_parent_struct_ver_id <> p_ref_task_version_id /* make sure that the reference is not a str ver */
6418 THEN
6419 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_ref_task_version_id );
6420 IF l_lowest_task_flag1 = 'Y' AND
6421 l_lowest_task_flag2 = 'N'
6422 THEN
6423 l_task_ver_ids2.extend(1); /* Venky */
6424 l_task_ver_ids2(1) := p_ref_task_version_id;
6425 /*Smukka Bug No. 3474141 Date 03/01/2004 */
6426 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
6427 DECLARE
6428 --p1 bug 3888432
6429 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
6430 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
6431 SELECT resource_assignment_id
6432 FROM pa_resource_assignments
6433 WHERE wbs_element_Version_id = c_task_ver_id
6434 AND ta_display_flag = 'N';
6435 l_assign_id NUMBER := NULL;
6436 BEGIN
6437 OPEN get_assignment_id(p_ref_task_version_id);
6438 FETCH get_assignment_id into l_assign_id;
6439 CLOSE get_assignment_id;
6440
6441 IF (l_assign_id IS NOT NULL) THEN
6442 l_assign_ids.extend(1);
6443 l_assign_ids(1) := l_assign_id;
6444 pa_fp_planning_transaction_pub.delete_planning_transactions
6445 (
6446 p_context => 'WORKPLAN'
6447 ,p_task_or_res => 'ASSIGNMENT'
6448 -- ,p_element_version_id_tbl => l_task_ver_ids2
6449 -- ,p_maintain_reporting_lines => 'Y'
6450 ,p_resource_assignment_tbl => l_assign_ids
6451 ,x_return_status => l_return_status
6452 ,x_msg_count => l_msg_count
6453 ,x_msg_data => l_msg_data
6454 );
6455 END IF;
6456 EXCEPTION
6457 WHEN OTHERS THEN
6458 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
6459 p_procedure_name => 'MOVE_TASK_VERSION',
6460 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
6461 RAISE FND_API.G_EXC_ERROR;
6462 END;
6463 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6464 x_msg_count := FND_MSG_PUB.count_msg;
6465 if x_msg_count = 1 then
6466 pa_interface_utils_pub.get_messages
6467 (p_encoded => FND_API.G_TRUE,
6468 p_msg_index => 1,
6469 p_msg_count => l_msg_count,
6470 p_msg_data => l_msg_data,
6471 p_data => l_data,
6472 p_msg_index_out => l_msg_index_out);
6473 x_msg_data := l_data;
6474 end if;
6475 raise FND_API.G_EXC_ERROR;
6476 end if;
6477 END IF;
6478 END IF;
6479 end;
6480
6481 --bug 4149392
6482 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
6483 --end bug 4149392
6484
6485 x_return_status := FND_API.G_RET_STS_SUCCESS;
6486
6487 IF (p_commit = FND_API.G_TRUE) THEN
6488 COMMIT;
6489 END IF;
6490
6491 IF (p_debug_mode = 'Y') THEN
6492 pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSION END');
6493 END IF;
6494 EXCEPTION
6495 when FND_API.G_EXC_ERROR then
6496 if p_commit = FND_API.G_TRUE then
6497 rollback to move_task_version;
6498 end if;
6499 x_return_status := FND_API.G_RET_STS_ERROR;
6500 when FND_API.G_EXC_UNEXPECTED_ERROR then
6501 if p_commit = FND_API.G_TRUE then
6502 rollback to move_task_version;
6503 end if;
6504 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6505 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
6506 p_procedure_name => 'MOVE_TASK_VERSION',
6507 p_error_text => SUBSTRB(SQLERRM,1,240));
6508 when OTHERS then
6509 if p_commit = FND_API.G_TRUE then
6510 rollback to move_task_version;
6511 end if;
6512 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6513 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
6514 p_procedure_name => 'MOVE_TASK_VERSION',
6515 p_error_text => SUBSTRB(SQLERRM,1,240));
6516 raise;
6517 END Move_Task_version;
6518
6519 -- API name : Indent_Task_Version
6520 -- Type : Public procedure
6521 -- Pre-reqs : None
6522 -- Return Value : N/A
6523 -- Prameters
6524 -- p_api_version IN NUMBER N Not Null 1.0
6525 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
6526 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
6527 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
6528 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
6529 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
6530 -- p_debug_mode IN VARCHAR2 N Null N
6531 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6532 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6533 -- p_task_version_id IN NUMBER N Not Null
6534 -- x_return_status OUT VARCHAR2 N Null
6535 -- x_msg_count OUT NUMBER N Null
6536 -- x_msg_data OUT VARCHAR2 N Null
6537 --
6538 -- History
6539 --
6540 -- 23-OCT-01 Andrew Lee -Created
6541 --
6542 --
6543
6544 PROCEDURE INDENT_TASK_VERSION (
6545 p_api_version IN NUMBER :=1.0,
6546 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
6547 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
6548 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
6549 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
6550 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
6551 p_debug_mode IN VARCHAR2 :='N',
6552 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6553 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6554 p_task_version_id IN NUMBER,
6555 p_record_version_number IN NUMBER,
6556 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6557 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
6558 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6559 ) IS
6560
6561
6562 l_api_name CONSTANT VARCHAR(30) := 'INDENT_TASK_VERSION';
6563 l_api_version CONSTANT NUMBER := 1.0;
6564
6565 l_wbs_level NUMBER;
6566 l_display_sequence NUMBER;
6567 l_prev_wbs_level NUMBER;
6568 l_prev_display_sequence NUMBER;
6569 l_ref_task_version_id NUMBER;
6570 l_peer_or_sub VARCHAR2(30);
6571 l_parent_structure_version_id NUMBER;
6572
6573 l_return_status VARCHAR2(1);
6574 l_msg_count NUMBER;
6575 l_msg_data VARCHAR2(250);
6576 l_data VARCHAR2(250);
6577 l_msg_index_out NUMBER;
6578
6579 l_project_id NUMBER;
6580 l_structure_id NUMBER;
6581 l_ref_task_id NUMBER;
6582 l_task_id NUMBER;
6583 l_task_record_version_number NUMBER;
6584 l_wbs_record_version_number NUMBER;
6585 l_dummy_char VARCHAR2(1);
6586 l_published_version VARCHAR2(1);
6587
6588 --hsiu
6589 --added for advanced structure - versioning
6590 l_versioned VARCHAR2(1) := 'N';
6591 l_shared VARCHAR2(1) := 'N';
6592 --end changes
6593
6594 --hyau
6595 --added for lifecycle version
6596 l_proj_element_id NUMBER;
6597 -- end changes
6598
6599 CURSOR cur_struc_type( c_structure_id NUMBER )
6600 IS
6601 SELECT 'Y'
6602 FROM pa_proj_structure_types ppst
6603 ,pa_structure_types pst
6604 WHERE ppst.proj_element_id = c_structure_id
6605 AND ppst.structure_type_id = pst.structure_type_id
6606 AND pst.structure_type_class_code IN( 'FINANCIAL' );
6607
6608 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
6609 select 'Y'
6610 from pa_proj_elem_ver_structure
6611 where proj_element_id = c_structure_id
6612 AND project_id = c_project_id
6613 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
6614
6615 --Hsiu added for date rollup
6616 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6617
6618 --hsiu added for task status
6619 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
6620 select object_id_from1
6621 from pa_object_relationships
6622 where object_id_to1 = c_elem_ver_id
6623 and object_type_to = 'PA_TASKS'
6624 and relationship_type = 'S';
6625 l_parent_ver_id NUMBER;
6626 l_error_msg_code VARCHAR2(30);
6627
6628 BEGIN
6629 pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_TASK_VERSION');
6630
6631 IF (p_debug_mode = 'Y') THEN
6632 pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION begin');
6633 END IF;
6634
6635 IF (p_commit = FND_API.G_TRUE) THEN
6636 savepoint indent_task_version;
6637 END IF;
6638
6639 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
6640 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6641 END IF;
6642
6643 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
6644 FND_MSG_PUB.initialize;
6645 END IF;
6646
6647 ----dbms_output.put_line( 'Indent Task Stage 1 ' );
6648 --hsiu
6649 --added on 08-JAN-2002
6650 --check if task are linked task
6651 IF (p_structure_version_id IS NOT NULL) AND
6652 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6653 IF ('N' = pa_proj_elements_utils.check_task_in_structure(
6654 p_structure_version_id,
6655 p_task_version_id)) THEN
6656 --deleting linked task. Error
6657 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
6658 END IF;
6659
6660 l_msg_count := FND_MSG_PUB.count_msg;
6661 if l_msg_count > 0 then
6662 x_msg_count := l_msg_count;
6663 if x_msg_count = 1 then
6664 pa_interface_utils_pub.get_messages
6665 (p_encoded => FND_API.G_TRUE,
6666 p_msg_index => 1,
6667 p_msg_count => l_msg_count,
6668 p_msg_data => l_msg_data,
6669 p_data => l_data,
6670 p_msg_index_out => l_msg_index_out);
6671 x_msg_data := l_data;
6672 end if;
6673 raise FND_API.G_EXC_ERROR;
6674 end if;
6675 END IF;
6676
6677 -- hyau
6678 -- Lifecycle Phase validation Changes. Check if task has phase associated with it
6679 IF (p_task_version_id IS NOT NULL) AND
6680 (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6681
6682 SELECT proj_element_id, wbs_level, display_sequence, parent_structure_version_id
6683 INTO l_proj_element_id, l_wbs_level, l_display_sequence, l_parent_structure_version_id
6684 FROM PA_PROJ_ELEMENT_VERSIONS
6685 WHERE element_version_id = p_task_version_id;
6686
6687 IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
6688 l_proj_element_id)) THEN
6689 --Indenting a task with phase. Error
6690 PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
6691 END IF;
6692
6693 l_msg_count := FND_MSG_PUB.count_msg;
6694 if l_msg_count > 0 then
6695 x_msg_count := l_msg_count;
6696 if x_msg_count = 1 then
6697 pa_interface_utils_pub.get_messages
6698 (p_encoded => FND_API.G_TRUE,
6699 p_msg_index => 1,
6700 p_msg_count => l_msg_count,
6701 p_msg_data => l_msg_data,
6702 p_data => l_data,
6703 p_msg_index_out => l_msg_index_out);
6704 x_msg_data := l_data;
6705 end if;
6706 raise FND_API.G_EXC_ERROR;
6707 end if;
6708 END IF;
6709 -- end hyau. Lifecycle Phase validation Changes.
6710
6711 --dbms_output.put_line( 'Indent Task Stage 2 ' );
6712
6713
6714 /* Moved up for performance bug 2832807
6715 SELECT wbs_level, display_sequence, parent_structure_version_id
6716 INTO l_wbs_level, l_display_sequence, l_parent_structure_version_id
6717 FROM PA_PROJ_ELEMENT_VERSIONS
6718 WHERE element_version_id = p_task_version_id;
6719 */
6720
6721 --dbms_output.put_line( 'Indent Task Stage 3 ' );
6722
6723
6724 if l_display_sequence = 1 then
6725 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
6726 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
6727 end if;
6728
6729 --dbms_output.put_line( 'Indent Task Stage 4 ' );
6730
6731 --need to specify parent structure version id
6732 SELECT wbs_level, element_version_id
6733 INTO l_prev_wbs_level, l_ref_task_version_id
6734 FROM PA_PROJ_ELEMENT_VERSIONS
6735 WHERE display_sequence = l_display_sequence - 1
6736 AND parent_structure_version_id = l_parent_structure_version_id;
6737
6738 --dbms_output.put_line( 'Indent Task Stage 5 ' );
6739
6740
6741 if l_wbs_level > l_prev_wbs_level then
6742 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
6743 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
6744 end if;
6745
6746 l_msg_count := FND_MSG_PUB.count_msg;
6747 if l_msg_count > 0 then
6748 x_msg_count := l_msg_count;
6749 if x_msg_count = 1 then
6750 pa_interface_utils_pub.get_messages
6751 (p_encoded => FND_API.G_TRUE,
6752 p_msg_index => 1,
6753 p_msg_count => l_msg_count,
6754 p_msg_data => l_msg_data,
6755 p_data => l_data,
6756 p_msg_index_out => l_msg_index_out);
6757 x_msg_data := l_data;
6758 end if;
6759 raise FND_API.G_EXC_ERROR;
6760 end if;
6761
6762 --dbms_output.put_line( 'Indent Task Stage 6 ' );
6763
6764 if l_wbs_level = l_prev_wbs_level then
6765 l_peer_or_sub := 'SUB';
6766 else
6767 l_peer_or_sub := 'PEER';
6768
6769 --dbms_output.put_line( 'Indent Task Stage 7 ' );
6770
6771 --need to specify which structure version
6772 --need to specify parent in the inner select statement
6773 SELECT element_version_id
6774 INTO l_ref_task_version_id
6775 FROM PA_PROJ_ELEMENT_VERSIONS
6776 WHERE wbs_level = l_wbs_level + 1
6777 AND object_type = 'PA_TASKS'
6778 AND display_sequence < l_display_sequence
6779 AND parent_structure_version_id = l_parent_structure_version_id
6780 AND display_sequence =
6781 (SELECT max(display_sequence)
6782 FROM PA_PROJ_ELEMENT_VERSIONS
6783 WHERE wbs_level = l_wbs_level + 1
6784 AND object_type = 'PA_TASKS'
6785 AND display_sequence < l_display_sequence
6786 AND parent_structure_version_id = l_parent_structure_version_id);
6787 --dbms_output.put_line( 'Indent Task Stage 8 ' );
6788
6789 end if;
6790
6791
6792 --hsiu added for task status
6793 --Check if ok to indent this task
6794 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
6795 p_task_ver_id => p_task_version_id
6796 ,x_return_status => l_return_status
6797 ,x_error_message_code => l_error_msg_code
6798 );
6799
6800 IF (l_return_status <> 'Y') THEN
6801 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6802 p_msg_name => l_error_msg_code);
6803 raise FND_API.G_EXC_ERROR;
6804 END IF;
6805
6806 --check if ok to create subtask
6807 IF (l_peer_or_sub = 'PEER') THEN
6808 OPEN get_parent_version_id(l_ref_task_version_id);
6809 FETCH get_parent_version_id into l_parent_ver_id;
6810 CLOSE get_parent_version_id;
6811 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
6812 p_parent_task_ver_id => l_parent_ver_id
6813 ,x_return_status => l_return_status
6814 ,x_error_message_code => l_error_msg_code
6815 );
6816
6817 IF (l_return_status <> 'Y') THEN
6818 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6819 p_msg_name => l_error_msg_code);
6820 raise FND_API.G_EXC_ERROR;
6821 END IF;
6822 ELSE
6823 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
6824 p_parent_task_ver_id => l_ref_task_version_id
6825 ,x_return_status => l_return_status
6826 ,x_error_message_code => l_error_msg_code
6827 );
6828
6829 IF (l_return_status <> 'Y') THEN
6830 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6831 p_msg_name => l_error_msg_code);
6832 raise FND_API.G_EXC_ERROR;
6833 END IF;
6834 END IF;
6835
6836 --end task status changes
6837
6838
6839 --dbms_output.put_line( 'Indent Task Stage 9 ' );
6840
6841 PA_TASK_PUB1.Update_Task_Version
6842 ( p_validate_only => FND_API.G_FALSE,
6843 p_ref_task_version_id => l_ref_task_version_id,
6844 p_peer_or_sub => l_peer_or_sub,
6845 p_task_version_id => p_task_version_id,
6846 p_record_version_number => p_record_version_number,
6847 x_return_status => l_return_status,
6848 x_msg_count => l_msg_count,
6849 x_msg_data => l_msg_data );
6850
6851 --dbms_output.put_line( 'Indent Task Stage 10 ' );
6852
6853
6854 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6855 x_msg_count := FND_MSG_PUB.count_msg;
6856 IF x_msg_count = 1 then
6857 pa_interface_utils_pub.get_messages
6858 (p_encoded => FND_API.G_TRUE,
6859 p_msg_index => 1,
6860 p_msg_count => l_msg_count,
6861 p_msg_data => l_msg_data,
6862 p_data => l_data,
6863 p_msg_index_out => l_msg_index_out);
6864 x_msg_data := l_data;
6865 END IF;
6866 raise FND_API.G_EXC_ERROR;
6867 END IF;
6868
6869
6870 --dbms_output.put_line( 'Indent Task Stage 11 ' );
6871
6872 -- Update WBS numbers
6873 SELECT parent_structure_version_id
6874 INTO l_parent_structure_version_id
6875 FROM PA_PROJ_ELEMENT_VERSIONS
6876 WHERE element_version_id = p_task_version_id;
6877
6878 --dbms_output.put_line( 'Indent Task Stage 12 ' );
6879
6880
6881 PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
6882 ( p_commit => p_commit
6883 ,p_debug_mode => p_debug_mode
6884 ,p_parent_structure_ver_id => l_parent_structure_version_id
6885 ,p_task_id => p_task_version_id
6886 ,p_display_seq => l_display_sequence
6887 ,p_action => 'INDENT'
6888 ,p_parent_task_id => NULL
6889 ,x_return_status => l_return_status );
6890
6891
6892 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
6893 FROM pa_proj_element_versions
6894 WHERE element_version_id = ( Select parent_structure_version_id
6895 from pa_proj_element_versions
6896 where element_version_id = p_task_version_id )
6897 AND object_type = 'PA_STRUCTURES';
6898
6899
6900 --Do financial task check
6901 --If financial
6902 OPEN cur_struc_type( l_structure_id );
6903 FETCH cur_struc_type INTO l_dummy_char;
6904 IF cur_struc_type%FOUND
6905 THEN
6906 --If structure has any published versions.
6907 l_published_version := 'N';
6908 OPEN cur_pub_versions( l_structure_id, l_project_id );
6909 FETCH cur_pub_versions INTO l_published_version;
6910 CLOSE cur_pub_versions;
6911
6912 --hsiu
6913 --changes for versioning
6914 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
6915 l_project_id);
6916 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
6917 l_project_id);
6918
6919 IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y')
6920 OR ((l_published_version = 'Y') AND (l_shared = 'N')) -- Bug # 5064340. -- To accomodate split financial tasks.
6921 THEN
6922 -- IF NVL( l_published_version, 'N' ) = 'N'
6923 -- THEN
6924 --end changes
6925
6926 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
6927 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
6928 FROM PA_TASKS pt,
6929 pa_proj_elem_ver_structure ppa,
6930 PA_PROJ_ELEMENT_VERSIONS ppev
6931 WHERE ppev.element_version_id = p_task_version_id
6932 AND ppev.parent_structure_version_id = ppa.element_version_id
6933 AND ppev.project_id = ppa.project_id
6934 AND ppev.proj_element_id = pt.task_id;
6935
6936 SELECT proj_element_id
6937 INTO l_ref_task_id
6938 FROM PA_PROJ_ELEMENT_VERSIONS
6939 WHERE element_version_id = l_ref_task_version_id;
6940
6941 SELECT record_version_number INTO l_task_record_version_number
6942 FROM pa_tasks
6943 WHERE task_id = l_task_id
6944 AND project_id = l_project_id;
6945
6946
6947 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
6948 p_project_id => l_project_id
6949 ,p_task_id => l_task_id
6950 ,p_edit_mode => 'INDENT'
6951 ,p_record_version_number => l_task_record_version_number
6952 ,p_wbs_record_version_number => 1
6953 ,x_return_status => l_return_status
6954 ,x_msg_count => l_msg_count
6955 ,x_msg_data => l_msg_data );
6956
6957 --dbms_output.put_line( 'Indent Task Stage 19 ' );
6958
6959 END IF;
6960 END IF;
6961 CLOSE cur_struc_type;
6962
6963 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6964 x_msg_count := FND_MSG_PUB.count_msg;
6965 IF x_msg_count = 1 then
6966 pa_interface_utils_pub.get_messages
6967 (p_encoded => FND_API.G_TRUE,
6968 p_msg_index => 1,
6969 p_msg_count => l_msg_count,
6970 p_msg_data => l_msg_data,
6971 p_data => l_data,
6972 p_msg_index_out => l_msg_index_out);
6973 x_msg_data := l_data;
6974 END IF;
6975 raise FND_API.G_EXC_ERROR;
6976 END IF;
6977
6978 --Hsiu added for date rollup; workplan only
6979
6980 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(l_parent_structure_version_id, 'WORKPLAN') = 'Y' then
6981 l_tasks_ver_ids.extend;
6982 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6983
6984 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6985 p_commit => FND_API.G_FALSE,
6986 p_element_versions => l_tasks_ver_ids,
6987 x_return_status => l_return_status,
6988 x_msg_count => l_msg_count,
6989 x_msg_data => l_msg_data);
6990
6991 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6992 x_msg_count := FND_MSG_PUB.count_msg;
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
7006 --hsiu added for task status
7007 --if versioning is off, rollup.
7008 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
7009 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
7010 p_structure_version_id => p_structure_version_id
7011 ,p_element_version_id => p_task_version_id
7012 ,x_return_status => l_return_status
7013 ,x_msg_count => l_msg_count
7014 ,x_msg_data => l_msg_data
7015 );
7016
7017 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7018 x_msg_count := FND_MSG_PUB.count_msg;
7019 if x_msg_count = 1 then
7020 pa_interface_utils_pub.get_messages
7021 (p_encoded => FND_API.G_TRUE,
7022 p_msg_index => 1,
7023 p_msg_count => l_msg_count,
7024 p_msg_data => l_msg_data,
7025 p_data => l_data,
7026 p_msg_index_out => l_msg_index_out);
7027 x_msg_data := l_data;
7028 end if;
7029 raise FND_API.G_EXC_ERROR;
7030 end if;
7031 END IF;
7032
7033 --end task status changes
7034
7035 END IF;
7036
7037 x_return_status := FND_API.G_RET_STS_SUCCESS;
7038
7039 IF (p_commit = FND_API.G_TRUE) THEN
7040 COMMIT;
7041 END IF;
7042
7043 IF (p_debug_mode = 'Y') THEN
7044 pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION END');
7045 END IF;
7046
7047 EXCEPTION
7048 when FND_API.G_EXC_ERROR then
7049 if p_commit = FND_API.G_TRUE then
7050 rollback to indent_task_version;
7051 end if;
7052 x_return_status := FND_API.G_RET_STS_ERROR;
7053 when FND_API.G_EXC_UNEXPECTED_ERROR then
7054 if p_commit = FND_API.G_TRUE then
7055 rollback to indent_task_version;
7056 end if;
7057 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7058 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
7059 p_procedure_name => 'INDENT_TASK_VERSION',
7060 p_error_text => SUBSTRB(SQLERRM,1,240));
7061 when OTHERS then
7062 if p_commit = FND_API.G_TRUE then
7063 rollback to indent_task_version;
7064 end if;
7065 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7066 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
7067 p_procedure_name => 'INDENT_TASK_VERSION',
7068 p_error_text => SUBSTRB(SQLERRM,1,240));
7069 raise;
7070
7071 END Indent_Task_Version;
7072
7073
7074 -- API name : Outdent_Task_Version
7075 -- Type : Public procedure
7076 -- Pre-reqs : None
7077 -- Return Value : N/A
7078 -- Prameters
7079 -- p_api_version IN NUMBER N Not Null 1.0
7080 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
7081 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
7082 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
7083 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
7084 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
7085 -- p_debug_mode IN VARCHAR2 N Null N
7086 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7087 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7088 -- p_task_version_id IN NUMBER N Not Null
7089 -- x_return_status OUT VARCHAR2 N Null
7090 -- x_msg_count OUT NUMBER N Null
7091 -- x_msg_data OUT VARCHAR2 N Null
7092 --
7093 -- History
7094 --
7095 -- 23-OCT-01 Andrew Lee -Created
7096 --
7097 --
7098
7099 PROCEDURE OUTDENT_TASK_VERSION (
7100 p_api_version IN NUMBER :=1.0,
7101 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
7102 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
7103 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
7104 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
7105 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
7106 p_debug_mode IN VARCHAR2 :='N',
7107 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7108 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7109 p_task_version_id IN NUMBER,
7110 p_record_version_number IN NUMBER,
7111 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
7112 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
7113 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7114 )
7115 IS
7116
7117 l_api_name CONSTANT VARCHAR(30) := 'OUTDENT_TASK_VERSION';
7118 l_api_version CONSTANT NUMBER := 1.0;
7119
7120 l_wbs_level NUMBER;
7121 l_display_sequence NUMBER;
7122 l_ref_task_version_id NUMBER;
7123 l_parent_structure_version_id NUMBER;
7124
7125 l_return_status VARCHAR2(1);
7126 l_msg_count NUMBER;
7127 l_msg_data VARCHAR2(250);
7128 l_data VARCHAR2(250);
7129 l_msg_index_out NUMBER;
7130
7131 l_project_id NUMBER;
7132 l_ref_task_id NUMBER;
7133 l_task_id NUMBER;
7134 l_task_record_version_number NUMBER;
7135 l_wbs_record_version_number NUMBER;
7136 l_dummy_char VARCHAR2(1);
7137 l_published_version VARCHAR2(1);
7138 l_structure_id NUMBER;
7139
7140 --hsiu
7141 --added for advanced structure - versioning
7142 l_versioned VARCHAR2(1) := 'N';
7143 l_shared VARCHAR2(1) := 'N';
7144 --end changes
7145
7146 CURSOR cur_struc_type( c_structure_id NUMBER )
7147 IS
7148 SELECT 'Y'
7149 FROM pa_proj_structure_types ppst
7150 ,pa_structure_types pst
7151 WHERE ppst.proj_element_id = c_structure_id
7152 AND ppst.structure_type_id = pst.structure_type_id
7153 AND pst.structure_type_class_code IN( 'FINANCIAL' );
7154
7155 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
7156 select 'Y'
7157 from pa_proj_elem_ver_structure
7158 where proj_element_id = c_structure_id
7159 AND project_id = c_project_id
7160 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
7161
7162 --hsiu added, for dates rollup
7163 CURSOR get_peer_tasks
7164 IS
7165 select b.object_id_to1 object_id_to1
7166 from pa_object_relationships a,
7167 pa_object_relationships b
7168 where a.object_id_to1 = p_task_version_id
7169 and a.object_type_to = 'PA_TASKS'
7170 and a.object_id_from1 = b.object_id_from1
7171 and a.object_type_from = b.object_type_from
7172 and b.object_type_to = 'PA_TASKS'
7173 and b.object_id_to1 <> p_task_version_id;
7174 c_get_peer_tasks get_peer_tasks%ROWTYPE;
7175
7176 --Hsiu added, for dates rollup
7177 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
7178 --hsiu added, for task status
7179 l_rollup_task_id NUMBER;
7180
7181 --hsiu added for task status
7182 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
7183 select object_id_from1
7184 from pa_object_relationships
7185 where object_id_to1 = c_elem_ver_id
7186 and object_type_to = 'PA_TASKS'
7187 and relationship_type = 'S';
7188 l_parent_ver_id NUMBER;
7189 l_error_msg_code VARCHAR2(30);
7190 BEGIN
7191 pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_TASK_VERSION');
7192
7193 IF (p_debug_mode = 'Y') THEN
7194 pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION begin');
7195 END IF;
7196
7197 IF (p_commit = FND_API.G_TRUE) THEN
7198 savepoint outdent_task_version;
7199 END IF;
7200
7201 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
7202 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7203 END IF;
7204
7205 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
7206 FND_MSG_PUB.initialize;
7207 END IF;
7208
7209 --hsiu
7210 --added on 08-JAN-2002
7211 --check if task are linked task
7212 IF (p_structure_version_id IS NOT NULL) AND
7213 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7214 IF ('N' = pa_proj_elements_utils.check_task_in_structure(
7215 p_structure_version_id,
7216 p_task_version_id)) THEN
7217 --deleting linked task. Error
7218 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
7219 END IF;
7220
7221 l_msg_count := FND_MSG_PUB.count_msg;
7222 if l_msg_count > 0 then
7223 x_msg_count := l_msg_count;
7224 if x_msg_count = 1 then
7225 pa_interface_utils_pub.get_messages
7226 (p_encoded => FND_API.G_TRUE,
7227 p_msg_index => 1,
7228 p_msg_count => l_msg_count,
7229 p_msg_data => l_msg_data,
7230 p_data => l_data,
7231 p_msg_index_out => l_msg_index_out);
7232 x_msg_data := l_data;
7233 end if;
7234 raise FND_API.G_EXC_ERROR;
7235 end if;
7236 END IF;
7237
7238 --hsiu added, for dates rollup
7239 --need to get peer task before it has been outdented.
7240 OPEN get_peer_tasks;
7241 LOOP
7242 FETCH get_peer_tasks INTO c_get_peer_tasks;
7243 EXIT WHEN get_peer_tasks%NOTFOUND;
7244 l_tasks_ver_ids.extend;
7245 l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
7246 --added for task status rollup
7247 l_rollup_task_id := c_get_peer_tasks.object_id_to1;
7248 END LOOP;
7249 CLOSE get_peer_tasks;
7250
7251
7252 SELECT wbs_level, display_sequence, parent_structure_version_id
7253 INTO l_wbs_level, l_display_sequence, l_parent_structure_version_id
7254 FROM PA_PROJ_ELEMENT_VERSIONS
7255 WHERE element_version_id = p_task_version_id;
7256
7257 if l_wbs_level = 1 then
7258 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7259 ,p_msg_name => 'PA_PS_CANNOT_OUTDENT');
7260 end if;
7261
7262 l_msg_count := FND_MSG_PUB.count_msg;
7263 if l_msg_count > 0 then
7264 x_msg_count := l_msg_count;
7265 if x_msg_count = 1 then
7266 pa_interface_utils_pub.get_messages
7267 (p_encoded => FND_API.G_TRUE,
7268 p_msg_index => 1,
7269 p_msg_count => l_msg_count,
7270 p_msg_data => l_msg_data,
7271 p_data => l_data,
7272 p_msg_index_out => l_msg_index_out);
7273 x_msg_data := l_data;
7274 end if;
7275 raise FND_API.G_EXC_ERROR;
7276 end if;
7277
7278 --get the reference task version of p_task_version_id
7279 SELECT element_version_id
7280 INTO l_ref_task_version_id
7281 FROM PA_PROJ_ELEMENT_VERSIONS
7282 WHERE wbs_level = l_wbs_level - 1
7283 AND object_type = 'PA_TASKS'
7284 AND parent_structure_version_id = l_parent_structure_version_id
7285 AND display_sequence < l_display_sequence
7286 AND display_sequence =
7287 (SELECT max(display_sequence)
7288 FROM PA_PROJ_ELEMENT_VERSIONS
7289 WHERE wbs_level = l_wbs_level - 1
7290 AND object_type = 'PA_TASKS'
7291 AND parent_structure_version_id = l_parent_structure_version_id
7292 AND display_sequence < l_display_sequence);
7293
7294 --hsiu added for task status
7295 --Check if ok to outdent this task
7296 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
7297 p_task_ver_id => p_task_version_id
7298 ,x_return_status => l_return_status
7299 ,x_error_message_code => l_error_msg_code
7300 );
7301
7302 IF (l_return_status <> 'Y') THEN
7303 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7304 p_msg_name => l_error_msg_code);
7305 raise FND_API.G_EXC_ERROR;
7306 END IF;
7307
7308 OPEN get_parent_version_id(l_ref_task_version_id);
7309 FETCH get_parent_version_id into l_parent_ver_id;
7310 CLOSE get_parent_version_id;
7311 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7312 p_parent_task_ver_id => l_parent_ver_id
7313 ,x_return_status => l_return_status
7314 ,x_error_message_code => l_error_msg_code
7315 );
7316
7317 IF (l_return_status <> 'Y') THEN
7318 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7319 p_msg_name => l_error_msg_code);
7320 raise FND_API.G_EXC_ERROR;
7321 END IF;
7322 --task status changes ends
7323
7324 --dbms_output.put_line( 'Before Update_Task_Version ' );
7325
7326 PA_TASK_PUB1.Update_Task_Version
7327 ( p_validate_only => FND_API.G_FALSE,
7328 p_ref_task_version_id => l_ref_task_version_id,
7329 p_peer_or_sub => 'PEER',
7330 p_task_version_id => p_task_version_id,
7331 p_record_version_number => p_record_version_number,
7332 p_action => 'OUTDENT',
7333 x_return_status => l_return_status,
7334 x_msg_count => l_msg_count,
7335 x_msg_data => l_msg_data );
7336
7337 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7338 x_msg_count := FND_MSG_PUB.count_msg;
7339 IF x_msg_count = 1 then
7340 pa_interface_utils_pub.get_messages
7341 (p_encoded => FND_API.G_TRUE,
7342 p_msg_index => 1,
7343 p_msg_count => l_msg_count,
7344 p_msg_data => l_msg_data,
7345 p_data => l_data,
7346 p_msg_index_out => l_msg_index_out);
7347 x_msg_data := l_data;
7348 END IF;
7349 raise FND_API.G_EXC_ERROR;
7350 END IF;
7351
7352 --dbms_output.put_line( 'Before Update WBS numbers ' );
7353
7354 -- Update WBS numbers
7355 SELECT parent_structure_version_id
7356 INTO l_parent_structure_version_id
7357 FROM PA_PROJ_ELEMENT_VERSIONS
7358 WHERE element_version_id = p_task_version_id;
7359
7360 PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
7361 ( p_commit => p_commit
7362 ,p_debug_mode => p_debug_mode
7363 ,p_parent_structure_ver_id => l_parent_structure_version_id
7364 ,p_task_id => p_task_version_id
7365 ,p_display_seq => l_display_sequence
7366 ,p_action => 'OUTDENT'
7367 ,p_parent_task_id => NULL
7368 ,x_return_status => l_return_status );
7369
7370 /* SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7371 FROM pa_proj_element_versions
7372 WHERE element_version_id = p_structure_version_id
7373 AND object_type = 'PA_STRUCTURES';*/
7374
7375 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7376 FROM pa_proj_element_versions
7377 WHERE element_version_id = ( Select parent_structure_version_id
7378 from pa_proj_element_versions
7379 where element_version_id = p_task_version_id )
7380 AND object_type = 'PA_STRUCTURES';
7381
7382 --Do financial task check
7383 --If financial
7384 OPEN cur_struc_type( l_structure_id );
7385 FETCH cur_struc_type INTO l_dummy_char;
7386 IF cur_struc_type%FOUND
7387 THEN
7388 --If structure has any published versions.
7389 l_published_version := 'N';
7390 OPEN cur_pub_versions( l_structure_id, l_project_id );
7391 FETCH cur_pub_versions INTO l_published_version;
7392 CLOSE cur_pub_versions;
7393
7394 --hsiu
7395 --changes for versioning
7396 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
7397 l_project_id);
7398 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
7399 l_project_id);
7400 IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y')
7401 OR ((l_published_version = 'Y') AND (l_shared = 'N')) -- Bug # 5064340. -- To accomodate split financial tasks.
7402 THEN
7403 -- IF NVL( l_published_version, 'N' ) = 'N'
7404 -- THEN
7405 --end changes
7406
7407 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
7408 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
7409 FROM PA_TASKS pt,
7410 pa_proj_elem_ver_structure ppa,
7411 PA_PROJ_ELEMENT_VERSIONS ppev
7412 WHERE ppev.element_version_id = p_task_version_id
7413 AND ppev.parent_structure_version_id = ppa.element_version_id
7414 AND ppev.project_id = ppa.project_id
7415 AND ppev.proj_element_id = pt.task_id;
7416
7417 SELECT proj_element_id
7418 INTO l_ref_task_id
7419 FROM PA_PROJ_ELEMENT_VERSIONS
7420 WHERE element_version_id = l_ref_task_version_id;
7421
7422 SELECT record_version_number INTO l_task_record_version_number
7423 FROM pa_tasks
7424 WHERE task_id = l_task_id
7425 AND project_id = l_project_id;
7426
7427 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
7428 p_project_id => l_project_id
7429 ,p_task_id => l_task_id
7430 ,p_edit_mode => 'OUTDENT'
7431 ,p_record_version_number => l_task_record_version_number
7432 ,p_wbs_record_version_number => 1
7433 ,x_return_status => l_return_status
7434 ,x_msg_count => l_msg_count
7435 ,x_msg_data => l_msg_data );
7436 END IF;
7437 END IF;
7438 CLOSE cur_struc_type;
7439
7440 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7441 x_msg_count := FND_MSG_PUB.count_msg;
7442 IF x_msg_count = 1 then
7443 pa_interface_utils_pub.get_messages
7444 (p_encoded => FND_API.G_TRUE,
7445 p_msg_index => 1,
7446 p_msg_count => l_msg_count,
7447 p_msg_data => l_msg_data,
7448 p_data => l_data,
7449 p_msg_index_out => l_msg_index_out);
7450 x_msg_data := l_data;
7451 END IF;
7452 raise FND_API.G_EXC_ERROR;
7453 END IF;
7454
7455 --dbms_output.put_line( 'After Move task ' );
7456
7457 --Hsiu added for date rollup; workplan only
7458
7459 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(l_parent_structure_version_id, 'WORKPLAN') = 'Y' then
7460 l_tasks_ver_ids.extend;
7461 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
7462
7463 --added for task status rollup
7464 IF (l_rollup_task_id IS NULL) THEN
7465 l_rollup_task_id := p_task_version_id;
7466 END IF;
7467
7468 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
7469 p_commit => FND_API.G_FALSE,
7470 p_element_versions => l_tasks_ver_ids,
7471 x_return_status => l_return_status,
7472 x_msg_count => l_msg_count,
7473 x_msg_data => l_msg_data);
7474
7475 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7476 x_msg_count := FND_MSG_PUB.count_msg;
7477 if x_msg_count = 1 then
7478 pa_interface_utils_pub.get_messages
7479 (p_encoded => FND_API.G_TRUE,
7480 p_msg_index => 1,
7481 p_msg_count => l_msg_count,
7482 p_msg_data => l_msg_data,
7483 p_data => l_data,
7484 p_msg_index_out => l_msg_index_out);
7485 x_msg_data := l_data;
7486 end if;
7487 raise FND_API.G_EXC_ERROR;
7488 end if;
7489
7490 --hsiu added for task status
7491 --if versioning is off, rollup.
7492 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
7493 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
7494 p_structure_version_id => p_structure_version_id
7495 ,p_element_version_id => l_rollup_task_id
7496 ,x_return_status => l_return_status
7497 ,x_msg_count => l_msg_count
7498 ,x_msg_data => l_msg_data
7499 );
7500
7501 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7502 x_msg_count := FND_MSG_PUB.count_msg;
7503 if x_msg_count = 1 then
7504 pa_interface_utils_pub.get_messages
7505 (p_encoded => FND_API.G_TRUE,
7506 p_msg_index => 1,
7507 p_msg_count => l_msg_count,
7508 p_msg_data => l_msg_data,
7509 p_data => l_data,
7510 p_msg_index_out => l_msg_index_out);
7511 x_msg_data := l_data;
7512 end if;
7513 raise FND_API.G_EXC_ERROR;
7514 end if;
7515 END IF;
7516
7517 --end task status changes
7518
7519 END IF;
7520
7521 x_return_status := FND_API.G_RET_STS_SUCCESS;
7522
7523 IF (p_commit = FND_API.G_TRUE) THEN
7524 COMMIT;
7525 END IF;
7526
7527 IF (p_debug_mode = 'Y') THEN
7528 pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION END');
7529 END IF;
7530
7531 EXCEPTION
7532 when FND_API.G_EXC_ERROR then
7533 if p_commit = FND_API.G_TRUE then
7534 rollback to outdent_task_version;
7535 end if;
7536 x_return_status := FND_API.G_RET_STS_ERROR;
7537 when FND_API.G_EXC_UNEXPECTED_ERROR then
7538 if p_commit = FND_API.G_TRUE then
7539 rollback to outdent_task_version;
7540 end if;
7541 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7542 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
7543 p_procedure_name => 'OUTDENT_TASK_VERSION',
7544 p_error_text => SUBSTRB(SQLERRM,1,240));
7545 when OTHERS then
7546 if p_commit = FND_API.G_TRUE then
7547 rollback to outdent_task_version;
7548 end if;
7549 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7550 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
7551 p_procedure_name => 'OUTDENT_TASK_VERSION',
7552 p_error_text => SUBSTRB(SQLERRM,1,240));
7553 raise;
7554 END Outdent_Task_Version;
7555
7556 -- API name : Create_tasks
7557 -- Type : Wrapper Public procedure
7558 -- Pre-reqs : None
7559 -- Return Value : N/A
7560 -- Prameters
7561 -- p_project_id IN NUMBER
7562 -- p_ref_task_version_id IN NUMBER
7563 -- p_structure_id IN NUMBER
7564 -- p_structure_version_id IN NUMBER
7565 -- p_outline_level IN PA_NUM_1000_NUM
7566 -- p_task_number IN PA_VC_1000_150
7567 -- p_task_name IN PA_VC_1000_2000
7568 -- p_scheduled_start_date IN PA_DATE_1000_DATE
7569 -- p_scheduled_finish_date IN PA_DATE_1000_DATE
7570 -- p_task_manager_id IN PA_NUM_1000_NUM
7571 -- p_task_manager_name IN PA_VC_1000_150
7572 --FP M Development Changes
7573 -- p_planned_effort IN PA_NUM_1000_NUM
7574 -- p_dependencies IN PA_VC_1000_4000
7575 -- p_dependency_ids IN PA_NUM_1000_NUM
7576 -- p_structure_type IN VARCHAR2 :='WORKPLAN'
7577 -- p_financial_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7578 -- p_resources IN PA_VC_1000_4000
7579 -- p_resource_ids IN PA_NUM_1000_NUM
7580 -- p_mapped_task IN PA_VC_1000_4000
7581 -- p_mapped_task_id IN PA_NUM_1000_NUM
7582 --End FP M Development Changes
7583 -- x_msg_count OUT NUMBER
7584 -- x_msg_data OUT VARCHAR2
7585 -- x_return_status OUT VARCHAR2
7586 -- x_return_status OUT VARCHAR2 N Null
7587 -- x_msg_count OUT NUMBER N Null
7588 -- x_msg_data OUT VARCHAR2 N Null
7589 --
7590 -- History
7591 --
7592 -- 23-OCT-01 Andrew Lee -Created
7593 --
7594 --
7595
7596 PROCEDURE CREATE_TASKS
7597 ( p_project_id IN NUMBER
7598 ,p_ref_task_version_id IN NUMBER
7599 ,p_structure_id IN NUMBER
7600 ,p_structure_version_id IN NUMBER
7601 ,p_outline_level IN PA_NUM_1000_NUM
7602 ,p_task_number IN PA_VC_1000_150
7603 ,p_task_name IN PA_VC_1000_2000
7604 ,p_scheduled_start_date IN PA_DATE_1000_DATE
7605 ,p_scheduled_finish_date IN PA_DATE_1000_DATE
7606 ,p_task_manager_id IN PA_NUM_1000_NUM
7607 ,p_task_manager_name IN PA_VC_1000_150
7608 ,p_TYPE_ID IN PA_NUM_1000_NUM
7609 --FP M Development Changes bug 330119
7610 ,p_planned_effort IN PA_NUM_1000_NUM
7611 ,p_planned_equip_effort IN PA_NUM_1000_NUM
7612 ,p_dependencies IN PA_VC_1000_4000
7613 ,p_dependency_ids IN PA_NUM_1000_NUM
7614 ,p_structure_type IN VARCHAR2 :='WORKPLAN'
7615 ,p_financial_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7616 ,p_use_in_fin_plan IN PA_VC_1000_10
7617 ,p_resources IN PA_VC_1000_4000
7618 ,p_resource_ids IN PA_NUM_1000_NUM
7619 ,p_mapped_task IN PA_VC_1000_4000
7620 ,p_mapped_task_id IN PA_NUM_1000_NUM
7621 --End FP M Development Changes bug 330119
7622 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7623 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7624 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
7625 IS
7626 i NUMBER;
7627 l_msg_count NUMBER;
7628 l_return_status VARCHAR2(1);
7629 l_msg_data VARCHAR2(2000);
7630 l_data VARCHAR2(2000);
7631 l_msg_index_out NUMBER;
7632
7633 l_outline_level NUMBER;
7634 l_prev_outline_level NUMBER;
7635 l_ref_task_ver_id NUMBER;
7636 l_peer_or_sub VARCHAR2(20);
7637 l_task_id NUMBER;
7638 l_task_version_id NUMBER;
7639 API_ERROR EXCEPTION;
7640
7641 TYPE reference_tasks IS TABLE OF NUMBER
7642 INDEX BY BINARY_INTEGER;
7643
7644 -- This table stores reference task version IDs for a particular outline
7645 -- level. This provides a lookup to find the last task version created
7646 -- at that level.
7647 l_outline_task_ref reference_tasks;
7648 l_pev_schedule_id NUMBER;
7649 l_ref_proj_eleme_id NUMBER;
7650
7651 CURSOR cur_ref_proj_elem_id( p_ref_task_ver_id NUMBER )
7652 IS
7653 SELECT proj_element_id
7654 FROM pa_proj_element_versions
7655 WHERE element_version_id = p_ref_task_ver_id
7656 AND object_type = 'PA_TASKS';
7657
7658 --Hsiu added for date rollup
7659 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
7660
7661 -- anlee task weighting
7662 l_top_sub_count NUMBER;
7663 -- anlee End of changes
7664
7665 -- hsiu added for task version status
7666 CURSOR cur_proj_is_template(c_project_id NUMBER)
7667 IS select 'Y'
7668 from pa_projects_all
7669 where project_id = c_project_id
7670 and template_flag = 'Y';
7671 l_template_flag VARCHAR2(1);
7672
7673 l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
7674
7675 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
7676 select object_id_from1
7677 from pa_object_relationships
7678 where object_id_to1 = c_elem_ver_id
7679 and object_type_to = 'PA_TASKS'
7680 and relationship_type = 'S';
7681 l_parent_ver_id NUMBER;
7682 l_error_msg_code VARCHAR2(30);
7683 --end task version status changes
7684
7685 l_versioned VARCHAR2(1) := 'N';
7686 l_shared VARCHAR2(1) := 'N';
7687 l_published_ver_exists VARCHAR2(1);
7688 l_wp_process_flag VARCHAR2(1);
7689 --bug 3053281
7690 l_wp_type VARCHAR2(1);
7691 l_weighting_basis_Code VARCHAR2(30);
7692 --end bug 3053281
7693
7694 CURSOR get_base_ref_obj_type IS
7695 select object_type
7696 from pa_proj_element_versions
7697 where element_version_id = p_ref_task_version_id;
7698 l_ref_obj_type VARCHAR2(30);
7699
7700 -- Added for FP_M changes : Bug 3305199 : Bhumesh
7701 l_Share_Code VARCHAR2(30);
7702 l_Financial_Flag VARCHAR2(1) := 'N';
7703
7704 --bug 3301192
7705 /* Bug #: 3305199 SMukka */
7706 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
7707 /* l_task_ver_ids PA_PLSQL_DATATYPES.IdTabTyp; */
7708 l_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
7709
7710 BEGIN
7711
7712 --Clear Error Messages.
7713 FND_MSG_PUB.initialize;
7714
7715 savepoint create_tasks;
7716
7717 if p_project_id is null then
7718 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7719 ,p_msg_name => 'PA_NO_PROJECT_ID');
7720 end if;
7721
7722 if p_ref_task_version_id is null then
7723 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7724 ,p_msg_name => 'PA_NO_TASK_VERSION_ID');
7725 end if;
7726
7727 if p_structure_version_id is null then
7728 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7729 ,p_msg_name => 'PA_NO_STRUCTURE_VERSION_ID');
7730 end if;
7731
7732 l_msg_count := FND_MSG_PUB.count_msg;
7733 if l_msg_count > 0 then
7734 x_msg_count := l_msg_count;
7735 if x_msg_count = 1 then
7736 pa_interface_utils_pub.get_messages
7737 (p_encoded => FND_API.G_TRUE,
7738 p_msg_index => 1,
7739 p_msg_count => l_msg_count,
7740 p_msg_data => l_msg_data,
7741 p_data => l_data,
7742 p_msg_index_out => l_msg_index_out);
7743 x_msg_data := l_data;
7744 end if;
7745 raise API_ERROR;
7746 end if;
7747
7748 --bug 3053281 --set flag if not (manual and workplan only)
7749 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
7750 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
7751
7752 --bug 3010538
7753 --Added the following lines to cache versioning and sharing information
7754 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
7755 p_project_id);
7756 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
7757 p_project_id);
7758 --check whether there exists any published version.
7759 l_published_ver_exists := PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS( p_project_id, p_structure_id );
7760 --end bug 3010538
7761 --3035902: process update flag changes
7762 l_wp_process_flag := 'N';
7763 --3035902: end process update flag changes
7764
7765 l_outline_task_ref(0) := p_ref_task_version_id;
7766 l_prev_outline_level := NULL;
7767
7768 -- anlee task weighting
7769 l_top_sub_count := 0;
7770 -- anlee End of changes
7771
7772 --hsiu: added for task version status
7773 OPEN cur_proj_is_template(p_project_id);
7774 FETCH cur_proj_is_template into l_template_flag;
7775 IF cur_proj_is_template%NOTFOUND THEN
7776 l_template_flag := 'N';
7777 END IF;
7778 CLOSE cur_proj_is_template;
7779 --added for task version status
7780
7781 --added for bug 3125370
7782 OPEN get_base_ref_obj_type;
7783 FETCH get_base_ref_obj_type into l_ref_obj_type;
7784 CLOSE get_base_ref_obj_type;
7785 --bug 3125370
7786
7787 -- Added for FP_M changes. Tracking Bug 3305199
7788 l_financial_flag := 'N';
7789
7790 for i in 1..1000 LOOP
7791 if p_outline_level(i) is null AND p_task_name(i) IS NOT NULL AND p_task_number(i) IS NOT NULL then
7792 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7793 ,p_msg_name => 'PA_PS_TSK_WBS_LVL_ERR');
7794 x_msg_count := 1;
7795 pa_interface_utils_pub.get_messages
7796 (p_encoded => FND_API.G_TRUE,
7797 p_msg_index => 1,
7798 p_msg_count => l_msg_count,
7799 p_msg_data => l_msg_data,
7800 p_data => l_data,
7801 p_msg_index_out => l_msg_index_out);
7802 x_msg_data := l_data;
7803 raise API_ERROR;
7804 end if;
7805
7806 if p_outline_level(i) is null then
7807 exit;
7808 end if;
7809
7810 l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
7811 -- Added for FP_M changes. Tracking Bug 3305199 : Bhumesh
7812 /*
7813 IF l_Share_Code IN ('SHARE_FULL', 'SHARE_PARTIAL') then
7814 If P_Structure_Type = 'FINANCIAL' THEN
7815 l_Financial_Flag := 'N';
7816 Else
7817 l_Financial_Flag := 'Y';
7818 End If;
7819
7820 If P_Structure_Type = 'WORKPLAN' THEN
7821 IF l_Share_Code = 'SHARE_PARTIAL' then
7822 l_Financial_Flag := 'N';
7823 Else
7824 l_Financial_Flag := 'Y';
7825 End If;
7826 End If;
7827 End IF;
7828 */
7829 IF l_shared = 'Y'
7830 THEN
7831 If P_Structure_Type = 'WORKPLAN' AND
7832 l_Share_Code = 'SHARE_PARTIAL' then
7833 l_Financial_Flag := 'N';
7834 Else
7835 l_Financial_Flag := 'Y';
7836 End If;
7837
7838 ELSE
7839 If P_Structure_Type = 'WORKPLAN' THEN
7840 l_Financial_Flag := 'N';
7841 Else
7842 l_Financial_Flag := 'Y';
7843 End If;
7844 End IF;
7845 -- End of FP_M changes
7846
7847 --bug 3125370: add condition for reference object_type
7848 if (instr(to_char(p_outline_level(i)), '.') <> 0) OR
7849 (l_ref_obj_type = 'PA_STRUCTURES' and p_outline_level(i) = 0) then
7850 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7851 ,p_msg_name => 'PA_PS_OUTLINE_LEVEL_INVALID');
7852
7853 x_msg_count := 1;
7854 pa_interface_utils_pub.get_messages
7855 (p_encoded => FND_API.G_TRUE,
7856 p_msg_index => 1,
7857 p_msg_count => l_msg_count,
7858 p_msg_data => l_msg_data,
7859 p_data => l_data,
7860 p_msg_index_out => l_msg_index_out);
7861 x_msg_data := l_data;
7862 raise API_ERROR;
7863 end if;
7864
7865 l_outline_level := p_outline_level(i);
7866
7867 if l_prev_outline_level is not null then
7868 if l_outline_level > l_prev_outline_level then
7869 if (l_outline_level - l_prev_outline_level) > 1 then
7870 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7871 ,p_msg_name => 'PA_PS_OUTLINE_LEVEL_INVALID');
7872
7873 x_msg_count := 1;
7874 pa_interface_utils_pub.get_messages
7875 (p_encoded => FND_API.G_TRUE,
7876 p_msg_index => 1,
7877 p_msg_count => l_msg_count,
7878 p_msg_data => l_msg_data,
7879 p_data => l_data,
7880 p_msg_index_out => l_msg_index_out);
7881 x_msg_data := l_data;
7882 raise API_ERROR;
7883 end if;
7884
7885 l_ref_task_ver_id := l_outline_task_ref(l_prev_outline_level);
7886 l_peer_or_sub := 'SUB';
7887 else
7888 l_ref_task_ver_id := l_outline_task_ref(l_outline_level);
7889 l_peer_or_sub := 'PEER';
7890 end if;
7891 else
7892 -- First task to insert
7893 if l_outline_level not in (0, 1) then
7894 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7895 ,p_msg_name => 'PA_PS_OUTLINE_LEVEL_INVALID');
7896
7897 x_msg_count := 1;
7898 pa_interface_utils_pub.get_messages
7899 (p_encoded => FND_API.G_TRUE,
7900 p_msg_index => 1,
7901 p_msg_count => l_msg_count,
7902 p_msg_data => l_msg_data,
7903 p_data => l_data,
7904 p_msg_index_out => l_msg_index_out);
7905 x_msg_data := l_data;
7906 raise API_ERROR;
7907 end if;
7908
7909 l_ref_task_ver_id := l_outline_task_ref(0);
7910 if l_outline_level = 0 then
7911 l_peer_or_sub := 'PEER';
7912 else
7913 l_peer_or_sub := 'SUB';
7914 end if;
7915 end if;
7916
7917 --my_error_msg( 'before PA_TASK_PUB1.CREATE_TASK' );
7918
7919 OPEN cur_ref_proj_elem_id( l_ref_task_ver_id );
7920 FETCH cur_ref_proj_elem_id INTO l_ref_proj_eleme_id; --For ref task id
7921 CLOSE cur_ref_proj_elem_id;
7922
7923 --my_error_msg( 'Ref Task Id in CREATE_TASKS'||l_ref_proj_eleme_id );
7924
7925 --hsiu added for task status
7926 --check if ok to create subtask
7927
7928 /* --commented; validation done in private api
7929
7930 IF (l_peer_or_sub = 'PEER') THEN
7931 OPEN get_parent_version_id(l_ref_task_ver_id);
7932 FETCH get_parent_version_id into l_parent_ver_id;
7933 CLOSE get_parent_version_id;
7934 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7935 p_parent_task_ver_id => l_parent_ver_id
7936 ,x_return_status => l_return_status
7937 ,x_error_message_code => l_error_msg_code
7938 );
7939
7940 IF (l_return_status <> 'Y') THEN
7941 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7942 p_msg_name => l_error_msg_code);
7943 raise API_ERROR;
7944 END IF;
7945 ELSE
7946 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7947 p_parent_task_ver_id => l_ref_task_ver_id
7948 ,x_return_status => l_return_status
7949 ,x_error_message_code => l_error_msg_code
7950 );
7951
7952 IF (l_return_status <> 'Y') THEN
7953 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7954 p_msg_name => l_error_msg_code);
7955 raise API_ERROR;
7956 END IF;
7957 END IF;
7958 */
7959 --end task status changes
7960
7961 -- CREATE_TASK
7962 l_task_id := NULL;
7963
7964 --3035902: process update flag changes
7965 IF (l_wp_process_flag = 'N') THEN
7966 --may need to update process flag
7967 IF ((l_shared = 'N') AND
7968 (l_wp_type = 'Y')) THEN
7969 --split and workplan; only update if progressable task added
7970 l_wp_process_flag := 'Y';
7971 ELSIF ((l_shared = 'N') AND
7972 (l_wp_type = 'N')) THEN
7973 --split and financial; update
7974 l_wp_process_flag := 'Y';
7975 ELSIF (l_shared = 'Y') THEN
7976 l_wp_process_flag := 'Y';
7977 END IF;
7978 END IF;
7979 --3035902: end process update flag changes
7980
7981 PA_TASK_PUB1.CREATE_TASK
7982 ( p_validate_only => FND_API.G_FALSE
7983 ,p_object_type => 'PA_TASKS'
7984 ,p_project_id => p_project_id
7985 ,p_ref_task_id => l_ref_proj_eleme_id
7986 ,p_peer_or_sub => l_peer_or_sub
7987 ,p_structure_id => p_structure_id
7988 ,p_structure_version_id => p_structure_version_id
7989 ,p_task_number => p_task_number(i)
7990 ,p_task_name => p_task_name(i)
7991 ,p_task_manager_id => p_task_manager_id(i)
7992 ,p_task_manager_name => p_task_manager_name(i)
7993 ,p_scheduled_start_date => p_scheduled_start_date(i)--Changed in BUG fix 3927343
7994 ,p_scheduled_finish_date => p_scheduled_finish_date(i)--Changed in BUG fix 3927343
7995 ,p_TYPE_ID => p_TYPE_ID (i)
7996 ,p_structure_type => p_structure_type
7997 ,x_task_id => l_task_id
7998 ,x_return_status => l_return_status
7999 ,x_msg_count => l_msg_count
8000 ,x_msg_data => l_msg_data);
8001
8002 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8003 x_msg_count := FND_MSG_PUB.count_msg;
8004 if x_msg_count = 1 then
8005 pa_interface_utils_pub.get_messages
8006 (p_encoded => FND_API.G_TRUE,
8007 p_msg_index => 1,
8008 p_msg_count => l_msg_count,
8009 p_msg_data => l_msg_data,
8010 p_data => l_data,
8011 p_msg_index_out => l_msg_index_out);
8012 x_msg_data := l_data;
8013 end if;
8014 raise API_ERROR;
8015 end if;
8016
8017 --my_error_msg( 'before PA_TASK_PUB1.CREATE_TASK_VERSION' );
8018
8019 /* commented out because flag value is set before create task
8020 --bug 3010538
8021 IF (l_shared = 'N') AND
8022 (l_wp_type = 'Y') AND
8023 (l_weighting_basis_Code = 'MANUAL') THEN
8024 --do not set the flag to 'Y'
8025 NULL;
8026 ELSE
8027 */
8028 --3035902: process update flag changes
8029 --set the flag if flag is Y; otherwise keep current value
8030 --Bug No 3450684 SMukka Commented if condition
8031 --IF l_wp_process_flag = 'Y' THEN
8032 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
8033 (
8034 p_calling_context => 'SELF_SERVICE'
8035 ,p_project_id => p_project_id
8036 ,p_structure_version_id => p_structure_version_id
8037 ,p_update_wbs_flag => l_wp_process_flag
8038 ,x_return_status => l_return_status
8039 ,x_msg_count => l_msg_count
8040 ,x_msg_data => l_msg_data);
8041
8042 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8043 x_msg_count := FND_MSG_PUB.count_msg;
8044 if x_msg_count = 1 then
8045 pa_interface_utils_pub.get_messages
8046 (p_encoded => FND_API.G_TRUE,
8047 p_msg_index => 1,
8048 p_msg_count => l_msg_count,
8049 p_msg_data => l_msg_data,
8050 p_data => l_data,
8051 p_msg_index_out => l_msg_index_out);
8052 x_msg_data := l_data;
8053 end if;
8054 raise FND_API.G_EXC_ERROR;
8055 end if;
8056 --END IF;
8057 --3035902: end process update flag changes
8058
8059 --ideally the following calls should have been cached. but due to time constraints
8060 --we need to write the code this way in multiple places.
8061 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
8062 THEN
8063 IF ( l_versioned = 'N' ) OR
8064 ( l_shared = 'N' ) OR --This wont happen bcoz for adding tasks to a financial structure we dont use this api
8065 ( l_versioned = 'Y' AND l_shared = 'Y' AND l_published_ver_exists = 'N' )THEN
8066 --create_tasks
8067 pa_fp_refresh_elements_pub.set_process_flag_proj(
8068 p_project_id => p_project_id
8069 ,p_request_id => null
8070 ,p_process_code => null
8071 ,p_refresh_required_flag => 'Y'
8072 ,x_return_status => l_return_status
8073 ,x_msg_count => l_msg_count
8074 ,x_msg_data => l_msg_data );
8075
8076 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8077 x_msg_count := FND_MSG_PUB.count_msg;
8078 if x_msg_count = 1 then
8079 pa_interface_utils_pub.get_messages
8080 (p_encoded => FND_API.G_TRUE,
8081 p_msg_index => 1,
8082 p_msg_count => l_msg_count,
8083 p_msg_data => l_msg_data,
8084 p_data => l_data,
8085 p_msg_index_out => l_msg_index_out);
8086 x_msg_data := l_data;
8087 end if;
8088 raise FND_API.G_EXC_ERROR;
8089 end if;
8090 END IF;
8091 END IF;
8092
8093
8094 --End bug 3010538
8095
8096 --hsiu: task version status changes
8097 IF (l_template_flag = 'N') THEN
8098 --check if structure is shared
8099 -- if shared, check if versioned
8100 -- 'WORKING' if versioned; 'PUBLISHED' if not
8101 -- if split, check if 'FINANCIAL'
8102 -- 'PUBLISHED' if financial
8103 -- check if versioned
8104 -- 'WORKING' if versioend; 'PUBLISHED' if not
8105 -- IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id)) THEN
8106 -- IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN --Replaced these line with the following for performance.
8107 --Code added for bug 3010538 also does the same check.
8108 IF ('Y' = l_shared) THEN
8109 IF ('Y' = l_versioned) THEN
8110
8111 l_task_unpub_ver_status_code := 'WORKING';
8112 ELSE
8113 l_task_unpub_ver_status_code := 'PUBLISHED';
8114 END IF;
8115 ELSE --split
8116 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(p_structure_id, 'FINANCIAL') AND
8117 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(p_structure_id, 'WORKPLAN')) THEN
8118 l_task_unpub_ver_status_code := 'PUBLISHED';
8119 ELSE --workplan only
8120 --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.
8121 IF ('Y' = l_versioned) THEN
8122 l_task_unpub_ver_status_code := 'WORKING';
8123 ELSE
8124 l_task_unpub_ver_status_code := 'PUBLISHED';
8125 END IF;
8126 END IF;
8127 END IF;
8128 ELSE
8129 l_task_unpub_ver_status_code := 'WORKING';
8130 END IF;
8131 --end task version status changes
8132
8133
8134 --CREATE_TASK_VERSION
8135 PA_TASK_PUB1.CREATE_TASK_VERSION
8136 ( p_validate_only => FND_API.G_FALSE
8137 ,p_ref_task_version_id => l_ref_task_ver_id
8138 ,p_peer_or_sub => l_peer_or_sub
8139 ,p_task_id => l_task_id
8140 ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
8141 ,p_financial_task_flag => l_Financial_Flag
8142 ,x_task_version_id => l_task_version_id
8143 ,x_return_status => l_return_status
8144 ,x_msg_count => l_msg_count
8145 ,x_msg_data => l_msg_data);
8146
8147 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8148 x_msg_count := FND_MSG_PUB.count_msg;
8149 if x_msg_count = 1 then
8150 pa_interface_utils_pub.get_messages
8151 (p_encoded => FND_API.G_TRUE,
8152 p_msg_index => 1,
8153 p_msg_count => l_msg_count,
8154 p_msg_data => l_msg_data,
8155 p_data => l_data,
8156 p_msg_index_out => l_msg_index_out);
8157 x_msg_data := l_data;
8158 end if;
8159 raise API_ERROR;
8160 end if;
8161
8162
8163 --Hsiu added
8164 --inherit task type
8165 PA_TASK_PVT1.Inherit_task_type_attr(
8166 p_task_id => l_task_id
8167 ,p_task_version_id => l_task_version_id
8168 ,x_return_status => l_return_status
8169 ,x_msg_count => l_msg_count
8170 ,x_msg_data => l_msg_data
8171 );
8172
8173 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8174 x_msg_count := FND_MSG_PUB.count_msg;
8175 if x_msg_count = 1 then
8176 pa_interface_utils_pub.get_messages
8177 (p_encoded => FND_API.G_TRUE,
8178 p_msg_index => 1,
8179 p_msg_count => l_msg_count,
8180 p_msg_data => l_msg_data,
8181 p_data => l_data,
8182 p_msg_index_out => l_msg_index_out);
8183 x_msg_data := l_data;
8184 end if;
8185 raise API_ERROR;
8186 end if;
8187 --end inherit task type
8188
8189 --my_error_msg( 'before PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION' );
8190
8191 if PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
8192 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
8193 ( p_validate_only => FND_API.G_FALSE
8194 ,p_element_version_id => l_task_version_id
8195 ,p_scheduled_start_date => nvl(p_scheduled_start_date(i), sysdate)
8196 ,p_scheduled_end_date => nvl(p_scheduled_finish_date(i),nvl(p_scheduled_start_date(i), sysdate))
8197 ,p_planned_effort => p_planned_effort(i)
8198 ,p_Planned_Equip_Effort => p_planned_equip_effort(i)
8199 ,x_pev_schedule_id => l_pev_schedule_id
8200 ,x_return_status => l_return_status
8201 ,x_msg_count => l_msg_count
8202 ,x_msg_data => l_msg_data );
8203
8204 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8205 x_msg_count := FND_MSG_PUB.count_msg;
8206 if x_msg_count = 1 then
8207 pa_interface_utils_pub.get_messages
8208 (p_encoded => FND_API.G_TRUE,
8209 p_msg_index => 1,
8210 p_msg_count => l_msg_count,
8211 p_msg_data => l_msg_data,
8212 p_data => l_data,
8213 p_msg_index_out => l_msg_index_out);
8214 x_msg_data := l_data;
8215 end if;
8216 raise API_ERROR;
8217 end if;
8218
8219 -- Hsiu added for date rollup; workplan only
8220 l_tasks_ver_ids.extend;
8221 l_tasks_ver_ids(l_tasks_ver_ids.count) := l_task_version_id;
8222
8223 end if;
8224
8225
8226 -- anlee task weighting
8227 if l_outline_level = 1 then
8228 l_top_sub_count := l_top_sub_count + 1;
8229 end if;
8230 -- anlee End of changes
8231
8232 l_outline_task_ref(l_outline_level) := l_task_version_id;
8233 l_prev_outline_level := l_outline_level;
8234 end LOOP;
8235
8236
8237 --bug 3301192 call the budgets apis
8238 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. */
8239 PA_TASK_PUB1.call_add_planning_txns(
8240 p_tasks_ver_ids => l_tasks_ver_ids,
8241 p_planned_effort => p_planned_effort,
8242 p_project_id => p_project_id,
8243 p_structure_version_id => p_structure_version_id,
8244 p_start_date => p_scheduled_start_date,
8245 p_end_date => p_scheduled_finish_date,
8246 x_return_status => l_return_status,
8247 x_msg_count => l_msg_count,
8248 x_msg_data => l_msg_data
8249 );
8250
8251 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8252 x_msg_count := FND_MSG_PUB.count_msg;
8253 if x_msg_count = 1 then
8254 pa_interface_utils_pub.get_messages
8255 (p_encoded => FND_API.G_TRUE,
8256 p_msg_index => 1,
8257 p_msg_count => l_msg_count,
8258 p_msg_data => l_msg_data,
8259 p_data => l_data,
8260 p_msg_index_out => l_msg_index_out);
8261 x_msg_data := l_data;
8262 end if;
8263 raise API_ERROR;
8264 end if;
8265
8266 --now call call delete planning for reference task version id.
8267 IF (p_ref_task_version_id <> p_structure_version_id) AND
8268 (p_outline_level(1) > 0)
8269 THEN
8270 l_task_ver_ids.extend(1); /* Venky */
8271 l_task_ver_ids(1) := p_ref_task_version_id;
8272 /*Smukka Bug No. 3474141 Date 03/01/2004 */
8273 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
8274 DECLARE
8275 --p1 bug 3888432
8276 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8277 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
8278 SELECT resource_assignment_id
8279 FROM pa_resource_assignments
8280 WHERE wbs_element_Version_id = c_task_ver_id
8281 AND ta_display_flag = 'N';
8282 l_assign_id NUMBER := NULL;
8283 BEGIN
8284 OPEN get_assignment_id(p_ref_task_version_id);
8285 FETCH get_assignment_id into l_assign_id;
8286 CLOSE get_assignment_id;
8287
8288 IF (l_assign_id IS NOT NULL) THEN
8289 l_assign_ids.extend(1);
8290 l_assign_ids(1) := l_assign_id;
8291 pa_fp_planning_transaction_pub.delete_planning_transactions
8292 (
8293 p_context => 'WORKPLAN'
8294 ,p_task_or_res => 'ASSIGNMENT'
8295 --,p_element_version_id_tbl => l_task_ver_ids
8296 ,p_resource_assignment_tbl => l_assign_ids
8297 ,x_return_status => l_return_status
8298 ,x_msg_count => l_msg_count
8299 ,x_msg_data => l_msg_data
8300 );
8301 END IF;
8302 EXCEPTION
8303 WHEN OTHERS THEN
8304 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_STRUCTURE_TASK_PUB',
8305 p_procedure_name => 'CREATE_TASKS',
8306 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
8307 RAISE API_ERROR;
8308 END;
8309 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8310 x_msg_count := FND_MSG_PUB.count_msg;
8311 if x_msg_count = 1 then
8312 pa_interface_utils_pub.get_messages
8313 (p_encoded => FND_API.G_TRUE,
8314 p_msg_index => 1,
8315 p_msg_count => l_msg_count,
8316 p_msg_data => l_msg_data,
8317 p_data => l_data,
8318 p_msg_index_out => l_msg_index_out);
8319 x_msg_data := l_data;
8320 end if;
8321 raise API_ERROR;
8322 end if;
8323 END IF; --<<p_ref_task_version_id<>p_structure_version_id)
8324
8325 end if;
8326
8327 --bug 3301192 call the budgets apis
8328
8329 --Hsiu added for date rollup; workplan only
8330
8331 if PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
8332 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
8333 p_commit => FND_API.G_FALSE,
8334 p_element_versions => l_tasks_ver_ids,
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 API_ERROR;
8352 end if;
8353
8354 -- IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id) = 'Y') AND
8355 -- (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.
8356 IF (l_shared = 'Y') AND
8357 (l_versioned = 'N')
8358 THEN
8359
8360 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
8361 p_structure_version_id => p_structure_version_id
8362 ,x_return_status => l_return_status
8363 ,x_msg_count => l_msg_count
8364 ,x_msg_data => l_msg_data
8365 );
8366
8367 IF (l_return_status <> 'S') THEN
8368 x_msg_count := l_msg_count;
8369 x_msg_data := l_msg_data;
8370 RAISE API_ERROR;
8371 END IF;
8372 END IF;
8373
8374 -- anlee task weighting
8375 PA_TASK_PUB1.Calc_Task_Weights(
8376 p_element_versions => l_tasks_ver_ids
8377 ,p_outline_level => p_outline_level
8378 ,p_top_sub_count => l_top_sub_count
8379 ,x_return_status => l_return_status
8380 ,x_msg_count => l_msg_count
8381 ,x_msg_data => l_msg_data );
8382
8383 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8384 x_msg_count := FND_MSG_PUB.count_msg;
8385 if x_msg_count = 1 then
8386 pa_interface_utils_pub.get_messages
8387 (p_encoded => FND_API.G_TRUE,
8388 p_msg_index => 1,
8389 p_msg_count => l_msg_count,
8390 p_msg_data => l_msg_data,
8391 p_data => l_data,
8392 p_msg_index_out => l_msg_index_out);
8393 x_msg_data := l_data;
8394 end if;
8395 raise API_ERROR;
8396 end if;
8397 -- anlee end of changes
8398
8399 END IF;
8400
8401 x_return_status := FND_API.G_RET_STS_SUCCESS;
8402 EXCEPTION
8403 WHEN API_ERROR THEN
8404 rollback to create_tasks;
8405 x_return_status := FND_API.G_RET_STS_ERROR;
8406 WHEN OTHERS THEN
8407 rollback to create_tasks;
8408 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8409 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_STRUCTURE_TASK_PUB',
8410 p_procedure_name => 'CREATE_TASKS',
8411 p_error_text => SUBSTRB(SQLERRM,1,240));
8412 raise;
8413 END CREATE_TASKS;
8414
8415
8416 -- anlee task weighting
8417 -- API name : Calc_Task_Weights
8418 -- Type : Utility
8419 -- Pre-reqs : None
8420 -- Return Value : N/A
8421 -- Prameters
8422 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
8423 -- p_element_versions IN PA_NUM_1000_NUM
8424 -- p_outline_level IN PA_NUM_1000_NUM
8425 -- p_top_peer_count IN NUMBER
8426 -- p_top_sub_count IN NUMBER
8427 -- x_msg_count OUT NUMBER
8428 -- x_msg_data OUT VARCHAR2
8429 -- x_return_status OUT VARCHAR2
8430 --
8431 -- History
8432 --
8433 -- 17-SEP-02 Andrew Lee -Created
8434 --
8435 --
8436
8437 PROCEDURE CALC_TASK_WEIGHTS
8438 ( p_element_versions IN PA_NUM_1000_NUM
8439 ,p_outline_level IN PA_NUM_1000_NUM
8440 ,p_top_sub_count IN NUMBER
8441 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8442 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8443 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
8444 IS
8445 CURSOR get_child_count(c_parent_element_version_id NUMBER)
8446 IS
8447 SELECT count(object_id_to1)
8448 FROM PA_OBJECT_RELATIONSHIPS
8449 WHERE object_id_from1 = c_parent_element_version_id
8450 AND object_type_to = 'PA_TASKS'
8451 AND relationship_type = 'S'
8452 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
8453
8454 CURSOR get_summed_duration(c_parent_element_version_id NUMBER)
8455 IS
8456 SELECT sum(ppevs.duration)
8457 FROM pa_proj_elem_ver_schedule ppevs,
8458 pa_object_relationships por,
8459 pa_proj_element_versions ppev,
8460 pa_proj_elements ppe,
8461 pa_task_types ptt
8462 WHERE por.object_id_from1 = c_parent_element_version_id
8463 AND por.object_type_to = 'PA_TASKS'
8464 AND por.relationship_type = 'S'
8465 AND por.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8466 AND por.object_id_to1 = ppevs.element_version_id
8467 AND por.object_id_to1 = ppev.element_version_id
8468 AND ppev.proj_element_id = ppe.proj_element_id
8469 AND ppe.project_id = ppevs.project_id /* for bug 2822963 */
8470 AND ppe.TYPE_ID = ptt.task_type_id
8471 AND ptt.object_type = 'PA_TASKS' /* for bug 3279978 FP M Enhancement */
8472 AND ptt.prog_entry_enable_flag = 'Y';
8473
8474 CURSOR get_task_duration(c_element_version_id NUMBER,c_project_id NUMBER)
8475 IS
8476 SELECT duration
8477 FROM pa_proj_elem_ver_schedule
8478 WHERE element_version_id = c_element_version_id
8479 AND project_id = c_project_id; /* for bug 2822963 */
8480
8481 CURSOR get_parent(c_element_version_id NUMBER)
8482 IS
8483 SELECT object_id_from1
8484 FROM pa_object_relationships
8485 WHERE object_id_to1 = c_element_version_id
8486 AND object_type_to = 'PA_TASKS'
8487 AND relationship_type = 'S'
8488 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
8489
8490 CURSOR check_progress_allowed(c_element_version_id NUMBER)
8491 IS
8492 SELECT ptt.prog_entry_enable_flag, ppe.project_id /* for bug 2822963 */
8493 FROM pa_task_types ptt,
8494 pa_proj_element_versions ppev,
8495 pa_proj_elements ppe
8496 WHERE ppev.element_version_id = c_element_version_id
8497 AND ppev.proj_element_id = ppe.proj_element_id
8498 AND ptt.object_type = 'PA_TASKS' /* for bug 3279978 FP M Enhancement */
8499 AND ppe.TYPE_ID = ptt.task_type_id;
8500
8501 CURSOR get_existing_weights(c_parent_element_version_id NUMBER)
8502 IS
8503 SELECT sum(weighting_percentage)
8504 FROM PA_OBJECT_RELATIONSHIPS
8505 WHERE object_id_from1 = c_parent_element_version_id
8506 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8507 AND object_type_to = 'PA_TASKS'
8508 AND relationship_type = 'S';
8509
8510 -- Bug 3098574. This cursor gives the number of progressible tasks
8511 -- under a parent. This count will be used to pro-rate the task weightage
8512 -- on all the child tasks equally.
8513 CURSOR get_progressible_child_count(c_parent_element_version_id NUMBER)
8514 IS
8515 SELECT count(rel.object_id_to1)
8516 FROM PA_OBJECT_RELATIONSHIPS rel,pa_proj_element_versions ver,pa_proj_elements ele,pa_task_types tt
8517 WHERE rel.object_id_from1 = c_parent_element_version_id
8518 AND rel.object_type_to = 'PA_TASKS'
8519 AND rel.relationship_type = 'S'
8520 AND rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8521 AND rel.object_id_to1 = ver.element_version_id
8522 AND ver.proj_element_id = ele.proj_element_id
8523 AND ele.type_id = tt.task_type_id
8524 AND tt.object_type = 'PA_TASKS' /* for bug 3279978 FP M Enhancement */
8525 AND tt.prog_entry_enable_flag = 'Y';
8526
8527 l_progressible_child_count NUMBER; -- Bug 3098574.
8528
8529 -- Bug 3098574. This table will store the number of progressible tasks
8530 -- under a parent. This is used in order to cache the data.
8531 TYPE prog_child_count IS TABLE OF NUMBER
8532 INDEX BY BINARY_INTEGER;
8533 l_prog_child_count prog_child_count;
8534
8535 TYPE durations IS TABLE OF NUMBER
8536 INDEX BY BINARY_INTEGER;
8537
8538 -- This table stores the summed duration for all of the child tasks of a parent task/structure. The
8539 -- index is the parent element version id.
8540 l_durations durations;
8541 l_is_sub_new VARCHAR2(1);
8542 l_outline_level NUMBER;
8543 l_parent_element_version_id NUMBER;
8544 l_element_version_id NUMBER;
8545 l_total_sub_count NUMBER;
8546 l_total_duration NUMBER;
8547 l_progress_allowed VARCHAR2(1);
8548 l_task_duration NUMBER;
8549 -- l_task_weight PA_OBJECT_RELATIONSHIPS.weighting_percentage%TYPE;
8550 l_task_weight NUMBER;
8551 l_existing_weight NUMBER;
8552 l_remaining_weight NUMBER;
8553 l_project_id NUMBER;
8554
8555 --Start Changes for bug 3083950
8556 l_debug_mode VARCHAR2(1);
8557 l_module_name VARCHAR2(100) := 'pa.plsql.PA_TASK_PUB1';
8558 l_temp_number NUMBER(17,2);
8559 l_diff_number NUMBER;
8560 l_sum_temp_number NUMBER(17,4);
8561 l_constant_temp_number NUMBER(17,4) := 0.0100;
8562
8563 l_debug_level2 CONSTANT NUMBER := 2;
8564 l_debug_level3 CONSTANT NUMBER := 3;
8565 l_debug_level4 CONSTANT NUMBER := 4;
8566 l_debug_level5 CONSTANT NUMBER := 5;
8567 l_debug_level6 CONSTANT NUMBER := 6;
8568
8569
8570 TYPE task_weightage_tbl IS TABLE OF NUMBER
8571 INDEX BY BINARY_INTEGER;
8572
8573
8574 l_task_weightage_tbl task_weightage_tbl;
8575 --End Changes for bug 3083950
8576
8577 BEGIN
8578
8579 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8580
8581 IF l_debug_mode = 'Y' THEN
8582 pa_debug.g_err_stage:= 'Entering CALC_TASK_WEIGHTS';
8583 pa_debug.write(l_module_name,pa_debug.g_err_stage,
8584 l_debug_level2);
8585
8586
8587 pa_debug.set_curr_function( p_function => 'PA_TASK_PUB1.CALC_TASK_WEIGHTS',
8588 p_debug_mode => l_debug_mode );
8589
8590 END IF;
8591
8592
8593 l_is_sub_new := NULL;
8594
8595 -- Loop through all of the newly created tasks from create_tasks
8596 for i in 1..1000 LOOP
8597 if p_outline_level(i) is null then
8598 exit;
8599 end if;
8600
8601 OPEN get_parent(p_element_versions(i));
8602 FETCH get_parent INTO l_parent_element_version_id;
8603 CLOSE get_parent;
8604
8605 l_element_version_id := p_element_versions(i);
8606 l_outline_level := p_outline_level(i);
8607
8608 if l_outline_level = 0 then
8609 -- Automatically update task weighting as zero
8610 UPDATE PA_OBJECT_RELATIONSHIPS
8611 SET weighting_percentage = 0
8612 WHERE object_id_from1 = l_parent_element_version_id
8613 AND object_id_to1 = l_element_version_id
8614 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8615 AND object_type_to = 'PA_TASKS'
8616 AND relationship_type = 'S';
8617 elsif l_outline_level = 1 then
8618 if l_is_sub_new is NULL then
8619 -- Determine whether there we any existing tasks for this level before
8620 -- create_tasks was called
8621 OPEN get_child_count(l_parent_element_version_id);
8622 FETCH get_child_count INTO l_total_sub_count;
8623 CLOSE get_child_count;
8624
8625 if l_total_sub_count > p_top_sub_count then
8626 l_is_sub_new := 'N';
8627 else
8628 l_is_sub_new := 'Y';
8629 end if;
8630 end if;
8631
8632 if l_is_sub_new = 'N' then
8633 -- There were existing tasks at this level, populate
8634 -- task weights of new tasks to 0
8635 UPDATE PA_OBJECT_RELATIONSHIPS
8636 SET weighting_percentage = 0
8637 WHERE object_id_from1 = l_parent_element_version_id
8638 AND object_id_to1 = l_element_version_id
8639 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8640 AND object_type_to = 'PA_TASKS'
8641 AND relationship_type = 'S';
8642 else
8643 -- There were no existing tasks at this level, populate
8644 -- the correct task weight
8645 OPEN check_progress_allowed(l_element_version_id);
8646 FETCH check_progress_allowed INTO l_progress_allowed,l_project_id; /* for bug 2822963 */
8647 CLOSE check_progress_allowed;
8648
8649 if l_progress_allowed = 'N' then
8650 -- Populate task weight as zero
8651 UPDATE PA_OBJECT_RELATIONSHIPS
8652 SET weighting_percentage = 0
8653 WHERE object_id_from1 = l_parent_element_version_id
8654 AND object_id_to1 = l_element_version_id
8655 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8656 AND object_type_to = 'PA_TASKS'
8657 AND relationship_type = 'S';
8658 else
8659
8660 if l_durations.exists(l_parent_element_version_id) then
8661 NULL;
8662 else
8663 OPEN get_summed_duration(l_parent_element_version_id);
8664 FETCH get_summed_duration INTO l_total_duration;
8665 CLOSE get_summed_duration;
8666
8667 l_durations(l_parent_element_version_id) := l_total_duration;
8668 end if;
8669
8670 OPEN get_task_duration(l_element_version_id,l_project_id); /* for bug 2822963 */
8671 FETCH get_task_duration INTO l_task_duration;
8672 CLOSE get_task_duration;
8673
8674 -- Bug 3098574. When the summed duration of the child tasks
8675 -- of a parent is 0, get the number of child tasks and calculate
8676 -- the weighatage as 1 / number of tasks * 100.
8677 /* IF (l_durations(l_parent_element_version_id) IS NULL) OR
8678 (l_durations(l_parent_element_version_id) = 0) THEN
8679 l_task_weight := 0;
8680 ELSE*/
8681
8682 IF (l_durations(l_parent_element_version_id) IS NULL) OR
8683 (l_durations(l_parent_element_version_id) = 0) THEN
8684 IF l_prog_child_count.exists(l_parent_element_version_id) THEN
8685 l_progressible_child_count := l_prog_child_count(l_parent_element_version_id);
8686 ELSE
8687 OPEN get_progressible_child_count(l_parent_element_version_id);
8688 FETCH get_progressible_child_count into l_progressible_child_count;
8689 CLOSE get_progressible_child_count;
8690 l_prog_child_count(l_parent_element_version_id) := l_progressible_child_count;
8691 END IF;
8692
8693 IF l_progressible_child_count <> 0 THEN
8694 l_task_weight := ( 1 / l_progressible_child_count ) * 100;
8695 ELSE -- This should never occur.
8696 l_task_weight := 0;
8697 END IF;
8698 ELSE
8699 l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
8700 END IF;
8701
8702 OPEN get_existing_weights(l_parent_element_version_id);
8703 FETCH get_existing_weights INTO l_existing_weight;
8704 CLOSE get_existing_weights;
8705
8706 l_remaining_weight := 100 - l_existing_weight;
8707 -- l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100; Bug 3098574.
8708
8709 --Start Changes for bug 3083950
8710 -- The Bug is that the final sum of wieghting percentage of all childs of a task does not summ to 100
8711 -- Is caused as while dtoring in the database the weighting % is rounding upto 2nd decimal
8712 -- Strategy here is to store the difference of weighting % we lose or gain while truncating to 2nd decimal
8713 -- against the parent task id in local table for all its child task and as the sum of difference goes above -0.01
8714 -- or below -0.01 just increase or decrease the task weightage of the child task being processed by 0.01
8715 -- 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
8716 IF l_debug_mode = 'Y' THEN
8717 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
8718 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8719 END IF;
8720
8721 l_temp_number := l_task_weight;
8722
8723 IF l_debug_mode = 'Y' THEN
8724 pa_debug.g_err_stage:= 'Value of l_temp_number' || l_temp_number;
8725 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8726 END IF;
8727
8728 l_diff_number := l_task_weight - l_temp_number;
8729
8730 IF l_debug_mode = 'Y' THEN
8731 pa_debug.g_err_stage:= 'Value of l_diff_number' || l_diff_number;
8732 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8733 END IF;
8734
8735 IF(l_diff_number <> 0) THEN
8736
8737 IF l_debug_mode = 'Y' THEN
8738 pa_debug.g_err_stage:= 'Value of l_parent_element_version_id' || l_parent_element_version_id;
8739 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8740 END IF;
8741
8742 IF l_task_weightage_tbl.exists(l_parent_element_version_id) THEN
8743 l_sum_temp_number := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
8744
8745 IF l_debug_mode = 'Y' THEN
8746 pa_debug.g_err_stage:= 'Value of l_sum_temp_number' || l_sum_temp_number;
8747 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8748
8749 pa_debug.g_err_stage:= 'Value of l_constant_temp_number' || l_constant_temp_number;
8750 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8751 END IF;
8752 IF( l_sum_temp_number >= l_constant_temp_number ) THEN
8753 l_task_weight := l_task_weight + 0.01;
8754 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number - 0.01;
8755 IF l_debug_mode = 'Y' THEN
8756 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
8757 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8758 END IF;
8759 ELSIF ( l_sum_temp_number <= -l_constant_temp_number ) THEN
8760 l_task_weight := l_task_weight - 0.01;
8761 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number + 0.01;
8762 IF l_debug_mode = 'Y' THEN
8763 pa_debug.g_err_stage:= 'In else IF Value of l_task_weight' || l_task_weight;
8764 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8765 END IF;
8766 ELSE
8767 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
8768 IF l_debug_mode = 'Y' THEN
8769 pa_debug.g_err_stage:= 'in else Value of l_task_weight' || l_task_weight;
8770 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8771 END IF;
8772 END IF;
8773 ELSE
8774 l_task_weightage_tbl(l_parent_element_version_id) := l_diff_number;
8775 END IF;
8776
8777 IF l_debug_mode = 'Y' THEN
8778 pa_debug.g_err_stage:= 'Value of task_weightage_tbl' || l_task_weightage_tbl(l_parent_element_version_id);
8779 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8780 END IF;
8781
8782 END IF;
8783
8784 --End Changes for bug 3083950
8785
8786 if(abs(l_remaining_weight - l_task_weight) <= .05) then
8787 l_task_weight := l_remaining_weight;
8788 end if;
8789
8790 --END IF; Bug 3098574.
8791 UPDATE PA_OBJECT_RELATIONSHIPS
8792 SET weighting_percentage = l_task_weight
8793 WHERE object_id_from1 = l_parent_element_version_id
8794 AND object_id_to1 = l_element_version_id
8795 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8796 AND object_type_to = 'PA_TASKS'
8797 AND relationship_type = 'S';
8798 end if;
8799 end if;
8800 else
8801 -- In this case, outline level is > 1
8802 -- There will never be pre-existing tasks on these levels
8803 OPEN check_progress_allowed(l_element_version_id);
8804 FETCH check_progress_allowed INTO l_progress_allowed,l_project_id; /* for bug 2822963 */
8805 CLOSE check_progress_allowed;
8806
8807 if l_progress_allowed = 'N' then
8808 -- Populate task weight as zero
8809 UPDATE PA_OBJECT_RELATIONSHIPS
8810 SET weighting_percentage = 0
8811 WHERE object_id_from1 = l_parent_element_version_id
8812 AND object_id_to1 = l_element_version_id
8813 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8814 AND object_type_to = 'PA_TASKS'
8815 AND relationship_type = 'S';
8816 else
8817
8818 if l_durations.exists(l_parent_element_version_id) then
8819 NULL;
8820 else
8821 OPEN get_summed_duration(l_parent_element_version_id);
8822 FETCH get_summed_duration INTO l_total_duration;
8823 CLOSE get_summed_duration;
8824
8825 l_durations(l_parent_element_version_id) := l_total_duration;
8826 end if;
8827
8828 OPEN get_task_duration(l_element_version_id,l_project_id); /* for bug 2822963 */
8829 FETCH get_task_duration INTO l_task_duration;
8830 CLOSE get_task_duration;
8831
8832 -- Bug 3098574. When the summed duration of the child tasks
8833 -- of a parent is 0, get the number of child tasks and calculate
8834 -- the weighatage as 1 / number of tasks * 100.
8835 /*IF (l_durations(l_parent_element_version_id) IS NULL) OR
8836 (l_durations(l_parent_element_version_id) = 0) THEN
8837 l_task_weight := 0;
8838 ELSE*/
8839
8840 IF (l_durations(l_parent_element_version_id) IS NULL) OR
8841 (l_durations(l_parent_element_version_id) = 0) THEN
8842 IF l_prog_child_count.exists(l_parent_element_version_id) THEN
8843 l_progressible_child_count := l_prog_child_count(l_parent_element_version_id);
8844 ELSE
8845 OPEN get_progressible_child_count(l_parent_element_version_id);
8846 FETCH get_progressible_child_count into l_progressible_child_count;
8847 CLOSE get_progressible_child_count;
8848 l_prog_child_count(l_parent_element_version_id) := l_progressible_child_count;
8849 END IF;
8850 IF l_progressible_child_count <> 0 THEN
8851 l_task_weight := ( 1 / l_progressible_child_count ) * 100;
8852 ELSE -- This should never occur.
8853 l_task_weight := 0;
8854 END IF;
8855
8856 ELSE
8857 l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
8858 END IF;
8859
8860 OPEN get_existing_weights(l_parent_element_version_id);
8861 FETCH get_existing_weights INTO l_existing_weight;
8862 CLOSE get_existing_weights;
8863
8864 l_remaining_weight := 100 - l_existing_weight;
8865 --l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100; Bug 3098574.
8866
8867 --Start Changes for bug 3083950
8868 -- The Bug is that the final sum of wieghting percentage of all childs of a task does not summ to 100
8869 -- Is caused as while dtoring in the database the weighting % is rounding upto 2nd decimal
8870 -- Strategy here is to store the difference of weighting % we lose or gain while truncating to 2nd decimal
8871 -- against the parent task id in local table for all its child task and as the sum of difference goes above -0.01
8872 -- or below -0.01 just increase or decrease the task weightage of the child task being processed by 0.01
8873 -- 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
8874
8875 IF l_debug_mode = 'Y' THEN
8876 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
8877 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8878 END IF;
8879
8880 l_temp_number := l_task_weight;
8881
8882 IF l_debug_mode = 'Y' THEN
8883 pa_debug.g_err_stage:= 'Value of l_temp_number' || l_temp_number;
8884 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8885 END IF;
8886
8887 l_diff_number := l_task_weight - l_temp_number;
8888
8889 IF l_debug_mode = 'Y' THEN
8890 pa_debug.g_err_stage:= 'Value of l_diff_number' || l_diff_number;
8891 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8892 END IF;
8893
8894 IF(l_diff_number <> 0) THEN
8895
8896 IF l_debug_mode = 'Y' THEN
8897 pa_debug.g_err_stage:= 'Value of l_parent_element_version_id' || l_parent_element_version_id;
8898 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8899 END IF;
8900
8901 IF l_task_weightage_tbl.exists(l_parent_element_version_id) THEN
8902
8903 l_sum_temp_number := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
8904
8905 IF l_debug_mode = 'Y' THEN
8906 pa_debug.g_err_stage:= 'Value of l_sum_temp_number' || l_sum_temp_number;
8907 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8908
8909 pa_debug.g_err_stage:= 'Value of l_constant_temp_number' || l_constant_temp_number;
8910 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8911 END IF;
8912
8913 IF( l_sum_temp_number >= l_constant_temp_number ) THEN
8914 l_task_weight := l_task_weight + 0.01;
8915 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number - 0.01;
8916 IF l_debug_mode = 'Y' THEN
8917 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
8918 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8919 END IF;
8920 ELSIF ( l_sum_temp_number <= -l_constant_temp_number ) THEN
8921 l_task_weight := l_task_weight - 0.01;
8922 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number + 0.01;
8923 IF l_debug_mode = 'Y' THEN
8924 pa_debug.g_err_stage:= 'In else IF Value of l_task_weight' || l_task_weight;
8925 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8926 END IF;
8927 ELSE
8928 l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
8929 IF l_debug_mode = 'Y' THEN
8930 pa_debug.g_err_stage:= 'in else Value of l_task_weight' || l_task_weight;
8931 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8932 END IF;
8933 END IF;
8934 ELSE
8935 l_task_weightage_tbl(l_parent_element_version_id) := l_diff_number;
8936 END IF;
8937
8938 IF l_debug_mode = 'Y' THEN
8939 pa_debug.g_err_stage:= 'Value of task_weightage_tbl' || l_task_weightage_tbl(l_parent_element_version_id);
8940 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8941 END IF;
8942
8943 END IF;
8944 --End Changes for bug 3083950
8945
8946 if(abs(l_remaining_weight - l_task_weight) <= .05) then
8947 l_task_weight := l_remaining_weight;
8948 end if;
8949 --END IF; Bug 3098574.
8950 UPDATE PA_OBJECT_RELATIONSHIPS
8951 SET weighting_percentage = l_task_weight
8952 WHERE object_id_from1 = l_parent_element_version_id
8953 AND object_id_to1 = l_element_version_id
8954 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8955 AND object_type_to = 'PA_TASKS'
8956 AND relationship_type = 'S';
8957 end if;
8958 end if;
8959
8960 end LOOP;
8961
8962 IF l_debug_mode = 'Y' THEN
8963 pa_debug.reset_curr_function;
8964 END IF;
8965
8966 x_return_status := FND_API.G_RET_STS_SUCCESS;
8967 EXCEPTION
8968 WHEN OTHERS THEN
8969 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8970 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
8971 p_procedure_name => 'CALC_TASK_WEIGHTS',
8972 p_error_text => SUBSTRB(SQLERRM,1,240));
8973 IF l_debug_mode = 'Y' THEN
8974 pa_debug.reset_curr_function;
8975 END IF;
8976
8977 raise;
8978 END CALC_TASK_WEIGHTS;
8979
8980 -- API name : Update_Task_Weighting
8981 -- Type : Public Procedure
8982 -- Pre-reqs : None
8983 -- Return Value : N/A
8984 -- Parameters
8985 -- p_api_version IN NUMBER := 1.0
8986 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
8987 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
8988 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
8989 -- p_validation_level IN VARCHAR2 := 100
8990 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
8991 -- p_debug_mode IN VARCHAR2 := 'N'
8992 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8993 -- p_object_relationship_id IN NUMBER
8994 -- p_weighting_percentage IN NUMBER
8995 -- p_record_version_number IN NUMBER
8996 -- x_return_status OUT VARCHAR2
8997 -- x_msg_count OUT NUMBER
8998 -- x_msg_data OUT VARCHAR2
8999 --
9000 -- History
9001 --
9002 -- 20-SEP-02 hyau -Created
9003 --
9004 --
9005 procedure Update_Task_Weighting
9006 (
9007 p_api_version IN NUMBER := 1.0
9008 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
9009 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9010 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
9011 ,p_validation_level IN VARCHAR2 := 100
9012 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
9013 ,p_debug_mode IN VARCHAR2 := 'N'
9014 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9015 ,p_object_relationship_id IN NUMBER
9016 ,p_weighting_percentage IN NUMBER
9017 ,p_record_version_number IN NUMBER
9018 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9019 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9020 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9021 )
9022 IS
9023
9024 BEGIN
9025
9026 pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK_WEIGHTING');
9027
9028 IF (p_debug_mode = 'Y') THEN
9029 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_WEIGHTING begin');
9030 END IF;
9031
9032 IF (p_commit = FND_API.G_TRUE) THEN
9033 savepoint update_task_weighting;
9034 END IF;
9035
9036 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
9037 FND_MSG_PUB.initialize;
9038 END IF;
9039
9040 PA_TASK_PVT1.Update_Task_Weighting(
9041 p_object_relationship_id => p_object_relationship_id
9042 ,p_weighting_percentage => p_weighting_percentage
9043 ,p_record_version_number => p_record_version_number
9044 ,x_return_status => x_return_status
9045 ,x_msg_count => x_msg_count
9046 ,x_msg_data => x_msg_data
9047 );
9048
9049 EXCEPTION
9050 when FND_API.G_EXC_ERROR then
9051 if p_commit = FND_API.G_TRUE then
9052 rollback to update_task_weighting;
9053 end if;
9054 x_return_status := FND_API.G_RET_STS_ERROR;
9055 when FND_API.G_EXC_UNEXPECTED_ERROR then
9056 if p_commit = FND_API.G_TRUE then
9057 rollback to update_task_weighting;
9058 end if;
9059 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9060 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
9061 p_procedure_name => 'UPDATE_TASK_WEIGHTING',
9062 p_error_text => SUBSTRB(SQLERRM,1,240));
9063 when OTHERS then
9064 if p_commit = FND_API.G_TRUE then
9065 rollback to update_task_weighting;
9066 end if;
9067 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9068 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
9069 p_procedure_name => 'UPDATE_TASK_WEIGHTING',
9070 p_error_text => SUBSTRB(SQLERRM,1,240));
9071 raise;
9072
9073 END Update_Task_Weighting;
9074
9075 -- Amit : Following procedure added for Bug 2838700
9076
9077 PROCEDURE INDENT_TASK_VERSION_BULK (
9078 p_api_version IN NUMBER :=1.0,
9079 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
9080 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
9081 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
9082 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
9083 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
9084 p_debug_mode IN VARCHAR2 :='N',
9085 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9086 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9087 p_task_version_id IN NUMBER,
9088 p_project_id IN NUMBER,
9089 p_record_version_number IN NUMBER,
9090 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
9091 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
9092 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9093 ) IS
9094
9095
9096 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
9097 SELECT 'Y'
9098 FROM pa_proj_structure_types ppst
9099 ,pa_structure_types pst
9100 WHERE ppst.proj_element_id = c_structure_id
9101 AND ppst.structure_type_id = pst.structure_type_id
9102 AND pst.structure_type_class_code IN( 'FINANCIAL' );
9103
9104 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
9105 SELECT 'Y'
9106 FROM dual
9107 WHERE EXISTS(
9108 SELECT 'xyz'
9109 FROM pa_proj_elem_ver_structure
9110 WHERE proj_element_id = c_structure_id
9111 AND project_id = c_project_id
9112 AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
9113 );
9114
9115 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
9116 SELECT object_id_from1
9117 FROM pa_object_relationships
9118 WHERE object_id_to1 = c_elem_ver_id
9119 AND object_type_to = 'PA_TASKS'
9120 AND relationship_type = 'S';
9121
9122 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
9123 SELECT object_id_from1
9124 , object_relationship_id
9125 , record_version_number
9126 , relationship_subtype
9127 FROM pa_object_relationships
9128 WHERE object_id_to1 = p_child_version_id
9129 AND relationship_type = 'S';
9130
9131 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
9132
9133 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
9134 SELECT a.object_id_from1
9135 , a.weighting_percentage
9136 FROM pa_object_relationships a
9137 WHERE a.object_id_to1 = c_task_version_id
9138 AND a.object_type_to = 'PA_TASKS'
9139 AND a.relationship_type = 'S'
9140 AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
9141
9142 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
9143 SELECT '1'
9144 FROM dual
9145 WHERE EXISTS
9146 (SELECT 'xyz'
9147 FROM pa_object_relationships
9148 WHERE object_id_from1 = c_task_version_id
9149 AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
9150 AND relationship_type = 'S'
9151 );
9152
9153 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
9154 SELECT ptt.prog_entry_enable_flag
9155 FROM pa_task_types ptt
9156 , pa_proj_element_versions ppev,
9157 pa_proj_elements ppe
9158 WHERE ppev.element_version_id = c_element_version_id
9159 AND ppev.proj_element_id = ppe.proj_element_id
9160 AND ptt.object_type = 'PA_TASKS' /* for bug 3279978 FP M Enhancement */
9161 AND ppe.TYPE_ID = ptt.task_type_id;
9162
9163
9164
9165 l_api_name CONSTANT VARCHAR(30) := 'INDENT_TASK_VERSION_BULK';
9166 l_api_version CONSTANT NUMBER := 1.0;
9167 l_return_status VARCHAR2(1);
9168 l_msg_count NUMBER;
9169 l_msg_data VARCHAR2(250);
9170 l_data VARCHAR2(250);
9171 l_msg_index_out NUMBER;
9172
9173 l_peer_or_sub VARCHAR2(30);
9174 l_project_id NUMBER;
9175 l_structure_id NUMBER;
9176 l_ref_task_id NUMBER;
9177 l_task_id NUMBER;
9178 l_task_record_version_number NUMBER;
9179 l_wbs_record_version_number NUMBER;
9180 l_dummy_char VARCHAR2(1);
9181 l_published_version VARCHAR2(1);
9182 l_relationship_subtype VARCHAR2(20);
9183 l_struc_version_from NUMBER;
9184 l_task_version_from NUMBER;
9185 l_version_from NUMBER;
9186 l_versioned VARCHAR2(1) := 'N';
9187 l_shared VARCHAR2(1) := 'N';
9188
9189 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
9190 l_parent_ver_id NUMBER;
9191 l_error_msg_code VARCHAR2(30);
9192
9193 src_elem_ver_id NUMBER;
9194 src_proj_element_id NUMBER;
9195 src_wbs_number VARCHAR2(240);
9196 src_seq_number NUMBER;
9197 src_wbs_level NUMBER;
9198 src_parent_str_ver_id NUMBER;
9199 src_object_type VARCHAR2(30);
9200
9201 ref_elem_ver_id NUMBER;
9202 ref_proj_element_id NUMBER;
9203 ref_wbs_number VARCHAR2(240);
9204 ref_seq_number NUMBER;
9205 ref_wbs_level NUMBER;
9206 ref_parent_str_ver_id NUMBER;
9207 ref_object_type VARCHAR2(30);
9208
9209 l_old_parent_id NUMBER;
9210 l_dummy VARCHAR2(1);
9211
9212 l_new_weighting NUMBER(17,2);
9213 l_old_weighting NUMBER(17,2);
9214 l_progress_allowed VARCHAR2(1);
9215
9216 l_element_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
9217 l_proj_element_id_tab PA_FORECAST_GLOB.NumberTabTyp;
9218 l_object_type_tab PA_FORECAST_GLOB.VCTabTyp;
9219 l_project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
9220 l_parent_str_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
9221 l_display_sequence_tab PA_FORECAST_GLOB.NumberTabTyp;
9222 l_wbs_level_tab PA_FORECAST_GLOB.NumberTabTyp;
9223 l_wbs_number_tab PA_FORECAST_GLOB.VCTabTyp;
9224 l_record_version_tab PA_FORECAST_GLOB.NumberTabTyp;
9225 l_changed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
9226
9227 l_wbs_number VARCHAR2(1000);
9228 src_branch_mask VARCHAR2(1000);
9229 ref_branch_mask VARCHAR2(1000);
9230 l_str1 VARCHAR2(1000);
9231 l_str2 VARCHAR2(1000);
9232 l_number NUMBER;
9233 l_new_wbs_number VARCHAR2(1000);
9234 l_user_id NUMBER;
9235 l_login_id NUMBER;
9236
9237 --bug 2843737
9238 CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
9239 select object_id_from1
9240 from pa_object_relationships
9241 where object_id_to1 = c_object_id_to1
9242 and relationship_type = 'S';
9243 l_ref_parent_ver_id NUMBER;
9244 --end bug 2843737
9245
9246 CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
9247 select wbs_number
9248 from pa_proj_element_versions
9249 where element_version_id = c_elem_ver_id
9250 and object_type ='PA_TASKS';
9251
9252 -- hyau Bug 2852753
9253 l_delete_project_allowed VARCHAR2(1);
9254 l_update_proj_num_allowed VARCHAR2(1);
9255 l_update_proj_name_allowed VARCHAR2(1);
9256 l_update_proj_desc_allowed VARCHAR2(1);
9257 l_update_proj_dates_allowed VARCHAR2(1);
9258 l_update_proj_status_allowed VARCHAR2(1);
9259 l_update_proj_manager_allowed VARCHAR2(1);
9260 l_update_proj_org_allowed VARCHAR2(1);
9261 l_add_task_allowed VARCHAR2(1);
9262 l_delete_task_allowed VARCHAR2(1);
9263 l_update_task_num_allowed VARCHAR2(1);
9264 l_update_task_name_allowed VARCHAR2(1);
9265 l_update_task_dates_allowed VARCHAR2(1);
9266 l_update_task_desc_allowed VARCHAR2(1);
9267 l_update_parent_task_allowed VARCHAR2(1);
9268 l_update_task_org_allowed VARCHAR2(1);
9269
9270 l_err_code NUMBER := 0;
9271 l_err_stack VARCHAR2(200) := NULL;
9272 l_err_stage VARCHAR2(200) := NULL;
9273
9274 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
9275
9276 CURSOR get_product_code ( c_project_id NUMBER ) IS
9277 SELECT pm_product_code
9278 FROM PA_PROJECTS_ALL
9279 WHERE project_id = c_project_id;
9280
9281 l_cur_project_id NUMBER;
9282 CURSOR cur_proj_id
9283 IS
9284 SELECT project_id
9285 FROM pa_proj_element_versions
9286 WHERE element_version_id = p_structure_version_id;
9287
9288 -- end hyau Bug 2852753
9289
9290 -- Merged from 85
9291 --Bug 2947492 ( indent )
9292
9293 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
9294 l_parent_task_id NUMBER;
9295 l_old_parent_task_id NUMBER;
9296 l_top_task_id NUMBER;
9297 l_old_top_task_id NUMBER; --bug 2967204
9298
9299 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
9300 SELECT parent_task_id, top_task_id FROM pa_tasks
9301 WHERE project_id = c_project_id and task_id = c_task_id;
9302
9303 --End Bug 2947492 ( indent )
9304 -- Merged from 85
9305
9306 --bug 3053281
9307 l_wp_type VARCHAR2(1);
9308 l_weighting_basis_Code VARCHAR2(30);
9309 --end bug 3053281
9310
9311 --3035902: process update flag changes
9312 cursor get_task_type_id(c_proj_element_id NUMBER) IS
9313 select type_id
9314 from pa_proj_elements
9315 where proj_element_id = c_proj_element_id;
9316 l_task_type_id NUMBER;
9317 l_wp_process_flag VARCHAR2(1);
9318 --3035902: end process update flag changes
9319
9320 --bug 3069306
9321 Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
9322 select object_id_to1
9323 from pa_object_relationships
9324 where relationshiP_type = 'S'
9325 and object_type_to = 'PA_TASKS'
9326 start with object_id_to1 = c_task_ver_id
9327 and object_type_to = 'PA_TASKS'
9328 and relationship_type = 'S'
9329 connect by prior object_id_from1 = object_id_to1
9330 and prior object_type_from = object_type_to
9331 and prior relationship_type = relationship_type
9332 intersect
9333 select a.object_id_to1
9334 from pa_object_relationships a, pa_proj_element_versions b
9335 where a.relationshiP_type = 'S'
9336 and a.object_id_from1 = b.parent_structure_version_id
9337 and b.element_version_id = c_task_ver_id
9338 and a.object_type_from = 'PA_STRUCTURES';
9339 l_old_par_ver_id NUMBER;
9340 l_new_par_ver_id NUMBER;
9341 --end bug 3069306
9342
9343 --bug 3301192
9344 /* Bug #: 3305199 SMukka */
9345 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
9346 /* l_task_ver_ids2 PA_PLSQL_DATATYPES.IdTabTyp; */
9347 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
9348 l_lowest_task_flag1 VARCHAR2(1);
9349 l_lowest_task_flag2 VARCHAR2(1);
9350 l_fin_task_flag VARCHAR2(1);
9351
9352 --bug 4214825, start
9353 l_ref_tsk_version_id NUMBER;
9354
9355 CURSOR cur_get_ref_tsk_ver_id(c_src_wbs_level NUMBER) IS
9356 SELECT element_version_id
9357 FROM PA_PROJ_ELEMENT_VERSIONS
9358 WHERE parent_structure_version_id = p_structure_version_id
9359 AND project_id = p_project_id
9360 AND wbs_level = c_src_wbs_level
9361 AND object_type = 'PA_TASKS'
9362 AND display_sequence < src_seq_number
9363 AND display_sequence =
9364 (SELECT max (display_sequence)
9365 FROM pa_proj_element_versions
9366 WHERE project_id = p_project_id
9367 AND parent_structure_version_id = p_structure_version_id
9368 AND wbs_level = c_src_wbs_level
9369 AND display_sequence < src_seq_number
9370 AND object_type = 'PA_TASKS');
9371 --bug 4214825, end
9372
9373 BEGIN
9374
9375 pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK');
9376
9377 IF (p_debug_mode = 'Y') THEN
9378 pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK begin');
9379 END IF;
9380
9381 IF (p_commit = FND_API.G_TRUE) THEN
9382 savepoint indent_task_version_bulk;
9383 END IF;
9384
9385 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
9386 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9387 END IF;
9388
9389 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
9390 FND_MSG_PUB.initialize;
9391 END IF;
9392
9393 --bug 4075697
9394 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
9395 --bug 4075697
9396
9397 --3035902: process update flag changes
9398 l_wp_process_flag := 'N';
9399 --3035902: end process update flag changes
9400 -- hyau Bug 2852753
9401 IF p_calling_module = 'SELF_SERVICE' THEN
9402
9403 OPEN cur_proj_id;
9404 FETCH cur_proj_id INTO l_cur_project_id;
9405 CLOSE cur_proj_id;
9406
9407 OPEN get_product_code(l_cur_project_id);
9408 FETCH get_product_code INTO l_pm_product_code;
9409 CLOSE get_product_code;
9410
9411 If l_pm_product_code IS NOT NULL THEN
9412 pa_pm_controls.Get_Project_actions_allowed
9413 (P_PM_PRODUCT_CODE => l_pm_product_code,
9414 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
9415 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
9416 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
9417 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
9418 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
9419 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
9420 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
9421 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
9422 P_ADD_TASK_ALLOWED => l_add_task_allowed,
9423 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
9424 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
9425 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
9426 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
9427 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
9428 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
9429 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
9430 P_ERROR_CODE => l_err_code,
9431 P_ERROR_STACK => l_err_stack,
9432 P_ERROR_STAGE => l_err_stage );
9433
9434 IF l_err_code <> 0 THEN
9435 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9436 p_msg_name => l_err_stage);
9437 END IF;
9438 IF l_update_parent_task_allowed = 'N' THEN
9439 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9440 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
9441 raise FND_API.G_EXC_ERROR;
9442 END IF;
9443 END IF;
9444 END IF;
9445
9446 -- end hyau Bug 2852753
9447
9448 IF (p_structure_version_id IS NOT NULL) AND
9449 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
9450 IF ('N' = pa_proj_elements_utils.check_task_in_structure(
9451 p_structure_version_id,
9452 p_task_version_id)) THEN
9453 --deleting linked task. Error
9454 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
9455 raise FND_API.G_EXC_ERROR;
9456 END IF;
9457 END IF;
9458
9459 -- Get Source Task Information
9460 BEGIN
9461 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9462 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
9463 FROM PA_PROJ_ELEMENT_VERSIONS
9464 WHERE element_version_id = p_task_version_id
9465 AND project_id = p_project_id
9466 AND parent_structure_version_id = p_structure_version_id;
9467 EXCEPTION
9468 WHEN OTHERS THEN
9469 raise;
9470 END;
9471
9472 -- Locking should be implemented here
9473
9474 -- Lifecycle Phase validation Changes. Check if task has phase associated with it
9475 IF (p_task_version_id IS NOT NULL) AND
9476 (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
9477
9478 IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
9479 src_proj_element_id)) THEN
9480 --Indenting a task with phase. Error
9481 PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
9482 raise FND_API.G_EXC_ERROR;
9483 END IF;
9484 END IF;
9485
9486
9487 IF src_seq_number = 1 then
9488 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
9489 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
9490 raise FND_API.G_EXC_ERROR;
9491 END IF;
9492
9493 /* Bug 2843737 Added logic to populate the error message when you try to indent lowest task
9494 Also restructured the logic to get the reference task */
9495
9496 -- Get the previous task information. If its wbs_level is equal to src_wbs_level then this will become refernce task
9497 -- Otherwise we will again fetch the correct reference task
9498
9499 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9500 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
9501 FROM PA_PROJ_ELEMENT_VERSIONS
9502 WHERE display_sequence = src_seq_number - 1
9503 AND parent_structure_version_id = p_structure_version_id
9504 AND project_id = p_project_id
9505 AND object_type = 'PA_TASKS';
9506
9507 IF src_wbs_level > ref_wbs_level then
9508 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
9509 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
9510 raise FND_API.G_EXC_ERROR;
9511 END IF;
9512
9513 IF src_wbs_level = ref_wbs_level then
9514 l_peer_or_sub := 'SUB';
9515 --bug 4214825, start
9516 l_ref_tsk_version_id := ref_elem_ver_id;
9517 --bug 4214825, end
9518 ELSE
9519 l_peer_or_sub := 'PEER';
9520
9521 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9522 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
9523 FROM PA_PROJ_ELEMENT_VERSIONS
9524 WHERE parent_structure_version_id = p_structure_version_id
9525 AND project_id = p_project_id
9526 AND wbs_level = src_wbs_level+1
9527 AND object_type = 'PA_TASKS'
9528 AND display_sequence < src_seq_number
9529 AND display_sequence =
9530 (SELECT max (display_sequence)
9531 FROM pa_proj_element_versions
9532 WHERE project_id = p_project_id
9533 AND parent_structure_version_id = p_structure_version_id
9534 AND wbs_level = src_wbs_level+1
9535 AND display_sequence < src_seq_number
9536 AND object_type = 'PA_TASKS');
9537
9538 --bug 4214825, start
9539 OPEN cur_get_ref_tsk_ver_id(src_wbs_level);
9540 FETCH cur_get_ref_tsk_ver_id INTO l_ref_tsk_version_id;
9541 CLOSE cur_get_ref_tsk_ver_id;
9542 --bug 4214825, end
9543
9544
9545 END IF;
9546
9547
9548 /* Bug 2843737 -- Commented the code to get the refernec task. It is now being done above
9549 -- Get Refernce Task Information
9550
9551 BEGIN
9552 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9553 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
9554 FROM PA_PROJ_ELEMENT_VERSIONS
9555 WHERE parent_structure_version_id = p_structure_version_id
9556 AND project_id = p_project_id
9557 AND (wbs_level = src_wbs_level OR wbs_level = src_wbs_level+1) -- Sub or Peer
9558 AND object_type = 'PA_TASKS'
9559 AND display_sequence < src_seq_number
9560 AND display_sequence =
9561 (SELECT max (display_sequence)
9562 FROM pa_proj_element_versions
9563 WHERE project_id = p_project_id
9564 AND parent_structure_version_id = p_structure_version_id
9565 AND (wbs_level = src_wbs_level OR wbs_level = src_wbs_level+1) -- Sub or Peer
9566 AND display_sequence < src_seq_number
9567 AND object_type = 'PA_TASKS');
9568 EXCEPTION
9569 WHEN OTHERS THEN
9570 raise;
9571 END;
9572 */
9573
9574 --Bug No 3475920 Smukka 25/May/04 Checking for deliverable
9575 --bug 4214825, pass the correct ref_task_version
9576 --IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,ref_elem_ver_id) = 'Y' THEN
9577 IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_ref_tsk_version_id) = 'Y' THEN
9578 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9579 p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
9580 raise FND_API.G_EXC_ERROR;
9581 END IF;
9582
9583 --Check if ok to indent this task
9584 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
9585 p_task_ver_id => p_task_version_id
9586 ,x_return_status => l_return_status
9587 ,x_error_message_code => l_error_msg_code
9588 );
9589
9590 IF (l_return_status <> 'Y') THEN
9591 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9592 p_msg_name => l_error_msg_code);
9593 raise FND_API.G_EXC_ERROR;
9594 END IF;
9595
9596 --check if ok to create subtask
9597 IF (l_peer_or_sub = 'PEER') THEN
9598 OPEN get_parent_version_id(ref_elem_ver_id);
9599 FETCH get_parent_version_id into l_parent_ver_id;
9600 CLOSE get_parent_version_id;
9601
9602 --bug 3069306
9603 --if financial task, check if changing parent ok
9604 IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
9605 OPEN get_top_task_ver_id(l_parent_ver_id);
9606 FETCH get_top_task_ver_id into l_new_par_ver_id;
9607 CLOSE get_top_task_ver_id;
9608
9609 OPEN get_top_task_ver_id(p_task_version_id);
9610 FETCH get_top_task_ver_id into l_old_par_ver_id;
9611 CLOSE get_top_task_Ver_id;
9612
9613 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
9614 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9615 p_msg_name => 'PA_CANT_CHANGE_PARENT');
9616 raise FND_API.G_EXC_ERROR;
9617 END IF;
9618 END IF;
9619 --end bug 3069306
9620
9621 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
9622 p_parent_task_ver_id => l_parent_ver_id
9623 ,x_return_status => l_return_status
9624 ,x_error_message_code => l_error_msg_code
9625 );
9626
9627 IF (l_return_status <> 'Y') THEN
9628 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9629 p_msg_name => l_error_msg_code);
9630 raise FND_API.G_EXC_ERROR;
9631 END IF;
9632
9633 --bug 4099488
9634 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
9635 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9636 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
9637 raise FND_API.G_EXC_ERROR;
9638 END IF;
9639 --end bug 4099488
9640 ELSE
9641 --bug 3069306
9642 --if financial task, check if changing parent ok
9643 IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
9644 OPEN get_top_task_ver_id(ref_elem_ver_id);
9645 FETCH get_top_task_ver_id into l_new_par_ver_id;
9646 CLOSE get_top_task_ver_id;
9647
9648 OPEN get_top_task_ver_id(p_task_version_id);
9649 FETCH get_top_task_ver_id into l_old_par_ver_id;
9650 CLOSE get_top_task_Ver_id;
9651
9652 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
9653 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9654 p_msg_name => 'PA_CANT_CHANGE_PARENT');
9655 raise FND_API.G_EXC_ERROR;
9656 END IF;
9657 END IF;
9658 --end bug 3069306
9659
9660
9661 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
9662 p_parent_task_ver_id => ref_elem_ver_id
9663 ,x_return_status => l_return_status
9664 ,x_error_message_code => l_error_msg_code
9665 );
9666
9667 IF (l_return_status <> 'Y') THEN
9668 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9669 p_msg_name => l_error_msg_code);
9670 raise FND_API.G_EXC_ERROR;
9671 END IF;
9672
9673 --bug 4099488
9674 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(ref_elem_ver_id, p_task_version_id) = 'N' THEN
9675 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9676 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
9677 raise FND_API.G_EXC_ERROR;
9678 END IF;
9679 --end bug 4099488
9680 END IF;
9681
9682 -- Added for FP_M changes. Bug 3305199 : Bhumesh xxx
9683
9684 If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
9685 IN ('SHARE_PARTIAL')
9686 Then
9687
9688 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
9689 p_task_version_id => p_task_version_id
9690 , p_ref_task_version_id => ref_elem_ver_id
9691 , x_return_status => x_return_status
9692 , x_msg_count => x_msg_count
9693 , x_msg_data => x_msg_data
9694 , x_error_msg_code => l_error_msg_code);
9695
9696 IF (x_return_status <> 'S') THEN -- 4275757 : Changed from 'Y' to 'S'
9697 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9698 p_msg_name => l_error_msg_code);
9699 raise FND_API.G_EXC_ERROR;
9700 End If;
9701 End If;
9702
9703 --check the task is a lowest task bug 3301192
9704 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
9705
9706 -- End of FP_M changes
9707 /*
9708
9709 The processing done by the followig two calls is made now as plsql table bulk processing
9710
9711 PA_TASK_PUB1.Update_Task_Version
9712 ( p_validate_only => FND_API.G_FALSE,
9713 p_ref_task_version_id => l_ref_task_version_id,
9714 p_peer_or_sub => l_peer_or_sub,
9715 p_task_version_id => p_task_version_id,
9716 p_record_version_number => p_record_version_number,
9717 x_return_status => l_return_status,
9718 x_msg_count => l_msg_count,
9719 x_msg_data => l_msg_data );
9720
9721 PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
9722 ( p_commit => p_commit
9723 ,p_debug_mode => p_debug_mode
9724 ,p_parent_structure_ver_id => l_parent_structure_version_id
9725 ,p_task_id => p_task_version_id
9726 ,p_display_seq => l_display_sequence
9727 ,p_action => 'INDENT'
9728 ,p_parent_task_id => NULL
9729 ,x_return_status => l_return_status );
9730
9731 */
9732
9733
9734 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
9735
9736 -- Logic Added for plsql table
9737 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
9738
9739 l_element_version_id_tab.delete;
9740 l_proj_element_id_tab.delete;
9741 l_object_type_tab.delete;
9742 l_project_id_tab.delete;
9743 l_parent_str_version_id_tab.delete;
9744 l_display_sequence_tab.delete;
9745 l_wbs_level_tab.delete;
9746 l_wbs_number_tab.delete;
9747 l_record_version_tab.delete;
9748 l_changed_flag_tab.delete;
9749
9750 If (l_peer_or_sub = 'SUB') THEN
9751 OPEN get_ref_parent_id(ref_elem_ver_id);
9752 FETCH get_ref_parent_id into l_ref_parent_ver_id;
9753 CLOSE get_ref_parent_id;
9754 ELSE
9755 OPEN get_ref_parent_id(p_task_version_id);
9756 FETCH get_ref_parent_id into l_ref_parent_ver_id;
9757 CLOSE get_ref_parent_id;
9758 END IF;
9759
9760 BEGIN
9761 -- Using OR is beneficial than using UNION here
9762
9763 SELECT element_version_id, proj_element_id, object_type,
9764 project_id, parent_structure_version_id,
9765 display_sequence, wbs_level, wbs_number,
9766 record_version_number, 'N' changed_flag
9767 BULK COLLECT INTO l_element_version_id_tab,
9768 l_proj_element_id_tab, l_object_type_tab,
9769 l_project_id_tab, l_parent_str_version_id_tab,
9770 l_display_sequence_tab, l_wbs_level_tab,
9771 l_wbs_number_tab, l_record_version_tab,
9772 l_changed_flag_tab
9773 FROM
9774 pa_proj_element_versions
9775 WHERE
9776 project_id = p_project_id
9777 AND parent_structure_version_id = p_structure_version_id
9778 AND object_type = 'PA_TASKS'
9779 AND(
9780 element_version_id = p_task_version_id -- Source task itself
9781 OR (element_version_id IN -- All tasks below the source task with wbs_level >= src_wbs_level-1
9782 (select object_id_to1
9783 from pa_object_relationships
9784 where relationship_type = 'S'
9785 and object_type_to = 'PA_TASKS'
9786 start with object_id_from1 = l_ref_parent_ver_id
9787 connect by object_id_from1 = PRIOR object_id_to1
9788 and relationship_type = PRIOR relationship_type
9789 and relationship_type = 'S')
9790 )
9791 and display_sequence > src_seq_number)
9792 ORDER BY display_sequence ;
9793 EXCEPTION
9794 WHEN OTHERS THEN
9795 raise;
9796 END;
9797
9798
9799 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
9800 -- Here we can also incorporate sequence number update. In indent sequence number does not change.
9801
9802 -- Update wbs level
9803
9804 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
9805 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
9806 l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
9807 l_changed_flag_tab(j) := 'Y';
9808 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
9809 -- Direct Childs of source
9810 l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
9811 l_changed_flag_tab(j) := 'Y';
9812 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
9813 -- Exit level changes, IT means no Direct childs are left
9814 EXIT;
9815 END IF;
9816 END LOOP;
9817
9818
9819 -- Update wbs_number
9820
9821 src_branch_mask := src_wbs_number;
9822
9823 -- ref_branch_mask shd be the wbs_number of parent of source
9824 --ref_branch_mask := substr(ref_wbs_number, 1, instr(ref_wbs_number,'.', -1, 1)-1);
9825
9826 OPEN get_wbs_number(l_ref_parent_ver_id);
9827 FETCH get_wbs_number into ref_branch_mask;
9828 CLOSE get_wbs_number;
9829
9830
9831
9832 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
9833 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
9834 IF l_peer_or_sub = 'SUB' THEN
9835 l_wbs_number := ref_wbs_number || '.1';
9836 l_wbs_number_tab(j) := l_wbs_number;
9837 l_changed_flag_tab(j) := 'Y';
9838 l_new_wbs_number := l_wbs_number;
9839 ELSE
9840 l_number := instr(ref_wbs_number,'.', -1, 1);
9841 l_str1 := substr(ref_wbs_number, 1, l_number -1);
9842 l_str2 := substr(ref_wbs_number, l_number + 1);
9843 l_str2 := to_char(to_number(l_str2 + 1));
9844 l_wbs_number := l_str1 || '.' || l_str2;
9845 l_wbs_number_tab(j) := l_wbs_number;
9846 l_changed_flag_tab(j) := 'Y';
9847 l_new_wbs_number := l_wbs_number;
9848 END IF;
9849 ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
9850 IF l_display_sequence_tab(j) > src_seq_number THEN
9851 IF src_wbs_level = 1 THEN -- This was top task
9852 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
9853 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
9854 -- Direct childs of source
9855 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
9856 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
9857 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
9858 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
9859 l_wbs_number_tab(j) := l_wbs_number;
9860 l_changed_flag_tab(j) := 'Y';
9861 ELSIF(instr(l_wbs_number_tab(j), '.') <> 0) then
9862 -- Not in Direct Childs, But lower tasks
9863 l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
9864 l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
9865 l_str1 := to_char(to_number(l_str1) - 1);
9866 l_wbs_number := l_str1 || l_str2;
9867 l_wbs_number_tab(j) := l_wbs_number;
9868 l_changed_flag_tab(j) := 'Y';
9869 ELSIF (instr(l_wbs_number_tab(j), '.') = 0) then
9870 l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) - 1);
9871 l_wbs_number_tab(j) := l_wbs_number;
9872 l_changed_flag_tab(j) := 'Y';
9873 END IF;
9874 ELSE -- src_wbs_level <> 1 Source was not a Top Task
9875 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
9876 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
9877 -- Direct childs of source
9878 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
9879 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
9880 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
9881 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
9882 l_wbs_number_tab(j) := l_wbs_number;
9883 l_changed_flag_tab(j) := 'Y';
9884 ELSE
9885 l_str1 := substr(l_wbs_number_tab(j), length(ref_branch_mask) + 2);
9886 IF(instr(l_str1, '.') <> 0) THEN
9887 l_str2 := substr(l_str1, instr(l_str1, '.'));
9888 l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
9889 l_str1 := to_char(to_number(l_str1) - 1);
9890 l_wbs_number := ref_branch_mask || '.' || l_str1 || l_str2;
9891 l_wbs_number_tab(j) := l_wbs_number;
9892 l_changed_flag_tab(j) := 'Y';
9893 ELSE
9894 l_str1:= to_char(to_number(l_str1) - 1);
9895 l_wbs_number := ref_branch_mask || '.' || l_str1;
9896 l_wbs_number_tab(j) := l_wbs_number;
9897 l_changed_flag_tab(j) := 'Y';
9898 END IF;
9899 END IF;
9900 END IF; -- src_wbs_level = 1
9901 END IF; -- l_display_sequence_tab(j) > src_seq_number
9902 END IF; -- l_element_version_id_tab(j) = src_elem_ver_id
9903 END LOOP;
9904 l_user_id := fnd_global.user_id;
9905 l_login_id := fnd_global.login_id;
9906
9907 -- Locking should be implemnted here
9908
9909 FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
9910 UPDATE PA_PROJ_ELEMENT_VERSIONS
9911 SET
9912 wbs_level = l_wbs_level_tab(j) ,
9913 wbs_number = l_wbs_number_tab(j) ,
9914 last_update_date = sysdate ,
9915 last_updated_by = l_user_id ,
9916 last_update_login = l_login_id ,
9917 record_version_number = l_record_version_tab(j)+1
9918 WHERE element_version_id = l_element_version_id_tab(j)
9919 AND l_changed_flag_tab(j)='Y';
9920
9921
9922 -- Update Relationship
9923
9924 IF ref_object_type = 'PA_TASKS'
9925 THEN
9926 IF l_peer_or_sub = 'PEER'
9927 THEN
9928 OPEN cur_obj_rel( ref_elem_ver_id );
9929 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
9930 CLOSE cur_obj_rel;
9931
9932 l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
9933
9934 IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
9935 THEN
9936 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
9937 l_task_version_from := null;
9938 ELSE
9939 l_task_version_from := v_cur_obj_rel_rec.object_id_from1;
9940 l_struc_version_from := null;
9941 END IF;
9942 ELSE -- l_peer_or_sub = 'SUB'
9943 --parent task is the reference task
9944 l_task_version_from := ref_elem_ver_id;
9945 l_struc_version_from := null;
9946 l_relationship_subtype := 'TASK_TO_TASK';
9947
9948
9949 END IF;
9950 END IF; -- ref_object_type = 'PA_TASKS'
9951 -- No need to check for PA_STRUCTURES as this is indent and you can not indent below a structure
9952
9953
9954 --update relatonship of the task version p_task_version.
9955 --set structure_version_from and task_version_from accordingly.
9956 OPEN cur_obj_rel( p_task_version_id );
9957 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
9958 CLOSE cur_obj_rel;
9959
9960 --for task weighting
9961 OPEN get_task_weighting(p_task_version_id);
9962 FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
9963 CLOSE get_task_weighting;
9964
9965
9966 IF(l_task_version_from is not null) THEN
9967 l_version_from := l_task_version_from;
9968 ELSE
9969 l_version_from := l_struc_version_from;
9970 END IF;
9971
9972 IF (l_version_from = p_task_version_id) THEN
9973 l_new_weighting := l_old_weighting;
9974 ELSE
9975 OPEN get_sub_tasks(l_version_from);
9976 FETCH get_sub_tasks into l_dummy;
9977 IF (get_sub_tasks%NOTFOUND) THEN
9978 l_new_weighting := 100;
9979 --bug 2673570
9980 OPEN check_progress_allowed(p_task_version_id);
9981 FETCH check_progress_allowed INTO l_progress_allowed;
9982 CLOSE check_progress_allowed;
9983
9984 if l_progress_allowed = 'N' then
9985 l_new_weighting := 0;
9986 end if;
9987 --bug 2673570
9988 ELSE
9989 l_new_weighting := 0;
9990 END IF;
9991 CLOSE get_sub_tasks;
9992 END IF;
9993
9994 PA_RELATIONSHIP_PVT.Update_Relationship
9995 (
9996 p_api_version => p_api_version
9997 ,p_init_msg_list => p_init_msg_list
9998 ,p_commit => p_commit
9999 ,p_validate_only => p_validate_only
10000 ,p_validation_level => p_validation_level
10001 ,p_calling_module => p_calling_module
10002 ,p_debug_mode => p_debug_mode
10003 ,p_max_msg_count => p_max_msg_count
10004 ,p_object_relationship_id => v_cur_obj_rel_rec.object_relationship_id
10005 ,p_project_id_from => null
10006 ,p_structure_id_from => null
10007 ,p_structure_version_id_from => l_struc_version_from
10008 ,p_task_version_id_from => l_task_version_from
10009 ,p_project_id_to => null
10010 ,p_structure_id_to => null
10011 ,p_structure_version_id_to => null
10012 ,p_task_version_id_to => p_task_version_id
10013 ,p_relationship_type => 'S'
10014 ,p_relationship_subtype => l_relationship_subtype
10015 ,p_weighting_percentage => l_new_weighting
10016 ,p_record_version_number => v_cur_obj_rel_rec.record_version_number
10017 ,x_return_status => l_return_status
10018 ,x_msg_count => l_msg_count
10019 ,x_msg_data => l_msg_data
10020 );
10021
10022
10023 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10024 x_msg_count := FND_MSG_PUB.count_msg;
10025 IF x_msg_count = 1 then
10026 pa_interface_utils_pub.get_messages
10027 (p_encoded => FND_API.G_TRUE,
10028 p_msg_index => 1,
10029 p_msg_count => l_msg_count,
10030 p_msg_data => l_msg_data,
10031 p_data => l_data,
10032 p_msg_index_out => l_msg_index_out);
10033 x_msg_data := l_data;
10034 END IF;
10035 raise FND_API.G_EXC_ERROR;
10036 END IF;
10037
10038 --for task weighting
10039 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
10040 p_task_version_id => l_old_parent_id
10041 ,x_return_status => l_return_status
10042 ,x_msg_count => l_msg_count
10043 ,x_msg_data => l_msg_data
10044 );
10045
10046 x_msg_count := FND_MSG_PUB.count_msg;
10047 IF x_msg_count = 1 then
10048 pa_interface_utils_pub.get_messages
10049 (p_encoded => FND_API.G_TRUE,
10050 p_msg_index => 1,
10051 p_msg_count => l_msg_count,
10052 p_msg_data => l_msg_data,
10053 p_data => l_data,
10054 p_msg_index_out => l_msg_index_out);
10055 x_msg_data := l_data;
10056 END IF;
10057
10058 --bug 2673570
10059 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
10060 p_task_version_id => p_task_version_id
10061 ,x_return_status => l_return_status
10062 ,x_msg_count => l_msg_count
10063 ,x_msg_data => l_msg_data
10064 );
10065
10066 x_msg_count := FND_MSG_PUB.count_msg;
10067 IF x_msg_count = 1 then
10068 pa_interface_utils_pub.get_messages
10069 (p_encoded => FND_API.G_TRUE,
10070 p_msg_index => 1,
10071 p_msg_count => l_msg_count,
10072 p_msg_data => l_msg_data,
10073 p_data => l_data,
10074 p_msg_index_out => l_msg_index_out);
10075 x_msg_data := l_data;
10076 END IF;
10077 --bug 2673570
10078 --end changes for task weighting
10079
10080
10081 /*** End Update_task_version and Update_wbs_number code ***/
10082
10083 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
10084 FROM pa_proj_element_versions
10085 WHERE element_version_id = ( Select parent_structure_version_id
10086 from pa_proj_element_versions
10087 where element_version_id = p_task_version_id )
10088 AND object_type = 'PA_STRUCTURES';
10089
10090
10091 --Do financial task check
10092 --If financial
10093 OPEN cur_struc_type( l_structure_id );
10094 FETCH cur_struc_type INTO l_dummy_char;
10095 IF cur_struc_type%FOUND
10096 THEN
10097 --If structure has any published versions.
10098 l_published_version := 'N';
10099 OPEN cur_pub_versions( l_structure_id, l_project_id );
10100 FETCH cur_pub_versions INTO l_published_version;
10101 CLOSE cur_pub_versions;
10102
10103
10104 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
10105 l_project_id);
10106 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
10107 l_project_id);
10108
10109 l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --indent in corresponding task in pa_tasks
10110
10111 IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
10112 (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
10113 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
10114 THEN
10115
10116 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
10117 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
10118 FROM PA_TASKS pt,
10119 pa_proj_elem_ver_structure ppa,
10120 PA_PROJ_ELEMENT_VERSIONS ppev
10121 WHERE ppev.element_version_id = p_task_version_id
10122 AND ppev.parent_structure_version_id = ppa.element_version_id
10123 AND ppev.project_id = ppa.project_id
10124 AND ppev.proj_element_id = pt.task_id;
10125
10126 -- Merged from 85
10127 SELECT record_version_number, parent_task_id --get old parent id for bug 2947492 (indent )
10128 ,top_task_id --bug 2967204
10129 INTO l_task_record_version_number, l_old_parent_task_id
10130 ,l_old_top_task_id --bug 2967204
10131 FROM pa_tasks
10132 WHERE task_id = l_task_id
10133 AND project_id = l_project_id;
10134 -- Merged from 85
10135
10136
10137 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
10138 p_project_id => l_project_id
10139 ,p_task_id => l_task_id
10140 ,p_edit_mode => 'INDENT'
10141 ,p_record_version_number => l_task_record_version_number
10142 ,p_wbs_record_version_number => 1
10143 ,x_return_status => l_return_status
10144 ,x_msg_count => l_msg_count
10145 ,x_msg_data => l_msg_data );
10146
10147 -- Merged from 85
10148 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10149 x_msg_count := FND_MSG_PUB.count_msg;
10150 IF x_msg_count = 1 then
10151 pa_interface_utils_pub.get_messages
10152 (p_encoded => FND_API.G_TRUE,
10153 p_msg_index => 1,
10154 p_msg_count => l_msg_count,
10155 p_msg_data => l_msg_data,
10156 p_data => l_data,
10157 p_msg_index_out => l_msg_index_out);
10158 x_msg_data := l_data;
10159 END IF;
10160 raise FND_API.G_EXC_ERROR;
10161 END IF;
10162
10163 --Bug 2947492 ( Indent )
10164 --
10165
10166 OPEN get_parent_task_id( l_task_id , l_project_id );
10167 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
10168 CLOSE get_parent_task_id;
10169
10170 --bug 2967204
10171 --Cannot move out of the current hierarchy
10172 IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
10173 THEN
10174 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10175 p_msg_name => 'PA_CANT_CHANGE_PARENT');
10176 raise FND_API.G_EXC_ERROR;
10177 END IF;
10178 --End bug 2967204
10179
10180 --First call the check_reparent ok
10181 --This should have been called in the beginning but due to lot of complexity involved in getting
10182 --new parent task id it is decided to call this later stage as long as we rollback the whole operation
10183 --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
10184
10185 /*PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
10186 p_task_id => l_task_id
10187 ,p_old_parent_task_id => l_old_parent_task_id
10188 ,p_new_parent_task_id => l_parent_task_id
10189 ,x_return_status => l_return_status
10190 ,x_msg_count => l_msg_count
10191 ,x_msg_data => l_msg_data
10192 );
10193
10194 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10195 x_msg_count := FND_MSG_PUB.count_msg;
10196 IF x_msg_count = 1 then
10197 pa_interface_utils_pub.get_messages
10198 (p_encoded => FND_API.G_TRUE,
10199 p_msg_index => 1,
10200 p_msg_count => l_msg_count,
10201 p_msg_data => l_msg_data,
10202 p_data => l_data,
10203 p_msg_index_out => l_msg_index_out);
10204 x_msg_data := l_data;
10205 END IF;
10206 raise FND_API.G_EXC_ERROR;
10207 END IF;
10208 */ --commenting out. check mails form Venkatesh Jayaraman dated 22 Jan 04
10209
10210 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
10211 l_plannable_tasks_tbl(1).impacted_task_id := l_task_id;
10212 l_plannable_tasks_tbl(1).action := 'REPARENT';
10213 l_plannable_tasks_tbl(1).old_parent_task_id := l_old_parent_task_id;
10214 l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
10215 l_plannable_tasks_tbl(1).top_task_id := l_top_task_id;
10216
10217
10218 PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
10219 p_project_id => p_project_id
10220 , p_impacted_tasks_tbl => l_plannable_tasks_tbl
10221 , x_return_status => l_return_status
10222 , x_msg_data => l_msg_data
10223 , x_msg_count => l_msg_count
10224 );
10225
10226 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10227 x_msg_count := FND_MSG_PUB.count_msg;
10228 IF x_msg_count = 1 then
10229 pa_interface_utils_pub.get_messages
10230 (p_encoded => FND_API.G_TRUE,
10231 p_msg_index => 1,
10232 p_msg_count => l_msg_count,
10233 p_msg_data => l_msg_data,
10234 p_data => l_data,
10235 p_msg_index_out => l_msg_index_out);
10236 x_msg_data := l_data;
10237 END IF;
10238 raise FND_API.G_EXC_ERROR;
10239 END IF;
10240 bug 3010538 */
10241
10242 --End Bug 2947492 ( Indent )
10243
10244 END IF;
10245 END IF;
10246 CLOSE cur_struc_type;
10247 -- Merged from 85
10248
10249 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
10250
10251 -- Added for FP_M changes Bug 3305199 : Bhumesh
10252 If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
10253
10254 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
10255 p_structure_version_id => P_Structure_Version_ID
10256 ,p_dirty_flag => 'Y' --bug 3902282
10257 ,x_return_status => x_return_status
10258 ,x_msg_count => x_msg_count
10259 ,x_msg_data => x_msg_data
10260 );
10261
10262 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
10263 x_msg_count := FND_MSG_PUB.count_msg;
10264 If x_msg_count = 1 then
10265 pa_interface_utils_pub.get_messages
10266 (p_encoded => FND_API.G_TRUE,
10267 p_msg_index => 1,
10268 p_msg_count => l_msg_count,
10269 p_msg_data => l_msg_data,
10270 p_data => l_data,
10271 p_msg_index_out => l_msg_index_out);
10272 x_msg_data := l_data;
10273 End If;
10274 raise FND_API.G_EXC_ERROR;
10275 End If;
10276 End If;
10277 -- End of FP_M changes
10278
10279 l_tasks_ver_ids.extend;
10280 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
10281
10282 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
10283 p_commit => FND_API.G_FALSE,
10284 p_element_versions => l_tasks_ver_ids,
10285 x_return_status => l_return_status,
10286 x_msg_count => l_msg_count,
10287 x_msg_data => l_msg_data);
10288
10289 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10290 x_msg_count := FND_MSG_PUB.count_msg;
10291 if x_msg_count = 1 then
10292 pa_interface_utils_pub.get_messages
10293 (p_encoded => FND_API.G_TRUE,
10294 p_msg_index => 1,
10295 p_msg_count => l_msg_count,
10296 p_msg_data => l_msg_data,
10297 p_data => l_data,
10298 p_msg_index_out => l_msg_index_out);
10299 x_msg_data := l_data;
10300 end if;
10301 raise FND_API.G_EXC_ERROR;
10302 end if;
10303
10304 --hsiu added for task status
10305 --if versioning is off, rollup.
10306 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
10307 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
10308 p_structure_version_id => p_structure_version_id
10309 ,p_element_version_id => p_task_version_id
10310 ,x_return_status => l_return_status
10311 ,x_msg_count => l_msg_count
10312 ,x_msg_data => l_msg_data
10313 );
10314
10315 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10316 x_msg_count := FND_MSG_PUB.count_msg;
10317 if x_msg_count = 1 then
10318 pa_interface_utils_pub.get_messages
10319 (p_encoded => FND_API.G_TRUE,
10320 p_msg_index => 1,
10321 p_msg_count => l_msg_count,
10322 p_msg_data => l_msg_data,
10323 p_data => l_data,
10324 p_msg_index_out => l_msg_index_out);
10325 x_msg_data := l_data;
10326 end if;
10327 raise FND_API.G_EXC_ERROR;
10328 end if;
10329 END IF;
10330
10331 --end task status changes
10332
10333 END IF;
10334
10335 --bug 3010538 (Indent)
10336
10337 --bug 3053281 --set flag if not (manual and workplan only)
10338 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
10339 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
10340
10341 /*
10342 IF (l_shared = 'N') AND
10343 (l_wp_type = 'Y') AND
10344 (l_weighting_basis_Code = 'MANUAL') THEN
10345 --do not set the flag to 'Y'
10346 NULL;
10347 ELSE
10348 */
10349 --3035902: process update flag changes
10350 OPEN get_task_type_id(src_proj_element_id);
10351 FETCH get_task_type_id INTO l_task_type_id;
10352 CLOSE get_task_type_id;
10353
10354 --set update process flag if necessary;
10355 IF (l_wp_process_flag = 'N') THEN
10356 --may need to update process flag
10357 IF ((l_shared = 'N') AND
10358 (l_wp_type = 'Y') AND
10359 (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
10360 (l_weighting_basis_code <> 'MANUAL'))
10361 THEN
10362 --split and workplan; only update if progressable task added
10363 l_wp_process_flag := 'Y';
10364 ELSIF ((l_shared = 'N') AND
10365 (l_wp_type = 'N')) THEN
10366 --split and financial; update
10367 l_wp_process_flag := 'Y';
10368 ELSIF (l_shared = 'Y') THEN
10369 l_wp_process_flag := 'Y';
10370 END IF;
10371 END IF;
10372
10373 IF (l_wp_process_flag = 'Y') THEN
10374 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
10375 (
10376 p_calling_context => 'SELF_SERVICE'
10377 ,p_project_id => p_project_id
10378 ,p_structure_version_id => p_structure_version_id
10379 ,p_update_wbs_flag => 'Y'
10380 ,x_return_status => l_return_status
10381 ,x_msg_count => l_msg_count
10382 ,x_msg_data => l_msg_data);
10383
10384 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10385 x_msg_count := FND_MSG_PUB.count_msg;
10386 if x_msg_count = 1 then
10387 pa_interface_utils_pub.get_messages
10388 (p_encoded => FND_API.G_TRUE,
10389 p_msg_index => 1,
10390 p_msg_count => l_msg_count,
10391 p_msg_data => l_msg_data,
10392 p_data => l_data,
10393 p_msg_index_out => l_msg_index_out);
10394 x_msg_data := l_data;
10395 end if;
10396 raise FND_API.G_EXC_ERROR;
10397 end if;
10398 END IF;
10399 --3035902: end process update flag changes
10400
10401 --ideally the following calls should have been cached. but due to time constraints
10402 --we need to write the code this way in multiple places.
10403 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
10404 THEN
10405 IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and l_published_version = 'N' ) THEN
10406 --Indent
10407 pa_fp_refresh_elements_pub.set_process_flag_proj(
10408 p_project_id => p_project_id
10409 ,p_request_id => null
10410 ,p_process_code => null
10411 ,p_refresh_required_flag => 'Y'
10412 ,x_return_status => l_return_status
10413 ,x_msg_count => l_msg_count
10414 ,x_msg_data => l_msg_data );
10415
10416 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10417 x_msg_count := FND_MSG_PUB.count_msg;
10418 if x_msg_count = 1 then
10419 pa_interface_utils_pub.get_messages
10420 (p_encoded => FND_API.G_TRUE,
10421 p_msg_index => 1,
10422 p_msg_count => l_msg_count,
10423 p_msg_data => l_msg_data,
10424 p_data => l_data,
10425 p_msg_index_out => l_msg_index_out);
10426 x_msg_data := l_data;
10427 end if;
10428 raise FND_API.G_EXC_ERROR;
10429 end if;
10430 END IF;
10431 END IF;
10432
10433 --End bug 3010538 (Indent )
10434
10435 --bug 3301192
10436 --check the task is a lowest task again and check whehter its no more a lowest task.
10437 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
10438
10439 IF l_lowest_task_flag1 = 'Y' AND
10440 l_lowest_task_flag2 = 'N'
10441 THEN
10442 IF l_wp_type = 'Y'
10443 THEN
10444 --now call call delete planning for task version id.
10445 l_task_ver_ids2.extend(1); /* Venky */
10446 l_task_ver_ids2(1) := p_task_version_id;
10447 /*Smukka Bug No. 3474141 Date 03/01/2004 */
10448 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
10449 DECLARE
10450 --p1 bug 3888432
10451 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10452 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
10453 SELECT resource_assignment_id
10454 FROM pa_resource_assignments
10455 WHERE wbs_element_Version_id = c_task_ver_id
10456 AND ta_display_flag = 'N';
10457 l_assign_id NUMBER := NULL;
10458 BEGIN
10459 OPEN get_assignment_id(p_task_version_id);
10460 FETCH get_assignment_id into l_assign_id;
10461 CLOSE get_assignment_id;
10462
10463 IF (l_assign_id IS NOT NULL) THEN
10464 l_assign_ids.extend(1);
10465 l_assign_ids(1) := l_assign_id;
10466 pa_fp_planning_transaction_pub.delete_planning_transactions
10467 (
10468 p_context => 'WORKPLAN'
10469 ,p_task_or_res => 'ASSIGNMENT'
10470 --- ,p_element_version_id_tbl => l_task_ver_ids2
10471 --- ,p_maintain_reporting_lines => 'Y'
10472 ,p_resource_assignment_tbl => l_assign_ids
10473 ,x_return_status => l_return_status
10474 ,x_msg_count => l_msg_count
10475 ,x_msg_data => l_msg_data
10476 );
10477 END IF;
10478 EXCEPTION
10479 WHEN OTHERS THEN
10480 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
10481 p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10482 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
10483 RAISE FND_API.G_EXC_ERROR;
10484 END;
10485
10486 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10487 x_msg_count := FND_MSG_PUB.count_msg;
10488 if x_msg_count = 1 then
10489 pa_interface_utils_pub.get_messages
10490 (p_encoded => FND_API.G_TRUE,
10491 p_msg_index => 1,
10492 p_msg_count => l_msg_count,
10493 p_msg_data => l_msg_data,
10494 p_data => l_data,
10495 p_msg_index_out => l_msg_index_out);
10496 x_msg_data := l_data;
10497 end if;
10498 raise FND_API.G_EXC_ERROR;
10499 end if;
10500 END IF; --<<l_wp_type>>
10501 END IF; --<<l_lowest_task_flag1>>
10502
10503 --bug 4149392
10504 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
10505 --end bug 4149392
10506
10507 x_return_status := FND_API.G_RET_STS_SUCCESS;
10508
10509 IF (p_commit = FND_API.G_TRUE) THEN
10510 COMMIT;
10511 END IF;
10512
10513 IF (p_debug_mode = 'Y') THEN
10514 pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK END');
10515 END IF;
10516
10517 EXCEPTION
10518 when FND_API.G_EXC_ERROR then
10519 if p_commit = FND_API.G_TRUE then
10520 rollback to indent_task_version_bulk;
10521 end if;
10522 x_return_status := FND_API.G_RET_STS_ERROR;
10523 when FND_API.G_EXC_UNEXPECTED_ERROR then
10524 if p_commit = FND_API.G_TRUE then
10525 rollback to indent_task_version_bulk;
10526 end if;
10527 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10528 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
10529 p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10530 p_error_text => SUBSTRB(SQLERRM,1,240));
10531 when OTHERS then
10532 if p_commit = FND_API.G_TRUE then
10533 rollback to indent_task_version_bulk;
10534 end if;
10535 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10536 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
10537 p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10538 p_error_text => SUBSTRB(SQLERRM,1,240));
10539 raise;
10540
10541 END Indent_Task_Version_Bulk;
10542
10543 -- Amit : Following procedure added for Bug 2838700
10544
10545 PROCEDURE OUTDENT_TASK_VERSION_BULK (
10546 p_api_version IN NUMBER :=1.0,
10547 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
10548 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
10549 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
10550 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
10551 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
10552 p_debug_mode IN VARCHAR2 :='N',
10553 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10554 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10555 p_task_version_id IN NUMBER,
10556 p_project_id IN NUMBER,
10557 p_record_version_number IN NUMBER,
10558 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10559 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
10560 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10561 ) IS
10562
10563
10564 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
10565 SELECT 'Y'
10566 FROM pa_proj_structure_types ppst
10567 ,pa_structure_types pst
10568 WHERE ppst.proj_element_id = c_structure_id
10569 AND ppst.structure_type_id = pst.structure_type_id
10570 AND pst.structure_type_class_code IN( 'FINANCIAL' );
10571
10572 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
10573 SELECT 'Y'
10574 FROM dual
10575 WHERE EXISTS(
10576 SELECT 'xyz'
10577 FROM pa_proj_elem_ver_structure
10578 WHERE proj_element_id = c_structure_id
10579 AND project_id = c_project_id
10580 AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
10581 );
10582
10583 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
10584 SELECT object_id_from1
10585 FROM pa_object_relationships
10586 WHERE object_id_to1 = c_elem_ver_id
10587 AND object_type_to = 'PA_TASKS'
10588 AND relationship_type = 'S';
10589
10590 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
10591 SELECT object_id_from1
10592 , object_relationship_id
10593 , record_version_number
10594 , relationship_subtype
10595 FROM pa_object_relationships
10596 WHERE object_id_to1 = p_child_version_id
10597 AND relationship_type = 'S';
10598
10599 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
10600
10601 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
10602 SELECT a.object_id_from1
10603 , a.weighting_percentage
10604 FROM pa_object_relationships a
10605 WHERE a.object_id_to1 = c_task_version_id
10606 AND a.object_type_to = 'PA_TASKS'
10607 AND a.relationship_type = 'S'
10608 AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
10609
10610 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
10611 SELECT '1'
10612 FROM dual
10613 WHERE EXISTS
10614 (SELECT 'xyz'
10615 FROM pa_object_relationships
10616 WHERE object_id_from1 = c_task_version_id
10617 AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
10618 AND relationship_type = 'S'
10619 );
10620
10621 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
10622 SELECT ptt.prog_entry_enable_flag
10623 FROM pa_task_types ptt
10624 , pa_proj_element_versions ppev,
10625 pa_proj_elements ppe
10626 WHERE ppev.element_version_id = c_element_version_id
10627 AND ppev.proj_element_id = ppe.proj_element_id
10628 AND ppe.TYPE_ID = ptt.task_type_id;
10629
10630 CURSOR get_peer_tasks IS
10631 SELECT b.object_id_to1 object_id_to1
10632 FROM pa_object_relationships a
10633 , pa_object_relationships b
10634 WHERE a.object_id_to1 = p_task_version_id
10635 AND a.object_type_to = 'PA_TASKS'
10636 AND a.object_id_from1 = b.object_id_from1
10637 AND a.object_type_from = b.object_type_from
10638 AND b.object_type_to = 'PA_TASKS'
10639 AND b.object_id_to1 <> p_task_version_id
10640 AND a.relationship_type = 'S'
10641 AND b.relationship_type = 'S';
10642
10643 c_get_peer_tasks get_peer_tasks%ROWTYPE;
10644
10645 --This cursor fetches all tasks that are child of ref task but now become child of p_task_version
10646 -- This case should not be possible for Outdent/Indent
10647 CURSOR cur_new_child(c_ref_task_version_id NUMBER, c_display_sequence NUMBER) IS
10648 SELECT por.object_id_to1, ppev.display_sequence, por.record_version_number, por.object_relationship_id
10649 FROM pa_object_relationships por,
10650 pa_proj_element_versions ppev
10651 WHERE object_id_from1 = c_ref_task_version_id
10652 AND object_id_to1 = element_version_id
10653 AND display_sequence > c_display_sequence
10654 AND relationship_type = 'S'
10655 order by display_sequence;
10656
10657
10658
10659 l_api_name CONSTANT VARCHAR(30) := 'OUTDENT_TASK_VERSION_BULK';
10660 l_api_version CONSTANT NUMBER := 1.0;
10661 l_return_status VARCHAR2(1);
10662 l_msg_count NUMBER;
10663 l_msg_data VARCHAR2(250);
10664 l_data VARCHAR2(250);
10665 l_msg_index_out NUMBER;
10666
10667 l_peer_or_sub VARCHAR2(30);
10668 l_project_id NUMBER;
10669 l_structure_id NUMBER;
10670 l_ref_task_id NUMBER;
10671 l_task_id NUMBER;
10672 l_task_record_version_number NUMBER;
10673 l_wbs_record_version_number NUMBER;
10674 l_dummy_char VARCHAR2(1);
10675 l_published_version VARCHAR2(1);
10676 l_relationship_subtype VARCHAR2(20);
10677 l_struc_version_from NUMBER;
10678 l_task_version_from NUMBER;
10679 l_version_from NUMBER;
10680 l_versioned VARCHAR2(1) := 'N';
10681 l_shared VARCHAR2(1) := 'N';
10682 l_rollup_task_id NUMBER;
10683
10684 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
10685 l_parent_ver_id NUMBER;
10686 l_error_msg_code VARCHAR2(30);
10687
10688 src_elem_ver_id NUMBER;
10689 src_proj_element_id NUMBER;
10690 src_wbs_number VARCHAR2(240);
10691 src_seq_number NUMBER;
10692 src_wbs_level NUMBER;
10693 src_parent_str_ver_id NUMBER;
10694 src_object_type VARCHAR2(30);
10695
10696 ref_elem_ver_id NUMBER;
10697 ref_proj_element_id NUMBER;
10698 ref_wbs_number VARCHAR2(240);
10699 ref_seq_number NUMBER;
10700 ref_wbs_level NUMBER;
10701 ref_parent_str_ver_id NUMBER;
10702 ref_object_type VARCHAR2(30);
10703
10704 l_old_parent_id NUMBER;
10705 l_dummy VARCHAR2(1);
10706
10707 l_new_weighting NUMBER(17,2);
10708 l_old_weighting NUMBER(17,2);
10709 l_progress_allowed VARCHAR2(1);
10710
10711 l_element_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10712 l_proj_element_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10713 l_object_type_tab PA_FORECAST_GLOB.VCTabTyp;
10714 l_project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10715 l_parent_str_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10716 l_display_sequence_tab PA_FORECAST_GLOB.NumberTabTyp;
10717 l_wbs_level_tab PA_FORECAST_GLOB.NumberTabTyp;
10718 l_old_wbs_level_tab PA_FORECAST_GLOB.NumberTabTyp;
10719 l_wbs_number_tab PA_FORECAST_GLOB.VCTabTyp;
10720 l_record_version_tab PA_FORECAST_GLOB.NumberTabTyp;
10721 l_changed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10722
10723 l_wbs_number VARCHAR2(1000);
10724 src_branch_mask VARCHAR2(1000);
10725 ref_branch_mask VARCHAR2(1000);
10726 l_str1 VARCHAR2(1000);
10727 l_str2 VARCHAR2(1000);
10728 l_number NUMBER;
10729 l_new_wbs_number VARCHAR2(1000);
10730 l_user_id NUMBER;
10731 l_login_id NUMBER;
10732 l_update_new_child_rels VARCHAR2(1) := 'N';
10733 first_sub_task_below_src_flag boolean;
10734 last_sub_task_below_src VARCHAR2(1000);
10735 temp_old_branch_mask VARCHAR2(1000);
10736 temp_new_branch_mask VARCHAR2(1000);
10737 last_sub_task_number VARCHAR2(1000);
10738
10739 --bug 2843737
10740 CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
10741 select object_id_from1
10742 from pa_object_relationships
10743 where object_id_to1 = c_object_id_to1
10744 and relationship_type = 'S';
10745 l_ref_parent_ver_id NUMBER;
10746 --end bug 2843737
10747
10748 CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
10749 select wbs_number
10750 from pa_proj_element_versions
10751 where element_version_id = c_elem_ver_id
10752 and object_type ='PA_TASKS';
10753
10754 ref_parent_branch_mask VARCHAR2(1000);
10755
10756 -- hyau Bug 2852753
10757 l_delete_project_allowed VARCHAR2(1);
10758 l_update_proj_num_allowed VARCHAR2(1);
10759 l_update_proj_name_allowed VARCHAR2(1);
10760 l_update_proj_desc_allowed VARCHAR2(1);
10761 l_update_proj_dates_allowed VARCHAR2(1);
10762 l_update_proj_status_allowed VARCHAR2(1);
10763 l_update_proj_manager_allowed VARCHAR2(1);
10764 l_update_proj_org_allowed VARCHAR2(1);
10765 l_add_task_allowed VARCHAR2(1);
10766 l_delete_task_allowed VARCHAR2(1);
10767 l_update_task_num_allowed VARCHAR2(1);
10768 l_update_task_name_allowed VARCHAR2(1);
10769 l_update_task_dates_allowed VARCHAR2(1);
10770 l_update_task_desc_allowed VARCHAR2(1);
10771 l_update_parent_task_allowed VARCHAR2(1);
10772 l_update_task_org_allowed VARCHAR2(1);
10773
10774 l_err_code NUMBER := 0;
10775 l_err_stack VARCHAR2(200) := NULL;
10776 l_err_stage VARCHAR2(200) := NULL;
10777
10778 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
10779
10780 CURSOR get_product_code ( c_project_id NUMBER ) IS
10781 SELECT pm_product_code
10782 FROM PA_PROJECTS_ALL
10783 WHERE project_id = c_project_id;
10784
10785 l_cur_project_id NUMBER;
10786 CURSOR cur_proj_id
10787 IS
10788 SELECT project_id
10789 FROM pa_proj_element_versions
10790 WHERE element_version_id = p_structure_version_id;
10791
10792 -- end hyau Bug 2852753
10793
10794 -- Merged from 85
10795 --Bug 2947492 ( outdent )
10796
10797 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
10798 l_parent_task_id NUMBER;
10799 l_old_parent_task_id NUMBER;
10800 l_top_task_id NUMBER;
10801 l_old_top_task_id NUMBER;
10802 l_old_wbs_level NUMBER;
10803 i NUMBER;
10804
10805 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER )
10806 IS
10807 SELECT parent_task_id, top_task_id
10808 FROM pa_tasks
10809 WHERE project_id = c_project_id
10810 AND task_id = c_task_id;
10811
10812 CURSOR cur_new_child_task( c_project_id NUMBER, c_wbs_level NUMBER,
10813 c_task_id NUMBER , c_parent_task_id NUMBER )
10814 IS
10815 SELECT pt.task_id, pt.top_task_id, pt.parent_task_id
10816 FROM pa_tasks pt, pa_proj_element_versions ppev
10817 WHERE pt.wbs_level = c_wbs_level
10818 AND parent_task_id = c_parent_task_id
10819 AND pt.project_id = c_project_id
10820 AND pt.task_id = ppev.proj_element_id
10821 AND ppev.display_sequence > ( SELECT display_sequence FROM pa_proj_element_versions
10822 WHERE project_id = c_project_id
10823 AND object_type = 'PA_TASKS'
10824 AND proj_element_id = c_task_id );
10825
10826 --For financial tasks we can directly join with pa_proj-element_version using proj_element_id
10827 --bcoz this api will be called as long as there is only one version for financial otherwise
10828 --publishing will take care.
10829
10830 --End Bug 2947492 ( outdent )
10831 -- Merged from 85
10832
10833 --bug 3053281
10834 l_wp_type VARCHAR2(1);
10835 l_weighting_basis_Code VARCHAR2(30);
10836 --end bug 3053281
10837
10838 --3035902: process update flag changes
10839 cursor get_task_type_id(c_proj_element_id NUMBER) IS
10840 select type_id
10841 from pa_proj_elements
10842 where proj_element_id = c_proj_element_id;
10843 l_task_type_id NUMBER;
10844 l_wp_process_flag VARCHAR2(1);
10845 --3035902: end process update flag changes
10846
10847 --bug 3069306
10848 Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
10849 select object_id_to1
10850 from pa_object_relationships
10851 where relationshiP_type = 'S'
10852 and object_type_to = 'PA_TASKS'
10853 start with object_id_to1 = c_task_ver_id
10854 and object_type_to = 'PA_TASKS'
10855 and relationship_type = 'S'
10856 connect by prior object_id_from1 = object_id_to1
10857 and prior object_type_from = object_type_to
10858 and prior relationship_type = relationship_type
10859 intersect
10860 select a.object_id_to1
10861 from pa_object_relationships a, pa_proj_element_versions b
10862 where a.relationshiP_type = 'S'
10863 and a.object_id_from1 = b.parent_structure_version_id
10864 and b.element_version_id = c_task_ver_id
10865 and a.object_type_from = 'PA_STRUCTURES';
10866 l_old_par_ver_id NUMBER;
10867 l_new_par_ver_id NUMBER;
10868 --end bug 3069306
10869
10870 --bug 3301192
10871 /* Bug #: 3305199 SMukka */
10872 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
10873 /* l_task_ver_ids2 PA_PLSQL_DATATYPES.IdTabTyp; */
10874 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
10875 l_lowest_task_flag1 VARCHAR2(1);
10876 l_lowest_task_flag2 VARCHAR2(1);
10877 l_fin_task_flag VARCHAR2(1);
10878
10879 BEGIN
10880
10881 pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK');
10882
10883 IF (p_debug_mode = 'Y') THEN
10884 pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK begin');
10885 END IF;
10886
10887 IF (p_commit = FND_API.G_TRUE) THEN
10888 savepoint OUTDENT_task_version_bulk;
10889 END IF;
10890
10891 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
10892 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10893 END IF;
10894
10895 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
10896 FND_MSG_PUB.initialize;
10897 END IF;
10898
10899 --bug 4075697
10900 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
10901 --bug 4075697
10902
10903
10904 --3035902: process update flag changes
10905 l_wp_process_flag := 'N';
10906 --3035902: end process update flag changes
10907
10908 -- hyau Bug 2852753
10909 IF p_calling_module = 'SELF_SERVICE' THEN
10910
10911 OPEN cur_proj_id;
10912 FETCH cur_proj_id INTO l_cur_project_id;
10913 CLOSE cur_proj_id;
10914
10915 OPEN get_product_code(l_cur_project_id);
10916 FETCH get_product_code INTO l_pm_product_code;
10917 CLOSE get_product_code;
10918
10919 If l_pm_product_code IS NOT NULL THEN
10920 pa_pm_controls.Get_Project_actions_allowed
10921 (P_PM_PRODUCT_CODE => l_pm_product_code,
10922 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
10923 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
10924 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
10925 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
10926 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
10927 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
10928 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
10929 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
10930 P_ADD_TASK_ALLOWED => l_add_task_allowed,
10931 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
10932 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
10933 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
10934 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
10935 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
10936 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
10937 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
10938 P_ERROR_CODE => l_err_code,
10939 P_ERROR_STACK => l_err_stack,
10940 P_ERROR_STAGE => l_err_stage );
10941
10942 IF l_err_code <> 0 THEN
10943 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10944 p_msg_name => l_err_stage);
10945 END IF;
10946 IF l_update_parent_task_allowed = 'N' THEN
10947 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10948 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
10949 raise FND_API.G_EXC_ERROR;
10950 END IF;
10951 END IF;
10952 END IF;
10953
10954 -- end hyau Bug 2852753
10955
10956 IF (p_structure_version_id IS NOT NULL) AND
10957 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
10958 IF ('N' = pa_proj_elements_utils.check_task_in_structure(
10959 p_structure_version_id,
10960 p_task_version_id)) THEN
10961 --deleting linked task. Error
10962 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
10963 raise FND_API.G_EXC_ERROR;
10964 END IF;
10965 END IF;
10966
10967 --hsiu added, for dates rollup
10968 --need to get peer task before it has been outdented.
10969 OPEN get_peer_tasks;
10970 LOOP
10971 FETCH get_peer_tasks INTO c_get_peer_tasks;
10972 EXIT WHEN get_peer_tasks%NOTFOUND;
10973 l_tasks_ver_ids.extend;
10974 l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
10975 --added for task status rollup
10976 l_rollup_task_id := c_get_peer_tasks.object_id_to1;
10977 END LOOP;
10978 CLOSE get_peer_tasks;
10979
10980 -- Get Source Task Information
10981 BEGIN
10982 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
10983 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
10984 FROM PA_PROJ_ELEMENT_VERSIONS
10985 WHERE element_version_id = p_task_version_id
10986 AND project_id = p_project_id
10987 AND parent_structure_version_id = p_structure_version_id;
10988 EXCEPTION
10989 WHEN OTHERS THEN
10990 raise;
10991 END;
10992
10993
10994 -- Lifecycle Phase validation Changes should be implemented here
10995
10996 IF src_wbs_level = 1 then
10997 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
10998 ,p_msg_name => 'PA_PS_CANNOT_OUTDENT');
10999 raise FND_API.G_EXC_ERROR;
11000 END IF;
11001
11002 -- Get Refernce Task Information
11003
11004 BEGIN
11005 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
11006 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
11007 FROM PA_PROJ_ELEMENT_VERSIONS
11008 WHERE parent_structure_version_id = p_structure_version_id
11009 AND project_id = p_project_id
11010 AND (wbs_level = src_wbs_level-1)
11011 AND object_type = 'PA_TASKS'
11012 AND display_sequence =
11013 (SELECT max (display_sequence)
11014 FROM pa_proj_element_versions
11015 WHERE project_id = p_project_id
11016 AND parent_structure_version_id = p_structure_version_id
11017 AND (wbs_level = src_wbs_level-1)
11018 AND display_sequence < src_seq_number
11019 AND object_type = 'PA_TASKS');
11020 EXCEPTION
11021 WHEN OTHERS THEN
11022 raise;
11023 -- It will never return NO_DATA_FOUND as there will always at least one task with wbs_level-1
11024 END;
11025
11026 IF src_wbs_level < ref_wbs_level then
11027 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
11028 ,p_msg_name => 'PA_PS_CANNOT_OUTDENT');
11029 raise FND_API.G_EXC_ERROR;
11030 END IF;
11031
11032 -- While Outdenting always the source task will become peer of reference task
11033 l_peer_or_sub := 'PEER';
11034
11035 OPEN get_ref_parent_id(ref_elem_ver_id);
11036 FETCH get_ref_parent_id into l_ref_parent_ver_id;
11037 CLOSE get_ref_parent_id;
11038
11039 OPEN get_wbs_number(l_ref_parent_ver_id);
11040 FETCH get_wbs_number into ref_parent_branch_mask;
11041 CLOSE get_wbs_number;
11042
11043
11044 /* IF src_wbs_level = ref_wbs_level then
11045 l_peer_or_sub := 'SUB';
11046 ELSE
11047 l_peer_or_sub := 'PEER';
11048 END IF;
11049 */
11050
11051 -- Bug 8211519 : Dissallowing 'Outdenting' of a task if the task has a subproject association.
11052 if (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
11053 , src_proj_element_id
11054 , p_task_version_id),'N') = 'Y') then
11055
11056 IF (p_debug_mode = 'Y') THEN
11057 pa_debug.debug('ERROR !!! PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK ');
11058 END IF;
11059
11060 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11061 p_msg_name => 'PA_PS_TASK_HAS_SUB_PROJ');
11062 raise FND_API.G_EXC_ERROR;
11063
11064 end if;
11065
11066 --Check if ok to OUTDENT this task
11067 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
11068 p_task_ver_id => p_task_version_id
11069 ,x_return_status => l_return_status
11070 ,x_error_message_code => l_error_msg_code
11071 );
11072
11073 IF (l_return_status <> 'Y') THEN
11074 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11075 p_msg_name => l_error_msg_code);
11076 raise FND_API.G_EXC_ERROR;
11077 END IF;
11078
11079 --check if ok to create
11080 OPEN get_parent_version_id(ref_elem_ver_id);
11081 FETCH get_parent_version_id into l_parent_ver_id;
11082 CLOSE get_parent_version_id;
11083
11084 --bug 3069306
11085 --if financial task, check if changing parent ok
11086 IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
11087 OPEN get_top_task_ver_id(l_parent_ver_id);
11088 FETCH get_top_task_ver_id into l_new_par_ver_id;
11089 CLOSE get_top_task_ver_id;
11090
11091 OPEN get_top_task_ver_id(p_task_version_id);
11092 FETCH get_top_task_ver_id into l_old_par_ver_id;
11093 CLOSE get_top_task_Ver_id;
11094
11095 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
11096 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11097 p_msg_name => 'PA_CANT_CHANGE_PARENT');
11098 raise FND_API.G_EXC_ERROR;
11099 END IF;
11100 END IF;
11101 --end bug 3069306
11102
11103 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
11104 p_parent_task_ver_id => l_parent_ver_id
11105 ,x_return_status => l_return_status
11106 ,x_error_message_code => l_error_msg_code
11107 );
11108
11109 IF (l_return_status <> 'Y') THEN
11110 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11111 p_msg_name => l_error_msg_code);
11112 raise FND_API.G_EXC_ERROR;
11113 END IF;
11114
11115 -- Added for FP_M changes. Bug 3305199 : Bhumesh xxx
11116
11117 If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
11118 IN ('SHARE_PARTIAL')
11119 Then
11120
11121 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
11122 p_task_version_id => p_task_version_id
11123 , p_ref_task_version_id => ref_elem_ver_id
11124 , x_return_status => x_return_status
11125 , x_msg_count => x_msg_count
11126 , x_msg_data => x_msg_data
11127 , x_error_msg_code => l_error_msg_code);
11128
11129 -- IF (x_return_status <> 'Y') THEN --Bug 3831786 Commented
11130 IF (x_return_status <> 'S') THEN --Bug 3831786 Added
11131 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11132 p_msg_name => l_error_msg_code);
11133 raise FND_API.G_EXC_ERROR;
11134 End If;
11135 End If;
11136
11137 --check the task is a lowest task bug 3301192
11138 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
11139
11140 -- End of FP_M changes
11141
11142 /*
11143
11144 The processing done by the followig two calls is made now as plsql table bulk processing
11145
11146 PA_TASK_PUB1.Update_Task_Version
11147 ( p_validate_only => FND_API.G_FALSE,
11148 p_ref_task_version_id => l_ref_task_version_id,
11149 p_peer_or_sub => 'PEER',
11150 p_task_version_id => p_task_version_id,
11151 p_record_version_number => p_record_version_number,
11152 p_action => 'OUTDENT',
11153 x_return_status => l_return_status,
11154 x_msg_count => l_msg_count,
11155 x_msg_data => l_msg_data );
11156
11157 PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
11158 ( p_commit => p_commit
11159 ,p_debug_mode => p_debug_mode
11160 ,p_parent_structure_ver_id => l_parent_structure_version_id
11161 ,p_task_id => p_task_version_id
11162 ,p_display_seq => l_display_sequence
11163 ,p_action => 'OUTDENT'
11164 ,p_parent_task_id => NULL
11165 ,x_return_status => l_return_status );
11166
11167 */
11168
11169
11170 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
11171
11172 -- Logic Added for plsql table
11173 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
11174
11175 l_element_version_id_tab.delete;
11176 l_proj_element_id_tab.delete;
11177 l_object_type_tab.delete;
11178 l_project_id_tab.delete;
11179 l_parent_str_version_id_tab.delete;
11180 l_display_sequence_tab.delete;
11181 l_wbs_level_tab.delete;
11182 l_old_wbs_level_tab.delete;
11183 l_wbs_number_tab.delete;
11184 l_record_version_tab.delete;
11185 l_changed_flag_tab.delete;
11186
11187 BEGIN
11188 SELECT distinct element_version_id, proj_element_id, object_type,
11189 project_id, parent_structure_version_id,
11190 display_sequence, wbs_level, wbs_number,
11191 record_version_number, 'N' changed_flag
11192 BULK COLLECT INTO l_element_version_id_tab,
11193 l_proj_element_id_tab, l_object_type_tab,
11194 l_project_id_tab, l_parent_str_version_id_tab,
11195 l_display_sequence_tab, l_wbs_level_tab,
11196 l_wbs_number_tab, l_record_version_tab,
11197 l_changed_flag_tab
11198 FROM
11199 pa_proj_element_versions
11200 WHERE
11201 project_id = p_project_id
11202 AND parent_structure_version_id = p_structure_version_id
11203 AND object_type = 'PA_TASKS'
11204 AND(
11205 element_version_id = p_task_version_id -- Source task itself
11206 OR element_version_id IN -- All tasks below the source task
11207 (select object_id_to1
11208 from pa_object_relationships
11209 where relationship_type = 'S'
11210 and object_type_to = 'PA_TASKS'
11211 start with object_id_from1 = l_ref_parent_ver_id
11212 connect by object_id_from1 = PRIOR object_id_to1
11213 and relationship_type = prior relationship_type
11214 and relationship_type = 'S')
11215 )
11216 ORDER BY display_sequence ;
11217 l_old_wbs_level_tab := l_wbs_level_tab;
11218 EXCEPTION
11219 WHEN OTHERS THEN
11220 raise;
11221 END;
11222
11223 --bug 4214825, commented out this code as this validation is not required in case of outdent
11224 /*--bug 3475920
11225 --Need loop to check all new subtasks and see if ok (for deliverable type task)
11226 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11227 --check if moving to subtask ok
11228 IF (l_element_version_id_tab(j) <> p_task_version_id) Then
11229 IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_element_version_id_tab(j)) = 'Y' THEN
11230 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11231 p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
11232 raise FND_API.G_EXC_ERROR;
11233 END IF;
11234 END IF;
11235 END LOOP;
11236 --end bug 3475920*/
11237
11238
11239 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
11240 -- Here we can also incorporate sequence number update. In OUTDENT sequence number does not change.
11241
11242 -- Update wbs level
11243
11244 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11245 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
11246 l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
11247 l_changed_flag_tab(j) := 'Y';
11248 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
11249 -- Direct Childs of source
11250 l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
11251 l_changed_flag_tab(j) := 'Y';
11252 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
11253 -- Exit level changes, IT means no Direct childs are left
11254 EXIT;
11255 END IF;
11256 END LOOP;
11257
11258
11259 -- Update wbs_number
11260
11261
11262 src_branch_mask := src_wbs_number;
11263 ref_branch_mask := ref_wbs_number;
11264 first_sub_task_below_src_flag := false;
11265
11266
11267 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11268 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
11269 IF src_wbs_level = 2 THEN -- This is going to be a top task
11270 l_wbs_number := to_char(to_number(ref_wbs_number)+1);
11271 l_wbs_number_tab(j) := l_wbs_number;
11272 l_changed_flag_tab(j) := 'Y';
11273 l_new_wbs_number := l_wbs_number;
11274 ELSE
11275 l_number := instr(ref_wbs_number,'.', -1, 1);
11276 l_str1 := substr(ref_wbs_number, 1, l_number -1);
11277 l_str2 := substr(ref_wbs_number, l_number + 1);
11278 l_str2 := to_char(to_number(l_str2 + 1));
11279 l_wbs_number := l_str1 || '.' || l_str2;
11280 l_wbs_number_tab(j) := l_wbs_number;
11281 l_changed_flag_tab(j) := 'Y';
11282 l_new_wbs_number := l_wbs_number;
11283 END IF;
11284 ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
11285 IF l_display_sequence_tab(j) > src_seq_number THEN
11286 IF src_wbs_level = 2 THEN -- Source is going to be a top task
11287 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
11288 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
11289 -- Direct childs of source
11290 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
11291 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11292 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
11293 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
11294 l_wbs_number_tab(j) := l_wbs_number;
11295 l_changed_flag_tab(j) := 'Y';
11296 IF l_old_wbs_level_tab(j) = src_wbs_level+1 THEN
11297 first_sub_task_below_src_flag := true;
11298 last_sub_task_below_src := l_wbs_number;
11299 END IF;
11300 ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
11301 AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
11302 IF first_sub_task_below_src_flag = false THEN
11303 l_wbs_number := l_new_wbs_number || '.1';
11304 first_sub_task_below_src_flag := true;
11305 last_sub_task_below_src := l_wbs_number;
11306 temp_old_branch_mask := l_wbs_number_tab(j);
11307 temp_new_branch_mask := l_wbs_number;
11308 l_wbs_number_tab(j) := l_wbs_number;
11309 l_changed_flag_tab(j) := 'Y';
11310 ELSE
11311 IF (l_old_wbs_level_tab(j) = src_wbs_level) THEN
11312 l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
11313 l_str1 := to_char(to_number(l_str1 + 1));
11314 l_wbs_number := l_new_wbs_number || '.' || l_str1;
11315 temp_old_branch_mask := l_wbs_number_tab(j);
11316 temp_new_branch_mask := l_wbs_number;
11317 l_wbs_number_tab(j) := l_wbs_number;
11318 l_changed_flag_tab(j) := 'Y';
11319 last_sub_task_below_src := l_wbs_number;
11320 ELSE
11321 l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
11322 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11323 l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
11324 l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
11325 l_wbs_number_tab(j) := l_wbs_number;
11326 l_changed_flag_tab(j) := 'Y';
11327 END IF;
11328 END IF;
11329 ELSE
11330 IF(instr(l_wbs_number_tab(j), '.') <> 0) then
11331 l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
11332 l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
11333 l_str1 := to_char(to_number(l_str1) + 1);
11334 l_wbs_number := l_str1 || l_str2;
11335 l_wbs_number_tab(j) := l_wbs_number;
11336 l_changed_flag_tab(j) := 'Y';
11337 ELSE
11338 l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) + 1);
11339 l_wbs_number_tab(j) := l_wbs_number;
11340 l_changed_flag_tab(j) := 'Y';
11341 END IF;
11342 END IF;
11343 ELSE
11344 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
11345 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
11346 -- Direct childs of source
11347 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
11348 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11349 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
11350 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
11351 l_wbs_number_tab(j) := l_wbs_number;
11352 l_changed_flag_tab(j) := 'Y';
11353 IF (l_old_wbs_level_tab(j) = src_wbs_level+1) THEN
11354 first_sub_task_below_src_flag := true;
11355 last_sub_task_below_src := l_wbs_number;
11356 END IF;
11357 ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
11358 AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
11359 IF first_sub_task_below_src_flag = false THEN
11360 l_wbs_number := l_new_wbs_number || '.1';
11361 first_sub_task_below_src_flag := true;
11362 last_sub_task_below_src := l_wbs_number;
11363 temp_old_branch_mask := l_wbs_number_tab(j);
11364 temp_new_branch_mask := l_wbs_number;
11365 l_wbs_number_tab(j) := l_wbs_number;
11366 l_changed_flag_tab(j) := 'Y';
11367 ELSE
11368 IF l_old_wbs_level_tab(j) = src_wbs_level THEN
11369 l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
11370 l_str1 := to_char(to_number(l_str1 + 1));
11371 l_wbs_number := l_new_wbs_number || '.' || l_str1;
11372 temp_old_branch_mask := l_wbs_number_tab(j);
11373 temp_new_branch_mask := l_wbs_number;
11374 l_wbs_number_tab(j) := l_wbs_number;
11375 l_changed_flag_tab(j) := 'Y';
11376 last_sub_task_below_src := l_wbs_number;
11377 ELSE
11378 l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
11379 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11380 l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
11381 l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
11382 l_wbs_number_tab(j) := l_wbs_number;
11383 l_changed_flag_tab(j) := 'Y';
11384 END IF;
11385 END IF;
11386 ELSE
11387 l_str1 := substr(l_wbs_number_tab(j), length(ref_parent_branch_mask) + 2);
11388 IF(instr(l_str1, '.') <> 0) THEN
11389 l_str2 := substr(l_str1, instr(l_str1, '.'));
11390 l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
11391 l_str1 := to_char(to_number(l_str1) + 1);
11392 l_wbs_number := ref_parent_branch_mask || '.' || l_str1 || l_str2;
11393 l_wbs_number_tab(j) := l_wbs_number;
11394 l_changed_flag_tab(j) := 'Y';
11395 ELSE
11396 l_str1:= to_char(to_number(l_str1) + 1);
11397 l_wbs_number := ref_parent_branch_mask || '.' || l_str1;
11398 l_wbs_number_tab(j) := l_wbs_number;
11399 l_changed_flag_tab(j) := 'Y';
11400 END IF;
11401 END IF;
11402 END IF;
11403 END IF;
11404 END IF;
11405 END LOOP;
11406
11407
11408 l_user_id := fnd_global.user_id;
11409 l_login_id := fnd_global.login_id;
11410
11411 -- Locking should be implemented here
11412
11413 FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
11414 UPDATE PA_PROJ_ELEMENT_VERSIONS
11415 SET
11416 wbs_level = l_wbs_level_tab(j) ,
11417 wbs_number = l_wbs_number_tab(j) ,
11418 last_update_date = sysdate ,
11419 last_updated_by = l_user_id ,
11420 last_update_login = l_login_id ,
11421 record_version_number = l_record_version_tab(j)+1
11422 WHERE element_version_id = l_element_version_id_tab(j)
11423 AND l_changed_flag_tab(j)='Y';
11424
11425
11426 -- Update Relationship
11427
11428 IF ref_object_type = 'PA_TASKS'
11429 THEN
11430 IF l_peer_or_sub = 'PEER'
11431 THEN
11432 OPEN cur_obj_rel( ref_elem_ver_id );
11433 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
11434 CLOSE cur_obj_rel;
11435
11436 l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
11437
11438 IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
11439 THEN
11440 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
11441 l_task_version_from := null;
11442 ELSE
11443 l_task_version_from := v_cur_obj_rel_rec.object_id_from1;
11444 l_struc_version_from := null;
11445 END IF;
11446
11447 --There could be some tasks with sequence number greater than the p_task_version that now become
11448 --children of p_task_version.
11449 -- I don't think so that this is needed. This is not possible in any case
11450 l_update_new_child_rels := 'Y';
11451
11452 ELSE -- l_peer_or_sub = 'SUB' Basically this case will not be for OUTDENT
11453 --parent task is the reference task
11454 l_task_version_from := ref_elem_ver_id;
11455 l_struc_version_from := null;
11456 l_relationship_subtype := 'TASK_TO_TASK';
11457 END IF;
11458 -- The following case is not possible for Indent/Outdent
11459 ELSIF ref_object_type = 'PA_STRUCTURES'
11460 THEN
11461 l_struc_version_from := ref_elem_ver_id;
11462 l_task_version_from := null;
11463 l_relationship_subtype := 'STRUCTURE_TO_TASK';
11464 END IF; -- ref_object_type = 'PA_TASKS'
11465
11466
11467 --update relatonship of the task version p_task_version.
11468 --set structure_version_from and task_version_from accordingly.
11469 OPEN cur_obj_rel( p_task_version_id );
11470 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
11471 CLOSE cur_obj_rel;
11472
11473 --for task weighting
11474 OPEN get_task_weighting(p_task_version_id);
11475 FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
11476 CLOSE get_task_weighting;
11477
11478
11479 IF(l_task_version_from is not null) THEN
11480 l_version_from := l_task_version_from;
11481 ELSE
11482 l_version_from := l_struc_version_from;
11483 END IF;
11484
11485 IF (l_version_from = p_task_version_id) THEN
11486 l_new_weighting := l_old_weighting;
11487 ELSE
11488 OPEN get_sub_tasks(l_version_from);
11489 FETCH get_sub_tasks into l_dummy;
11490 IF (get_sub_tasks%NOTFOUND) THEN
11491 l_new_weighting := 100;
11492 --bug 2673570
11493 OPEN check_progress_allowed(p_task_version_id);
11494 FETCH check_progress_allowed INTO l_progress_allowed;
11495 CLOSE check_progress_allowed;
11496
11497 if l_progress_allowed = 'N' then
11498 l_new_weighting := 0;
11499 end if;
11500 --bug 2673570
11501 ELSE
11502 l_new_weighting := 0;
11503 END IF;
11504 CLOSE get_sub_tasks;
11505 END IF;
11506
11507 PA_RELATIONSHIP_PVT.Update_Relationship
11508 (
11509 p_api_version => p_api_version
11510 ,p_init_msg_list => p_init_msg_list
11511 ,p_commit => p_commit
11512 ,p_validate_only => p_validate_only
11513 ,p_validation_level => p_validation_level
11514 ,p_calling_module => p_calling_module
11515 ,p_debug_mode => p_debug_mode
11516 ,p_max_msg_count => p_max_msg_count
11517 ,p_object_relationship_id => v_cur_obj_rel_rec.object_relationship_id
11518 ,p_project_id_from => null
11519 ,p_structure_id_from => null
11520 ,p_structure_version_id_from => l_struc_version_from
11521 ,p_task_version_id_from => l_task_version_from
11522 ,p_project_id_to => null
11523 ,p_structure_id_to => null
11524 ,p_structure_version_id_to => null
11525 ,p_task_version_id_to => p_task_version_id
11526 ,p_relationship_type => 'S'
11527 ,p_relationship_subtype => l_relationship_subtype
11528 ,p_weighting_percentage => l_new_weighting
11529 ,p_record_version_number => v_cur_obj_rel_rec.record_version_number
11530 ,x_return_status => l_return_status
11531 ,x_msg_count => l_msg_count
11532 ,x_msg_data => l_msg_data
11533 );
11534
11535
11536 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11537 x_msg_count := FND_MSG_PUB.count_msg;
11538 IF x_msg_count = 1 then
11539 pa_interface_utils_pub.get_messages
11540 (p_encoded => FND_API.G_TRUE,
11541 p_msg_index => 1,
11542 p_msg_count => l_msg_count,
11543 p_msg_data => l_msg_data,
11544 p_data => l_data,
11545 p_msg_index_out => l_msg_index_out);
11546 x_msg_data := l_data;
11547 END IF;
11548 raise FND_API.G_EXC_ERROR;
11549 END IF;
11550
11551 -- I don't think the following code is needed. This case is impossible in case of OUTDENT
11552 IF l_update_new_child_rels = 'Y' -- AND p_action IN( 'OUTDENT' )
11553 THEN
11554 FOR cur_new_child_rec in cur_new_child(ref_elem_ver_id, src_seq_number) LOOP
11555 OPEN get_sub_tasks(p_task_version_id);
11556 FETCH get_sub_tasks into l_dummy;
11557 IF (get_sub_tasks%NOTFOUND) THEN
11558 l_new_weighting := 100;
11559 ELSE
11560 l_new_weighting := 0;
11561 END IF;
11562 CLOSE get_sub_tasks;
11563
11564 --bug 4099488
11565 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_task_version_id, cur_new_child_rec.object_id_to1) = 'N' THEN
11566 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11567 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
11568 raise FND_API.G_EXC_ERROR;
11569 END IF;
11570 --end bug 4099488
11571
11572 PA_RELATIONSHIP_PVT.Update_Relationship
11573 (
11574 p_api_version => p_api_version
11575 ,p_init_msg_list => p_init_msg_list
11576 ,p_commit => p_commit
11577 ,p_validate_only => p_validate_only
11578 ,p_validation_level => p_validation_level
11579 ,p_calling_module => p_calling_module
11580 ,p_debug_mode => p_debug_mode
11581 ,p_max_msg_count => p_max_msg_count
11582 ,p_object_relationship_id => cur_new_child_rec.object_relationship_id
11583 ,p_project_id_from => null
11584 ,p_structure_id_from => null
11585 ,p_structure_version_id_from => null
11586 ,p_task_version_id_from => p_task_version_id
11587 ,p_project_id_to => null
11588 ,p_structure_id_to => null
11589 ,p_structure_version_id_to => null
11590 ,p_task_version_id_to => cur_new_child_rec.object_id_to1
11591 ,p_relationship_type => 'S'
11592 ,p_relationship_subtype => 'TASK_TO_TASK'
11593 ,p_weighting_percentage => l_new_weighting
11594 ,p_record_version_number => cur_new_child_rec.record_version_number
11595 ,x_return_status => x_return_status
11596 ,x_msg_count => x_msg_count
11597 ,x_msg_data => x_msg_data
11598 );
11599
11600 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11601 x_msg_count := FND_MSG_PUB.count_msg;
11602 IF x_msg_count = 1 then
11603 pa_interface_utils_pub.get_messages
11604 (p_encoded => FND_API.G_TRUE,
11605 p_msg_index => 1,
11606 p_msg_count => l_msg_count,
11607 p_msg_data => l_msg_data,
11608 p_data => l_data,
11609 p_msg_index_out => l_msg_index_out);
11610 x_msg_data := l_data;
11611 END IF;
11612 raise FND_API.G_EXC_ERROR;
11613 END IF;
11614
11615 END LOOP;
11616 END IF;
11617
11618 --for task weighting
11619 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
11620 p_task_version_id => l_old_parent_id
11621 ,x_return_status => l_return_status
11622 ,x_msg_count => l_msg_count
11623 ,x_msg_data => l_msg_data
11624 );
11625
11626 x_msg_count := FND_MSG_PUB.count_msg;
11627 IF x_msg_count = 1 then
11628 pa_interface_utils_pub.get_messages
11629 (p_encoded => FND_API.G_TRUE,
11630 p_msg_index => 1,
11631 p_msg_count => l_msg_count,
11632 p_msg_data => l_msg_data,
11633 p_data => l_data,
11634 p_msg_index_out => l_msg_index_out);
11635 x_msg_data := l_data;
11636 END IF;
11637
11638 --bug 2673570
11639 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
11640 p_task_version_id => p_task_version_id
11641 ,x_return_status => l_return_status
11642 ,x_msg_count => l_msg_count
11643 ,x_msg_data => l_msg_data
11644 );
11645
11646 x_msg_count := FND_MSG_PUB.count_msg;
11647 IF x_msg_count = 1 then
11648 pa_interface_utils_pub.get_messages
11649 (p_encoded => FND_API.G_TRUE,
11650 p_msg_index => 1,
11651 p_msg_count => l_msg_count,
11652 p_msg_data => l_msg_data,
11653 p_data => l_data,
11654 p_msg_index_out => l_msg_index_out);
11655 x_msg_data := l_data;
11656 END IF;
11657 --bug 2673570
11658 --end changes for task weighting
11659
11660
11661 /*** End Update_task_version and Update_wbs_number code ***/
11662
11663 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
11664 FROM pa_proj_element_versions
11665 WHERE element_version_id = ( Select parent_structure_version_id
11666 from pa_proj_element_versions
11667 where element_version_id = p_task_version_id )
11668 AND object_type = 'PA_STRUCTURES';
11669
11670
11671 --Do financial task check
11672 --If financial
11673 OPEN cur_struc_type( l_structure_id );
11674 FETCH cur_struc_type INTO l_dummy_char;
11675 IF cur_struc_type%FOUND
11676 THEN
11677 --If structure has any published versions.
11678 l_published_version := 'N';
11679 OPEN cur_pub_versions( l_structure_id, l_project_id );
11680 FETCH cur_pub_versions INTO l_published_version;
11681 CLOSE cur_pub_versions;
11682
11683
11684 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
11685 l_project_id);
11686 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
11687 l_project_id);
11688
11689 --o IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y') THEN
11690 l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --outdent in corresponding task in pa_tasks
11691
11692 IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
11693 (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
11694 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
11695 THEN
11696
11697 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
11698 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
11699 FROM PA_TASKS pt,
11700 pa_proj_elem_ver_structure ppa,
11701 PA_PROJ_ELEMENT_VERSIONS ppev
11702 WHERE ppev.element_version_id = p_task_version_id
11703 AND ppev.parent_structure_version_id = ppa.element_version_id
11704 AND ppev.project_id = ppa.project_id
11705 AND ppev.proj_element_id = pt.task_id;
11706
11707 -- Merged from 85
11708 SELECT record_version_number, parent_task_id, wbs_level --get old parent id for bug 2947492 (outdent )
11709 ,top_task_id
11710 INTO l_task_record_version_number, l_old_parent_task_id, l_old_wbs_level
11711 ,l_old_top_task_id
11712 FROM pa_tasks
11713 WHERE task_id = l_task_id
11714 AND project_id = l_project_id;
11715 -- Merged from 85
11716
11717 -- Merged from 85
11718 --Bug 2947492 ( outdent )
11719
11720 --The following cursor will pick those taks that become child tasks of outdenting task
11721 --which were initially at the same level with display sequence greater than the outdenting task.
11722 /*
11723 i:= 0;
11724 FOR cur_new_child_task_rec in cur_new_child_task( l_project_id, l_old_wbs_level,
11725 l_task_id, l_old_parent_task_id ) LOOP
11726
11727 i := i + 1;
11728
11729 l_plannable_tasks_tbl(i).impacted_task_id := cur_new_child_task_rec.task_id;
11730 l_plannable_tasks_tbl(i).action := 'REPARENT';
11731 l_plannable_tasks_tbl(i).old_parent_task_id := cur_new_child_task_rec.parent_task_id;
11732 l_plannable_tasks_tbl(i).New_parent_task_id := l_task_id;
11733 l_plannable_tasks_tbl(i).top_task_id := cur_new_child_task_rec.top_task_id;
11734
11735 --First call the check_reparent ok
11736 --This should have been called in the beginning but due to lot of complexity involved in getting
11737 --new parent task id it is decided to call this later stage as long as we rollback the whole operation
11738 --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
11739
11740 PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
11741 p_task_id => cur_new_child_task_rec.task_id
11742 ,p_old_parent_task_id => cur_new_child_task_rec.parent_task_id
11743 ,p_new_parent_task_id => l_task_id
11744 ,x_return_status => l_return_status
11745 ,x_msg_count => l_msg_count
11746 ,x_msg_data => l_msg_data
11747 );
11748
11749 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11750 x_msg_count := FND_MSG_PUB.count_msg;
11751 IF x_msg_count = 1 then
11752 pa_interface_utils_pub.get_messages
11753 (p_encoded => FND_API.G_TRUE,
11754 p_msg_index => 1,
11755 p_msg_count => l_msg_count,
11756 p_msg_data => l_msg_data,
11757 p_data => l_data,
11758 p_msg_index_out => l_msg_index_out);
11759 x_msg_data := l_data;
11760 END IF;
11761 raise FND_API.G_EXC_ERROR;
11762 END IF;
11763
11764 END LOOP;
11765 --End Bug 2947492 ( outdent )
11766 */ ---commenitng out, please check venkatesh mail dated 22 jan 04
11767
11768 -- Merged from 85
11769
11770 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
11771 p_project_id => l_project_id
11772 ,p_task_id => l_task_id
11773 ,p_edit_mode => 'OUTDENT'
11774 ,p_record_version_number => l_task_record_version_number
11775 ,p_wbs_record_version_number => 1
11776 ,x_return_status => l_return_status
11777 ,x_msg_count => l_msg_count
11778 ,x_msg_data => l_msg_data );
11779
11780 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11781 x_msg_count := FND_MSG_PUB.count_msg;
11782 IF x_msg_count = 1 then
11783 pa_interface_utils_pub.get_messages
11784 (p_encoded => FND_API.G_TRUE,
11785 p_msg_index => 1,
11786 p_msg_count => l_msg_count,
11787 p_msg_data => l_msg_data,
11788 p_data => l_data,
11789 p_msg_index_out => l_msg_index_out);
11790 x_msg_data := l_data;
11791 END IF;
11792 raise FND_API.G_EXC_ERROR;
11793 END IF;
11794
11795 --Bug 2947492 (outdent )
11796 --
11797
11798 OPEN get_parent_task_id( l_task_id , l_project_id );
11799 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
11800 CLOSE get_parent_task_id;
11801
11802 --bug 2967204
11803 --Cannot move out of the current hierarchy
11804 IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
11805 THEN
11806 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11807 p_msg_name => 'PA_CANT_CHANGE_PARENT');
11808 raise FND_API.G_EXC_ERROR;
11809 END IF;
11810 --End bug 2967204
11811
11812 /*
11813 --First call the check_reparent ok
11814 --This should have been called in the beginning but due to lot of complexity involved in getting
11815 --new parent task id it is decided to call this later stage as long as we rollback the whole operation
11816 --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
11817 PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
11818 p_task_id => l_task_id
11819 ,p_old_parent_task_id => l_old_parent_task_id
11820 ,p_new_parent_task_id => l_parent_task_id
11821 ,x_return_status => l_return_status
11822 ,x_msg_count => l_msg_count
11823 ,x_msg_data => l_msg_data
11824 );
11825
11826 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11827 x_msg_count := FND_MSG_PUB.count_msg;
11828 IF x_msg_count = 1 then
11829 pa_interface_utils_pub.get_messages
11830 (p_encoded => FND_API.G_TRUE,
11831 p_msg_index => 1,
11832 p_msg_count => l_msg_count,
11833 p_msg_data => l_msg_data,
11834 p_data => l_data,
11835 p_msg_index_out => l_msg_index_out);
11836 x_msg_data := l_data;
11837 END IF;
11838 raise FND_API.G_EXC_ERROR;
11839 END IF;
11840 */ --check venkatesh mail dated 22 jan 04
11841
11842 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
11843 i := NVL( l_plannable_tasks_tbl.last, 0 ) + 1;
11844
11845 l_plannable_tasks_tbl(i).impacted_task_id := l_task_id;
11846 l_plannable_tasks_tbl(i).action := 'REPARENT';
11847 l_plannable_tasks_tbl(i).old_parent_task_id := l_old_parent_task_id;
11848 l_plannable_tasks_tbl(i).New_parent_task_id := l_parent_task_id;
11849 l_plannable_tasks_tbl(i).top_task_id := l_top_task_id;
11850
11851
11852 PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
11853 p_project_id => p_project_id
11854 , p_impacted_tasks_tbl => l_plannable_tasks_tbl
11855 , x_return_status => l_return_status
11856 , x_msg_data => l_msg_data
11857 , x_msg_count => l_msg_count
11858 );
11859
11860 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11861 x_msg_count := FND_MSG_PUB.count_msg;
11862 IF x_msg_count = 1 then
11863 pa_interface_utils_pub.get_messages
11864 (p_encoded => FND_API.G_TRUE,
11865 p_msg_index => 1,
11866 p_msg_count => l_msg_count,
11867 p_msg_data => l_msg_data,
11868 p_data => l_data,
11869 p_msg_index_out => l_msg_index_out);
11870 x_msg_data := l_data;
11871 END IF;
11872 raise FND_API.G_EXC_ERROR;
11873 END IF;
11874 bug 3010538 */
11875
11876 --End Bug 2947492 (outdent )
11877
11878 END IF;
11879 END IF;
11880 CLOSE cur_struc_type;
11881
11882 -- Added for date rollup; workplan only
11883
11884 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
11885
11886 -- Added for FP_M changes Bug 3305199 : Bhumesh
11887 If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
11888
11889 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
11890 p_structure_version_id => P_Structure_Version_ID
11891 ,p_dirty_flag => 'Y' --bug 3902282
11892 ,x_return_status => x_return_status
11893 ,x_msg_count => x_msg_count
11894 ,x_msg_data => x_msg_data
11895 );
11896
11897 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
11898 x_msg_count := FND_MSG_PUB.count_msg;
11899 If x_msg_count = 1 then
11900 pa_interface_utils_pub.get_messages
11901 (p_encoded => FND_API.G_TRUE,
11902 p_msg_index => 1,
11903 p_msg_count => l_msg_count,
11904 p_msg_data => l_msg_data,
11905 p_data => l_data,
11906 p_msg_index_out => l_msg_index_out);
11907 x_msg_data := l_data;
11908 End If;
11909 raise FND_API.G_EXC_ERROR;
11910 End If;
11911 End If;
11912 -- End of FP_M changes
11913
11914 l_tasks_ver_ids.extend;
11915 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
11916
11917 --added for task status rollup
11918 IF (l_rollup_task_id IS NULL) THEN
11919 l_rollup_task_id := p_task_version_id;
11920 END IF;
11921
11922 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
11923 p_commit => FND_API.G_FALSE,
11924 p_element_versions => l_tasks_ver_ids,
11925 x_return_status => l_return_status,
11926 x_msg_count => l_msg_count,
11927 x_msg_data => l_msg_data);
11928
11929 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
11930 x_msg_count := FND_MSG_PUB.count_msg;
11931 if x_msg_count = 1 then
11932 pa_interface_utils_pub.get_messages
11933 (p_encoded => FND_API.G_TRUE,
11934 p_msg_index => 1,
11935 p_msg_count => l_msg_count,
11936 p_msg_data => l_msg_data,
11937 p_data => l_data,
11938 p_msg_index_out => l_msg_index_out);
11939 x_msg_data := l_data;
11940 end if;
11941 raise FND_API.G_EXC_ERROR;
11942 end if;
11943
11944 --if versioning is off, rollup.
11945 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
11946 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
11947 p_structure_version_id => p_structure_version_id
11948 ,p_element_version_id => l_rollup_task_id
11949 ,x_return_status => l_return_status
11950 ,x_msg_count => l_msg_count
11951 ,x_msg_data => l_msg_data
11952 );
11953
11954 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
11955 x_msg_count := FND_MSG_PUB.count_msg;
11956 if x_msg_count = 1 then
11957 pa_interface_utils_pub.get_messages
11958 (p_encoded => FND_API.G_TRUE,
11959 p_msg_index => 1,
11960 p_msg_count => l_msg_count,
11961 p_msg_data => l_msg_data,
11962 p_data => l_data,
11963 p_msg_index_out => l_msg_index_out);
11964 x_msg_data := l_data;
11965 end if;
11966 raise FND_API.G_EXC_ERROR;
11967 end if;
11968 END IF;
11969
11970 END IF;
11971
11972 --bug 3010538 ( outdent )
11973 --bug 3053281 --set flag if not (manual and workplan only)
11974 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
11975 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
11976 /*
11977 IF (l_shared = 'N') AND
11978 (l_wp_type = 'Y') AND
11979 (l_weighting_basis_Code = 'MANUAL') THEN
11980 --do not set the flag to 'Y'
11981 NULL;
11982 ELSE
11983 */
11984 --3035902: process update flag changes
11985 OPEN get_task_type_id(src_proj_element_id);
11986 FETCH get_task_type_id INTO l_task_type_id;
11987 CLOSE get_task_type_id;
11988
11989 --set update process flag if necessary;
11990 IF (l_wp_process_flag = 'N') THEN
11991 --may need to update process flag
11992 IF ((l_shared = 'N') AND
11993 (l_wp_type = 'Y') AND
11994 (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
11995 (l_weighting_basis_code <> 'MANUAL'))
11996 THEN
11997 --split and workplan; only update if progressable task added
11998 l_wp_process_flag := 'Y';
11999 ELSIF ((l_shared = 'N') AND
12000 (l_wp_type = 'N')) THEN
12001 --split and financial; update
12002 l_wp_process_flag := 'Y';
12003 ELSIF (l_shared = 'Y') THEN
12004 l_wp_process_flag := 'Y';
12005 END IF;
12006 END IF;
12007
12008 --Bug No 3450684 SMukka Commented if condition
12009 --IF (l_wp_process_flag = 'Y') THEN
12010 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
12011 (
12012 p_calling_context => 'SELF_SERVICE'
12013 ,p_project_id => p_project_id
12014 ,p_structure_version_id => p_structure_version_id
12015 ,p_update_wbs_flag => 'Y'
12016 ,x_return_status => l_return_status
12017 ,x_msg_count => l_msg_count
12018 ,x_msg_data => l_msg_data);
12019
12020 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12021 x_msg_count := FND_MSG_PUB.count_msg;
12022 if x_msg_count = 1 then
12023 pa_interface_utils_pub.get_messages
12024 (p_encoded => FND_API.G_TRUE,
12025 p_msg_index => 1,
12026 p_msg_count => l_msg_count,
12027 p_msg_data => l_msg_data,
12028 p_data => l_data,
12029 p_msg_index_out => l_msg_index_out);
12030 x_msg_data := l_data;
12031 end if;
12032 raise FND_API.G_EXC_ERROR;
12033 end if;
12034 --end if;
12035 --3035902: end process update flag changes
12036
12037 --ideally the following calls should have been cached. but due to time constraints
12038 --we need to write the code this way in multiple places.
12039 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
12040 THEN
12041 IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and l_published_version = 'N' ) THEN
12042
12043 --Outdent
12044 pa_fp_refresh_elements_pub.set_process_flag_proj(
12045 p_project_id => p_project_id
12046 ,p_request_id => null
12047 ,p_process_code => null
12048 ,p_refresh_required_flag => 'Y'
12049 ,x_return_status => l_return_status
12050 ,x_msg_count => l_msg_count
12051 ,x_msg_data => l_msg_data );
12052
12053 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12054 x_msg_count := FND_MSG_PUB.count_msg;
12055 if x_msg_count = 1 then
12056 pa_interface_utils_pub.get_messages
12057 (p_encoded => FND_API.G_TRUE,
12058 p_msg_index => 1,
12059 p_msg_count => l_msg_count,
12060 p_msg_data => l_msg_data,
12061 p_data => l_data,
12062 p_msg_index_out => l_msg_index_out);
12063 x_msg_data := l_data;
12064 end if;
12065 raise FND_API.G_EXC_ERROR;
12066 end if;
12067 END IF;
12068 END IF;
12069
12070 --End bug 3010538 ( outdent )
12071
12072 --bug 3301192
12073 --check the task is a lowest task again and check whehter its no more a lowest task.
12074 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
12075
12076 IF l_lowest_task_flag1 = 'Y' AND
12077 l_lowest_task_flag2 = 'N'
12078 THEN
12079 IF l_wp_type = 'Y'
12080 THEN
12081 --now call call delete planning for task version id.
12082 l_task_ver_ids2.extend(1); /* Venky */
12083 l_task_ver_ids2(1) := p_task_version_id;
12084 /*Smukka Bug No. 3474141 Date 03/01/2004 */
12085 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
12086 DECLARE
12087 --p1 bug 3888432
12088 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12089 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
12090 SELECT resource_assignment_id
12091 FROM pa_resource_assignments
12092 WHERE wbs_element_Version_id = c_task_ver_id
12093 AND ta_display_flag = 'N';
12094 l_assign_id NUMBER := NULL;
12095 BEGIN
12096 OPEN get_assignment_id(p_task_version_id);
12097 FETCH get_assignment_id into l_assign_id;
12098 CLOSE get_assignment_id;
12099
12100 IF (l_assign_id IS NOT NULL) THEN
12101 l_assign_ids.extend(1);
12102 l_assign_ids(1) := l_assign_id;
12103 pa_fp_planning_transaction_pub.delete_planning_transactions
12104 (
12105 p_context => 'WORKPLAN'
12106 ,p_task_or_res => 'ASSIGNMENT'
12107 -- ,p_element_version_id_tbl => l_task_ver_ids2
12108 -- ,p_maintain_reporting_lines => 'Y'
12109 ,p_resource_assignment_tbl => l_assign_ids
12110 ,x_return_status => l_return_status
12111 ,x_msg_count => l_msg_count
12112 ,x_msg_data => l_msg_data
12113 );
12114 END IF;
12115 EXCEPTION
12116 WHEN OTHERS then
12117 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12118 p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12119 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
12120 RAISE FND_API.G_EXC_ERROR;
12121 END;
12122 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12123 x_msg_count := FND_MSG_PUB.count_msg;
12124 if x_msg_count = 1 then
12125 pa_interface_utils_pub.get_messages
12126 (p_encoded => FND_API.G_TRUE,
12127 p_msg_index => 1,
12128 p_msg_count => l_msg_count,
12129 p_msg_data => l_msg_data,
12130 p_data => l_data,
12131 p_msg_index_out => l_msg_index_out);
12132 x_msg_data := l_data;
12133 end if;
12134 raise FND_API.G_EXC_ERROR;
12135 end if;
12136 END IF; --<<l_wp_type>>
12137 END IF; --<<l_lowest_task_flag1>>
12138 --bug 3301192
12139
12140 --bug 4149392
12141 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
12142 --end bug 4149392
12143
12144 x_return_status := FND_API.G_RET_STS_SUCCESS;
12145
12146 IF (p_commit = FND_API.G_TRUE) THEN
12147 COMMIT;
12148 END IF;
12149
12150 IF (p_debug_mode = 'Y') THEN
12151 pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK END');
12152 END IF;
12153
12154 EXCEPTION
12155 when FND_API.G_EXC_ERROR then
12156 if p_commit = FND_API.G_TRUE then
12157 rollback to OUTDENT_task_version_bulk;
12158 end if;
12159 x_return_status := FND_API.G_RET_STS_ERROR;
12160 when FND_API.G_EXC_UNEXPECTED_ERROR then
12161 if p_commit = FND_API.G_TRUE then
12162 rollback to OUTDENT_task_version_bulk;
12163 end if;
12164 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12165 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12166 p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12167 p_error_text => SUBSTRB(SQLERRM,1,240));
12168 when OTHERS then
12169 if p_commit = FND_API.G_TRUE then
12170 rollback to OUTDENT_task_version_bulk;
12171 end if;
12172 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12173 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12174 p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12175 p_error_text => SUBSTRB(SQLERRM,1,240));
12176 raise;
12177
12178 END OUTDENT_Task_Version_Bulk;
12179
12180 /*
12181 This API is called from Multiple Tasks Delete Page.
12182 The API expects the task version id in this fashion
12183 1. If both parent and child below it is selected for
12184 deletetion the only parent task id should be pass
12185 -ed
12186
12187 2. If top task is selected and child below it is sel
12188 --ected, API expects only top task id as input
12189
12190 3. If only child is selected then API expexts only
12191 child task id.
12192
12193
12194 Note :
12195 Since the self service page expects the error message
12196 to be displayed in following order :
12197
12198 Task name (task number) : Proper Error Message ..
12199
12200 i.e Task name/number and corresponding error
12201 message to that task version. in one line
12202
12203 Both Task Name /Number and error message set as
12204 token for message PA_PS_TASK_NAME_NUM_ERR
12205
12206 */
12207
12208 PROCEDURE DELETE_TASK_VERSION_IN_BULK
12209 (p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
12210 ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE
12211 ,p_structure_version_id IN NUMBER
12212 ,p_structure_type IN VARCHAR2 :='WORKPLAN' -- 3305199
12213 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12214 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12215 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12216
12217 )
12218
12219 IS
12220 l_debug_mode VARCHAR2(1) ;
12221 l_element_number pa_proj_elements.element_number%TYPE ;
12222 l_element_name pa_proj_elements.name%TYPE ;
12223 l_msg_count NUMBER := 0;
12224 l_msg_data VARCHAR2(2000);
12225 l_return_status VARCHAR2(1);
12226 l_dummy_app_name VARCHAR2(30);
12227 l_enc_msg_data VARCHAR2(2000);
12228 l_msg_name VARCHAR2(30);
12229 l_msg_index_out NUMBER ;
12230
12231 TYPE l_error_msg_name_tbl_type IS TABLE OF
12232 fnd_new_messages.message_text%TYPE INDEX BY BINARY_INTEGER ;
12233 TYPE l_element_name_tbl_type IS TABLE OF
12234 pa_proj_elements.name%TYPE INDEX BY BINARY_INTEGER ;
12235 TYPE l_element_number_tbl_type IS TABLE OF
12236 pa_proj_elements.element_number%TYPE INDEX BY BINARY_INTEGER ;
12237
12238 l_error_msg_name_tbl l_error_msg_name_tbl_type ;
12239 l_element_name_tbl l_element_name_tbl_type ;
12240 l_element_number_tbl l_element_number_tbl_type ;
12241 j NUMBER ;
12242
12243
12244 BEGIN
12245
12246 --hsiu: 3604086
12247 x_return_status := FND_API.G_RET_STS_SUCCESS;
12248
12249 l_msg_count := 0;
12250 l_return_status := FND_API.G_RET_STS_SUCCESS;
12251 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N') ; -- Bug # 4605505.
12252 j := 0 ;
12253
12254 --hsiu: commenting out due to p1 issue.
12255 -- savepoint should be issued only when p_commit
12256 -- is true, which is a missing parameter
12257 -- savepoint delete_bulk;
12258
12259 FOR i in reverse p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
12260
12261 IF l_debug_mode = 'Y' THEN
12262 pa_debug.debug('task id is :'||p_task_version_id_tbl(i));
12263 pa_debug.debug('record version id is :'||p_record_version_number_tbl(i));
12264 END IF ;
12265
12266 -- initialization is required for every loop
12267 l_return_status := FND_API.G_RET_STS_SUCCESS ;
12268 l_msg_count := 0 ;
12269 l_msg_data := null ;
12270
12271
12272
12273 -- call delete_task_version API
12274 PA_TASK_PUB1.Delete_Task_Version(p_task_version_id => p_task_version_id_tbl(i)
12275 ,p_record_version_number => p_record_version_number_tbl(i)
12276 ,p_structure_type => p_structure_type
12277 ,x_return_status => l_return_status
12278 ,x_msg_count => l_msg_count
12279 ,x_msg_data => l_msg_data
12280 ,p_structure_version_id => p_structure_version_id
12281 );
12282
12283 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12284
12285 j := j+1 ;
12286
12287 SELECT e.element_number
12288 ,e.name
12289 INTO l_element_number
12290 ,l_element_name
12291 FROM pa_proj_elements e
12292 ,pa_proj_element_versions v
12293 WHERE v.element_version_id = p_task_version_id_tbl(i)
12294 AND e.proj_element_id = v.proj_element_id ;
12295
12296 PA_INTERFACE_UTILS_PUB.get_messages
12297 (p_encoded => FND_API.G_FALSE, -- Get the encoded message.
12298 p_msg_index => 1, -- Get the message at index 1.
12299 p_data => l_enc_msg_data,
12300 p_msg_index_out => l_msg_index_out);
12301
12302
12303 l_error_msg_name_tbl(j) := l_enc_msg_data ;
12304 l_element_name_tbl(j) := l_element_name ;
12305 l_element_number_tbl(j) := l_element_number ;
12306
12307
12308 END IF ;
12309
12310 END LOOP ;
12311
12312 IF j > 0 THEN
12313
12314 --bug: 3641049
12315 --comment out rollback because if there is an error, it will be rollback twice causing an exception
12316 --rollback to delete_bulk;
12317
12318 FND_MSG_PUB.initialize;
12319
12320 FOR k in reverse l_element_name_tbl.FIRST..l_element_name_tbl.LAST LOOP
12321
12322 PA_UTILS.ADD_MESSAGE
12323 (p_app_short_name => 'PA',
12324 p_msg_name => 'PA_PS_TASK_NAME_NUM_ERR',
12325 p_token1 => 'TASK_NAME',
12326 p_value1 => l_element_name_tbl(k),
12327 p_token2 => 'TASK_NUMBER',
12328 p_value2 => l_element_number_tbl(k),
12329 p_token3 => 'MESSAGE',
12330 p_value3 => l_error_msg_name_tbl(k)
12331 );
12332
12333
12334 END LOOP ;
12335
12336 END IF ;
12337
12338 x_msg_count := FND_MSG_PUB.count_msg ;
12339
12340 IF x_msg_count > 0 THEN
12341 x_return_status := 'E' ;
12342 --hsiu: commenting out due to p1 issue.
12343 -- savepoint should be issued only when p_commit
12344 -- is true, which is a missing parameter
12345 -- rollback to delete_bulk;
12346 END IF ;
12347
12348
12349
12350 IF l_debug_mode = 'Y' THEN
12351 pa_debug.reset_curr_function;
12352 END IF ;
12353
12354 EXCEPTION
12355 WHEN NO_DATA_FOUND THEN
12356 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12357 x_msg_count := 1;
12358 x_msg_data := SQLERRM;
12359 --hsiu: commenting out due to p1 issue.
12360 -- savepoint should be issued only when p_commit
12361 -- is true, which is a missing parameter
12362 -- rollback to delete_bulk;
12363 RETURN ;
12364 WHEN OTHERS THEN
12365 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12366 x_msg_count := 1;
12367 x_msg_data := SQLERRM;
12368 --hsiu: commenting out due to p1 issue.
12369 -- savepoint should be issued only when p_commit
12370 -- is true, which is a missing parameter
12371 -- rollback to delete_bulk;
12372 FND_MSG_PUB.add_exc_msg
12373 ( p_pkg_name => 'PA_TASK_PUB1'
12374 ,p_procedure_name => 'DELETE_TASK_VERSION_IN_BULK' );
12375 IF l_debug_mode = 'Y' THEN
12376 pa_debug.write('DELETE_TASK_VERSION_IN_BULK' || G_PKG_NAME,SQLERRM,4);
12377 pa_debug.write('DELETE_TASK_VERSION_IN_BULK' || G_PKG_NAME,pa_debug.G_Err_Stack,4);
12378 pa_debug.reset_curr_function;
12379 END IF;
12380 RAISE ;
12381
12382 END DELETE_TASK_VERSION_IN_BULK ;
12383
12384 --margaret bug 3024607 add update task association
12385 --when relationship ID is NULL both p_task_id and (either p_associated_project_id or
12386 --p_associated_task_id) must be set - a new association is added.
12387
12388 --when relationship ID is not NULL and either p_associated_project_id or
12389 --p_associated_task_id are set, we just update the existing relationship
12390 -- with the new "TO" object and type. p_task_id must also be NOT NULL in this case
12391
12392 --when relationship ID is not NULL and both p_associated_project_id and
12393 --p_associated_task_id are NULL, we delete this particular association.
12394
12395 --This procedure was designed specifically to fit the flow of Self_Service Task Details page
12396 --(or any page that uses TaskAssociationsVO).
12397 PROCEDURE Update_Task_Association (
12398 p_api_version IN NUMBER :=1.0,
12399 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
12400 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
12401 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
12402 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
12403 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
12404 p_debug_mode IN VARCHAR2 :='N',
12405 p_max_msg_count IN NUMBER :=NULL,
12406 p_associated_project_id IN NUMBER := NULL,
12407 p_associated_task_id IN NUMBER := NULL,
12408 p_associated_project_name IN VARCHAR2 :=NULL,
12409 p_associated_task_name IN VARCHAR2 :=NULL,
12410 p_task_id IN NUMBER ,
12411 p_relationship_type IN VARCHAR2 :='A',
12412 p_relationship_id IN NUMBER := NULL,
12413 p_record_version_number IN NUMBER := NULL,
12414 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12415 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
12416 x_msg_data OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12417 x_relationship_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12418 ) IS
12419
12420 l_return_status VARCHAR2(1);
12421 l_msg_count NUMBER;
12422 l_msg_data VARCHAR2(250);
12423 l_id_to NUMBER;
12424 l_type_to PA_OBJECT_RELATIONSHIPS.object_type_to%TYPE;
12425
12426 l_data VARCHAR2(250);
12427 l_msg_index_out NUMBER;
12428 l_error_msg_code VARCHAR2(30);
12429
12430 BEGIN
12431
12432 x_return_status := FND_API.G_RET_STS_SUCCESS;
12433
12434 IF (p_debug_mode = 'Y') THEN
12435 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_ASSOCIATION START');
12436 END IF;
12437
12438 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12439 FND_MSG_PUB.initialize;
12440 END IF;
12441
12442 IF (p_commit = FND_API.G_TRUE) THEN
12443 savepoint update_task_association;
12444 END IF;
12445
12446 l_type_to := 'PA_PROJECTS';
12447 l_id_to := p_associated_project_id;
12448
12449 IF p_associated_task_id is not NULL THEN
12450 l_type_to := 'PA_TASKS';
12451 l_id_to := p_associated_task_id;
12452 END IF;
12453
12454 -- when creating a new relationship check both ids and object types
12455 IF p_relationship_id is NULL THEN
12456 IF p_task_id is NULL or l_id_to is NULL THEN
12457 x_return_status := FND_API.G_RET_STS_ERROR;
12458 l_error_msg_code:= 'PA_PS_TASK_NUMBER_NULL';
12459 ELSE
12460 IF p_task_id = l_id_to and l_type_to = 'PA_TASKS' then
12461 x_return_status := FND_API.G_RET_STS_ERROR;
12462 l_error_msg_code:= 'PA_TASK_ID_INVALID';
12463 END IF;
12464 END IF;
12465 END IF;
12466
12467 -- when updating an existing relationship check both ids and object types
12468 IF p_relationship_id is not null and l_id_to is not null THEN
12469 IF p_task_id = l_id_to and l_type_to = 'PA_TASKS' then
12470 x_return_status := FND_API.G_RET_STS_ERROR;
12471 l_error_msg_code:= 'PA_TASK_ID_INVALID';
12472 END IF;
12473 END IF;
12474
12475 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
12476 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12477 p_msg_name => l_error_msg_code);
12478 END IF;
12479
12480 -- Create a new association row
12481 IF p_relationship_id is NULL and x_return_status = FND_API.G_RET_STS_SUCCESS THEN
12482 PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
12483 p_user_id => FND_GLOBAL.USER_ID
12484 ,p_object_type_from => 'PA_TASKS'
12485 ,p_object_id_from1 => p_task_id
12486 ,p_object_id_from2 => NULL
12487 ,p_object_id_from3 => NULL
12488 ,p_object_id_from4 => NULL
12489 ,p_object_id_from5 => NULL
12490 ,p_object_type_to => l_type_to
12491 ,p_object_id_to1 => l_id_to
12492 ,p_object_id_to2 => NULL
12493 ,p_object_id_to3 => NULL
12494 ,p_object_id_to4 => NULL
12495 ,p_object_id_to5 => NULL
12496 ,p_relationship_type => p_relationship_type
12497 ,p_relationship_subtype => NULL
12498 ,p_lag_day => NULL
12499 ,p_imported_lag => NULL
12500 ,p_priority => NULL
12501 ,p_pm_product_code => NULL
12502 ,p_comments => NULL
12503 ,p_status_code => NULL
12504 ,x_object_relationship_id => x_relationship_id
12505 ,x_return_status => x_return_status
12506 );
12507
12508 END IF;
12509
12510 IF p_relationship_id is not null and l_id_to is not null THEN
12511 UPDATE PA_OBJECT_RELATIONSHIPS
12512 SET object_id_to1 = l_id_to
12513 ,object_type_to = l_type_to
12514 WHERE object_relationship_id = p_relationship_id;
12515 --WHERE object_id_from1 = p_task_id
12516 --AND object_type_from = 'PA_TASKS'
12517 --AND relationship_type = 'A';
12518 END IF;
12519
12520 IF p_relationship_id is not null and l_id_to is null THEN
12521 Delete_Association(p_relationship_id,p_record_version_number, x_return_status);
12522 END IF;
12523
12524
12525 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12526 x_msg_count := FND_MSG_PUB.count_msg;
12527 IF x_msg_count = 1 then
12528 pa_interface_utils_pub.get_messages
12529 (p_encoded => FND_API.G_TRUE,
12530 p_msg_index => 1,
12531 p_msg_count => x_msg_count,
12532 p_msg_data => x_msg_data,
12533 p_data => l_data,
12534 p_msg_index_out => l_msg_index_out);
12535 x_msg_data := l_data;
12536 END IF;
12537 raise FND_API.G_EXC_ERROR;
12538 ELSE
12539 IF (p_commit = FND_API.G_TRUE) THEN
12540 COMMIT;
12541 END IF;
12542 END IF;
12543
12544 IF (p_debug_mode = 'Y') THEN
12545 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_ASSOCIATION END');
12546 END IF;
12547
12548
12549 EXCEPTION
12550 WHEN FND_API.G_EXC_ERROR THEN
12551 IF (p_commit = FND_API.G_TRUE) THEN
12552 ROLLBACK to update_task_association;
12553 END IF;
12554 x_msg_count := FND_MSG_PUB.count_msg;
12555 x_return_status := FND_API.G_RET_STS_ERROR;
12556 WHEN OTHERS THEN
12557 IF (p_commit = FND_API.G_TRUE) THEN
12558 ROLLBACK to update_task_association;
12559 END IF;
12560 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12561 x_msg_count := FND_MSG_PUB.count_msg;
12562 --put message
12563 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12564 p_procedure_name => 'update_task_association',
12565 p_error_text => SUBSTRB(SQLERRM,1,240));
12566 RAISE;
12567
12568 END Update_Task_Association;
12569
12570
12571
12572 --margaret bug 3024607 delete task association
12573 --if p_relationship_id is NOT NULL then only this ONE relationship is deleted
12574 --if p_relationship_id is NULL, then ALL associations are deleted.
12575 PROCEDURE Delete_Task_Associations(
12576 p_api_version IN NUMBER :=1.0,
12577 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
12578 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
12579 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
12580 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
12581 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
12582 p_debug_mode IN VARCHAR2 :='N',
12583 p_max_msg_count IN NUMBER :=NULL,
12584 p_relationship_type IN VARCHAR2 :='A',
12585 p_relationship_id IN NUMBER := NULL,
12586 p_task_id IN NUMBER := NULL,
12587 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12588 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
12589 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12590 ) IS
12591
12592
12593 CURSOR task_associations( p_task_id NUMBER )
12594 IS
12595 SELECT object_relationship_id
12596 FROM PA_OBJECT_RELATIONSHIPS
12597 WHERE relationship_type = p_relationship_type
12598 AND ( (object_type_from = 'PA_TASKS' AND object_id_from1 = p_task_id)
12599 OR (object_type_to = 'PA_TASKS' AND object_id_to1 = p_task_id));
12600
12601 l_data VARCHAR2(250);
12602 l_msg_index_out NUMBER;
12603
12604 BEGIN
12605 x_return_status := FND_API.G_RET_STS_SUCCESS;
12606
12607 IF (p_debug_mode = 'Y') THEN
12608 pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_ASSOCIATION START');
12609 END IF;
12610
12611 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12612 FND_MSG_PUB.initialize;
12613 END IF;
12614
12615 IF (p_commit = FND_API.G_TRUE) THEN
12616 savepoint delete_task_association;
12617 END IF;
12618
12619 --Delete just the requested relationship row
12620 IF p_relationship_id is not null THEN
12621 Delete_Association(p_relationship_id,null,x_return_status);
12622 ELSE
12623 IF p_task_id is not null THEN
12624 FOR task_associations_rec IN task_associations(p_task_id ) LOOP
12625 Delete_Association(task_associations_rec.object_relationship_id,null, x_return_status);
12626 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12627 EXIT;
12628 END IF;
12629 END LOOP;
12630 END IF;
12631 END IF;
12632
12633 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12634 x_msg_count := FND_MSG_PUB.count_msg;
12635 IF x_msg_count = 1 then
12636 pa_interface_utils_pub.get_messages
12637 (p_encoded => FND_API.G_TRUE,
12638 p_msg_index => 1,
12639 p_msg_count => x_msg_count,
12640 p_msg_data => x_msg_data,
12641 p_data => l_data,
12642 p_msg_index_out => l_msg_index_out);
12643 x_msg_data := l_data;
12644 END IF;
12645 raise FND_API.G_EXC_ERROR;
12646 ELSE
12647 IF (p_commit = FND_API.G_TRUE) THEN
12648 COMMIT;
12649 END IF;
12650 END IF;
12651
12652
12653 IF (p_debug_mode = 'Y') THEN
12654 pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_ASSOCIATIONS END');
12655 END IF;
12656
12657
12658 EXCEPTION
12659 WHEN FND_API.G_EXC_ERROR THEN
12660 IF (p_commit = FND_API.G_TRUE) THEN
12661 ROLLBACK to delete_task_association;
12662 END IF;
12663 x_msg_count := FND_MSG_PUB.count_msg;
12664 x_return_status := FND_API.G_RET_STS_ERROR;
12665 WHEN OTHERS THEN
12666 IF (p_commit = FND_API.G_TRUE) THEN
12667 ROLLBACK to delete_task_association;
12668 END IF;
12669 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12670 x_msg_count := FND_MSG_PUB.count_msg;
12671 --put message
12672 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12673 p_procedure_name => 'delete_all_task_associations',
12674 p_error_text => SUBSTRB(SQLERRM,1,240));
12675 RAISE;
12676
12677 END Delete_Task_Associations;
12678
12679
12680 --Delete a single association - relationship_id required
12681 PROCEDURE Delete_Association(
12682 p_relationship_id IN NUMBER,
12683 p_record_version_number IN NUMBER := NULL,
12684 x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12685 ) IS
12686
12687 BEGIN
12688
12689 IF p_relationship_id is not null THEN
12690 PA_OBJECT_RELATIONSHIPS_PKG.DELETE_ROW(
12691 p_object_relationship_id => p_relationship_id
12692 ,p_object_type_from => NULL
12693 ,p_object_id_from1 => NULL
12694 ,p_object_id_from2 => NULL
12695 ,p_object_id_from3 => NULL
12696 ,p_object_id_from4 => NULL
12697 ,p_object_id_from5 => NULL
12698 ,p_object_type_to => NULL
12699 ,p_object_id_to1 => NULL
12700 ,p_object_id_to2 => NULL
12701 ,p_object_id_to3 => NULL
12702 ,p_object_id_to4 => NULL
12703 ,p_object_id_to5 => NULL
12704 ,p_record_version_number =>NULL
12705 ,p_pm_product_code => NULL
12706 ,x_return_status => x_return_status
12707 );
12708 END IF;
12709
12710
12711 EXCEPTION
12712 WHEN OTHERS THEN
12713 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12714 --x_msg_count := FND_MSG_PUB.count_msg;
12715 --put message
12716 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12717 p_procedure_name => 'delete_association',
12718 p_error_text => SUBSTRB(SQLERRM,1,240));
12719
12720 RAISE;
12721
12722 END Delete_Association;
12723
12724
12725 --margaret check if task has associations, returns Y/N
12726 FUNCTION has_Associations(
12727 p_task_id IN NUMBER
12728 ,p_relationship_type IN VARCHAR2 :='A'
12729 )return VARCHAR2
12730 IS
12731 cursor relationship_exists(p_task_id NUMBER) IS
12732 select '1'
12733 from pa_object_relationships
12734 WHERE relationship_type = p_relationship_type
12735 AND ( (object_type_from = 'PA_TASKS' AND object_id_from1 = p_task_id
12736 AND object_type_to in ( 'PA_STRUCTURES', 'PA_TASKS')) --bug 4091647
12737 OR (object_type_to = 'PA_TASKS' AND object_id_to1 = p_task_id
12738 AND object_type_from = 'PA_TASKS')); --bug 4091647
12739 l_dummy_char VARCHAR2(1);
12740
12741 BEGIN
12742 OPEN relationship_exists(p_task_id);
12743 FETCH relationship_exists into l_dummy_char;
12744 IF relationship_exists%NOTFOUND THEN
12745 close relationship_exists; -- 5349975
12746 return 'N';
12747 ELSE
12748 close relationship_exists; -- 5349975
12749 return 'Y';
12750 END IF;
12751 END has_Associations;
12752
12753
12754 --margaret check if project is associated to tasks, returns Y/N
12755 FUNCTION proj_has_task_associations(
12756 p_project_id IN NUMBER
12757 ,p_relationship_type IN VARCHAR2 :='A'
12758 )return VARCHAR2
12759 IS
12760 cursor relationship_exists(p_project_id NUMBER) IS
12761 select '1'
12762 from pa_object_relationships
12763 WHERE relationship_type = p_relationship_type
12764 AND object_type_from = 'PA_TASKS'
12765 AND object_type_to = 'PA_PROJECTS' AND object_id_to1 = p_project_id;
12766
12767 l_dummy_char VARCHAR2(1);
12768
12769 BEGIN
12770 OPEN relationship_exists(p_project_id);
12771 FETCH relationship_exists into l_dummy_char;
12772 IF relationship_exists%NOTFOUND THEN
12773 close relationship_exists; -- 5349975
12774 return 'N';
12775 ELSE
12776 close relationship_exists; -- 5349975
12777 return 'Y';
12778 END IF;
12779 END proj_has_task_associations;
12780
12781
12782 PROCEDURE Check_Task_Has_Association(
12783 p_task_id IN NUMBER
12784 ,p_relationship_type VARCHAR2 :='A'
12785 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12786 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12787 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12788
12789 )IS
12790 l_ret_code VARCHAR2(1);
12791 BEGIN
12792 x_return_status := FND_API.G_RET_STS_SUCCESS;
12793 l_ret_code := has_Associations(p_task_id,p_relationship_type);
12794 IF l_ret_code = 'Y' THEN
12795 x_return_status := FND_API.G_RET_STS_ERROR;
12796 /*PA_UTILS.ADD_MESSAGE
12797 (p_app_short_name => 'PA',
12798 p_msg_name => 'PA_TASK_HAS_ASSOCIATIONS');*/ --Bug 3831786 commented
12799 x_msg_data:='PA_TASK_HAS_ASSOCIATIONS'; --Bug No 3491544 Smukka Apr 07 2004
12800 END IF;
12801 END Check_Task_Has_Association;
12802
12803
12804 PROCEDURE Check_Proj_Associated_To_Tasks(
12805 p_project_id IN NUMBER
12806 ,p_relationship_type VARCHAR2 :='A'
12807 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12808 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12809 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12810
12811 )IS
12812 l_ret_code VARCHAR2(1);
12813 BEGIN
12814 x_return_status := FND_API.G_RET_STS_SUCCESS;
12815 l_ret_code := proj_has_task_associations(p_project_id,p_relationship_type);
12816 IF l_ret_code = 'Y' THEN
12817 x_return_status := FND_API.G_RET_STS_ERROR;
12818 PA_UTILS.ADD_MESSAGE
12819 (p_app_short_name => 'PA',
12820 p_msg_name => 'PA_PROJECT_HAS_ASSOCIATIONS');
12821
12822 END IF;
12823 END Check_Proj_Associated_to_Tasks;
12824
12825
12826 --margaret bug 3024607 delete project to task associations
12827 --if p_relationship_id is NOT NULL then only this ONE relationship is deleted
12828 --if p_relationship_id is NULL, then ALL associations are deleted.
12829 PROCEDURE Delete_Proj_To_Task_Assoc(
12830 p_api_version IN NUMBER :=1.0,
12831 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
12832 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
12833 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
12834 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
12835 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
12836 p_debug_mode IN VARCHAR2 :='N',
12837 p_max_msg_count IN NUMBER :=NULL,
12838 p_relationship_type IN VARCHAR2 :='A',
12839 p_relationship_id IN NUMBER := NULL,
12840 p_project_id IN NUMBER := NULL,
12841 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12842 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
12843 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12844 ) IS
12845
12846
12847 CURSOR task_associations( p_task_id NUMBER )
12848 IS
12849 SELECT object_relationship_id
12850 FROM PA_OBJECT_RELATIONSHIPS
12851 WHERE relationship_type = p_relationship_type
12852 AND object_type_from = 'PA_TASKS'
12853 AND object_type_to = 'PA_PROJECTS' AND object_id_to1 = p_project_id;
12854
12855 l_data VARCHAR2(250);
12856 l_msg_index_out NUMBER;
12857
12858 BEGIN
12859 x_return_status := FND_API.G_RET_STS_SUCCESS;
12860
12861 IF (p_debug_mode = 'Y') THEN
12862 pa_debug.debug('PA_TASK_PUB1.Delete_Proj_To_Task_Assoc START');
12863 END IF;
12864 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12865 FND_MSG_PUB.initialize;
12866 END IF;
12867
12868 IF (p_commit = FND_API.G_TRUE) THEN
12869 savepoint delete_prj_to_task_assoc;
12870 END IF;
12871
12872 --Delete just the requested relationship row
12873 IF p_relationship_id is not null THEN
12874 Delete_Association(p_relationship_id,null,x_return_status);
12875 ELSE
12876 IF p_project_id is not null THEN
12877 FOR task_associations_rec IN task_associations(p_project_id ) LOOP
12878 Delete_Association(task_associations_rec.object_relationship_id,null, x_return_status);
12879 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12880 EXIT;
12881 END IF;
12882 END LOOP;
12883 END IF;
12884 END IF;
12885
12886 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12887 x_msg_count := FND_MSG_PUB.count_msg;
12888 IF x_msg_count = 1 then
12889 pa_interface_utils_pub.get_messages
12890 (p_encoded => FND_API.G_TRUE,
12891 p_msg_index => 1,
12892 p_msg_count => x_msg_count,
12893 p_msg_data => x_msg_data,
12894 p_data => l_data,
12895 p_msg_index_out => l_msg_index_out);
12896 x_msg_data := l_data;
12897 raise FND_API.G_EXC_ERROR;
12898 END IF;
12899 ELSE
12900 IF (p_commit = FND_API.G_TRUE) THEN
12901 COMMIT;
12902 END IF;
12903 END IF;
12904
12905 IF (p_debug_mode = 'Y') THEN
12906 pa_debug.debug('PA_TASK_PUB1.Delete_Proj_To_Task_Assoc END');
12907 END IF;
12908
12909 EXCEPTION
12910 WHEN FND_API.G_EXC_ERROR THEN
12911 IF (p_commit = FND_API.G_TRUE) THEN
12912 ROLLBACK to delete_prj_to_task_assoc;
12913 END IF;
12914 x_msg_count := FND_MSG_PUB.count_msg;
12915 x_return_status := FND_API.G_RET_STS_ERROR;
12916 WHEN OTHERS THEN
12917 IF (p_commit = FND_API.G_TRUE) THEN
12918 ROLLBACK to delete_prj_to_task_assoc;
12919 END IF;
12920 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12921 --put message
12922 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
12923 p_procedure_name => 'delete_proj_to_task_assoc',
12924 p_error_text => SUBSTRB(SQLERRM,1,240));
12925 RAISE;
12926 END Delete_Proj_To_Task_Assoc;
12927
12928
12929 PROCEDURE Copy_Task_Associations(
12930 p_api_version IN NUMBER :=1.0,
12931 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
12932 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
12933 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
12934 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
12935 p_debug_mode IN VARCHAR2 :='N',
12936 p_max_msg_count IN NUMBER :=NULL,
12937 p_project_id_to IN NUMBER := NULL,
12938 p_project_id_from IN NUMBER := NULL,
12939 p_relationship_type IN VARCHAR2 :='A',
12940 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12941 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
12942 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12943
12944 )IS
12945 --Bug#3693794 : Performance fix.
12946 --Replaced pa_structures_tasks_v from the from clause
12947 --for cursor task_list. Replaced it with pa_proj_elements
12948 --table which will siffice the current requirement of
12949 --getting source and destination proj_element_id of the task.
12950
12951 CURSOR task_list( p_project_id_to NUMBER, p_project_id_from NUMBER )
12952 IS
12953 Select source.proj_element_id old_task_id
12954 ,destination.proj_element_id new_task_id
12955 from pa_proj_elements source --Bug#3693794
12956 ,pa_proj_elements destination --Bug#3693794
12957 where source.project_id = p_project_id_from
12958 and source.element_number = destination.element_number
12959 and destination.project_id = p_project_id_to;
12960
12961 CURSOR task_association( task_id NUMBER, p_relationship_type VARCHAR2 )
12962 IS
12963 Select object_type_to, object_id_to1
12964 from pa_object_relationships
12965 where object_type_from = 'PA_TASKS'
12966 and object_id_from1 = task_id
12967 and relationship_type = p_relationship_type;
12968
12969 l_object_type_to pa_object_relationships.object_type_to%Type;
12970 l_object_id_to1 pa_object_relationships.object_id_to1%Type;
12971 x_relationship_id pa_object_relationships.object_relationship_id%type;
12972 l_ret_code VARCHAR2(1);
12973 l_data VARCHAR2(250);
12974 l_msg_index_out NUMBER;
12975
12976 BEGIN
12977
12978 IF (p_debug_mode = 'Y') THEN
12979 pa_debug.debug('PA_TASK_PUB1.Copy_Task_Associations START');
12980 END IF;
12981
12982 x_return_status := FND_API.G_RET_STS_SUCCESS;
12983
12984 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12985 FND_MSG_PUB.initialize;
12986 END IF;
12987
12988 IF (p_commit = FND_API.G_TRUE) THEN
12989 savepoint copy_task_associations;
12990 END IF;
12991
12992
12993 FOR task_list_rec IN task_list(p_project_id_to, p_project_id_from ) LOOP
12994 l_ret_code := has_Associations(task_list_rec.new_task_id,p_relationship_type);
12995 IF l_ret_code <>'Y' THEN
12996 open task_association(task_list_rec.old_task_id,p_relationship_type);
12997 fetch task_association into l_object_type_to, l_object_id_to1;
12998 IF task_association%found THEN
12999
13000 PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
13001 p_user_id => FND_GLOBAL.USER_ID
13002 ,p_object_type_from => 'PA_TASKS'
13003 ,p_object_id_from1 => task_list_rec.new_task_id
13004 ,p_object_id_from2 => NULL
13005 ,p_object_id_from3 => NULL
13006 ,p_object_id_from4 => NULL
13007 ,p_object_id_from5 => NULL
13008 ,p_object_type_to => l_object_type_to
13009 ,p_object_id_to1 => l_object_id_to1
13010 ,p_object_id_to2 => NULL
13011 ,p_object_id_to3 => NULL
13012 ,p_object_id_to4 => NULL
13013 ,p_object_id_to5 => NULL
13014 ,p_relationship_type => p_relationship_type
13015 ,p_relationship_subtype => NULL
13016 ,p_lag_day => NULL
13017 ,p_imported_lag => NULL
13018 ,p_priority => NULL
13019 ,p_pm_product_code => NULL
13020 ,p_comments => NULL
13021 ,p_status_code => NULL
13022 ,x_object_relationship_id => x_relationship_id
13023 ,x_return_status => x_return_status);
13024
13025 END IF;
13026 close task_association;
13027 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13028 EXIT;
13029 END IF;
13030 END IF;
13031 END LOOP;
13032
13033 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13034 x_msg_count := FND_MSG_PUB.count_msg;
13035 IF x_msg_count = 1 then
13036 pa_interface_utils_pub.get_messages
13037 (p_encoded => FND_API.G_TRUE,
13038 p_msg_index => 1,
13039 p_msg_count => x_msg_count,
13040 p_msg_data => x_msg_data,
13041 p_data => l_data,
13042 p_msg_index_out => l_msg_index_out);
13043 x_msg_data := l_data;
13044 raise FND_API.G_EXC_ERROR;
13045 END IF;
13046 ELSE
13047 IF (p_commit = FND_API.G_TRUE) THEN
13048 COMMIT;
13049 END IF;
13050 END IF;
13051
13052 IF (p_debug_mode = 'Y') THEN
13053 pa_debug.debug('PA_TASK_PUB1.Copy_Task_Associations END');
13054 END IF;
13055
13056 EXCEPTION
13057 WHEN FND_API.G_EXC_ERROR THEN
13058 IF (p_commit = FND_API.G_TRUE) THEN
13059 ROLLBACK to copy_task_associations;
13060 END IF;
13061 x_msg_count := FND_MSG_PUB.count_msg;
13062 x_return_status := FND_API.G_RET_STS_ERROR;
13063 WHEN OTHERS THEN
13064 IF (p_commit = FND_API.G_TRUE) THEN
13065 ROLLBACK to copy_task_associations;
13066 END IF;
13067 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13068 --put message
13069 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13070 p_procedure_name => 'Copy_Task_Associations',
13071 p_error_text => SUBSTRB(SQLERRM,1,240));
13072 RAISE;
13073 END Copy_Task_Associations;
13074
13075
13076 --FPM bug 3301192
13077 --Planning and budget changes.
13078 --This apis is called from CREATE_TASKS api and AMG create_project, update_prohject and add_task apis
13079 PROCEDURE call_add_planning_txns(
13080 p_tasks_ver_ids IN PA_NUM_1000_NUM,
13081 p_planned_effort IN PA_NUM_1000_NUM,
13082 p_project_id IN NUMBER,
13083 p_structure_version_id IN NUMBER,
13084 p_start_date IN PA_DATE_1000_DATE,
13085 p_end_date IN PA_DATE_1000_DATE,
13086 p_pm_product_code IN VARCHAR2 DEFAULT NULL, ---bug 3811243
13087 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13088 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
13089 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13090 ) IS
13091 /* Bug #: 3305199 SMukka */
13092 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13093 /* l_task_ver_ids PA_PLSQL_DATATYPES.IdTabTyp; */
13094 l_task_ver_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13095 l_planned_effort SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13096 l_start_dates SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
13097 l_end_dates SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
13098 l_pm_product_code SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(); ---bug 3811243
13099
13100 l_msg_count NUMBER := 0;
13101 l_msg_data VARCHAR2(2000);
13102 l_return_status VARCHAR2(1);
13103 l_data VARCHAR2(2000);
13104 l_msg_index_out NUMBER;
13105 API_ERROR EXCEPTION;
13106
13107 BEGIN
13108
13109 IF nvl(p_tasks_ver_ids.LAST,0) > 0 THEN --Condition added for bug #3569905
13110 FOR i in p_tasks_ver_ids.FIRST..p_tasks_ver_ids.LAST LOOP
13111 IF p_tasks_ver_ids(i) IS NOT NULL AND
13112 (p_planned_effort(i) IS NOT NULL AND
13113 p_planned_effort(i) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
13114 p_planned_effort(i) <> 0) --bug 3802240: Added conditions to skip g_miss
13115 THEN
13116 IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_tasks_ver_ids(i) ) = 'Y'
13117 THEN
13118 /* convert ids and planned effort to the called apis params types. */
13119 l_task_ver_ids.extend(1); /* Venky */
13120 l_task_ver_ids(l_task_ver_ids.count) := p_tasks_ver_ids(i);
13121 l_planned_effort.extend(1);
13122 l_planned_effort(l_planned_effort.count) := p_planned_effort(i);
13123 l_start_dates.extend(1);
13124 l_start_dates(l_start_dates.count) := NVL( p_start_date(i), TRUNC(SYSDATE));
13125 l_end_dates.extend(1);
13126 l_end_dates(l_end_dates.count) := NVL( p_end_date(i), TRUNC(SYSDATE));
13127 ---bug 3811243
13128 l_pm_product_code.extend();
13129 l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
13130 END IF;
13131 END IF;
13132 END LOOP;
13133 END IF;
13134
13135 IF l_task_ver_ids.exists(1)
13136 THEN
13137 /*Smukka Bug No. 3474141 Date 03/01/2004 */
13138 /*moved pa_fp_planning_transaction_pub.add_planning_transactions into plsql block */
13139 BEGIN
13140 pa_fp_planning_transaction_pub.add_planning_transactions(
13141 p_context => 'WORKPLAN'
13142 ,p_project_id => p_project_id
13143 ,p_struct_elem_version_id => p_structure_version_id
13144 ,p_task_elem_version_id_tbl => l_task_ver_ids
13145 ,p_planned_people_effort_tbl => l_planned_effort
13146 ,p_start_date_tbl => l_start_dates
13147 ,p_end_date_tbl => l_end_dates
13148 ,p_pm_product_code => l_pm_product_code --bug 3811243
13149 ,x_return_status => l_return_status
13150 ,x_msg_count => l_msg_count
13151 ,x_msg_data => l_msg_data
13152 );
13153 EXCEPTION
13154 WHEN OTHERS THEN
13155 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13156 p_procedure_name => 'call_add_planning_txns',
13157 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
13158 raise API_ERROR;
13159 END;
13160 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
13161 x_msg_count := FND_MSG_PUB.count_msg;
13162 if x_msg_count = 1 then
13163 pa_interface_utils_pub.get_messages
13164 (p_encoded => FND_API.G_TRUE,
13165 p_msg_index => 1,
13166 p_msg_count => l_msg_count,
13167 p_msg_data => l_msg_data,
13168 p_data => l_data,
13169 p_msg_index_out => l_msg_index_out);
13170 x_msg_data := l_data;
13171 end if;
13172 raise API_ERROR;
13173 end if;
13174 END IF;
13175
13176 x_return_status := FND_API.G_RET_STS_SUCCESS;
13177 EXCEPTION
13178 WHEN API_ERROR THEN
13179 x_return_status := FND_API.G_RET_STS_ERROR;
13180 WHEN OTHERS THEN
13181 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13182 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13183 p_procedure_name => 'call_add_planning_txns',
13184 p_error_text => SUBSTRB(SQLERRM,1,240));
13185 raise;
13186 END call_add_planning_txns;
13187
13188 PROCEDURE update_task_det_sch_info(
13189 p_api_version IN NUMBER :=1.0,
13190 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
13191 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
13192 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
13193 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
13194 p_debug_mode IN VARCHAR2 :='N',
13195 p_task_ver_id IN NUMBER,
13196 p_project_id IN NUMBER,
13197 p_planned_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13198 p_ETC_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13199 p_structure_version_id IN NUMBER,
13200 p_object_type IN VARCHAR2 := 'PA_TASKS',
13201 p_etc_cost IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13202 p_actual_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13203 p_percent_complete IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13204 p_res_assign_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13205 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13206 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
13207 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13208 ) IS
13209
13210 l_msg_count NUMBER;
13211 l_msg_data VARCHAR2(250);
13212 l_data VARCHAR2(250);
13213 l_msg_index_out NUMBER;
13214 l_return_status VARCHAR2(2);
13215 l_error_message_code VARCHAR2(250);
13216
13217 CURSOR cur_sch
13218 IS
13219 SELECT scheduled_start_date, scheduled_finish_date
13220 FROM pa_proj_elem_ver_schedule
13221 WHERE element_version_id = p_task_ver_id
13222 AND project_id = p_project_id
13223 ;
13224
13225
13226 /* Bug # 3755089. Modified the following cursor. */
13227
13228 cursor cur_progress (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13229 p_structure_version_id NUMBER) is
13230 select *
13231 from pa_progress_rollup ppr
13232 where ppr.project_id = p_project_id
13233 and ppr.object_id = p_object_id
13234 and ppr.object_version_id = p_object_version_id
13235 and ppr.structure_version_id = p_structure_version_id
13236 and ppr.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES') -- 4498610 : Added PA_STRUCTURES also
13237 and ppr.current_flag = 'Y'
13238 and ppr.as_of_date = (select max(as_of_date) from pa_progress_rollup ppr2
13239 where ppr2.project_id = p_project_id
13240 and ppr2.object_id = p_object_id
13241 and ppr2.object_version_id = p_object_version_id
13242 and ppr2.structure_version_id = p_structure_version_id
13243 and ppr2.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES'));
13244
13245 cur_progress_rec cur_progress%rowtype;
13246
13247
13248 cursor cur_progress2 (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13249 p_structure_version_id NUMBER, p_current_flag VARCHAR2) is
13250 select *
13251 from pa_progress_rollup ppr
13252 where ppr.project_id = p_project_id
13253 and ppr.object_id = p_object_id
13254 and ppr.object_version_id = p_object_version_id
13255 and ppr.structure_version_id IS NULL
13256 and ppr.current_flag = p_current_flag
13257 and ppr.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES'); -- 4498610 : Added PA_STRUCTURES also
13258 --bug 3959087, following code is commented as it is not needed
13259 /*and ppr.as_of_date = (select max(as_of_date) from pa_progress_rollup ppr2
13260 where ppr2.project_id = p_project_id
13261 and ppr2.object_id = p_object_id
13262 and ppr2.object_version_id = p_object_version_id
13263 and ppr2.structure_version_id IS NULL
13264 and ppr2.current_flag = p_current_flag --bug 3708948
13265 and ppr2.object_type in ('PA_TASKS','PA_ASSIGNMENTS'));*/
13266
13267 cursor cur_prev_planned_task_effort(p_project_id NUMBER, p_proj_element_id NUMBER
13268 , p_structure_version_id NUMBER) is
13269 select (labor_effort+equipment_effort)
13270 from pji_xbs_plans_v
13271 where project_id = p_project_id
13272 and structure_version_id = p_structure_version_id
13273 and proj_element_id = p_proj_element_id
13274 and structure_type = 'WORKPLAN';
13275
13276 cursor cur_prev_planned_assgn_effort(p_project_id NUMBER, p_task_id NUMBER
13277 , p_structure_version_id NUMBER, p_res_assign_id NUMBER) is
13278 select planned_quantity
13279 from pa_task_assignments_v
13280 where project_id = p_project_id
13281 and structure_version_id = p_structure_version_id
13282 and resource_assignment_id = p_res_assign_id
13283 and task_id = p_task_id;
13284
13285 l_prev_planned_effort NUMBER := null;
13286
13287 cursor cur_prev_etc_effort (p_project_id NUMBER, p_object_id NUMBER
13288 , p_structure_version_id NUMBER) is
13289 select (nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0)
13290 +nvl(subprj_ppl_etc_effort,0)+nvl(subprj_eqpmt_etc_effort,0))
13291 from pa_progress_rollup
13292 where project_id = p_project_id
13293 and object_id = p_object_id
13294 and structure_version_id = p_structure_version_id
13295 and structure_type = 'WORKPLAN';
13296
13297 --maansari5/9
13298 cursor cur_prev_etc_effort2 (p_project_id NUMBER, p_object_id NUMBER
13299 ) is
13300 select (nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0)
13301 +nvl(subprj_ppl_etc_effort,0)+nvl(subprj_eqpmt_etc_effort,0))
13302 from pa_progress_rollup
13303 where project_id = p_project_id
13304 and object_id = p_object_id
13305 and structure_version_id is null
13306 and current_flag = 'Y'
13307 and structure_type = 'WORKPLAN';
13308 --maansari5/9
13309
13310 l_prev_etc_effort NUMBER := null;
13311
13312 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13313 l_planned_effort2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13314 l_start_dates SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13315 l_end_dates SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13316 l_SCHEDULED_START_DATE DATE;
13317 l_SCHEDULED_END_DATE DATE;
13318
13319 l_progress_rollup_id NUMBER;
13320 l_login_id NUMBER := fnd_global.login_id;
13321 l_user_id NUMBER := fnd_global.user_id;
13322
13323 l_task_id NUMBER;
13324 l_object_id NUMBER;
13325 l_next_prog_cycle_date DATE;
13326 l_as_of_date DATE;
13327 l_percent_complete NUMBER;
13328 l_etc_effort NUMBER;
13329 l_planned_effort NUMBER;
13330 l_override_pc NUMBER := null;
13331 l_eff_rollup_pc NUMBER := null;
13332 l_earned_value NUMBER := null;
13333 l_proj_element_id NUMBER := null;
13334
13335 l_version_enabled VARCHAr2(1):= 'N'; --maansari5/9
13336 l_weighting_basis VARCHAR2(30); ---Bug 6144931
13337
13338 --maansari5/11
13339 CURSOR c_get_task_weight_method
13340 IS
13341 SELECT task_weight_basis_code
13342 FROM pa_proj_progress_attr
13343 WHERE project_id = p_project_id
13344 AND structure_type = 'WORKPLAN';
13345
13346 CURSOR c_proj_element_id
13347 IS
13348 SELECT proj_element_id
13349 FROM pa_proj_element_versions
13350 WHERE project_id = p_project_id
13351 and parent_structure_version_id = p_structure_version_id
13352 and element_version_id = p_task_ver_id
13353 and object_type = decode(p_object_type, 'PA_ASSIGNMENTS','PA_TASKS', p_object_type); -- Bug 3856161 : Added Decode
13354
13355 l_rollup_method VARCHAR2(30);
13356 l_actual_finish_DATE DATE;
13357 l_actual_start_DATE DATE;
13358 l_rollup_as_of_date DATE;
13359
13360 cursor c_max_as_of_date_wkg is
13361 select max(as_of_date)
13362 from pa_progress_rollup
13363 where project_id = p_project_id
13364 -- and object_version_id = p_task_ver_id Bug 3856161 : It shd always do rollup if record exists
13365 -- and object_type = p_object_type
13366 and structure_type = 'WORKPLAN'
13367 and structure_version_id = p_structure_version_id;
13368
13369 l_debug_mode VARCHAR2(1);
13370 l_dummy NUMBER;
13371
13372 -- Start modifications for Bug # 3879658.
13373
13374 cursor cur_progress_status is
13375 select ptt.initial_progress_status_code
13376 from pa_task_types ptt, pa_proj_elements ppe, pa_proj_element_versions ppev
13377 where ppev.project_id = ppe.project_id
13378 and ppev.proj_element_id = ppe.proj_element_id
13379 and ppe.type_id = ptt.task_type_id
13380 and ppe.project_id = p_project_id
13381 and ppev.element_version_id = p_task_ver_id
13382 and ppev.parent_structure_version_id = p_structure_version_id;
13383
13384 l_init_prog_status_code VARCHAR2(150) := NULL;
13385
13386 -- End modifications for Bug # 3879658.
13387
13388 --bug 3959087, start
13389 l_BASE_PERCENT_COMP_DERIV_CODE VARCHAR2(30);
13390 l_lowest_level_task VARCHAR2(1);
13391 l_assignment_exists VARCHAR2(1);
13392 l_ppl_act_cost NUMBER;
13393 l_planned_cost NUMBER;
13394 l_actual_effort NUMBER;
13395 l_prj_currency_code VARCHAR2(15);
13396
13397 CURSOR cur_proj_elements(c_proj_element_id NUMBER)
13398 IS
13399 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 )
13400 from pa_proj_elements ppe
13401 ,pa_task_types ptt
13402 where ppe.project_id = p_project_id
13403 and ppe.proj_element_id = c_proj_element_id
13404 and ppe.type_id = ptt.task_type_id;
13405
13406
13407 cursor cur_get_costs(p_project_id NUMBER, p_object_id NUMBER, p_structure_version_id NUMBER) is
13408 select nvl(BRDN_COST, 0), nvl(ACT_LABOR_BRDN_COST, 0)
13409 from pji_xbs_plans_v
13410 where project_id = p_project_id
13411 and proj_element_id = p_object_id
13412 and structure_version_id = p_structure_version_id;
13413
13414 cursor cur_rollup_percent (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13415 p_structure_version_id NUMBER) is
13416 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
13417 from pa_progress_rollup ppr
13418 where ppr.project_id = p_project_id
13419 and ppr.object_id = p_object_id
13420 and ppr.object_version_id = p_object_version_id
13421 and ppr.structure_version_id = p_structure_version_id
13422 and ppr.object_type IN ('PA_TASKS','PA_STRUCTURES') -- -- Bug 4498610 : Added PA_STRUCTURES
13423 and ppr.current_flag = 'Y';
13424
13425
13426 cursor cur_rollup_percent2 (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13427 p_structure_version_id NUMBER) is
13428 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
13429 from pa_progress_rollup ppr
13430 where ppr.project_id = p_project_id
13431 and ppr.object_id = p_object_id
13432 and ppr.object_version_id = p_object_version_id
13433 and ppr.structure_version_id IS NULL
13434 and ppr.current_flag = 'Y'
13435 and ppr.object_type IN ('PA_TASKS','PA_STRUCTURES') -- Bug 4498610 : Added PA_STRUCTURES
13436 ;
13437
13438 --bug 3959087, end
13439
13440 -- Bug 3976633 : Added cursor cur_progress_exists
13441 cursor cur_progress_exists (c_project_id NUMBER, c_object_id NUMBER, c_structure_version_id NUMBER, c_version_enabled_flag VARCHAR2) is
13442 select 'Y'
13443 from pa_progress_rollup ppr
13444 where ppr.project_id = c_project_id
13445 and ppr.object_id = c_object_id
13446 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))
13447 and ppr.object_type = 'PA_TASKS'
13448 and ppr.structure_type = 'WORKPLAN';
13449
13450 l_progress_exists VARCHAR2(1):='N';
13451
13452 --BUG 3919800, rtarway
13453 cursor cur_get_act_effort (p_project_id NUMBER, p_object_id NUMBER, p_structure_version_id NUMBER) is
13454 select nvl(ACT_LABOR_HRS, 0)+nvl(ACT_EQUIP_HRS,0)
13455 from pji_xbs_plans_v
13456 where project_id = p_project_id
13457 and proj_element_id = p_object_id
13458 and structure_version_id = p_structure_version_id ;
13459
13460 l_curr_override_pc NUMBER; -- Bug 4498610
13461
13462 BEGIN
13463
13464 IF (p_debug_mode = 'Y') THEN
13465 pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO begin');
13466 END IF;
13467
13468 IF (p_commit = FND_API.G_TRUE) THEN
13469 savepoint UPDATE_task_det_sch;
13470 END IF;
13471
13472 l_debug_mode := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',fnd_global.user_id,fnd_global.login_id,275,null,null), 'N');
13473
13474 IF l_debug_mode = 'Y' THEN
13475 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);
13476 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);
13477 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);
13478 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);
13479 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);
13480 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);
13481 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);
13482 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);
13483 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);
13484 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);
13485 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);
13486 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);
13487 END IF;
13488
13489 l_version_enabled := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id); --maansari5/9
13490
13491 --The following actions are to be performed only when p_object_type = 'PA_TASKS'
13492
13493 --IF (p_object_type = 'PA_TASKS') THEN --- Bug 4498610
13494 IF (p_object_type IN ('PA_TASKS','PA_STRUCTURES')) THEN --- Bug 4498610
13495
13496 -- Bug Fix 5726773
13497 -- Support negative quantities and amounts.
13498 -- Commenting out the following validations.
13499 /*
13500 -- BEGIN: Code to raise error if negative etc values or planned values are entered.
13501 IF ((p_planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
13502 AND (nvl(p_planned_effort,0) < 0)) THEN
13503
13504 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
13505 ,p_msg_name => 'PA_TP_NO_NEG_PLN');
13506
13507 x_msg_data := 'PA_TP_NO_NEG_PLN';
13508 x_return_status := 'E';
13509 RAISE FND_API.G_EXC_ERROR;
13510 END IF;
13511
13512 IF (((p_etc_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and (nvl(p_etc_cost,0) < 0))
13513 or ((p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and (nvl(p_etc_effort,0) < 0))) THEN
13514
13515 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
13516 ,p_msg_name => 'PA_TP_NO_NEG_ETC');
13517
13518 x_msg_data := 'PA_TP_NO_NEG_ETC';
13519 x_return_status := 'E';
13520 RAISE FND_API.G_EXC_ERROR;
13521 END IF;
13522 */
13523 -- End of Bug Fix 5726773
13524
13525 -- END: Code to raise error if negative etc values or planned values are entered.
13526 IF l_debug_mode = 'Y' THEN
13527 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);
13528 END IF;
13529
13530 -- Get the task_id.
13531
13532 select proj_element_id
13533 into l_task_id
13534 from pa_proj_element_versions
13535 where element_version_id = p_task_ver_id
13536 and parent_structure_version_id = p_structure_version_id;
13537
13538 IF l_debug_mode = 'Y' THEN
13539 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);
13540 END IF;
13541 --bug 3959087
13542 SELECT project_currency_code INTO l_prj_currency_code FROM pa_projects_all WHERE project_id = p_project_id;
13543
13544 -- Bug 3856161 : This code will never excute for assignments, I don't know why has this written here
13545 -- Setting object_id for Tasks / Assignments.
13546 IF (p_object_type = 'PA_ASSIGNMENTS') THEN
13547 l_object_id := p_res_assign_id;
13548 ELSE
13549 l_object_id := l_task_id;
13550 END IF;
13551
13552 IF l_debug_mode = 'Y' THEN
13553 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);
13554 END IF;
13555
13556
13557 -- Logic to make sure that planned value = etc value + actual value if etc is changed.
13558 -- If both planned value and etc value are changed, then planned value always takes precedence,
13559 -- set etc value as (planned value - actual value).
13560 -- Confirmed this logic with Clint Chow.
13561
13562 IF ((nvl(p_planned_effort,0) > 0 and NVL( p_planned_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13563 or (nvl(p_etc_effort,0) > 0 and NVL(p_etc_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) THEN
13564
13565 -- Get previous planned value.
13566 -- Bug 3856161 : This code will never excute for assignments, I don't know why has this written here
13567 IF p_object_type ='PA_ASSIGNMENTS' THEN
13568 open cur_prev_planned_assgn_effort(p_project_id,l_task_id
13569 ,p_structure_version_id,p_res_assign_id);
13570 fetch cur_prev_planned_assgn_effort into l_prev_planned_effort;
13571 close cur_prev_planned_assgn_effort;
13572 ELSE
13573 open cur_prev_planned_task_effort(p_project_id,l_task_id,p_structure_version_id);
13574 fetch cur_prev_planned_task_effort into l_prev_planned_effort;
13575 close cur_prev_planned_task_effort;
13576 END IF;
13577
13578 IF l_debug_mode = 'Y' THEN
13579 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);
13580 END IF;
13581
13582 -- Get previous etc value.
13583 --maansari5/9
13584 IF NVL(l_version_enabled,'N') = 'Y'
13585 THEN
13586 open cur_prev_etc_effort(p_project_id,l_object_id,p_structure_version_id);
13587 fetch cur_prev_etc_effort into l_prev_etc_effort;
13588 close cur_prev_etc_effort;
13589 ELSE
13590 open cur_prev_etc_effort2(p_project_id,l_object_id);
13591 fetch cur_prev_etc_effort2 into l_prev_etc_effort;
13592 close cur_prev_etc_effort2;
13593 END IF;
13594
13595 IF l_debug_mode = 'Y' THEN
13596 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);
13597 END IF;
13598
13599 --maansari5/9
13600
13601 -- Initialize the variables for planned effort and etc effort.
13602
13603 l_planned_effort := null;
13604 l_etc_effort := null;
13605
13606 -- If planned value has been updated set etc value as (planned value - actual value).
13607 --bug 3959087, start
13608 IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13609 l_actual_effort := round(p_actual_effort, 5);
13610 ELSE
13611 --BUG 3919800, rtarway
13612 if p_calling_module <> 'AMG'
13613 then
13614 l_actual_effort := 0;
13615 else
13616 --BUG 3919800, rtarway
13617 --get actual effort using cursor cur_get_act_effort
13618 OPEN cur_get_act_effort(p_project_id,l_object_id,p_structure_version_id);
13619 FETCH cur_get_act_effort into l_actual_effort;
13620 CLOSE cur_get_act_effort;
13621 end if;
13622 END IF;
13623 --bug 3959087, end
13624
13625 IF l_debug_mode = 'Y' THEN
13626 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);
13627 END IF;
13628
13629 --maansari5/9
13630 IF (p_planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13631 --and (NVL(l_prev_planned_effort,0) <> NVL(p_planned_effort,0))) THEN --bug 3959087
13632 THEN
13633 --l_planned_effort := p_planned_effort; --bug 3959087
13634 l_planned_effort := round(p_planned_effort, 5);
13635 --BUG 3919800, rtarway
13636 --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13637 IF (l_actual_effort >= 0 ) THEN
13638 --l_etc_effort := NVL(p_planned_effort,0) - NVL(p_actual_effort, 0); --bug 3959087
13639 l_etc_effort := round((NVL(p_planned_effort,0) - NVL(l_actual_effort, 0)), 5);
13640 END IF;
13641 -- else set planned value as (etc vallue + actual value).
13642 ELSIF (p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13643 --and (NVL(l_prev_etc_effort,0) <> nvl(p_etc_effort,0))) THEN --bug 3959087
13644 THEN
13645 --l_etc_effort := NVL(p_etc_effort,0); --bug 3959087
13646 l_etc_effort := NVL(round(p_etc_effort,5),0);
13647 --BUG 3919800, rtarway
13648 --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13649 IF (l_actual_effort >= 0 ) THEN
13650 -- l_planned_effort := NVL( p_etc_effort, 0) + NVL(p_actual_effort,0); --bug 3959087
13651 l_planned_effort := round( (NVL( p_etc_effort, 0) + NVL(l_actual_effort,0)), 5);
13652 END IF;
13653 END IF;
13654 --maansari5/9
13655 END IF; -- IF ((nvl(p_planned_effort,0) > 0 and NVL( p_planned_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13656
13657 --Bug#6144931 START
13658
13659 l_weighting_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
13660
13661 IF l_weighting_basis = 'EFFORT' AND NVL(l_prev_planned_effort,0) <> NVL(l_planned_effort,0)
13662 THEN
13663 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
13664 p_project_id => p_project_id,
13665 p_structure_version_id => p_structure_version_id,
13666 p_update_wbs_flag => 'Y',
13667 x_return_status => l_return_status,
13668 x_msg_count => l_msg_count,
13669 x_msg_data => l_msg_data
13670 );
13671
13672 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13673 l_msg_count := FND_MSG_PUB.count_msg;
13674 IF l_msg_count > 0 THEN
13675 x_msg_count := l_msg_count;
13676 IF x_msg_count = 1 THEN
13677 x_msg_data := l_msg_data;
13678 END IF;
13679 RAISE FND_API.G_EXC_ERROR;
13680 END IF;
13681 END IF;
13682 END IF;
13683
13684 --Bug#6144931 END
13685
13686 IF l_debug_mode = 'Y' THEN
13687 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);
13688 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);
13689 END IF;
13690
13691 --bug 3959087, start
13692 l_lowest_level_task := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_ver_id );
13693 l_assignment_exists := PA_PROGRESS_UTILS.check_assignment_exists(p_project_id, p_task_ver_id, 'PA_TASKS');
13694
13695 IF l_debug_mode = 'Y' THEN
13696 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);
13697 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);
13698 END IF;
13699 --bug 3959087, end
13700
13701 -- Call: pa_fp_planning_transaction_pub.update_planning_transactions().
13702
13703 --IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_ver_id ) = 'Y' AND
13704 IF (l_lowest_level_task = 'Y' AND --bug 3959087
13705 PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y'
13706 -- Progress Management Changes, Bug # 3420093.
13707 --AND PA_PROGRESS_UTILS.check_assignment_exists(p_project_id,p_task_ver_id,p_object_type) = 'N' --bug 3864543
13708 AND l_assignment_exists = 'N' --bug 3959087
13709 AND p_object_type = 'PA_TASKS'
13710 AND p_calling_module <> 'AMG')
13711 THEN
13712
13713 OPEN cur_sch;
13714 FETCH cur_sch INTO l_SCHEDULED_START_DATE, l_SCHEDULED_END_DATE;
13715 CLOSE cur_sch;
13716 IF l_debug_mode = 'Y' THEN
13717 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);
13718 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);
13719 END IF;
13720
13721 l_task_ver_ids2.extend(1);
13722 l_planned_effort2.extend(1);
13723 l_start_dates.extend(1);
13724 l_end_dates.extend(1);
13725
13726 l_task_ver_ids2(1) := p_task_ver_id;
13727
13728 /* Start Modifications to fix Bug # 3640498. */
13729
13730 IF ((l_planned_effort = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) or (nvl(l_planned_effort,0) = 0)) then
13731 l_planned_effort2(1) := FND_API.G_MISS_NUM;
13732 ELSE
13733 l_planned_effort2(1) := l_planned_effort;
13734 END IF;
13735
13736 /* End Modifications to fix Bug # 3640498. */
13737
13738 l_start_dates(1) := l_SCHEDULED_START_DATE;
13739 l_end_dates(1) := l_SCHEDULED_END_DATE;
13740
13741 /*Smukka Bug No. 3474141 Date 03/01/2004 */
13742 /*moved pa_fp_planning_transaction_pub.update_planning_transactions into plsql block */
13743 BEGIN
13744 IF NVL(l_prev_planned_effort,0) <> NVL(l_planned_effort,0)
13745 THEN
13746 IF l_debug_mode = 'Y' THEN
13747 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling update_planning_transactions', x_Log_Level=> 3);
13748 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);
13749 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);
13750 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);
13751 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);
13752 END IF;
13753
13754 pa_fp_planning_transaction_pub.update_planning_transactions
13755 (
13756 p_context => 'WORKPLAN'
13757 ,p_struct_elem_version_id => p_structure_version_id
13758 ,p_task_elem_version_id_tbl => l_task_ver_ids2
13759 ,p_planned_people_effort_tbl => l_planned_effort2
13760 ,p_start_date_tbl => l_start_dates
13761 ,p_end_date_tbl => l_end_dates
13762 ,x_return_status => l_return_status
13763 ,x_msg_count => l_msg_count
13764 ,x_msg_data => l_msg_data
13765 );
13766 END IF;
13767 EXCEPTION
13768 WHEN OTHERS THEN
13769 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
13770 p_procedure_name => 'update_task_det_sch_info',
13771 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.update_planning_transactions:'||SQLERRM,1,240));
13772 RAISE FND_API.G_EXC_ERROR;
13773 END;
13774 --end 3301192 fp changes
13775 END IF; --<< l_planned_effort >>
13776
13777 -- Progress Management Changes, Bug # 3420093.
13778
13779 -- The following code inserts progress records into the pa_progress_rollup_table.
13780 -- this is required if only any of: p_etc_effort, p_etc_cost and p_percent_complete is not null
13781
13782
13783 --if ((nvl(p_etc_effort,0) > 0 and p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13784 -- or (nvl(p_etc_cost,0) > 0 and p_etc_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --maansari5/9
13785
13786
13787 l_next_prog_cycle_date := pa_progress_utils.get_next_progress_cycle(p_project_id => p_project_id , p_task_id => l_task_id);
13788 IF l_debug_mode = 'Y' THEN
13789 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);
13790 END IF;
13791
13792
13793 IF (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13794 THEN
13795 -- Progress Management Changes, Bug # 3420093.
13796 -- Begin logic to create pa_progress_rollup record for the Task / Assignment:
13797 -- Get the next progress cycle id.
13798 -- Bug 3856161 : Moving this code outside
13799 --l_next_prog_cycle_date := pa_progress_utils.get_next_progress_cycle(p_project_id => p_project_id
13800 -- , p_task_id => l_task_id);
13801 -- Progress Management Changes, Bug # 3420093.
13802 IF (p_percent_complete = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13803 l_percent_complete := null;
13804 ELSE
13805 --l_percent_complete := p_percent_complete; --bug 3959087
13806 l_percent_complete := round(p_percent_complete, 2);
13807 END IF;
13808
13809 -- Initializning the values for Override Percent Complete, Effective Rollup Percent Complete
13810 -- and Earned Value.
13811 -- Bug 3856161 : Reduced the scope of IF, now % cokplete should be rederived based on actual and etc too
13812 END IF;
13813
13814 l_eff_rollup_pc := null;
13815 l_override_pc := null;
13816 l_earned_value := null;
13817
13818 -- Setting values for Override Percent Complete, Effective Rollup Percent Complete
13819 -- and Earned Value.
13820
13821 IF (p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13822 --l_override_pc := p_percent_complete; --bug 3959087
13823 l_override_pc := round(p_percent_complete, 2);
13824 END IF;
13825
13826
13827 --bug 3959087, calculate percent complete for lowest level tasks only, depending on derivation code, start
13828
13829 /*IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13830 IF ((nvl(l_etc_effort,0)+nvl(p_actual_effort,0)) <> 0) THEN
13831 -- Bug 3856161
13832 --l_eff_rollup_pc := (nvl(l_etc_effort,0))/
13833 -- (nvl(l_etc_effort,0)+nvl(p_actual_effort,0));
13834 l_eff_rollup_pc := (nvl(p_actual_effort,0))/ (nvl(l_etc_effort,0)+nvl(p_actual_effort,0))*100;
13835 ELSE
13836 -- Bug 3856161
13837 --l_eff_rollup_pc := (nvl(l_etc_effort,0))/1;
13838 l_eff_rollup_pc := 0;
13839 END IF;
13840 -- Bug 3856161 : Reduced the scope of IF
13841 END IF;*/
13842
13843 -- 4498610 : Added PA_TASKS condition
13844 IF p_object_type = 'PA_TASKS' AND NVL( l_lowest_level_task, 'N' ) = 'Y' AND l_assignment_exists = 'N'
13845 THEN
13846 OPEN cur_proj_elements(l_task_id);
13847 FETCH cur_proj_elements INTO l_BASE_PERCENT_COMP_DERIV_CODE;
13848 CLOSE cur_proj_elements;
13849 IF l_debug_mode = 'Y' THEN
13850 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);
13851 END IF;
13852
13853 IF l_BASE_PERCENT_COMP_DERIV_CODE = 'EFFORT'
13854 THEN
13855 --BUG 3919800, rtarway, commented IF
13856 --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13857
13858 IF ((nvl(l_etc_effort,0)+nvl(l_actual_effort,0)) <> 0) THEN
13859 l_eff_rollup_pc := round((nvl(l_actual_effort,0))/ (nvl(l_etc_effort,0)+nvl(l_actual_effort,0))*100, 2);
13860 ELSE
13861 l_eff_rollup_pc := 0;
13862 END IF;
13863 --END IF;
13864 ELSIF l_BASE_PERCENT_COMP_DERIV_CODE = 'COST'
13865 THEN
13866 OPEN cur_get_costs(p_project_id, l_task_id, p_structure_version_id);
13867 FETCH cur_get_costs INTO l_planned_cost, l_ppl_act_cost;
13868 CLOSE cur_get_costs;
13869
13870 IF l_debug_mode = 'Y' THEN
13871 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);
13872 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);
13873 END IF;
13874 IF (l_planned_cost <> 0)
13875 THEN
13876 l_eff_rollup_pc := round((l_ppl_act_cost/l_planned_cost)*100, 2);
13877 ELSE
13878 l_eff_rollup_pc := 0;
13879 END IF;
13880 END IF;
13881 ELSE -- for summary level task fetch the rolledup percent from progress table
13882 IF NVL(l_version_enabled,'N') = 'Y'
13883 THEN
13884 OPEN cur_rollup_percent(p_project_id, l_task_id, p_task_ver_id, p_structure_version_id);
13885 FETCH cur_rollup_percent INTO l_eff_rollup_pc, l_curr_override_pc,l_actual_start_date,l_actual_finish_date ;
13886 -- Bug 4498610 : Added l_curr_override_pc, l_actual_START_DATE, l_actual_FINISH_DATE
13887 CLOSE cur_rollup_percent;
13888 ELSE
13889 OPEN cur_rollup_percent2(p_project_id, l_task_id, p_task_ver_id, p_structure_version_id);
13890 FETCH cur_rollup_percent2 INTO l_eff_rollup_pc,l_curr_override_pc,l_actual_start_date,l_actual_finish_date ;
13891 -- Bug 4498610 : Added l_curr_override_pc, l_actual_START_DATE, l_actual_FINISH_DATE
13892 CLOSE cur_rollup_percent2;
13893 END IF;
13894 END IF;
13895
13896 --bug 3959087, calculate percent complete for lowest level tasks only, depending on derivation code, end
13897
13898 IF l_debug_mode = 'Y' THEN
13899 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);
13900 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);
13901 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);
13902 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);
13903 END IF;
13904
13905
13906 OPEN c_get_task_weight_method;
13907 FETCH c_get_task_weight_method INTO l_rollup_method;
13908 CLOSE c_get_task_weight_method;
13909
13910 OPEN c_proj_element_id;
13911 FETCH c_proj_element_id INTO l_proj_element_id;
13912 CLOSE c_proj_element_id;
13913
13914 l_earned_value := nvl(l_override_pc,l_eff_rollup_pc) *
13915 PA_PROGRESS_UTILS.Get_BAC_Value(p_project_id,l_rollup_method
13916 ,l_proj_element_id,p_structure_version_id
13917 ,'WORKPLAN');
13918
13919 --bug 3959087, start
13920 IF l_rollup_method = 'EFFORT'
13921 THEN
13922 l_earned_value := nvl(round(l_earned_value, 5),0);
13923 ELSE
13924 l_earned_value := nvl(pa_currency.round_trans_currency_amt(l_earned_value, l_prj_currency_code),0);
13925 END IF;
13926 --bug 3959087, end
13927
13928 IF l_debug_mode = 'Y' THEN
13929 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);
13930 END IF;
13931
13932 --END IF; Bug 3856161
13933
13934
13935
13936 --maansari5/11
13937 -- Bug 3856161 : Using l_eff_rollup_pc also
13938 IF NVL(l_percent_complete,l_eff_rollup_pc) > 0 AND NVL(l_percent_complete,l_eff_rollup_pc) <100
13939 THEN
13940 -- Bug 4498610 : Added nvl actual_start_date
13941 l_actual_START_DATE := nvl(l_actual_start_date,l_SCHEDULED_START_DATE);
13942 l_actual_finish_DATE := null;
13943 ELSIF NVL(l_percent_complete,l_eff_rollup_pc) > 0 AND NVL(l_percent_complete,l_eff_rollup_pc) =100
13944 THEN
13945 -- Bug 4498610 : Added nvl actual_start_date and finish_date
13946 l_actual_START_DATE := nvl(l_actual_start_date,l_SCHEDULED_START_DATE);
13947 l_actual_finish_DATE := nvl(l_actual_finish_date,l_SCHEDULED_END_DATE);
13948 END IF;
13949
13950 IF l_debug_mode = 'Y' THEN
13951 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);
13952 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);
13953 END IF;
13954
13955 -- Progress Management Changes, Bug # 3420093.
13956 -- If workplan versioning is disabled for the project.
13957 -- Bug 3856161 : Added this IF condition
13958
13959 IF ( (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13960
13961 -- Start modifications for Bug # 3879658.
13962
13963 -- OR
13964 --(p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13965
13966 -- End modifications for Bug # 3879658.
13967 )
13968 THEN
13969 -- Bug 4498610 : Added code below
13970 IF l_curr_override_pc IS NULL AND (l_percent_complete = l_eff_rollup_pc )THEN
13971 l_percent_complete := null;
13972 END IF;
13973
13974 IF (l_version_enabled = 'N') THEN --maansari5/9
13975 --- If progress exists, update the latest existing progress record
13976 open cur_progress2(p_project_id,l_object_id,p_task_ver_id,null,'Y');
13977 fetch cur_progress2 into cur_progress_rec;
13978 IF cur_progress2%found THEN
13979
13980 update pa_progress_rollup set
13981 --as_of_date = l_next_prog_cycle_date,
13982 estimated_remaining_effort = null --l_etc_effort
13983 ,completed_percentage = l_percent_complete
13984 ,eff_rollup_percent_comp = l_eff_rollup_pc
13985 ,earned_value = l_earned_value
13986 ,actual_start_date = l_actual_start_date
13987 ,actual_finish_date = l_actual_finish_date
13988 ,last_update_date = sysdate
13989 ,last_updated_by = l_user_id
13990 --,creation_date = sysdate
13991 --,created_by = l_user_id
13992 ,last_update_login = l_login_id
13993 where progress_rollup_id = cur_progress_rec.progress_rollup_id;
13994
13995 -- If progress does not exist, create a published progress record.
13996 l_rollup_as_of_date := cur_progress_rec.as_of_date;
13997
13998 --bug no.3708948 start
13999 update pa_percent_completes set completed_percentage = l_percent_complete
14000 where project_id = p_project_id
14001 and object_id = l_task_id
14002 and date_computed =l_rollup_as_of_date
14003 and current_flag = 'Y'
14004 and published_flag = 'Y';
14005 --bug no.3708948 end
14006 ELSE
14007 l_progress_rollup_id := null;
14008
14009 -- Start modifications for Bug # 3879658.
14010
14011 open cur_progress_status;
14012 fetch cur_progress_status into l_init_prog_status_code;
14013 close cur_progress_status;
14014
14015 -- End modifications for Bug # 3879658.
14016
14017 PA_PROGRESS_ROLLUP_PKG.INSERT_ROW(
14018 X_PROGRESS_ROLLUP_ID => l_progress_rollup_id
14019 ,X_PROJECT_ID => p_project_id
14020 ,X_OBJECT_ID => l_object_id
14021 ,X_OBJECT_TYPE => p_object_type
14022 ,X_AS_OF_DATE => l_next_prog_cycle_date
14023 ,X_OBJECT_VERSION_ID => p_task_ver_id
14024 ,X_LAST_UPDATE_DATE => SYSDATE
14025 ,X_LAST_UPDATED_BY => l_user_id
14026 ,X_CREATION_DATE => SYSDATE
14027 ,X_CREATED_BY => l_user_id
14028 ,X_PROGRESS_STATUS_CODE => l_init_prog_status_code -- Bug # 3879658 -- 'PROGRESS_STAT_ON_TRACK' --maansari5/11
14029 ,X_LAST_UPDATE_LOGIN => l_login_id
14030 ,X_INCREMENTAL_WORK_QTY => null
14031 ,X_CUMULATIVE_WORK_QTY => null
14032 ,X_BASE_PERCENT_COMPLETE => null
14033 ,X_EFF_ROLLUP_PERCENT_COMP => l_eff_rollup_pc
14034 ,X_COMPLETED_PERCENTAGE => l_percent_complete
14035 ,X_ESTIMATED_START_DATE => null
14036 ,X_ESTIMATED_FINISH_DATE => null
14037 ,X_ACTUAL_START_DATE => l_actual_start_DATE
14038 ,X_ACTUAL_FINISH_DATE => l_actual_finish_DATE
14039 ,X_EST_REMAINING_EFFORT => null --l_etc_effort
14040 ,X_BASE_PERCENT_COMP_DERIV_CODE => null
14041 ,X_BASE_PROGRESS_STATUS_CODE => null
14042 ,X_EFF_ROLLUP_PROG_STAT_CODE => null
14043 ,x_percent_complete_id => null
14044 ,X_STRUCTURE_TYPE => 'WORKPLAN'
14045 ,X_PROJ_ELEMENT_ID => l_task_id
14046 ,X_STRUCTURE_VERSION_ID => null
14047 ,X_PPL_ACT_EFFORT_TO_DATE => null
14048 ,X_EQPMT_ACT_EFFORT_TO_DATE => null
14049 ,X_EQPMT_ETC_EFFORT => null
14050 ,X_OTH_ACT_COST_TO_DATE_TC => null
14051 ,X_OTH_ACT_COST_TO_DATE_FC => null
14052 ,X_OTH_ACT_COST_TO_DATE_PC => null
14053 ,X_OTH_ETC_COST_TC => null
14054 ,X_OTH_ETC_COST_FC => null
14055 ,X_OTH_ETC_COST_PC => null
14056 ,X_PPL_ACT_COST_TO_DATE_TC => null
14057 ,X_PPL_ACT_COST_TO_DATE_FC => null
14058 ,X_PPL_ACT_COST_TO_DATE_PC => null
14059 ,X_PPL_ETC_COST_TC => null
14060 ,X_PPL_ETC_COST_FC => null
14061 ,X_PPL_ETC_COST_PC => null
14062 ,X_EQPMT_ACT_COST_TO_DATE_TC => null
14063 ,X_EQPMT_ACT_COST_TO_DATE_FC => null
14064 ,X_EQPMT_ACT_COST_TO_DATE_PC => null
14065 ,X_EQPMT_ETC_COST_TC => null
14066 ,X_EQPMT_ETC_COST_FC => null
14067 ,X_EQPMT_ETC_COST_PC => null
14068 ,X_EARNED_VALUE => l_earned_value
14069 ,X_TASK_WT_BASIS_CODE => null
14070 ,X_SUBPRJ_PPL_ACT_EFFORT => null
14071 ,X_SUBPRJ_EQPMT_ACT_EFFORT => null
14072 ,X_SUBPRJ_PPL_ETC_EFFORT => null
14073 ,X_SUBPRJ_EQPMT_ETC_EFFORT => null
14074 ,X_SBPJ_OTH_ACT_COST_TO_DATE_TC => null
14075 ,X_SBPJ_OTH_ACT_COST_TO_DATE_FC => null
14076 ,X_SBPJ_OTH_ACT_COST_TO_DATE_PC => null
14077 ,X_SUBPRJ_PPL_ACT_COST_TC => null
14078 ,X_SUBPRJ_PPL_ACT_COST_FC => null
14079 ,X_SUBPRJ_PPL_ACT_COST_PC => null
14080 ,X_SUBPRJ_EQPMT_ACT_COST_TC => null
14081 ,X_SUBPRJ_EQPMT_ACT_COST_FC => null
14082 ,X_SUBPRJ_EQPMT_ACT_COST_PC => null
14083 ,X_SUBPRJ_OTH_ETC_COST_TC => null
14084 ,X_SUBPRJ_OTH_ETC_COST_FC => null
14085 ,X_SUBPRJ_OTH_ETC_COST_PC => null
14086 ,X_SUBPRJ_PPL_ETC_COST_TC => null
14087 ,X_SUBPRJ_PPL_ETC_COST_FC => null
14088 ,X_SUBPRJ_PPL_ETC_COST_PC => null
14089 ,X_SUBPRJ_EQPMT_ETC_COST_TC => null
14090 ,X_SUBPRJ_EQPMT_ETC_COST_FC => null
14091 ,X_SUBPRJ_EQPMT_ETC_COST_PC => null
14092 ,X_SUBPRJ_EARNED_VALUE => null
14093 ,X_CURRENT_FLAG => 'Y'
14094 ,X_PROJFUNC_COST_RATE_TYPE => null
14095 ,X_PROJFUNC_COST_EXCHANGE_RATE => null
14096 -- ,X_PROJFUNC_COST_RATE_DATE_TYPE => null
14097 ,X_PROJFUNC_COST_RATE_DATE => null
14098 ,X_PROJ_COST_RATE_TYPE => null
14099 ,X_PROJ_COST_EXCHANGE_RATE => null
14100 -- ,X_PROJ_COST_RATE_DATE_TYPE => null
14101 ,X_PROJ_COST_RATE_DATE => null
14102 ,X_TXN_CURRENCY_CODE => null
14103 ,X_PROG_PA_PERIOD_NAME => PA_PROGRESS_UTILS.Prog_Get_Pa_Period_Name(l_next_prog_cycle_date) --maansari5/11
14104 ,X_PROG_GL_PERIOD_NAME => PA_PROGRESS_UTILS.Prog_Get_gl_Period_Name(l_next_prog_cycle_date) --maansari5/11
14105 ,X_OTH_QUANTITY_to_date => null --maansari5/9
14106 ,X_OTH_ETC_QUANTITY => null
14107 --bug 3621404
14108 ,X_OTH_ACT_RAWCOST_TO_DATE_TC => null
14109 ,X_OTH_ACT_RAWCOST_TO_DATE_FC => null
14110 ,X_OTH_ACT_RAWCOST_TO_DATE_PC => null
14111 ,X_OTH_ETC_RAWCOST_TC => null
14112 ,X_OTH_ETC_RAWCOST_FC => null
14113 ,X_OTH_ETC_RAWCOST_PC => null
14114 ,X_PPL_ACT_RAWCOST_TO_DATE_TC => null
14115 ,X_PPL_ACT_RAWCOST_TO_DATE_FC => null
14116 ,X_PPL_ACT_RAWCOST_TO_DATE_PC => null
14117 ,X_PPL_ETC_RAWCOST_TC => null
14118 ,X_PPL_ETC_RAWCOST_FC => null
14119 ,X_PPL_ETC_RAWCOST_PC => null
14120 ,X_EQPMT_ACT_RAWCOST_TO_DATE_TC => null
14121 ,X_EQPMT_ACT_RAWCOST_TO_DATE_FC => null
14122 ,X_EQPMT_ACT_RAWCOST_TO_DATE_PC => null
14123 ,X_EQPMT_ETC_RAWCOST_TC => null
14124 ,X_EQPMT_ETC_RAWCOST_FC => null
14125 ,X_EQPMT_ETC_RAWCOST_PC => null
14126 ,X_SP_OTH_ACT_RAWCOST_TODATE_TC => null
14127 ,X_SP_OTH_ACT_RAWCOST_TODATE_FC => null
14128 ,X_SP_OTH_ACT_RAWCOST_TODATE_PC => null
14129 ,X_SUBPRJ_PPL_ACT_RAWCOST_TC => null
14130 ,X_SUBPRJ_PPL_ACT_RAWCOST_FC => null
14131 ,X_SUBPRJ_PPL_ACT_RAWCOST_PC => null
14132 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_TC => null
14133 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_FC => null
14134 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_PC => null
14135 ,X_SUBPRJ_OTH_ETC_RAWCOST_TC => null
14136 ,X_SUBPRJ_OTH_ETC_RAWCOST_FC => null
14137 ,X_SUBPRJ_OTH_ETC_RAWCOST_PC => null
14138 ,X_SUBPRJ_PPL_ETC_RAWCOST_TC => null
14139 ,X_SUBPRJ_PPL_ETC_RAWCOST_FC => null
14140 ,X_SUBPRJ_PPL_ETC_RAWCOST_PC => null
14141 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_TC => null
14142 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_FC => null
14143 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_PC => null
14144 );
14145 --bug 3708948
14146
14147 l_rollup_as_of_date := l_next_prog_cycle_date;
14148
14149
14150 END IF; -- IF cur_progress2%found THEN
14151 CLOSE cur_progress2;
14152 --bug 3708948 commented as this is causing new record to be inserted, moved this code up Satish
14153 --l_rollup_as_of_date := l_next_prog_cycle_date;
14154 -- If workplan versioning is enabled for the project.
14155 ELSE -- Version Enabled
14156 -- If working progress exists then update the working progress rec.
14157
14158 /* Bug # 3755089. Modified the following cursor. */
14159
14160 open cur_progress(p_project_id,l_object_id,p_task_ver_id,p_structure_version_id);
14161 fetch cur_progress into cur_progress_rec;
14162 if cur_progress%found then
14163
14164 update pa_progress_rollup set
14165 --as_of_date = l_next_prog_cycle_date,
14166 estimated_remaining_effort = null --l_etc_effort
14167 ,completed_percentage = l_percent_complete
14168 ,eff_rollup_percent_comp = l_eff_rollup_pc
14169 ,earned_value = l_earned_value
14170 ,actual_start_date = l_actual_start_date
14171 ,actual_finish_date = l_actual_finish_date
14172 ,last_update_date = sysdate
14173 ,last_updated_by = l_user_id
14174 --,creation_date = sysdate
14175 --,created_by = l_user_id
14176 ,last_update_login = l_login_id
14177 where progress_rollup_id = cur_progress_rec.progress_rollup_id;
14178
14179 l_rollup_as_of_date := cur_progress_rec.as_of_date;
14180
14181 -- If working progress record does not exist.
14182 else
14183 -- If published progress record exists, set the as_of_date for the progress record
14184
14185 close cur_progress;
14186 open c_max_as_of_date_wkg; ---4501133
14187 fetch c_max_as_of_date_wkg into l_as_of_date;
14188 close c_max_as_of_date_wkg;
14189 if l_as_of_date is null then
14190
14191 open cur_progress2(p_project_id,l_object_id,p_task_ver_id,null,'Y');
14192 fetch cur_progress2 into cur_progress_rec;
14193 if cur_progress2%found then
14194
14195 if (cur_progress_rec.as_of_date > l_next_prog_cycle_date) then
14196 l_as_of_date := cur_progress_rec.as_of_date;
14197 else
14198 l_as_of_date := l_next_prog_cycle_date;
14199 end if;
14200
14201 /* Start code to fix issue in bug # 3755089. */
14202
14203 else
14204 l_as_of_date := l_next_prog_cycle_date;
14205
14206 /* End code to fix issue in bug # 3755089. */
14207
14208 end if;
14209 close cur_progress2;
14210 end if;
14211
14212 l_rollup_as_of_date := l_as_of_date;
14213
14214 -- Create a working progress record for the Task / Assignment.
14215
14216 l_progress_rollup_id := null;
14217
14218
14219 -- Start modifications for Bug # 3879658.
14220
14221 open cur_progress_status;
14222 fetch cur_progress_status into l_init_prog_status_code;
14223 close cur_progress_status;
14224
14225 -- End modifications for Bug # 3879658.
14226
14227 PA_PROGRESS_ROLLUP_PKG.INSERT_ROW(
14228 X_PROGRESS_ROLLUP_ID => l_progress_rollup_id
14229 ,X_PROJECT_ID => p_project_id
14230 ,X_OBJECT_ID => l_object_id
14231 ,X_OBJECT_TYPE => p_object_type
14232 ,X_AS_OF_DATE => l_as_of_date
14233 ,X_OBJECT_VERSION_ID => p_task_ver_id
14234 ,X_LAST_UPDATE_DATE => SYSDATE
14235 ,X_LAST_UPDATED_BY => l_user_id
14236 ,X_CREATION_DATE => SYSDATE
14237 ,X_CREATED_BY => l_user_id
14238 ,X_PROGRESS_STATUS_CODE => l_init_prog_status_code -- Bug # 3879658 -- 'PROGRESS_STAT_ON_TRACK' --maansari5/11
14239 ,X_LAST_UPDATE_LOGIN => l_login_id
14240 ,X_INCREMENTAL_WORK_QTY => null
14241 ,X_CUMULATIVE_WORK_QTY => null
14242 ,X_BASE_PERCENT_COMPLETE => null
14243 ,X_EFF_ROLLUP_PERCENT_COMP => l_eff_rollup_pc
14244 ,X_COMPLETED_PERCENTAGE => l_percent_complete
14245 ,X_ESTIMATED_START_DATE => null
14246 ,X_ESTIMATED_FINISH_DATE => null
14247 ,X_ACTUAL_START_DATE => l_actual_start_DATE
14248 ,X_ACTUAL_FINISH_DATE => l_actual_finish_DATE
14249 ,X_EST_REMAINING_EFFORT => null --l_etc_effort
14250 ,X_BASE_PERCENT_COMP_DERIV_CODE => null
14251 ,X_BASE_PROGRESS_STATUS_CODE => null
14252 ,X_EFF_ROLLUP_PROG_STAT_CODE => null
14253 ,x_percent_complete_id => null
14254 ,X_STRUCTURE_TYPE => 'WORKPLAN'
14255 ,X_PROJ_ELEMENT_ID => l_task_id
14256 ,X_STRUCTURE_VERSION_ID => p_structure_version_id
14257 ,X_PPL_ACT_EFFORT_TO_DATE => null
14258 ,X_EQPMT_ACT_EFFORT_TO_DATE => null
14259 ,X_EQPMT_ETC_EFFORT => null
14260 ,X_OTH_ACT_COST_TO_DATE_TC => null
14261 ,X_OTH_ACT_COST_TO_DATE_FC => null
14262 ,X_OTH_ACT_COST_TO_DATE_PC => null
14263 ,X_OTH_ETC_COST_TC => null
14264 ,X_OTH_ETC_COST_FC => null
14265 ,X_OTH_ETC_COST_PC => null
14266 ,X_PPL_ACT_COST_TO_DATE_TC => null
14267 ,X_PPL_ACT_COST_TO_DATE_FC => null
14268 ,X_PPL_ACT_COST_TO_DATE_PC => null
14269 ,X_PPL_ETC_COST_TC => null
14270 ,X_PPL_ETC_COST_FC => null
14271 ,X_PPL_ETC_COST_PC => null
14272 ,X_EQPMT_ACT_COST_TO_DATE_TC => null
14273 ,X_EQPMT_ACT_COST_TO_DATE_FC => null
14274 ,X_EQPMT_ACT_COST_TO_DATE_PC => null
14275 ,X_EQPMT_ETC_COST_TC => null
14276 ,X_EQPMT_ETC_COST_FC => null
14277 ,X_EQPMT_ETC_COST_PC => null
14278 ,X_EARNED_VALUE => l_earned_value
14279 ,X_TASK_WT_BASIS_CODE => null
14280 ,X_SUBPRJ_PPL_ACT_EFFORT => null
14281 ,X_SUBPRJ_EQPMT_ACT_EFFORT => null
14282 ,X_SUBPRJ_PPL_ETC_EFFORT => null
14283 ,X_SUBPRJ_EQPMT_ETC_EFFORT => null
14284 ,X_SBPJ_OTH_ACT_COST_TO_DATE_TC => null
14285 ,X_SBPJ_OTH_ACT_COST_TO_DATE_FC => null
14286 ,X_SBPJ_OTH_ACT_COST_TO_DATE_PC => null
14287 ,X_SUBPRJ_PPL_ACT_COST_TC => null
14288 ,X_SUBPRJ_PPL_ACT_COST_FC => null
14289 ,X_SUBPRJ_PPL_ACT_COST_PC => null
14290 ,X_SUBPRJ_EQPMT_ACT_COST_TC => null
14291 ,X_SUBPRJ_EQPMT_ACT_COST_FC => null
14292 ,X_SUBPRJ_EQPMT_ACT_COST_PC => null
14293 ,X_SUBPRJ_OTH_ETC_COST_TC => null
14294 ,X_SUBPRJ_OTH_ETC_COST_FC => null
14295 ,X_SUBPRJ_OTH_ETC_COST_PC => null
14296 ,X_SUBPRJ_PPL_ETC_COST_TC => null
14297 ,X_SUBPRJ_PPL_ETC_COST_FC => null
14298 ,X_SUBPRJ_PPL_ETC_COST_PC => null
14299 ,X_SUBPRJ_EQPMT_ETC_COST_TC => null
14300 ,X_SUBPRJ_EQPMT_ETC_COST_FC => null
14301 ,X_SUBPRJ_EQPMT_ETC_COST_PC => null
14302 ,X_SUBPRJ_EARNED_VALUE => null
14303 ,X_CURRENT_FLAG => 'Y' -- /* Bug # 3755089. */
14304 ,X_PROJFUNC_COST_RATE_TYPE => null
14305 ,X_PROJFUNC_COST_EXCHANGE_RATE => null
14306 -- ,X_PROJFUNC_COST_RATE_DATE_TYPE => null
14307 ,X_PROJFUNC_COST_RATE_DATE => null
14308 ,X_PROJ_COST_RATE_TYPE => null
14309 ,X_PROJ_COST_EXCHANGE_RATE => null
14310 -- ,X_PROJ_COST_RATE_DATE_TYPE => null
14311 ,X_PROJ_COST_RATE_DATE => null
14312 ,X_TXN_CURRENCY_CODE => null
14313 ,X_PROG_PA_PERIOD_NAME => PA_PROGRESS_UTILS.Prog_Get_Pa_Period_Name(l_as_of_date) --maansari5/11
14314 ,X_PROG_GL_PERIOD_NAME => PA_PROGRESS_UTILS.Prog_Get_gl_Period_Name(l_as_of_date) --maansari5/11
14315 ,X_OTH_QUANTITY_to_date => null --maansari5/9
14316 ,X_OTH_ETC_QUANTITY => null
14317 --bug 3621404
14318 ,X_OTH_ACT_RAWCOST_TO_DATE_TC => null
14319 ,X_OTH_ACT_RAWCOST_TO_DATE_FC => null
14320 ,X_OTH_ACT_RAWCOST_TO_DATE_PC => null
14321 ,X_OTH_ETC_RAWCOST_TC => null
14322 ,X_OTH_ETC_RAWCOST_FC => null
14323 ,X_OTH_ETC_RAWCOST_PC => null
14324 ,X_PPL_ACT_RAWCOST_TO_DATE_TC => null
14325 ,X_PPL_ACT_RAWCOST_TO_DATE_FC => null
14326 ,X_PPL_ACT_RAWCOST_TO_DATE_PC => null
14327 ,X_PPL_ETC_RAWCOST_TC => null
14328 ,X_PPL_ETC_RAWCOST_FC => null
14329 ,X_PPL_ETC_RAWCOST_PC => null
14330 ,X_EQPMT_ACT_RAWCOST_TO_DATE_TC => null
14331 ,X_EQPMT_ACT_RAWCOST_TO_DATE_FC => null
14332 ,X_EQPMT_ACT_RAWCOST_TO_DATE_PC => null
14333 ,X_EQPMT_ETC_RAWCOST_TC => null
14334 ,X_EQPMT_ETC_RAWCOST_FC => null
14335 ,X_EQPMT_ETC_RAWCOST_PC => null
14336 ,X_SP_OTH_ACT_RAWCOST_TODATE_TC => null
14337 ,X_SP_OTH_ACT_RAWCOST_TODATE_FC => null
14338 ,X_SP_OTH_ACT_RAWCOST_TODATE_PC => null
14339 ,X_SUBPRJ_PPL_ACT_RAWCOST_TC => null
14340 ,X_SUBPRJ_PPL_ACT_RAWCOST_FC => null
14341 ,X_SUBPRJ_PPL_ACT_RAWCOST_PC => null
14342 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_TC => null
14343 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_FC => null
14344 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_PC => null
14345 ,X_SUBPRJ_OTH_ETC_RAWCOST_TC => null
14346 ,X_SUBPRJ_OTH_ETC_RAWCOST_FC => null
14347 ,X_SUBPRJ_OTH_ETC_RAWCOST_PC => null
14348 ,X_SUBPRJ_PPL_ETC_RAWCOST_TC => null
14349 ,X_SUBPRJ_PPL_ETC_RAWCOST_FC => null
14350 ,X_SUBPRJ_PPL_ETC_RAWCOST_PC => null
14351 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_TC => null
14352 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_FC => null
14353 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_PC => null
14354 );
14355
14356 end if; -- if cur_progress%found then
14357 -- If working progress record does not exist.
14358
14359 /* Start code to fix issue in bug # 3755089. */
14360
14361 if cur_progress%isopen then
14362
14363 /* End code to fix issue in bug # 3755089. */
14364
14365 close cur_progress;
14366
14367 /* Start code to fix issue in bug # 3755089. */
14368
14369 end if;
14370
14371 /* End code to fix issue in bug # 3755089. */
14372
14373 end if; -- If workplan versioning is enabled for the project.
14374
14375
14376 -- end if;--IF Bug 3856161 (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14377 END IF; -- Bug 3856161 ( (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14378
14379
14380 IF p_object_type = 'PA_TASKS' THEN-- Bug 4498610 : Added IF
14381 -- Bug 3976633 : Added cursor cur_progress_exists
14382 OPEN cur_progress_exists (p_project_id, l_task_id, p_structure_version_id, l_version_enabled);
14383 FETCH cur_progress_exists INTO l_progress_exists;
14384 CLOSE cur_progress_exists;
14385
14386 IF NVL(l_progress_exists, 'N') = 'Y' THEN -- Bug 3976633
14387
14388 --maansari5/11
14389 OPEN c_get_task_weight_method;
14390 FETCH c_get_task_weight_method INTO l_rollup_method;
14391 CLOSE c_get_task_weight_method;
14392
14393
14394
14395 -- Call rollup_progress_pvt api for this task.
14396 IF l_debug_mode = 'Y' THEN
14397 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling Rollup For Tasks', x_Log_Level=> 3);
14398 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);
14399 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);
14400 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);
14401 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);
14402 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);
14403 END IF;
14404
14405 -- 4591321 : Always call populate_pji_tab_for_plan
14406 pa_progress_pub.populate_pji_tab_for_plan(
14407 p_init_msg_list => FND_API.G_FALSE,
14408 p_project_id => p_project_id,
14409 p_structure_version_id => p_structure_version_id,
14410 p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id),
14411 p_structure_type => 'WORKPLAN',
14412 x_return_status => l_return_status,
14413 x_msg_count => l_msg_count,
14414 x_msg_data => l_msg_data
14415 );
14416
14417 IF l_return_status <> 'S' THEN
14418 RAISE FND_API.G_EXC_ERROR;
14419 END IF;
14420
14421 -- Bug 3861259 End
14422
14423
14424 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
14425 p_init_msg_list => p_init_msg_list
14426 ,p_commit => p_commit
14427 ,p_validate_only => p_validate_only
14428 ,p_project_id => p_project_id
14429 ,p_structure_version_id => p_structure_version_id
14430 ,p_calling_module => p_calling_module --BUG 3919800, rtarway
14431 --maansari5/10
14432 ,p_object_type => p_object_type
14433 ,p_object_id => l_task_id
14434 ,p_object_version_id => p_task_ver_id
14435 ,p_task_version_id => p_task_ver_id
14436 --maansari5/10
14437 ,p_wp_rollup_method => l_rollup_method --maansari 5/11
14438 ,p_structure_type => 'WORKPLAN' --maansari 5/11
14439 ,p_as_of_date => l_rollup_as_of_date
14440 ,x_return_status => l_return_status
14441 ,x_msg_count => l_msg_count
14442 ,x_msg_data => l_msg_data);
14443 END IF ;--IF NVL(l_progress_exists, 'N') = 'Y' THEN
14444 END IF;-- p_object_type = 'PA_TASKS' THEN-- Bug 4498610 : Added END IF
14445 END IF; -- if (p_object_type ='PA_TASKS') then
14446
14447 -- Code to insert progress records nto the pa_progress_rollup_table.
14448
14449 /* END: The above actions are to be performed only when p_object_type = 'PA_TASKS'. */
14450
14451
14452 /* BEGIN: The following actions are to be performed only when p_object_type = 'PA_ASSIGNMENTS'. */
14453
14454 IF (p_object_type ='PA_ASSIGNMENTS') then
14455
14456 -- Call rollup API only is there is a working progress for the given task_version and
14457 -- structure_version. The as_of_date will then be the max(as_of_date() of the working progress.
14458 IF l_debug_mode = 'Y' THEN
14459 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Entered For Assignments', x_Log_Level=> 3);
14460 END IF;
14461
14462 --bug 4105720, get the task id
14463 OPEN c_proj_element_id;
14464 FETCH c_proj_element_id INTO l_task_id;
14465 CLOSE c_proj_element_id;
14466
14467 -- Bug 3976633 : Added cursor cur_progress_exists
14468 OPEN cur_progress_exists (p_project_id, l_task_id, p_structure_version_id, l_version_enabled);
14469 FETCH cur_progress_exists INTO l_progress_exists;
14470 CLOSE cur_progress_exists;
14471
14472 IF l_debug_mode = 'Y' THEN
14473 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);
14474 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);
14475 END IF;
14476
14477 IF NVL(l_progress_exists, 'N') = 'Y' THEN -- Bug 3976633
14478
14479
14480 open c_max_as_of_date_wkg;
14481 fetch c_max_as_of_date_wkg into l_rollup_as_of_date;
14482 --if (c_max_as_of_date_wkg%FOUND) then Bug 3856161
14483 IF l_rollup_as_of_date IS NOT NULL THEN
14484
14485 --maansari5/11
14486 OPEN c_get_task_weight_method;
14487 FETCH c_get_task_weight_method INTO l_rollup_method;
14488 CLOSE c_get_task_weight_method;
14489
14490 --bug 4105720, moved this code above
14491 /*OPEN c_proj_element_id;
14492 FETCH c_proj_element_id INTO l_task_id;
14493 CLOSE c_proj_element_id;*/
14494
14495 IF l_debug_mode = 'Y' THEN
14496 pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling Rollup For Assignments', x_Log_Level=> 3);
14497 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);
14498 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);
14499 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);
14500 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);
14501 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);
14502 END IF;
14503 -- 4591321 : Always call populate_pji_tab_for_plan
14504
14505 pa_progress_pub.populate_pji_tab_for_plan(
14506 p_init_msg_list => FND_API.G_FALSE,
14507 --p_calling_module => p_calling_module,
14508 p_project_id => p_project_id,
14509 p_structure_version_id => p_structure_version_id,
14510 p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id),
14511 p_structure_type => 'WORKPLAN',
14512 x_return_status => l_return_status,
14513 x_msg_count => l_msg_count,
14514 x_msg_data => l_msg_data
14515 );
14516 IF l_return_status <> 'S' THEN
14517 RAISE FND_API.G_EXC_ERROR;
14518 END IF;
14519 -- Bug 3861259 End
14520
14521
14522
14523 -- Call rollup_progress_pvt api for this task or assignment.
14524 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
14525 p_init_msg_list => p_init_msg_list
14526 ,p_commit => p_commit
14527 ,p_validate_only => p_validate_only
14528 ,p_project_id => p_project_id
14529 ,p_structure_version_id => p_structure_version_id
14530 ,p_calling_module => p_calling_module--BUG 3919800, rtarway
14531 --maansari5/10
14532 ,p_object_type => 'PA_TASKS' -- p_object_type Bug 3856161
14533 ,p_object_id => l_task_id
14534 ,p_object_version_id => p_task_ver_id
14535 ,p_task_version_id => p_task_ver_id
14536 --maansari5/10
14537 ,p_wp_rollup_method => l_rollup_method --maansari 5/11
14538 ,p_structure_type => 'WORKPLAN' --maansari 5/11
14539 ,p_as_of_date => l_rollup_as_of_date
14540 ,x_return_status => l_return_status
14541 ,x_msg_count => l_msg_count
14542 ,x_msg_data => l_msg_data);
14543 -- Code to insert progress records nto the pa_progress_rollup_table.
14544
14545 end if;
14546 close c_max_as_of_date_wkg;
14547 END IF; -- IF NVL(l_progress_exists, 'N') = 'Y'
14548 end if;
14549
14550 /* END: The above actions are to be performed only when p_object_type = 'PA_ASSIGNMENTS'. */
14551
14552 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
14553 x_msg_count := FND_MSG_PUB.count_msg;
14554 if x_msg_count = 1 then
14555 pa_interface_utils_pub.get_messages
14556 (p_encoded => FND_API.G_TRUE,
14557 p_msg_index => 1,
14558 p_msg_count => l_msg_count,
14559 p_msg_data => l_msg_data,
14560 p_data => l_data,
14561 p_msg_index_out => l_msg_index_out);
14562 x_msg_data := l_data;
14563 end if;
14564 raise FND_API.G_EXC_ERROR;
14565 end if;
14566
14567 x_return_status := FND_API.G_RET_STS_SUCCESS;
14568
14569 EXCEPTION
14570 WHEN FND_API.G_EXC_ERROR THEN
14571 IF (p_commit = FND_API.G_TRUE) THEN
14572 ROLLBACK to UPDATE_task_det_sch;
14573 END IF;
14574 x_msg_count := FND_MSG_PUB.count_msg;
14575 x_return_status := FND_API.G_RET_STS_ERROR;
14576 WHEN OTHERS THEN
14577 IF (p_commit = FND_API.G_TRUE) THEN
14578 ROLLBACK to UPDATE_task_det_sch;
14579 END IF;
14580 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14581 x_msg_count := FND_MSG_PUB.count_msg;
14582 --put message
14583 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
14584 p_procedure_name => 'update_task_det_sch_info',
14585 p_error_text => SUBSTRB(SQLERRM,1,240));
14586 RAISE;
14587
14588 END update_task_det_sch_info;
14589
14590
14591 -- API name : Copy_Tasks_In_Bulk
14592 -- Type : Public procedure
14593 -- Pre-reqs : None
14594 -- Return Value : N/A
14595 -- Prameters
14596 -- p_api_version IN NUMBER N Not Null 1.0
14597 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
14598 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
14599 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
14600 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
14601 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
14602 -- p_debug_mode IN VARCHAR2 N Null N
14603 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14604 -- p_src_project_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14605 -- p_src_project_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14606 -- p_src_structre_id IN NUMBER N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14607 -- p_src_structure_name IN VARCHAR2 N Null PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14608 -- p_src_structure_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14609 -- p_src_structure_version_name IN VARCHAR2 N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14610 -- p_src_task_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14611 -- p_src_task_name IN VARCHAR2 N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14612 -- p_dest_structure_version_id IN NUMBER N NOT NULL
14613 -- p_dest_task_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14614 -- p_dest_project_id IN NUMBER NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14615 -- p_copy_option IN VARCHAR2 N NOT NULL
14616 -- p_peer_or_sub IN VARCHAR2 N NOT NULL
14617 -- x_return_status OUT VARCHAR2 N NULL
14618 -- x_msg_count OUT NUMBER N NULL
14619 -- x_msg_data OUT VARCHAR2 N NULL
14620 --
14621 -- History
14622 --
14623 -- 22-FEB-05 Created avaithia
14624 --
14625 --
14626
14627 PROCEDURE Copy_Tasks_In_Bulk
14628 (
14629 p_api_version IN NUMBER :=1.0,
14630 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
14631 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
14632 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
14633 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
14634 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
14635 p_debug_mode IN VARCHAR2 :='N',
14636 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14637 p_src_project_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14638 p_src_project_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
14639 p_src_structure_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14640 p_src_structure_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
14641 p_src_structure_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14642 p_src_structure_version_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
14643 p_src_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
14644 p_src_task_name IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
14645 p_dest_structure_version_id IN NUMBER,
14646 p_dest_task_version_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14647 p_dest_project_id IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14648 p_called_from_api IN VARCHAR2 := 'ABCD',
14649 p_copy_option IN VARCHAR2,
14650 p_peer_or_sub IN VARCHAR2,
14651 p_prefix IN VARCHAR2,
14652 p_structure_type IN VARCHAR2 :='WORKPLAN',
14653 p_cp_dependency_flag IN VARCHAR2 :='N',
14654 p_cp_deliverable_asso_flag IN VARCHAR2 :='N',
14655 p_cp_tk_assignments_flag IN VARCHAR2 :='N',
14656 p_cp_people_flag IN VARCHAR2 :='N',
14657 p_cp_financial_elem_flag IN VARCHAR2 :='N',
14658 p_cp_material_items_flag IN VARCHAR2 :='N',
14659 p_cp_equipment_flag IN VARCHAR2 :='N',
14660 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
14661 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
14662 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14663 ) IS
14664 l_api_name CONSTANT VARCHAR(30) := 'COPY_TASKS_IN_BULK';
14665 l_api_version CONSTANT NUMBER := 1.0;
14666
14667 l_return_status VARCHAR2(1);
14668 l_msg_count NUMBER;
14669 l_msg_data VARCHAR2(2000);
14670 l_data VARCHAR2(2000);
14671 l_msg_index_out NUMBER;
14672 l_error_msg_code VARCHAR2(250);
14673
14674 l_src_project_id NUMBER;
14675 l_src_structure_id NUMBER;
14676 l_src_structure_version_id NUMBER;
14677
14678 l_dest_project_id NUMBER ;
14679 l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
14680 l_dest_structure_id NUMBER;
14681 l_template_flag VARCHAR2(1);
14682 l_fin_task_flag VARCHAR2(1);
14683
14684 l_shared VARCHAR2(1);
14685 l_ver_enabled VARCHAR2(1);
14686 l_copy_external_flag VARCHAR2(1);
14687
14688 l_delete_project_allowed VARCHAR2(1);
14689 l_update_proj_num_allowed VARCHAR2(1);
14690 l_update_proj_name_allowed VARCHAR2(1);
14691 l_update_proj_desc_allowed VARCHAR2(1);
14692 l_update_proj_dates_allowed VARCHAR2(1);
14693 l_update_proj_status_allowed VARCHAR2(1);
14694 l_update_proj_manager_allowed VARCHAR2(1);
14695 l_update_proj_org_allowed VARCHAR2(1);
14696 l_add_task_allowed VARCHAR2(1);
14697 l_delete_task_allowed VARCHAR2(1);
14698 l_update_task_num_allowed VARCHAR2(1);
14699 l_update_task_name_allowed VARCHAR2(1);
14700 l_update_task_dates_allowed VARCHAR2(1);
14701 l_update_task_desc_allowed VARCHAR2(1);
14702 l_update_parent_task_allowed VARCHAR2(1);
14703 l_update_task_org_allowed VARCHAR2(1);
14704
14705 l_err_code NUMBER := 0;
14706 l_err_stack VARCHAR2(200) := NULL;
14707 l_err_stage VARCHAR2(200) := NULL;
14708
14709 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
14710
14711 CURSOR cur_proj_is_template(c_project_id NUMBER)
14712 IS select 'Y'
14713 from pa_projects_all
14714 where project_id = c_project_id
14715 and template_flag = 'Y';
14716
14717 CURSOR cur_dest_proj_id
14718 IS
14719 SELECT project_id
14720 FROM pa_proj_element_versions
14721 WHERE element_version_id = p_dest_task_version_id;
14722
14723 CURSOR cur_struc_id( x_structure_version_id NUMBER, x_project_id NUMBER )
14724 IS
14725 SELECT proj_element_id
14726 FROM pa_proj_elem_ver_structure
14727 WHERE element_version_id = x_structure_version_id
14728 AND project_id = x_project_id;
14729
14730 CURSOR get_product_code ( c_project_id NUMBER ) IS
14731 SELECT pm_product_code
14732 FROM PA_PROJECTS_ALL
14733 WHERE project_id = c_project_id;
14734 BEGIN
14735 pa_debug.init_err_stack ('PA_TASK_PUB1.COPY_TASKS_IN_BULK');
14736 x_return_status := FND_API.G_RET_STS_SUCCESS;
14737 IF (p_debug_mode = 'Y') THEN
14738 pa_debug.debug('PA_TASK_PUB1.COPY_TASKS_IN_BULK begin');
14739 END IF;
14740
14741 IF (p_commit = FND_API.G_TRUE) THEN
14742 savepoint copy_tasks_in_bulk;
14743 END IF;
14744
14745 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
14746 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14747 END IF;
14748
14749 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
14750 FND_MSG_PUB.initialize;
14751 END IF;
14752
14753 IF p_calling_module = 'SELF_SERVICE' THEN
14754
14755 /*Product Code related validation*/
14756 /* This is not needed as now we are passing
14757 Destination Project ID from Self Service (TaskLiteVORowImpl.java - copyTasks method)
14758
14759 OPEN cur_dest_proj_id;
14760 FETCH cur_dest_proj_id into l_dest_project_id;
14761 CLOSE cur_dest_proj_id;
14762 */
14763 l_dest_project_id := p_dest_project_id ;
14764
14765 OPEN cur_proj_is_template(l_dest_project_id) ;
14766 FETCH cur_proj_is_template into l_template_flag ;
14767 CLOSE cur_proj_is_template;
14768
14769 OPEN get_product_code(l_dest_project_id);
14770 FETCH get_product_code INTO l_pm_product_code;
14771 CLOSE get_product_code;
14772
14773 If l_pm_product_code IS NOT NULL THEN
14774
14775 pa_pm_controls.Get_Project_actions_allowed
14776 (P_PM_PRODUCT_CODE => l_pm_product_code,
14777 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
14778 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
14779 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
14780 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
14781 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
14782 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
14783 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
14784 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
14785 P_ADD_TASK_ALLOWED => l_add_task_allowed,
14786 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
14787 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
14788 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
14789 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
14790 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
14791 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
14792 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
14793 P_ERROR_CODE => l_err_code,
14794 P_ERROR_STACK => l_err_stack,
14795 P_ERROR_STAGE => l_err_stage );
14796
14797 IF l_err_code <> 0 THEN
14798 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14799 p_msg_name => l_err_stage);
14800 END IF;
14801
14802 IF l_add_task_allowed = 'N' THEN
14803 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14804 p_msg_name => 'PA_PR_PM_CANNOT_COPY');
14805 raise FND_API.G_EXC_ERROR;
14806 END IF;
14807
14808 END IF;
14809
14810 /*Project Name to ID validation*/
14811 /* All Name to ID validations can be skipped in case of SS
14812 IF ((p_src_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14813 (p_src_project_name IS NOT NULL)) OR
14814 ((p_src_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
14815 (p_src_project_id IS NOT NULL)) THEN
14816 --Call Check API.
14817 PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
14818 p_project_name => p_src_project_name,
14819 p_project_id => p_src_project_id,
14820 x_project_id => l_src_project_id,
14821 x_return_status => l_return_status,
14822 x_error_msg_code => l_error_msg_code);
14823
14824 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14825 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14826 p_msg_name => l_error_msg_code);
14827 END IF;
14828 END IF;
14829 */
14830 /*Structure Name to ID Validation*/
14831 /*
14832 IF ((p_src_structure_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14833 (p_src_structure_name IS NOT NULL)) OR
14834 ((p_src_structure_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
14835 (p_src_structure_id IS NOT NULL)) THEN
14836 --Call Check API.
14837 PA_PROJECT_STRUCTURE_UTILS.Structure_Name_Or_Id
14838 (
14839 p_project_id => l_src_project_id
14840 ,p_structure_name => p_src_structure_name
14841 ,p_structure_id => p_src_structure_id
14842 ,x_structure_id => l_src_structure_id
14843 ,x_return_status => l_return_status
14844 ,x_error_message_code => l_error_msg_code
14845 );
14846
14847 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14848 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14849 p_msg_name => l_error_msg_code);
14850 END IF;
14851 END IF;
14852 */
14853 /*Structure Version Name to ID conversion*/
14854 /*
14855 IF ((p_src_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14856 (p_src_structure_version_name IS NOT NULL)) OR
14857 ((p_src_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
14858 (p_src_structure_version_id IS NOT NULL)) THEN
14859 --Call Check API.
14860 l_src_structure_version_id := p_src_structure_version_id;
14861 PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id
14862 (
14863 p_structure_id => l_src_structure_id
14864 ,p_structure_version_name => p_src_structure_version_name
14865 ,p_structure_version_id => p_src_structure_version_id
14866 ,x_structure_version_id => l_src_structure_version_id
14867 ,x_return_status => l_return_status
14868 ,x_error_message_code => l_error_msg_code
14869 );
14870
14871 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14872 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14873 p_msg_name => l_error_msg_code);
14874 END IF;
14875
14876 END IF;
14877 */
14878 /*Mandatory Params check*/
14879 IF (p_src_project_id IS NULL OR p_src_structure_id IS NULL OR
14880 p_src_structure_version_id IS NULL )
14881 THEN
14882 -- dbms_output.put_line( 'Project Id '||l_src_project_id );
14883 -- dbms_output.put_line( 'Structure Id '||l_src_structure_id );
14884 -- dbms_output.put_line( 'Structure Ver Id '||l_src_structure_version_id );
14885
14886 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14887 p_msg_name => 'PA_PS_NOT_ENOUGH_PARAMS' );
14888 x_msg_data := ' BULK API : PA_PS_NOT_ENOUGH_PARAMS';
14889 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14890 RAISE FND_API.G_EXC_ERROR;
14891 END IF;
14892
14893 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
14894 x_msg_count := FND_MSG_PUB.count_msg;
14895 IF x_msg_count = 1 then
14896 pa_interface_utils_pub.get_messages
14897 (p_encoded => FND_API.G_TRUE,
14898 p_msg_index => 1,
14899 p_msg_count => l_msg_count,
14900 p_msg_data => l_msg_data,
14901 p_data => l_data,
14902 p_msg_index_out => l_msg_index_out);
14903 x_msg_data := l_data;
14904 END IF;
14905 raise FND_API.G_EXC_ERROR;
14906 END IF;
14907
14908 IF p_copy_option NOT IN( 'PA_ENTIRE_VERSION', 'PA_TASK_ONLY', 'PA_TASK_SUBTASK' )
14909 THEN
14910
14911 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14912 p_msg_name => 'PA_PS_WRONG_COPY_OPTION' );
14913 x_msg_data := 'PA_PS_WRONG_COPY_OPTION';
14914 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14915 RAISE FND_API.G_EXC_ERROR;
14916 END IF;
14917
14918 /*====================================================================
14919 ALL BASIC VALIDATIONS COMPLETE RELEVANT TO VALIDITY OF PASSED PARAMS
14920 ====================================================================*/
14921
14922 /* Derive the Destination Structure ID (ProjElementId) from the passed pa_dest_structure_version_id*/
14923 OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id);
14924 FETCH cur_struc_id into l_dest_structure_id ;
14925 CLOSE cur_struc_id ;
14926
14927 /*4201927 : Derive values for sharing enabled and Versioning Enabled */
14928 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
14929 l_dest_project_id);
14930
14931 l_ver_enabled :=
14932 PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id);
14933
14934 /* Derive the value for Copy External Flag*/
14935 IF p_src_project_id = l_dest_project_id
14936 THEN
14937 l_copy_external_flag := 'N';
14938 ELSE
14939 l_copy_external_flag := 'Y';
14940 ENd IF;
14941
14942 /* Copied from Copy_Task API : task version status changes
14943 This need not be executed for each and every task */
14944
14945
14946 IF (l_template_flag = 'N') THEN
14947 --check if structure is shared
14948 -- if shared, check if versioned
14949 -- 'WORKING' if versioned; 'PUBLISHED' if not
14950 -- if split, check if 'FINANCIAL'
14951 -- 'PUBLISHED' if financial
14952 -- check if versioned
14953 -- 'WORKING' if versioend; 'PUBLISHED' if not
14954 IF ('Y' = l_shared) THEN
14955 IF ('Y' = l_ver_enabled) THEN
14956 l_task_unpub_ver_status_code := 'WORKING';
14957 ELSE
14958 l_task_unpub_ver_status_code := 'PUBLISHED';
14959 END IF;
14960 ELSE --split
14961 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_dest_structure_id,'FINANCIAL') AND
14962 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_dest_structure_id,'WORKPLAN')) THEN
14963 l_task_unpub_ver_status_code := 'PUBLISHED';
14964 ELSE --workplan only
14965 IF ('Y' = l_ver_enabled) THEN
14966 l_task_unpub_ver_status_code := 'WORKING';
14967 ELSE
14968 l_task_unpub_ver_status_code := 'PUBLISHED';
14969 END IF;
14970 END IF;
14971 END IF;
14972 ELSE
14973 l_task_unpub_ver_status_code := 'WORKING';
14974 END IF;
14975
14976 /*Derive valie for the p_fin_task_flag*/
14977 IF p_structure_type = 'WORKPLAN'
14978 THEN
14979 IF
14980 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) =
14981 'SHARE_FULL'
14982 THEN
14983 l_fin_task_flag := 'Y';
14984 ELSE
14985 l_fin_task_flag := 'N';
14986 END IF;
14987 ELSE
14988 l_fin_task_flag := 'Y';
14989 END IF;
14990
14991 /*Now retrieve the task version id's passed in the form of array table from the UI
14992 and call the Copy Task API (singular version)*/
14993
14994
14995 IF nvl(p_src_task_version_id_tbl.LAST,0)>0 THEN
14996 FOR i IN p_src_task_version_id_tbl.FIRST..p_src_task_version_id_tbl.LAST LOOP
14997 PA_TASK_PUB1.Copy_Task(
14998 p_init_msg_list => FND_API.G_FALSE,
14999 p_src_project_id => p_src_project_id,
15000 p_src_project_name => p_src_project_name,
15001 p_src_structure_id => p_src_structure_id ,
15002 p_src_structure_name => p_src_structure_name,
15003 p_src_structure_version_id => p_src_structure_version_id ,
15004 p_src_structure_version_name => p_src_structure_version_name,
15005 p_src_task_version_id => p_src_task_version_id_tbl(i),
15006 p_src_task_name => p_src_task_name,
15007 p_dest_structure_id => l_dest_structure_id,
15008 p_dest_structure_version_id => p_dest_structure_version_id,
15009 p_dest_task_version_id => p_dest_task_version_id,
15010 p_dest_project_id => l_dest_project_id,
15011 p_task_unpub_ver_status_code => l_task_unpub_ver_status_code,
15012 p_fin_task_flag => l_fin_task_flag,
15013 p_sharing_enabled => l_shared,
15014 p_versioning_enabled => l_ver_enabled,
15015 p_copy_external_flag => l_copy_external_flag,
15016 p_copy_option => p_copy_option,
15017 p_peer_or_sub => p_peer_or_sub,
15018 p_prefix => p_prefix,
15019 p_structure_type => p_structure_type,
15020 p_cp_dependency_flag => p_cp_dependency_flag,
15021 p_cp_deliverable_asso_flag => p_cp_deliverable_asso_flag,
15022 p_cp_tk_assignments_flag => p_cp_tk_assignments_flag,
15023 p_cp_people_flag => p_cp_people_flag,
15024 p_cp_financial_elem_flag => p_cp_financial_elem_flag,
15025 p_cp_material_items_flag => p_cp_material_items_flag,
15026 p_cp_equipment_flag => p_cp_equipment_flag,
15027 p_called_from_bulk_api => 'Y',
15028 x_return_status => x_return_status,
15029 x_msg_count => x_msg_count,
15030 x_msg_data => x_msg_data
15031 );
15032 if(x_return_status <> FND_API.G_RET_STS_SUCCESS)
15033 then
15034 RAISE FND_API.G_EXC_ERROR ;
15035 End if;
15036 END LOOP;
15037
15038 END IF;
15039
15040 END IF; /*End If Calling Module is self service*/
15041 IF (p_commit = FND_API.G_TRUE) THEN
15042 COMMIT;
15043 END IF;
15044 EXCEPTION
15045 when FND_API.G_EXC_ERROR then
15046 if p_commit = FND_API.G_TRUE then
15047 rollback to Copy_Tasks_in_bulk;
15048 end if;
15049 x_return_status := FND_API.G_RET_STS_ERROR;
15050 x_msg_count := Fnd_Msg_Pub.count_msg;
15051 IF x_msg_count = 1 AND x_msg_data IS NULL
15052 THEN
15053 Pa_Interface_Utils_Pub.get_messages
15054 ( p_encoded => Fnd_Api.G_TRUE
15055 , p_msg_index => 1
15056 , p_msg_count => l_msg_count
15057 , p_msg_data => l_msg_data
15058 , p_data => l_data
15059 , p_msg_index_out => l_msg_index_out);
15060 END IF;
15061 x_msg_data := l_data;
15062 when FND_API.G_EXC_UNEXPECTED_ERROR then
15063 if p_commit = FND_API.G_TRUE then
15064 rollback to Copy_Tasks_in_bulk;
15065 end if;
15066 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15067 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15068 p_procedure_name => 'COPY_TASKS_IN_BULK',
15069 p_error_text => SUBSTRB(SQLERRM,1,240));
15070 when OTHERS then
15071 if p_commit = FND_API.G_TRUE then
15072 rollback to Copy_Tasks_in_bulk;
15073 end if;
15074 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15075 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15076 p_procedure_name => 'COPY_TASKS_IN_BULK',
15077 p_error_text => SUBSTRB(SQLERRM,1,240));
15078 raise;
15079
15080 END Copy_Tasks_In_Bulk;
15081
15082 --- API name : MOVE_TASK_VERSIONS_IN_BULK
15083 -- Type : Public procedure
15084 -- Pre-reqs : None
15085 -- Return Value : N/A
15086 -- Prameters
15087 -- p_api_version IN NUMBER N Not Null 1.0
15088 -- p_init_msg_list IN VARCHAR2 N Not Null FND_API.TRUE
15089 -- p_commit IN VARCHAR2 N Not Null FND_API.G_FALSE
15090 -- p_validate_only IN VARCHAR2 N Not Null FND_API.G_TRUE
15091 -- p_validation_level IN NUMBER N Null FND_API.G_VALID_LEVEL_FULL
15092 -- p_calling_module IN VARCHAR2 N Null SELF_SERVICE
15093 -- p_debug_mode IN VARCHAR2 N Null N
15094 -- p_max_msg_count IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15095 -- p_structure_version_id IN NUMBER N NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15096 -- p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE N NOT NULL SYSTEM.PA_NUM_TBL_TYPE()
15097 -- p_ref_task_version_id IN NUMBER N Not Null
15098 -- p_ref_project_id IN NUMBER N Not Null /*4269830*/
15099 -- p_peer_or_sub IN VARCHAR2 N Not Null
15100 -- p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE N NOT NULL SYSTEM.PA_NUM_TBL_TYPE()
15101 -- x_return_status OUT VARCHAR2 N NULL
15102 -- x_msg_count OUT NUMBER N NULL
15103 -- x_msg_data OUT VARCHAR2 N NULL
15104 --
15105 -- History
15106 --
15107 -- 23-FEB-05 Created avaithia
15108 -- 29-MAR-05 Modified avaithia 4269830 : Performance Tuning done
15109 --
15110 PROCEDURE MOVE_TASK_VERSIONS_IN_BULK
15111 ( p_api_version IN NUMBER := 1.0,
15112 p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE,
15113 p_commit IN VARCHAR2 := FND_API.G_FALSE,
15114 p_validate_only IN VARCHAR2 := FND_API.G_TRUE,
15115 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
15116 p_calling_module IN VARCHAR2 := 'SELF_SERVICE',
15117 p_debug_mode IN VARCHAR2 := 'N',
15118 p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15119 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15120 p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15121 p_ref_task_version_id IN NUMBER,
15122 p_ref_project_id IN NUMBER, /*4269830*/
15123 p_peer_or_sub IN VARCHAR2,
15124 p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15125 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
15126 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
15127 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15128 )
15129 IS
15130 l_api_name CONSTANT VARCHAR(30) := 'MOVE_TASK_VERSIONS_IN_BULK';
15131 l_api_version CONSTANT NUMBER := 1.0;
15132
15133 l_return_status VARCHAR2(1);
15134 l_msg_count NUMBER;
15135 l_msg_data VARCHAR2(2000);
15136 l_data VARCHAR2(2000);
15137 l_msg_index_out NUMBER;
15138 l_error_msg_code VARCHAR2(250);
15139
15140 l_delete_project_allowed VARCHAR2(1);
15141 l_update_proj_num_allowed VARCHAR2(1);
15142 l_update_proj_name_allowed VARCHAR2(1);
15143 l_update_proj_desc_allowed VARCHAR2(1);
15144 l_update_proj_dates_allowed VARCHAR2(1);
15145 l_update_proj_status_allowed VARCHAR2(1);
15146 l_update_proj_manager_allowed VARCHAR2(1);
15147 l_update_proj_org_allowed VARCHAR2(1);
15148 l_add_task_allowed VARCHAR2(1);
15149 l_delete_task_allowed VARCHAR2(1);
15150 l_update_task_num_allowed VARCHAR2(1);
15151 l_update_task_name_allowed VARCHAR2(1);
15152 l_update_task_dates_allowed VARCHAR2(1);
15153 l_update_task_desc_allowed VARCHAR2(1);
15154 l_update_parent_task_allowed VARCHAR2(1);
15155 l_update_task_org_allowed VARCHAR2(1);
15156
15157 ref_task_temp_version_id NUMBER; -- Added new variable for Bug 6628382
15158
15159 l_err_code NUMBER := 0;
15160 l_err_stack VARCHAR2(200) := NULL;
15161 l_err_stage VARCHAR2(200) := NULL;
15162
15163 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
15164
15165 l_cur_project_id NUMBER;
15166 CURSOR cur_proj_id
15167 IS
15168 SELECT project_id
15169 FROM pa_proj_element_versions
15170 WHERE element_version_id = p_structure_version_id;
15171
15172 CURSOR get_product_code ( c_project_id NUMBER ) IS
15173 SELECT pm_product_code
15174 FROM PA_PROJECTS_ALL
15175 WHERE project_id = c_project_id;
15176
15177 /*4269830 : Performance Enhancements : Start */
15178 CURSOR cur_struc_type( c_structure_id NUMBER )
15179 IS
15180 SELECT 'Y'
15181 FROM pa_proj_structure_types ppst
15182 ,pa_structure_types pst
15183 WHERE ppst.proj_element_id = c_structure_id
15184 AND ppst.structure_type_id = pst.structure_type_id
15185 AND pst.structure_type_class_code = 'FINANCIAL' ;
15186
15187 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
15188 select 'Y'
15189 from pa_proj_elem_ver_structure
15190 where proj_element_id = c_structure_id
15191 AND project_id = c_project_id
15192 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
15193
15194 l_versioned VARCHAR2(1) := 'N';
15195 l_shared VARCHAR2(1) := 'N';
15196 l_sharing_code VARCHAR2(30);
15197
15198 l_task_version_id NUMBER;
15199 l_structure_id NUMBER;
15200 l_published_version VARCHAR2(1);
15201 l_wp_type VARCHAR2(1);
15202 l_fin_type VARCHAR2(1);
15203
15204 l_weighting_basis_code VARCHAR2(30);
15205 l_check_third_party_flag VARCHAR2(1);
15206 l_dummy_char VARCHAR2(1);
15207
15208 /*4269830 : Performance Enhancements : End*/
15209
15210 BEGIN
15211 pa_debug.init_err_stack ('PA_TASK_PUB1.MOVE_TASK_VERSIONS_IN_BULK');
15212
15213 x_return_status := FND_API.G_RET_STS_SUCCESS ;
15214
15215 IF (p_debug_mode = 'Y') THEN
15216 pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSIONS_IN_BULK begin');
15217 END IF;
15218
15219 IF (p_commit = FND_API.G_TRUE) THEN
15220 savepoint MOVE_TASK_VERSIONS_IN_BULK ;
15221 END IF;
15222
15223 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
15224 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15225 END IF;
15226
15227 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
15228 FND_MSG_PUB.initialize;
15229 END IF;
15230 IF p_calling_module = 'SELF_SERVICE' THEN
15231
15232 /*Product Code related validation*/
15233
15234 /* 4269830 : This is not needed as now we are passing
15235 Destination Project ID from Self Service (TaskLiteVORowImpl.java - moveTasks method)
15236 OPEN cur_proj_id ;
15237 FETCH cur_proj_id into l_cur_project_id;
15238 CLOSE cur_proj_id;
15239 */
15240 l_cur_project_id := p_ref_project_id;
15241
15242 OPEN get_product_code(l_cur_project_id);
15243 FETCH get_product_code INTO l_pm_product_code;
15244 CLOSE get_product_code;
15245
15246 If l_pm_product_code IS NOT NULL THEN
15247 pa_pm_controls.Get_Project_actions_allowed
15248 (P_PM_PRODUCT_CODE => l_pm_product_code,
15249 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
15250 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
15251 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
15252 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
15253 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
15254 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
15255 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
15256 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
15257 P_ADD_TASK_ALLOWED => l_add_task_allowed,
15258 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
15259 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
15260 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
15261 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
15262 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
15263 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
15264 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
15265 P_ERROR_CODE => l_err_code,
15266 P_ERROR_STACK => l_err_stack,
15267 P_ERROR_STAGE => l_err_stage );
15268
15269 IF l_err_code <> 0 THEN
15270 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15271 p_msg_name => l_err_stage);
15272 END IF;
15273 IF l_update_parent_task_allowed = 'N' THEN
15274 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15275 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
15276 raise FND_API.G_EXC_ERROR;
15277 END IF;
15278 End If;
15279
15280 End If; /* End if calling module is self service*/
15281
15282 /*4269830 : Performance Enhancements
15283 1)Derive the variables l_shared , l_sharing_code ,l_wp_type,l_fin_type
15284 l_versioned,l_structure_id,l_published_version,l_weighting_basis_Code
15285 ONLY once in the BULK API and pass it as params to the Move Task Version API
15286 */
15287
15288 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_ref_project_id);
15289 l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_ref_project_id);
15290
15291 -- Bug Fix 4764891.
15292 -- The following lines have the structure types usage messed up.
15293 -- Correcting the structure types which are passed to the get_struct_type_for_version.
15294 -- l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
15295 -- l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
15296
15297 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
15298 l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
15299
15300 -- End of Bug Fix 4764891.
15301
15302 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_ref_project_id);
15303 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_ref_project_id);
15304 l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(p_ref_project_id);
15305
15306 IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
15307 l_task_version_id := p_task_version_id_tbl(1);
15308
15309 SELECT proj_element_id INTO l_structure_id
15310 FROM pa_proj_element_versions
15311 WHERE element_version_id = ( Select parent_structure_version_id
15312 from pa_proj_element_versions
15313 where element_version_id = l_task_version_id )
15314 AND object_type = 'PA_STRUCTURES';
15315 -----------------------------------------------------------
15316 OPEN cur_struc_type( l_structure_id );
15317 FETCH cur_struc_type INTO l_dummy_char;
15318
15319 IF cur_struc_type%FOUND
15320 THEN
15321 --If structure has any published versions.
15322 l_published_version := 'N';
15323 OPEN cur_pub_versions( l_structure_id, p_ref_project_id );
15324 FETCH cur_pub_versions INTO l_published_version;
15325 CLOSE cur_pub_versions;
15326 END IF;
15327
15328 CLOSE cur_struc_type;
15329 -----------------------------------------------------------
15330 END IF; -- End If Atleast one task has been selected for moving
15331
15332 /*4269830 : End*/
15333
15334 /*Now retrieve the task version id's passed in the form of array table from the UI
15335 and call the Move Task API (singular version)*/
15336
15337 ref_task_temp_version_id := p_ref_task_version_id; -- Bug 6628382
15338
15339 IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
15340 FOR i IN p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
15341 PA_TASK_PUB1.Move_Task_Version(
15342 p_init_msg_list => FND_API.G_FALSE,
15343 p_structure_version_id => p_structure_version_id,
15344 p_task_version_id => p_task_version_id_tbl(i),
15345 p_ref_task_version_id => ref_task_temp_version_id, --p_ref_task_version_id, -- Bug 6628382
15346 p_peer_or_sub => p_peer_or_sub,
15347 p_record_version_number => p_record_version_number_tbl(i),
15348 /*======================================================================
15349 4269830 : New params introduced for Perf Enhancement: Start
15350 *=====================================================================*/
15351 p_ref_project_id => p_ref_project_id,
15352 p_structure_id => l_structure_id,
15353 p_published_version => l_published_version,
15354 p_shared => l_shared ,
15355 p_sharing_code => l_sharing_code,
15356 p_versioned => l_versioned,
15357 p_wp_type => l_wp_type,
15358 p_fin_type => l_fin_type,
15359 p_weighting_basis_code => l_weighting_basis_code,
15360 p_check_third_party_flag => l_check_third_party_flag,
15361 /*======================================================================
15362 4269830 : New params introduced for Perf Enhancement : End
15363 *======================================================================*/
15364 p_called_from_bulk_api => 'Y',
15365 x_return_status => x_return_status,
15366 x_msg_count => x_msg_count,
15367 x_msg_data => x_msg_data
15368 );
15369 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15370 RAISE FND_API.G_EXC_ERROR ;
15371 END IF;
15372 ref_task_temp_version_id := p_task_version_id_tbl(i); -- Bug 6628382
15373 END LOOP;
15374
15375 END IF;
15376
15377 IF (p_commit = FND_API.G_TRUE) THEN
15378 COMMIT;
15379 END IF;
15380
15381 EXCEPTION
15382 when FND_API.G_EXC_ERROR then
15383 if p_commit = FND_API.G_TRUE then
15384 rollback to MOVE_TASK_VERSIONS_IN_BULK;
15385 end if;
15386 x_return_status := FND_API.G_RET_STS_ERROR;
15387 x_msg_count := Fnd_Msg_Pub.count_msg;
15388
15389 IF x_msg_count = 1 AND x_msg_data IS NULL
15390 THEN
15391 Pa_Interface_Utils_Pub.get_messages
15392 ( p_encoded => Fnd_Api.G_FALSE
15393 , p_msg_index => 1
15394 , p_msg_count => l_msg_count
15395 , p_msg_data => l_msg_data
15396 , p_data => l_data
15397 , p_msg_index_out => l_msg_index_out);
15398 x_msg_data := l_data;
15399 END IF;
15400
15401 when FND_API.G_EXC_UNEXPECTED_ERROR then
15402 if p_commit = FND_API.G_TRUE then
15403 rollback to MOVE_TASK_VERSIONS_IN_BULK;
15404 end if;
15405 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15406 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15407 p_procedure_name => 'MOVE_TASK_VERSIONS_IN_BULK',
15408 p_error_text => SUBSTRB(SQLERRM,1,240));
15409 when OTHERS then
15410 if p_commit = FND_API.G_TRUE then
15411 rollback to MOVE_TASK_VERSIONS_IN_BULK;
15412 end if;
15413 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15414 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15415 p_procedure_name => 'MOVE_TASK_VERSIONS_IN_BULK',
15416 p_error_text => SUBSTRB(SQLERRM,1,240));
15417 raise;
15418 END MOVE_TASK_VERSIONS_IN_BULK ;
15419
15420 -- 4218932 Added below update api for update task page for bulk approach
15421
15422 PROCEDURE Update_Task_All_Info(
15423 p_api_version IN NUMBER :=1.0,
15424 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
15425 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
15426 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
15427 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
15428 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
15429 p_debug_mode IN VARCHAR2 :='N',
15430 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15431 p_task_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15432 --Begin:5867373:p_task_number_tbl's data-type has been changed to varchar2(100)
15433 p_task_number_tbl IN SYSTEM.PA_VARCHAR2_100_TBL_TYPE := SYSTEM.PA_VARCHAR2_100_TBL_TYPE(),
15434 --End:5867373:
15435 p_task_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15436 p_task_description_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE(),
15437 p_task_manager_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15438 p_task_manager_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15439 p_carrying_out_org_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15440 p_carrying_out_org_name_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15441 p_priority_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15442 p_TYPE_ID_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15443 p_status_code_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15444 p_inc_proj_progress_flag_tbl IN SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15445 p_transaction_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15446 p_transaction_finish_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15447 p_work_type_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15448 p_service_type_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15449 p_work_item_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15450 p_uom_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15451 p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15452 -- Update_Schedule_Version
15453 p_scheduled_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15454 p_scheduled_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15455 p_pev_schedule_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15456 p_milestone_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE(),
15457 p_critical_flag_tbl IN SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE(),
15458 p_WQ_PLANNED_QUANTITY_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15459 p_early_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15460 p_early_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15461 p_late_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15462 p_late_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15463 p_constraint_type_code_tbl IN SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15464 p_constraint_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15465 p_sch_rec_ver_num_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15466 -- update_task_det_sch_info
15467 p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15468 p_percent_complete_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15469 p_ETC_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15470 p_structure_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15471 p_project_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15472 p_planned_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15473 p_actual_effort_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15474 -- Update_Task_Weighting
15475 p_object_relationship_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15476 p_weighting_percentage_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15477 p_obj_rec_ver_num_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15478 p_task_weight_method IN VARCHAR2,
15479 -- common
15480 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
15481 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
15482 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15483 ) IS
15484
15485 l_api_name CONSTANT VARCHAR(30) := 'Update_Task_All_Info';
15486 l_api_version CONSTANT NUMBER := 1.0;
15487
15488 l_return_status VARCHAR2(1);
15489 l_msg_count NUMBER;
15490 l_msg_data VARCHAR2(250);
15491 l_data VARCHAR2(250);
15492 l_msg_index_out NUMBER;
15493
15494 BEGIN
15495 pa_debug.init_err_stack ('PA_TASK_PUB1.Update_Task_All_Info');
15496
15497 IF (p_debug_mode = 'Y') THEN
15498 pa_debug.debug('PA_TASK_PUB1.Update_Task_All_Info begin');
15499 END IF;
15500
15501 IF (p_commit = FND_API.G_TRUE) THEN
15502 savepoint update_Task_all_info;
15503 END IF;
15504
15505 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
15506 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15507 END IF;
15508
15509 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
15510 FND_MSG_PUB.initialize;
15511 END IF;
15512
15513 x_return_status := FND_API.G_RET_STS_SUCCESS;
15514
15515 IF nvl(p_task_id_tbl.last,0) >= 1 THEN
15516
15517 FOR i in p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
15518
15519 PA_TASK_PUB1.Update_Task
15520 (
15521 p_task_id => p_task_id_tbl(i)
15522 ,p_task_number => p_task_number_tbl(i)
15523 ,p_task_name => p_task_name_tbl(i)
15524 ,p_task_manager_id => p_task_manager_id_tbl(i)
15525 ,p_task_manager_name => p_task_manager_name_tbl(i)
15526 ,p_record_version_number => p_record_version_number_tbl(i)
15527 ,P_TASK_DESCRIPTION => P_TASK_DESCRIPTION_tbl(i)
15528 ,P_CARRYING_OUT_ORG_NAME => P_CARRYING_OUT_ORG_NAME_tbl(i)
15529 ,P_PRIORITY_CODE => P_PRIORITY_CODE_tbl(i)
15530 ,P_STATUS_CODE => P_STATUS_CODE_tbl(i)
15531 ,P_INC_PROJ_PROGRESS_FLAG => P_INC_PROJ_PROGRESS_FLAG_tbl(i)
15532 ,p_transaction_start_date => p_transaction_start_date_tbl(i)
15533 ,p_transaction_finish_date => p_transaction_finish_date_tbl(i)
15534 ,p_service_type_code => p_service_type_code_tbl(i)
15535 ,p_work_type_id => p_work_type_id_tbl(i)
15536 ,p_work_item_code => p_work_item_code_tbl(i)
15537 ,p_uom_code => p_uom_code_tbl(i)
15538 ,p_type_id => p_type_id_tbl(i)
15539 ,p_carrying_out_org_id => p_carrying_out_org_id_tbl(i)
15540 ,x_return_status => l_return_status
15541 ,x_msg_count => l_msg_count
15542 ,x_msg_data => l_msg_data
15543 );
15544
15545 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15546 x_msg_count := FND_MSG_PUB.count_msg;
15547 IF x_msg_count = 1 then
15548 pa_interface_utils_pub.get_messages
15549 (
15550 p_encoded => FND_API.G_TRUE,
15551 p_msg_index => 1,
15552 p_msg_count => l_msg_count,
15553 p_msg_data => l_msg_data,
15554 p_data => l_data,
15555 p_msg_index_out => l_msg_index_out
15556 );
15557 x_msg_data := l_data;
15558 END IF;
15559 raise FND_API.G_EXC_ERROR;
15560 END IF;
15561
15562 PA_TASK_PUB1.Update_Schedule_Version
15563 (
15564 p_scheduled_start_date => p_scheduled_start_date_tbl(i)
15565 ,p_scheduled_end_date => p_scheduled_end_date_tbl(i)
15566 ,p_record_version_number => p_sch_rec_ver_num_tbl(i)
15567 ,p_pev_schedule_id => p_pev_schedule_id_tbl(i)
15568 ,P_MILESTONE_FLAG => P_MILESTONE_FLAG_tbl(i)
15569 ,P_CRITICAL_FLAG => P_CRITICAL_FLAG_tbl(i)
15570 ,p_WQ_PLANNED_QUANTITY => p_WQ_PLANNED_QUANTITY_tbl(i)
15571 ,p_early_start_date => p_early_start_date_tbl(i)
15572 ,p_early_end_date => p_early_end_date_tbl(i)
15573 ,p_late_start_date => p_late_start_date_tbl(i)
15574 ,p_late_end_date => p_late_end_date_tbl(i)
15575 ,p_constraint_date => p_constraint_date_tbl(i)
15576 ,p_constraint_type_code => p_constraint_type_code_tbl(i)
15577 ,x_return_status => l_return_status
15578 ,x_msg_count => l_msg_count
15579 ,x_msg_data => l_msg_data
15580 );
15581
15582 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15583 x_msg_count := FND_MSG_PUB.count_msg;
15584 IF x_msg_count = 1 then
15585 pa_interface_utils_pub.get_messages
15586 (
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 );
15594 x_msg_data := l_data;
15595 END IF;
15596 raise FND_API.G_EXC_ERROR;
15597 END IF;
15598
15599 PA_TASK_PUB1.update_task_det_sch_info
15600 (
15601 p_task_ver_id => p_task_version_id_tbl(i)
15602 ,p_percent_complete => p_percent_complete_tbl(i)
15603 ,p_ETC_effort => p_ETC_effort_tbl(i)
15604 ,p_structure_version_id => p_structure_version_id_tbl(i)
15605 ,p_project_id => p_project_id_tbl(i)
15606 ,p_planned_effort => p_planned_effort_tbl(i)
15607 ,p_actual_effort => p_actual_effort_tbl(i)
15608 ,x_return_status => l_return_status
15609 ,x_msg_count => l_msg_count
15610 ,x_msg_data => l_msg_data
15611 );
15612
15613 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15614 x_msg_count := FND_MSG_PUB.count_msg;
15615 IF x_msg_count = 1 then
15616 pa_interface_utils_pub.get_messages
15617 (
15618 p_encoded => FND_API.G_TRUE,
15619 p_msg_index => 1,
15620 p_msg_count => l_msg_count,
15621 p_msg_data => l_msg_data,
15622 p_data => l_data,
15623 p_msg_index_out => l_msg_index_out
15624 );
15625 x_msg_data := l_data;
15626 END IF;
15627 raise FND_API.G_EXC_ERROR;
15628 END IF;
15629
15630 IF p_task_weight_method = 'MANUAL' THEN
15631
15632 PA_TASK_PUB1.Update_Task_Weighting
15633 (
15634 p_object_relationship_id => p_object_relationship_id_tbl(i)
15635 ,p_weighting_percentage => p_weighting_percentage_tbl(i)
15636 ,p_record_version_number => p_obj_rec_ver_num_tbl(i)
15637 ,x_return_status => l_return_status
15638 ,x_msg_count => l_msg_count
15639 ,x_msg_data => l_msg_data
15640 );
15641
15642 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15643 x_msg_count := FND_MSG_PUB.count_msg;
15644 IF x_msg_count = 1 then
15645 pa_interface_utils_pub.get_messages
15646 (
15647 p_encoded => FND_API.G_TRUE,
15648 p_msg_index => 1,
15649 p_msg_count => l_msg_count,
15650 p_msg_data => l_msg_data,
15651 p_data => l_data,
15652 p_msg_index_out => l_msg_index_out
15653 );
15654 x_msg_data := l_data;
15655 END IF;
15656 raise FND_API.G_EXC_ERROR;
15657 END IF;
15658 END IF;
15659
15660 END LOOP;
15661
15662 END IF;
15663
15664 IF (p_commit = FND_API.G_TRUE) THEN
15665 COMMIT;
15666 END IF;
15667
15668 IF (p_debug_mode = 'Y') THEN
15669 pa_debug.debug('PA_TASK_PUB1.Update_Task_All_Info END');
15670 END IF;
15671
15672 EXCEPTION
15673 when FND_API.G_EXC_ERROR then
15674 if p_commit = FND_API.G_TRUE then
15675 rollback to update_Task_all_info;
15676 end if;
15677 x_return_status := FND_API.G_RET_STS_ERROR;
15678 when FND_API.G_EXC_UNEXPECTED_ERROR then
15679 if p_commit = FND_API.G_TRUE then
15680 rollback to update_Task_all_info;
15681 end if;
15682 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15683 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15684 p_procedure_name => 'Update_Task_All_Info',
15685 p_error_text => SUBSTRB(SQLERRM,1,240));
15686 when OTHERS then
15687 if p_commit = FND_API.G_TRUE then
15688 rollback to update_Task_all_info;
15689 end if;
15690 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15691 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15692 p_procedure_name => 'Update_Task_All_Info',
15693 p_error_text => SUBSTRB(SQLERRM,1,240));
15694 raise;
15695
15696 END Update_Task_All_Info;
15697
15698 -- 4429929 : Added CANCEL_TASK
15699 PROCEDURE CANCEL_TASK(
15700 p_calling_module IN VARCHAR2 :='SELF_SERVICE'
15701 ,p_api_version IN NUMBER :=1.0
15702 ,p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE
15703 ,p_validate_only IN VARCHAR2 :=FND_API.G_FALSE
15704 ,p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL
15705 ,p_calling_mode IN VARCHAR2 :=null
15706 ,p_task_id IN NUMBER
15707 ,p_task_version_id IN NUMBER
15708 ,p_project_id IN NUMBER
15709 ,p_cancel_status_code IN VARCHAR2
15710 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15711 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
15712 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15713 )
15714 IS
15715 l_debug_mode VARCHAR2(1);
15716 l_module_name VARCHAR2(100):= 'PA_TASK_PUB1.CANCEL_TASK';
15717 l_error_message_code VARCHAR2(32);
15718
15719 -- 4533534 : Included join of pa_proj_elem_ver_structure too
15720 CURSOR c_get_all_task_versions(c_task_id NUMBER, c_project_id NUMBER) IS
15721 SELECT ver.element_version_id, str.status_code
15722 FROM pa_proj_element_versions ver
15723 , pa_proj_elem_ver_structure str
15724 WHERE ver.project_id = c_project_id
15725 AND ver.proj_element_id = c_task_id
15726 AND ver.project_id = str.project_id
15727 and ver.parent_structure_version_id = str.element_version_id
15728 ;
15729
15730 -- 4533534 : Commnted this cusror and written new simplified cusror
15731 /*
15732 CURSOR c_get_links(c_task_version_id NUMBER, c_project_id NUMBER) IS
15733 SELECT
15734 ppv2.project_id sub_project_id
15735 ,ppv2.element_version_id sub_structure_ver_id
15736 ,ppv1.project_id parent_project_id
15737 ,ppv1.parent_structure_version_id parent_structure_ver_id
15738 ,ppv1.element_version_id parent_task_version_id
15739 ,ppv1.wbs_number parent_wbs_number
15740 ,por1.object_id_from1 link_task_ver_id
15741 ,por1.object_relationship_id object_relationship_id
15742 ,por1.record_version_number record_version_number
15743 ,ppv1.task_unpub_ver_status_code task_unpub_ver_status_code
15744 FROM
15745 pa_proj_element_versions ppv1 -- linking task
15746 ,pa_proj_element_versions ppv2 -- linked project
15747 ,pa_object_relationships por1
15748 ,pa_object_relationships por2
15749 ,(SELECT object_id_from1, object_id_to1
15750 FROM pa_object_relationships
15751 START WITH object_id_from1 = c_task_version_id
15752 and relationship_type = 'S'
15753 CONNECT BY object_id_from1 = PRIOR object_id_to1
15754 and relationship_type = 'S'
15755 UNION
15756 SELECT to_number(null) object_id_from1, c_task_version_id object_id_to1
15757 FROM DUAL
15758 ) pobj
15759 WHERE
15760 ppv2.element_version_id = por1.object_id_to1
15761 AND por1.object_id_from1 = por2.object_id_to1
15762 AND por2.object_id_from1 = ppv1.element_version_id
15763 AND ppv1.element_version_id = pobj.object_id_to1
15764 AND ppv2.object_type = 'PA_STRUCTURES'
15765 AND por1.relationship_type in ( 'LW', 'LF' )
15766 AND ppv1.project_id=c_project_id
15767 ;
15768 */
15769 CURSOR c_get_links(c_task_version_id NUMBER) IS
15770 SELECT
15771 ppv.project_id sub_project_id
15772 ,ppv.element_version_id sub_structure_ver_id
15773 ,por.object_id_from1 link_task_ver_id
15774 ,por.object_relationship_id object_relationship_id
15775 ,por.record_version_number record_version_number
15776 ,por.relationship_type relationship_type
15777 FROM
15778 pa_proj_element_versions ppv -- linked project
15779 ,pa_object_relationships por
15780 ,(SELECT object_id_from1, object_id_to1 -- Get all sub tasks including linking tasks
15781 FROM pa_object_relationships
15782 START WITH object_id_from1 = c_task_version_id
15783 and relationship_type = 'S'
15784 CONNECT BY object_id_from1 = PRIOR object_id_to1
15785 and relationship_type = 'S'
15786 ) pobj
15787 WHERE
15788 pobj.object_id_to1 = por.object_id_from1
15789 AND por.relationship_type = 'LW' -- 4533534 : It shd be LW only otherwsie it will give error PA_NO_RECORD_VERSION_NUMBER
15790 AND por.object_id_to1 = ppv.element_version_id
15791 AND ppv.object_type = 'PA_STRUCTURES'
15792 ;
15793
15794 l_version_enabled VARCHAR2(1);
15795
15796 BEGIN
15797 x_return_status := FND_API.G_RET_STS_SUCCESS;
15798 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
15799 SAVEPOINT CANCEL_TASK_SP;
15800
15801 IF l_debug_mode = 'Y' THEN
15802 pa_debug.write(l_module_name,'Cancel Task Passed Parameters', 3);
15803 pa_debug.write(l_module_name,'p_task_id='||p_task_id, 3);
15804 pa_debug.write(l_module_name,'p_task_version_id='||p_task_version_id, 3);
15805 pa_debug.write(l_module_name,'p_project_id='||p_project_id, 3);
15806 pa_debug.write(l_module_name,'p_cancel_status_code='||p_cancel_status_code, 3);
15807 END IF;
15808
15809 IF p_init_msg_list = 'T' THEN
15810 FND_MSG_PUB.initialize;
15811 END IF;
15812
15813 IF l_debug_mode = 'Y' THEN
15814 pa_debug.write(l_module_name,'Calling Check_chg_stat_cancel_ok', 3);
15815 END IF;
15816
15817 PA_PROJ_ELEMENTS_UTILS.Check_chg_stat_cancel_ok
15818 (
15819 p_task_id => p_task_id
15820 ,p_task_version_id => p_task_version_id
15821 ,p_new_task_status => p_cancel_status_code
15822 ,x_return_status => x_return_status
15823 ,x_error_message_code => l_error_message_code
15824 );
15825
15826 IF l_debug_mode = 'Y' THEN
15827 pa_debug.write(l_module_name,'After Call Check_chg_stat_cancel_ok x_return_status='||x_return_status, 3);
15828 END IF;
15829
15830 IF (x_return_status <> 'S') THEN
15831 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15832 p_msg_name => l_error_message_code);
15833 raise FND_API.G_EXC_ERROR;
15834 END IF;
15835 IF l_debug_mode = 'Y' THEN
15836 pa_debug.write(l_module_name,'Calling set_new_tasks_to_TBD', 3);
15837 END IF;
15838
15839 PA_TASK_PVT1.set_new_tasks_to_tbd(
15840 p_project_id => p_project_id
15841 ,p_task_id => p_task_id
15842 ,p_task_status => p_cancel_status_code
15843 ,x_return_status => x_return_status
15844 ,x_msg_count => x_msg_count
15845 ,x_msg_data => x_msg_data);
15846
15847 IF l_debug_mode = 'Y' THEN
15848 pa_debug.write(l_module_name,'After Call set_new_tasks_to_TBD x_return_status='||x_return_status, 3);
15849 END IF;
15850
15851 IF (x_return_status <> 'S') THEN
15852 raise FND_API.G_EXC_ERROR;
15853 END IF;
15854
15855 IF l_debug_mode = 'Y' THEN
15856 pa_debug.write(l_module_name,'Calling push_down_task_status', 3);
15857 END IF;
15858
15859 PA_PROGRESS_PUB.push_down_task_status(
15860 p_calling_module => p_calling_module
15861 ,p_task_status => p_cancel_status_code
15862 ,p_project_id => p_project_id
15863 ,p_object_id => p_task_id
15864 ,p_object_version_id => p_task_version_id
15865 ,p_object_type => 'PA_TASKS'
15866 ,x_return_status => x_return_status
15867 ,x_msg_count => x_msg_count
15868 ,x_msg_data => x_msg_data
15869 );
15870 IF l_debug_mode = 'Y' THEN
15871 pa_debug.write(l_module_name,'After Call push_down_task_status x_return_status='||x_return_status, 3);
15872 END IF;
15873
15874 IF (x_return_status <> 'S') THEN
15875 raise FND_API.G_EXC_ERROR;
15876 END IF;
15877
15878 l_version_enabled := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id);
15879
15880 IF l_debug_mode = 'Y' THEN
15881 pa_debug.write(l_module_name,'Call Delete_SubProject_Association l_version_enabled='||l_version_enabled, 3);
15882 END IF;
15883
15884 FOR l_all_tasks IN c_get_all_task_versions(p_task_id, p_project_id) LOOP
15885 IF l_debug_mode = 'Y' THEN
15886 pa_debug.write(l_module_name,'l_all_tasks.element_version_id='||l_all_tasks.element_version_id, 3);
15887 pa_debug.write(l_module_name,'l_all_tasks.status_code='||l_all_tasks.status_code, 3);
15888 END IF;
15889 --4533534
15890 IF ((l_version_enabled = 'N') OR (l_version_enabled = 'Y' AND l_all_tasks.status_code = 'STRUCTURE_WORKING'))
15891 THEN
15892 --4533534
15893 --FOR l_all_links IN c_get_links(l_all_tasks.element_version_id, p_project_id) LOOP
15894 FOR l_all_links IN c_get_links(l_all_tasks.element_version_id) LOOP
15895 IF l_debug_mode = 'Y' THEN
15896 pa_debug.write(l_module_name,'l_all_links.sub_project_id='||l_all_links.sub_project_id, 3);
15897 pa_debug.write(l_module_name,'l_all_links.sub_structure_ver_id='||l_all_links.sub_structure_ver_id, 3);
15898 --pa_debug.write(l_module_name,'l_all_links.parent_project_id='||l_all_links.parent_project_id, 3);
15899 --pa_debug.write(l_module_name,'l_all_links.parent_structure_ver_id='||l_all_links.parent_structure_ver_id, 3);
15900 --pa_debug.write(l_module_name,'l_all_links.parent_task_version_id='||l_all_links.parent_task_version_id, 3);
15901 --pa_debug.write(l_module_name,'l_all_links.parent_wbs_number='||l_all_links.parent_wbs_number, 3);
15902 pa_debug.write(l_module_name,'l_all_links.link_task_ver_id='||l_all_links.link_task_ver_id, 3);
15903 pa_debug.write(l_module_name,'l_all_links.object_relationship_id='||l_all_links.object_relationship_id, 3);
15904 pa_debug.write(l_module_name,'l_all_links.record_version_number='||l_all_links.record_version_number, 3);
15905 --pa_debug.write(l_module_name,'l_all_links.task_unpub_ver_status_code='||l_all_links.task_unpub_ver_status_code, 3);
15906 pa_debug.write(l_module_name,'l_all_links.relationship_type='||l_all_links.relationship_type, 3);
15907 END IF;
15908 --4533534
15909 --IF ((l_version_enabled = 'N') OR (l_version_enabled = 'Y' AND NVL(l_all_links.task_unpub_ver_status_code,'WORKING') <> 'PUBLISHED'))
15910
15911 PA_RELATIONSHIP_PUB.Delete_SubProject_Association
15912 ( p_init_msg_list => FND_API.G_FALSE,
15913 p_calling_module => p_calling_module,
15914 p_object_relationships_id => l_all_links.object_relationship_id,
15915 p_record_version_number => l_all_links.record_version_number,
15916 x_return_status => x_return_status,
15917 x_msg_count => x_msg_count,
15918 x_msg_data => x_msg_data
15919 );
15920 IF l_debug_mode = 'Y' THEN
15921 pa_debug.write(l_module_name,'After Call Delete_SubProject_Association x_return_status='||x_return_status, 3);
15922 END IF;
15923
15924 IF (x_return_status <> 'S') THEN
15925 raise FND_API.G_EXC_ERROR;
15926 END IF;
15927 END LOOP;
15928 END IF;
15929 END LOOP;
15930 EXCEPTION
15931 when FND_API.G_EXC_ERROR then
15932 x_return_status := FND_API.G_RET_STS_ERROR;
15933 x_msg_count := fnd_msg_pub.count_msg;
15934 ROLLBACK to CANCEL_TASK_SP;
15935 when FND_API.G_EXC_UNEXPECTED_ERROR then
15936 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15937 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15938 p_procedure_name => 'CANCEL_TASK',
15939 p_error_text => SUBSTRB(SQLERRM,1,240));
15940 x_msg_count := fnd_msg_pub.count_msg;
15941 ROLLBACK to CANCEL_TASK_SP;
15942 when OTHERS then
15943 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15944 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
15945 p_procedure_name => 'CANCEL_TASK',
15946 p_error_text => SUBSTRB(SQLERRM,1,240));
15947 x_msg_count := fnd_msg_pub.count_msg;
15948 ROLLBACK to CANCEL_TASK_SP;
15949 raise;
15950 END CANCEL_TASK;
15951
15952 -- Bug Fix 5593736.
15953
15954 PROCEDURE INDENT_MULTI_TASK_VERSION
15955 (p_api_version IN NUMBER := 1.0
15956 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
15957 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
15958 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
15959 ,p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL
15960 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
15961 ,p_debug_mode IN VARCHAR2 := 'N'
15962 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15963 ,p_project_id IN NUMBER
15964 ,p_structure_version_id IN NUMBER
15965 ,p_structure_type IN VARCHAR2 :='WORKPLAN'
15966 ,p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
15967 ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE
15968 ,p_display_sequence_tbl IN SYSTEM.PA_NUM_TBL_TYPE
15969 ,x_return_status OUT NOCOPY VARCHAR2
15970 ,x_msg_count OUT NOCOPY NUMBER
15971 ,x_msg_data OUT NOCOPY VARCHAR2)
15972 IS
15973
15974 l_api_name CONSTANT VARCHAR(30) := 'INDENT_MULTI_TASK_VERSION';
15975 l_api_version CONSTANT NUMBER := 1.0;
15976 l_return_status VARCHAR2(1);
15977 l_msg_count NUMBER;
15978 l_msg_data VARCHAR2(250);
15979 l_data VARCHAR2(250);
15980 l_msg_index_out NUMBER;
15981
15982 h NUMBER := 0;
15983 i NUMBER := 0;
15984 j NUMBER := 0;
15985 k NUMBER := 0;
15986 l NUMBER := 0;
15987 m NUMBER := 0;
15988 l_count NUMBER := 0;
15989 l_error_count NUMBER := 0;
15990 l_msg_code VARCHAR2(30) := null;
15991
15992 TYPE l_task_in_rec_type IS RECORD
15993 (task_version_id NUMBER := null
15994 ,record_version_number NUMBER := null
15995 ,display_sequence NUMBER := null);
15996
15997 l_current l_task_in_rec_type;
15998
15999 TYPE l_task_in_tbl_type IS TABLE OF l_task_in_rec_type INDEX BY BINARY_INTEGER;
16000
16001 l_task_in_tbl l_task_in_tbl_type;
16002
16003 TYPE l_task_error_rec_type IS RECORD
16004 (task_name VARCHAR2(300) := null
16005 ,task_number VARCHAR2(300) := null
16006 ,error_msg VARCHAR2(2000) := null);
16007
16008 TYPE l_task_error_tbl_type IS TABLE OF l_task_error_rec_type INDEX BY BINARY_INTEGER;
16009
16010 l_task_error_tbl l_task_error_tbl_type;
16011
16012 cursor l_cur_task_attr(c_project_id NUMBER, c_element_version_id NUMBER) is
16013 select ppe.name, ppev.wbs_number --Bug 6878138
16014 from pa_proj_elements ppe, pa_proj_element_versions ppev
16015 where ppe.project_id = ppev.project_id
16016 and ppe.proj_element_id = ppev.proj_element_id
16017 and ppev.project_id = c_project_id
16018 and ppev.element_version_id = c_element_version_id;
16019
16020 l_rec_task_attr l_cur_task_attr%rowtype;
16021
16022 BEGIN
16023
16024 pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION');
16025
16026 IF (p_debug_mode = 'Y') THEN
16027 pa_debug.debug('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION BEGIN');
16028 END IF;
16029
16030 IF (p_commit = FND_API.G_TRUE) THEN
16031 savepoint indent_multi_task_version;
16032 END IF;
16033
16034 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16035 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16036 END IF;
16037
16038 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
16039 FND_MSG_PUB.initialize;
16040 END IF;
16041
16042 x_return_status := FND_API.G_RET_STS_SUCCESS;
16043
16044 -- Copy the input paramters to the local pl/sql table.
16045 for h in p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST
16046 loop
16047 l_task_in_tbl(h).task_version_id := p_task_version_id_tbl(h);
16048 l_task_in_tbl(h).record_version_number := p_record_version_number_tbl(h);
16049 l_task_in_tbl(h).display_sequence := p_display_sequence_tbl(h);
16050 end loop;
16051
16052 -- Sort the tasks for indent in ascending order of display sequence.
16053 -- Assuming that the user will generally choose less than a thousand items
16054 -- we have implemeneted an insertion sort for good sorting efficiency.
16055 l_count := l_task_in_tbl.count;
16056
16057 i := 1;
16058
16059 while (i <= l_count)
16060 loop
16061 l_current := l_task_in_tbl(i);
16062 j := i;
16063 while ((j > 1) AND (l_task_in_tbl(j-1).display_sequence > l_current.display_sequence))
16064 loop
16065 l_task_in_tbl(j) := l_task_in_tbl(j-1);
16066 j := (j-1);
16067 end loop;
16068 l_task_in_tbl(j) := l_current;
16069 i := (i + 1);
16070 end loop;
16071
16072 -- Loop through the sorted list and indent each task version.
16073 for k in 1..l_count
16074 loop
16075 -- Clear the message stack.
16076 FND_MSG_PUB.initialize;
16077
16078 -- Call the API: PA_TASK_PUB1.INDENT_TASK_VERSION_BULK().
16079 PA_TASK_PUB1.INDENT_TASK_VERSION_BULK
16080 (p_api_version => p_api_version
16081 , p_init_msg_list => p_init_msg_list
16082 , p_commit => p_commit
16083 , p_validate_only => p_validate_only
16084 , p_validation_level => p_validation_level
16085 , p_calling_module => p_calling_module
16086 , p_debug_mode => p_debug_mode
16087 , p_max_msg_count => p_max_msg_count
16088 , p_structure_version_id => p_structure_version_id
16089 , p_task_version_id => l_task_in_tbl(k).task_version_id
16090 , p_project_id => p_project_id
16091 , p_record_version_number => l_task_in_tbl(k).record_version_number
16092 , x_return_status => l_return_status
16093 , x_msg_count => l_msg_count
16094 , x_msg_data => l_msg_data);
16095
16096 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
16097
16098 -- Store the task name and task number in the local pl/sql error table.
16099 open l_cur_task_attr(p_project_id, l_task_in_tbl(k).task_version_id);
16100 fetch l_cur_task_attr into l_task_error_tbl(k).task_name, l_task_error_tbl(k).task_number ;
16101 close l_cur_task_attr;
16102
16103 -- Store the message code for the error message reported in the local pl/sql error table.
16104 PA_INTERFACE_UTILS_PUB.get_messages
16105 (p_encoded => FND_API.G_FALSE -- Get the encoded message.
16106 , p_msg_index => 1 -- Get the message at index 1.
16107 , p_data => l_task_error_tbl(k).error_msg
16108 , p_msg_index_out => l_msg_index_out);
16109
16110 end if;
16111
16112 end loop; -- loop k.
16113
16114 -- Populate the tokenized error messages in the error stack:
16115 l_error_count := l_task_error_tbl.count;
16116
16117 if (l_error_count > 0) then
16118
16119 -- Set the return status to error.
16120 x_return_status := FND_API.G_RET_STS_ERROR;
16121
16122 -- Clear all previous messages from the message stack.
16123 FND_MSG_PUB.initialize;
16124
16125 -- Populate the generic error message.
16126 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
16127
16128 -- Loop through the local pl/sql error table to populate the tokenized error messages.
16129 -- Bug Fix 5920784
16130 -- Modified the following line to loop through the original task count rather than the error msg table count.
16131
16132 -- for l in 1..l_error_count
16133 FOR l in 1..l_count
16134 -- End of Bug Fix 5920784
16135
16136 loop
16137 if (l_task_error_tbl.exists(l)) then
16138 PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
16139 ,'TASKNAME',l_task_error_tbl(l).task_name
16140 ,'TASKNUMBER',l_task_error_tbl(l).task_number
16141 ,'ERRORMSG', l_task_error_tbl(l).error_msg);
16142 end if;
16143 end loop;
16144
16145 raise FND_API.G_EXC_ERROR;
16146
16147 end if;
16148
16149 IF (p_commit = FND_API.G_TRUE) THEN
16150 COMMIT;
16151 END IF;
16152
16153 IF (p_debug_mode = 'Y') THEN
16154 pa_debug.debug('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION END');
16155 END IF;
16156
16157 EXCEPTION
16158
16159 when FND_API.G_EXC_ERROR then
16160 if p_commit = FND_API.G_TRUE then
16161 rollback to indent_multi_task_version;
16162 end if;
16163 x_return_status := FND_API.G_RET_STS_ERROR;
16164
16165 when FND_API.G_EXC_UNEXPECTED_ERROR then
16166 if p_commit = FND_API.G_TRUE then
16167 rollback to indent_multi_task_version;
16168 end if;
16169 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16170 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16171 p_procedure_name => 'INDENT_MULTI_TASK_VERSION',
16172 p_error_text => SUBSTRB(SQLERRM,1,240));
16173 when OTHERS then
16174 if p_commit = FND_API.G_TRUE then
16175 rollback to indent_multi_task_version;
16176 end if;
16177 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16178 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16179 p_procedure_name => 'INDENT_MULTI_TASK_VERSION',
16180 p_error_text => SUBSTRB(SQLERRM,1,240));
16181
16182 raise;
16183
16184 END INDENT_MULTI_TASK_VERSION;
16185
16186 PROCEDURE OUTDENT_MULTI_TASK_VERSION
16187 (p_api_version IN NUMBER := 1.0
16188 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
16189 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
16190 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
16191 ,p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL
16192 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
16193 ,p_debug_mode IN VARCHAR2 := 'N'
16194 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16195 ,p_project_id IN NUMBER
16196 ,p_structure_version_id IN NUMBER
16197 ,p_structure_type IN VARCHAR2 :='WORKPLAN'
16198 ,p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE
16199 ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE
16200 ,p_display_sequence_tbl IN SYSTEM.PA_NUM_TBL_TYPE
16201 ,x_return_status OUT NOCOPY VARCHAR2
16202 ,x_msg_count OUT NOCOPY NUMBER
16203 ,x_msg_data OUT NOCOPY VARCHAR2)
16204 IS
16205
16206 l_api_name CONSTANT VARCHAR(30) := 'OUTDENT_MULTI_TASK_VERSION';
16207 l_api_version CONSTANT NUMBER := 1.0;
16208 l_return_status VARCHAR2(1);
16209 l_msg_count NUMBER;
16210 l_msg_data VARCHAR2(250);
16211 l_data VARCHAR2(250);
16212 l_msg_index_out NUMBER;
16213
16214 h NUMBER := 0;
16215 i NUMBER := 0;
16216 j NUMBER := 0;
16217 k NUMBER := 0;
16218 l NUMBER := 0;
16219 m NUMBER := 0;
16220 l_count NUMBER := 0;
16221 l_error_count NUMBER := 0;
16222 l_msg_code VARCHAR2(30) := null;
16223
16224 TYPE l_task_in_rec_type IS RECORD
16225 (task_version_id NUMBER := null
16226 ,record_version_number NUMBER := null
16227 ,display_sequence NUMBER := null);
16228
16229 l_current l_task_in_rec_type;
16230
16231 TYPE l_task_in_tbl_type IS TABLE OF l_task_in_rec_type INDEX BY BINARY_INTEGER;
16232
16233 l_task_in_tbl l_task_in_tbl_type;
16234
16235 TYPE l_task_error_rec_type IS RECORD
16236 (task_name VARCHAR2(300) := null
16237 ,task_number VARCHAR2(300) := null
16238 ,error_msg VARCHAR2(2000) := null);
16239
16240 TYPE l_task_error_tbl_type IS TABLE OF l_task_error_rec_type INDEX BY BINARY_INTEGER;
16241
16242 l_task_error_tbl l_task_error_tbl_type;
16243
16244 cursor l_cur_task_attr(c_project_id NUMBER, c_element_version_id NUMBER) is
16245 select ppe.name, ppev.wbs_number --Bug 6878138
16246 from pa_proj_elements ppe, pa_proj_element_versions ppev
16247 where ppe.project_id = ppev.project_id
16248 and ppe.proj_element_id = ppev.proj_element_id
16249 and ppev.project_id = c_project_id
16250 and ppev.element_version_id = c_element_version_id;
16251
16252 l_rec_task_attr l_cur_task_attr%rowtype;
16253
16254 BEGIN
16255
16256 pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION');
16257
16258 IF (p_debug_mode = 'Y') THEN
16259 pa_debug.debug('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION BEGIN');
16260 END IF;
16261
16262 IF (p_commit = FND_API.G_TRUE) THEN
16263 savepoint outdent_multi_task_version;
16264 END IF;
16265
16266 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16267 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16268 END IF;
16269
16270 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
16271 FND_MSG_PUB.initialize;
16272 END IF;
16273
16274 x_return_status := FND_API.G_RET_STS_SUCCESS;
16275
16276 -- Copy the input paramters to the local pl/sql table.
16277 for h in p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST
16278 loop
16279 l_task_in_tbl(h).task_version_id := p_task_version_id_tbl(h);
16280 l_task_in_tbl(h).record_version_number := p_record_version_number_tbl(h);
16281 l_task_in_tbl(h).display_sequence := p_display_sequence_tbl(h);
16282 end loop;
16283
16284 -- Sort the tasks for outdent in descending order of display sequence.
16285 -- Assuming that the user will generally choose less than a thousand items
16286 -- we have implemeneted an insertion sort for good sorting efficiency.
16287 l_count := l_task_in_tbl.count;
16288
16289 i := 1;
16290
16291 while (i <= l_count)
16292 loop
16293 l_current := l_task_in_tbl(i);
16294 j := i;
16295 while ((j > 1) AND (l_task_in_tbl(j-1).display_sequence < l_current.display_sequence))
16296 loop
16297 l_task_in_tbl(j) := l_task_in_tbl(j-1);
16298 j := (j-1);
16299 end loop;
16300 l_task_in_tbl(j) := l_current;
16301 i := (i + 1);
16302 end loop;
16303
16304 -- Loop through the sorted list and outdent each task version.
16305 for k in 1..l_count
16306 loop
16307 -- Clear the message stack.
16308 FND_MSG_PUB.initialize;
16309
16310 -- Call the API: PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK().
16311 PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK
16312 (p_api_version => p_api_version
16313 , p_init_msg_list => p_init_msg_list
16314 , p_commit => p_commit
16315 , p_validate_only => p_validate_only
16316 , p_validation_level => p_validation_level
16317 , p_calling_module => p_calling_module
16318 , p_debug_mode => p_debug_mode
16319 , p_max_msg_count => p_max_msg_count
16320 , p_structure_version_id => p_structure_version_id
16321 , p_task_version_id => l_task_in_tbl(k).task_version_id
16322 , p_project_id => p_project_id
16323 , p_record_version_number => l_task_in_tbl(k).record_version_number
16324 , x_return_status => l_return_status
16325 , x_msg_count => l_msg_count
16326 , x_msg_data => l_msg_data);
16327
16328 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
16329
16330 -- Store the task name and task number in the local pl/sql error table.
16331 open l_cur_task_attr(p_project_id, l_task_in_tbl(k).task_version_id);
16332 fetch l_cur_task_attr into l_task_error_tbl(k).task_name, l_task_error_tbl(k).task_number ;
16333 close l_cur_task_attr;
16334
16335 -- Store the message code for the error message reported in the local pl/sql error table.
16336 PA_INTERFACE_UTILS_PUB.get_messages
16337 (p_encoded => FND_API.G_FALSE -- Get the encoded message.
16338 , p_msg_index => 1 -- Get the message at index 1.
16339 , p_data => l_task_error_tbl(k).error_msg
16340 , p_msg_index_out => l_msg_index_out);
16341
16342 end if;
16343
16344 end loop; -- loop k.
16345
16346 -- Populate the tokenized error messages in the error stack:
16347 l_error_count := l_task_error_tbl.count;
16348
16349 if (l_error_count > 0) then
16350
16351 -- Set the return status to error.
16352 x_return_status := FND_API.G_RET_STS_ERROR;
16353
16354 -- Clear all previous messages from the message stack.
16355 FND_MSG_PUB.initialize;
16356
16357 -- Populate the generic error message.
16358 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
16359
16360 -- Loop through the local pl/sql error table to populate the tokenized error messages.
16361 for l in 1..l_error_count
16362 loop
16363 if (l_task_error_tbl.exists(l)) then
16364 PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
16365 ,'TASKNAME',l_task_error_tbl(l).task_name
16366 ,'TASKNUMBER',l_task_error_tbl(l).task_number
16367 ,'ERRORMSG', l_task_error_tbl(l).error_msg);
16368 end if;
16369 end loop;
16370
16371 raise FND_API.G_EXC_ERROR;
16372
16373 end if;
16374
16375 IF (p_commit = FND_API.G_TRUE) THEN
16376 COMMIT;
16377 END IF;
16378
16379 IF (p_debug_mode = 'Y') THEN
16380 pa_debug.debug('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION END');
16381 END IF;
16382
16383 EXCEPTION
16384
16385 when FND_API.G_EXC_ERROR then
16386 if p_commit = FND_API.G_TRUE then
16387 rollback to outdent_multi_task_version;
16388 end if;
16389 x_return_status := FND_API.G_RET_STS_ERROR;
16390
16391 when FND_API.G_EXC_UNEXPECTED_ERROR then
16392 if p_commit = FND_API.G_TRUE then
16393 rollback to outdent_multi_task_version;
16394 end if;
16395 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16396 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16397 p_procedure_name => 'OUTDENT_MULTI_TASK_VERSION',
16398 p_error_text => SUBSTRB(SQLERRM,1,240));
16399 when OTHERS then
16400 if p_commit = FND_API.G_TRUE then
16401 rollback to outdent_multi_task_version;
16402 end if;
16403 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16404 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_TASK_PUB1',
16405 p_procedure_name => 'OUTDENT_MULTI_TASK_VERSION',
16406 p_error_text => SUBSTRB(SQLERRM,1,240));
16407
16408 raise;
16409
16410 END OUTDENT_MULTI_TASK_VERSION;
16411
16412 -- End of Bug Fix 5593736.
16413
16414 END PA_TASK_PUB1;