[Home] [Help]
PACKAGE BODY: APPS.PA_PROJECT_STRUCTURE_PVT1
Source
1 package body PA_PROJECT_STRUCTURE_PVT1 as
2 /*$Header: PAXSTCVB.pls 120.23.12010000.3 2008/10/07 11:27:32 amehrotr ship $*/
3
4 -- API name : Create_Structure
5 -- Type : Private Procedure
6 -- Pre-reqs : None
7 -- Return Value : N/A
8 -- Parameters
9 -- p_api_version IN NUMBER := 1.0
10 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
11 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
12 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
13 -- p_validation_level IN VARCHAR2 := 100
14 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
15 -- p_debug_mode IN VARCHAR2 := 'N'
16 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17 -- p_project_id IN NUMBER
18 -- p_structure_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19 -- p_structure_name IN VARCHAR2
20 -- p_calling_flag IN VARCHAR2 := 'WORKPLAN'
21 -- p_structure_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
23 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
26 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38 -- x_structure_id OUT NUMBER
39 -- x_return_status OUT VARCHAR2
40 -- x_msg_count OUT NUMBER
41 -- x_msg_data OUT VARCHAR2
42 --
43 -- History
44 --
45 -- 25-JUN-01 HSIU -Created
46 --
47 --
48
49
50 procedure Create_Structure
51 (
52 p_api_version IN NUMBER := 1.0
53 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
54 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
55 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
56 ,p_validation_level IN VARCHAR2 := 100
57 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
58 ,p_debug_mode IN VARCHAR2 := 'N'
59 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
60 ,p_project_id IN NUMBER
61 ,p_structure_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
62 ,p_structure_name IN VARCHAR2
63 ,p_calling_flag IN VARCHAR2 := 'WORKPLAN'
64 ,p_structure_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
65 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
66 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
67 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
68 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
69 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
70 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
71 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
72 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
73 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
74 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
75 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
76 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
77 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
78 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
79 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
80 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
81 ,p_approval_reqd_flag IN VARCHAR2 := 'N'
82 ,p_auto_publish_flag IN VARCHAR2 := 'N'
83 ,p_approver_source_id IN NUMBER := FND_API.G_MISS_NUM
84 ,p_approver_source_type IN NUMBER := FND_API.G_MISS_NUM
85 ,p_default_display_lvl IN NUMBER := 0
86 ,p_enable_wp_version_flag IN VARCHAR2 := 'N'
87 ,p_auto_pub_upon_creation_flag IN VARCHAR2 := 'N'
88 ,p_auto_sync_txn_date_flag IN VARCHAR2 := 'N'
89 ,p_txn_date_sync_buf_days IN NUMBER := FND_API.G_MISS_NUM
90 ,p_lifecycle_version_id IN NUMBER := FND_API.G_MISS_NUM
91 ,p_current_phase_version_id IN NUMBER := FND_API.G_MISS_NUM
92 ,p_progress_cycle_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
93 ,p_wq_enable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
94 ,p_remain_effort_enable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
95 ,p_percent_comp_enable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
96 ,p_next_progress_update_date IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
97 ,p_action_set_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
98 ,p_task_weight_basis_code IN VARCHAR2 := 'DURATION'
99 ,x_structure_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
100 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
101 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
102 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
103 )
104 IS
105 l_msg_count NUMBER;
106 l_msg_data VARCHAR2(250);
107 l_return_status VARCHAR2(2);
108 l_error_message_code VARCHAR2(250);
109
110 l_rowid VARCHAR2(255);
111 l_proj_element_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
112 l_structure_type_id PA_STRUCTURE_TYPES.STRUCTURE_TYPE_ID%TYPE;
113 l_proj_structure_type_id PA_PROJ_STRUCTURE_TYPES.PROJ_STRUCTURE_TYPE_ID%TYPE;
114 l_structure_type PA_STRUCTURE_TYPES.STRUCTURE_TYPE_CLASS_CODE%TYPE;
115
116 l_workplan_license VARCHAR2(1);
117 l_financial_license VARCHAR2(1);
118 l_multi_struc_license VARCHAR2(1);
119
120 l_split_flag VARCHAR2(1);
121 l_split_flag2 VARCHAR2(1);
122
123 l_attribute_category VARCHAR2(30) := NULL;
124 l_attribute1 VARCHAR2(150) := NULL;
125 l_attribute2 VARCHAR2(150) := NULL;
126 l_attribute3 VARCHAR2(150) := NULL;
127 l_attribute4 VARCHAR2(150) := NULL;
128 l_attribute5 VARCHAR2(150) := NULL;
129 l_attribute6 VARCHAR2(150) := NULL;
130 l_attribute7 VARCHAR2(150) := NULL;
131 l_attribute8 VARCHAR2(150) := NULL;
132 l_attribute9 VARCHAR2(150) := NULL;
133 l_attribute10 VARCHAR2(150) := NULL;
134 l_attribute11 VARCHAR2(150) := NULL;
135 l_attribute12 VARCHAR2(150) := NULL;
136 l_attribute13 VARCHAR2(150) := NULL;
137 l_attribute14 VARCHAR2(150) := NULL;
138 l_attribute15 VARCHAR2(150) := NULL;
139
140 l_proj_prog_attr_id NUMBER;
141 l_structure_description VARCHAR2(2000);
142
143 cursor get_split_flag IS
144 select split_cost_from_workplan_flag, SPLIT_COST_FROM_BILL_FLAG
145 from pa_projects_all
146 where project_id = p_project_id;
147
148 cursor get_licensed(p_workplan VARCHAR2,
149 p_financial VARCHAR2,
150 p_deliverable VARCHAR2) IS
151 select structure_type_id, structure_type_class_code
152 from pa_structure_types
153 where (structure_type_class_code = 'WORKPLAN' and 'Y' = p_workplan)
154 or (structure_type_class_code = 'FINANCIAL' and 'Y' = p_financial)
155 or (structure_type_class_code = 'DELIVERABLE' and 'Y' = p_deliverable);
156 l_deliverable_license VARCHAR2(1) := 'N';
157
158 BEGIN
159 IF (p_debug_mode = 'Y') THEN
160 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE BEGIN');
161 END IF;
162
163 IF (p_commit = FND_API.G_TRUE) THEN
164 savepoint CREATE_STRUC_PRIVATE;
165 END IF;
166
167 IF (p_debug_mode = 'Y') THEN
168 pa_debug.debug('Performing validations');
169 END IF;
170
171 --Check if the structure name is unique within the project
172 If (pa_project_structure_utils.check_structure_name_unique(p_structure_name,
173 NULL,
174 p_project_id) <> 'Y') THEN
175 --Name is not unique
176 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_STRUC_NAME_UNIQUE');
177 x_msg_data := 'PA_PS_STRUC_NAME_UNIQUE';
178 RAISE FND_API.G_EXC_ERROR;
179 END IF;
180
181 --Check what is licensed.
182 l_workplan_license := nvl(pa_install.is_pjt_licensed, 'N');
183 l_financial_license := nvl(pa_install.is_costing_licensed, 'N');
184
185 IF (p_calling_flag IS NOT NULL) THEN
186 IF (p_calling_flag = 'WORKPLAN') THEN
187 l_financial_license := 'N';
188 IF (l_workplan_license = 'N') THEN
189 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_PROJ_MANAG_NOT_LIC');
190 x_msg_data := 'PA_PS_PROD_MANAG_NOT_LIC';
191 RAISE FND_API.G_EXC_ERROR;
192 END IF;
193 ELSIF (p_calling_flag = 'FINANCIAL') THEN
194 l_workplan_license := 'N';
195 IF (l_financial_license <> 'Y') THEN
196 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_COSTING_NOT_LIC');
197 RAISE FND_API.G_EXC_ERROR;
198 END IF;
199 ELSIF (p_calling_flag = 'DELIVERABLE') THEN
200 l_workplan_license := 'N';
201 l_financial_license := 'N';
202 l_deliverable_license := 'Y';
203 END IF;
204 END IF;
205
206 /*
207 --Check if we should split structure types into different structure
208 open get_split_flag;
209 fetch get_split_flag into l_split_flag, l_split_flag2;
210 IF get_split_flag%NOTFOUND THEN
211 PA_UTILS.ADD_MESSAGE('PA', 'PA_INVALID_PROJECT_ID');
212 x_msg_data := 'PA_INVALID_PROJECT_ID';
213 RAISE FND_API.G_EXC_ERROR;
214 END IF;
215 close get_split_flag;
216
217 --Check if there is any error.
218 l_msg_count := FND_MSG_PUB.count_msg;
219 IF l_msg_count > 0 THEN
220 x_msg_count := l_msg_count;
221 IF x_msg_count = 1 THEN
222 x_msg_data := l_msg_data;
223 END IF;
224 RAISE FND_API.G_EXC_ERROR;
225 END IF;
226
227 --If splitting structure types, check if one structure type is selected
228 If (l_split_flag <> 'N') THEN
229 IF (p_calling_flag = 'WORKPLAN') THEN
230 l_costing_license := 'N';
231 l_billing_license := 'N';
232 If (l_workplan_license <> 'Y') THEN
233 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_PROJ_MANAG_NOT_LIC');
234 x_msg_data := 'PA_PS_PROD_MANAG_NOT_LIC';
235 RAISE FND_API.G_EXC_ERROR;
236 END IF;
237 ELSIf (p_calling_flag = 'COSTING') THEN
238 IF (l_costing_license <> 'Y') THEN
239 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_COSTING_NOT_LIC');
240 x_msg_data := 'PA_PS_COSTING_NOT_LIC';
241 RAISE FND_API.G_EXC_ERROR;
242 END IF;
243 l_workplan_license := 'N';
244 If (l_split_flag2 <> 'N') THEN
245 l_billing_license := 'N';
246 END IF;
247 ELSIf (p_calling_flag = 'BILLING') THEN
248 IF (l_billing_license <> 'Y') THEN
249 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_BILLING_NOT_LIC');
250 x_msg_data := 'PA_PS_BILLING_NOT_LIC';
251 RAISE FND_API.G_EXC_ERROR;
252 END IF;
253 l_workplan_license := 'N';
254 If (l_split_flag2 <> 'N') THEN
255 l_costing_license := 'N';
256 END IF;
257 ELSIf (p_calling_flag IS NULL) THEN
258 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_CALLING_PAGE_SEL');
259 x_msg_data := 'PA_PS_NO_CALLING_PAGE_SEL';
260 RAISE FND_API.G_EXC_ERROR;
261 END IF;
262 END IF;
263 */
264
265 --Check if multistructure is licensed.
266 l_multi_struc_license := 'Y'; --pa_install.is_product_licensed('PA_MULTISTRUCTURE_LICENSED');
267
268
269 --Replace dff values with null if not entered.
270 IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL) THEN
271 l_attribute_category := p_attribute_category;
272 END IF;
273 IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN
274 l_attribute1 := p_attribute1;
275 END IF;
276 IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN
277 l_attribute2 := p_attribute2;
278 END IF;
279 IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN
280 l_attribute3 := p_attribute3;
281 END IF;
282 IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN
283 l_attribute4 := p_attribute4;
284 END IF;
285 IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN
286 l_attribute5 := p_attribute5;
287 END IF;
288 IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN
289 l_attribute6 := p_attribute6;
290 END IF;
291 IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN
292 l_attribute7 := p_attribute7;
293 END IF;
294 IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN
295 l_attribute8 := p_attribute8;
296 END IF;
297 IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN
298 l_attribute9 := p_attribute9;
299 END IF;
300 IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN
301 l_attribute10 := p_attribute10;
302 END IF;
303 IF (p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute11 IS NULL) THEN
304 l_attribute11 := p_attribute11;
305 END IF;
306 IF (p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute12 IS NULL) THEN
307 l_attribute12 := p_attribute12;
308 END IF;
309 IF (p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute13 IS NULL) THEN
310 l_attribute13 := p_attribute13;
311 END IF;
312 IF (p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute14 IS NULL) THEN
313 l_attribute14 := p_attribute14;
314 END IF;
315 IF (p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute15 IS NULL) THEN
316 l_attribute15 := p_attribute15;
317 END IF;
318 --rtarway,3655698
319 IF (p_structure_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
320 l_structure_description := null;
321 else
322 l_structure_description := p_structure_description;
323 END IF;
324
325 --Check if there is any error.
326 l_msg_count := FND_MSG_PUB.count_msg;
327 IF l_msg_count > 0 THEN
328 x_msg_count := l_msg_count;
329 IF x_msg_count = 1 THEN
330 x_msg_data := l_msg_data;
331 END IF;
332 RAISE FND_API.G_EXC_ERROR;
333 END IF;
334
335 --Insert into pa_proj_elements
336 select PA_TASKS_S.NEXTVAL into l_proj_element_id from sys.dual;
337
338 PA_PROJ_ELEMENTS_PKG.insert_row(
339 X_ROW_ID => l_rowid
340 ,X_PROJ_ELEMENT_ID => l_proj_element_id
341 ,X_PROJECT_ID => p_project_id
342 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
343 ,X_ELEMENT_NUMBER => to_char(l_proj_element_id)
344 ,X_NAME => p_structure_name
345 ,X_DESCRIPTION => l_structure_description--rtarway,3655698
346 ,X_STATUS_CODE => NULL
347 ,X_WF_STATUS_CODE => NULL
348 ,X_PM_PRODUCT_CODE => NULL
349 ,X_PM_TASK_REFERENCE => NULL
350 ,X_CLOSED_DATE => NULL
351 ,X_LOCATION_ID => NULL
352 ,X_MANAGER_PERSON_ID => NULL
353 ,X_CARRYING_OUT_ORGANIZATION_ID => NULL
354 ,X_TYPE_ID => NULL
355 ,X_PRIORITY_CODE => NULL
356 ,X_INC_PROJ_PROGRESS_FLAG => 'N'
357 ,X_REQUEST_ID => NULL
358 ,X_PROGRAM_APPLICATION_ID => NULL
359 ,X_PROGRAM_ID => NULL
360 ,X_PROGRAM_UPDATE_DATE => NULL
361 ,X_LINK_TASK_FLAG => 'N'
362 ,X_ATTRIBUTE_CATEGORY => l_attribute_category
363 ,X_ATTRIBUTE1 => l_attribute1
364 ,X_ATTRIBUTE2 => l_attribute2
365 ,X_ATTRIBUTE3 => l_attribute3
366 ,X_ATTRIBUTE4 => l_attribute4
367 ,X_ATTRIBUTE5 => l_attribute5
368 ,X_ATTRIBUTE6 => l_attribute6
369 ,X_ATTRIBUTE7 => l_attribute7
370 ,X_ATTRIBUTE8 => l_attribute8
371 ,X_ATTRIBUTE9 => l_attribute9
372 ,X_ATTRIBUTE10 => l_attribute10
373 ,X_ATTRIBUTE11 => l_attribute11
374 ,X_ATTRIBUTE12 => l_attribute12
375 ,X_ATTRIBUTE13 => l_attribute13
376 ,X_ATTRIBUTE14 => l_attribute14
377 ,X_ATTRIBUTE15 => l_attribute15
378 ,X_TASK_WEIGHTING_DERIV_CODE => NULL
379 ,X_WORK_ITEM_CODE => NULL
380 ,X_UOM_CODE => NULL
381 ,X_WQ_ACTUAL_ENTRY_CODE => NULL
382 ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
383 ,X_PARENT_STRUCTURE_ID => NULL
384 ,X_PHASE_CODE => NULL
385 ,X_PHASE_VERSION_ID => NULL
386 ,X_SOURCE_OBJECT_ID => p_project_id
387 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
388 );
389
390 x_structure_id := l_proj_element_id;
391
392 --dbms_output.put_line('done inserting to pa_proj_element');
393
394 Open get_licensed(l_workplan_license, l_financial_license, l_deliverable_license);
395 IF (p_debug_mode = 'Y') THEN
396 pa_debug.debug('workplan license = '||l_workplan_license);
397 pa_debug.debug('financial license = '||l_financial_license);
398 END IF;
399
400 LOOP
401 FETCH get_licensed into l_structure_type_id, l_structure_type;
402 EXIT WHEN get_licensed%NOTFOUND;
403 --dbms_output.put_line('begin inserting to struture type tbl');
404 IF (p_debug_mode = 'Y') THEN
405 pa_debug.debug('structure_type = '||l_structure_type);
406 END IF;
407 --check if structure type exists
408
409 pa_project_structure_utils.Check_structure_Type_Exists(p_project_id,
410 l_structure_type,
411 l_return_status,
412 l_error_message_code);
413 --dbms_output.put_line(l_return_status||', '||l_error_message_code);
414 If (l_return_status <> 'S') THEN
415 PA_UTILS.ADD_MESSAGE('PA',l_error_message_code);
416 x_msg_data := l_error_message_code;
417 CLOSE get_licensed;
418 RAISE FND_API.G_EXC_ERROR;
419 END IF;
420
421 IF (l_structure_type IN ('WORKPLAN','DELIVERABLE')) THEN
422 --Add pa_proj_workplan_attr row
423 PA_WORKPLAN_ATTR_PVT.CREATE_PROJ_WORKPLAN_ATTRS(
424 p_validate_only => FND_API.G_FALSE
425 ,p_project_id => p_project_id
426 ,p_proj_element_id => l_proj_element_id
427 ,p_approval_reqd_flag => p_approval_reqd_flag
428 ,p_auto_publish_flag => p_auto_publish_flag
429 ,p_approver_source_id => p_approver_source_id
430 ,p_approver_source_type => p_approver_source_type
431 ,p_default_display_lvl => p_default_display_lvl
432 ,p_enable_wp_version_flag => p_enable_wp_version_flag
433 ,p_auto_pub_upon_creation_flag => p_auto_pub_upon_creation_flag
434 ,p_auto_sync_txn_date_flag => p_auto_sync_txn_date_flag
435 ,p_txn_date_sync_buf_days => p_txn_date_sync_buf_days
436 ,p_lifecycle_version_id => p_lifecycle_version_id
437 ,p_current_phase_version_id => p_current_phase_version_id
438 ,x_return_status => l_return_status
439 ,x_msg_count => x_msg_count
440 ,x_msg_data => x_msg_data
441 );
442
443 IF (l_return_status <> 'S') THEN
444 RAISE FND_API.G_EXC_ERROR;
445 END IF;
446 /* Amit : Moving this code below as it will create project progress attribute records for Delievrables too
447 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
448 p_validate_only => FND_API.G_FALSE
449 ,p_project_id => p_project_id
450 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
451 ,P_OBJECT_ID => l_proj_element_id
452 ,p_wq_enable_flag => p_wq_enable_flag
453 ,p_progress_cycle_id => p_progress_cycle_id
454 ,p_remain_effort_enable_flag => p_remain_effort_enable_flag
455 ,p_percent_comp_enable_flag => p_percent_comp_enable_flag
456 ,p_next_progress_update_date => p_next_progress_update_date
457 ,p_action_set_id => p_action_set_id
458 ,p_task_weight_basis_code => p_task_weight_basis_code
459 ,p_structure_type => l_structure_type -- Amit
460 ,x_proj_progress_attr_id => l_proj_prog_attr_id
461 ,x_return_status => l_return_status
462 ,x_msg_count => x_msg_count
463 ,x_msg_data => x_msg_data
464 );
465
466 IF (l_return_status <> 'S') THEN
467 RAISE FND_API.G_EXC_ERROR;
468 END IF;
469 */
470
471 END IF;
472
473 IF (l_structure_type = 'WORKPLAN') THEN -- NOt Adding financial here as progress attr created thru enable_financial_structure
474 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
475 p_validate_only => FND_API.G_FALSE
476 ,p_project_id => p_project_id
477 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
478 ,P_OBJECT_ID => l_proj_element_id
479 ,p_wq_enable_flag => p_wq_enable_flag
480 ,p_progress_cycle_id => p_progress_cycle_id
481 ,p_remain_effort_enable_flag => p_remain_effort_enable_flag
482 ,p_percent_comp_enable_flag => p_percent_comp_enable_flag
483 ,p_next_progress_update_date => p_next_progress_update_date
484 ,p_action_set_id => p_action_set_id
485 ,p_task_weight_basis_code => p_task_weight_basis_code
486 ,p_structure_type => l_structure_type -- Amit
487 ,x_proj_progress_attr_id => l_proj_prog_attr_id
488 ,x_return_status => l_return_status
489 ,x_msg_count => x_msg_count
490 ,x_msg_data => x_msg_data
491 );
492
493 IF (l_return_status <> 'S') THEN
494 RAISE FND_API.G_EXC_ERROR;
495 END IF;
496 END IF;
497
498 --Insert into pa_proj_structure_types
499 BEGIN
500 l_proj_structure_type_id := NULL;
501 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
502 X_ROWID => l_rowid
503 , X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
504 , X_PROJ_ELEMENT_ID => l_proj_element_id
505 , X_STRUCTURE_TYPE_ID => l_structure_type_id
506 , X_RECORD_VERSION_NUMBER => 1
507 , X_ATTRIBUTE_CATEGORY => NULL
508 , X_ATTRIBUTE1 => NULL
509 , X_ATTRIBUTE2 => NULL
510 , X_ATTRIBUTE3 => NULL
511 , X_ATTRIBUTE4 => NULL
512 , X_ATTRIBUTE5 => NULL
513 , X_ATTRIBUTE6 => NULL
514 , X_ATTRIBUTE7 => NULL
515 , X_ATTRIBUTE8 => NULL
516 , X_ATTRIBUTE9 => NULL
517 , X_ATTRIBUTE10 => NULL
518 , X_ATTRIBUTE11 => NULL
519 , X_ATTRIBUTE12 => NULL
520 , X_ATTRIBUTE13 => NULL
521 , X_ATTRIBUTE14 => NULL
522 , X_ATTRIBUTE15 => NULL
523 );
524 EXCEPTION
525 WHEN OTHERS THEN
526 CLOSE get_licensed;
527 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
528 END;
529 END LOOP;
530 --dbms_output.put_line('done inserting to struture type tbl');
531
532 CLOSE get_licensed;
533
534 x_return_status := FND_API.G_RET_STS_SUCCESS;
535
536 IF (p_debug_mode = 'Y') THEN
537 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE end');
538 END IF;
539
540 EXCEPTION
541 WHEN FND_API.G_EXC_ERROR THEN
542 IF (p_commit = FND_API.G_TRUE) THEN
543 ROLLBACK to CREATE_STRUC_PRIVATE;
544 END IF;
545 x_msg_count := FND_MSG_PUB.count_msg;
546 x_return_status := FND_API.G_RET_STS_ERROR;
547 WHEN OTHERS THEN
548 IF (p_commit = FND_API.G_TRUE) THEN
549 ROLLBACK to CREATE_STRUC_PRIVATE;
550 END IF;
551 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
552 x_msg_count := FND_MSG_PUB.count_msg;
553 --put message
554 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
555 p_procedure_name => 'Create_Structure',
556 p_error_text => SUBSTRB(SQLERRM,1,240));
557 RAISE;
558 END CREATE_STRUCTURE;
559
560
561 -- API name : Create_Structure_Version
562 -- Type : Private Procedure
563 -- Pre-reqs : None
564 -- Return Value : N/A
565 -- Parameters
566 -- p_api_version IN NUMBER := 1.0
567 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
568 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
569 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
570 -- p_validation_level IN VARCHAR2 := 100
571 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
572 -- p_debug_mode IN VARCHAR2 := 'N'
573 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
574 -- p_structure_id IN NUMBER
575 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
576 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
577 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
578 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
579 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
580 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
581 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
582 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
583 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
584 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
585 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
586 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
587 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
588 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
589 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
590 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
591 -- x_structure_version_id OUT NUMBER
592 -- x_return_status OUT VARCHAR2
593 -- x_msg_count OUT NUMBER
594 -- x_msg_data OUT VARCHAR2
595 --
596 -- History
597 --
598 -- 25-JUN-01 HSIU -Created
599 --
600 --
601
602
603 procedure Create_Structure_Version
604 (
605 p_api_version IN NUMBER := 1.0
606 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
607 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
608 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
609 ,p_validation_level IN VARCHAR2 := 100
610 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
611 ,p_debug_mode IN VARCHAR2 := 'N'
612 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
613 ,p_structure_id IN NUMBER
614 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
615 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
616 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
617 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
618 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
619 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
620 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
621 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
622 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
623 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
624 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
625 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
626 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
627 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
628 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
629 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
630 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
631 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
632 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
633 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
634 )
635 IS
636 l_rowid VARCHAR2(255);
637 l_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE;
638
639 l_msg_count NUMBER;
640 l_msg_data VARCHAR2(250);
641 -- added ofr Bug Fix: 4537865
642 l_new_structure_version_id NUMBER;
643 -- added for Bug fix: 4537865
644
645 l_attribute_category VARCHAR2(30) := NULL;
646 l_attribute1 VARCHAR2(150) := NULL;
647 l_attribute2 VARCHAR2(150) := NULL;
648 l_attribute3 VARCHAR2(150) := NULL;
649 l_attribute4 VARCHAR2(150) := NULL;
650 l_attribute5 VARCHAR2(150) := NULL;
651 l_attribute6 VARCHAR2(150) := NULL;
652 l_attribute7 VARCHAR2(150) := NULL;
653 l_attribute8 VARCHAR2(150) := NULL;
654 l_attribute9 VARCHAR2(150) := NULL;
655 l_attribute10 VARCHAR2(150) := NULL;
656 l_attribute11 VARCHAR2(150) := NULL;
657 l_attribute12 VARCHAR2(150) := NULL;
658 l_attribute13 VARCHAR2(150) := NULL;
659 l_attribute14 VARCHAR2(150) := NULL;
660 l_attribute15 VARCHAR2(150) := NULL;
661
662 l_dummy number;
663
664 CURSOR getid is select project_id from pa_proj_elements
665 where proj_element_id = p_structure_id;
666
667 CURSOR cur_elem_ver_seq IS
668 SELECT pa_proj_element_versions_s.nextval
669 FROM sys.dual;
670
671 BEGIN
672 IF (p_debug_mode = 'Y') THEN
673 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION begin');
674 END IF;
675
676 IF (p_commit = FND_API.G_TRUE) THEN
677 savepoint CREATE_STRUC_VER_PVT;
678 END IF;
679
680 IF (p_debug_mode = 'Y') THEN
681 pa_debug.debug('Performing validations');
682 END IF;
683
684 --Get project id
685 OPEN getid;
686 FETCH getid into l_project_id;
687 IF (getid%NOTFOUND) THEN
688 CLOSE getid;
689 Raise NO_DATA_FOUND;
690 END IF;
691 CLOSE getid;
692
693
694 --Replace dff values
695 IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL) THEN
696 l_attribute_category := p_attribute_category;
697 END IF;
698 IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN
699 l_attribute1 := p_attribute1;
700 END IF;
701 IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN
702 l_attribute2 := p_attribute2;
703 END IF;
704 IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN
705 l_attribute3 := p_attribute3;
706 END IF;
707 IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN
708 l_attribute4 := p_attribute4;
709 END IF;
710 IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN
711 l_attribute5 := p_attribute5;
712 END IF;
713 IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN
714 l_attribute6 := p_attribute6;
715 END IF;
716 IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN
717 l_attribute7 := p_attribute7;
718 END IF;
719 IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN
720 l_attribute8 := p_attribute8;
721 END IF;
722 IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN
723 l_attribute9 := p_attribute9;
724 END IF;
725 IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN
726 l_attribute10 := p_attribute10;
727 END IF;
728 IF (p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute11 IS NULL) THEN
729 l_attribute11 := p_attribute11;
730 END IF;
731 IF (p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute12 IS NULL) THEN
732 l_attribute12 := p_attribute12;
733 END IF;
734 IF (p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute13 IS NULL) THEN
735 l_attribute13 := p_attribute13;
736 END IF;
737 IF (p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute14 IS NULL) THEN
738 l_attribute14 := p_attribute14;
739 END IF;
740 IF (p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute15 IS NULL) THEN
741 l_attribute15 := p_attribute15;
742 END IF;
743
744 --Check if there is any error.
745 l_msg_count := FND_MSG_PUB.count_msg;
746 IF l_msg_count > 0 THEN
747 x_msg_count := l_msg_count;
748 IF x_msg_count = 1 THEN
749 x_msg_data := l_msg_data;
750 END IF;
751 RAISE FND_API.G_EXC_ERROR;
752 END IF;
753
754
755 --If no error,
756 --Get structure version id
757 OPEN cur_elem_ver_seq;
758 FETCH cur_elem_ver_seq INTO x_structure_version_id;
759 CLOSE cur_elem_ver_seq;
760
761 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
762 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
763 -- to x_structure_version_id
764
765 l_new_structure_version_id := x_structure_version_id ;
766
767 -- End 4657794
768
769 -- error_msg(x_structure_version_id||' new structure version id, '||p_structure_id||', '||l_project_id);
770 --Insert
771 PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
772 X_ROW_ID => l_rowid
773 --,X_ELEMENT_VERSION_ID => x_structure_version_id * Commenmted for Bug Fix: 4537865
774 ,X_ELEMENT_VERSION_ID => l_new_structure_version_id -- added for bug bug Fix: 4537865
775 ,X_PROJ_ELEMENT_ID => p_structure_id
776 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
777 ,X_PROJECT_ID => l_project_id
778 ,X_PARENT_STRUCTURE_VERSION_ID => x_structure_version_id
779 ,X_DISPLAY_SEQUENCE => NULL
780 ,X_WBS_LEVEL => NULL
781 ,X_WBS_NUMBER => '0'
782 ,X_ATTRIBUTE_CATEGORY => l_attribute_category
783 ,X_ATTRIBUTE1 => l_attribute1
784 ,X_ATTRIBUTE2 => l_attribute2
785 ,X_ATTRIBUTE3 => l_attribute3
786 ,X_ATTRIBUTE4 => l_attribute4
787 ,X_ATTRIBUTE5 => l_attribute5
788 ,X_ATTRIBUTE6 => l_attribute6
789 ,X_ATTRIBUTE7 => l_attribute7
790 ,X_ATTRIBUTE8 => l_attribute8
791 ,X_ATTRIBUTE9 => l_attribute9
792 ,X_ATTRIBUTE10 => l_attribute10
793 ,X_ATTRIBUTE11 => l_attribute11
794 ,X_ATTRIBUTE12 => l_attribute12
795 ,X_ATTRIBUTE13 => l_attribute13
796 ,X_ATTRIBUTE14 => l_attribute14
797 ,X_ATTRIBUTE15 => l_attribute15
798 ,X_TASK_UNPUB_VER_STATUS_CODE => NULL
799 ,X_SOURCE_OBJECT_ID => l_project_id
800 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
801 );
802 -- added for bug bug Fix: 4537865
803 x_structure_version_id := l_new_structure_version_id;
804 -- added for bug bug Fix: 4537865
805
806 select element_version_id into l_dummy from pa_proj_element_versions where element_version_id = x_structure_version_id;
807 -- error_msg('element_version_id = '||l_dummy);
808 -- error_msg('rowid = '||l_rowid);
809 -- Added by skannoji
810 -- added for doosan customer to add the planning transaction
811 IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(x_structure_version_id, 'WORKPLAN') = 'Y') THEN
812 /*Smukka Bug No. 3474141 Date 03/01/2004 */
813 /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block */
814 BEGIN
815 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
816 (
817 p_context => 'WORKPLAN'
818 ,p_project_id => l_project_id
819 ,p_struct_elem_version_id => x_structure_version_id
820 ,x_return_status => x_return_status
821 ,x_msg_count => x_msg_count
822 ,x_Msg_data => x_msg_data
823 );
824 EXCEPTION
825 WHEN OTHERS THEN
826 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
827 p_procedure_name => 'CREATE_STRUCTURE_VERSION',
828 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
829 RAISE FND_API.G_EXC_ERROR;
830 END;
831 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
832 RAISE FND_API.G_EXC_ERROR;
833 END IF;
834 END IF;
835 -- till here by skannoji
836
837 x_return_status := FND_API.G_RET_STS_SUCCESS;
838
839 IF (p_debug_mode = 'Y') THEN
840 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION end');
841 END IF;
842
843 EXCEPTION
844 WHEN FND_API.G_EXC_ERROR THEN
845 if p_commit = FND_API.G_TRUE THEN
846 rollback to CREATE_STRUC_VER_PVT;
847 end if;
848 x_msg_count := FND_MSG_PUB.count_msg;
849 x_return_status := FND_API.G_RET_STS_ERROR;
850 WHEN NO_DATA_FOUND THEN
851 if p_commit = FND_API.G_TRUE THEN
852 rollback to CREATE_STRUC_VER_PVT;
853 end if;
854 x_return_status := FND_API.G_RET_STS_ERROR;
855
856 WHEN OTHERS THEN
857 if p_commit = FND_API.G_TRUE THEN
858 rollback to CREATE_STRUC_VER_PVT;
859 end if;
860 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
861 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
862 p_procedure_name => 'CREATE_STRUCTURE_VERSION',
863 p_error_text => SUBSTRB(SQLERRM,1,240));
864 RAISE;
865 END CREATE_STRUCTURE_VERSION;
866
867
868 -- API name : Create_Structure_Version_Attr
869 -- Type : Private Procedure
870 -- Pre-reqs : None
871 -- Return Value : N/A
872 -- Parameters
873 -- p_api_version IN NUMBER := 1.0
874 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
875 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
876 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
877 -- p_validation_level IN VARCHAR2 := 100
878 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
879 -- p_debug_mode IN VARCHAR2 := 'N'
880 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
881 -- p_structure_version_id IN NUMBER
882 -- p_structure_version_name IN VARCHAR2
883 -- p_structure_version_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
884 -- p_effective_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
885 -- p_latest_eff_published_flag IN VARCHAR2 := 'N'
886 -- p_published_flag IN VARCHAR2 := 'N'
887 -- p_locked_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
888 -- p_struct_version_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
889 -- p_baseline_current_flag IN VARCHAR2 := 'N'
890 -- p_baseline_original_flag IN VARCHAR2 := 'N'
891 -- x_pev_structure_id OUT NUMBER
892 -- x_return_status OUT VARCHAR2
893 -- x_msg_count OUT NUMBER
894 -- x_msg_data OUT VARCHAR2
895 --
896 -- History
897 --
898 -- 25-JUN-01 HSIU -Created
899 -- 21-JUN-02 HSIU Added change_reason_code
900 --
901
902
903 procedure Create_Structure_Version_Attr
904 (
905 p_api_version IN NUMBER := 1.0
906 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
907 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
908 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
909 ,p_validation_level IN VARCHAR2 := 100
910 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
911 ,p_debug_mode IN VARCHAR2 := 'N'
912 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
913 ,p_structure_version_id IN NUMBER
914 ,p_structure_version_name IN VARCHAR2
915 ,p_structure_version_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
916 ,p_effective_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
917 ,p_latest_eff_published_flag IN VARCHAR2 := 'N'
918 ,p_published_flag IN VARCHAR2 := 'N'
919 ,p_locked_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
920 ,p_struct_version_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
921 ,p_baseline_current_flag IN VARCHAR2 := 'N'
922 ,p_baseline_original_flag IN VARCHAR2 := 'N'
923 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
924 ,x_pev_structure_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
925 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
926 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
927 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
928 )
929 IS
930
931 l_rowid VARCHAR2(255);
932 l_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE;
933 l_proj_element_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
934 l_return_status VARCHAR2(1);
935 l_msg_count NUMBER;
936 l_msg_data VARCHAR2(250);
937
938
939 l_status_code VARCHAR2(30) := 'STRUCTURE_WORKING';
940
941 l_latest_eff_published_flag VARCHAR2(1) := 'N';
942 l_published_date DATE := NULL;
943 l_published_person_id NUMBER;
944 l_effective_date DATE := NULL;
945 l_current_baseline_date DATE := NULL;
946 l_cur_baseline_person_id NUMBER;
947 l_current_flag VARCHAR2(1) := 'N';
948 l_original_baseline_date DATE := NULL;
949 l_orig_baseline_person_id NUMBER;
950 l_original_flag VARCHAR2(1) := 'N';
951 l_struc_ver_number NUMBER;
952 l_change_reason_code PA_PROJ_ELEM_VER_STRUCTURE.CHANGE_REASON_CODE%TYPE;
953 l_dummy VARCHAR2(1);
954 --rtarway, 3655698
955 l_structure_version_desc VARCHAR2(2000);
956
957 cursor get_person_id(p_user_id NUMBER) IS
958 select p.person_id
959 from per_all_people_f p, fnd_user f
960 where f.employee_id = p.person_id
961 and sysdate between p.effective_start_date and p.effective_end_date
962 and f.user_id = p_user_id;
963
964 cursor getids is select project_id, proj_element_id from pa_proj_element_versions
965 where element_version_id = p_structure_version_id;
966
967 cursor get_published_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
968 select nvl(max(version_number),0)+1
969 from pa_proj_elem_ver_structure
970 where project_id = c_project_id
971 and proj_element_id = c_proj_element_id
972 and status_code = 'STRUCTURE_PUBLISHED';
973
974 cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
975 select nvl(max(version_number),0)+1
976 from pa_proj_elem_ver_structure
977 where project_id = c_project_id
978 and proj_element_id = c_proj_element_id
979 and status_code <> 'STRUCTURE_PUBLISHED';
980
981 CURSOR check_financial_type(c_structure_id NUMBER) IS
982 select '1'
983 from pa_proj_structure_types p, pa_structure_types s
984 where s.structure_type_class_code IN ('FINANCIAL')
985 and s.structure_type_id = p.structure_type_id
986 and p.proj_element_id = c_structure_id;
987
988 CURSOR check_working_ver_exists(c_project_id NUMBER, c_structure_id NUMBER) IS
989 select '1'
990 from pa_proj_elem_ver_structure
991 where project_id = c_project_id
992 and proj_element_id = c_structure_id
993 and status_code <> 'STRUCTURE_PUBLISHED';
994
995 l_current_working_ver_flag VARCHAR2(1); --FPM bug 3301192
996
997 BEGIN
998 IF (p_debug_mode = 'Y') THEN
999 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION_ATTR begin');
1000 END IF;
1001
1002 IF (p_commit = FND_API.G_TRUE) THEN
1003 savepoint CREATE_STRUC_VER_ATTR_PVT;
1004 END IF;
1005
1006 IF (p_debug_mode = 'Y') THEN
1007 pa_debug.debug('Performing validations');
1008 END IF;
1009
1010 OPEN getids;
1011 FETCH getids into l_project_id, l_proj_element_id;
1012 IF (getids%NOTFOUND) THEN
1013 CLOSE getids;
1014 Raise NO_DATA_FOUND;
1015 END IF;
1016 CLOSE getids;
1017
1018
1019 --Check if name unique
1020 IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(p_structure_version_name,
1021 null,
1022 l_project_id,
1023 l_proj_element_id)) THEN
1024 PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
1025 x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
1026 RAISE FND_API.G_EXC_ERROR;
1027 END IF;
1028
1029 IF (p_published_flag = 'Y' or p_struct_version_status_code =
1030 'STRUCTURE_PUBLISHED') THEN
1031 --Creating a publish structure
1032
1033 --Get structure version number
1034 OPEN get_published_ver_num(l_project_id, l_proj_element_id);
1035 FETCH get_published_ver_num INTO l_struc_ver_number;
1036 CLOSE get_published_ver_num;
1037
1038 -- IF (p_published_flag = 'Y') THEN
1039 l_status_code := 'STRUCTURE_PUBLISHED';
1040 l_published_date := sysdate;
1041
1042 --get published person id
1043 open get_person_id(FND_GLOBAL.USER_ID);
1044 fetch get_person_id into l_published_person_id;
1045 IF get_person_id%NOTFOUND then
1046 l_published_person_id := -1;
1047 END IF;
1048 close get_person_id;
1049
1050 l_effective_date := l_published_date;
1051 l_latest_eff_published_flag := 'Y';
1052
1053 --set others with lastest_eff_published_flag to 'N'
1054 update pa_proj_elem_ver_structure
1055 set latest_eff_published_flag = 'N',
1056 record_version_number = record_version_number + 1
1057 where project_id = l_project_id
1058 and proj_element_id = l_proj_element_id
1059 and latest_eff_published_flag = 'Y';
1060
1061 IF (p_baseline_current_flag = 'Y') THEN
1062 --set date, person_id, flag
1063 l_current_baseline_date := l_published_date;
1064 l_current_flag := 'Y';
1065 l_cur_baseline_person_id := l_published_person_id;
1066
1067 --clear flags in other versions.
1068 update pa_proj_elem_ver_structure
1069 set current_flag = 'N',
1070 current_baseline_date = NULL,
1071 current_baseline_person_id = NULL,
1072 record_version_number = record_version_number + 1
1073 where project_id = l_project_id
1074 and proj_element_id = l_proj_element_id
1075 and current_flag = 'Y';
1076
1077
1078 --Call baseline_structure_version API if workplan
1079 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
1080 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
1081 p_commit => FND_API.G_FALSE,
1082 p_structure_version_id => p_structure_version_id,
1083 x_return_status => l_return_status,
1084 x_msg_count => l_msg_count,
1085 x_msg_data => l_msg_data);
1086
1087 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1088 x_msg_count := FND_MSG_PUB.count_msg;
1089 if x_msg_count = 1 then
1090 x_msg_data := l_msg_data;
1091 end if;
1092 raise FND_API.G_EXC_ERROR;
1093 end if;
1094
1095 END IF;
1096
1097
1098
1099
1100 END IF;
1101 IF (p_baseline_original_flag = 'Y') THEN
1102 --set date, person_id, flag
1103 l_original_baseline_date := l_published_date;
1104 l_original_flag := 'Y';
1105 l_orig_baseline_person_id := l_published_person_id;
1106
1107 --clear flags in other versions.
1108 update pa_proj_elem_ver_structure
1109 set original_flag = 'N',
1110 original_baseline_date = NULL,
1111 original_baseline_person_id = NULL,
1112 record_version_number = record_version_number + 1
1113 where project_id = l_project_id
1114 and proj_element_id = l_proj_element_id
1115 and original_flag = 'Y';
1116
1117 END IF;
1118
1119 /*
1120 ELSE
1121 l_status_code := p_struct_version_status_code;
1122 l_current_flag := p_baseline_current_flag;
1123 l_original_flag := p_baseline_original_flag;
1124 l_latest_eff_published_flag := p_latest_eff_published_flag;
1125 l_published_date := sysdate;
1126 l_published_person_id := NULL;
1127 l_effective_date := sysdate;
1128
1129 IF (l_status_code = 'STRUCTURE_PUBLISHED') THEN
1130 open get_person_id(FND_GLOBAL.USER_ID);
1131 fetch get_person_id into l_published_person_id;
1132 IF get_person_id%NOTFOUND then
1133 l_published_person_id := NULL;
1134 END IF;
1135 close get_person_id;
1136
1137 --set others with lastest_eff_published_flag to 'N'
1138 update pa_proj_elem_ver_structure
1139 set latest_eff_published_flag = 'N',
1140 record_version_number = record_version_number + 1
1141 where project_id = l_project_id
1142 and proj_element_id = l_proj_element_id
1143 and latest_eff_published_flag = 'Y';
1144
1145 IF (p_baseline_current_flag = 'Y') THEN
1146 --set date, person_id, flag
1147 l_current_baseline_date := l_published_date;
1148 l_current_flag := 'Y';
1149 l_cur_baseline_person_id := l_published_person_id;
1150
1151 --clear flags in other versions.
1152 update pa_proj_elem_ver_structure
1153 set current_flag = 'N',
1154 current_baseline_date = NULL,
1155 current_baseline_person_id = NULL,
1156 record_version_number = record_version_number + 1
1157 where project_id = l_project_id
1158 and proj_element_id = l_proj_element_id
1159 and current_flag = 'Y';
1160
1161
1162 --Call baseline_structure_version API if workplan
1163 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
1164 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
1165 p_commit => FND_API.G_FALSE,
1166 p_structure_version_id => p_structure_version_id,
1167 x_return_status => l_return_status,
1168 x_msg_count => l_msg_count,
1169 x_msg_data => l_msg_data);
1170
1171 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1172 x_msg_count := FND_MSG_PUB.count_msg;
1173 if x_msg_count = 1 then
1174 x_msg_data := l_msg_data;
1175 end if;
1176 raise FND_API.G_EXC_ERROR;
1177 end if;
1178
1179 END IF;
1180 END IF;
1181
1182
1183 END IF;
1184 END IF;
1185 */
1186 ELSE
1187 --Creating a non-published structure
1188
1189 --Check if this structure contains financial structure type
1190 OPEN check_financial_type(l_proj_element_id);
1191 FETCH check_financial_type INTO l_dummy;
1192 --If not found, then this is not a financial structure. Continue.
1193 IF check_financial_type%FOUND THEN
1194
1195 --this is a financial structure. Check if there is a non published version
1196 OPEN check_working_ver_exists(l_project_id, l_proj_element_id);
1197 FETCH check_working_ver_exists into l_dummy;
1198 If check_working_ver_exists%FOUND THEN
1199
1200 --another non-published version exists for structure with type = costing/billing.
1201 --Error.
1202 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_ONE_WORK_VER_ALLOWED');
1203 x_msg_data := 'PA_PS_ONE_WORK_VER_ALLOWED';
1204 RAISE FND_API.G_EXC_ERROR;
1205 END IF;
1206 CLOSE check_working_ver_exists;
1207 END IF;
1208
1209 CLOSE check_financial_type;
1210
1211
1212 --Get structure version number
1213 OPEN get_working_ver_num(l_project_id, l_proj_element_id);
1214 FETCH get_working_ver_num INTO l_struc_ver_number;
1215 CLOSE get_working_ver_num;
1216 l_status_code := 'STRUCTURE_WORKING';
1217 END IF;
1218
1219 --Check if there is any error.
1220 l_msg_count := FND_MSG_PUB.count_msg;
1221 IF l_msg_count > 0 THEN
1222 x_msg_count := l_msg_count;
1223 IF x_msg_count = 1 THEN
1224 x_msg_data := l_msg_data;
1225 END IF;
1226 RAISE FND_API.G_EXC_ERROR;
1227 END IF;
1228
1229 IF (p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1230 l_change_reason_code := NULL;
1231 ELSE
1232 l_change_reason_code := p_change_reason_code;
1233 END IF;
1234
1235
1236 --FPM bug 3301192
1237 --Find out if there is already a working version( a structure with status other PUBLISHED is a working version)?
1238 OPEN check_working_ver_exists(l_project_id, l_proj_element_id);
1239 FETCH check_working_ver_exists INTO l_current_working_ver_flag;
1240 IF check_working_ver_exists%FOUND
1241 THEN
1242 l_current_working_ver_flag := 'N';
1243 ELSE
1244 l_current_working_ver_flag := 'Y';
1245 END IF;
1246 CLOSE check_working_ver_exists;
1247 --End FPM bug 3301192
1248
1249 --rtarway,3655698
1250 IF ( p_structure_version_desc = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1251 THEN
1252 l_structure_version_desc := null;
1253 ELSE
1254 l_structure_version_desc := p_structure_version_desc;
1255 end if;
1256
1257 PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
1258 X_ROWID => l_rowid
1259 , X_PEV_STRUCTURE_ID => x_pev_structure_id
1260 , X_ELEMENT_VERSION_ID => p_structure_version_id
1261 , X_VERSION_NUMBER => l_struc_ver_number
1262 , X_NAME => p_structure_version_name
1263 , X_PROJECT_ID => l_project_id
1264 , X_PROJ_ELEMENT_ID => l_proj_element_id
1265 , X_DESCRIPTION => l_structure_version_desc -- rtarway, 3655698
1266 , X_EFFECTIVE_DATE => l_effective_date
1267 , X_PUBLISHED_DATE => l_published_date
1268 , X_PUBLISHED_BY => l_published_person_id
1269 , X_CURRENT_BASELINE_DATE => l_current_baseline_date
1270 , X_CURRENT_BASELINE_FLAG => l_current_flag
1271 , X_CURRENT_BASELINE_BY => l_cur_baseline_person_id
1272 , X_ORIGINAL_BASELINE_DATE => l_original_baseline_date
1273 , X_ORIGINAL_BASELINE_FLAG => l_original_flag
1274 , X_ORIGINAL_BASELINE_BY => l_orig_baseline_person_id
1275 , X_LOCK_STATUS_CODE => NULL
1276 , X_LOCKED_BY => NULL
1277 , X_LOCKED_DATE => NULL
1278 , X_STATUS_CODE => l_status_code
1279 , X_WF_STATUS_CODE => NULL
1280 , X_LATEST_EFF_PUBLISHED_FLAG => l_latest_eff_published_flag
1281 , X_CHANGE_REASON_CODE => l_change_reason_code
1282 , X_RECORD_VERSION_NUMBER => 1
1283 , X_CURRENT_WORKING_FLAG => l_current_working_ver_flag --FPM bug 3301192
1284 , X_SOURCE_OBJECT_ID => l_project_id
1285 , X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
1286 );
1287
1288 --bug 3010538
1289 --set update flag to Y if weighting basis is DURATION or EFFORT
1290 /* --not necessary when empty
1291 IF (PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_project_id) <> 'MANUAL') THEN
1292 --need to set update flag to Y
1293 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
1294 p_project_id => l_project_id,
1295 p_structure_version_id => p_structure_version_id,
1296 p_update_wbs_flag => 'Y',
1297 x_return_status => l_return_status,
1298 x_msg_count => l_msg_count,
1299 x_msg_data => l_msg_data
1300 );
1301 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1302 x_msg_count := FND_MSG_PUB.count_msg;
1303 if x_msg_count = 1 then
1304 x_msg_data := l_msg_data;
1305 end if;
1306 raise FND_API.G_EXC_ERROR;
1307 end if;
1308 END IF;
1309 */
1310 --end bug 3010538
1311
1312 x_return_status := FND_API.G_RET_STS_SUCCESS;
1313
1314 IF (p_debug_mode = 'Y') THEN
1315 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION_ATTR end');
1316 END IF;
1317
1318 EXCEPTION
1319 WHEN FND_API.G_EXC_ERROR THEN
1320 if p_commit = FND_API.G_TRUE THEN
1321 rollback to CREATE_STRUC_VER_ATTR_PVT;
1322 end if;
1323 x_msg_count := FND_MSG_PUB.count_msg;
1324 x_return_status := FND_API.G_RET_STS_ERROR;
1325 WHEN NO_DATA_FOUND THEN
1326 if p_commit = FND_API.G_TRUE THEN
1327 rollback to CREATE_STRUC_VER_ATTR_PVT;
1328 end if;
1329 x_return_status := FND_API.G_RET_STS_ERROR;
1330 WHEN OTHERS THEN
1331 if p_commit = FND_API.G_TRUE THEN
1332 rollback to CREATE_STRUC_VER_ATTR_PVT;
1333 end if;
1334 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1335 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
1336 p_procedure_name => 'CREATE_STRUCTURE_VERSION_ATTR',
1337 p_error_text => SUBSTRB(SQLERRM,1,240));
1338 RAISE;
1339 END CREATE_STRUCTURE_VERSION_ATTR;
1340
1341
1342 -- API name : Update_Structure
1343 -- Type : Private Procedure
1344 -- Pre-reqs : None
1345 -- Return Value : N/A
1346 -- Parameters
1347 -- p_api_version IN NUMBER := 1.0
1348 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
1349 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
1350 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
1351 -- p_validation_level IN VARCHAR2 := 100
1352 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
1353 -- p_debug_mode IN VARCHAR2 := 'N'
1354 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1355 -- p_structure_id IN NUMBER
1356 -- p_structure_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1357 -- p_structure_name IN VARCHAR2
1358 -- p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1359 -- p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1360 -- p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1361 -- p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1362 -- p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1363 -- p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1364 -- p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1365 -- p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1366 -- p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1367 -- p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1368 -- p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1369 -- p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1370 -- p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1371 -- p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1372 -- p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1373 -- p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1374 -- p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1375 -- p_record_version_number IN NUMBER
1376 -- x_return_status OUT VARCHAR2
1377 -- x_msg_count OUT NUMBER
1378 -- x_msg_data OUT VARCHAR2
1379 --
1380 -- History
1381 --
1382 -- 25-JUN-01 HSIU -Created
1383 --
1384 --
1385
1386
1387 procedure Update_Structure
1388 (
1389 p_api_version IN NUMBER := 1.0
1390 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
1391 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
1392 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
1393 ,p_validation_level IN VARCHAR2 := 100
1394 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
1395 ,p_debug_mode IN VARCHAR2 := 'N'
1396 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1397 ,p_structure_id IN NUMBER
1398 ,p_structure_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1399 ,p_structure_name IN VARCHAR2
1400 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1401 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1402 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1403 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1404 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1405 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1406 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1407 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1408 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1409 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1410 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1411 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1412 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1413 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1414 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1415 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1416 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1417 ,p_record_version_number IN NUMBER
1418 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1419 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
1420 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1421 )
1422 IS
1423
1424 l_rowid VARCHAR2(255);
1425 l_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE;
1426 l_proj_element_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1427 l_msg_count NUMBER;
1428 l_msg_data VARCHAR2(250);
1429
1430
1431 l_element_number PA_PROJ_ELEMENTS.element_number%TYPE;
1432 l_name PA_PROJ_ELEMENTS.name%TYPE;
1433 l_description PA_PROJ_ELEMENTS.description%TYPE;
1434 l_attribute_category VARCHAR2(30);
1435 l_attribute1 VARCHAR2(150);
1436 l_attribute2 VARCHAR2(150);
1437 l_attribute3 VARCHAR2(150);
1438 l_attribute4 VARCHAR2(150);
1439 l_attribute5 VARCHAR2(150);
1440 l_attribute6 VARCHAR2(150);
1441 l_attribute7 VARCHAR2(150);
1442 l_attribute8 VARCHAR2(150);
1443 l_attribute9 VARCHAR2(150);
1444 l_attribute10 VARCHAR2(150);
1445 l_attribute11 VARCHAR2(150);
1446 l_attribute12 VARCHAR2(150);
1447 l_attribute13 VARCHAR2(150);
1448 l_attribute14 VARCHAR2(150);
1449 l_attribute15 VARCHAR2(150);
1450
1451
1452 CURSOR get_struc IS
1453 select rowid,
1454 project_id,
1455 element_number,
1456 name,
1457 description,
1458 attribute_category,
1459 attribute1,
1460 attribute2,
1461 attribute3,
1462 attribute4,
1463 attribute5,
1464 attribute6,
1465 attribute7,
1466 attribute8,
1467 attribute9,
1468 attribute10,
1469 attribute11,
1470 attribute12,
1471 attribute13,
1472 attribute14,
1473 attribute15
1474 from pa_proj_elements
1475 where proj_element_id = p_structure_id;
1476 BEGIN
1477 IF (p_debug_mode = 'Y') THEN
1478 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE begin');
1479 END IF;
1480
1481 IF (p_commit = FND_API.G_TRUE) then
1482 savepoint update_structure_pvt;
1483 END IF;
1484
1485 --Get existing values.
1486 OPEN get_struc;
1487 FETCH get_struc into l_rowid,
1488 l_project_id,
1489 l_element_number,
1490 l_name,
1491 l_description,
1492 l_attribute_category,
1493 l_attribute1,
1494 l_attribute2,
1495 l_attribute3,
1496 l_attribute4,
1497 l_attribute5,
1498 l_attribute6,
1499 l_attribute7,
1500 l_attribute8,
1501 l_attribute9,
1502 l_attribute10,
1503 l_attribute11,
1504 l_attribute12,
1505 l_attribute13,
1506 l_attribute14,
1507 l_attribute15;
1508 IF (get_struc%NOTFOUND) THEN
1509 PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_NOT_EXIST');
1510 x_msg_data := 'PA_PS_STRUC_NOT_EXIST';
1511 RAISE FND_API.G_EXC_ERROR;
1512 END IF;
1513 CLOSE get_struc;
1514
1515
1516 --Check if there is any error.
1517 l_msg_count := FND_MSG_PUB.count_msg;
1518 IF l_msg_count > 0 THEN
1519 x_msg_count := l_msg_count;
1520 IF x_msg_count = 1 THEN
1521 x_msg_data := l_msg_data;
1522 END IF;
1523 RAISE FND_API.G_EXC_ERROR;
1524 END IF;
1525
1526 IF (p_debug_mode = 'Y') THEN
1527 pa_debug.debug('l_name = '||l_name);
1528 pa_debug.debug('p_structure_name = '||p_structure_name);
1529 END IF;
1530
1531 --Check if structure name is unique, if changed.
1532 IF (l_name <> p_structure_name) then
1533 IF (p_debug_mode = 'Y') THEN
1534 pa_debug.debug('different!!');
1535 END IF;
1536 IF ('Y' <> pa_project_structure_utils.Check_Structure_Name_Unique(p_structure_name,
1537 p_structure_id,
1538 l_project_id)) THEN
1539 --name not unique.
1540 PA_UTILS.ADD_MESSAGE('PA', 'PS_STRUC_NAME_UNIQUE');
1541 x_msg_data := 'PA_PS_STRUC_NAME_UNIQUE';
1542 RAISE FND_API.G_EXC_ERROR;
1543 ELSE
1544 l_name := p_structure_name;
1545 END IF;
1546 END IF;
1547
1548 --Replace values, if entered.
1549 IF (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL) THEN
1550 l_description := p_description;
1551 END IF;
1552 IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL) THEN
1553 l_attribute_category := p_attribute_category;
1554 END IF;
1555 IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN
1556 l_attribute1 := p_attribute1;
1557 END IF;
1558 IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN
1559 l_attribute2 := p_attribute2;
1560 END IF;
1561 IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN
1562 l_attribute3 := p_attribute3;
1563 END IF;
1564 IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN
1565 l_attribute4 := p_attribute4;
1566 END IF;
1567 IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN
1568 l_attribute5 := p_attribute5;
1569 END IF;
1570 IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN
1571 l_attribute6 := p_attribute6;
1572 END IF;
1573 IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN
1574 l_attribute7 := p_attribute7;
1575 END IF;
1576 IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN
1577 l_attribute8 := p_attribute8;
1578 END IF;
1579 IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN
1580 l_attribute9 := p_attribute9;
1581 END IF;
1582 IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN
1583 l_attribute10 := p_attribute10;
1584 END IF;
1585 IF (p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute11 IS NULL) THEN
1586 l_attribute11 := p_attribute11;
1587 END IF;
1588 IF (p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute12 IS NULL) THEN
1589 l_attribute12 := p_attribute12;
1590 END IF;
1591 IF (p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute13 IS NULL) THEN
1592 l_attribute13 := p_attribute13;
1593 END IF;
1594 IF (p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute14 IS NULL) THEN
1595 l_attribute14 := p_attribute14;
1596 END IF;
1597 IF (p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute15 IS NULL) THEN
1598 l_attribute15 := p_attribute15;
1599 END IF;
1600
1601 --Check if there is any error.
1602 l_msg_count := FND_MSG_PUB.count_msg;
1603 IF l_msg_count > 0 THEN
1604 x_msg_count := l_msg_count;
1605 IF x_msg_count = 1 THEN
1606 x_msg_data := l_msg_data;
1607 END IF;
1608 RAISE FND_API.G_EXC_ERROR;
1609 END IF;
1610
1611 PA_PROJ_ELEMENTS_PKG.UPDATE_ROW(
1612 X_ROW_ID => l_rowid
1613 ,X_PROJ_ELEMENT_ID => p_structure_id
1614 ,X_PROJECT_ID => l_project_id
1615 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
1616 ,X_ELEMENT_NUMBER => to_char(p_structure_id)
1617 ,X_NAME => l_name
1618 ,X_DESCRIPTION => l_description
1619 ,X_STATUS_CODE => NULL
1620 ,X_WF_STATUS_CODE => NULL
1621 ,X_PM_PRODUCT_CODE => NULL
1622 ,X_PM_TASK_REFERENCE => NULL
1623 ,X_CLOSED_DATE => NULL
1624 ,X_LOCATION_ID => NULL
1625 ,X_MANAGER_PERSON_ID => NULL
1626 ,X_CARRYING_OUT_ORGANIZATION_ID => NULL
1627 ,X_TYPE_ID => NULL
1628 ,X_PRIORITY_CODE => NULL
1629 ,X_INC_PROJ_PROGRESS_FLAG => NULL
1630 ,X_RECORD_VERSION_NUMBER => p_record_version_number
1631 ,X_REQUEST_ID => NULL
1632 ,X_PROGRAM_APPLICATION_ID => NULL
1633 ,X_PROGRAM_ID => NULL
1634 ,X_PROGRAM_UPDATE_DATE => NULL
1635 ,X_ATTRIBUTE_CATEGORY => l_attribute_category
1636 ,X_ATTRIBUTE1 => l_attribute1
1637 ,X_ATTRIBUTE2 => l_attribute2
1638 ,X_ATTRIBUTE3 => l_attribute3
1639 ,X_ATTRIBUTE4 => l_attribute4
1640 ,X_ATTRIBUTE5 => l_attribute5
1641 ,X_ATTRIBUTE6 => l_attribute6
1642 ,X_ATTRIBUTE7 => l_attribute7
1643 ,X_ATTRIBUTE8 => l_attribute8
1644 ,X_ATTRIBUTE9 => l_attribute9
1645 ,X_ATTRIBUTE10 => l_attribute10
1646 ,X_ATTRIBUTE11 => l_attribute11
1647 ,X_ATTRIBUTE12 => l_attribute12
1648 ,X_ATTRIBUTE13 => l_attribute13
1649 ,X_ATTRIBUTE14 => l_attribute14
1650 ,X_ATTRIBUTE15 => l_attribute15
1651 ,X_TASK_WEIGHTING_DERIV_CODE => NULL
1652 ,X_WORK_ITEM_CODE => NULL
1653 ,X_UOM_CODE => NULL
1654 ,X_WQ_ACTUAL_ENTRY_CODE => NULL
1655 ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
1656 ,X_PARENT_STRUCTURE_ID => NULL
1657 ,X_PHASE_CODE => NULL
1658 ,X_PHASE_VERSION_ID => NULL
1659 );
1660
1661 x_return_status := FND_API.G_RET_STS_SUCCESS;
1662
1663 IF (p_debug_mode = 'Y') THEN
1664 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE end');
1665 END IF;
1666
1667 EXCEPTION
1668 when FND_API.G_EXC_ERROR then
1669 if p_commit = FND_API.G_TRUE then
1670 rollback to update_structure_pvt;
1671 end if;
1672 x_return_status := FND_API.G_RET_STS_ERROR;
1673 when others then
1674 if p_commit = FND_API.G_TRUE then
1675 rollback to update_structure_pvt;
1676 end if;
1677 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1678 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
1679 p_procedure_name => 'UPDATE_STRUCTURE',
1680 p_error_text => SUBSTRB(SQLERRM,1,240));
1681 RAISE;
1682 END update_structure;
1683
1684
1685
1686 -- API name : Update_Structure_Version_Attr
1687 -- Type : Private Procedure
1688 -- Pre-reqs : None
1689 -- Return Value : N/A
1690 -- Parameters
1691 -- p_api_version IN NUMBER := 1.0
1692 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
1693 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
1694 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
1695 -- p_validation_level IN VARCHAR2 := 100
1696 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
1697 -- p_debug_mode IN VARCHAR2 := 'N'
1698 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1699 -- p_pev_structure_id IN NUMBER
1700 -- p_structure_version_name IN VARCHAR2
1701 -- p_structure_version_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1702 -- p_effective_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1703 -- p_latest_eff_published_flag IN VARCHAR2 := 'N'
1704 -- p_locked_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1705 -- p_struct_version_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1706 -- p_baseline_current_flag IN VARCHAR2 := 'N'
1707 -- p_baseline_original_flag IN VARCHAR2 := 'N'
1708 -- p_record_version_number IN NUMBER
1709 -- x_return_status OUT VARCHAR2
1710 -- x_msg_count OUT NUMBER
1711 -- x_msg_data OUT VARCHAR2
1712 --
1713 -- History
1714 --
1715 -- 25-JUN-01 HSIU -Created
1716 -- 21-JUN-02 HSIU Added change_reason_code
1717 --
1718
1719
1720 procedure Update_Structure_Version_Attr
1721 (
1722 p_api_version IN NUMBER := 1.0
1723 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
1724 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
1725 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
1726 ,p_validation_level IN VARCHAR2 := 100
1727 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
1728 ,p_debug_mode IN VARCHAR2 := 'N'
1729 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1730 ,p_pev_structure_id IN NUMBER
1731 ,p_structure_version_name IN VARCHAR2
1732 ,p_structure_version_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1733 ,p_effective_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1734 ,p_latest_eff_published_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1735 ,p_locked_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1736 ,p_struct_version_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1737 ,p_baseline_current_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1738 ,p_baseline_original_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1739 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1740 ,p_record_version_number IN NUMBER
1741 --FP M changes bug 3301192
1742 ,p_current_working_ver_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1743 --end FP M changes bug 3301192
1744 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1745 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
1746 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1747 )
1748 IS
1749
1750 l_rowid VARCHAR2(255);
1751 l_structure_version_id PA_PROJ_ELEM_VER_STRUCTURE.ELEMENT_VERSION_ID%TYPE;
1752 l_project_id PA_PROJ_ELEM_VER_STRUCTURE.PROJECT_ID%TYPE;
1753 l_proj_element_id PA_PROJ_ELEM_VER_STRUCTURE.PROJ_ELEMENT_ID%TYPE;
1754 l_version_number PA_PROJ_ELEM_VER_STRUCTURE.VERSION_NUMBER%TYPE;
1755 l_name PA_PROJ_ELEM_VER_STRUCTURE.NAME%TYPE;
1756 l_description PA_PROJ_ELEM_VER_STRUCTURE.DESCRIPTION%TYPE;
1757 l_effective_date PA_PROJ_ELEM_VER_STRUCTURE.effective_date%TYPE;
1758 l_published_date PA_PROJ_ELEM_VER_STRUCTURE.published_date%TYPE;
1759 l_published_by_person_id PA_PROJ_ELEM_VER_STRUCTURE.published_by_person_id%TYPE;
1760 l_current_baseline_date PA_PROJ_ELEM_VER_STRUCTURE.current_baseline_date%TYPE;
1761 l_current_flag PA_PROJ_ELEM_VER_STRUCTURE.current_flag%TYPE;
1762 l_current_baseline_person_id PA_PROJ_ELEM_VER_STRUCTURE.current_baseline_person_id%TYPE;
1763 l_original_baseline_date PA_PROJ_ELEM_VER_STRUCTURE.original_baseline_date%TYPE;
1764 l_original_flag PA_PROJ_ELEM_VER_STRUCTURE.original_flag%TYPE;
1765 l_original_baseline_person_id PA_PROJ_ELEM_VER_STRUCTURE.original_baseline_person_id%TYPE;
1766 l_lock_status_code PA_PROJ_ELEM_VER_STRUCTURE.lock_status_code%TYPE;
1767 l_locked_by_person_id PA_PROJ_ELEM_VER_STRUCTURE.locked_by_person_id%TYPE;
1768 l_locked_date PA_PROJ_ELEM_VER_STRUCTURE.locked_date%TYPE;
1769 l_status_code PA_PROJ_ELEM_VER_STRUCTURE.status_code%TYPE;
1770 l_wf_status_code PA_PROJ_ELEM_VER_STRUCTURE.wf_status_code%TYPE;
1771 l_latest_eff_published_flag PA_PROJ_ELEM_VER_STRUCTURE.latest_eff_published_flag%TYPE;
1772 l_pm_source_code PA_PROJ_ELEM_VER_STRUCTURE.pm_source_code%TYPE;
1773 l_pm_source_reference PA_PROJ_ELEM_VER_STRUCTURE.pm_source_reference%TYPE;
1774 l_change_reason_code VARCHAR2(30);
1775
1776
1777 l_return_status VARCHAR2(1);
1778 l_msg_count NUMBER;
1779 l_msg_count_int NUMBER; /*bug# 6414944*/
1780 l_msg_data VARCHAR2(250);
1781 l_get_lock VARCHAR2(1);
1782 l_person_id NUMBER;
1783
1784 cursor get_person_id(p_user_id NUMBER) IS
1785 select p.person_id
1786 from per_all_people_f p, fnd_user f
1787 where f.employee_id = p.person_id
1788 and sysdate between p.effective_start_date and p.effective_end_date
1789 and f.user_id = p_user_id;
1790
1791
1792 cursor getids is select rowid,
1793 element_version_id,
1794 version_number,
1795 name,
1796 project_id,
1797 proj_element_id,
1798 description,
1799 effective_date,
1800 published_date,
1801 published_by_person_id,
1802 CURRENT_BASELINE_DATE,
1803 CURRENT_FLAG,
1804 CURRENT_BASELINE_PERSON_ID,
1805 ORIGINAL_BASELINE_DATE,
1806 ORIGINAL_FLAG,
1807 ORIGINAL_BASELINE_PERSON_ID,
1808 LOCK_STATUS_CODE,
1809 LOCKED_BY_PERSON_ID,
1810 LOCKED_DATE,
1811 STATUS_CODE,
1812 WF_STATUS_CODE,
1813 LATEST_EFF_PUBLISHED_FLAG,
1814 PM_SOURCE_CODE,
1815 PM_SOURCE_REFERENCE,
1816 CHANGE_REASON_CODE,
1817 CURRENT_WORKING_FLAG
1818 from pa_proj_elem_ver_structure
1819 where pev_structure_id = p_pev_structure_id;
1820
1821 l_current_working_ver_flag VARCHAR2(1); --FPM bug 3301192
1822
1823 -- Begin Fix For Bug # 4297556.
1824
1825 cursor cur_relationship_ids(c_structure_version_id NUMBER, c_project_id NUMBER)
1826 is select por.object_relationship_id, por.record_version_number
1827 , por2.object_id_from1, por.object_id_from2, por.comments, ppa.name -- Bug # 4556844.
1828 from pa_object_relationships por, pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
1829 , pa_projects_all ppa, pa_object_relationships por2 -- Bug # 4556844.
1830 where ppevs.element_version_id = ppev.parent_structure_version_id
1831 and ppevs.project_id = ppev.project_id
1832 and ppev.element_version_id = por.object_id_to1
1833 and ppev.project_id = por.object_id_to2
1834 and ppa.project_id = ppev.project_id -- Bug # 4556844.
1835 and por.relationship_type = 'LW'
1836 and ppevs.element_version_id <> c_structure_version_id
1837 and ppevs.project_id = c_project_id
1838 and ppevs.status_code = 'STRUCTURE_WORKING'
1839 and por2.object_id_to1 = por.object_id_from1 -- Bug # 4556844.
1840 and por2.object_type_from in ('PA_STRUCTURES','PA_TASKS') --Bug 6429275
1841 and por2.object_type_to = 'PA_TASKS' -- Bug 6429275
1842 and por2.relationship_type = 'S'; -- Bug # 4556844.
1843
1844
1845 cur_rel_ids_rec cur_relationship_ids%rowtype;
1846
1847 -- End Fix For Bug # 4297556.
1848
1849 BEGIN
1850 l_msg_count_int := FND_MSG_PUB.count_msg; /*Bug#6414944*/
1851 IF (p_debug_mode = 'Y') THEN
1852 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE_VERSION_ATTR begin');
1853 END IF;
1854
1855 IF (p_commit = FND_API.G_TRUE) THEN
1856 savepoint UPDATE_STRUC_VER_ATTR_PVT;
1857 END IF;
1858
1859 IF (p_debug_mode = 'Y') THEN
1860 pa_debug.debug('Performing validations');
1861 END IF;
1862
1863 OPEN getids;
1864 FETCH getids into l_rowid,
1865 l_structure_version_id,
1866 l_version_number,
1867 l_name,
1868 l_project_id,
1869 l_proj_element_id,
1870 l_description,
1871 l_effective_date,
1872 l_published_date,
1873 l_published_by_person_id,
1874 l_current_baseline_date,
1875 l_current_flag,
1876 l_current_baseline_person_id,
1877 l_original_baseline_date,
1878 l_original_flag,
1879 l_original_baseline_person_id,
1880 l_lock_status_code,
1881 l_locked_by_person_id,
1882 l_locked_date,
1883 l_status_code,
1884 l_wf_status_code,
1885 l_latest_eff_published_flag,
1886 l_pm_source_code,
1887 l_pm_source_reference,
1888 l_change_reason_code,
1889 l_current_working_ver_flag;
1890
1891 IF (getids%NOTFOUND) THEN
1892 CLOSE getids;
1893 Raise NO_DATA_FOUND;
1894 END IF;
1895 CLOSE getids;
1896
1897 --get person id
1898 open get_person_id(FND_GLOBAL.USER_ID);
1899 fetch get_person_id into l_person_id;
1900 IF get_person_id%NOTFOUND then
1901 l_person_id := -1;
1902 END IF;
1903 close get_person_id;
1904
1905 IF p_calling_module <> 'PA_UPD_WBS_ATTR' AND p_calling_module <> 'PA_UPD_WBS_ATTR_UN'/*bug# 4582750 ,Bug#6414944*/
1906 THEN
1907 --bug 3940853
1908 DECLARE
1909 l_rowid VARCHAR2(255);
1910 BEGIN
1911 select rowid into l_rowid
1912 from pa_proj_elem_ver_structure
1913 where pev_structure_id = p_pev_structure_id
1914 and record_version_number = p_record_version_number
1915 for update NOWAIT;
1916 EXCEPTION
1917 when TIMEOUT_ON_RESOURCE then
1918 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1919 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1920 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1921 when NO_DATA_FOUND then
1922 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1923 p_msg_name => 'PA_XC_RECORD_CHANGED');
1924 l_msg_data := 'PA_XC_RECORD_CHANGED';
1925 when OTHERS then
1926 if SQLCODE = -54 then
1927 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1928 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1929 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1930 else
1931 raise;
1932 end if;
1933 END;
1934
1935 x_msg_count := FND_MSG_PUB.count_msg;
1936 if x_msg_count > 0 then
1937 x_msg_data := l_msg_data;
1938 raise FND_API.G_EXC_ERROR;
1939 end if;
1940 --end bug 3940853
1941 END IF; --p_calling_module <> 'PA_UPD_WBS_ATTR'
1942
1943 --Check if published
1944 --hsiu
1945 --changed for versioning
1946 -- IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published(l_project_id,
1947 -- l_structure_version_id)) THEN
1948 IF ('N' = PA_PROJECT_STRUCTURE_UTILS.check_edit_wp_ok(l_project_id,
1949 l_structure_version_id)) THEN
1950 --If published
1951 IF (p_debug_mode = 'Y') THEN
1952 pa_debug.debug('Published');
1953 END IF;
1954
1955 --if set current baseline flag
1956 IF (p_baseline_current_flag = 'Y') THEN
1957 l_current_flag := 'Y';
1958 l_current_baseline_date := sysdate;
1959 l_current_baseline_person_id := l_person_id;
1960
1961 --clear other flags
1962 update pa_proj_elem_ver_structure
1963 set current_flag = 'N',
1964 current_baseline_date = NULL,
1965 current_baseline_person_id = NULL,
1966 record_version_number = record_version_number + 1
1967 where project_id = l_project_id
1968 and proj_element_id = l_proj_element_id
1969 and pev_structure_id <> p_pev_structure_id
1970 and current_flag = 'Y';
1971
1972 --Call baseline_structure_version API if workplan
1973 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id, 'WORKPLAN') = 'Y') THEN
1974 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
1975 p_commit => FND_API.G_FALSE,
1976 p_structure_version_id => l_structure_version_id,
1977 x_return_status => l_return_status,
1978 x_msg_count => l_msg_count,
1979 x_msg_data => l_msg_data);
1980
1981 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1982 x_msg_count := FND_MSG_PUB.count_msg;
1983 if x_msg_count = 1 then
1984 x_msg_data := l_msg_data;
1985 end if;
1986 raise FND_API.G_EXC_ERROR;
1987 end if;
1988
1989 END IF;
1990
1991 END IF;
1992
1993 --if set original baseline flag
1994 IF (p_baseline_original_flag = 'Y') THEN
1995 l_original_flag := 'Y';
1996 l_original_baseline_date := sysdate;
1997 l_original_baseline_person_id := l_person_id;
1998
1999 --clear other flags.
2000 update pa_proj_elem_ver_structure
2001 set original_flag = 'N',
2002 original_baseline_date = NULL,
2003 original_baseline_person_id = NULL,
2004 record_version_number = record_version_number + 1
2005 where project_id = l_project_id
2006 and proj_element_id = l_proj_element_id
2007 and pev_structure_id <> p_pev_structure_id
2008 and original_flag = 'Y';
2009
2010 END IF;
2011 END IF;
2012 --hsiu
2013 --changed for versioning
2014 -- ELSE
2015 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_edit_wp_ok(l_project_id,
2016 l_structure_version_id)) THEN
2017 --If not published
2018 IF (p_debug_mode = 'Y') THEN
2019 pa_debug.debug('Not Published');
2020 END IF;
2021
2022 --Check lock
2023 l_get_lock := PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,
2024 l_structure_version_id);
2025
2026 IF (p_debug_mode = 'Y') THEN
2027 pa_debug.debug('l_get_lock value = '||l_get_lock);
2028 END IF;
2029
2030 --bug 3071008
2031 IF (l_get_lock <> 'Y') THEN
2032 IF (PA_SECURITY_PVT.check_user_privilege('PA_UNLOCK_ANY_STRUCTURE'
2033 ,NULL
2034 ,to_number(NULL))
2035 = FND_API.G_TRUE) THEN
2036 l_get_lock := 'Y';
2037 END IF;
2038 END IF;
2039 --end bug 3071008
2040
2041 IF (l_get_lock = 'O') THEN
2042 --lock by other user. Error.
2043 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_STRUC_VER_LOCKED');
2044 x_msg_data := 'PA_PS_STRUC_VER_LOCKED';
2045 RAISE FND_API.G_EXC_ERROR;
2046 END IF;
2047
2048 IF (p_locked_status_code = 'LOCKED') THEN
2049 l_lock_status_code := 'LOCKED';
2050 l_locked_by_person_id := l_person_id;
2051 l_locked_date := sysdate;
2052 ELSIF (p_locked_status_code = 'UNLOCKED') THEN
2053 l_lock_status_code := 'UNLOCKED';
2054 l_locked_by_person_id := null;
2055 l_locked_date := null;
2056 END IF;
2057
2058 --Check if structure version name is unique if modified
2059 IF (p_structure_version_name <> l_name) THEN
2060 IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(p_structure_version_name,
2061 p_pev_structure_id,
2062 l_project_id,
2063 l_proj_element_id)) THEN
2064 PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
2065 x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
2066 RAISE FND_API.G_EXC_ERROR;
2067 ELSE
2068 l_name := p_structure_version_name;
2069 END IF;
2070 END IF;
2071
2072 END IF;
2073
2074 --other attributes
2075 If (p_struct_version_status_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2076 p_struct_version_status_code IS NULL) THEN
2077 l_status_code := p_struct_version_status_code;
2078 END IF;
2079 IF (p_structure_version_desc <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2080 p_structure_version_desc IS NULL) THEN
2081 l_description := p_structure_version_desc;
2082 END IF;
2083
2084 IF (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2085 p_change_reason_code IS NULL) THEN
2086 l_change_reason_code := p_change_reason_code;
2087 END IF;
2088
2089 --FPM bug 3301192
2090 IF (p_current_working_ver_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2091 p_current_working_ver_flag IS NULL) THEN
2092 NULL;
2093 ELSE
2094 l_current_working_ver_flag := p_current_working_ver_flag;
2095 END IF;
2096 --end FPM bug 3301192
2097
2098 --Check if there is any error.
2099 l_msg_count := FND_MSG_PUB.count_msg;
2100 -- IF p_calling_module = 'PA_UPD_WBS_ATTR_UN' THEN Commented for Bug 6372780
2101 IF l_msg_count > l_msg_count_int THEN
2102 x_msg_count := l_msg_count;
2103 IF x_msg_count = 1 THEN
2104 x_msg_data := l_msg_data;
2105 END IF;
2106 RAISE FND_API.G_EXC_ERROR;
2107 END IF;/*Bug# 6414944*/
2108 /* Commented for Bug 6372780
2109 ELSIF l_msg_count > 0 THEN
2110 x_msg_count := l_msg_count;
2111 IF x_msg_count = 1 THEN
2112 x_msg_data := l_msg_data;
2113 END IF;
2114 RAISE FND_API.G_EXC_ERROR;
2115 END IF;
2116 */
2117
2118 PA_PROJ_ELEM_VER_STRUCTURE_PKG.update_row(
2119 X_ROWID => l_rowid
2120 , X_PEV_STRUCTURE_ID => p_pev_structure_id
2121 , X_ELEMENT_VERSION_ID => l_structure_version_id
2122 , X_VERSION_NUMBER => l_version_number
2123 , X_NAME => l_name
2124 , X_PROJECT_ID => l_project_id
2125 , X_PROJ_ELEMENT_ID => l_proj_element_id
2126 , X_DESCRIPTION => l_description
2127 , X_EFFECTIVE_DATE => l_effective_date
2128 , X_PUBLISHED_DATE => l_published_date
2129 , X_PUBLISHED_BY => l_published_by_person_id
2130 , X_CURRENT_BASELINE_DATE => l_current_baseline_date
2131 , X_CURRENT_BASELINE_FLAG => l_current_flag
2132 , X_CURRENT_BASELINE_BY => l_current_baseline_person_id
2133 , X_ORIGINAL_BASELINE_DATE => l_original_baseline_date
2134 , X_ORIGINAL_BASELINE_FLAG => l_original_flag
2135 , X_ORIGINAL_BASELINE_BY => l_original_baseline_person_id
2136 , X_LOCK_STATUS_CODE => l_lock_status_code
2137 , X_LOCKED_BY => l_locked_by_person_id
2138 , X_LOCKED_DATE => l_locked_date
2139 , X_STATUS_CODE => l_status_code
2140 , X_WF_STATUS_CODE => l_wf_status_code
2141 , X_LATEST_EFF_PUBLISHED_FLAG => l_latest_eff_published_flag
2142 , X_CHANGE_REASON_CODE => l_change_reason_code
2143 , X_RECORD_VERSION_NUMBER => p_record_version_number
2144 , X_CURRENT_WORKING_FLAG => l_current_working_ver_flag --FPM bug 3301192
2145 );
2146
2147
2148 --FPM bug 3301192
2149 --now set the current working flag for the other working versions to 'N'
2150 IF l_current_working_ver_flag = 'Y'
2151 THEN
2152 UPDATE pa_proj_elem_ver_structure
2153 SET current_working_flag = 'N'
2154 where project_id = l_project_id
2155 and proj_element_id = l_proj_element_id
2156 and pev_structure_id <> p_pev_structure_id
2157 and current_working_flag = 'Y';
2158
2159 -- Begin Fix For Bug # 4297556.
2160
2161 -- For a split structure, we delete all subproject relationships where any of the other working
2162 -- workplan versions is the child entity.
2163
2164 for l_cur_rel_ids_rec in cur_relationship_ids(l_structure_version_id, l_project_id)
2165
2166 loop
2167
2168 PA_RELATIONSHIP_PVT.Delete_SubProject_Association(
2169 p_commit => p_commit
2170 ,p_validate_only => p_validate_only
2171 ,p_debug_mode => p_debug_mode
2172 ,p_object_relationships_id => l_cur_rel_ids_rec.object_relationship_id
2173 ,p_record_version_number => l_cur_rel_ids_rec.record_version_number
2174 ,x_return_status => x_return_status
2175 ,x_msg_count => x_msg_count
2176 ,x_msg_data => x_msg_data);
2177
2178 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2179
2180 raise FND_API.G_EXC_ERROR;
2181
2182 end if;
2183
2184 -- Begin Bug # 4556844.
2185
2186 PA_RELATIONSHIP_PVT.Create_SubProject_Association(
2187 p_commit => p_commit
2188 ,p_validate_only => p_validate_only
2189 ,p_debug_mode => p_debug_mode
2190 ,p_src_proj_id => l_cur_rel_ids_rec.object_id_from2
2191 ,p_task_ver_id => l_cur_rel_ids_rec.object_id_from1
2192 ,p_dest_proj_id => l_project_id
2193 ,p_dest_proj_name => l_cur_rel_ids_rec.name
2194 ,p_comment => l_cur_rel_ids_rec.comments
2195 ,x_return_status => x_return_status
2196 ,x_msg_count => x_msg_count
2197 ,x_msg_data => x_msg_data);
2198
2199 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2200
2201 raise FND_API.G_EXC_ERROR;
2202
2203 end if;
2204
2205 -- End Bug # 4556844.
2206
2207 end loop;
2208
2209 -- End Fix For Bug # 4297556.
2210
2211 END IF;
2212 --end FPM bug 3301192
2213
2214 x_return_status := FND_API.G_RET_STS_SUCCESS;
2215
2216 IF (p_debug_mode = 'Y') THEN
2217 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE_VERSION_ATTR end');
2218 END IF;
2219
2220 EXCEPTION
2221 WHEN NO_DATA_FOUND THEN
2222 if p_commit = FND_API.G_TRUE THEN
2223 rollback to UPDATE_STRUC_VER_ATTR_PVT;
2224 end if;
2225 x_return_status := FND_API.G_RET_STS_ERROR;
2226 WHEN FND_API.G_EXC_ERROR THEN
2227 IF (p_commit = FND_API.G_TRUE) THEN
2228 ROLLBACK to UPDATE_STRUC_VER_ATTR_PVT;
2229 END IF;
2230 x_msg_count := FND_MSG_PUB.count_msg;
2231 x_return_status := FND_API.G_RET_STS_ERROR;
2232 WHEN OTHERS THEN
2233 IF (p_commit = FND_API.G_TRUE) THEN
2234 ROLLBACK to UPDATE_STRUC_VER_ATTR_PVT;
2235 END IF;
2236 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2237 x_msg_count := FND_MSG_PUB.count_msg;
2238 --put message
2239 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2240 p_procedure_name => 'Update_Structure_Version_Attr',
2241 p_error_text => SUBSTRB(SQLERRM,1,240));
2242 RAISE;
2243 END Update_Structure_Version_Attr;
2244
2245
2246
2247 -- API name : Delete_Structure
2248 -- Type : Private Procedure
2249 -- Pre-reqs : None
2250 -- Return Value : N/A
2251 -- Parameters
2252 -- p_api_version IN NUMBER := 1.0
2253 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2254 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
2255 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2256 -- p_validation_level IN VARCHAR2 := 100
2257 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2258 -- p_debug_mode IN VARCHAR2 := 'N'
2259 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2260 -- p_structure_id IN NUMBER
2261 -- p_record_version_number IN NUMBER
2262 -- x_return_status OUT VARCHAR2
2263 -- x_msg_count OUT NUMBER
2264 -- x_msg_data OUT VARCHAR2
2265 --
2266 -- History
2267 --
2268 -- 25-JUN-01 HSIU -Created
2269 --
2270 --
2271
2272
2273 procedure Delete_Structure
2274 (
2275 p_api_version IN NUMBER := 1.0
2276 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2277 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2278 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2279 ,p_validation_level IN VARCHAR2 := 100
2280 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2281 ,p_debug_mode IN VARCHAR2 := 'N'
2282 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2283 ,p_structure_id IN NUMBER
2284 ,p_record_version_number IN NUMBER
2285 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2286 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2287 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2288 )
2289 IS
2290 l_rowid VARCHAR2(255);
2291
2292 l_return_status VARCHAR2(1);
2293 l_msg_count NUMBER;
2294 l_msg_data VARCHAR2(250);
2295
2296 cursor sel_struct_type IS
2297 select rowid
2298 from pa_proj_structure_types
2299 where proj_element_id = p_structure_id;
2300
2301 -- Begin fix for Bug # 4506308.
2302
2303 cursor l_cur_projects_all(c_structure_id NUMBER) is
2304 select ppa.project_id, ppa.record_version_number
2305 from pa_projects_all ppa, pa_proj_elements ppe
2306 where ppa.project_id = ppe.project_id
2307 and ppe.proj_element_id = c_structure_id;
2308
2309 l_project_id NUMBER;
2310 l_rec_ver_number NUMBER;
2311 l_is_wp_str VARCHAR2(1);
2312
2313 -- End fix for Bug # 4506308.
2314
2315 BEGIN
2316 IF (p_debug_mode = 'Y') THEN
2317 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE begin');
2318 END IF;
2319
2320 if p_commit = FND_API.G_TRUE then
2321 savepoint delete_structure_pvt;
2322 end if;
2323
2324 -- Begin fix for Bug # 4506308.
2325
2326 l_is_wp_str := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(p_structure_id, 'WORKPLAN');
2327
2328 if (l_is_wp_str = 'Y') then
2329
2330 open l_cur_projects_all(p_structure_id);
2331 fetch l_cur_projects_all into l_project_id, l_rec_ver_number;
2332 close l_cur_projects_all;
2333
2334 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
2335 p_validate_only => FND_API.G_FALSE
2336 ,p_project_id => l_project_id
2337 ,p_date_type => 'SCHEDULED'
2338 ,p_start_date => null
2339 ,p_finish_date => null
2340 ,p_record_version_number => l_rec_ver_number
2341 ,x_return_status => x_return_status
2342 ,x_msg_count => x_msg_count
2343 ,x_msg_data => x_msg_data );
2344
2345 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2346 RAISE FND_API.G_EXC_ERROR;
2347 END IF;
2348
2349 end if;
2350
2351 -- End fix for Bug # 4506308.
2352
2353 --Delete detail rows (structure types)
2354 OPEN sel_struct_type;
2355 LOOP
2356 FETCH sel_struct_type into l_rowid;
2357 EXIT WHEN sel_struct_type%NOTFOUND;
2358 PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
2359 END LOOP;
2360 CLOSE sel_struct_type;
2361
2362 --Lock record
2363 IF (p_validate_only <> FND_API.G_TRUE) THEN
2364 BEGIN
2365 --lock
2366 select rowid into l_rowid
2367 from pa_proj_elements
2368 where proj_element_id = p_structure_id
2369 and record_version_number = p_record_version_number
2370 for update of record_version_number NOWAIT;
2371 EXCEPTION
2372 when TIMEOUT_ON_RESOURCE then
2373 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2374 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2375 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2376 when NO_DATA_FOUND then
2377 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2378 p_msg_name => 'PA_XC_RECORD_CHANGED');
2379 l_msg_data := 'PA_XC_RECORD_CHANGED';
2380 when OTHERS then
2381 if SQLCODE = -54 then
2382 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2383 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2384 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2385 else
2386 raise;
2387 end if;
2388 END;
2389 ELSE
2390 BEGIN
2391 select rowid into l_rowid
2392 from pa_proj_elements
2393 where proj_element_id = p_structure_id
2394 and record_version_number = p_record_version_number;
2395 EXCEPTION
2396 when NO_DATA_FOUND then
2397 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2398 p_msg_name => 'PA_XC_RECORD_CHANGED');
2399 l_msg_data := 'PA_XC_RECORD_CHANGED';
2400 when OTHERS then
2401 raise;
2402 END;
2403 END IF;
2404
2405 l_msg_count := FND_MSG_PUB.count_msg;
2406 if l_msg_count > 0 then
2407 x_msg_count := l_msg_count;
2408 if x_msg_count = 1 then
2409 x_msg_data := l_msg_data;
2410 end if;
2411 raise FND_API.G_EXC_ERROR;
2412 end if;
2413
2414
2415 PA_PROJ_ELEMENTS_PKG.DELETE_ROW(
2416 X_ROW_ID => l_rowid
2417 );
2418
2419 x_return_status := FND_API.G_RET_STS_SUCCESS;
2420
2421 IF (p_debug_mode = 'Y') THEN
2422 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE end');
2423 END IF;
2424
2425 EXCEPTION
2426 when FND_API.G_EXC_ERROR then
2427 if p_commit = FND_API.G_TRUE then
2428 rollback to delete_structure_pvt;
2429 end if;
2430 x_return_status := FND_API.G_RET_STS_ERROR;
2431 when others then
2432 if p_commit = FND_API.G_TRUE then
2433 rollback to delete_structure_pvt;
2434 end if;
2435 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2436 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2437 p_procedure_name => 'Delete_Structure',
2438 p_error_text => SUBSTRB(SQLERRM,1,240));
2439 raise;
2440 END Delete_Structure;
2441
2442
2443 -- API name : Delete_Structure_Version
2444 -- Type : Private Procedure
2445 -- Pre-reqs : None
2446 -- Return Value : N/A
2447 -- Parameters
2448 -- p_api_version IN NUMBER := 1.0
2449 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2450 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
2451 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2452 -- p_validation_level IN VARCHAR2 := 100
2453 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2454 -- p_debug_mode IN VARCHAR2 := 'N'
2455 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2456 -- p_structure_version_id IN NUMBER
2457 -- p_record_version_number IN NUMBER
2458 -- x_return_status OUT VARCHAR2
2459 -- x_msg_count OUT NUMBER
2460 -- x_msg_data OUT VARCHAR2
2461 --
2462 -- History
2463 --
2464 -- 25-JUN-01 HSIU -Created
2465 --
2466 --
2467
2468
2469 procedure Delete_Structure_Version
2470 (
2471 p_api_version IN NUMBER := 1.0
2472 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2473 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2474 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2475 ,p_validation_level IN VARCHAR2 := 100
2476 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2477 ,p_debug_mode IN VARCHAR2 := 'N'
2478 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2479 ,p_structure_version_id IN NUMBER
2480 ,p_record_version_number IN NUMBER
2481 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2482 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2483 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2484 )
2485 IS
2486 l_rowid VARCHAR2(255);
2487
2488 l_Project_ID NUMBER;
2489
2490 l_return_status VARCHAR2(1);
2491 l_msg_count NUMBER;
2492 l_msg_data VARCHAR2(250);
2493
2494 -- Begin fix for Bug # 4483222.
2495
2496 cursor l_cur_rel_id(p_str_ver_id NUMBER) is
2497 select por.object_relationship_id, por.record_version_number
2498 from pa_object_relationships por
2499 where por.object_id_to1 = p_str_ver_id
2500 and por.relationship_type in ('LW', 'LF');
2501
2502 l_rec_rel_id l_cur_rel_id%ROWTYPE;
2503
2504 -- End fix for Bug # 4483222.
2505
2506 BEGIN
2507 IF (p_debug_mode = 'Y') THEN
2508 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION begin');
2509 END IF;
2510
2511 if p_commit = FND_API.G_TRUE then
2512 savepoint delete_structure_version_pvt;
2513 end if;
2514
2515 --Lock record
2516 IF (p_debug_mode = 'Y') THEN
2517 pa_debug.debug('locking record '||p_structure_version_id||', '||p_record_Version_number);
2518 END IF;
2519 IF (p_validate_only <> FND_API.G_TRUE) THEN
2520 BEGIN
2521 --lock
2522 select rowid into l_rowid
2523 from pa_proj_element_versions
2524 where element_version_id = p_structure_version_id
2525 and record_version_number = p_record_version_number
2526 for update of record_version_number NOWAIT;
2527 EXCEPTION
2528 when TIMEOUT_ON_RESOURCE then
2529 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2530 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2531 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2532 when NO_DATA_FOUND then
2533 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2534 p_msg_name => 'PA_XC_RECORD_CHANGED');
2535 l_msg_data := 'PA_XC_RECORD_CHANGED';
2536 when OTHERS then
2537 if SQLCODE = -54 then
2538 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2539 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2540 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2541 else
2542 raise;
2543 end if;
2544 END;
2545 ELSE
2546 BEGIN
2547 select rowid into l_rowid
2548 from pa_proj_element_versions
2549 where element_version_id = p_structure_version_id
2550 and record_version_number = p_record_version_number;
2551 EXCEPTION
2552 when NO_DATA_FOUND then
2553 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2554 p_msg_name => 'PA_XC_RECORD_CHANGED');
2555 l_msg_data := 'PA_XC_RECORD_CHANGED';
2556 when OTHERS then
2557 raise;
2558 END;
2559 END IF;
2560
2561
2562 l_msg_count := FND_MSG_PUB.count_msg;
2563 if l_msg_count > 0 then
2564 x_msg_count := l_msg_count;
2565 if x_msg_count = 1 then
2566 x_msg_data := l_msg_data;
2567 end if;
2568 raise FND_API.G_EXC_ERROR;
2569 end if;
2570
2571 IF (p_debug_mode = 'Y') THEN
2572 pa_debug.debug('deleting structure versionn');
2573 END IF;
2574
2575
2576 -- Added by skannoji
2577 -- Added for doosan customer to delete structure version id for workplan
2578 DECLARE
2579 /* Bug #: 3305199 SMukka */
2580 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
2581 /* l_struct_version_id_tbl PA_PLSQL_DATATYPES.IdTabTyp; */
2582 l_struct_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
2583 BEGIN
2584 IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
2585 l_struct_version_id_tbl.extend(1); /* Venky */
2586 l_struct_version_id_tbl(1) := p_structure_version_id;
2587 /*Smukka Bug No. 3474141 Date 03/01/2004 */
2588 /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block */
2589 BEGIN
2590 PA_FIN_PLAN_PVT.delete_wp_budget_versions
2591 (
2592 p_struct_elem_version_id_tbl => l_struct_version_id_tbl
2593 ,x_return_status => x_return_status
2594 ,x_msg_count => x_msg_count
2595 ,x_Msg_data => x_msg_data
2596 );
2597 EXCEPTION
2598 WHEN OTHERS THEN
2599 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2600 p_procedure_name => 'Delete_Structure_Version',
2601 p_error_text => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_budget_versions:'||SQLERRM,1,240));
2602 RAISE FND_API.G_EXC_ERROR;
2603 END;
2604 -- Added for FP_M Changes -- Bhumesh
2605 BEGIN
2606 SELECT project_id INTO l_Project_ID
2607 FROM pa_proj_element_versions
2608 WHERE element_version_id = p_structure_version_id and rownum < 2;
2609
2610 PA_PROGRESS_PUB.delete_working_wp_progress (
2611 P_Project_ID => l_Project_ID
2612 ,P_Structure_Version_ID => P_Structure_Version_ID
2613 ,x_return_status => x_return_status
2614 ,x_msg_count => x_msg_count
2615 ,x_Msg_data => x_msg_data
2616 );
2617 EXCEPTION
2618 WHEN OTHERS THEN
2619 fnd_msg_pub.add_exc_msg(
2620 p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2621 p_procedure_name => 'Delete_Structure_Version',
2622 p_error_text => SUBSTRB('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
2623 RAISE FND_API.G_EXC_ERROR;
2624 END;
2625 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2626 RAISE FND_API.G_EXC_ERROR;
2627 END IF;
2628 END IF;
2629 END;
2630 -- till here by skannoji
2631
2632 -- Begin fix for Bug # 4483222.
2633
2634 -- delete all sub-project relationships where this structure is the child of another structure.
2635
2636 for l_rec_rel_id in l_cur_rel_id(p_structure_version_id)
2637 loop
2638
2639 /*
2640
2641 pa_relationship_pub.delete_relationship
2642 (p_api_version => p_api_version
2643 ,p_init_msg_list => p_init_msg_list
2644 ,p_commit => p_commit
2645 ,p_validate_only => p_validate_only
2646 ,p_validation_level => p_validation_level
2647 ,p_calling_module => p_calling_module
2648 ,p_debug_mode => p_debug_mode
2649 ,p_max_msg_count => p_max_msg_count
2650 ,p_object_relationship_id => l_rec_rel_id.object_relationship_id
2651 ,p_record_version_number => l_rec_rel_id.record_version_number
2652 ,x_return_status => x_return_status
2653 ,x_msg_count => x_msg_count
2654 ,x_msg_data => x_msg_data);
2655
2656 */
2657
2658 pa_relationship_pvt.delete_subproject_association
2659 (p_commit => p_commit
2660 ,p_validate_only => p_validate_only
2661 ,p_debug_mode => p_debug_mode
2662 ,p_object_relationships_id => l_rec_rel_id.object_relationship_id
2663 ,p_record_version_number => l_rec_rel_id.record_version_number
2664 ,x_return_status => x_return_status
2665 ,x_msg_count => x_msg_count
2666 ,x_msg_data => x_msg_data);
2667
2668 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2669
2670 raise FND_API.G_EXC_ERROR;
2671
2672 end if;
2673
2674 end loop;
2675
2676 -- End fix for Bug # 4483222.
2677
2678 PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW(
2679 X_ROW_ID => l_rowid
2680 );
2681
2682 x_return_status := FND_API.G_RET_STS_SUCCESS;
2683
2684 IF (p_debug_mode = 'Y') THEN
2685 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION end');
2686 END IF;
2687
2688 EXCEPTION
2689 when FND_API.G_EXC_ERROR then
2690 if p_commit = FND_API.G_TRUE then
2691 rollback to delete_structure_version_pvt;
2692 end if;
2693 x_return_status := FND_API.G_RET_STS_ERROR;
2694 when others then
2695 if p_commit = FND_API.G_TRUE then
2696 rollback to delete_structure_version_pvt;
2697 end if;
2698 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2699 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2700 p_procedure_name => 'Delete_Structure_Version',
2701 p_error_text => SUBSTRB(SQLERRM,1,240));
2702 raise;
2703 END DELETE_STRUCTURE_VERSION;
2704
2705
2706 -- API name : Delete_Structure_Version_Attr
2707 -- Type : Private Procedure
2708 -- Pre-reqs : None
2709 -- Return Value : N/A
2710 -- Parameters
2711 -- p_api_version IN NUMBER := 1.0
2712 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2713 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
2714 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2715 -- p_validation_level IN VARCHAR2 := 100
2716 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2717 -- p_debug_mode IN VARCHAR2 := 'N'
2718 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2719 -- p_pev_structure_id IN NUMBER
2720 -- p_record_version_number IN NUMBER
2721 -- x_return_status OUT VARCHAR2
2722 -- x_msg_count OUT NUMBER
2723 -- x_msg_data OUT VARCHAR2
2724 --
2725 -- History
2726 --
2727 -- 25-JUN-01 HSIU -Created
2728 --
2729 --
2730
2731
2732 procedure Delete_Structure_Version_Attr
2733 (
2734 p_api_version IN NUMBER := 1.0
2735 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2736 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2737 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2738 ,p_validation_level IN VARCHAR2 := 100
2739 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2740 ,p_debug_mode IN VARCHAR2 := 'N'
2741 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2742 ,p_pev_structure_id IN NUMBER
2743 ,p_record_version_number IN NUMBER
2744 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2745 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2746 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2747 )
2748 IS
2749 l_rowid VARCHAR2(255);
2750
2751 l_return_status VARCHAR2(1);
2752 l_msg_count NUMBER;
2753 l_msg_data VARCHAR2(250);
2754
2755 --FP M bug 3301192
2756 CURSOR cur_proj_str
2757 IS
2758 SELECT proj_element_id, project_id
2759 FROM pa_proj_elem_ver_structure
2760 WHERE pev_structure_id = p_pev_structure_id;
2761
2762 l_structure_id NUMBER;
2763 l_project_id NUMBER;
2764 l_current_working_ver_id NUMBER;
2765
2766 --end FPM bug 3301192
2767
2768 -- 3804437 Added below cursor to retrieve last updated working version
2769 CURSOR cur_last_working_ver( p_structure_id NUMBER )
2770 IS
2771 select str.element_version_id
2772 from pa_proj_elem_ver_structure str,
2773 pa_proj_elements ppe
2774 where ppe.proj_element_id = p_structure_id
2775 and ppe.project_id = str.project_id
2776 and ppe.proj_element_id = str.proj_element_id
2777 and str.status_code = 'STRUCTURE_WORKING'
2778 and str.current_working_flag = 'N'
2779 order by str.last_update_date desc;
2780 -- 3804437
2781
2782 BEGIN
2783 IF (p_debug_mode = 'Y') THEN
2784 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION_ATTR begin');
2785 END IF;
2786
2787 if p_commit = FND_API.G_TRUE then
2788 savepoint delete_structure_ver_attr_pvt;
2789 end if;
2790
2791 --Lock record
2792 IF (p_validate_only <> FND_API.G_TRUE) THEN
2793 BEGIN
2794 --lock
2795 select rowid into l_rowid
2796 from pa_proj_elem_ver_structure
2797 where pev_structure_id = p_pev_structure_id
2798 and record_version_number = p_record_version_number
2799 for update of record_version_number NOWAIT;
2800 EXCEPTION
2801 when TIMEOUT_ON_RESOURCE then
2802 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2803 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2804 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2805 when NO_DATA_FOUND then
2806 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2807 p_msg_name => 'PA_XC_RECORD_CHANGED');
2808 l_msg_data := 'PA_XC_RECORD_CHANGED';
2809 when OTHERS then
2810 if SQLCODE = -54 then
2811 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2812 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2813 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2814 else
2815 raise;
2816 end if;
2817 END;
2818 ELSE
2819 BEGIN
2820 select rowid into l_rowid
2821 from pa_proj_elem_ver_structure
2822 where pev_structure_id = p_pev_structure_id
2823 and record_version_number = p_record_version_number;
2824 EXCEPTION
2825 when NO_DATA_FOUND then
2826 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2827 p_msg_name => 'PA_XC_RECORD_CHANGED');
2828 l_msg_data := 'PA_XC_RECORD_CHANGED';
2829 when OTHERS then
2830 raise;
2831 END;
2832 END IF;
2833
2834 l_msg_count := FND_MSG_PUB.count_msg;
2835 if l_msg_count > 0 then
2836 x_msg_count := l_msg_count;
2837 if x_msg_count = 1 then
2838 x_msg_data := l_msg_data;
2839 end if;
2840 raise FND_API.G_EXC_ERROR;
2841 end if;
2842
2843 --FPM bug 3301192
2844 OPEN cur_proj_str;
2845 FETCH cur_proj_str INTO l_structure_id, l_project_id;
2846 CLOSE cur_proj_str;
2847
2848 -- 3804437 Commented below code to retrieve last updated working version
2849 -- because below code is retrieving the current working version only
2850
2851 --l_current_working_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
2852
2853 -- Added code to retrieve last updated working version
2854
2855 OPEN cur_last_working_ver(l_structure_id);
2856 FETCH cur_last_working_ver INTO l_current_working_ver_id;
2857 CLOSE cur_last_working_ver;
2858
2859 -- 3804437 end
2860
2861 --update the latest updated working version as current working version.
2862 UPDATE pa_proj_elem_ver_structure
2863 SET current_working_flag = 'Y'
2864 WHERE element_version_id = l_current_working_ver_id
2865 AND project_id = l_project_id;
2866
2867 --end FPM bug 3301192
2868
2869 PA_PROJ_ELEM_VER_STRUCTURE_PKG.delete_row(
2870 X_ROWID => l_rowid
2871 );
2872
2873 IF (p_debug_mode = 'Y') THEN
2874 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION_ATTR end');
2875 END IF;
2876
2877 x_return_status := FND_API.G_RET_STS_SUCCESS;
2878
2879 EXCEPTION
2880 when FND_API.G_EXC_ERROR then
2881 if p_commit = FND_API.G_TRUE then
2882 rollback to delete_structure_ver_attr_pvt;
2883 end if;
2884 x_return_status := FND_API.G_RET_STS_ERROR;
2885 when others then
2886 if p_commit = FND_API.G_TRUE then
2887 rollback to delete_structure_ver_attr_pvt;
2888 end if;
2889 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2890 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2891 p_procedure_name => 'Delete_Structure',
2892 p_error_text => SUBSTRB(SQLERRM,1,240));
2893 raise;
2894 END Delete_Structure_Version_Attr;
2895
2896
2897 -- API name : Publish_Structure
2898 -- Type : Private Procedure
2899 -- Pre-reqs : None
2900 -- Return Value : N/A
2901 -- Parameters
2902 -- p_api_version IN NUMBER := 1.0
2903 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2904 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
2905 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2906 -- p_validation_level IN VARCHAR2 := 100
2907 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2908 -- p_debug_mode IN VARCHAR2 := 'N'
2909 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2910 -- p_responsibility_id IN NUMBER := 0
2911 -- p_structure_version_id IN NUMBER
2912 -- p_publish_structure_ver_name IN VARCHAR2
2913 -- p_structure_ver_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2914 -- p_effective_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2915 -- p_original_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2916 -- p_current_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2917 -- x_published_struct_ver_id OUT NUMBER
2918 -- x_return_status OUT VARCHAR2
2919 -- x_msg_count OUT NUMBER
2920 -- x_msg_data OUT VARCHAR2
2921 --
2922 -- History
2923 --
2924 -- 25-JUN-01 HSIU -Created
2925 --
2926
2927
2928
2929 procedure Publish_Structure
2930 (
2931 p_api_version IN NUMBER := 1.0
2932 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2933 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2934 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2935 ,p_validation_level IN VARCHAR2 := 100
2936 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2937 ,p_debug_mode IN VARCHAR2 := 'N'
2938 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2939 ,p_responsibility_id IN NUMBER := 0
2940 ,p_user_id IN NUMBER := NULL
2941 ,p_structure_version_id IN NUMBER
2942 ,p_publish_structure_ver_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2943 ,p_structure_ver_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2944 ,p_effective_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2945 ,p_original_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2946 ,p_current_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2947 ,p_pub_prog_flag IN VARCHAR2 DEFAULT 'Y' -- FP_M changes
2948 ,x_published_struct_ver_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2949 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2950 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2951 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2952 )
2953 IS
2954 l_api_name CONSTANT VARCHAR(30) := 'Publish_Structure';
2955 l_api_version CONSTANT NUMBER := 1.0;
2956
2957 l_return_status VARCHAR2(1);
2958 l_msg_count NUMBER;
2959 l_msg_data VARCHAR2(250);
2960 l_data VARCHAR2(250);
2961 l_msg_index_out NUMBER;
2962 l_apps_name VARCHAR2(2000) := 'PA';
2963
2964 l_dummy VARCHAR2(1);
2965 l_dummy_name PA_PROJ_ELEM_VER_STRUCTURE.NAME%TYPE;
2966
2967 l_project_id PA_PROJ_ELEM_VER_STRUCTURE.PROJECT_ID%TYPE;
2968 l_proj_element_id PA_PROJ_ELEM_VER_STRUCTURE.PROJ_ELEMENT_ID%TYPE;
2969 l_element_version_id PA_PROJ_ELEM_VER_STRUCTURE.ELEMENT_VERSION_ID%TYPE;
2970 l_pev_structure_id PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
2971
2972
2973 l_new_struct_ver_id NUMBER;
2974 -- added for Bug Fix: 4537865
2975 l_tmp_struct_ver_id NUMBER;
2976 -- added for Bug fix: 4537865
2977 l_new_pev_structure_id PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
2978 l_new_pev_schedule_id PA_PROJ_ELEM_VER_SCHEDULE.PEV_SCHEDULE_ID%TYPE;
2979 l_new_obj_rel_id PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
2980
2981 l_original_baseline_flag VARCHAR2(1);
2982 l_current_baseline_flag VARCHAR2(1);
2983
2984 l_new_struct_ver_name PA_PROJ_ELEM_VER_STRUCTURE.name%TYPE;
2985 l_new_struct_ver_desc PA_PROJ_ELEM_VER_STRUCTURE.description%TYPE;
2986
2987 -- anlee
2988 -- Dates changes
2989 l_scheduled_start_date DATE;
2990 l_scheduled_finish_date DATE;
2991 l_proj_record_ver_number NUMBER;
2992
2993 l_user_id NUMBER;
2994
2995 ----------------------------------- FP_M changes : Begin
2996 -- Refer to tracking bug 3305199
2997 /* Bug #: 3305199 SMukka */
2998 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
2999 /* l_Old_Task_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
3000 /* l_New_Task_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
3001 l_Old_Task_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3002 l_New_Task_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3003 ----------------------------------- FP_M changes : End
3004
3005 CURSOR get_scheduled_dates(c_project_id NUMBER, c_structure_version_id NUMBER)
3006 IS
3007 SELECT scheduled_start_date, scheduled_finish_date
3008 FROM pa_proj_elem_ver_schedule
3009 WHERE project_id = c_project_id
3010 AND element_version_id = c_structure_version_id;
3011
3012 CURSOR get_proj_rec_ver_number(c_project_id NUMBER)
3013 IS
3014 SELECT record_version_number
3015 FROM pa_projects_all
3016 WHERE project_id = c_project_id;
3017 -- End of changes
3018
3019
3020 --Bug 2189657
3021 --Added for linking tasks with no display sequence.
3022 Type T_EquivElemVerTable IS TABLE OF NUMBER
3023 Index by BINARY_INTEGER;
3024 t_equiv_elem_ver_id T_EquivElemVerTable;
3025 --Bug 2189657 end;
3026
3027 cursor get_from_id(c_element_version_id NUMBER) IS
3028 select object_relationship_id, object_id_from1 object_id_from,
3029 object_type_from, record_version_number
3030 from pa_object_relationships
3031 where relationship_type = 'L'
3032 and object_id_to1 = c_element_version_id
3033 and object_type_to IN ('PA_TASKS','PA_STRUCTURES');
3034 l_from_object_info get_from_id%ROWTYPE;
3035
3036 cursor get_to_id(c_element_version_id NUMBER) IS
3037 select object_relationship_id, object_id_to1 object_id_to, object_id_to2,
3038 object_type_to, record_version_number
3039 from pa_object_relationships
3040 where relationship_type IN ('LW', 'LF')
3041 and object_id_from1 = c_element_version_id
3042 and object_type_from IN ('PA_TASKS','PA_STRUCTURES');
3043 l_to_object_info get_to_id%ROWTYPE;
3044 l_working_ver_fg VARCHAR2(1);
3045
3046 cursor get_task_version_info(c_task_version_id NUMBER) IS
3047 select v1.project_id project_id, v2.proj_element_id structure_id,
3048 v1.parent_structure_version_id structure_version_id,
3049 v1.element_version_id task_version_id
3050 from pa_proj_element_versions v1,
3051 pa_proj_element_versions v2
3052 where v1.element_version_id = c_task_version_id
3053 and v1.parent_structure_version_id = v2.element_version_id;
3054 l_info_task_ver_rec get_task_version_info%ROWTYPE;
3055
3056 cursor get_structure_version_info(c_structure_version_id NUMBER) IS
3057 select v1.project_id project_id, v1.proj_element_id structure_id,
3058 v1.element_version_id structure_version_id
3059 from pa_proj_element_versions v1
3060 where v1.element_version_id = c_structure_version_id;
3061 l_info_struc_ver_rec get_structure_version_info%ROWTYPE;
3062
3063
3064 cursor get_struc_ver_name IS
3065 select pevs.name, pevs.project_id, pevs.proj_element_id,
3066 pevs.element_version_id, pevs.pev_structure_id
3067 from pa_proj_elem_ver_structure pevs,
3068 pa_proj_element_versions pev
3069 where pev.element_version_id = p_structure_version_id
3070 and pevs.project_id = pev.project_id
3071 and pevs.element_version_id = pev.element_version_id;
3072
3073 CURSOR get_structure_ver_csr(c_structure_version_id NUMBER) IS
3074 SELECT *
3075 FROM PA_PROJ_ELEMENT_VERSIONS
3076 WHERE element_version_id = c_structure_version_id;
3077 l_struc_ver_rec get_structure_ver_csr%ROWTYPE;
3078
3079 CURSOR get_structure_ver_attr_csr(c_structure_version_id NUMBER, c_project_id NUMBER) IS
3080 SELECT *
3081 FROM PA_PROJ_ELEM_VER_STRUCTURE
3082 WHERE ELEMENT_VERSION_ID = c_structure_version_id
3083 AND project_id = c_project_id;
3084 l_struc_ver_attr_rec get_structure_ver_attr_csr%ROWTYPE;
3085
3086 CURSOR get_ver_schedule_attr_csr(c_element_version_id NUMBER, c_project_id NUMBER) IS
3087 SELECT *
3088 FROM PA_PROJ_ELEM_VER_SCHEDULE
3089 WHERE element_version_id = c_element_version_id
3090 AND project_id = c_project_id;
3091 l_ver_sch_attr_rec get_ver_schedule_attr_csr%ROWTYPE;
3092
3093 --hsiu: task version status change. Added task version status.
3094 CURSOR get_task_versions_csr(c_structure_version_id NUMBER) IS
3095 SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
3096 a.project_id, b.object_id_from1 parent_element_version_id,
3097 a.TASK_UNPUB_VER_STATUS_CODE, a.parent_structure_version_id
3098 FROM PA_PROJ_ELEMENT_VERSIONS a,
3099 PA_OBJECT_RELATIONSHIPS b
3100 WHERE a.object_type = 'PA_TASKS'
3101 AND a.parent_structure_version_id = c_structure_version_id
3102 AND a.element_version_id = b.object_id_to1
3103 AND b.relationship_type = 'S'
3104 ORDER BY a.display_sequence;
3105
3106 l_task_versions_rec get_task_versions_csr%ROWTYPE;
3107
3108 Cursor get_linking_tasks IS
3109 select a.element_version_id
3110 from pa_proj_element_versions a,
3111 pa_proj_elements b
3112 where a.proj_element_id = b.proj_element_id
3113 and a.parent_structure_version_id = p_structure_version_id
3114 and b.link_task_flag = 'Y';
3115 l_linking_task_rec get_linking_tasks%ROWTYPE;
3116
3117 l_ref_task_ver_id NUMBER;
3118 l_peer_or_sub VARCHAR2(10);
3119 l_last_wbs_level NUMBER;
3120 l_task_version_id NUMBER;
3121 l_pev_schedule_id NUMBER;
3122
3123 l_i_msg_count NUMBER;
3124 l_i_msg_data PA_VC_1000_2000:= PA_VC_1000_2000(1);
3125 l_i_return_status VARCHAR2(1);
3126
3127 TYPE reference_tasks IS TABLE OF NUMBER
3128 INDEX BY BINARY_INTEGER;
3129 l_outline_task_ref reference_tasks;
3130
3131 l_proj_start_date DATE;
3132 l_proj_completion_date DATE;
3133 l_prefix VARCHAR2(80);
3134
3135 --Hsiu added for date rollup
3136 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3137
3138 --hsiu added for advanced structure changes
3139 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
3140 select b.element_version_id, b.record_version_number
3141 from pa_proj_element_versions a,
3142 pa_proj_element_versions b,
3143 pa_proj_elem_ver_structure c
3144 where a.element_version_id = c_keep_struc_ver_id
3145 and a.project_id = b.project_id
3146 and a.proj_element_id = b.proj_element_id
3147 and b.element_version_id <> c_keep_struc_ver_id
3148 and b.object_type = 'PA_STRUCTURES'
3149 and b.project_id = c.project_id
3150 and b.element_version_id = c.element_version_id
3151 and c.status_code <> 'STRUCTURE_PUBLISHED';
3152 l_del_struc_ver_id NUMBER;
3153 l_del_struc_ver_rvn NUMBER;
3154
3155 CURSOR get_task_ver_weighting(p_task_ver_id NUMBER)
3156 IS
3157 select weighting_percentage
3158 from pa_object_relationships
3159 where object_id_to1 = p_task_ver_id
3160 and object_type_to = 'PA_TASKS'
3161 and object_type_from in ('PA_STRUCTURES','PA_TASKS')
3162 and object_type_to = 'PA_TASKS' -- Bug 6429275
3163 and relationship_type = 'S';
3164 l_weighting_percentage NUMBER;
3165
3166 --hsiu added for task status
3167 l_error_message_code VARCHAR2(250);
3168 l_create_task_ver_flag varchar2(1);
3169
3170 -- Bug # 4691749.
3171 -- Replacing this varray PA_NUM_1000_NUM with t_TBDtasksTable index table.
3172 TYPE t_TBD_tasksTable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3173 --l_tbd_task_ver_id PA_NUM_1000_NUM := PA_NUM_1000_NUM(); --replacing this varray with t_TBDtasksTable index table.
3174 l_tbd_task_ver_id t_TBD_tasksTable;
3175 l_tbd_index NUMBER := 0;
3176 -- Bug # 4691749.
3177
3178 -- Added for 4096218
3179 -- This VARRAY will hold the list of to_be_deleted tasks' proj_element_ids
3180 l_tbd_task_id PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3181
3182 l_del_task_cnt NUMBER;
3183
3184 CURSOR get_tbd_tasks_info(c_task_ver_id NUMBER) IS
3185 select parent_structure_version_id, element_version_id,
3186 record_version_number
3187 from pa_proj_element_versions
3188 where element_version_id = c_task_ver_id;
3189 l_tbd_tasks_info_rec get_tbd_tasks_info%ROWTYPE;
3190
3191 CURSOR get_parent_id(c_task_ver_id NUMBER) IS
3192 select object_id_from1
3193 from pa_object_relationships
3194 where object_id_to1 = c_task_ver_id
3195 and object_type_to = 'PA_TASKS'
3196 and relationship_type = 'S';
3197 l_parent_id NUMBER;
3198 l_parent_ver_id NUMBER;
3199 TYPE t_parentTable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3200 l_parent_tbl t_parentTable;
3201
3202 --bug 2662139
3203 CURSOR is_summary_elem(c_elem_ver_id NUMBER) IS
3204 SELECT '1'
3205 from pa_object_relationships
3206 where object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
3207 and object_id_from1 = c_elem_ver_id
3208 and relationship_type = 'S';
3209
3210 --bug
3211 l_err_code NUMBER:= 0;
3212 l_err_stack VARCHAR2(630);
3213 l_err_stage VARCHAR2(80);
3214
3215 l_messages PA_PROJECT_STRUCTURE_PVT1.PA_PUBLISH_ERR_TBL_TYPE;
3216 l_page_content_id NUMBER;
3217 l_item_key VARCHAR2(240);
3218
3219 --added for performace improvement
3220 X_Row_id VARCHAR2(255);
3221
3222 --added for performance improvement
3223 l_workplan_type VARCHAR2(1);
3224 l_financial_type VARCHAR2(1);
3225
3226 --maansari
3227 i NUMBER := 1;
3228 -- l_user_id NUMBER := FND_GLOBAL.USER_ID;
3229 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
3230 --maansari
3231
3232 --bug 3047602
3233 l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
3234 cursor get_all_new_childs(c_new_struc_ver_id NUMBER) IS
3235 select element_version_id
3236 from pa_proj_element_versions
3237 where parent_structure_version_id = c_new_struc_ver_id
3238 and object_type = 'PA_TASKS';
3239 --end bug 3047602
3240
3241 l_rowid VARCHAR2(255);
3242 CURSOR cur_elem_ver_seq IS
3243 SELECT pa_proj_element_versions_s.nextval
3244 FROM sys.dual;
3245
3246 l_last_pub_str_ver_id NUMBER; --Bug No. 3450684 Smukka 01/03/2004
3247 l_chk_deliverable VARCHAR2(80); --Summuka For checking deliverables
3248
3249 --bug 3822112
3250 l_share_flag VARCHAR2(1) := 'N';
3251 l_copy_actuals_flag VARCHAR2(1) := 'Y';
3252 -- Bug 3839288 Begin
3253 l_task_weight_basis_code pa_proj_progress_attr.task_weight_basis_code%TYPE;
3254 l_as_of_date DATE;
3255 -- Bug 3839288 End
3256 l_upd_new_elem_ver_id_flag VARCHAR2(1) := 'Y'; --rtarway, 3951024
3257
3258 l_debug_mode VARCHAR2(1);
3259 BEGIN
3260
3261 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
3262
3263 IF (p_debug_mode = 'Y') THEN
3264 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE begin');
3265 END IF;
3266
3267 IF (p_commit = FND_API.G_TRUE) THEN
3268 savepoint publish_structure_pvt;
3269 END IF;
3270
3271 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
3272
3273 ----------
3274 -- code --
3275 IF p_user_id IS NULL THEN
3276 l_user_id := FND_GLOBAL.USER_ID;
3277 ELSE
3278 l_user_id := p_user_id;
3279 END IF;
3280
3281 l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
3282 l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
3283
3284 select project_id
3285 into l_project_id
3286 from pa_proj_element_versions
3287 where element_version_id = p_structure_version_id;
3288
3289 --bug 3840509
3290 IF 'Y' = nvl(PA_PROJECT_STRUCTURE_UTILS.Get_Sch_Dirty_fl(l_project_id,
3291 p_structure_version_id), 'N') THEN
3292 --need to reschedule
3293 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NEED_THIRD_PT_SCH');
3294 x_msg_data := 'PA_PS_NEED_THIRD_PT_SCH';
3295 RAISE FND_API.G_EXC_ERROR;
3296 END IF;
3297 --end bug 3840509
3298
3299 l_share_flag := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id); --bug 3822112
3300
3301 --Set the baseline flags
3302 l_original_baseline_flag := p_original_baseline_flag;
3303 l_current_baseline_flag := p_current_baseline_flag;
3304
3305 /* Smukka 01/03/2004 Bug No. 3450684 */
3306 /* Added the following if block for getting the lastest published structure version id */
3307 IF l_workplan_type = 'Y' THEN
3308 l_last_pub_str_ver_id:=PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(l_project_id);
3309 ELSIF l_financial_type = 'Y' THEN
3310 l_last_pub_str_ver_id:=PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_FIN_STRUC_VER_ID(l_project_id);
3311 END IF;
3312
3313 --hsiu: changes for checking transaction currency difference
3314 --for bug 3786612
3315 PA_PROGRESS_UTILS.check_txn_currency_diff
3316 (
3317 p_structure_version_id => p_structure_version_id,
3318 p_context => 'PUBLISH_STRUCTURE',
3319 x_return_status => l_return_status
3320 );
3321
3322 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3323 RAISE FND_API.G_EXC_ERROR;
3324 END IF;
3325 --end changes for bug 3786612
3326
3327 --hsiu: bug 2684465
3328 --Check if this structure missing tasks with transactions
3329 -- IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
3330 -- PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
3331 -- x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
3332 -- RAISE FND_API.G_EXC_ERROR;
3333 -- END IF;
3334 PA_PROJECT_STRUCTURE_UTILS.CHECK_MISS_TRANSACTION_TASKS(p_structure_version_id,
3335 l_return_status,
3336 l_msg_count,
3337 l_msg_data);
3338 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3339 RAISE FND_API.G_EXC_ERROR;
3340 END IF;
3341
3342 --Check if task statuses are consistent
3343 PA_PROJECT_STRUCTURE_UTILS.check_tasks_statuses_valid(
3344 p_structure_version_id
3345 ,l_return_status
3346 ,l_msg_count
3347 ,l_msg_data
3348 );
3349 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3350 RAISE FND_API.G_EXC_ERROR;
3351 END IF;
3352
3353 --Check if any new summary task has transactions
3354 PA_PROJECT_STRUCTURE_UTILS.Check_txn_on_summary_tasks(
3355 p_structure_version_id
3356 ,l_return_status
3357 ,l_msg_count
3358 ,l_msg_data
3359 );
3360 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3361 PA_UTILS.ADD_MESSAGE('PA',l_error_message_code);
3362 x_msg_data := l_error_message_code;
3363 RAISE FND_API.G_EXC_ERROR;
3364 END IF;
3365 --end bug 2684465
3366
3367
3368 --Check if this structure can be published (ie, if linked structures are published)
3369 -- IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Publish_Struc_Ver_Ok(p_structure_version_id)) THEN
3370 -- PA_UTILS.ADD_MESSAGE('PA','PA_PS_LINK_STRUC_NOT_PUB');
3371 -- x_msg_data := 'PA_PS_LINK_STRUC_NOT_PUB';
3372 -- RAISE FND_API.G_EXC_ERROR;
3373 -- END IF;
3374
3375 --Check if this structure missing tasks with transactions
3376 -- IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
3377 -- PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
3378 -- x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
3379 -- RAISE FND_API.G_EXC_ERROR;
3380 -- END IF;
3381
3382 --For rollups
3383 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
3384 -- OPEN get_linking_tasks;
3385 -- LOOP
3386 -- FETCH get_linking_tasks INTO l_linking_task_rec;
3387 -- EXIT WHEN get_linking_tasks%NOTFOUND;
3388 -- l_tasks_ver_ids.extend;
3389 -- l_tasks_ver_ids(l_tasks_ver_ids.count) := l_linking_task_rec.element_version_id;
3390 -- END LOOP;
3391 -- CLOSE get_linking_tasks;
3392 --
3393 -- IF (l_tasks_ver_ids.count > 0) THEN
3394 -- PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
3395 -- p_commit => FND_API.G_FALSE,
3396 -- p_element_versions => l_tasks_ver_ids,
3397 -- x_return_status => l_return_status,
3398 -- x_msg_count => l_msg_count,
3399 -- x_msg_data => l_msg_data);
3400 --
3401 -- if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
3402 -- x_msg_count := FND_MSG_PUB.count_msg;
3403 -- if x_msg_count = 1 then
3404 -- x_msg_data := l_msg_data;
3405 -- end if;
3406 -- raise FND_API.G_EXC_ERROR;
3407 -- end if;
3408 --
3409 -- END IF;
3410 -- END IF;
3411
3412 --Check if any linked structure is workplan type and if publishing structure is
3413 -- financial only
3414
3415 --dbms_output.put_line('1');
3416 OPEN get_struc_ver_name;
3417 --dbms_output.put_line('open get_struc_ver_name');
3418 FETCH get_struc_ver_name into l_dummy_name, l_project_id,
3419 l_proj_element_id, l_element_version_id,
3420 l_pev_structure_id;
3421 IF get_struc_ver_name%NOTFOUND THEN
3422 --dbms_output.put_line('close get_struc_ver_name');
3423 CLOSE get_struc_ver_name;
3424 RAISE NO_DATA_FOUND;
3425 END IF;
3426 --dbms_output.put_line('close get_struc_ver_name');
3427 CLOSE get_struc_ver_name;
3428 --dbms_output.put_line('1b');
3429
3430 --Set baseline flags if this is the first published version
3431 IF ('N' = PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(l_project_id, l_proj_element_id)) THEN
3432 l_current_baseline_flag := 'Y';
3433 l_original_baseline_flag := 'Y';
3434 END IF;
3435
3436 --Get Structure Version Attribute Info
3437 --dbms_output.put_line('open get_structure_ver_attr_csr');
3438 OPEN get_structure_ver_attr_csr(p_structure_version_id, l_project_id);
3439 FETCH get_structure_ver_attr_csr INTO l_struc_ver_attr_rec;
3440 --dbms_output.put_line('close get_structure_ver_attr_csr');
3441 CLOSE get_structure_ver_attr_csr;
3442
3443 --Copy structure version name and description
3444 IF (p_publish_structure_ver_name IS NULL) OR (p_publish_structure_ver_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3445 l_new_struct_ver_name := l_struc_ver_attr_rec.name;
3446 ELSE
3447 l_new_struct_ver_name := p_publish_structure_ver_name;
3448 END IF;
3449
3450 IF (p_structure_ver_desc IS NULL) or (p_structure_ver_desc = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3451 l_new_struct_ver_desc := l_struc_ver_attr_rec.description;
3452 ELSE
3453 l_new_struct_ver_desc := p_structure_ver_desc;
3454 END IF;
3455
3456 --l_dummy_name for current structure
3457 --p_publish_structure_ver_name for new publishing structure
3458 --Check if names are the same
3459 IF (l_dummy_name = l_new_struct_ver_name) THEN
3460 -- If same, add Time-Stamp to working version.
3461 -- error_msg('dummyname before '||l_dummy_name);
3462 -- l_dummy_name := substr(fnd_date.date_to_canonical(sysdate)||' - '||
3463 -- l_dummy_name,0,240);
3464 --select prefix from pa_lookups
3465 select meaning
3466 into l_prefix
3467 from pa_lookups
3468 where lookup_type = 'PA_STRUCTURES_PREFIX'
3469 and lookup_code = 'PA_PREFIX_COPY';
3470
3471 l_dummy_name := substrb(l_prefix||' '||l_dummy_name,0,240);
3472
3473 -- Bug Fix 4727737
3474 -- We need to make sure that the name of the newly created working version is unique
3475 -- and not getting collided with the published versions name.
3476 -- Users can create data in such a way that the version name when prefixed with Copy To:
3477 -- will result into an existing published version name.
3478
3479 -- So adding the following call to avoid the U2 violation due to the following update statement.
3480
3481 IF (pa_project_structure_utils.check_struc_ver_name_unique(l_dummy_name,
3482 null,
3483 l_project_id,
3484 l_proj_element_id) <> 'Y') THEN
3485
3486 --Not unique; error.
3487 pa_utils.add_message('PA','PA_PS_NEW_STRUC_VER_NAM_UNIQUE');
3488 x_msg_data := 'PA_PS_NEW_STRUC_VER_NAM_UNIQUE';
3489 RAISE FND_API.G_EXC_ERROR;
3490 END IF;
3491
3492 -- End of Bug Fix 4727737
3493
3494 -- error_msg('dummy_name after'||l_dummy_name);
3495 -- update_name
3496 update PA_PROJ_ELEM_VER_STRUCTURE
3497 set name = l_dummy_name,
3498 current_working_flag = 'Y'
3499 where pev_structure_id = l_pev_structure_id;
3500
3501 END IF;
3502
3503 --Check if structure version name is unique
3504 If (PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(l_new_struct_ver_name,
3505 null,
3506 l_project_id,
3507 l_proj_element_id) <> 'Y') THEN
3508 --Not unique; error.
3509 PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
3510 x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
3511 RAISE FND_API.G_EXC_ERROR;
3512 END IF;
3513 --Bug No 3450684 Smukka Checking for deliverable type
3514 IF PA_PROJ_ELEMENTS_UTILS.check_sharedstruct_deliv(p_structure_version_id) = 'Y' THEN
3515 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3516 p_msg_name => 'PA_PS_CHK_DEL_FAIL_PUB_STR');
3517 RAISE FND_API.G_EXC_ERROR;
3518 END IF;
3519
3520 --Get Structure Version Info
3521 --dbms_output.put_line('2');
3522 --dbms_output.put_line('open get_structure_ver_csr');
3523 OPEN get_structure_ver_csr(p_structure_version_id);
3524 FETCH get_structure_ver_csr INTO l_struc_ver_rec;
3525 --dbms_output.put_line('close get_structure_ver_csr');
3526 CLOSE get_structure_ver_csr;
3527 --dbms_output.put_line('2b');
3528
3529 OPEN cur_elem_ver_seq;
3530 FETCH cur_elem_ver_seq into l_new_struct_ver_id;
3531 CLOSE cur_elem_ver_seq;
3532
3533 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
3534 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_tmp_struct_ver_id
3535 -- to l_new_struct_ver_id
3536
3537 l_tmp_struct_ver_id := l_new_struct_ver_id ;
3538
3539 -- End 4657794
3540
3541 PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
3542 X_ROW_ID => l_rowid
3543 --,X_ELEMENT_VERSION_ID => l_new_struct_ver_id * commented for Bug Fix: 4537865
3544 ,X_ELEMENT_VERSION_ID => l_tmp_struct_ver_id -- added for Bug fix: 4537865
3545 ,X_PROJ_ELEMENT_ID => l_struc_ver_rec.proj_element_id
3546 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
3547 ,X_PROJECT_ID => l_struc_ver_rec.project_id
3548 ,X_PARENT_STRUCTURE_VERSION_ID => l_new_struct_ver_id
3549 ,X_DISPLAY_SEQUENCE => NULL
3550 ,X_WBS_LEVEL => NULL
3551 ,X_WBS_NUMBER => '0'
3552 ,X_ATTRIBUTE_CATEGORY => l_struc_ver_rec.attribute_category
3553 ,X_ATTRIBUTE1 => l_struc_ver_rec.attribute1
3554 ,X_ATTRIBUTE2 => l_struc_ver_rec.attribute2
3555 ,X_ATTRIBUTE3 => l_struc_ver_rec.attribute3
3556 ,X_ATTRIBUTE4 => l_struc_ver_rec.attribute4
3557 ,X_ATTRIBUTE5 => l_struc_ver_rec.attribute5
3558 ,X_ATTRIBUTE6 => l_struc_ver_rec.attribute6
3559 ,X_ATTRIBUTE7 => l_struc_ver_rec.attribute7
3560 ,X_ATTRIBUTE8 => l_struc_ver_rec.attribute8
3561 ,X_ATTRIBUTE9 => l_struc_ver_rec.attribute9
3562 ,X_ATTRIBUTE10 => l_struc_ver_rec.attribute10
3563 ,X_ATTRIBUTE11 => l_struc_ver_rec.attribute11
3564 ,X_ATTRIBUTE12 => l_struc_ver_rec.attribute12
3565 ,X_ATTRIBUTE13 => l_struc_ver_rec.attribute13
3566 ,X_ATTRIBUTE14 => l_struc_ver_rec.attribute14
3567 ,X_ATTRIBUTE15 => l_struc_ver_rec.element_version_id
3568 ,X_TASK_UNPUB_VER_STATUS_CODE => NULL
3569 ,X_SOURCE_OBJECT_ID => l_struc_ver_rec.project_id
3570 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
3571 );
3572 -- added for Bug fix: 4537865
3573 l_new_struct_ver_id := l_tmp_struct_ver_id;
3574 -- added for Bug fix: 4537865
3575
3576 /* This API insert into planning txn table if wp. Call table hander instead
3577 --Call Create Structure Version
3578 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
3579 ( p_validate_only => p_validate_only
3580 ,p_structure_id => l_struc_ver_rec.proj_element_id
3581 ,p_attribute_category => l_struc_ver_rec.attribute_category
3582 ,p_attribute1 => l_struc_ver_rec.attribute1
3583 ,p_attribute2 => l_struc_ver_rec.attribute2
3584 ,p_attribute3 => l_struc_ver_rec.attribute3
3585 ,p_attribute4 => l_struc_ver_rec.attribute4
3586 ,p_attribute5 => l_struc_ver_rec.attribute5
3587 ,p_attribute6 => l_struc_ver_rec.attribute6
3588 ,p_attribute7 => l_struc_ver_rec.attribute7
3589 ,p_attribute8 => l_struc_ver_rec.attribute8
3590 ,p_attribute9 => l_struc_ver_rec.attribute9
3591 ,p_attribute10 => l_struc_ver_rec.attribute10
3592 ,p_attribute11 => l_struc_ver_rec.attribute11
3593 ,p_attribute12 => l_struc_ver_rec.attribute12
3594 ,p_attribute13 => l_struc_ver_rec.attribute13
3595 ,p_attribute14 => l_struc_ver_rec.attribute14
3596 ,p_attribute15 => l_struc_ver_rec.element_version_id --for performacnce to be used later by new structure version
3597 ,x_structure_version_id => l_new_struct_ver_id
3598 ,x_return_status => l_return_status
3599 ,x_msg_count => l_msg_count
3600 ,x_msg_data => l_msg_data );
3601 --dbms_output.put_line('new struct version id = '||l_new_struct_ver_id);
3602 */
3603
3604 IF (p_debug_mode = 'Y') THEN
3605 pa_debug.debug('create structure version =>'||l_new_struct_ver_id);
3606 END IF;
3607
3608 l_msg_count := FND_MSG_PUB.count_msg;
3609 if l_msg_count > 0 then
3610 x_msg_count := l_msg_count;
3611 if x_msg_count = 1 then
3612 x_msg_data := l_msg_data;
3613 end if;
3614 raise FND_API.G_EXC_ERROR;
3615 end if;
3616
3617 --update links linking from working version to current published version
3618 -- PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS
3619 -- (
3620 -- p_init_msg_list => FND_API.G_FALSE
3621 -- ,p_commit => FND_API.G_FALSE
3622 -- ,p_debug_mode => p_debug_mode
3623 -- ,p_orig_project_id => l_project_id
3624 -- ,p_orig_structure_id => l_proj_element_id
3625 -- ,p_orig_struc_ver_id => p_structure_version_id
3626 -- ,p_orig_task_ver_id => NULL
3627 -- ,p_new_project_id => l_project_id
3628 -- ,p_new_structure_id => l_struc_ver_rec.proj_element_id
3629 -- ,p_new_struc_ver_id => l_new_struct_ver_id
3630 -- ,p_new_task_ver_id => NULL
3631 -- ,x_return_status => l_return_status
3632 -- ,x_msg_count => l_msg_count
3633 -- ,x_msg_data => l_msg_data
3634 -- );
3635 --
3636 -- l_msg_count := FND_MSG_PUB.count_msg;
3637 -- if l_msg_count > 0 then
3638 -- x_msg_count := l_msg_count;
3639 -- if x_msg_count = 1 then
3640 -- x_msg_data := l_msg_data;
3641 -- end if;
3642 -- raise FND_API.G_EXC_ERROR;
3643 -- end if;
3644
3645 --Search for incoming links; update existing links
3646 --dbms_output.put_line('3');
3647 --dbms_output.put_line('open p_structure_version_id');
3648 -- OPEN get_from_id(p_structure_version_id);
3649 -- LOOP
3650 -- IF (p_debug_mode = 'Y') THEN
3651 -- pa_debug.debug('check incoming links for struct');
3652 -- END IF;
3653 -- FETCH get_from_id INTO l_from_object_info;
3654 -- EXIT WHEN get_from_id%NOTFOUND;
3655 --
3656 -- If (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
3657 -- --get element information, then update
3658 -- --dbms_output.put_line('4');
3659 --dbms_output.put_line('open get_structure_version_info');
3660 -- OPEN get_structure_version_info(l_from_object_info.object_id_from);
3661 -- FETCH get_structure_version_info INTO l_info_struc_ver_rec;
3662 -- PA_RELATIONSHIP_PVT.Update_Relationship(
3663 -- p_init_msg_list => FND_API.G_FALSE
3664 -- ,p_commit => FND_API.G_FALSE
3665 -- ,p_debug_mode => p_debug_mode
3666 -- ,p_object_relationship_id => l_from_object_info.object_relationship_id
3667 -- ,p_project_id_from => l_info_struc_ver_rec.project_id
3668 -- ,p_structure_id_from => l_info_struc_ver_rec.structure_id
3669 -- ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
3670 -- ,p_task_version_id_from => NULL
3671 -- ,p_project_id_to => l_project_id
3672 -- ,p_structure_id_to => l_struc_ver_rec.proj_element_id
3673 -- ,p_structure_version_id_to => l_new_struct_ver_id
3674 -- ,p_task_version_id_to => NULL
3675 -- ,p_relationship_type => 'L'
3676 -- ,p_relationship_subtype => 'READ_WRITE'
3677 -- ,p_record_version_number => l_from_object_info.record_version_number
3678 -- ,x_return_status => l_return_status
3679 -- ,x_msg_count => l_msg_count
3680 -- ,x_msg_data => l_msg_data
3681 -- );
3682 --dbms_output.put_line('close get_structure_version_info');
3683 -- CLOSE get_structure_version_info;
3684 -- --dbms_output.put_line('4b');
3685 --
3686 --
3687 -- ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
3688 -- --get element information, then update
3689 -- --dbms_output.put_line('5');
3690 --dbms_output.put_line('open get_task_version_info');
3691 -- OPEN get_task_version_info(l_from_object_info.object_id_from);
3692 -- FETCH get_task_version_info INTO l_info_task_ver_rec;
3693 -- PA_RELATIONSHIP_PVT.Update_Relationship(
3694 -- p_init_msg_list => FND_API.G_FALSE
3695 -- ,p_commit => FND_API.G_FALSE
3696 -- ,p_debug_mode => p_debug_mode
3697 -- ,p_object_relationship_id => l_from_object_info.object_relationship_id
3698 -- ,p_project_id_from => l_info_task_ver_rec.project_id
3699 -- ,p_structure_id_from => l_info_task_ver_rec.structure_id
3700 -- ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
3701 -- ,p_task_version_id_from => l_info_task_ver_rec.task_version_id
3702 -- ,p_project_id_to => l_project_id
3703 -- ,p_structure_id_to => l_struc_ver_rec.proj_element_id
3704 -- ,p_structure_version_id_to => l_new_struct_ver_id
3705 -- ,p_task_version_id_to => NULL
3706 -- ,p_relationship_type => 'L'
3707 -- ,p_relationship_subtype => 'READ_WRITE'
3708 -- ,p_record_version_number => l_from_object_info.record_version_number
3709 -- ,x_return_status => l_return_status
3710 -- ,x_msg_count => l_msg_count
3711 -- ,x_msg_data => l_msg_data
3712 -- );
3713 --dbms_output.put_line('close get_task_version_info');
3714 -- CLOSE get_task_version_info;
3715 -- --dbms_output.put_line('5b');
3716 --
3717 -- END IF;
3718 -- If (p_debug_mode = 'Y') THEN
3719 -- pa_debug.debug('update incoming links for struct =>'||l_return_status);
3720 -- END IF;
3721 --
3722 -- --Check error
3723 -- l_msg_count := FND_MSG_PUB.count_msg;
3724 -- if (l_msg_count > 0) then
3725 -- x_msg_count := l_msg_count;
3726 -- if x_msg_count = 1 then
3727 -- x_msg_data := l_msg_data;
3728 -- end if;
3729 --dbms_output.put_line('close get_from_id');
3730 -- CLOSE get_from_id;
3731 -- raise FND_API.G_EXC_ERROR;
3732 -- end if;
3733 --
3734 --
3735 -- END LOOP;
3736 --dbms_output.put_line('close get_from_id');
3737 -- CLOSE get_from_id;
3738 --dbms_output.put_line('5b');
3739
3740 -----------------------------------------------
3741 --Search for outgoing links; create new Links--
3742 --dbms_output.put_line('6');
3743 --dbms_output.put_line('open get_to_id');
3744 -- OPEN get_to_id(p_structure_version_id);
3745 -- LOOP
3746 -- IF (p_debug_mode = 'Y') THEN
3747 -- pa_debug.debug('check outgoing links for struct');
3748 -- END IF;
3749 -- FETCH get_to_id INTO l_to_object_info;
3750 -- EXIT WHEN get_to_id%NOTFOUND;
3751 -- If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
3752 -- --dbms_output.put_line('7');
3753 --dbms_output.put_line('open get_structure_version_info');
3754 -- OPEN get_structure_version_info(l_to_object_info.object_id_to);
3755 -- FETCH get_structure_version_info INTO l_info_struc_ver_rec;
3756 /*****************************/
3757 --dbms_output.put_line('creating rel: structure out going links for structures');
3758 -- PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
3759 -- p_user_id => FND_GLOBAL.USER_ID
3760 -- ,p_object_type_from => 'PA_STRUCTURES'
3761 -- ,p_object_id_from1 => l_new_struct_ver_id
3762 -- ,p_object_id_from2 => NULL
3763 -- ,p_object_id_from3 => NULL
3764 -- ,p_object_id_from4 => NULL
3765 -- ,p_object_id_from5 => NULL
3766 -- ,p_object_type_to => 'PA_STRUCTURES'
3767 -- ,p_object_id_to1 => l_info_struc_ver_rec.structure_version_id
3768 -- ,p_object_id_to2 => NULL
3769 -- ,p_object_id_to3 => NULL
3770 -- ,p_object_id_to4 => NULL
3771 -- ,p_object_id_to5 => NULL
3772 -- ,p_relationship_type => 'L'
3773 -- ,p_relationship_subtype => 'READ_WRITE'
3774 -- ,p_lag_day => NULL
3775 -- ,p_imported_lag => NULL
3776 -- ,p_priority => NULL
3777 -- ,p_pm_product_code => NULL
3778 -- ,x_object_relationship_id => l_new_obj_rel_id
3779 -- ,x_return_status => l_return_status
3780 -- );
3781 --
3782 /*****************************/
3783 --dbms_output.put_line('close get_structure_version_info');
3784 -- CLOSE get_structure_version_info;
3785 -- --dbms_output.put_line('7b');
3786 --
3787 -- ELSIF(l_to_object_info.object_type_to = 'PA_TASKS') THEN
3788 -- --dbms_output.put_line('8');
3789 --dbms_output.put_line('open get_task_version_info');
3790 -- OPEN get_task_version_info(l_to_object_info.object_id_to);
3791 -- FETCH get_task_version_info INTO l_info_task_ver_rec;
3792 /*****************************/
3793 --dbms_output.put_line('creating rel: structure out going links for tasks');
3794 -- PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
3795 -- p_user_id => FND_GLOBAL.USER_ID
3796 -- ,p_object_type_from => 'PA_STRUCTURES'
3797 -- ,p_object_id_from1 => l_new_struct_ver_id
3798 -- ,p_object_id_from2 => NULL
3799 -- ,p_object_id_from3 => NULL
3800 -- ,p_object_id_from4 => NULL
3801 -- ,p_object_id_from5 => NULL
3802 -- ,p_object_type_to => 'PA_TASKS'
3803 -- ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
3804 -- ,p_object_id_to2 => NULL
3805 -- ,p_object_id_to3 => NULL
3806 -- ,p_object_id_to4 => NULL
3807 -- ,p_object_id_to5 => NULL
3808 -- ,p_relationship_type => 'L'
3809 -- ,p_relationship_subtype => 'READ_WRITE'
3810 -- ,p_lag_day => NULL
3811 -- ,p_imported_lag => NULL
3812 -- ,p_priority => NULL
3813 -- ,p_pm_product_code => NULL
3814 -- ,x_object_relationship_id => l_new_obj_rel_id
3815 -- ,x_return_status => l_return_status
3816 -- );
3817 --
3818 /*****************************/
3819 --dbms_output.put_line('close get_task_version_info');
3820 -- CLOSE get_task_version_info;
3821 -- --dbms_output.put_line('8b');
3822 --
3823 -- If (p_debug_mode = 'Y') THEN
3824 -- pa_debug.debug('update outgoing links for struct =>'||l_return_status);
3825 -- END IF;
3826 -- END IF;
3827 -- --Check error
3828 -- l_msg_count := FND_MSG_PUB.count_msg;
3829 -- if (l_msg_count > 0) then
3830 -- x_msg_count := l_msg_count;
3831 -- if x_msg_count = 1 then
3832 -- x_msg_data := l_msg_data;
3833 -- end if;
3834 --dbms_output.put_line('close get_to_id');
3835 -- CLOSE get_to_id;
3836 -- raise FND_API.G_EXC_ERROR;
3837 -- end if;
3838
3839 -- END LOOP;
3840 --dbms_output.put_line('close get_to_id');
3841 -- CLOSE get_to_id;
3842 --dbms_output.put_line('6b');
3843
3844
3845 --maansari
3846 --initialized the pl/sql table
3847 l_src_tasks_versions_tbl.delete;
3848 --maansari
3849
3850 --Create the task versions
3851 --Fetch all task versions
3852 -- error_msg('create tasks');
3853 --dbms_output.put_line('open get_Task_versions_csr');
3854 OPEN get_task_versions_csr(p_structure_version_id);
3855 l_last_wbs_level := NULL;
3856 LOOP
3857 IF (p_debug_mode = 'Y') THEN
3858 pa_debug.debug('create task version for published structure');
3859 END IF;
3860
3861 FETCH get_task_versions_csr INTO l_task_versions_rec;
3862 EXIT WHEN get_task_versions_csr%NOTFOUND;
3863
3864 --hsiu added for task version status
3865 --Check if this task can be deleted.
3866 --Call PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok
3867 --If ok to be deleted, move on to the next task and don't add this task
3868 -- (goto l_endofloop);
3869 --otherwise add this task and set status to 'CANCELLED'
3870 l_create_task_ver_flag := 'Y';
3871
3872 --Removing due to changes in publishing
3873 select a.proj_element_id, b.object_id_from1
3874 into l_parent_id, l_parent_ver_id
3875 from pa_proj_element_versions a,
3876 pa_object_relationships b
3877 where a.element_version_id = b.object_id_from1
3878 and a.object_type = b.object_type_from
3879 and relationship_type = 'S'
3880 and object_id_to1 = l_task_versions_rec.element_version_id
3881 and object_type_to = 'PA_TASKS';
3882
3883 --If it is financial task, check if this task should be created
3884
3885 -- PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
3886 -- p_parent_task_ver_id => l_parent_ver_id
3887 -- ,x_return_status => l_return_status
3888 -- ,x_error_message_code => l_error_message_code);
3889
3890 --bug: 2805602
3891 --hsiu: commented because this has been done in check_txn_on_summary_tasks
3892 -- If (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_parent_id) = 'Y') THEN
3893 -- PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK(x_task_id => l_parent_id,
3894 -- x_err_code => l_err_code,
3895 -- x_err_stack => l_err_stack,
3896 -- x_err_stage => l_err_stage
3897 -- );
3898 -- IF (l_err_code <> 0) THEN
3899 -- l_create_task_ver_flag := 'N';
3900 -- END IF;
3901 -- END IF;
3902
3903 -- IF (l_return_status <> 'Y') THEN
3904 -- l_create_task_ver_flag := 'N';
3905 -- END IF;
3906
3907 IF (l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE = 'TO_BE_DELETED') THEN
3908
3909 PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok(
3910 p_project_id => l_task_versions_rec.project_id
3911 ,p_task_version_id => l_task_versions_rec.element_version_id
3912 ,p_parent_structure_ver_id=> l_task_versions_rec.parent_structure_version_id
3913 ,x_return_status => l_return_status
3914 ,x_error_message_code => l_error_message_code );
3915 IF l_return_status <> 'S' THEN
3916 --Cannot delete this version. Create and set as cancelled
3917 l_create_task_ver_flag := 'Y';
3918 ELSE
3919 --This task version should not be created
3920 l_create_task_ver_flag := 'N';
3921 --delete from working if found
3922
3923 -- Bug # 4691749.
3924 -- l_tbd_task_ver_id.extend;
3925 -- l_tbd_task_ver_id(l_tbd_task_ver_id.count) := l_task_versions_rec.element_version_id;
3926 l_tbd_index := l_tbd_index + 1;
3927 l_tbd_task_ver_id(l_tbd_index) := l_task_versions_rec.element_version_id;
3928 -- Bug # 4691749.
3929
3930 -- Start : 4096218
3931 if (l_tbd_task_id.count < 1000) then -- Bug # 4691749.
3932 l_tbd_task_id.extend;
3933 l_tbd_task_id(l_tbd_task_id.count) := l_task_versions_rec.proj_element_id;
3934 end if; -- Bug # 4691749.
3935 -- End : 4096218
3936
3937 --prorate this branch; find parent
3938 IF (l_last_wbs_level is NULL) THEN
3939 l_parent_tbl(l_new_struct_ver_id) := l_new_struct_ver_id;
3940 --l_parent_ver_id := l_new_struct_ver_id;
3941 ELSE
3942 IF (l_task_versions_rec.wbs_level > l_last_wbs_level) THEN
3943 l_parent_tbl(l_outline_task_ref(l_last_wbs_level)) := l_outline_task_ref(l_last_wbs_level);
3944 --l_parent_ver_id := l_outline_task_ref(l_last_wbs_level);
3945 ELSE
3946 OPEN get_parent_id(l_outline_task_ref(l_task_versions_rec.wbs_level));
3947 FETCH get_parent_id into l_parent_ver_id;
3948 CLOSE get_parent_id;
3949 l_parent_tbl(l_parent_ver_id) := l_parent_ver_id;
3950 END IF;
3951 END IF;
3952 END IF;
3953 --set task status to cancelled.
3954 UPDATE pa_proj_elements
3955 set status_code = '128',
3956 RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,1)+1,
3957 LAST_UPDATE_DATE = SYSDATE,
3958 LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
3959 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
3960 where proj_element_id = l_task_versions_rec.proj_element_id;
3961
3962 update pa_proj_element_versions
3963 set TASK_UNPUB_VER_STATUS_CODE = 'PUBLISHED'
3964 where element_version_id = l_task_versions_rec.element_version_id;
3965
3966 -- 3955848 Added code to delete task to dlvr association in publishing flow , version enabled case
3967 -- p_delete_or_validate is passed as 'D' because only deletion should be done
3968
3969 PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
3970 (
3971 p_task_element_id => l_task_versions_rec.proj_element_id
3972 ,p_project_id => l_task_versions_rec.project_id
3973 ,p_task_version_id => l_task_versions_rec.element_version_id
3974 ,p_delete_or_validate => 'D'
3975 ,x_return_status => x_return_status
3976 ,x_msg_count => x_msg_count
3977 ,x_msg_data => x_msg_data
3978 );
3979
3980 IF x_return_status = FND_API.G_RET_STS_ERROR then
3981 RAISE FND_API.G_EXC_ERROR;
3982 End If;
3983
3984 -- 3955848 end
3985
3986 ELSE
3987 --if this task is linking to a working structure version
3988 --then do not copy
3989
3990 --Added by rtarway for bug 4193990
3991 l_working_ver_fg := 'N';
3992
3993 OPEN get_to_id(l_task_versions_rec.element_version_id);
3994 FETCH get_to_id INTO l_to_object_info;
3995 IF get_to_id%FOUND THEN
3996 --check if this is working version
3997 IF (pa_project_structure_utils.check_struc_ver_published(l_to_object_info.object_id_to2 ,l_to_object_info.object_id_to)
3998 = 'N') THEN
3999 l_working_ver_fg := 'Y';
4000 ELSE
4001 l_working_ver_fg := 'N';
4002 END IF;
4003 --Added by rtarway for bug 4193990
4004 ELSE
4005 l_working_ver_fg := 'N';
4006 --End Added by rtarway for bug 4193990
4007 END IF;
4008 CLOSE get_to_id;
4009
4010 IF (l_working_ver_fg = 'Y') THEN
4011 l_create_task_ver_flag := 'N';
4012 IF (l_last_wbs_level is NULL) THEN
4013 l_parent_tbl(l_new_struct_ver_id) := l_new_struct_ver_id;
4014 --l_parent_ver_id := l_new_struct_ver_id;
4015 ELSE
4016 IF (l_task_versions_rec.wbs_level > l_last_wbs_level) THEN
4017 l_parent_tbl(l_outline_task_ref(l_last_wbs_level)) := l_outline_task_ref(l_last_wbs_level);
4018 --l_parent_ver_id := l_outline_task_ref(l_last_wbs_level);
4019 ELSE
4020 OPEN get_parent_id(l_outline_task_ref(l_task_versions_rec.wbs_level));
4021 FETCH get_parent_id into l_parent_ver_id;
4022 CLOSE get_parent_id;
4023 l_parent_tbl(l_parent_ver_id) := l_parent_ver_id;
4024 END IF;
4025 END IF;
4026 ELSE --copy
4027 update pa_proj_element_versions
4028 set TASK_UNPUB_VER_STATUS_CODE = 'PUBLISHED'
4029 where element_version_id = l_task_versions_rec.element_version_id;
4030 END IF;
4031 END IF;
4032
4033 --maansari
4034 l_src_tasks_versions_tbl(i).src_task_version_id := l_task_versions_rec.element_version_id;
4035 l_src_tasks_versions_tbl(i).src_version_status := l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE;
4036 l_src_tasks_versions_tbl(i).src_parent_task_version_id := l_parent_ver_id;
4037 l_src_tasks_versions_tbl(i).copy_flag := l_create_task_ver_flag;
4038 i := i + 1;
4039 --maansari
4040
4041 /*--maansari --commenting out the following code and replacing it with bulk insert
4042 IF (l_create_task_ver_flag = 'Y') THEN
4043 --dbms_output.put_line('creating task '||l_task_versions_rec.proj_element_id||', '||l_task_versions_rec.element_version_id);
4044 if l_last_wbs_level is null then
4045 -- first task version being created
4046 -- This task should have wbs level = 1
4047 l_ref_task_ver_id := l_new_struct_ver_id;
4048 l_peer_or_sub := 'SUB';
4049 else
4050 if l_task_versions_rec.wbs_level > l_last_wbs_level then
4051 l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
4052 l_peer_or_sub := 'SUB';
4053 else
4054 l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
4055 l_peer_or_sub := 'PEER';
4056 end if;
4057 end if;
4058 --dbms_output.put_line('l_ref_task_ver_id = '||l_ref_task_ver_id);
4059 --dbms_output.put_line('l_peer_or_sub = '||l_peer_or_sub);
4060 --dbms_output.put_line('parent_element_version_id = '||l_task_versions_rec.parent_element_version_id);
4061 --Bug 2189657
4062 --Added for linking tasks with no display sequence.
4063 --Set correct reference and parent element version id
4064 If (l_task_versions_rec.display_sequence IS NULL) THEN
4065 IF (l_ref_task_ver_id <> l_new_struct_ver_id) THEN
4066 --A task has already been created. Reference task must be a task
4067 IF (l_task_versions_rec.parent_element_version_id = p_structure_version_id) THEN
4068 --this is a link to the structure version. A task has already been created.
4069 --need to use a top level task as peer reference task
4070 l_peer_or_sub := 'PEER';
4071 l_ref_task_ver_id := l_outline_task_ref(1);
4072 ELSE
4073 --this is a link to a task.
4074 l_peer_or_sub := 'SUB';
4075 l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
4076 END IF;
4077 ELSE
4078 --No task has been created. Reference task is structure
4079 l_peer_or_sub := 'SUB';
4080 l_ref_task_ver_id := l_new_struct_ver_id;
4081 -- l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
4082 END IF;
4083 END IF;
4084 --dbms_output.put_line('l_ref_task_ver_id = '||l_ref_task_ver_id);
4085 --dbms_output.put_line('l_peer_or_sub = '||l_peer_or_sub);
4086
4087 OPEN get_task_ver_weighting(l_task_versions_rec.element_version_id);
4088 FETCH get_task_ver_weighting into l_weighting_percentage;
4089 CLOSE get_task_ver_weighting;
4090
4091 --Bug 2189657 end;
4092 PA_TASK_PVT1.CREATE_TASK_VERSION
4093 ( p_validate_only => FND_API.G_FALSE
4094 ,p_validation_level => 0
4095 ,p_ref_task_version_id => l_ref_task_ver_id
4096 ,p_peer_or_sub => l_peer_or_sub
4097 ,p_task_id => l_task_versions_rec.proj_element_id
4098 ,p_WEIGHTING_PERCENTAGE => l_weighting_percentage
4099 ,p_TASK_UNPUB_VER_STATUS_CODE => 'PUBLISHED'
4100 ,x_task_version_id => l_task_version_id
4101 ,x_return_status => l_return_status
4102 ,x_msg_count => l_msg_count
4103 ,x_msg_data => l_msg_data);
4104
4105 t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
4106 --dbms_output.put_line('elem_ver_id = '||l_task_versions_rec.element_version_id||', new elem_ver_id = '||l_task_version_id);
4107
4108 --dbms_output.put_line('ref/peer = '||l_ref_task_ver_id||'/'||l_peer_or_sub||'elm Id = '||l_task_versions_rec.proj_element_id||', elm ver Id = '||l_task_version_id);
4109
4110 --dbms_output.put_line('new task version id = '||l_task_version_id);
4111
4112 -- error_msg('done create_task_version '||l_msg_count||', '||l_msg_data);
4113 --Check if there is any error.
4114 l_msg_count := FND_MSG_PUB.count_msg;
4115 IF l_msg_count > 0 THEN
4116 x_msg_count := l_msg_count;
4117 IF x_msg_count = 1 THEN
4118 x_msg_data := l_msg_data;
4119 END IF;
4120 --dbms_output.put_line('close get_task_versions_csr');
4121 CLOSE get_task_versions_csr;
4122 RAISE FND_API.G_EXC_ERROR;
4123 END IF;
4124 */ --maansari
4125
4126
4127 -- error_msg('before update published links');
4128 --update links linking from working version to current published version
4129 -- IF (p_debug_mode = 'Y') THEN
4130 -- pa_debug.debug('updating links');
4131 -- END IF;
4132 -- PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS
4133 -- (
4134 -- p_init_msg_list => FND_API.G_FALSE
4135 -- ,p_commit => FND_API.G_FALSE
4136 -- ,p_debug_mode => p_debug_mode
4137 -- ,p_orig_project_id => l_project_id
4138 -- ,p_orig_structure_id => l_proj_element_id
4139 -- ,p_orig_struc_ver_id => p_structure_version_id
4140 -- ,p_orig_task_ver_id => l_task_versions_rec.element_version_id
4141 -- ,p_new_project_id => l_project_id
4142 -- ,p_new_structure_id => l_struc_ver_rec.proj_element_id
4143 -- ,p_new_struc_ver_id => l_new_struct_ver_id
4144 -- ,p_new_task_ver_id => l_task_version_id
4145 -- ,x_return_status => l_return_status
4146 -- ,x_msg_count => l_msg_count
4147 -- ,x_msg_data => l_msg_data
4148 -- );
4149 -- error_msg('update latest published links');
4150
4151 --Check if there is any error.
4152 -- l_msg_count := FND_MSG_PUB.count_msg;
4153 -- IF l_msg_count > 0 THEN
4154 -- x_msg_count := l_msg_count;
4155 -- IF x_msg_count = 1 THEN
4156 -- x_msg_data := l_msg_data;
4157 -- END IF;
4158 --dbms_output.put_line('close get_task_versions_csr');
4159 -- CLOSE get_task_versions_csr;
4160 -- RAISE FND_API.G_EXC_ERROR;
4161 -- END IF;
4162
4163
4164 --Search for incoming links; update existing links
4165 --dbms_output.put_line('open get_from_id');
4166 -- OPEN get_from_id(l_task_versions_rec.element_version_id);
4167 -- LOOP
4168 -- FETCH get_from_id INTO l_from_object_info;
4169 -- EXIT WHEN get_from_id%NOTFOUND;
4170 -- IF (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
4171 --dbms_output.put_line('open get_structure_version_info');
4172 -- OPEN get_structure_version_info(l_from_object_info.object_id_from);
4173 -- FETCH get_structure_version_info INTO l_info_struc_ver_rec;
4174 -- PA_RELATIONSHIP_PVT.Update_Relationship(
4175 -- p_init_msg_list => FND_API.G_FALSE
4176 -- ,p_commit => FND_API.G_FALSE
4177 -- ,p_debug_mode => p_debug_mode
4178 -- ,p_object_relationship_id => l_from_object_info.object_relationship_id
4179 -- ,p_project_id_from => l_info_struc_ver_rec.project_id
4180 -- ,p_structure_id_from => l_info_struc_ver_rec.structure_id
4181 -- ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
4182 -- ,p_task_version_id_from => NULL
4183 -- ,p_project_id_to => l_project_id
4184 -- ,p_structure_id_to => l_struc_ver_rec.proj_element_id
4185 -- ,p_structure_version_id_to => l_new_struct_ver_id
4186 -- ,p_task_version_id_to => l_task_version_id
4187 -- ,p_relationship_type => 'L'
4188 -- ,p_relationship_subtype => 'READ_WRITE'
4189 -- ,p_record_version_number => l_from_object_info.record_version_number
4190 -- ,x_return_status => l_return_status
4191 -- ,x_msg_count => l_msg_count
4192 -- ,x_msg_data => l_msg_data
4193 -- );
4194 --dbms_output.put_line('Incoming: From '||l_info_struc_ver_rec.structure_version_id||' To '||l_task_version_id);
4195 --dbms_output.put_line('close get_structure_version_info');
4196 -- CLOSE get_structure_version_info;
4197 --
4198 -- ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
4199 --dbms_output.put_line('get_task_version_info');
4200 -- OPEN get_task_version_info(l_from_object_info.object_id_from);
4201 -- FETCH get_task_version_info INTO l_info_task_ver_rec;
4202 -- PA_RELATIONSHIP_PVT.Update_Relationship(
4203 -- p_init_msg_list => FND_API.G_FALSE
4204 -- ,p_commit => FND_API.G_FALSE
4205 -- ,p_debug_mode => p_debug_mode
4206 -- ,p_object_relationship_id => l_from_object_info.object_relationship_id
4207 -- ,p_project_id_from => l_info_task_ver_rec.project_id
4208 -- ,p_structure_id_from => l_info_task_ver_rec.structure_id
4209 -- ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
4210 -- ,p_task_version_id_from => l_info_task_ver_rec.task_version_id
4211 -- ,p_project_id_to => l_project_id
4212 -- ,p_structure_id_to => l_struc_ver_rec.proj_element_id
4213 -- ,p_structure_version_id_to => l_new_struct_ver_id
4214 -- ,p_task_version_id_to => l_task_version_id
4215 -- ,p_relationship_type => 'L'
4216 -- ,p_relationship_subtype => 'READ_WRITE'
4217 -- ,p_record_version_number => l_from_object_info.record_version_number
4218 -- ,x_return_status => l_return_status
4219 -- ,x_msg_count => l_msg_count
4220 -- ,x_msg_data => l_msg_data
4221 -- );
4222 --dbms_output.put_line('Incoming: From '||l_info_task_ver_rec.task_version_id||' To '||l_task_version_id);
4223 --dbms_output.put_line('close get_task_version_info');
4224 -- CLOSE get_task_version_info;
4225 -- END IF;
4226 --
4227 -- --Check error
4228 -- l_msg_count := FND_MSG_PUB.count_msg;
4229 -- if (l_msg_count > 0) then
4230 -- x_msg_count := l_msg_count;
4231 -- if x_msg_count = 1 then
4232 -- x_msg_data := l_msg_data;
4233 -- end if;
4234 --dbms_output.put_line('close get_task_versions_csr');
4235 -- CLOSE get_task_versions_csr;
4236 --dbms_output.put_line('close get_from_id');
4237 -- CLOSE get_from_id;
4238 -- raise FND_API.G_EXC_ERROR;
4239 -- end if;
4240
4241 -- END LOOP;
4242 --dbms_output.put_line('close get_from_id');
4243 -- CLOSE get_from_id;
4244
4245 --Search for outgoing links; create new Links
4246 --dbms_output.put_line('get_to_id');
4247 -- OPEN get_to_id(l_task_versions_rec.element_version_id);
4248 -- LOOP
4249 -- FETCH get_to_id INTO l_to_object_info;
4250 -- EXIT WHEN get_to_id%NOTFOUND;
4251 -- If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
4252 --dbms_output.put_line('get_structure_version_info');
4253 -- OPEN get_structure_version_info(l_to_object_info.object_id_to);
4254 -- FETCH get_structure_version_info INTO l_info_struc_ver_rec;
4255 /*****************************/
4256 --dbms_output.put_line('creating rel: task out going links for structures');
4257 --dbms_output.put_line(l_project_id||','||l_struc_ver_rec.proj_element_id||','||l_new_struct_ver_id||','||','||l_task_version_id||', TO: '
4258 --||l_info_struc_ver_rec.project_id||','||l_info_struc_ver_rec.structure_id||','||l_info_struc_ver_rec.structure_version_id);
4259 -- PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
4260 -- p_user_id => FND_GLOBAL.USER_ID
4261 -- ,p_object_type_from => 'PA_TASKS'
4262 -- ,p_object_id_from1 => l_task_version_id
4263 -- ,p_object_id_from2 => NULL
4264 -- ,p_object_id_from3 => NULL
4265 -- ,p_object_id_from4 => NULL
4266 -- ,p_object_id_from5 => NULL
4267 -- ,p_object_type_to => 'PA_STRUCTURES'
4268 -- ,p_object_id_to1 => l_info_struc_ver_rec.structure_version_id
4269 -- ,p_object_id_to2 => NULL
4270 -- ,p_object_id_to3 => NULL
4271 -- ,p_object_id_to4 => NULL
4272 -- ,p_object_id_to5 => NULL
4273 -- ,p_relationship_type => 'L'
4274 -- ,p_relationship_subtype => 'READ_WRITE'
4275 -- ,p_lag_day => NULL
4276 -- ,p_imported_lag => NULL
4277 -- ,p_priority => NULL
4278 -- ,p_pm_product_code => NULL
4279 -- ,x_object_relationship_id => l_new_obj_rel_id
4280 -- ,x_return_status => l_return_status
4281 -- );
4282 --dbms_output.put_line('Outgoing: From '||l_task_version_id||' To '||l_info_struc_ver_rec.structure_version_id);
4283
4284 /*****************************/
4285 --dbms_output.put_line('close get_structure_version_info');
4286 -- CLOSE get_structure_version_info;
4287
4288 -- ELSIF (l_to_object_info.object_type_to = 'PA_TASKS') THEN
4289 --dbms_output.put_line('open get_task_version_info');
4290 -- OPEN get_task_version_info(l_to_object_info.object_id_to);
4291 -- FETCH get_task_version_info INTO l_info_task_ver_rec;
4292 /*****************************/
4293 --dbms_output.put_line('creating rel: task out going links for tasks');
4294 -- PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
4295 -- p_user_id => FND_GLOBAL.USER_ID
4296 -- ,p_object_type_from => 'PA_TASKS'
4297 -- ,p_object_id_from1 => l_task_version_id
4298 -- ,p_object_id_from2 => NULL
4299 -- ,p_object_id_from3 => NULL
4300 -- ,p_object_id_from4 => NULL
4301 -- ,p_object_id_from5 => NULL
4302 -- ,p_object_type_to => 'PA_TASKS'
4303 -- ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
4304 -- ,p_object_id_to2 => NULL
4305 -- ,p_object_id_to3 => NULL
4306 -- ,p_object_id_to4 => NULL
4307 -- ,p_object_id_to5 => NULL
4308 -- ,p_relationship_type => 'L'
4309 -- ,p_relationship_subtype => 'READ_WRITE'
4310 -- ,p_lag_day => NULL
4311 -- ,p_imported_lag => NULL
4312 -- ,p_priority => NULL
4313 -- ,p_pm_product_code => NULL
4314 -- ,x_object_relationship_id => l_new_obj_rel_id
4315 -- ,x_return_status => l_return_status
4316 -- );
4317 --dbms_output.put_line('Outgoing: From '||l_task_version_id||' To '||l_info_task_ver_rec.task_version_id);
4318
4319 /*****************************/
4320 --dbms_output.put_line('close get_task_version_info');
4321 -- CLOSE get_task_version_info;
4322 --
4323 -- END IF;
4324 --
4325 --Check error
4326 -- l_msg_count := FND_MSG_PUB.count_msg;
4327 -- if (l_msg_count > 0) then
4328 -- x_msg_count := l_msg_count;
4329 -- if x_msg_count = 1 then
4330 -- x_msg_data := l_msg_data;
4331 -- end if;
4332 --dbms_output.put_line('close get_task_versions_csr');
4333 -- CLOSE get_task_versions_csr;
4334 --dbms_output.put_line('close get_to_id');
4335 -- CLOSE get_to_id;
4336 -- raise FND_API.G_EXC_ERROR;
4337 -- end if;
4338 --
4339 -- END LOOP;
4340 --dbms_output.put_line('close get_to_id');
4341 -- CLOSE get_to_id;
4342
4343
4344 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
4345 /* maansari
4346 IF (l_workplan_type = 'Y') THEN
4347 --dbms_output.put_line('open get_ver_schedule_attr_csr');
4348 OPEN get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id,
4349 l_task_versions_rec.project_id);
4350 FETCH get_ver_schedule_attr_csr INTO l_ver_sch_attr_rec;
4351 --dbms_output.put_line('close get_ver_schedule_attr_csr');
4352 CLOSE get_ver_schedule_attr_csr;
4353 */ --maansari
4354
4355
4356 /* hsiu: bug 2800553: commented for performance improvement
4357 -- xxlu added DFF attributes
4358 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
4359 (p_validate_only => FND_API.G_FALSE
4360 ,p_element_version_id => l_task_version_id
4361 ,p_calendar_id => l_ver_sch_attr_rec.calendar_id
4362 ,p_scheduled_start_date => l_ver_sch_attr_rec.scheduled_start_date
4363 ,p_scheduled_end_date => l_ver_sch_attr_rec.scheduled_finish_date
4364 ,p_obligation_start_date => l_ver_sch_attr_rec.obligation_start_date
4365 ,p_obligation_end_date => l_ver_sch_attr_rec.obligation_finish_date
4366 ,p_actual_start_date => l_ver_sch_attr_rec.actual_start_date
4367 ,p_actual_finish_date => l_ver_sch_attr_rec.actual_finish_date
4368 ,p_estimate_start_date => l_ver_sch_attr_rec.estimated_start_date
4369 ,p_estimate_finish_date => l_ver_sch_attr_rec.estimated_finish_date
4370 ,p_duration => l_ver_sch_attr_rec.duration
4371 ,p_early_start_date => l_ver_sch_attr_rec.early_start_date
4372 ,p_early_end_date => l_ver_sch_attr_rec.early_finish_date
4373 ,p_late_start_date => l_ver_sch_attr_rec.late_start_date
4374 ,p_late_end_date => l_ver_sch_attr_rec.late_finish_date
4375 ,p_milestone_flag => l_ver_sch_attr_rec.milestone_flag
4376 ,p_critical_flag => l_ver_sch_attr_rec.critical_flag
4377 ,p_WQ_PLANNED_QUANTITY => l_ver_sch_attr_rec.WQ_PLANNED_QUANTITY
4378 ,p_PLANNED_EFFORT => l_ver_sch_attr_rec.PLANNED_EFFORT
4379 ,p_attribute_category => l_ver_sch_attr_rec.attribute_category
4380 ,p_attribute1 => l_ver_sch_attr_rec.attribute1
4381 ,p_attribute2 => l_ver_sch_attr_rec.attribute2
4382 ,p_attribute3 => l_ver_sch_attr_rec.attribute3
4383 ,p_attribute4 => l_ver_sch_attr_rec.attribute4
4384 ,p_attribute5 => l_ver_sch_attr_rec.attribute5
4385 ,p_attribute6 => l_ver_sch_attr_rec.attribute6
4386 ,p_attribute7 => l_ver_sch_attr_rec.attribute7
4387 ,p_attribute8 => l_ver_sch_attr_rec.attribute8
4388 ,p_attribute9 => l_ver_sch_attr_rec.attribute9
4389 ,p_attribute10 => l_ver_sch_attr_rec.attribute10
4390 ,p_attribute11 => l_ver_sch_attr_rec.attribute11
4391 ,p_attribute12 => l_ver_sch_attr_rec.attribute12
4392 ,p_attribute13 => l_ver_sch_attr_rec.attribute13
4393 ,p_attribute14 => l_ver_sch_attr_rec.attribute14
4394 ,p_attribute15 => l_ver_sch_attr_rec.attribute15
4395 ,x_pev_schedule_id => l_pev_schedule_id
4396 ,x_return_status => l_return_status
4397 ,x_msg_count => l_msg_count
4398 ,x_msg_data => l_msg_data );
4399 -- end xxlu changes
4400 */
4401 --hsiu: bug 2800553: added for performance improvement
4402 /* maansari commenting the following code and replacing it with bulk insert
4403 l_new_pev_schedule_id := NULL;
4404 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
4405 X_ROW_ID => X_Row_Id
4406 ,X_PEV_SCHEDULE_ID => l_new_pev_schedule_id
4407 ,X_ELEMENT_VERSION_ID => l_task_version_id
4408 ,X_PROJECT_ID => l_ver_sch_attr_rec.PROJECT_ID
4409 ,X_PROJ_ELEMENT_ID => l_ver_sch_attr_rec.PROJ_ELEMENT_ID
4410 ,X_SCHEDULED_START_DATE => l_ver_sch_attr_rec.SCHEDULED_START_DATE
4411 ,X_SCHEDULED_FINISH_DATE => l_ver_sch_attr_rec.SCHEDULED_FINISH_DATE
4412 ,X_OBLIGATION_START_DATE => l_ver_sch_attr_rec.OBLIGATION_START_DATE
4413 ,X_OBLIGATION_FINISH_DATE => l_ver_sch_attr_rec.OBLIGATION_FINISH_DATE
4414 ,X_ACTUAL_START_DATE => l_ver_sch_attr_rec.ACTUAL_START_DATE
4415 ,X_ACTUAL_FINISH_DATE => l_ver_sch_attr_rec.ACTUAL_FINISH_DATE
4416 ,X_ESTIMATED_START_DATE => l_ver_sch_attr_rec.ESTIMATED_START_DATE
4417 ,X_ESTIMATED_FINISH_DATE => l_ver_sch_attr_rec.ESTIMATED_FINISH_DATE
4418 ,X_DURATION => l_ver_sch_attr_rec.DURATION
4419 ,X_EARLY_START_DATE => l_ver_sch_attr_rec.EARLY_START_DATE
4420 ,X_EARLY_FINISH_DATE => l_ver_sch_attr_rec.EARLY_FINISH_DATE
4421 ,X_LATE_START_DATE => l_ver_sch_attr_rec.LATE_START_DATE
4422 ,X_LATE_FINISH_DATE => l_ver_sch_attr_rec.LATE_FINISH_DATE
4423 ,X_CALENDAR_ID => l_ver_sch_attr_rec.CALENDAR_ID
4424 ,X_MILESTONE_FLAG => l_ver_sch_attr_rec.MILESTONE_FLAG
4425 ,X_CRITICAL_FLAG => l_ver_sch_attr_rec.CRITICAL_FLAG
4426 ,X_WQ_PLANNED_QUANTITY => l_ver_sch_attr_rec.wq_planned_quantity
4427 ,X_PLANNED_EFFORT => l_ver_sch_attr_rec.planned_effort
4428 ,X_ACTUAL_DURATION => l_ver_sch_attr_rec.actual_duration
4429 ,X_ESTIMATED_DURATION => l_ver_sch_attr_rec.estimated_duration
4430 ,X_ATTRIBUTE_CATEGORY => l_ver_sch_attr_rec.ATTRIBUTE_CATEGORY
4431 ,X_ATTRIBUTE1 => l_ver_sch_attr_rec.ATTRIBUTE1
4432 ,X_ATTRIBUTE2 => l_ver_sch_attr_rec.ATTRIBUTE2
4433 ,X_ATTRIBUTE3 => l_ver_sch_attr_rec.ATTRIBUTE3
4434 ,X_ATTRIBUTE4 => l_ver_sch_attr_rec.ATTRIBUTE4
4435 ,X_ATTRIBUTE5 => l_ver_sch_attr_rec.ATTRIBUTE5
4436 ,X_ATTRIBUTE6 => l_ver_sch_attr_rec.ATTRIBUTE6
4437 ,X_ATTRIBUTE7 => l_ver_sch_attr_rec.ATTRIBUTE7
4438 ,X_ATTRIBUTE8 => l_ver_sch_attr_rec.ATTRIBUTE8
4439 ,X_ATTRIBUTE9 => l_ver_sch_attr_rec.ATTRIBUTE9
4440 ,X_ATTRIBUTE10 => l_ver_sch_attr_rec.ATTRIBUTE10
4441 ,X_ATTRIBUTE11 => l_ver_sch_attr_rec.ATTRIBUTE11
4442 ,X_ATTRIBUTE12 => l_ver_sch_attr_rec.ATTRIBUTE12
4443 ,X_ATTRIBUTE13 => l_ver_sch_attr_rec.ATTRIBUTE13
4444 ,X_ATTRIBUTE14 => l_ver_sch_attr_rec.ATTRIBUTE14
4445 ,X_ATTRIBUTE15 => l_ver_sch_attr_rec.ATTRIBUTE15
4446 ,X_SOURCE_OBJECT_ID => l_ver_sch_attr_rec.PROJECT_ID
4447 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
4448 );
4449
4450 --Check if there is any error.
4451 l_msg_count := FND_MSG_PUB.count_msg;
4452 IF l_msg_count > 0 THEN
4453 x_msg_count := l_msg_count;
4454 IF x_msg_count = 1 THEN
4455 x_msg_data := l_msg_data;
4456 END IF;
4457 --dbms_output.put_line('close get_task_versions_csr');
4458 CLOSE get_task_versions_csr;
4459 RAISE FND_API.G_EXC_ERROR;
4460 END IF;
4461 END IF;
4462
4463 l_last_wbs_level := l_task_versions_rec.wbs_level;
4464 l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;
4465
4466 --hsiu added for task version status
4467 --label for not adding the task version in the published structure version.
4468 END IF; --for l_create_task_ver_flag
4469 */ --maansari
4470
4471 END LOOP;
4472 --dbms_output.put_line('close get_task_versions_csr');
4473 CLOSE get_task_versions_csr;
4474
4475 --hsiu
4476 --changes for task status
4477 --tasks might be deleted because childs are also deleted when deleting
4478 -- a task
4479 l_del_task_cnt := 0;
4480 LOOP
4481
4482 -- Bug # 4691749.
4483 -- EXIT when l_del_task_cnt = l_tbd_task_ver_id.count;
4484 EXIT when l_del_task_cnt = l_tbd_index;
4485 -- Bug # 4691749.
4486
4487 l_del_task_cnt := l_del_task_cnt + 1;
4488
4489 OPEN get_tbd_tasks_info(l_tbd_task_ver_id(l_del_task_cnt));
4490 FETCH get_tbd_tasks_info into l_tbd_tasks_info_rec;
4491 IF get_tbd_tasks_info%FOUND THEN
4492 PA_TASK_PVT1.Delete_Task_Ver_wo_val(
4493 p_structure_version_id => l_tbd_tasks_info_rec.parent_structure_version_id
4494 ,p_task_version_id => l_tbd_tasks_info_rec.element_version_id
4495 ,p_record_version_number => l_tbd_tasks_info_rec.record_version_number
4496 ,x_return_status => l_return_status
4497 ,x_msg_count => l_msg_count
4498 ,x_msg_data => l_msg_data
4499 );
4500
4501 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4502 x_msg_count := FND_MSG_PUB.count_msg;
4503 if x_msg_count = 1 then
4504 x_msg_data := l_msg_data;
4505 end if;
4506 raise FND_API.G_EXC_ERROR;
4507 end if;
4508
4509 END IF;
4510 CLOSE get_tbd_tasks_info;
4511 END LOOP;
4512 --end changes for task status
4513
4514
4515 --hsiu: create schedule row for structure version after delete so that dates are rolledup properly.
4516 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
4517 IF (l_workplan_type = 'Y') THEN
4518 --Get Schedule Version Info, if workplan type
4519 --dbms_output.put_line('9');
4520 --dbms_output.put_line('open get_ver_schedule_attr_csr');
4521 OPEN get_ver_schedule_attr_csr(p_structure_version_id, l_project_id);
4522 FETCH get_ver_schedule_attr_csr INTO l_ver_sch_attr_rec;
4523 --dbms_output.put_line('close get_ver_schedule_attr_csr');
4524 CLOSE get_ver_schedule_attr_csr;
4525 --dbms_output.put_line('10b');
4526
4527 IF (p_debug_mode = 'Y') THEN
4528 pa_debug.debug('create schedule version for struct');
4529 END IF;
4530 --Call Create_Schedule_Version if workplan type
4531 /* hsiu: bug 2800553: commented for performance improvement
4532 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
4533 ( p_validate_only => FND_API.G_FALSE
4534 ,p_element_version_id => l_new_struct_ver_id
4535 ,p_calendar_id => l_ver_sch_attr_rec.calendar_id
4536 ,p_scheduled_start_date => l_ver_sch_attr_rec.scheduled_start_date
4537 ,p_scheduled_end_date => l_ver_sch_attr_rec.scheduled_finish_date
4538 ,p_obligation_start_date => l_ver_sch_attr_rec.obligation_start_date
4539 ,p_obligation_end_date => l_ver_sch_attr_rec.obligation_finish_date
4540 ,p_actual_start_date => l_ver_sch_attr_rec.actual_start_date
4541 ,p_actual_finish_date => l_ver_sch_attr_rec.actual_finish_date
4542 ,p_estimate_start_date => l_ver_sch_attr_rec.estimated_start_date
4543 ,p_estimate_finish_date => l_ver_sch_attr_rec.estimated_finish_date
4544 ,p_duration => l_ver_sch_attr_rec.duration
4545 ,p_early_start_date => l_ver_sch_attr_rec.early_start_date
4546 ,p_early_end_date => l_ver_sch_attr_rec.early_finish_date
4547 ,p_late_start_date => l_ver_sch_attr_rec.late_start_date
4548 ,p_late_end_date => l_ver_sch_attr_rec.late_finish_date
4549 ,p_milestone_flag => l_ver_sch_attr_rec.milestone_flag
4550 ,p_critical_flag => l_ver_sch_attr_rec.critical_flag
4551 ,p_WQ_PLANNED_QUANTITY => l_ver_sch_attr_rec.WQ_PLANNED_QUANTITY
4552 ,p_PLANNED_EFFORT => l_ver_sch_attr_rec.PLANNED_EFFORT
4553 ,x_pev_schedule_id => l_new_pev_schedule_id
4554 ,x_return_status => l_return_status
4555 ,x_msg_count => l_msg_count
4556 ,x_msg_data => l_msg_data );
4557 */
4558 --hsiu: bug 2800553: added for performance improvement
4559 l_new_pev_schedule_id := NULL;
4560 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
4561 X_ROW_ID => X_Row_Id
4562 ,X_PEV_SCHEDULE_ID => l_new_pev_schedule_id
4563 ,X_ELEMENT_VERSION_ID => l_new_struct_ver_id
4564 ,X_PROJECT_ID => l_ver_sch_attr_rec.PROJECT_ID
4565 ,X_PROJ_ELEMENT_ID => l_ver_sch_attr_rec.PROJ_ELEMENT_ID
4566 ,X_SCHEDULED_START_DATE => l_ver_sch_attr_rec.SCHEDULED_START_DATE
4567 ,X_SCHEDULED_FINISH_DATE => l_ver_sch_attr_rec.SCHEDULED_FINISH_DATE
4568 ,X_OBLIGATION_START_DATE => l_ver_sch_attr_rec.OBLIGATION_START_DATE
4569 ,X_OBLIGATION_FINISH_DATE => l_ver_sch_attr_rec.OBLIGATION_FINISH_DATE
4570 ,X_ACTUAL_START_DATE => l_ver_sch_attr_rec.ACTUAL_START_DATE
4571 ,X_ACTUAL_FINISH_DATE => l_ver_sch_attr_rec.ACTUAL_FINISH_DATE
4572 ,X_ESTIMATED_START_DATE => l_ver_sch_attr_rec.ESTIMATED_START_DATE
4573 ,X_ESTIMATED_FINISH_DATE => l_ver_sch_attr_rec.ESTIMATED_FINISH_DATE
4574 ,X_DURATION => l_ver_sch_attr_rec.DURATION
4575 ,X_EARLY_START_DATE => l_ver_sch_attr_rec.EARLY_START_DATE
4576 ,X_EARLY_FINISH_DATE => l_ver_sch_attr_rec.EARLY_FINISH_DATE
4577 ,X_LATE_START_DATE => l_ver_sch_attr_rec.LATE_START_DATE
4578 ,X_LATE_FINISH_DATE => l_ver_sch_attr_rec.LATE_FINISH_DATE
4579 ,X_CALENDAR_ID => l_ver_sch_attr_rec.CALENDAR_ID
4580 ,X_MILESTONE_FLAG => l_ver_sch_attr_rec.MILESTONE_FLAG
4581 ,X_CRITICAL_FLAG => l_ver_sch_attr_rec.CRITICAL_FLAG
4582 ,X_WQ_PLANNED_QUANTITY => l_ver_sch_attr_rec.wq_planned_quantity
4583 ,X_PLANNED_EFFORT => l_ver_sch_attr_rec.planned_effort
4584 ,X_ACTUAL_DURATION => l_ver_sch_attr_rec.actual_duration
4585 ,X_ESTIMATED_DURATION => l_ver_sch_attr_rec.estimated_duration
4586 ,X_ATTRIBUTE_CATEGORY => l_ver_sch_attr_rec.ATTRIBUTE_CATEGORY
4587 ,X_ATTRIBUTE1 => l_ver_sch_attr_rec.ATTRIBUTE1
4588 ,X_ATTRIBUTE2 => l_ver_sch_attr_rec.ATTRIBUTE2
4589 ,X_ATTRIBUTE3 => l_ver_sch_attr_rec.ATTRIBUTE3
4590 ,X_ATTRIBUTE4 => l_ver_sch_attr_rec.ATTRIBUTE4
4591 ,X_ATTRIBUTE5 => l_ver_sch_attr_rec.ATTRIBUTE5
4592 ,X_ATTRIBUTE6 => l_ver_sch_attr_rec.ATTRIBUTE6
4593 ,X_ATTRIBUTE7 => l_ver_sch_attr_rec.ATTRIBUTE7
4594 ,X_ATTRIBUTE8 => l_ver_sch_attr_rec.ATTRIBUTE8
4595 ,X_ATTRIBUTE9 => l_ver_sch_attr_rec.ATTRIBUTE9
4596 ,X_ATTRIBUTE10 => l_ver_sch_attr_rec.ATTRIBUTE10
4597 ,X_ATTRIBUTE11 => l_ver_sch_attr_rec.ATTRIBUTE11
4598 ,X_ATTRIBUTE12 => l_ver_sch_attr_rec.ATTRIBUTE12
4599 ,X_ATTRIBUTE13 => l_ver_sch_attr_rec.ATTRIBUTE13
4600 ,X_ATTRIBUTE14 => l_ver_sch_attr_rec.ATTRIBUTE14
4601 ,X_ATTRIBUTE15 => l_ver_sch_attr_rec.ATTRIBUTE15
4602 ,X_SOURCE_OBJECT_ID => l_ver_sch_attr_rec.PROJECT_ID
4603 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
4604 );
4605
4606
4607 --Check if there is any error.
4608 l_msg_count := FND_MSG_PUB.count_msg;
4609 IF l_msg_count > 0 THEN
4610 x_msg_count := l_msg_count;
4611 IF x_msg_count = 1 THEN
4612 x_msg_data := l_msg_data;
4613 END IF;
4614 RAISE FND_API.G_EXC_ERROR;
4615 END IF;
4616
4617 END IF;
4618
4619
4620 --maansari
4621 --clear up global array
4622 PA_STRUCT_UPGR_PUB.clear_globals;
4623
4624 INSERT INTO pa_proj_element_versions(
4625 ELEMENT_VERSION_ID
4626 ,PROJ_ELEMENT_ID
4627 ,OBJECT_TYPE
4628 ,PROJECT_ID
4629 ,PARENT_STRUCTURE_VERSION_ID
4630 ,DISPLAY_SEQUENCE
4631 ,WBS_LEVEL
4632 ,WBS_NUMBER
4633 ,CREATION_DATE
4634 ,CREATED_BY
4635 ,LAST_UPDATE_DATE
4636 ,LAST_UPDATED_BY
4637 ,LAST_UPDATE_LOGIN
4638 ,RECORD_VERSION_NUMBER
4639 ,ATTRIBUTE_CATEGORY
4640 ,ATTRIBUTE1
4641 ,ATTRIBUTE2
4642 ,ATTRIBUTE3
4643 ,ATTRIBUTE4
4644 ,ATTRIBUTE5
4645 ,ATTRIBUTE6
4646 ,ATTRIBUTE7
4647 ,ATTRIBUTE8
4648 ,ATTRIBUTE9
4649 ,ATTRIBUTE10
4650 ,ATTRIBUTE11
4651 ,ATTRIBUTE12
4652 ,ATTRIBUTE13
4653 ,ATTRIBUTE14
4654 ,TASK_UNPUB_VER_STATUS_CODE
4655 ,attribute15 --this column is used to store structure ver id of the source str to be used to created relationships.
4656 ,source_object_id
4657 ,source_object_type
4658 ,financial_task_flag
4659 )
4660 SELECT
4661 pa_proj_element_versions_s.nextval
4662 ,ppev.proj_element_id
4663 ,ppev.object_type
4664 ,l_project_id
4665 ,l_new_struct_ver_id
4666 ,PA_STRUCT_UPGR_PUB.get_disp_sequence(ppev.display_sequence)
4667 ,ppev.WBS_LEVEL
4668 ,PA_STRUCT_UPGR_PUB.get_wbs_number(ppev.WBS_LEVEL, NULL) -- Bug No. 4049574
4669 ,SYSDATE
4670 ,l_user_id
4671 ,SYSDATE
4672 ,l_user_id
4673 ,l_login_id
4674 ,ppev.RECORD_VERSION_NUMBER
4675 ,ppev.ATTRIBUTE_CATEGORY
4676 ,ppev.ATTRIBUTE1
4677 ,ppev.ATTRIBUTE2
4678 ,ppev.ATTRIBUTE3
4679 ,ppev.ATTRIBUTE4
4680 ,ppev.ATTRIBUTE5
4681 ,ppev.ATTRIBUTE6
4682 ,ppev.ATTRIBUTE7
4683 ,ppev.ATTRIBUTE8
4684 ,ppev.ATTRIBUTE9
4685 ,ppev.ATTRIBUTE10
4686 ,ppev.ATTRIBUTE11
4687 ,ppev.ATTRIBUTE12
4688 ,ppev.ATTRIBUTE13
4689 ,ppev.ATTRIBUTE14
4690 ,ppev.TASK_UNPUB_VER_STATUS_CODE
4691 ,ppev.element_version_id
4692 ,l_project_id
4693 ,'PA_PROJECTS'
4694 ,ppev.financial_task_flag
4695 FROM ( SELECT * from pa_proj_element_versions ppev2
4696 --,pa_proj_elements ppe --bug 4573340 commenting out this for bug 4578813
4697 WHERE --bug#3094283 ppev2.project_id = l_project_id
4698 ppev2.parent_structure_version_id = p_structure_version_id
4699 and ppev2.object_type = 'PA_TASKS'
4700 /*
4701 --bug 4573340
4702 and ppe.project_id = ppev2.project_id
4703 and ppe.proj_element_id = ppev2.proj_element_id
4704 and ppe.link_task_flag = 'N'
4705 --bug 4573340
4706 */
4707 and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( p_structure_version_id,
4708 ppev2.element_version_id ) = 'Y'
4709 order by ppev2.display_sequence ) ppev
4710 ;
4711
4712 /* --cant write order by directly.
4713 FROM pa_proj_element_versions ppev
4714 WHERE ppev.project_id = l_project_id
4715 and ppev.parent_structure_version_id = p_structure_version_id
4716 and ppev.object_type = 'PA_TASKS'
4717 and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( p_structure_version_id,
4718 ppev.element_version_id ) = 'Y'
4719 order by ppev.display_sequence
4720 ;
4721 */
4722
4723 -- Bug 4205167 : Added hint to use Hash Join
4724 INSERT INTO PA_OBJECT_RELATIONSHIPS (
4725 object_relationship_id,
4726 object_type_from,
4727 object_id_from1,
4728 object_type_to,
4729 object_id_to1,
4730 relationship_type,
4731 relationship_subtype,
4732 Record_Version_Number,
4733 CREATED_BY,
4734 CREATION_DATE,
4735 LAST_UPDATED_BY,
4736 LAST_UPDATE_DATE,
4737 LAST_UPDATE_LOGIN,
4738 weighting_percentage
4739 )
4740 SELECT /*+ USE_HASH(ppev2 ppev1)*/
4741 pa_object_relationships_s.nextval,
4742 pobj.object_type_from,
4743 ppev1.element_version_id,
4744 pobj.object_type_to,
4745 ppev2.element_version_id,
4746 pobj.relationship_type,
4747 pobj.relationship_subtype,
4748 pobj.Record_Version_Number,
4749 l_user_id,
4750 SYSDATE,
4751 l_user_id,
4752 SYSDATE,
4753 l_login_id,
4754 pobj.weighting_percentage
4755 FROM ( SELECT object_type_from, object_id_from1,
4756 object_type_to, object_id_to1,
4757 relationship_type, relationship_subtype,
4758 Record_Version_Number, weighting_percentage
4759 FROM pa_object_relationships
4760 --bug#3094283 WHERE RELATIONSHIP_TYPE = 'S'
4761 start with object_id_from1 = p_structure_version_id
4762 and RELATIONSHIP_TYPE = 'S' /* Bug 2881667 - Added this condition */
4763 connect by object_id_from1 = prior object_id_to1
4764 and RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 - Added this condition */
4765 pa_proj_element_versions ppev1,
4766 pa_proj_element_versions ppev2
4767 WHERE
4768 --bug#3094283 ppev1.project_id = l_project_id
4769 ppev1.attribute15 = pobj.object_id_from1
4770 --bug#3094283 AND ppev2.project_id = l_project_id
4771 AND ppev2.attribute15 = pobj.object_id_to1
4772 and ppev1.parent_structure_version_id = l_new_struct_ver_id
4773 and ppev2.parent_structure_version_id = l_new_struct_ver_id
4774 ;
4775
4776
4777 INSERT INTO pa_proj_elem_ver_schedule(
4778 PEV_SCHEDULE_ID
4779 ,ELEMENT_VERSION_ID
4780 ,PROJECT_ID
4781 ,PROJ_ELEMENT_ID
4782 ,CREATION_DATE
4783 ,CREATED_BY
4784 ,LAST_UPDATE_DATE
4785 ,LAST_UPDATED_BY
4786 ,SCHEDULED_START_DATE
4787 ,SCHEDULED_FINISH_DATE
4788 ,OBLIGATION_START_DATE
4789 ,OBLIGATION_FINISH_DATE
4790 ,ACTUAL_START_DATE
4791 ,ACTUAL_FINISH_DATE
4792 ,ESTIMATED_START_DATE
4793 ,ESTIMATED_FINISH_DATE
4794 ,DURATION
4795 ,EARLY_START_DATE
4796 ,EARLY_FINISH_DATE
4797 ,LATE_START_DATE
4798 ,LATE_FINISH_DATE
4799 ,CALENDAR_ID
4800 ,MILESTONE_FLAG
4801 ,CRITICAL_FLAG
4802 ,RECORD_VERSION_NUMBER
4803 ,LAST_UPDATE_LOGIN
4804 ,WQ_PLANNED_QUANTITY
4805 ,PLANNED_EFFORT
4806 ,ACTUAL_DURATION
4807 ,ESTIMATED_DURATION
4808 ,ATTRIBUTE_CATEGORY
4809 ,ATTRIBUTE1
4810 ,ATTRIBUTE2
4811 ,ATTRIBUTE3
4812 ,ATTRIBUTE4
4813 ,ATTRIBUTE5
4814 ,ATTRIBUTE6
4815 ,ATTRIBUTE7
4816 ,ATTRIBUTE8
4817 ,ATTRIBUTE9
4818 ,ATTRIBUTE10
4819 ,ATTRIBUTE11
4820 ,ATTRIBUTE12
4821 ,ATTRIBUTE13
4822 ,ATTRIBUTE14
4823 ,ATTRIBUTE15
4824 ,source_object_id
4825 ,source_object_type
4826 ,CONSTRAINT_TYPE_CODE
4827 ,CONSTRAINT_DATE
4828 ,FREE_SLACK
4829 ,TOTAL_SLACK
4830 ,EFFORT_DRIVEN_FLAG
4831 ,LEVEL_ASSIGNMENTS_FLAG
4832 ,EXT_ACT_DURATION
4833 ,EXT_REMAIN_DURATION
4834 ,EXT_SCH_DURATION
4835 ,DEF_SCH_TOOL_TSK_TYPE_CODE -- 4295770 Added
4836 )
4837 SELECT
4838 pa_proj_elem_ver_schedule_s.nextval
4839 ,ppev1.ELEMENT_VERSION_ID
4840 ,l_PROJECT_ID
4841 ,ppev1.PROJ_ELEMENT_ID
4842 ,SYSDATE
4843 ,l_user_id
4844 ,SYSDATE
4845 ,l_user_id
4846 ,ppevs.SCHEDULED_START_DATE
4847 ,ppevs.SCHEDULED_FINISH_DATE
4848 ,ppevs.OBLIGATION_START_DATE
4849 ,ppevs.OBLIGATION_FINISH_DATE
4850 ,ppevs.ACTUAL_START_DATE
4851 ,ppevs.ACTUAL_FINISH_DATE
4852 ,ppevs.ESTIMATED_START_DATE
4853 ,ppevs.ESTIMATED_FINISH_DATE
4854 ,ppevs.DURATION
4855 ,ppevs.EARLY_START_DATE
4856 ,ppevs.EARLY_FINISH_DATE
4857 ,ppevs.LATE_START_DATE
4858 ,ppevs.LATE_FINISH_DATE
4859 ,ppevs.CALENDAR_ID
4860 ,ppevs.MILESTONE_FLAG
4861 ,ppevs.CRITICAL_FLAG
4862 ,ppevs.RECORD_VERSION_NUMBER
4863 ,l_login_id
4864 ,ppevs.WQ_PLANNED_QUANTITY
4865 ,ppevs.PLANNED_EFFORT
4866 ,ppevs.ACTUAL_DURATION
4867 ,ppevs.ESTIMATED_DURATION
4868 ,ppevs.ATTRIBUTE_CATEGORY
4869 ,ppevs.ATTRIBUTE1
4870 ,ppevs.ATTRIBUTE2
4871 ,ppevs.ATTRIBUTE3
4872 ,ppevs.ATTRIBUTE4
4873 ,ppevs.ATTRIBUTE5
4874 ,ppevs.ATTRIBUTE6
4875 ,ppevs.ATTRIBUTE7
4876 ,ppevs.ATTRIBUTE8
4877 ,ppevs.ATTRIBUTE9
4878 ,ppevs.ATTRIBUTE10
4879 ,ppevs.ATTRIBUTE11
4880 ,ppevs.ATTRIBUTE12
4881 ,ppevs.ATTRIBUTE13
4882 ,ppevs.ATTRIBUTE14
4883 ,ppevs.ATTRIBUTE15
4884 ,l_PROJECT_ID
4885 ,'PA_PROJECTS'
4886 ,ppevs.CONSTRAINT_TYPE_CODE
4887 ,ppevs.CONSTRAINT_DATE
4888 ,ppevs.FREE_SLACK
4889 ,ppevs.TOTAL_SLACK
4890 ,ppevs.EFFORT_DRIVEN_FLAG
4891 ,ppevs.LEVEL_ASSIGNMENTS_FLAG
4892 ,ppevs.EXT_ACT_DURATION
4893 ,ppevs.EXT_REMAIN_DURATION
4894 ,ppevs.EXT_SCH_DURATION
4895 ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE -- 4295770 Added
4896 FROM pa_proj_elem_ver_schedule ppevs,
4897 pa_proj_element_versions ppev1
4898 where ppev1.attribute15 = ppevs.element_version_id
4899 and ppevs.project_id = l_project_id
4900 and ppev1.project_id = l_project_id
4901 and ppev1.parent_structure_version_id = l_new_struct_ver_id
4902 and ppev1.object_type = 'PA_TASKS';
4903
4904 ---------------------------------------------- FP_M changes: Begin
4905 -- Refer to tracking bug 3305199
4906 -- Populate the old and new task version ID in PL/SQL tables
4907
4908 Select Element_Version_ID, ATTRIBUTE15 Bulk Collect
4909 INTO l_New_Task_Versions_Tab, l_Old_Task_Versions_Tab
4910 From pa_proj_element_versions
4911 Where parent_structure_version_id = l_new_struct_ver_id
4912 and object_type = 'PA_TASKS'
4913 and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( l_new_struct_ver_id, element_version_id ) = 'Y'
4914 order by display_sequence;
4915
4916 --bug 4019845
4917 --comment starts here
4918 /*
4919 PA_Relationship_Pvt.Copy_Intra_Dependency (
4920 P_Source_Ver_Tbl => l_Old_Task_Versions_Tab,
4921 P_Destin_Ver_Tbl => l_New_Task_Versions_Tab,
4922 X_Return_Status => X_Return_Status,
4923 X_Msg_Count => X_Msg_Count,
4924 X_Msg_Data => X_Msg_Data
4925 );
4926
4927 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4928 RAISE FND_API.G_EXC_ERROR;
4929 END IF;
4930
4931 PA_RELATIONSHIP_PVT.Publish_Inter_Proj_Dep ( -- This API needs to be called
4932 p_publishing_struc_ver_id => p_structure_version_id,
4933 p_previous_pub_struc_ver_id => l_last_pub_str_ver_id,
4934 p_published_struc_ver_id => l_new_struct_ver_id,
4935 X_Return_Status => X_Return_Status,
4936 X_Msg_Count => X_Msg_Count,
4937 X_Msg_Data => X_Msg_Data
4938 );
4939 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4940 RAISE FND_API.G_EXC_ERROR;
4941 END IF;
4942 */
4943
4944 /* Smukka 01/03/2004 Bug No.3450684 */
4945 /* Added call to PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass */
4946 /* And PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1 API calls to */
4947 /* copy all the out going and coming in sub project assoications */
4948 /*
4949 PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
4950 p_validate_only => p_validate_only,
4951 p_validation_level => p_validation_level,
4952 p_calling_module => p_calling_module,
4953 p_debug_mode => p_debug_mode,
4954 p_max_msg_count => p_max_msg_count,
4955 p_commit => p_commit,
4956 p_src_str_version_id => p_structure_version_id,
4957 p_dest_str_version_id => l_new_struct_ver_id, -- Destination Str version id can be of published str also
4958 x_return_status => X_Return_Status,
4959 x_msg_count => X_Msg_Count,
4960 x_msg_data => X_Msg_Data);
4961 IF (X_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
4962 x_msg_count := FND_MSG_PUB.count_msg;
4963 IF x_msg_count = 1 then
4964 pa_interface_utils_pub.get_messages
4965 (p_encoded => FND_API.G_TRUE,
4966 p_msg_index => 1,
4967 p_msg_count => l_msg_count,
4968 p_msg_data => l_msg_data,
4969 p_data => l_data,
4970 p_msg_index_out => l_msg_index_out);
4971 x_msg_data := l_data;
4972 END IF;
4973 raise FND_API.G_EXC_ERROR;
4974 END IF;
4975 PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1(
4976 p_api_version => p_api_version,
4977 p_init_msg_list => p_init_msg_list,
4978 p_validate_only => p_validate_only,
4979 p_validation_level => p_validation_level,
4980 p_calling_module => p_calling_module,
4981 p_commit => p_commit,
4982 p_debug_mode => p_debug_mode,
4983 p_max_msg_count => p_max_msg_count,
4984 p_src_str_version_id => p_structure_version_id,
4985 p_pub_str_version_id => l_new_struct_ver_id,
4986 p_last_pub_str_version_id => l_last_pub_str_ver_id,
4987 x_return_status => x_return_status,
4988 x_msg_count => x_msg_count,
4989 x_msg_data => x_msg_data);
4990
4991 --------------------------------------------- FP_M changes: End
4992 */
4993 --end bug 4019845
4994
4995 update pa_proj_element_versions ppevs1
4996 set attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
4997 where ppevs2.project_id = l_project_id
4998 and parent_structure_version_id = p_structure_version_id
4999 and ppevs2.element_version_id = ppevs1.attribute15
5000 )
5001 where project_id = l_project_id
5002 and parent_structure_version_id = l_new_struct_ver_id;
5003
5004 --maansari
5005
5006 --This has to be done at the end because creating latest version before
5007 -- updating links will break the logic for updating to latest published
5008 -- version.
5009
5010 --Call Create Structure Version Attr
5011 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
5012 ( p_validate_only => FND_API.G_FALSE
5013 ,p_structure_version_id => l_new_struct_ver_id
5014 ,p_structure_version_name => l_new_struct_ver_name
5015 ,p_structure_version_desc => l_new_struct_ver_desc
5016 ,p_effective_date => l_struc_ver_attr_rec.effective_date
5017 ,p_latest_eff_published_flag => 'Y'
5018 ,p_published_flag => 'Y'
5019 ,p_locked_status_code => 'UNLOCK'
5020 ,p_struct_version_status_code => 'STRUCTURE_PUBLISHED'
5021 ,p_baseline_current_flag => l_current_baseline_flag
5022 ,p_baseline_original_flag => l_original_baseline_flag
5023 ,p_change_reason_code => l_struc_ver_attr_rec.change_reason_code
5024 ,x_pev_structure_id => l_new_pev_structure_id
5025 ,x_return_status => l_return_status
5026 ,x_msg_count => l_msg_count
5027 ,x_msg_data => l_msg_data );
5028
5029
5030 l_msg_count := FND_MSG_PUB.count_msg;
5031 if (l_msg_count > 0) then
5032 x_msg_count := l_msg_count;
5033 if x_msg_count = 1 then
5034 x_msg_data := l_msg_data;
5035 end if;
5036 raise FND_API.G_EXC_ERROR;
5037 end if;
5038
5039 --bug 4019845
5040 /*
5041 --bug 3047602: rollup dates
5042 OPEN get_all_new_childs(l_new_struct_ver_id);
5043 FETCH get_all_new_childs bulk collect into l_task_ver_ids_tbl;
5044 CLOSE get_all_new_childs;
5045
5046 update pa_proj_elem_ver_structure
5047 set status_code = 'STRUCTURE_WORKING',
5048 LOCKED_BY_PERSON_ID = (select locked_by_person_id
5049 from pa_proj_elem_ver_structure
5050 where project_id = l_project_id
5051 and element_version_id = p_structure_version_id),
5052 LOCK_STATUS_CODE = 'LOCKED'
5053 where project_id = l_project_id and element_version_id = l_new_struct_ver_id;
5054
5055 --3755117 for copying mapping
5056 BEGIN
5057 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
5058 p_context => 'PUBLISH_VERSION'
5059 ,p_src_project_id => l_project_id
5060 ,p_dest_project_id => l_project_id
5061 ,p_src_str_version_id => p_structure_version_id
5062 ,p_dest_str_version_id => l_new_struct_ver_id
5063 ,x_return_status => x_return_status
5064 ,x_msg_count => x_msg_count
5065 ,x_msg_data => x_msg_data
5066 );
5067
5068 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5069 RAISE FND_API.G_EXC_ERROR;
5070 END IF;
5071 EXCEPTION
5072 WHEN OTHERS THEN
5073 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5074 p_procedure_name => 'PUBLISH_STRUCTURE',
5075 p_error_text => SUBSTRB('PA_PROJ_STRUC_MAPPING_PUB.COPY_MAPPING:'||SQLERRM,1,240));
5076 RAISE FND_API.G_EXC_ERROR;
5077 END;
5078 */
5079 --end bug 4019845
5080
5081 -- Changes added by skannoji
5082 -- Added code for doosan customer
5083 /* Bug #: 3305199 SMukka */
5084 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
5085 /* src_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
5086 /* dest_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
5087 --bug 4019845
5088 /*
5089 Declare
5090 src_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5091 dest_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5092 prev_pub_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --bug 3847386
5093 Begin
5094 src_versions_tab.extend(1);
5095 dest_versions_tab.extend(1);
5096 src_versions_tab(1) := p_structure_version_id;
5097 dest_versions_tab(1) := l_new_struct_ver_id;
5098 prev_pub_tab.extend(1); --bug 3847386
5099 prev_pub_tab(1) := l_last_pub_str_ver_id; --bug 3847386
5100 -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
5101 --Smukka Bug No. 3474141 Date 03/01/2004
5102 --moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block
5103 BEGIN
5104 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
5105 (
5106 p_source_project_id => l_project_id
5107 ,p_target_project_id => l_project_id
5108 ,p_src_sv_ids_tbl => src_Versions_Tab
5109 ,p_target_sv_ids_tbl => dest_Versions_Tab
5110 ,p_copy_act_from_str_ids_tbl => prev_pub_tab --bug 3847386
5111 ,x_return_status => x_return_status
5112 ,x_msg_count => x_msg_count
5113 ,x_Msg_data => x_msg_data
5114 );
5115 EXCEPTION
5116 WHEN OTHERS THEN
5117 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5118 p_procedure_name => 'PUBLISH_STRUCTURE',
5119 p_error_text => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
5120 RAISE FND_API.G_EXC_ERROR;
5121 END;
5122 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5123 RAISE FND_API.G_EXC_ERROR;
5124 END IF;
5125 End;
5126 -- till here by skannoji
5127 */
5128 --end bug 4019845
5129
5130
5131 /* Removed for bug 3850488.
5132 BEGIN
5133 PA_TASK_ASSIGNMENTS_PVT.Copy_Missing_Unplanned_Asgmts(
5134 p_project_id => l_project_id
5135 ,p_old_structure_version_id => l_last_pub_str_ver_id
5136 ,p_new_structure_version_id => l_new_struct_ver_id
5137 ,x_msg_count => x_msg_count
5138 ,x_msg_data => x_msg_data
5139 ,x_return_status => x_return_status
5140 );
5141 EXCEPTION
5142 WHEN OTHERS THEN
5143 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5144 p_procedure_name => 'PUBLISH_STRUCTURE',
5145 p_error_text => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_missing_unplanned_asgmts:'||SQLERRM,1,240));
5146 RAISE FND_API.G_EXC_ERROR;
5147 END;
5148 If (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5149 RAISE FND_API.G_EXC_ERROR;
5150 END IF;
5151 */
5152
5153 /* --hsiu: no need to rollup since the copied structure version is already rolled-up
5154 IF l_task_ver_ids_tbl.count > 0 THEN
5155 --rollup dates for new published version
5156
5157 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
5158 p_commit => FND_API.G_FALSE,
5159 p_element_versions => l_task_ver_ids_tbl,
5160 x_return_status => l_return_status,
5161 x_msg_count => l_msg_count,
5162 x_msg_data => l_msg_data);
5163
5164 l_msg_count := FND_MSG_PUB.count_msg;
5165 if (l_msg_count > 0) then
5166 x_msg_count := l_msg_count;
5167 if x_msg_count = 1 then
5168 x_msg_data := l_msg_data;
5169 end if;
5170 raise FND_API.G_EXC_ERROR;
5171 end if;
5172 END IF;
5173 --end bug 3047602
5174 */
5175 -- error_msg('before progress report');
5176
5177
5178 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'FINANCIAL') = 'Y') THEN
5179
5180 --bug 4019845
5181 /*
5182 IF (l_financial_type = 'Y') THEN
5183
5184 select start_date, completion_date
5185 into l_proj_start_date, l_proj_completion_date
5186 from pa_projects_all
5187 where project_id = l_project_id;
5188
5189 --dbms_output.put_line('sycn up api');
5190 --Call sync-up API
5191 -- error_msg('import task');
5192
5193 PA_XC_PROJECT_PUB.import_task
5194 ( p_project_id => l_project_id
5195 ,p_task_reference => NULL
5196 ,p_task_name => NULL
5197 ,p_task_start_date => NULL
5198 ,p_task_end_date => NULL
5199 ,p_parent_task_reference => NULL
5200 ,p_task_number => NULL
5201 ,p_wbs_level => NULL
5202 ,p_milestone => NULL
5203 ,p_duration => NULL
5204 ,p_duration_unit => NULL
5205 ,p_early_start_date => NULL
5206 ,p_early_finish_date => NULL
5207 ,p_late_start_date => NULL
5208 ,p_late_finish_date => NULL
5209 ,p_display_seq => NULL
5210 ,p_login_user_name => NULL
5211 ,p_critical_path => NULL
5212 ,p_sub_project_id => NULL
5213 ,p_attribute7 => NULL
5214 ,p_attribute8 => NULL
5215 ,p_attribute9 => NULL
5216 ,p_attribute10 => NULL
5217 ,p_progress_report => NULL
5218 ,p_progress_status => NULL
5219 ,p_progress_comments => NULL
5220 ,p_progress_asof_date => NULL
5221 ,p_predecessors => NULL
5222 ,p_structure_version_id => l_new_struct_ver_id
5223 ,p_calling_mode => 'PUBLISH' );
5224
5225 l_i_msg_count := 0;
5226 -- error_msg('import project');
5227 PA_XC_PROJECT_PUB.import_project
5228 (p_user_id => l_user_id
5229 ,p_commit => 'N'
5230 ,p_debug_mode => p_debug_mode
5231 ,p_project_id => l_project_id
5232 ,p_project_mpx_start_date => fnd_date.date_to_canonical(l_proj_start_date)
5233 ,p_project_mpx_end_date => fnd_date.date_to_canonical(l_proj_completion_date)
5234 ,p_task_mgr_override => NULL
5235 ,p_task_pgs_override => NULL
5236 ,p_process_id => NULL
5237 ,p_language => NULL
5238 ,p_delimiter => NULL
5239 ,p_responsibility_id => p_responsibility_id
5240 ,p_structure_id => NULL
5241 ,p_structure_version_id => l_new_struct_ver_id
5242 ,p_calling_mode => 'PUBLISH'
5243 ,x_msg_count => l_i_msg_count
5244 ,x_msg_data => l_i_msg_data
5245 ,x_return_status => l_i_return_status);
5246
5247
5248 --dbms_output.put_line('import proj: '||l_i_return_status);
5249 --Check for error
5250 -- IF (x_msg_count > 0) THEN
5251 -- FOR i IN 1..x_msg_count LOOP
5252 -- PA_UTILS.ADD_MESSAGE('PA',l_i_msg_data(i));
5253 -- END LOOP;
5254 -- END IF;
5255
5256 l_msg_count := FND_MSG_PUB.count_msg;
5257 if l_msg_count > 0 then
5258 x_msg_count := l_msg_count;
5259 if x_msg_count = 1 then
5260 -- x_msg_data := l_msg_data;
5261 pa_interface_utils_pub.get_messages
5262 (p_encoded => FND_API.G_TRUE,
5263 p_msg_index => 1,
5264 p_msg_count => l_msg_count,
5265 p_msg_data => l_msg_data,
5266 p_data => l_data,
5267 p_msg_index_out => l_msg_index_out);
5268 x_msg_data := l_data;
5269 end if;
5270 raise FND_API.G_EXC_ERROR;
5271 end if;
5272
5273 END IF; --for checking structure type
5274 */
5275 --bug 4019845
5276
5277
5278 /* removed
5279 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'WORKPLAN') = 'Y') THEN
5280 --API for progress report.
5281 */
5282 /* removed
5283 PA_PROGRESS_PUB.CREATE_PROGRESS_FOR_WBS(
5284 p_commit => FND_API.G_FALSE
5285 ,p_project_id => l_project_id
5286 ,p_structure_version_id => l_new_struct_ver_id
5287 ,x_return_status => l_return_status
5288 ,x_msg_count => l_msg_count
5289 ,x_msg_data => l_msg_data
5290 );
5291 */
5292 /* removed
5293 IF (p_debug_mode = 'Y') THEN
5294 pa_debug.debug('progress report api');
5295 END IF;
5296
5297
5298 --Check if there is any error.
5299 l_msg_count := FND_MSG_PUB.count_msg;
5300 IF l_msg_count > 0 THEN
5301 x_msg_count := l_msg_count;
5302 IF x_msg_count = 1 THEN
5303 x_msg_data := l_msg_data;
5304 END IF;
5305 RAISE FND_API.G_EXC_ERROR;
5306 END IF;
5307
5308 END IF;
5309 */
5310
5311 --bug 4019845
5312 /*
5313 --bug 3830932
5314 --moving before copy project dates so that latest structure version will be selected in the API
5315 update pa_proj_elem_ver_structure
5316 set status_code = 'STRUCTURE_PUBLISHED',
5317 LOCKED_BY_PERSON_ID = NULL,
5318 LOCK_STATUS_CODE = 'UNLOCKED'
5319 where project_id = l_project_id and element_version_id = l_new_struct_ver_id;
5320 --end bug 3830932
5321
5322 -- anlee
5323 -- Dates changes
5324 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'WORKPLAN') = 'Y') THEN
5325 IF (l_workplan_type = 'Y') THEN
5326 OPEN get_scheduled_dates(l_project_id, l_new_struct_ver_id);
5327 FETCH get_scheduled_dates INTO l_scheduled_start_date, l_scheduled_finish_date;
5328 CLOSE get_scheduled_dates;
5329
5330 OPEN get_proj_rec_ver_number(l_project_id);
5331 FETCH get_proj_rec_ver_number INTO l_proj_record_ver_number;
5332 CLOSE get_proj_rec_ver_number;
5333
5334 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
5335 p_validate_only => FND_API.G_FALSE
5336 ,p_project_id => l_project_id
5337 ,p_date_type => 'SCHEDULED'
5338 ,p_start_date => l_scheduled_start_date
5339 ,p_finish_date => l_scheduled_finish_date
5340 ,p_record_version_number => l_proj_record_ver_number
5341 ,x_return_status => l_return_status
5342 ,x_msg_count => l_msg_count
5343 ,x_msg_data => l_msg_data );
5344
5345 --Check if there is any error.
5346 l_msg_count := FND_MSG_PUB.count_msg;
5347 IF l_msg_count > 0 THEN
5348 x_msg_count := l_msg_count;
5349 IF x_msg_count = 1 THEN
5350 x_msg_data := l_msg_data;
5351 END IF;
5352 RAISE FND_API.G_EXC_ERROR;
5353 END IF;
5354 END IF;
5355 -- End of changes
5356
5357 -- hsiu
5358 -- project dates changes
5359 -- copy dates to transaction dates if 1, share structure
5360 -- 2, auto task update is enabled
5361 -- IF ((PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'WORKPLAN') = 'Y') AND
5362 -- (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'FINANCIAL') = 'Y')) THEN
5363 IF ((l_workplan_type = 'Y') AND
5364 (l_financial_type = 'Y')) THEN
5365 --select workplan attr
5366 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_proj_element_id) = 'Y') THEN
5367 --Copy to transaction date
5368 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
5369 p_project_id => l_project_id,
5370 x_return_status => l_return_status,
5371 x_msg_count => l_msg_count,
5372 x_msg_data => l_msg_data
5373 );
5374
5375 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5376 x_msg_count := FND_MSG_PUB.count_msg;
5377 if x_msg_count = 1 then
5378 x_msg_data := l_msg_data;
5379 end if;
5380 raise FND_API.G_EXC_ERROR;
5381 end if;
5382
5383 END IF;
5384 END IF;
5385 -- end of changes
5386 */
5387 --end bug 4019845
5388
5389 --bug 4019845
5390 /*
5391 --hsiu: task status
5392 --push down and rollup
5393 PA_STRUCT_TASK_ROLLUP_PUB.Task_Stat_Pushdown_Rollup(
5394 p_structure_version_id => l_new_struct_ver_id
5395 ,x_return_status => x_return_status
5396 ,x_msg_count => x_msg_count
5397 ,x_msg_data => x_msg_data
5398 );
5399 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5400 RAISE FND_API.G_EXC_ERROR;
5401 END IF;
5402 --end task status changes
5403 */
5404 --end bug 4019845
5405
5406 /* remove
5407 --hsiu: prorate tasks for tasks that have to be deleted peer tasks
5408 l_parent_ver_id := l_parent_tbl.FIRST;
5409 FOR i IN 1..l_parent_tbl.COUNT LOOP
5410 --if it has child then prorate
5411 -- IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_parent_ver_id) = 'N') THEN
5412 OPEN is_summary_elem(l_parent_ver_id);
5413 FETCH is_summary_elem INTO l_dummy;
5414 IF is_summary_elem%FOUND THEN
5415 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
5416 p_task_version_id => l_parent_ver_id
5417 ,x_return_status => x_return_status
5418 ,x_msg_count => x_msg_count
5419 ,x_msg_data => x_msg_data);
5420 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5421 CLOSE is_summary_elem;
5422 RAISE FND_API.G_EXC_ERROR;
5423 END IF;
5424 END IF;
5425 CLOSE is_summary_elem;
5426 -- END IF;
5427 l_parent_ver_id := l_parent_tbl.NEXT(l_parent_ver_id);
5428 END LOOP;
5429 */
5430
5431 /* --moved before copying tasks
5432 --hsiu
5433 --changes for task status
5434 --tasks might be deleted because childs are also deleted when deleting
5435 -- a task
5436 l_del_task_cnt := 0;
5437 LOOP
5438 EXIT when l_del_task_cnt = l_tbd_task_ver_id.count;
5439 l_del_task_cnt := l_del_task_cnt + 1;
5440
5441 OPEN get_tbd_tasks_info(l_tbd_task_ver_id(l_del_task_cnt));
5442 FETCH get_tbd_tasks_info into l_tbd_tasks_info_rec;
5443 IF get_tbd_tasks_info%FOUND THEN
5444 PA_TASK_PVT1.Delete_Task_Ver_wo_val(
5445 p_structure_version_id => l_tbd_tasks_info_rec.parent_structure_version_id
5446 ,p_task_version_id => l_tbd_tasks_info_rec.element_version_id
5447 ,p_record_version_number => l_tbd_tasks_info_rec.record_version_number
5448 ,x_return_status => l_return_status
5449 ,x_msg_count => l_msg_count
5450 ,x_msg_data => l_msg_data
5451 );
5452
5453 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5454 x_msg_count := FND_MSG_PUB.count_msg;
5455 if x_msg_count = 1 then
5456 x_msg_data := l_msg_data;
5457 end if;
5458 raise FND_API.G_EXC_ERROR;
5459 end if;
5460
5461 END IF;
5462 CLOSE get_tbd_tasks_info;
5463 END LOOP;
5464 --end changes for task status
5465 */
5466
5467 --Change the status of the working version to 'STRUCTURE_WORKING'
5468 update PA_PROJ_ELEM_VER_STRUCTURE
5469 set status_code = 'STRUCTURE_WORKING',
5470 record_version_number = nvl(record_version_number,0)+1
5471 where pev_structure_id = l_pev_structure_id;
5472
5473
5474 --bug 4479392
5475 --Update the wbs_flag for the working version as well.
5476 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
5477 p_project_id => l_project_id,
5478 p_structure_version_id => p_structure_version_id,
5479 p_update_wbs_flag => 'Y',
5480 x_return_status => l_return_status,
5481 x_msg_count => l_msg_count,
5482 x_msg_data => l_msg_data
5483 );
5484 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5485 x_msg_count := FND_MSG_PUB.count_msg;
5486 if x_msg_count = 1 then
5487 x_msg_data := l_msg_data;
5488 end if;
5489 raise FND_API.G_EXC_ERROR;
5490 end if;
5491
5492 --end bug 4479392
5493
5494 --bug 3035902
5495 --Change the process flag of the published structure version to Y if
5496 --the working version is set to Y
5497 --Bug No 3450684 SMukka Commented if condition
5498 --IF (PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(l_project_id,
5499 -- p_structure_version_id) = 'Y') THEN
5500 --set the flag for the published version
5501 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
5502 p_project_id => l_project_id,
5503 p_structure_version_id => l_new_struct_ver_id,
5504 p_update_wbs_flag => 'Y',
5505 x_return_status => l_return_status,
5506 x_msg_count => l_msg_count,
5507 x_msg_data => l_msg_data
5508 );
5509 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5510 x_msg_count := FND_MSG_PUB.count_msg;
5511 if x_msg_count = 1 then
5512 x_msg_data := l_msg_data;
5513 end if;
5514 raise FND_API.G_EXC_ERROR;
5515 end if;
5516 --END IF;
5517 --end bug 3035902
5518
5519 --bug 4019845
5520 /*
5521 -- Added this for FP_M changes -- Bhumesh
5522 PA_PROGRESS_PUB.Pull_Summarized_Actuals (
5523 P_Project_ID => l_Project_ID
5524 ,p_Calling_Mode => 'PUBLISH'
5525 ,x_return_status => x_return_status
5526 ,x_msg_count => x_msg_count
5527 ,x_msg_data => x_msg_data
5528 );
5529
5530 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
5531 x_msg_count := FND_MSG_PUB.count_msg;
5532 if x_msg_count = 1 then
5533 x_msg_data := l_msg_data;
5534 end if;
5535 raise FND_API.G_EXC_ERROR;
5536 end if;
5537
5538 IF p_pub_prog_flag = 'Y' THEN
5539 PA_PROGRESS_PUB.Publish_Progress(
5540 p_project_id => l_Project_ID
5541 --,p_structure_version_id => p_structure_version_id -- Bug 3839288
5542 ,p_pub_structure_version_id => l_new_struct_ver_id -- Bug 3839288
5543 ,x_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag -- added by rtarway for BUG 3951024
5544 ,x_as_of_date => l_as_of_date -- Bug 3839288
5545 ,x_task_weight_basis_code => l_task_weight_basis_code -- Bug 3839288
5546 ,x_return_status => x_return_status
5547 ,x_msg_count => x_msg_count
5548 ,x_msg_data => x_msg_data
5549 );
5550
5551 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
5552 x_msg_count := FND_MSG_PUB.count_msg;
5553 if x_msg_count = 1 then
5554 x_msg_data := l_msg_data;
5555 end if;
5556 raise FND_API.G_EXC_ERROR;
5557 end if;
5558
5559 END IF;
5560 */
5561 --end bug 4019845
5562
5563 -- End
5564
5565 IF l_debug_mode = 'Y' THEN
5566 pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'Before opening sel_other_structure_ver p_structure_version_id='||p_structure_version_id, 3);
5567 END IF;
5568
5569 --hsiu
5570 --changes for advanced structure
5571 --Delete other working structures after publishing
5572 OPEN sel_other_structure_ver(p_structure_version_id);
5573 LOOP
5574 FETCH sel_other_structure_ver into l_del_struc_ver_id, l_del_struc_ver_rvn;
5575 EXIT WHEN sel_other_structure_ver%NOTFOUND;
5576
5577 IF l_debug_mode = 'Y' THEN
5578 pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'Before calling PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val', 3);
5579 pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'l_del_struc_ver_id='||l_del_struc_ver_id||' l_del_struc_ver_rvn='||l_del_struc_ver_rvn, 3);
5580 END IF;
5581
5582 PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val(
5583 p_structure_version_id => l_del_struc_ver_id
5584 ,p_record_version_number => l_del_struc_ver_rvn
5585 ,x_return_status => l_return_status
5586 ,x_msg_count => l_msg_count
5587 ,x_msg_data => l_msg_data
5588 );
5589
5590 --Check if there is any error.
5591 l_msg_count := FND_MSG_PUB.count_msg;
5592
5593 IF l_debug_mode = 'Y' THEN
5594 pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'After calling PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val l_return_status='||l_return_status||' l_msg_count='||l_msg_count, 3);
5595 END IF;
5596
5597 IF l_msg_count > 0 OR l_return_status ='E' THEN
5598 x_msg_count := l_msg_count;
5599 IF x_msg_count = 1 THEN
5600 x_msg_data := l_msg_data;
5601 END IF;
5602 CLOSE sel_other_structure_ver;
5603 RAISE FND_API.G_EXC_ERROR;
5604 END IF;
5605
5606 END LOOP;
5607 CLOSE sel_other_structure_ver;
5608 --end changes
5609
5610
5611 x_published_struct_ver_id := l_new_struct_ver_id;
5612
5613 --bug 3010538
5614 IF (p_calling_module = 'SELF_SERVICE') THEN
5615 --called separately if calling from AMG
5616 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP(
5617 p_calling_context => 'PUBLISH',
5618 p_project_id => l_project_id,
5619 -- p_structure_version_id => l_last_pub_str_ver_id, --SMukka Commented
5620 p_structure_version_id => p_structure_version_id, --Smukka Added line
5621 p_pub_struc_ver_id => l_new_struct_ver_id,
5622 p_pub_prog_flag => p_pub_prog_flag,
5623 x_return_status => l_return_status,
5624 x_msg_count => l_msg_count,
5625 x_msg_data => l_msg_data
5626 );
5627
5628 --Check if there is any error.
5629 l_msg_count := FND_MSG_PUB.count_msg;
5630 IF l_msg_count > 0 THEN
5631 x_msg_count := l_msg_count;
5632 IF x_msg_count = 1 THEN
5633 x_msg_data := l_msg_data;
5634 END IF;
5635 RAISE FND_API.G_EXC_ERROR;
5636 END IF;
5637 END IF;
5638 --end bug 3010538
5639
5640 --bug 4019845
5641 /*
5642 -- BUg 3627315 Issue 8 : Added following call
5643 --The follwoing api is called to push progress data to PJI for the new
5644 --structure version.
5645 BEGIN
5646 --bug 3822112
5647 if l_share_flag = 'Y'
5648 then
5649 l_copy_actuals_flag := 'N';
5650 end if;
5651 PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC(
5652 p_project_id => l_Project_ID
5653 ,p_src_str_ver_id => p_structure_version_id
5654 ,p_dst_str_ver_id => l_new_struct_ver_id
5655 ,p_pub_wp_with_prog_flag => p_pub_prog_flag
5656 ,p_calling_context => 'PUBLISH'
5657 ,p_copy_actuals_flag => l_copy_actuals_flag --bug 3822112
5658 ,p_last_pub_str_version_id => l_last_pub_str_ver_id -- Modified rakragha 28-JUL-2004
5659 ,x_return_status => x_return_status
5660 ,x_msg_count => x_msg_count
5661 ,x_msg_data => x_msg_data
5662 );
5663 EXCEPTION
5664 WHEN OTHERS THEN
5665 fnd_msg_pub.add_exc_msg(p_pkg_name =>
5666 'PA_PROJECT_STRUCTURE_PVT1',
5667 p_procedure_name => 'publish_structure',
5668 p_error_text => SUBSTRB('Call PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC:'||SQLERRM,1,120));
5669 RAISE FND_API.G_EXC_ERROR;
5670 END;
5671
5672 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5673 x_msg_count := FND_MSG_PUB.count_msg;
5674 IF x_msg_count = 1 THEN
5675 x_msg_data := l_msg_data;
5676 END IF;
5677 raise FND_API.G_EXC_ERROR;
5678 END IF;
5679 */
5680 --bug 4019845
5681
5682
5683 --bug 4019845
5684 /*
5685 -- Bug 3839288 Begin
5686 IF p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL
5687 THEN
5688 BEGIN
5689
5690 pa_progress_pub.populate_pji_tab_for_plan(
5691 p_init_msg_list => FND_API.G_FALSE
5692 ,p_commit => FND_API.G_FALSE
5693 --,p_calling_module => p_calling_module
5694 ,p_project_id => l_Project_ID
5695 ,p_structure_version_id => l_new_struct_ver_id
5696 ,p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(l_Project_ID)
5697 ,p_structure_type => 'WORKPLAN'
5698 ,x_return_status => x_return_status
5699 ,x_msg_count => x_msg_count
5700 ,x_msg_data => x_msg_data
5701 );
5702 EXCEPTION
5703 WHEN OTHERS THEN
5704 fnd_msg_pub.add_exc_msg(p_pkg_name =>
5705 'PA_PROJECT_STRUCTURE_PVT1',
5706 p_procedure_name => 'publish_structure',
5707 p_error_text => SUBSTRB('Call pa_progress_pub.populate_pji_tab_for_plan:'||SQLERRM,1,120));
5708 RAISE FND_API.G_EXC_ERROR;
5709 END;
5710
5711 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5712 x_msg_count := FND_MSG_PUB.count_msg;
5713 IF x_msg_count = 1 THEN
5714 x_msg_data := l_msg_data;
5715 END IF;
5716 raise FND_API.G_EXC_ERROR;
5717 END IF;
5718
5719 BEGIN
5720 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
5721 p_init_msg_list => FND_API.G_FALSE
5722 --,p_calling_module => p_calling_module
5723 ,p_commit => FND_API.G_FALSE
5724 --,p_validate_only => p_validate_only
5725 ,p_project_id => l_Project_ID
5726 ,p_structure_version_id => l_new_struct_ver_id
5727 ,p_as_of_date => l_as_of_date
5728 ,p_wp_rollup_method => l_task_weight_basis_code
5729 ,p_rollup_entire_wbs => 'Y'
5730 ,p_working_wp_prog_flag => 'N'
5731 ,p_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag --rtarway, 3951024
5732 ,x_return_status => x_return_status
5733 ,x_msg_count => x_msg_count
5734 ,x_msg_data => x_msg_data);
5735 EXCEPTION
5736 WHEN OTHERS THEN
5737 fnd_msg_pub.add_exc_msg(p_pkg_name =>
5738 'PA_PROJECT_STRUCTURE_PVT1',
5739 p_procedure_name => 'publish_structure',
5740 p_error_text => SUBSTRB('Call PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT:'||SQLERRM,1,120));
5741 RAISE FND_API.G_EXC_ERROR;
5742 END;
5743
5744
5745 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5746 x_msg_count := FND_MSG_PUB.count_msg;
5747 IF x_msg_count = 1 THEN
5748 x_msg_data := l_msg_data;
5749 END IF;
5750 raise FND_API.G_EXC_ERROR;
5751 END IF;
5752
5753 END IF;
5754 -- Bug 3839288 End
5755 */
5756 --end bug 4019845
5757
5758 --bug 4019845
5759 /*
5760 IF p_pub_prog_flag = 'Y'
5761 THEN
5762 --bug 3851528
5763 BEGIN
5764 PA_PROGRESS_UTILS.clear_prog_outdated_flag(
5765 p_project_id => l_Project_ID
5766 ,p_structure_version_id => l_new_struct_ver_id
5767 ,p_object_id => null
5768 ,p_object_type => null
5769 ,x_return_status => x_return_status
5770 ,x_msg_count => x_msg_count
5771 ,x_msg_data => x_msg_data);
5772 EXCEPTION
5773 WHEN OTHERS THEN
5774 fnd_msg_pub.add_exc_msg(p_pkg_name =>
5775 'PA_PROJECT_STRUCTURE_PVT1',
5776 p_procedure_name => 'publish_structure',
5777 p_error_text => SUBSTRB('Call PA_PROGRESS_UTILS.clear_prog_outdated_flag:'||SQLERRM,1,120));
5778 RAISE FND_API.G_EXC_ERROR;
5779 END;
5780
5781
5782 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5783 x_msg_count := FND_MSG_PUB.count_msg;
5784 IF x_msg_count = 1 THEN
5785 x_msg_data := l_msg_data;
5786 END IF;
5787 raise FND_API.G_EXC_ERROR;
5788 END IF;
5789 --bug 3851528
5790
5791 END IF; -- p_pub_prog_flag = 'Y' THEN
5792 */
5793 --end bug 4019845
5794
5795 -- Start Bug : 4096218
5796 IF p_calling_module = 'AMG' THEN
5797 /* 4096218 Commenting , as we have changed the global varray name to G_DELETED_TASK_IDS_FROM_OP
5798 and now we are expected to pass the varray of 'to be deleted' task projelementids ,
5799 not version ids.
5800 PA_PROJECT_PUB.G_DELETED_TASK_VER_IDS_FROM_OP := l_tbd_task_ver_id;
5801 */
5802 PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP := l_tbd_task_id;
5803 END IF;
5804 -- End Bug : 4096218
5805
5806 x_return_status := FND_API.G_RET_STS_SUCCESS;
5807
5808 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5809 x_msg_count := FND_MSG_PUB.count_msg;
5810 if x_msg_count = 1 then
5811 x_msg_data := l_msg_data;
5812 end if;
5813 raise FND_API.G_EXC_ERROR;
5814 end if;
5815
5816 IF (p_debug_mode = 'Y') THEN
5817 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE end');
5818 END IF;
5819
5820 EXCEPTION
5821 when FND_API.G_EXC_ERROR then
5822 if p_commit = FND_API.G_TRUE then
5823 rollback to publish_structure_pvt;
5824 else
5825 --need to rollback because generate error page performs a commit
5826 rollback;
5827 end if;
5828 --get errors
5829 FOR i IN 1..FND_MSG_PUB.COUNT_MSG LOOP
5830 FND_MSG_PUB.GET(p_encoded=>'F',
5831 p_data=>l_messages(i),
5832 p_msg_index_out => l_msg_index_out);
5833 END LOOP;
5834
5835 --create error clob
5836 PA_PROJECT_STRUCTURE_PVT1.Generate_Error_Page(
5837 p_structure_version_id => p_structure_version_id,
5838 p_error_tbl => l_messages,
5839 x_page_content_id => l_page_content_id,
5840 x_return_status => l_return_status,
5841 x_msg_count => l_msg_count,
5842 x_msg_data => l_msg_data
5843 );
5844
5845 x_msg_count := FND_MSG_PUB.count_msg;
5846 x_return_status := FND_API.G_RET_STS_ERROR;
5847 when FND_API.G_EXC_UNEXPECTED_ERROR then
5848 if p_commit = FND_API.G_TRUE then
5849 rollback to publish_structure_pvt;
5850 end if;
5851 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5852 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5853 p_procedure_name => 'PUBLISH_STRUCTURE',
5854 p_error_text => SUBSTRB(SQLERRM,1,240));
5855 when OTHERS then
5856 if p_commit = FND_API.G_TRUE then
5857 rollback to publish_structure_pvt;
5858 end if;
5859 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5860 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5861 p_procedure_name => 'PUBLISH_STRUCTURE',
5862 p_error_text => SUBSTRB(SQLERRM,1,240));
5863 raise;
5864 END Publish_Structure;
5865
5866
5867 -- API name : UPDATE_LATEST_PUB_LINKS
5868 -- Type : Private Procedure
5869 -- Pre-reqs : None
5870 -- Return Value : N/A
5871 -- Parameters
5872 -- p_api_version IN NUMBER := 1.0
5873 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
5874 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
5875 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
5876 -- p_validation_level IN VARCHAR2 := 100
5877 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
5878 -- p_debug_mode IN VARCHAR2 := 'N'
5879 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5880 -- p_orig_project_id IN NUMBER
5881 -- p_orig_structure_id IN NUMBER
5882 -- p_orig_struc_ver_id IN NUMBER
5883 -- p_orig_task_ver_id IN NUMBER
5884 -- p_new_project_id IN NUMBER
5885 -- p_new_structure_id IN NUMBER
5886 -- p_new_struc_ver_id IN NUMBER
5887 -- p_new_task_ver_id IN NUMBER
5888 -- x_return_status OUT VARCHAR2
5889 -- x_msg_count OUT NUMBER
5890 -- x_msg_data OUT VARCHAR2
5891 --
5892 -- History
5893 --
5894 -- 25-JUN-01 HSIU -Created
5895 --
5896 --
5897
5898
5899 procedure UPDATE_LATEST_PUB_LINKS
5900 (
5901 p_api_version IN NUMBER := 1.0
5902 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
5903 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
5904 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
5905 ,p_validation_level IN VARCHAR2 := 100
5906 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
5907 ,p_debug_mode IN VARCHAR2 := 'N'
5908 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5909 ,p_orig_project_id IN NUMBER
5910 ,p_orig_structure_id IN NUMBER
5911 ,p_orig_struc_ver_id IN NUMBER
5912 ,p_orig_task_ver_id IN NUMBER
5913 ,p_new_project_id IN NUMBER
5914 ,p_new_structure_id IN NUMBER
5915 ,p_new_struc_ver_id IN NUMBER
5916 ,p_new_task_ver_id IN NUMBER
5917 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5918 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5919 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5920 )
5921 IS
5922 cursor get_from_id(c_element_version_id NUMBER) IS
5923 select object_relationship_id, object_id_from1 object_id_from,
5924 object_type_from, record_version_number
5925 from pa_object_relationships
5926 where relationship_type = 'L'
5927 and object_id_to1 = c_element_version_id
5928 and object_type_to IN ('PA_TASKS','PA_STRUCTURES');
5929 l_from_object_info get_from_id%ROWTYPE;
5930
5931 cursor get_task_version_info(c_task_version_id NUMBER) IS
5932 select v1.project_id project_id, v2.proj_element_id structure_id,
5933 v1.parent_structure_version_id structure_version_id,
5934 v1.element_version_id task_version_id
5935 from pa_proj_element_versions v1,
5936 pa_proj_element_versions v2
5937 where v1.element_version_id = c_task_version_id
5938 and v1.parent_structure_version_id = v2.element_version_id;
5939 l_info_task_ver_rec get_task_version_info%ROWTYPE;
5940
5941 cursor get_structure_version_info(c_structure_version_id NUMBER) IS
5942 select v1.project_id project_id, v1.proj_element_id structure_id,
5943 v1.element_version_id structure_version_id
5944 from pa_proj_element_versions v1
5945 where v1.element_version_id = c_structure_version_id;
5946 l_info_struc_ver_rec get_structure_version_info%ROWTYPE;
5947
5948 l_return_status VARCHAR2(1);
5949 l_msg_count NUMBER;
5950 l_msg_data VARCHAR2(250);
5951 l_data VARCHAR2(250);
5952 l_msg_index_out NUMBER;
5953 l_orig_element_version_id NUMBER;
5954
5955 l_object_type VARCHAR2(30);
5956
5957 cursor get_latest_struc_ver(c_struc_ver_id NUMBER) IS
5958 select pevs.element_version_id
5959 from pa_proj_element_versions pev,
5960 pa_proj_elem_ver_structure pevs
5961 where pev.element_version_id = c_struc_ver_id
5962 and pev.project_id = pevs.project_id
5963 and pev.proj_element_id = pevs.proj_element_id
5964 and pevs.latest_eff_published_flag = 'Y';
5965
5966 cursor get_latest_task_ver(c_task_ver_id NUMBER) IS
5967 select pev2.element_version_id task_version_id,
5968 pev2.parent_structure_version_id parent_structure_version_id
5969 from pa_proj_element_versions pev,
5970 pa_proj_element_versions pev1,
5971 pa_proj_elem_ver_structure pevs,
5972 pa_proj_element_versions pev2
5973 where pev.element_version_id = c_task_ver_id
5974 and pev.parent_structure_version_id = pev1.element_version_id
5975 and pev1.project_id = pevs.project_id
5976 and pev1.proj_element_id = pevs.proj_element_id
5977 and pevs.latest_eff_published_flag = 'Y'
5978 and pev.proj_element_id = pev2.proj_element_id
5979 and pev.project_id = pev2.project_id
5980 and pev2.parent_structure_version_id = pevs.element_version_id;
5981
5982 cursor can_update(c_element_version_id NUMBER) IS
5983 select '1'
5984 from pa_proj_elem_ver_structure pevs,
5985 pa_proj_element_versions pev
5986 where pev.element_version_id = c_element_version_id
5987 and pev.parent_structure_version_id = pevs.element_version_id
5988 and pev.project_id = pevs.project_id
5989 and pevs.status_code IN ('STRUCTURE_WORKING', 'STRUCTURE_REJECTED');
5990 l_dummy VARCHAR2(1);
5991
5992 l_latest_elem_ver NUMBER;
5993 l_latest_parent_struc_ver NUMBER;
5994
5995 BEGIN
5996 IF (p_debug_mode = 'Y') THEN
5997 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS begin');
5998 END IF;
5999
6000 IF (p_commit = FND_API.G_TRUE) THEN
6001 savepoint update_latest_pub_links_pvt;
6002 END IF;
6003
6004 IF p_orig_task_ver_id IS NULL THEN
6005 l_object_type := 'PA_STRUCTURES';
6006 l_orig_element_version_id := p_orig_struc_ver_id;
6007 ELSE
6008 l_object_type := 'PA_TASKS';
6009 l_orig_element_version_id := p_orig_task_ver_id;
6010 END IF;
6011
6012 -- error_msg('in update latest pub links');
6013 --Search for the element version in the latest published version
6014 -- that has a link point to it, and corresponds to the original
6015 -- element.
6016 IF (l_object_type = 'PA_STRUCTURES') THEN
6017 --Get the published element
6018 --dbms_output.put_line('b, Open get_latest_struc_ver');
6019 OPEN get_latest_struc_ver(l_orig_element_version_id);
6020 FETCH get_latest_struc_ver INTO l_latest_elem_ver;
6021 IF get_latest_struc_ver%NOTFOUND THEN
6022 --no publish version. exit;
6023 IF (p_debug_mode = 'Y') THEN
6024 pa_debug.debug('No latest published version found');
6025 END IF;
6026 --dbms_output.put_line('b, Close get_latest_struc_ver');
6027 CLOSE get_latest_struc_ver;
6028 x_return_status := FND_API.G_RET_STS_SUCCESS;
6029 return;
6030 END IF;
6031 l_latest_parent_struc_ver := l_latest_elem_ver;
6032 --dbms_output.put_line('b, Close get_latest_struc_ver');
6033 CLOSE get_latest_struc_ver;
6034 ELSIF (l_object_type = 'PA_TASKS') THEN
6035 --dbms_output.put_line('b, Open get_latest_task_ver');
6036 OPEN get_latest_task_ver(l_orig_element_version_id);
6037 FETCH get_latest_task_ver INTO l_latest_elem_ver,
6038 l_latest_parent_struc_ver;
6039 IF get_latest_task_ver%NOTFOUND THEN
6040 --no publish version. exit;
6041 IF (p_debug_mode = 'Y') THEN
6042 pa_debug.debug('No latest published version found');
6043 END IF;
6044 --dbms_output.put_line('b, Close get_latest_task_ver');
6045 CLOSE get_latest_task_ver;
6046 x_return_status := FND_API.G_RET_STS_SUCCESS;
6047 return;
6048 END IF;
6049 --dbms_output.put_line('b, Close get_latest_task_ver');
6050 CLOSE get_latest_task_ver;
6051 END IF;
6052
6053 --For the element, find all the element versions that links to
6054 -- the publish version which belongs to a working version.
6055
6056 --Search for incoming links for the latest pub element
6057 --dbms_output.put_line('b, Open get_from_id');
6058 OPEN get_from_id(l_latest_elem_ver);
6059 LOOP
6060 IF (p_debug_mode = 'Y') THEN
6061 pa_debug.debug('getting incoming links');
6062 END IF;
6063 FETCH get_from_id INTO l_from_object_info;
6064 EXIT WHEN get_from_id%NOTFOUND;
6065
6066 --dbms_output.put_line('b, Open can_update');
6067 OPEN can_update(l_from_object_info.object_id_from);
6068 FETCH can_update INTO l_dummy;
6069 IF (can_update%FOUND) THEN
6070 --dbms_output.put_line('can update found');
6071 --the from object is a working/rejected version. Need to update
6072 IF (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
6073
6074 --dbms_output.put_line('b, Open get_structure_version_info');
6075 OPEN get_structure_version_info(l_from_object_info.object_id_from);
6076 FETCH get_structure_version_info INTO l_info_struc_ver_rec;
6077 PA_RELATIONSHIP_PVT.Update_Relationship(
6078 p_init_msg_list => FND_API.G_FALSE
6079 ,p_commit => FND_API.G_FALSE
6080 ,p_debug_mode => p_debug_mode
6081 ,p_object_relationship_id => l_from_object_info.object_relationship_id
6082 ,p_project_id_from => l_info_struc_ver_rec.project_id
6083 ,p_structure_id_from => l_info_struc_ver_rec.structure_id
6084 ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
6085 ,p_task_version_id_from => NULL
6086 ,p_project_id_to => p_new_project_id
6087 ,p_structure_id_to => p_new_structure_id
6088 ,p_structure_version_id_to => p_new_struc_ver_id
6089 ,p_task_version_id_to => p_new_task_ver_id
6090 ,p_relationship_type => 'L'
6091 ,p_relationship_subtype => 'READ_WRITE'
6092 ,p_record_version_number => l_from_object_info.record_version_number
6093 ,x_return_status => l_return_status
6094 ,x_msg_count => l_msg_count
6095 ,x_msg_data => l_msg_data
6096 );
6097 --dbms_output.put_line('b, Close get_structure_version_info');
6098 CLOSE get_structure_version_info;
6099
6100 ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
6101 --dbms_output.put_line('b, Open get_task_version_info');
6102 OPEN get_task_version_info(l_from_object_info.object_id_from);
6103 FETCH get_task_version_info INTO l_info_task_ver_rec;
6104 PA_RELATIONSHIP_PVT.Update_Relationship(
6105 p_init_msg_list => FND_API.G_FALSE
6106 ,p_commit => FND_API.G_FALSE
6107 ,p_debug_mode => p_debug_mode
6108 ,p_object_relationship_id => l_from_object_info.object_relationship_id
6109 ,p_project_id_from => l_info_task_ver_rec.project_id
6110 ,p_structure_id_from => l_info_task_ver_rec.structure_id
6111 ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
6112 ,p_task_version_id_from => l_info_task_ver_rec.task_version_id
6113 ,p_project_id_to => p_new_project_id
6114 ,p_structure_id_to => p_new_structure_id
6115 ,p_structure_version_id_to => p_new_struc_ver_id
6116 ,p_task_version_id_to => p_new_task_ver_id
6117 ,p_relationship_type => 'L'
6118 ,p_relationship_subtype => 'READ_WRITE'
6119 ,p_record_version_number => l_from_object_info.record_version_number
6120 ,x_return_status => l_return_status
6121 ,x_msg_count => l_msg_count
6122 ,x_msg_data => l_msg_data
6123 );
6124 --dbms_output.put_line('b, Close get_task_version_info');
6125 CLOSE get_task_version_info;
6126
6127 END IF;
6128 END IF;
6129 --dbms_output.put_line('b, Close can_update');
6130 CLOSE can_update;
6131 END LOOP;
6132 --dbms_output.put_line('b, Close get_from_id');
6133 CLOSE get_from_id;
6134
6135
6136 l_msg_count := FND_MSG_PUB.count_msg;
6137 if (l_msg_count > 0) then
6138 x_msg_count := l_msg_count;
6139 if x_msg_count = 1 then
6140 x_msg_data := l_msg_data;
6141 end if;
6142 raise FND_API.G_EXC_ERROR;
6143 end if;
6144
6145 EXCEPTION
6146 when FND_API.G_EXC_ERROR then
6147 if p_commit = FND_API.G_TRUE then
6148 rollback to update_latest_pub_links_pvt;
6149 end if;
6150 x_msg_count := FND_MSG_PUB.count_msg;
6151 x_return_status := FND_API.G_RET_STS_ERROR;
6152 when FND_API.G_EXC_UNEXPECTED_ERROR then
6153 if p_commit = FND_API.G_TRUE then
6154 rollback to update_latest_pub_links_pvt;
6155 end if;
6156 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6157 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
6158 p_procedure_name => 'UPDATE_LATEST_PUB_LINKS',
6159 p_error_text => SUBSTRB(SQLERRM,1,240));
6160 when OTHERS then
6161 if p_commit = FND_API.G_TRUE then
6162 rollback to update_latest_pub_links_pvt;
6163 end if;
6164 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6165 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
6166 p_procedure_name => 'UPDATE_LATEST_PUB_LINKS',
6167 p_error_text => SUBSTRB(SQLERRM,1,240));
6168 raise;
6169 END UPDATE_LATEST_PUB_LINKS;
6170
6171
6172 PROCEDURE COPY_STRUCTURE_VERSION
6173 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
6174 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
6175 ,p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL
6176 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
6177 ,p_debug_mode IN VARCHAR2 := 'N'
6178 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
6179 ,p_structure_version_id IN NUMBER
6180 ,p_new_struct_ver_name IN VARCHAR2
6181 ,p_new_struct_ver_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6182 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6183 ,x_new_struct_ver_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6184 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6185 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6186 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
6187 IS
6188 l_new_struct_ver_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
6189 l_return_status VARCHAR2(1);
6190 l_msg_count NUMBER;
6191 l_msg_data VARCHAR2(250);
6192 l_pev_structure_id NUMBER;
6193
6194 CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
6195 IS
6196 SELECT *
6197 FROM PA_PROJ_ELEMENT_VERSIONS
6198 WHERE element_version_id = c_structure_version_id;
6199
6200 l_structure_ver_rec l_get_structure_ver_csr%ROWTYPE;
6201 l_structure_ver_to_rec l_get_structure_ver_csr%ROWTYPE;
6202
6203 CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
6204 IS
6205 SELECT a.*
6206 FROM PA_PROJ_ELEM_VER_STRUCTURE a,
6207 PA_PROJ_ELEMENT_VERSIONS b
6208 WHERE b.element_version_id = c_structure_version_id
6209 AND b.project_id = a.project_id
6210 AND b.element_version_id = a.project_id;
6211
6212 l_structure_ver_attr_rec l_get_structure_ver_attr_csr%ROWTYPE;
6213
6214 CURSOR l_get_task_versions_csr(c_structure_version_id NUMBER)
6215 IS
6216 SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
6217 b.object_id_from1 parent_element_version_id,
6218 a.TASK_UNPUB_VER_STATUS_CODE
6219 FROM PA_PROJ_ELEMENT_VERSIONS a,
6220 PA_OBJECT_RELATIONSHIPS b
6221 WHERE a.object_type = 'PA_TASKS'
6222 AND a.parent_structure_version_id = c_structure_version_id
6223 AND a.element_version_id = b.object_id_to1
6224 AND b.relationship_type = 'S'
6225 AND b.object_type_from in ('PA_STRUCTURES','PA_TASKS') -- Bug 6429275
6226 AND b.object_type_to = 'PA_TASKS'
6227 ORDER BY a.display_sequence;
6228
6229 l_task_versions_rec l_get_task_versions_csr%ROWTYPE;
6230 l_ref_task_ver_id NUMBER;
6231 l_peer_or_sub VARCHAR2(10);
6232
6233 CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
6234 IS
6235 SELECT a.*
6236 FROM PA_PROJ_ELEM_VER_SCHEDULE a,
6237 PA_PROJ_ELEMENT_VERSIONS b
6238 WHERE b.element_version_id = c_element_version_id
6239 AND b.project_id = a.project_id
6240 AND b.element_version_id = a.element_version_id;
6241
6242 l_ver_schedule_attr_rec l_get_ver_schedule_attr_csr%ROWTYPE;
6243
6244 TYPE reference_tasks IS TABLE OF NUMBER
6245 INDEX BY BINARY_INTEGER;
6246
6247 --Bug 2189657
6248 --Added for linking tasks with no display sequence.
6249 Type T_EquivElemVerTable IS TABLE OF NUMBER
6250 Index by BINARY_INTEGER;
6251 t_equiv_elem_ver_id T_EquivElemVerTable;
6252 --Bug 2189657 end;
6253
6254
6255 -- This table stores reference task version IDs for a particular wbs
6256 -- level. This provides a lookup to find the last task version
6257 -- at that level.
6258 l_outline_task_ref reference_tasks;
6259
6260 l_last_wbs_level NUMBER;
6261 l_task_version_id NUMBER;
6262 l_pev_schedule_id NUMBER;
6263
6264 CURSOR l_get_structure_type_csr(c_structure_version_id NUMBER)
6265 IS
6266 SELECT pst.structure_type_class_code
6267 FROM PA_STRUCTURE_TYPES pst,
6268 PA_PROJ_ELEMENT_VERSIONS ppev,
6269 PA_PROJ_STRUCTURE_TYPES ppst
6270 WHERE ppev.element_version_id = c_structure_version_id
6271 AND ppev.proj_element_id = ppst.proj_element_id
6272 AND ppst.structure_type_id = pst.structure_type_id;
6273
6274 l_structure_type PA_STRUCTURE_TYPES.structure_type%TYPE;
6275
6276 CURSOR l_check_working_versions_csr(c_structure_version_id NUMBER)
6277 IS
6278 SELECT 'Y'
6279 FROM PA_PROJ_ELEMENT_VERSIONS ppev
6280 WHERE ppev.element_version_id = c_structure_version_id
6281 AND EXISTS
6282 (SELECT 'Y'
6283 FROM PA_PROJ_ELEMENT_VERSIONS ppev2,
6284 PA_PROJ_ELEM_VER_STRUCTURE ppevs
6285 WHERE ppev2.proj_element_id = ppev.proj_element_id
6286 AND ppev2.project_id = ppev.project_id
6287 AND ppevs.project_id = ppev2.project_id
6288 AND ppevs.element_version_id = ppev2.element_version_id
6289 AND ppevs.status_code <> 'STRUCTURE_PUBLISHED');
6290
6291 l_dummy VARCHAR2(1);
6292
6293 cursor get_to_id(c_element_version_id NUMBER) IS
6294 select object_relationship_id, object_id_to1 object_id_to,
6295 object_type_to, record_version_number
6296 from pa_object_relationships
6297 where relationship_type = 'L'
6298 and object_id_from1 = c_element_version_id
6299 and object_type_from IN ('PA_TASKS','PA_STRUCTURES');
6300 l_to_object_info get_to_id%ROWTYPE;
6301
6302 cursor get_task_version_info(c_task_version_id NUMBER) IS
6303 select v1.project_id project_id, v2.proj_element_id structure_id,
6304 v1.parent_structure_version_id structure_version_id,
6305 v1.element_version_id task_version_id
6306 from pa_proj_element_versions v1,
6307 pa_proj_element_versions v2
6308 where v1.element_version_id = c_task_version_id
6309 and v1.parent_structure_version_id = v2.element_version_id;
6310 l_info_task_ver_rec get_task_version_info%ROWTYPE;
6311
6312 l_new_obj_rel_id PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
6313 l_structure_type1 PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
6314
6315 --hsiu
6316 --added for task weighting
6317 CURSOR get_cur_task_ver_weighting(c_ver_id NUMBER) IS
6318 select WEIGHTING_PERCENTAGE
6319 from pa_object_relationships
6320 where object_id_to1 = c_ver_id
6321 and object_type_to = 'PA_TASKS'
6322 and relationship_type = 'S';
6323 l_weighting NUMBER(17,2);
6324
6325 --end task weighting changes
6326
6327 X_Row_id VARCHAR2(255);
6328 BEGIN
6329
6330 pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION');
6331
6332 IF (p_debug_mode = 'Y') THEN
6333 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION begin');
6334 END IF;
6335
6336 IF (p_commit = FND_API.G_TRUE) THEN
6337 savepoint copy_structure_version_pvt;
6338 END IF;
6339
6340 -- Get structure version info
6341 OPEN l_get_structure_ver_csr(p_structure_version_id);
6342 FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
6343 CLOSE l_get_structure_ver_csr;
6344
6345 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
6346 ( p_validate_only => p_validate_only
6347 ,p_structure_id => l_structure_ver_rec.proj_element_id
6348 ,p_attribute_category => l_structure_ver_rec.attribute_category
6349 ,p_attribute1 => l_structure_ver_rec.attribute1
6350 ,p_attribute2 => l_structure_ver_rec.attribute2
6351 ,p_attribute3 => l_structure_ver_rec.attribute3
6352 ,p_attribute4 => l_structure_ver_rec.attribute4
6353 ,p_attribute5 => l_structure_ver_rec.attribute5
6354 ,p_attribute6 => l_structure_ver_rec.attribute6
6355 ,p_attribute7 => l_structure_ver_rec.attribute7
6356 ,p_attribute8 => l_structure_ver_rec.attribute8
6357 ,p_attribute9 => l_structure_ver_rec.attribute9
6358 ,p_attribute10 => l_structure_ver_rec.attribute10
6359 ,p_attribute11 => l_structure_ver_rec.attribute11
6360 ,p_attribute12 => l_structure_ver_rec.attribute12
6361 ,p_attribute13 => l_structure_ver_rec.attribute13
6362 ,p_attribute14 => l_structure_ver_rec.attribute14
6363 ,p_attribute15 => l_structure_ver_rec.attribute15
6364 ,x_structure_version_id => l_new_struct_ver_id
6365 ,x_return_status => l_return_status
6366 ,x_msg_count => l_msg_count
6367 ,x_msg_data => l_msg_data );
6368
6369 If (p_debug_mode = 'Y') THEN
6370 pa_debug.debug('Create Structure Version return status: ' || l_return_status);
6371 pa_debug.debug('l_new_struct_ver_id: ' || l_new_struct_ver_id);
6372 END IF;
6373
6374
6375 --Check if there is any error.
6376 l_msg_count := FND_MSG_PUB.count_msg;
6377 IF l_msg_count > 0 THEN
6378 x_msg_count := l_msg_count;
6379 IF x_msg_count = 1 THEN
6380 x_msg_data := l_msg_data;
6381 END IF;
6382 RAISE FND_API.G_EXC_ERROR;
6383 END IF;
6384
6385 -- Get structure version attributes
6386 OPEN l_get_structure_ver_attr_csr(p_structure_version_id);
6387 FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
6388 CLOSE l_get_structure_ver_attr_csr;
6389
6390 If (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
6391 l_structure_ver_attr_rec.change_reason_code := p_change_reason_code;
6392 END IF;
6393
6394 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
6395 ( p_validate_only => FND_API.G_FALSE
6396 ,p_structure_version_id => l_new_struct_ver_id
6397 ,p_structure_version_name => p_new_struct_ver_name
6398 ,p_structure_version_desc => p_new_struct_ver_desc
6399 ,p_effective_date => l_structure_ver_attr_rec.effective_date
6400 ,p_latest_eff_published_flag => l_structure_ver_attr_rec.latest_eff_published_flag
6401 ,p_locked_status_code => l_structure_ver_attr_rec.lock_status_code
6402 ,p_struct_version_status_code => l_structure_ver_attr_rec.status_code
6403 ,p_baseline_current_flag => l_structure_ver_attr_rec.current_flag
6404 ,p_baseline_original_flag => l_structure_ver_attr_rec.original_flag
6405 ,p_change_reason_code => l_structure_ver_attr_rec.change_reason_code
6406 ,x_pev_structure_id => l_pev_structure_id
6407 ,x_return_status => l_return_status
6408 ,x_msg_count => l_msg_count
6409 ,x_msg_data => l_msg_data );
6410
6411 IF (p_debug_mode = 'Y') THEN
6412 pa_debug.debug('Create Structure Version Attr return status: ' || l_return_status);
6413 pa_debug.debug('l_pev_structure_id: ' || l_pev_structure_id);
6414 END IF;
6415
6416 --Check if there is any error.
6417 l_msg_count := FND_MSG_PUB.count_msg;
6418 IF l_msg_count > 0 THEN
6419 x_msg_count := l_msg_count;
6420 IF x_msg_count = 1 THEN
6421 x_msg_data := l_msg_data;
6422 END IF;
6423 RAISE FND_API.G_EXC_ERROR;
6424 END IF;
6425
6426 --Search for outgoing links for the structure version; create new Links
6427 /*
6428 OPEN get_to_id(p_structure_version_id);
6429 LOOP
6430 FETCH get_to_id INTO l_to_object_info;
6431 EXIT WHEN get_to_id%NOTFOUND;
6432 If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
6433 OPEN l_get_structure_ver_csr(l_to_object_info.object_id_to);
6434 FETCH l_get_structure_ver_csr INTO l_structure_ver_to_rec;
6435
6436 SELECT pst.structure_type_class_code
6437 INTO l_structure_type1
6438 FROM PA_STRUCTURE_TYPES pst,
6439 PA_PROJ_STRUCTURE_TYPES ppst
6440 WHERE ppst.proj_element_id = l_structure_ver_to_rec.proj_element_id
6441 AND pst.structure_type_id = ppst.structure_type_id;
6442
6443 PA_RELATIONSHIP_PVT.Create_Relationship(
6444 p_init_msg_list => FND_API.G_FALSE
6445 ,p_commit => FND_API.G_FALSE
6446 ,p_debug_mode => p_debug_mode
6447 ,p_project_id_from => l_structure_ver_rec.project_id
6448 ,p_structure_id_from => l_structure_ver_rec.proj_element_id
6449 ,p_structure_version_id_from => l_new_struct_ver_id
6450 ,p_task_version_id_from => NULL
6451 ,p_project_id_to => l_structure_ver_to_rec.project_id
6452 ,p_structure_id_to => l_structure_ver_to_rec.proj_element_id
6453 ,p_structure_version_id_to => l_structure_ver_to_rec.element_version_id
6454 ,p_task_version_id_to => NULL
6455 ,p_structure_type => l_structure_type1
6456 ,p_initiating_element => NULL
6457 ,p_link_to_latest_structure_ver => NULL
6458 ,p_relationship_type => 'L'
6459 ,p_relationship_subtype => 'READ_WRITE'
6460 ,x_object_relationship_id => l_new_obj_rel_id
6461 ,x_return_status => l_return_status
6462 ,x_msg_count => l_msg_count
6463 ,x_msg_data => l_msg_data
6464 );
6465 CLOSE l_get_structure_ver_csr;
6466
6467 IF (p_debug_mode = 'Y') THEN
6468 pa_debug.debug('Create Relationship return status: ' || l_return_status);
6469 pa_debug.debug('l_new_obj_rel_id: ' || l_new_obj_rel_id);
6470 END IF;
6471 ELSIF(l_to_object_info.object_type_to = 'PA_TASKS') THEN
6472 OPEN get_task_version_info(l_to_object_info.object_id_to);
6473 FETCH get_task_version_info INTO l_info_task_ver_rec;
6474
6475 SELECT pst.structure_type_class_code
6476 INTO l_structure_type1
6477 FROM PA_STRUCTURE_TYPES pst,
6478 PA_PROJ_STRUCTURE_TYPES ppst
6479 WHERE ppst.proj_element_id = l_info_task_ver_rec.structure_id
6480 AND pst.structure_type_id = ppst.structure_type_id;
6481
6482 PA_RELATIONSHIP_PVT.Create_Relationship(
6483 p_init_msg_list => FND_API.G_FALSE
6484 ,p_commit => FND_API.G_FALSE
6485 ,p_debug_mode => p_debug_mode
6486 ,p_project_id_from => l_structure_ver_rec.project_id
6487 ,p_structure_id_from => l_structure_ver_rec.proj_element_id
6488 ,p_structure_version_id_from => l_new_struct_ver_id
6489 ,p_task_version_id_from => NULL
6490 ,p_project_id_to => l_info_task_ver_rec.project_id
6491 ,p_structure_id_to => l_info_task_ver_rec.structure_id
6492 ,p_structure_version_id_to => l_info_task_ver_rec.structure_version_id
6493 ,p_task_version_id_to => l_info_task_ver_rec.task_version_id
6494 ,p_structure_type => l_structure_type1
6495 ,p_initiating_element => NULL
6496 ,p_link_to_latest_structure_ver => NULL
6497 ,p_relationship_type => 'L'
6498 ,p_relationship_subtype => 'READ_WRITE'
6499 ,x_object_relationship_id => l_new_obj_rel_id
6500 ,x_return_status => l_return_status
6501 ,x_msg_count => l_msg_count
6502 ,x_msg_data => l_msg_data
6503 );
6504 CLOSE get_task_version_info;
6505 IF (p_debug_mode = 'Y') THEN
6506 pa_debug.debug('Create Relationship return status: ' || l_return_status);
6507 pa_debug.debug('l_new_obj_rel_id: ' || l_new_obj_rel_id);
6508 END IF;
6509 END IF;
6510 --Check error
6511 l_msg_count := FND_MSG_PUB.count_msg;
6512 if (l_msg_count > 0) then
6513 x_msg_count := l_msg_count;
6514 if x_msg_count = 1 then
6515 x_msg_data := l_msg_data;
6516 end if;
6517 CLOSE get_to_id;
6518 raise FND_API.G_EXC_ERROR;
6519 end if;
6520
6521 END LOOP;
6522 CLOSE get_to_id;
6523 */
6524
6525
6526 OPEN l_get_structure_type_csr(p_structure_version_id);
6527 FETCH l_get_structure_type_csr INTO l_structure_type;
6528 CLOSE l_get_structure_type_csr;
6529
6530 -- If structure is workplan type create schedule version record
6531 if l_structure_type = 'WORKPLAN' then
6532
6533 OPEN l_get_ver_schedule_attr_csr(p_structure_version_id);
6534 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
6535 CLOSE l_get_ver_schedule_attr_csr;
6536
6537 /*
6538 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
6539 ( p_validate_only => FND_API.G_FALSE
6540 ,p_element_version_id => l_new_struct_ver_id
6541 ,p_calendar_id => l_ver_schedule_attr_rec.calendar_id
6542 ,p_scheduled_start_date => l_ver_schedule_attr_rec.scheduled_start_date
6543 ,p_scheduled_end_date => l_ver_schedule_attr_rec.scheduled_finish_date
6544 ,p_obligation_start_date => l_ver_schedule_attr_rec.obligation_start_date
6545 ,p_obligation_end_date => l_ver_schedule_attr_rec.obligation_finish_date
6546 ,p_actual_start_date => l_ver_schedule_attr_rec.actual_start_date
6547 ,p_actual_finish_date => l_ver_schedule_attr_rec.actual_finish_date
6548 ,p_estimate_start_date => l_ver_schedule_attr_rec.estimated_start_date
6549 ,p_estimate_finish_date => l_ver_schedule_attr_rec.estimated_finish_date
6550 ,p_duration => l_ver_schedule_attr_rec.duration
6551 ,p_early_start_date => l_ver_schedule_attr_rec.early_start_date
6552 ,p_early_end_date => l_ver_schedule_attr_rec.early_finish_date
6553 ,p_late_start_date => l_ver_schedule_attr_rec.late_start_date
6554 ,p_late_end_date => l_ver_schedule_attr_rec.late_finish_date
6555 ,p_milestone_flag => l_ver_schedule_attr_rec.milestone_flag
6556 ,p_critical_flag => l_ver_schedule_attr_rec.critical_flag
6557 ,p_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
6558 ,p_PLANNED_EFFORT => l_ver_schedule_attr_rec.PLANNED_EFFORT
6559 ,x_pev_schedule_id => l_pev_schedule_id
6560 ,x_return_status => l_return_status
6561 ,x_msg_count => l_msg_count
6562 ,x_msg_data => l_msg_data );
6563 */
6564 l_pev_schedule_id := NULL;
6565 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
6566 X_ROW_ID => X_Row_Id
6567 ,X_PEV_SCHEDULE_ID => l_pev_schedule_id
6568 ,X_ELEMENT_VERSION_ID => l_new_struct_ver_id
6569 ,X_PROJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
6570 ,X_PROJ_ELEMENT_ID => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
6571 ,X_SCHEDULED_START_DATE => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
6572 ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
6573 ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
6574 ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
6575 ,X_ACTUAL_START_DATE => l_ver_schedule_attr_rec.ACTUAL_START_DATE
6576 ,X_ACTUAL_FINISH_DATE => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
6577 ,X_ESTIMATED_START_DATE => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
6578 ,X_ESTIMATED_FINISH_DATE => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
6579 ,X_DURATION => l_ver_schedule_attr_rec.DURATION
6580 ,X_EARLY_START_DATE => l_ver_schedule_attr_rec.EARLY_START_DATE
6581 ,X_EARLY_FINISH_DATE => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
6582 ,X_LATE_START_DATE => l_ver_schedule_attr_rec.LATE_START_DATE
6583 ,X_LATE_FINISH_DATE => l_ver_schedule_attr_rec.LATE_FINISH_DATE
6584 ,X_CALENDAR_ID => l_ver_schedule_attr_rec.CALENDAR_ID
6585 ,X_MILESTONE_FLAG => l_ver_schedule_attr_rec.MILESTONE_FLAG
6586 ,X_CRITICAL_FLAG => l_ver_schedule_attr_rec.CRITICAL_FLAG
6587 ,X_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.wq_planned_quantity
6588 ,X_PLANNED_EFFORT => l_ver_schedule_attr_rec.planned_effort
6589 ,X_ACTUAL_DURATION => l_ver_schedule_attr_rec.actual_duration
6590 ,X_ESTIMATED_DURATION => l_ver_schedule_attr_rec.estimated_duration
6591 ,X_ATTRIBUTE_CATEGORY => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
6592 ,X_ATTRIBUTE1 => l_ver_schedule_attr_rec.ATTRIBUTE1
6593 ,X_ATTRIBUTE2 => l_ver_schedule_attr_rec.ATTRIBUTE2
6594 ,X_ATTRIBUTE3 => l_ver_schedule_attr_rec.ATTRIBUTE3
6595 ,X_ATTRIBUTE4 => l_ver_schedule_attr_rec.ATTRIBUTE4
6596 ,X_ATTRIBUTE5 => l_ver_schedule_attr_rec.ATTRIBUTE5
6597 ,X_ATTRIBUTE6 => l_ver_schedule_attr_rec.ATTRIBUTE6
6598 ,X_ATTRIBUTE7 => l_ver_schedule_attr_rec.ATTRIBUTE7
6599 ,X_ATTRIBUTE8 => l_ver_schedule_attr_rec.ATTRIBUTE8
6600 ,X_ATTRIBUTE9 => l_ver_schedule_attr_rec.ATTRIBUTE9
6601 ,X_ATTRIBUTE10 => l_ver_schedule_attr_rec.ATTRIBUTE10
6602 ,X_ATTRIBUTE11 => l_ver_schedule_attr_rec.ATTRIBUTE11
6603 ,X_ATTRIBUTE12 => l_ver_schedule_attr_rec.ATTRIBUTE12
6604 ,X_ATTRIBUTE13 => l_ver_schedule_attr_rec.ATTRIBUTE13
6605 ,X_ATTRIBUTE14 => l_ver_schedule_attr_rec.ATTRIBUTE14
6606 ,X_ATTRIBUTE15 => l_ver_schedule_attr_rec.ATTRIBUTE15
6607 ,X_SOURCE_OBJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
6608 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
6609 );
6610
6611
6612 IF (p_debug_mode = 'Y') THEN
6613 pa_debug.debug('Create Schedule Version return status: ' || l_return_status);
6614 pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
6615 END IF;
6616
6617 --Check if there is any error.
6618 l_msg_count := FND_MSG_PUB.count_msg;
6619 IF l_msg_count > 0 THEN
6620 x_msg_count := l_msg_count;
6621 IF x_msg_count = 1 THEN
6622 x_msg_data := l_msg_data;
6623 END IF;
6624 RAISE FND_API.G_EXC_ERROR;
6625 END IF;
6626
6627 ELSIF l_structure_type in ('FINANCIAL') then
6628 -- There can only be one working version any any time for a financial structure
6629 OPEN l_check_working_versions_csr(p_structure_version_id);
6630 FETCH l_check_working_versions_csr INTO l_dummy;
6631 if l_check_working_versions_csr%FOUND then
6632 CLOSE l_check_working_versions_csr;
6633 PA_UTILS.ADD_MESSAGE('PA','PA_PS_WORKING_VER_EXISTS');
6634 x_msg_data := 'PA_PS_WORKING_VER_EXISTS';
6635 RAISE FND_API.G_EXC_ERROR;
6636 end if;
6637 CLOSE l_check_working_versions_csr;
6638 end if;
6639
6640 -- Fetch all task versions for this structure version
6641 OPEN l_get_task_versions_csr(p_structure_version_id);
6642
6643 l_last_wbs_level := null;
6644
6645 LOOP
6646 FETCH l_get_task_versions_csr INTO l_task_versions_rec;
6647 EXIT WHEN l_get_task_versions_csr%NOTFOUND;
6648
6649 if l_last_wbs_level is null then
6650 -- first task version being created
6651 -- This task should have wbs level = 1
6652 l_ref_task_ver_id := l_new_struct_ver_id; --p_structure_version_id;
6653 l_peer_or_sub := 'SUB';
6654 else
6655 if l_task_versions_rec.wbs_level > l_last_wbs_level then
6656 l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
6657 l_peer_or_sub := 'SUB';
6658 else
6659 l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
6660 l_peer_or_sub := 'PEER';
6661 end if;
6662 end if;
6663
6664 --Bug 2189657
6665 --Added for linking tasks with no display sequence.
6666 --Set correct reference and parent element version id
6667 If (l_task_versions_rec.display_sequence IS NULL) THEN
6668 IF (l_ref_task_ver_id <> l_new_struct_ver_id) THEN
6669 --A task has already been created. Reference task must be a task
6670 IF (l_task_versions_rec.parent_element_version_id = p_structure_version_id) THEN
6671 --this is a link to the structure version. A task has already been created.
6672 --need to use a top level task as peer reference task
6673 l_peer_or_sub := 'PEER';
6674 l_ref_task_ver_id := l_outline_task_ref(1);
6675 ELSE
6676 --this is a link to a task.
6677 l_peer_or_sub := 'SUB';
6678 l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
6679 END IF;
6680 ELSE
6681 --No task has been created. Reference task is structure
6682 l_peer_or_sub := 'SUB';
6683 l_ref_task_ver_id := l_new_struct_ver_id;
6684 -- l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
6685 END IF;
6686 END IF;
6687 --Bug 2189657 end;
6688 OPEN get_cur_task_ver_weighting(l_task_versions_rec.element_version_id);
6689 FETCH get_cur_task_ver_weighting INTO l_weighting;
6690 CLOSE get_cur_task_ver_weighting;
6691
6692 PA_TASK_PVT1.CREATE_TASK_VERSION
6693 ( p_validate_only => FND_API.G_FALSE
6694 ,p_validation_level => 0
6695 ,p_ref_task_version_id => l_ref_task_ver_id
6696 ,p_peer_or_sub => l_peer_or_sub
6697 ,p_task_id => l_task_versions_rec.proj_element_id
6698 ,p_WEIGHTING_PERCENTAGE => l_weighting
6699 ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE
6700 ,x_task_version_id => l_task_version_id
6701 ,x_return_status => l_return_status
6702 ,x_msg_count => l_msg_count
6703 ,x_msg_data => l_msg_data);
6704
6705 t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
6706
6707 IF (p_debug_mode = 'Y') THEN
6708 pa_debug.debug('Create Task Version return status: ' || l_return_status);
6709 pa_debug.debug('l_task_version_id: ' || l_task_version_id);
6710 pa_debug.debug('l_msg_count: ' || l_msg_count);
6711 END IF;
6712
6713 --Check if there is any error.
6714 l_msg_count := FND_MSG_PUB.count_msg;
6715 IF l_msg_count > 0 THEN
6716 x_msg_count := l_msg_count;
6717 IF x_msg_count = 1 THEN
6718 x_msg_data := l_msg_data;
6719 END IF;
6720 RAISE FND_API.G_EXC_ERROR;
6721 END IF;
6722
6723 if l_structure_type = 'WORKPLAN' then
6724 -- Get task version schedule attributes
6725 OPEN l_get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id);
6726 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
6727 CLOSE l_get_ver_schedule_attr_csr;
6728
6729 IF (p_debug_mode = 'Y') THEN
6730 pa_debug.debug('Before Create Schedule Version');
6731 END IF;
6732 -- xxlu added DFF attributes
6733 /* PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
6734 ( p_validate_only => FND_API.G_FALSE
6735 ,p_element_version_id => l_task_version_id
6736 ,p_calendar_id => l_ver_schedule_attr_rec.calendar_id
6737 ,p_scheduled_start_date => l_ver_schedule_attr_rec.scheduled_start_date
6738 ,p_scheduled_end_date => l_ver_schedule_attr_rec.scheduled_finish_date
6739 ,p_obligation_start_date => l_ver_schedule_attr_rec.obligation_start_date
6740 ,p_obligation_end_date => l_ver_schedule_attr_rec.obligation_finish_date
6741 ,p_actual_start_date => l_ver_schedule_attr_rec.actual_start_date
6742 ,p_actual_finish_date => l_ver_schedule_attr_rec.actual_finish_date
6743 ,p_estimate_start_date => l_ver_schedule_attr_rec.estimated_start_date
6744 ,p_estimate_finish_date => l_ver_schedule_attr_rec.estimated_finish_date
6745 ,p_duration => l_ver_schedule_attr_rec.duration
6746 ,p_early_start_date => l_ver_schedule_attr_rec.early_start_date
6747 ,p_early_end_date => l_ver_schedule_attr_rec.early_finish_date
6748 ,p_late_start_date => l_ver_schedule_attr_rec.late_start_date
6749 ,p_late_end_date => l_ver_schedule_attr_rec.late_finish_date
6750 ,p_milestone_flag => l_ver_schedule_attr_rec.milestone_flag
6751 ,p_critical_flag => l_ver_schedule_attr_rec.critical_flag
6752 ,p_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
6753 ,p_PLANNED_EFFORT => l_ver_schedule_attr_rec.PLANNED_EFFORT
6754 ,p_attribute_category => l_ver_schedule_attr_rec.attribute_category
6755 ,p_attribute1 => l_ver_schedule_attr_rec.attribute1
6756 ,p_attribute2 => l_ver_schedule_attr_rec.attribute2
6757 ,p_attribute3 => l_ver_schedule_attr_rec.attribute3
6758 ,p_attribute4 => l_ver_schedule_attr_rec.attribute4
6759 ,p_attribute5 => l_ver_schedule_attr_rec.attribute5
6760 ,p_attribute6 => l_ver_schedule_attr_rec.attribute6
6761 ,p_attribute7 => l_ver_schedule_attr_rec.attribute7
6762 ,p_attribute8 => l_ver_schedule_attr_rec.attribute8
6763 ,p_attribute9 => l_ver_schedule_attr_rec.attribute9
6764 ,p_attribute10 => l_ver_schedule_attr_rec.attribute10
6765 ,p_attribute11 => l_ver_schedule_attr_rec.attribute11
6766 ,p_attribute12 => l_ver_schedule_attr_rec.attribute12
6767 ,p_attribute13 => l_ver_schedule_attr_rec.attribute13
6768 ,p_attribute14 => l_ver_schedule_attr_rec.attribute14
6769 ,p_attribute15 => l_ver_schedule_attr_rec.attribute15
6770 ,x_pev_schedule_id => l_pev_schedule_id
6771 ,x_return_status => l_return_status
6772 ,x_msg_count => l_msg_count
6773 ,x_msg_data => l_msg_data );
6774 -- end xxlu changes
6775 */
6776 l_pev_schedule_id := NULL;
6777 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
6778 X_ROW_ID => X_Row_Id
6779 ,X_PEV_SCHEDULE_ID => l_pev_schedule_id
6780 ,X_ELEMENT_VERSION_ID => l_task_version_id
6781 ,X_PROJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
6782 ,X_PROJ_ELEMENT_ID => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
6783 ,X_SCHEDULED_START_DATE => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
6784 ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
6785 ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
6786 ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
6787 ,X_ACTUAL_START_DATE => l_ver_schedule_attr_rec.ACTUAL_START_DATE
6788 ,X_ACTUAL_FINISH_DATE => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
6789 ,X_ESTIMATED_START_DATE => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
6790 ,X_ESTIMATED_FINISH_DATE => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
6791 ,X_DURATION => l_ver_schedule_attr_rec.DURATION
6792 ,X_EARLY_START_DATE => l_ver_schedule_attr_rec.EARLY_START_DATE
6793 ,X_EARLY_FINISH_DATE => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
6794 ,X_LATE_START_DATE => l_ver_schedule_attr_rec.LATE_START_DATE
6795 ,X_LATE_FINISH_DATE => l_ver_schedule_attr_rec.LATE_FINISH_DATE
6796 ,X_CALENDAR_ID => l_ver_schedule_attr_rec.CALENDAR_ID
6797 ,X_MILESTONE_FLAG => l_ver_schedule_attr_rec.MILESTONE_FLAG
6798 ,X_CRITICAL_FLAG => l_ver_schedule_attr_rec.CRITICAL_FLAG
6799 ,X_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.wq_planned_quantity
6800 ,X_PLANNED_EFFORT => l_ver_schedule_attr_rec.planned_effort
6801 ,X_ACTUAL_DURATION => l_ver_schedule_attr_rec.actual_duration
6802 ,X_ESTIMATED_DURATION => l_ver_schedule_attr_rec.estimated_duration
6803 ,X_ATTRIBUTE_CATEGORY => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
6804 ,X_ATTRIBUTE1 => l_ver_schedule_attr_rec.ATTRIBUTE1
6805 ,X_ATTRIBUTE2 => l_ver_schedule_attr_rec.ATTRIBUTE2
6806 ,X_ATTRIBUTE3 => l_ver_schedule_attr_rec.ATTRIBUTE3
6807 ,X_ATTRIBUTE4 => l_ver_schedule_attr_rec.ATTRIBUTE4
6808 ,X_ATTRIBUTE5 => l_ver_schedule_attr_rec.ATTRIBUTE5
6809 ,X_ATTRIBUTE6 => l_ver_schedule_attr_rec.ATTRIBUTE6
6810 ,X_ATTRIBUTE7 => l_ver_schedule_attr_rec.ATTRIBUTE7
6811 ,X_ATTRIBUTE8 => l_ver_schedule_attr_rec.ATTRIBUTE8
6812 ,X_ATTRIBUTE9 => l_ver_schedule_attr_rec.ATTRIBUTE9
6813 ,X_ATTRIBUTE10 => l_ver_schedule_attr_rec.ATTRIBUTE10
6814 ,X_ATTRIBUTE11 => l_ver_schedule_attr_rec.ATTRIBUTE11
6815 ,X_ATTRIBUTE12 => l_ver_schedule_attr_rec.ATTRIBUTE12
6816 ,X_ATTRIBUTE13 => l_ver_schedule_attr_rec.ATTRIBUTE13
6817 ,X_ATTRIBUTE14 => l_ver_schedule_attr_rec.ATTRIBUTE14
6818 ,X_ATTRIBUTE15 => l_ver_schedule_attr_rec.ATTRIBUTE15
6819 ,X_SOURCE_OBJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
6820 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
6821 );
6822
6823 IF (p_debug_mode = 'Y') THEN
6824 pa_debug.debug('Create Schedule Version return status: ' || l_return_status);
6825 pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
6826 END IF;
6827
6828 --Check if there is any error.
6829 l_msg_count := FND_MSG_PUB.count_msg;
6830 IF l_msg_count > 0 THEN
6831 x_msg_count := l_msg_count;
6832 IF x_msg_count = 1 THEN
6833 x_msg_data := l_msg_data;
6834 END IF;
6835 RAISE FND_API.G_EXC_ERROR;
6836 END IF;
6837 end if;
6838
6839 /* hsiu: bug 2800553: commented for performance improvement
6840 --Search for outgoing links; create new Links
6841 OPEN get_to_id(l_task_versions_rec.element_version_id);
6842 LOOP
6843 FETCH get_to_id INTO l_to_object_info;
6844 EXIT WHEN get_to_id%NOTFOUND;
6845 If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
6846 OPEN l_get_structure_ver_csr(l_to_object_info.object_id_to);
6847 FETCH l_get_structure_ver_csr INTO l_structure_ver_to_rec;
6848
6849 PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
6850 p_user_id => FND_GLOBAL.USER_ID
6851 ,p_object_type_from => 'PA_TASKS'
6852 ,p_object_id_from1 => l_task_version_id
6853 ,p_object_id_from2 => NULL
6854 ,p_object_id_from3 => NULL
6855 ,p_object_id_from4 => NULL
6856 ,p_object_id_from5 => NULL
6857 ,p_object_type_to => 'PA_STRUCTURES'
6858 ,p_object_id_to1 => l_structure_ver_to_rec.element_version_id
6859 ,p_object_id_to2 => NULL
6860 ,p_object_id_to3 => NULL
6861 ,p_object_id_to4 => NULL
6862 ,p_object_id_to5 => NULL
6863 ,p_relationship_type => 'L'
6864 ,p_relationship_subtype => 'READ_WRITE'
6865 ,p_lag_day => NULL
6866 ,p_imported_lag => NULL
6867 ,p_priority => NULL
6868 ,p_pm_product_code => NULL
6869 ,x_object_relationship_id => l_new_obj_rel_id
6870 ,x_return_status => l_return_status
6871 );
6872 */
6873 /*
6874 OPEN l_get_structure_type_csr(l_structure_ver_to_rec.element_version_id);
6875 FETCH l_get_structure_type_csr INTO l_structure_type1;
6876 CLOSE l_get_structure_type_csr;
6877
6878 PA_RELATIONSHIP_PVT.Create_Relationship(
6879 p_init_msg_list => FND_API.G_FALSE
6880 ,p_commit => FND_API.G_FALSE
6881 ,p_debug_mode => p_debug_mode
6882 ,p_project_id_from => l_structure_ver_rec.project_id
6883 ,p_structure_id_from => l_structure_ver_rec.proj_element_id
6884 ,p_structure_version_id_from => l_new_struct_ver_id
6885 ,p_task_version_id_from => l_task_version_id
6886 ,p_project_id_to => l_structure_ver_to_rec.project_id
6887 ,p_structure_id_to => l_structure_ver_to_rec.proj_element_id
6888 ,p_structure_version_id_to => l_structure_ver_to_rec.element_version_id
6889 ,p_task_version_id_to => NULL
6890 ,p_structure_type => l_structure_type1
6891 ,p_initiating_element => NULL
6892 ,p_link_to_latest_structure_ver => NULL
6893 ,p_relationship_type => 'L'
6894 ,p_relationship_subtype => 'READ_WRITE'
6895 ,x_object_relationship_id => l_new_obj_rel_id
6896 ,x_return_status => l_return_status
6897 ,x_msg_count => l_msg_count
6898 ,x_msg_data => l_msg_data
6899 );
6900 */
6901 /* hsiu: bug 2800553: commented for performance improvement
6902 CLOSE l_get_structure_ver_csr;
6903
6904 ELSIF (l_to_object_info.object_type_to = 'PA_TASKS') THEN
6905 OPEN get_task_version_info(l_to_object_info.object_id_to);
6906 FETCH get_task_version_info INTO l_info_task_ver_rec;
6907
6908 PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
6909 p_user_id => FND_GLOBAL.USER_ID
6910 ,p_object_type_from => 'PA_TASKS'
6911 ,p_object_id_from1 => l_task_version_id
6912 ,p_object_id_from2 => NULL
6913 ,p_object_id_from3 => NULL
6914 ,p_object_id_from4 => NULL
6915 ,p_object_id_from5 => NULL
6916 ,p_object_type_to => 'PA_TASKS'
6917 ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
6918 ,p_object_id_to2 => NULL
6919 ,p_object_id_to3 => NULL
6920 ,p_object_id_to4 => NULL
6921 ,p_object_id_to5 => NULL
6922 ,p_relationship_type => 'L'
6923 ,p_relationship_subtype => 'READ_WRITE'
6924 ,p_lag_day => NULL
6925 ,p_imported_lag => NULL
6926 ,p_priority => NULL
6927 ,p_pm_product_code => NULL
6928 ,x_object_relationship_id => l_new_obj_rel_id
6929 ,x_return_status => l_return_status
6930 );
6931 */
6932 /*
6933 OPEN l_get_structure_type_csr(l_info_task_ver_rec.structure_version_id);
6934 FETCH l_get_structure_type_csr INTO l_structure_type1;
6935 CLOSE l_get_structure_type_csr;
6936
6937 PA_RELATIONSHIP_PVT.Create_Relationship(
6938 p_init_msg_list => FND_API.G_FALSE
6939 ,p_commit => FND_API.G_FALSE
6940 ,p_debug_mode => p_debug_mode
6941 ,p_project_id_from => l_structure_ver_rec.project_id
6942 ,p_structure_id_from => l_structure_ver_rec.proj_element_id
6943 ,p_structure_version_id_from => l_new_struct_ver_id
6944 ,p_task_version_id_from => l_task_version_id
6945 ,p_project_id_to => l_info_task_ver_rec.project_id
6946 ,p_structure_id_to => l_info_task_ver_rec.structure_id
6947 ,p_structure_version_id_to => l_info_task_ver_rec.structure_version_id
6948 ,p_task_version_id_to => l_info_task_ver_rec.task_version_id
6949 ,p_structure_type => l_structure_type1
6950 ,p_initiating_element => NULL
6951 ,p_link_to_latest_structure_ver => NULL
6952 ,p_relationship_type => 'L'
6953 ,p_relationship_subtype => 'READ_WRITE'
6954 ,x_object_relationship_id => l_new_obj_rel_id
6955 ,x_return_status => l_return_status
6956 ,x_msg_count => l_msg_count
6957 ,x_msg_data => l_msg_data
6958 );
6959 */
6960 /* hsiu: bug 2800553: commented for performance improvement
6961 CLOSE get_task_version_info;
6962
6963 END IF;
6964
6965 --Check error
6966 l_msg_count := FND_MSG_PUB.count_msg;
6967 if (l_msg_count > 0) then
6968 x_msg_count := l_msg_count;
6969 if x_msg_count = 1 then
6970 x_msg_data := l_msg_data;
6971 end if;
6972 CLOSE get_to_id;
6973 raise FND_API.G_EXC_ERROR;
6974 end if;
6975 END LOOP;
6976 CLOSE get_to_id;
6977 */
6978 l_last_wbs_level := l_task_versions_rec.wbs_level;
6979 l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;
6980
6981 END LOOP;
6982
6983 CLOSE l_get_task_versions_csr;
6984
6985 x_new_struct_ver_id := l_new_struct_ver_id;
6986 x_return_status := FND_API.G_RET_STS_SUCCESS;
6987
6988 IF (p_commit = FND_API.G_TRUE) THEN
6989 COMMIT;
6990 END IF;
6991
6992 IF (p_debug_mode = 'Y') THEN
6993 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION END');
6994 END IF;
6995
6996 EXCEPTION
6997 when FND_API.G_EXC_ERROR then
6998 if p_commit = FND_API.G_TRUE then
6999 rollback to copy_structure_version_pvt;
7000 end if;
7001 x_return_status := FND_API.G_RET_STS_ERROR;
7002 when FND_API.G_EXC_UNEXPECTED_ERROR then
7003 if p_commit = FND_API.G_TRUE then
7004 rollback to copy_structure_version_pvt;
7005 end if;
7006 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7007 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
7008 p_procedure_name => 'COPY_STRUCTURE_VERSION',
7009 p_error_text => SUBSTRB(SQLERRM,1,240));
7010 when OTHERS then
7011 if p_commit = FND_API.G_TRUE then
7012 rollback to copy_structure_version_pvt;
7013 end if;
7014 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7015 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
7016 p_procedure_name => 'COPY_STRUCTURE_VERSION',
7017 p_error_text => SUBSTRB(SQLERRM,1,240));
7018 raise;
7019 END COPY_STRUCTURE_VERSION;
7020
7021
7022 PROCEDURE COPY_STRUCTURE
7023 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
7024 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
7025 ,p_validation_level IN VARCHAR2 := 100
7026 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
7027 ,p_debug_mode IN VARCHAR2 := 'N'
7028 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7029 ,p_src_project_id IN NUMBER
7030 ,p_dest_project_id IN NUMBER
7031 -- anlee
7032 -- Dates changes
7033 ,p_delta IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7034 -- End of changes
7035 ,p_copy_task_flag IN VARCHAR2 := 'Y'
7036 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7037 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7038 ,x_msg_data OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
7039 IS
7040 l_return_status VARCHAR2(1);
7041 l_msg_count NUMBER;
7042 l_msg_data VARCHAR2(250);
7043 l_split_cost_workplan_flag VARCHAR2(1);
7044 l_structure_id NUMBER;
7045 l_structure_type PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
7046
7047 --Bug 2189657
7048 --Added for linking tasks with no display sequence.
7049 Type T_EquivElemVerTable IS TABLE OF NUMBER
7050 Index by BINARY_INTEGER;
7051 t_equiv_elem_ver_id T_EquivElemVerTable;
7052 --Bug 2189657 end;
7053
7054 CURSOR l_get_structure_type_csr(c_proj_element_id NUMBER)
7055 IS
7056 SELECT structure_type_class_code
7057 FROM PA_STRUCTURE_TYPES pst,
7058 PA_PROJ_STRUCTURE_TYPES ppst
7059 WHERE ppst.proj_element_id = c_proj_element_id
7060 AND pst.structure_type_id = ppst.structure_type_id;
7061
7062 CURSOR l_get_structure_csr(c_project_id NUMBER)
7063 IS
7064 SELECT *
7065 FROM PA_PROJ_ELEMENTS
7066 WHERE project_id = c_project_id
7067 AND object_type = 'PA_STRUCTURES';
7068
7069 l_structure_rec l_get_structure_csr%ROWTYPE;
7070
7071 --This cursor will either get all the working versions or the latest published version
7072 -- CURSOR l_get_structure_versions_csr(c_project_id NUMBER, c_structure_id NUMBER, c_pub_status VARCHAR2)
7073 -- IS
7074 -- SELECT b.element_version_id
7075 -- FROM PA_PROJ_ELEM_VER_STRUCTURE b
7076 -- WHERE b.proj_element_id = c_structure_id
7077 -- AND b.project_id = c_project_id
7078 -- AND (b.STATUS_CODE = 'STRUCTURE_PUBLISHED' AND b.LATEST_EFF_PUBLISHED_FLAG = 'Y' AND c_pub_status = 'Y')
7079 -- UNION
7080 -- SELECT b.element_version_id
7081 -- FROM PA_PROJ_ELEM_VER_STRUCTURE b
7082 -- WHERE b.proj_element_id = c_structure_id
7083 -- AND b.project_id = c_project_id
7084 -- AND (b.STATUS_CODE <> 'STRUCTURE_PUBLISHED' AND c_pub_status = 'N');
7085
7086
7087 l_structure_version_id NUMBER;
7088 l_new_structure_version_id NUMBER;
7089
7090 CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
7091 IS
7092 SELECT *
7093 FROM PA_PROJ_ELEMENT_VERSIONS
7094 WHERE element_version_id = c_structure_version_id;
7095
7096 l_structure_ver_rec l_get_structure_ver_csr%ROWTYPE;
7097
7098 --commented by hsiu for advanced structure changes
7099 -- CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER, c_pub_status VARCHAR2)
7100 -- IS
7101 -- SELECT a.*
7102 -- FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7103 -- PA_PROJ_ELEMENT_VERSIONS b
7104 -- WHERE b.element_version_id = c_structure_version_id
7105 -- AND b.element_version_id = a.element_version_id
7106 -- AND b.project_id = a.project_id
7107 -- AND (a.STATUS_CODE <> 'STRUCTURE_PUBLISHED' AND c_pub_status = 'N')
7108 -- UNION
7109 -- SELECT a.*
7110 -- FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7111 -- PA_PROJ_ELEMENT_VERSIONS b
7112 -- WHERE b.element_version_id = c_structure_version_id
7113 -- AND b.element_version_id = a.element_version_id
7114 -- AND b.project_id = a.project_id
7115 -- AND (a.STATUS_CODE = 'STRUCTURE_PUBLISHED' AND c_pub_status = 'Y' and a.LATEST_EFF_PUBLISHED_FLAG='Y');
7116
7117 CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
7118 IS
7119 SELECT a.*
7120 FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7121 PA_PROJ_ELEMENT_VERSIONS b
7122 WHERE b.element_version_id = c_structure_version_id
7123 AND b.element_version_id = a.element_version_id
7124 AND b.proj_element_id = a.proj_element_id
7125 AND b.project_id = a.project_id;
7126 l_structure_ver_attr_rec l_get_structure_ver_attr_csr%ROWTYPE;
7127
7128 CURSOR l_get_task_versions_csr(c_structure_version_id NUMBER)
7129 IS
7130 SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
7131 b.object_id_from1 parent_element_version_id
7132 FROM PA_PROJ_ELEMENT_VERSIONS a,
7133 PA_OBJECT_RELATIONSHIPS b,
7134 pa_proj_elements c
7135 WHERE a.object_type = 'PA_TASKS'
7136 AND a.parent_structure_version_id = c_structure_version_id
7137 AND a.element_version_id = b.object_id_to1
7138 AND b.relationship_type = 'S'
7139 and c.link_task_flag <> 'Y'
7140 and c.proj_element_id = a.proj_element_id
7141 ORDER BY a.display_sequence;
7142
7143 l_task_versions_rec l_get_task_versions_csr%ROWTYPE;
7144
7145 CURSOR get_task_ver_weighting(p_task_ver_id NUMBER)
7146 IS
7147 select weighting_percentage
7148 from pa_object_relationships
7149 where object_id_to1 = p_task_ver_id
7150 and object_type_to = 'PA_TASKS'
7151 and relationship_type = 'S';
7152 l_weighting_percentage NUMBER;
7153
7154 l_ref_task_ver_id NUMBER;
7155 l_peer_or_sub VARCHAR2(10);
7156
7157 CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
7158 IS
7159 SELECT a.*
7160 FROM PA_PROJ_ELEM_VER_SCHEDULE a,
7161 PA_PROJ_ELEMENT_VERSIONS b
7162 WHERE b.element_version_id = c_element_version_id
7163 AND b.element_version_id = a.element_version_id
7164 AND b.project_id = a.project_id;
7165
7166 l_ver_schedule_attr_rec l_get_ver_schedule_attr_csr%ROWTYPE;
7167
7168 TYPE reference_tasks IS TABLE OF NUMBER
7169 INDEX BY BINARY_INTEGER;
7170
7171 -- This table stores reference task version IDs for a particular wbs
7172 -- level. This provides a lookup to find the last task version
7173 -- at that level.
7174 l_outline_task_ref reference_tasks;
7175
7176 l_last_wbs_level NUMBER;
7177 l_task_version_id NUMBER;
7178 l_pev_schedule_id NUMBER;
7179
7180 CURSOR l_get_tasks_csr(c_project_id NUMBER, c_proj_element_id NUMBER)
7181 IS
7182 SELECT a.*, b.task_number PA_TASK_NUMBER
7183 FROM PA_PROJ_ELEMENTS a,
7184 PA_TASKS b
7185 WHERE a.object_type = 'PA_TASKS'
7186 AND a.project_id = c_project_id
7187 AND a.proj_element_id = c_proj_element_id
7188 AND a.LINK_TASK_FLAG <> 'Y'
7189 AND a.proj_element_id = b.task_id(+);
7190
7191 CURSOR l_get_pa_tasks_csr(c_project_id NUMBER, c_task_number VARCHAR2)
7192 IS
7193 SELECT task_id
7194 FROM PA_TASKS
7195 WHERE project_id = c_project_id
7196 AND task_number = c_task_number;
7197
7198 l_tasks_rec l_get_tasks_csr%ROWTYPE;
7199 l_task_id NUMBER;
7200 l_task_id_ref reference_tasks;
7201 l_pev_structure_id NUMBER;
7202
7203 --Bug No 3634334 Commented for performance reasons and rewritten the query.
7204 /*CURSOR l_linking_tasks_csr(c_src_project_id NUMBER, c_dest_project_id NUMBER)
7205 IS
7206 select a.task_id
7207 from pa_tasks a, pa_tasks b, pa_proj_elements c
7208 where a.project_id = c_dest_project_id
7209 and b.project_id = c_src_project_id
7210 and a.task_number = b.task_number
7211 and b.task_id = c.proj_element_id
7212 and c.link_task_flag = 'Y';*/
7213
7214 CURSOR l_linking_tasks_csr(c_src_project_id NUMBER, c_dest_project_id NUMBER)
7215 IS
7216 select /*+ INDEX(a PA_TASKS_U2) */ a.task_id --Bug No 3634334
7217 from pa_tasks a, pa_tasks b, pa_proj_elements c
7218 where a.project_id = c_dest_project_id
7219 and b.project_id = c_src_project_id
7220 and a.task_number = b.task_number
7221 and c.project_id = c_src_project_id --Bug No 3634334
7222 and b.task_id = c.proj_element_id
7223 and c.object_type = 'PA_TASKS' -- Bug No. 3968095
7224 and c.link_task_flag = 'Y';
7225
7226 l_task_delete NUMBER;
7227 l_task_delete_rvn NUMBER;
7228 l_task_delete_wbs_rvn NUMBER;
7229
7230 Type task_match_tbl is Table of NUMBER
7231 INDEX BY BINARY_INTEGER;
7232 l_task_match_tbl task_match_tbl;
7233
7234 CURSOR l_is_template (c_project_id NUMBER)
7235 IS
7236 SELECT 1 FROM PA_PROJECTS_ALL
7237 WHERE TEMPLATE_FLAG = 'Y'
7238 AND project_id = c_project_id;
7239 l_dummy NUMBER;
7240
7241 -- l_is_workplan VARCHAR2(1);
7242 -- l_is_billing VARCHAR2(1);
7243 -- l_is_costing VARCHAR2(1);
7244 l_structure_pub_status VARCHAR2(1);
7245 l_rowid VARCHAR2(255);
7246 l_name VARCHAR2(240);
7247 l_project_name VARCHAR2(30);
7248 l_append VARCHAR2(10) := ': ';
7249 l_suffix VARCHAR2(80);
7250 -- anlee
7251 -- Dates changes
7252 l_delta NUMBER;
7253 -- End of changes
7254
7255 --HSIU
7256 --Added for calculating delta using target date
7257 CURSOR get_target_dates
7258 IS
7259 SELECT target_start_date, target_finish_date
7260 FROM PA_PROJECTS_ALL
7261 WHERE PROJECT_ID = p_dest_project_id;
7262 l_target_start_date DATE;
7263 l_target_finish_date DATE;
7264 l_scheduled_start_date DATE;
7265 l_scheduled_finish_date DATE;
7266 -- hsiu
7267 -- Added for advanced structure
7268 l_src_template_flag VARCHAR2(1);
7269 l_dest_template_flag VARCHAR2(1);
7270 l_select NUMBER; -- For selecting structure versions:
7271 -- 1 for last updated working
7272 -- 2 for all working, baselined and latest published
7273 -- 3 for latest published only
7274 l_copy NUMBER; -- For status of copied structure version
7275 -- 1 for Working
7276 -- 2 for Published and Baselined
7277 -- 3 for same as original
7278 -- 4 for Published only
7279 l_status_code VARCHAR2(30);
7280 l_baseline_flag VARCHAR2(1);
7281 l_latest_flag VARCHAR2(1);
7282
7283 CURSOR l_get_structure_versions_csr(c_project_id NUMBER, c_structure_id NUMBER,
7284 c_option NUMBER)
7285 IS
7286 SELECT distinct(b.element_version_id)
7287 FROM pa_proj_elements a, pa_proj_elem_ver_structure b
7288 WHERE a.project_id = c_project_id
7289 AND a.proj_element_id = c_structure_id
7290 AND a.project_id = b.project_id
7291 AND a.proj_element_id = b.proj_element_id
7292 AND b.status_code <> 'STRUCTURE_PUBLISHED'
7293 --Bug 2643432
7294 --This is a temporary fix. The API returns the first row, but since date
7295 --comparison only compares up to the day, not the second, we can only
7296 --return the first selected row in this API.
7297 AND b.element_version_id = PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(c_structure_id)
7298 -- AND b.last_update_date = (
7299 -- SELECT MAX(c.last_update_date)
7300 -- FROM pa_proj_elem_ver_structure c
7301 -- WHERE c.project_id = a.project_id
7302 -- AND c.proj_element_id = a.proj_element_id
7303 -- AND c.status_code <> 'STRUCTURE_PUBLISHED')
7304 AND 1 = (c_option)
7305 UNION
7306 SELECT distinct(b.element_version_id)
7307 FROM pa_proj_elements a, pa_proj_elem_ver_structure b
7308 WHERE a.project_id = c_project_id
7309 AND a.proj_element_id = c_structure_id
7310 AND a.project_id = b.project_id
7311 AND a.proj_element_id = b.proj_element_id
7312 AND ((b.status_code = 'STRUCTURE_PUBLISHED' AND
7313 b.latest_eff_published_flag = 'Y')
7314 OR
7315 (b.status_code = 'STRUCTURE_PUBLISHED' AND
7316 b.current_flag = 'Y')
7317 OR
7318 (b.status_code <> 'STRUCTURE_PUBLISHED'))
7319 AND 2 = (c_option)
7320 UNION
7321 SELECT distinct(b.element_version_id)
7322 FROM pa_proj_elements a, pa_proj_elem_ver_structure b
7323 WHERE a.project_id = c_project_id
7324 AND a.proj_element_id = c_structure_id
7325 AND a.project_id = b.project_id
7326 AND a.proj_element_id = b.proj_element_id
7327 AND b.status_code = 'STRUCTURE_PUBLISHED'
7328 AND b.latest_eff_published_flag = 'Y'
7329 AND 3 = (c_option);
7330
7331
7332 CURSOR get_wp_attr(c_proj_element_id NUMBER) IS
7333 select *
7334 from pa_proj_workplan_attr
7335 where proj_element_id = c_proj_element_id;
7336 l_wp_attr_rec get_wp_attr%ROWTYPE;
7337
7338 CURSOR get_progress_attr(c_proj_element_id NUMBER, c_project_id NUMBER) IS -- For Bug 3968095
7339 select *
7340 from pa_proj_progress_attr
7341 where object_type = 'PA_STRUCTURES'
7342 and object_id = c_proj_element_id
7343 and project_id = c_project_id; -- For Bug 3968095
7344 l_progress_attr_rec get_progress_attr%ROWTYPE;
7345
7346 CURSOR get_proj_rec_ver_number(c_project_id NUMBER) IS
7347 select record_version_number
7348 from pa_projects_all
7349 where project_id = c_project_id;
7350 l_proj_record_ver_number NUMBER;
7351 l_struc_scheduled_start_date DATE;
7352 l_struc_scheduled_finish_date DATE;
7353 --hsiu added for task version status
7354 l_task_unpub_ver_status_code pa_proj_element_versions.TASK_UNPUB_VER_STATUS_CODE%TYPE;
7355 --end task version status changes
7356
7357 --hsiu: bug 2667527
7358 CURSOR get_init_task_stat(c_task_type_id NUMBER) IS
7359 select INITIAL_STATUS_CODE
7360 from pa_task_types
7361 where task_type_id = c_task_type_id;
7362 l_init_status_code PA_TASK_TYPES.INITIAL_STATUS_CODE%TYPE;
7363 --end bug 2667527
7364 BEGIN
7365 pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE');
7366
7367 IF (p_debug_mode = 'Y') THEN
7368 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE begin');
7369 END IF;
7370
7371 IF (p_commit = FND_API.G_TRUE) THEN
7372 savepoint copy_structure_pvt;
7373 END IF;
7374
7375 -- Check if source and destination project are the same
7376 if p_src_project_id = p_dest_project_id then
7377 x_return_status := FND_API.G_RET_STS_SUCCESS;
7378 return;
7379 end if;
7380
7381 --Check if the destination project is a template
7382 OPEN l_is_template(p_dest_project_id);
7383 FETCH l_is_template INTO l_dummy;
7384 IF l_is_template%NOTFOUND THEN
7385 l_dest_template_flag := 'N';
7386 ELSE
7387 l_dest_template_flag := 'Y';
7388 END IF;
7389 CLOSE l_is_template;
7390
7391 --Check if the source project is a template
7392 OPEN l_is_template(p_src_project_id);
7393 FETCH l_is_template INTO l_dummy;
7394 IF l_is_template%NOTFOUND THEN
7395 l_src_template_flag := 'N';
7396 ELSE
7397 l_src_template_flag := 'Y';
7398 END IF;
7399 CLOSE l_is_template;
7400
7401 /* commented by Hsiu
7402 -- delta is now calculated for each version
7403
7404 -- anlee
7405 -- Dates changes
7406 if (p_delta = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR (p_delta is NULL) then
7407 l_delta := 0;
7408 else
7409 l_delta := p_delta;
7410 end if;
7411 -- End of changes
7412 */
7413
7414 /* commented by Hsiu
7415
7416 -- Check split_cost_from_workplan_flag for source project
7417 SELECT split_cost_from_workplan_flag
7418 INTO l_split_cost_workplan_flag
7419 FROM PA_PROJECTS_ALL
7420 WHERE project_id = p_src_project_id;
7421
7422 if l_split_cost_workplan_flag = 'N' then
7423 OPEN l_get_structure_csr(p_src_project_id);
7424 FETCH l_get_structure_csr INTO l_structure_rec;
7425 if l_get_structure_csr%NOTFOUND then
7426 CLOSE l_get_structure_csr;
7427 PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_NOT_EXIST');
7428 l_msg_data := 'PA_PS_STRUC_NOT_EXIST';
7429 RAISE FND_API.G_EXC_ERROR;
7430 end if;
7431
7432 CLOSE l_get_structure_csr;
7433 */
7434
7435 select name into l_project_name
7436 from pa_projects_all
7437 where project_id = p_dest_project_id;
7438
7439 select meaning
7440 into l_suffix
7441 from pa_lookups
7442 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
7443 and lookup_code = 'WORKPLAN';
7444
7445 --Hsiu start modification
7446 --Get target dates
7447 l_delta := 0;
7448 OPEN get_target_dates;
7449 FETCH get_target_dates into l_target_start_date, l_target_finish_date;
7450 CLOSE get_target_dates;
7451 --end modification
7452
7453 OPEN l_get_structure_csr(p_src_project_id);
7454 LOOP
7455 FETCH l_get_structure_csr INTO l_structure_rec;
7456 EXIT WHEN l_get_structure_csr%NOTFOUND;
7457
7458 --check if this is a split project
7459 -- SELECT split_cost_from_workplan_flag
7460 -- INTO l_split_cost_workplan_flag
7461 -- FROM PA_PROJECTS_ALL
7462 -- WHERE project_id = p_src_project_id;
7463
7464 -- OPEN l_get_structure_type_csr(l_structure_rec.proj_element_id);
7465 -- FETCH l_get_structure_type_csr INTO l_structure_type;
7466 -- CLOSE l_get_structure_type_csr;
7467
7468 -- IF l_split_cost_workplan_flag = 'N' THEN
7469 -- --there should not be a second structure
7470 -- l_structure_type := NULL;
7471 -- END IF;
7472
7473 -- Hsiu added
7474 -- For advanced structure
7475
7476 l_name := substrb(l_project_name, 1, 240);
7477 IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id)
7478 = 'N') THEN
7479 --Workplan and financial are separate structures
7480 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
7481 l_structure_rec.proj_element_id, 'WORKPLAN')
7482 = 'Y') THEN
7483
7484 --Workplan structure
7485 l_structure_type := 'WORKPLAN';
7486
7487 --Get workplan attributes
7488 OPEN get_wp_attr(l_structure_rec.proj_element_id);
7489 FETCH get_wp_attr into l_wp_attr_rec;
7490 CLOSE get_wp_attr;
7491
7492 OPEN get_progress_attr(l_structure_rec.proj_element_id, l_structure_rec.project_id); -- For Bug 3968095
7493 FETCH get_progress_attr into l_progress_attr_rec;
7494 CLOSE get_progress_attr;
7495
7496 --Modify name; add suffix
7497 l_name := substrb(l_project_name||l_append||l_suffix, 1, 240);
7498
7499 IF (l_src_template_flag = 'Y') AND
7500 (l_dest_template_flag = 'Y') THEN
7501 l_select := 1;
7502 l_copy := 1;
7503 ELSIF (l_src_template_flag = 'Y') AND
7504 (l_dest_template_flag = 'N') THEN
7505 l_select := 1;
7506 IF (l_wp_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y' AND
7507 l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N') THEN
7508 l_copy := 1;
7509 ELSE
7510 l_copy := 2;
7511 END IF;
7512 ELSIF (l_src_template_flag = 'N') AND
7513 (l_dest_template_flag = 'N') THEN
7514 l_select := 2;
7515 l_copy := 3;
7516 ELSIF (l_src_template_flag = 'N') AND
7517 (l_dest_template_flag = 'Y') THEN
7518 IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7519 l_structure_rec.proj_element_id) = 'Y') THEN
7520 l_select := 3;
7521 ELSE
7522 l_select := 1;
7523 END IF;
7524 l_copy := 1;
7525 END IF;
7526 END IF;
7527 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
7528 l_structure_rec.proj_element_id, 'FINANCIAL')
7529 = 'Y') THEN
7530
7531 --Financial structure
7532 l_structure_type := 'FINANCIAL';
7533
7534 IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7535 l_structure_rec.proj_element_id) = 'Y') THEN
7536 l_select := 3;
7537 ELSE
7538 l_select := 1;
7539 END IF;
7540 IF (l_dest_template_flag = 'Y') THEN
7541 l_copy := 1;
7542 ELSE
7543 l_copy := 4;
7544 END IF;
7545
7546 END IF;
7547 ELSE--share flag is 'Y' for source project
7548
7549 --Workplan and financial as 1 structure
7550 l_structure_type := NULL; --for share structure
7551
7552 --Get workplan attributes
7553 OPEN get_wp_attr(l_structure_rec.proj_element_id);
7554 FETCH get_wp_attr into l_wp_attr_rec;
7555 CLOSE get_wp_attr;
7556
7557 OPEN get_progress_attr(l_structure_rec.proj_element_id, l_structure_rec.project_id); -- For Bug 3968095
7558 FETCH get_progress_attr into l_progress_attr_rec;
7559 CLOSE get_progress_attr;
7560
7561 IF (l_src_template_flag = 'Y') AND
7562 (l_dest_template_flag = 'Y') THEN
7563 l_select := 1;
7564 l_copy := 1;
7565 ELSIF (l_src_template_flag = 'Y') AND
7566 (l_dest_template_flag = 'N') THEN
7567 l_select := 1;
7568 IF (l_wp_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y' AND
7569 l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N') THEN
7570 l_copy := 1;
7571 ELSE
7572 l_copy := 2;
7573 END IF;
7574 ELSIF (l_src_template_flag = 'N') AND
7575 (l_dest_template_flag = 'N') THEN
7576 l_select := 2;
7577 l_copy := 3;
7578 ELSIF (l_src_template_flag = 'N') AND
7579 (l_dest_template_flag = 'Y') THEN
7580 IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7581 l_structure_rec.proj_element_id) = 'Y') THEN
7582 l_select := 3;
7583 ELSE
7584 l_select := 1;
7585 END IF;
7586 l_copy := 1;
7587 END IF;
7588 END IF;
7589 -- end advanced structure changes
7590
7591 /*
7592 IF (l_structure_type = 'WORKPLAN') THEN
7593 l_name := substr(l_project_name||l_append||l_suffix, 1, 240);
7594 ELSE
7595 l_name := substr(l_project_name, 1, 240);
7596 END IF;
7597 */
7598 IF (p_debug_mode = 'Y') THEN
7599 pa_debug.debug('create structure');
7600 END IF;
7601
7602 --Commented by hsiu
7603 -- IF (l_dest_template_flag = 'Y' AND l_structure_type = 'WORKPLAN') THEN
7604 --Create new structure
7605 -- PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
7606 -- ( p_validate_only => FND_API.G_FALSE
7607 -- ,p_project_id => p_dest_project_id
7608 -- ,p_structure_number => l_name
7609 -- ,p_structure_name => l_name
7610 -- ,p_calling_flag => l_structure_type
7611 -- ,x_structure_id => l_structure_id
7612 -- ,x_return_status => l_return_status
7613 -- ,x_msg_count => l_msg_count
7614 -- ,x_msg_data => l_msg_data );
7615
7616 -- --Check if there is any error.
7617 -- l_msg_count := FND_MSG_PUB.count_msg;
7618 -- IF l_msg_count > 0 THEN
7619 -- x_msg_count := l_msg_count;
7620 -- IF x_msg_count = 1 THEN
7621 -- x_msg_data := l_msg_data;
7622 -- END IF;
7623 -- RAISE FND_API.G_EXC_ERROR;
7624 -- END IF;
7625
7626 -- IF (p_debug_mode = 'Y') THEN
7627 -- pa_debug.debug('create structure version');
7628 -- END IF;
7629 -- PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
7630 -- ( p_validate_only => FND_API.G_FALSE
7631 -- ,p_structure_id => l_structure_id
7632 -- ,x_structure_version_id => l_new_structure_version_id
7633 -- ,x_return_status => l_return_status
7634 -- ,x_msg_count => l_msg_count
7635 -- ,x_msg_data => l_msg_data );
7636
7637 -- --Check if there is any error.
7638 -- l_msg_count := FND_MSG_PUB.count_msg;
7639 -- IF l_msg_count > 0 THEN
7640 -- x_msg_count := l_msg_count;
7641 -- IF x_msg_count = 1 THEN
7642 -- x_msg_data := l_msg_data;
7643 -- END IF;
7644 -- RAISE FND_API.G_EXC_ERROR;
7645 -- END IF;
7646
7647 -- IF (p_debug_mode = 'Y') THEN
7648 -- pa_debug.debug('create structure version attr');
7649 -- END IF;
7650 -- PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
7651 -- ( p_validate_only => FND_API.G_FALSE
7652 -- ,p_structure_version_id => l_new_structure_version_id
7653 -- ,p_structure_version_name => l_name
7654 -- ,p_structure_version_desc => NULL
7655 -- ,p_effective_date => NULL
7656 -- ,p_latest_eff_published_flag => 'N'
7657 -- ,p_locked_status_code => 'UNLOCKED'
7658 -- ,p_struct_version_status_code => 'STRUCTURE_WORKING'
7659 -- ,p_baseline_current_flag => 'N'
7660 -- ,p_baseline_original_flag => 'N'
7661 -- ,x_pev_structure_id => l_pev_structure_id
7662 -- ,x_return_status => l_return_status
7663 -- ,x_msg_count => l_msg_count
7664 -- ,x_msg_data => l_msg_data );
7665
7666 -- --Check if there is any error.
7667 -- l_msg_count := FND_MSG_PUB.count_msg;
7668 -- IF l_msg_count > 0 THEN
7669 -- x_msg_count := l_msg_count;
7670 -- IF x_msg_count = 1 THEN
7671 -- x_msg_data := l_msg_data;
7672 -- END IF;
7673 -- RAISE FND_API.G_EXC_ERROR;
7674 -- END IF;
7675
7676 -- IF (p_debug_mode = 'Y') THEN
7677 -- pa_debug.debug('create schedule version');
7678 -- END IF;
7679 -- PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
7680 -- ( p_validate_only => FND_API.G_FALSE
7681 -- ,p_element_version_id => l_new_structure_version_id
7682 -- ,p_scheduled_start_date => SYSDATE
7683 -- ,p_scheduled_end_date => SYSDATE
7684 -- ,x_pev_schedule_id => l_pev_schedule_id
7685 -- ,x_return_status => l_return_status
7686 -- ,x_msg_count => l_msg_count
7687 -- ,x_msg_data => l_msg_data );
7688
7689 -- --Check if there is any error.
7690 -- l_msg_count := FND_MSG_PUB.count_msg;
7691 -- IF l_msg_count > 0 THEN
7692 -- x_msg_count := l_msg_count;
7693 -- IF x_msg_count = 1 THEN
7694 -- x_msg_data := l_msg_data;
7695 -- END IF;
7696 -- RAISE FND_API.G_EXC_ERROR;
7697 -- END IF;
7698
7699 -- ELSE
7700 --copy from
7701 --end commented code by hsiu
7702
7703 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
7704 ( p_validate_only => FND_API.G_FALSE
7705 ,p_project_id => p_dest_project_id
7706 ,p_structure_number => l_name
7707 ,p_structure_name => l_name
7708 ,p_calling_flag => l_structure_type
7709 ,p_structure_description => l_structure_rec.description
7710 ,p_attribute_category => l_structure_rec.attribute_category
7711 ,p_attribute1 => l_structure_rec.attribute1
7712 ,p_attribute2 => l_structure_rec.attribute2
7713 ,p_attribute3 => l_structure_rec.attribute3
7714 ,p_attribute4 => l_structure_rec.attribute4
7715 ,p_attribute5 => l_structure_rec.attribute5
7716 ,p_attribute6 => l_structure_rec.attribute6
7717 ,p_attribute7 => l_structure_rec.attribute7
7718 ,p_attribute8 => l_structure_rec.attribute8
7719 ,p_attribute9 => l_structure_rec.attribute9
7720 ,p_attribute10 => l_structure_rec.attribute10
7721 ,p_attribute11 => l_structure_rec.attribute11
7722 ,p_attribute12 => l_structure_rec.attribute12
7723 ,p_attribute13 => l_structure_rec.attribute13
7724 ,p_attribute14 => l_structure_rec.attribute14
7725 ,p_attribute15 => l_structure_rec.attribute15
7726 ,p_approval_reqd_flag =>l_wp_attr_rec.WP_APPROVAL_REQD_FLAG
7727 ,p_auto_publish_flag =>l_wp_attr_rec.WP_AUTO_PUBLISH_FLAG
7728 ,p_approver_source_id =>l_wp_attr_rec.WP_APPROVER_SOURCE_ID
7729 ,p_approver_source_type =>l_wp_attr_rec.WP_APPROVER_SOURCE_TYPE
7730 ,p_default_display_lvl =>l_wp_attr_rec.WP_DEFAULT_DISPLAY_LVL
7731 ,p_enable_wp_version_flag =>l_wp_attr_rec.WP_ENABLE_VERSION_FLAG
7732 ,p_auto_pub_upon_creation_flag =>l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
7733 ,p_auto_sync_txn_date_flag =>l_wp_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
7734 ,p_txn_date_sync_buf_days =>l_wp_attr_rec.TXN_DATE_SYNC_BUF_DAYS
7735 --LDENG
7736 ,p_lifecycle_version_id => l_wp_attr_rec.LIFECYCLE_VERSION_ID
7737 ,p_current_phase_version_id => l_wp_attr_rec.CURRENT_PHASE_VERSION_ID
7738 --END LDENG
7739 ,p_PROGRESS_CYCLE_ID =>l_progress_attr_rec.PROGRESS_CYCLE_ID
7740 ,p_wq_enable_flag =>l_progress_attr_rec.WQ_ENABLE_FLAG
7741 ,p_remain_effort_enable_flag =>l_progress_attr_rec.REMAIN_EFFORT_ENABLE_FLAG
7742 ,p_percent_comp_enable_flag =>l_progress_attr_rec.PERCENT_COMP_ENABLE_FLAG
7743 ,p_next_progress_update_date =>l_progress_attr_rec.NEXT_PROGRESS_UPDATE_DATE
7744 ,x_structure_id => l_structure_id
7745 ,x_return_status => l_return_status
7746 ,x_msg_count => l_msg_count
7747 ,x_msg_data => l_msg_data );
7748
7749 IF (p_debug_mode = 'Y') THEN
7750 pa_debug.debug('done: '||l_return_status);
7751 END IF;
7752
7753 --Check if there is any error.
7754 l_msg_count := FND_MSG_PUB.count_msg;
7755 IF l_msg_count > 0 THEN
7756 x_msg_count := l_msg_count;
7757 IF x_msg_count = 1 THEN
7758 x_msg_data := l_msg_data;
7759 END IF;
7760 RAISE FND_API.G_EXC_ERROR;
7761 END IF;
7762
7763
7764 /*
7765 -- Get all of the tasks for the source project
7766 OPEN l_get_tasks_csr(p_src_project_id);
7767 LOOP
7768 FETCH l_get_tasks_csr INTO l_tasks_rec;
7769 EXIT WHEN l_get_tasks_csr%NOTFOUND;
7770
7771 -- CREATE_TASK
7772 PA_TASK_PUB1.CREATE_TASK
7773 ( p_validate_only => FND_API.G_FALSE
7774 ,p_object_type => 'PA_TASKS'
7775 ,p_project_id => p_dest_project_id
7776 ,p_structure_id => l_structure_id
7777 ,p_task_number => l_tasks_rec.element_number
7778 ,p_task_name => l_tasks_rec.name
7779 ,p_task_manager_id => l_tasks_rec.manager_person_id
7780 ,p_scheduled_start_date => sysdate
7781 ,p_scheduled_finish_date => sysdate
7782 ,x_task_id => l_task_id
7783 ,x_return_status => l_return_status
7784 ,x_msg_count => l_msg_count
7785 ,x_msg_data => l_msg_data);
7786
7787 --Check if there is any error.
7788 l_msg_count := FND_MSG_PUB.count_msg;
7789 IF l_msg_count > 0 THEN
7790 x_msg_count := l_msg_count;
7791 IF x_msg_count = 1 THEN
7792 x_msg_data := l_msg_data;
7793 END IF;
7794 RAISE FND_API.G_EXC_ERROR;
7795 END IF;
7796
7797 -- Store the newly created task ID
7798 l_task_id_ref(l_tasks_rec.proj_element_id) := l_task_id;
7799 END LOOP;
7800 CLOSE l_get_tasks_csr;
7801 */
7802
7803 --commented by hsiu
7804 --Get structure type
7805 -- l_is_workplan := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'WORKPLAN');
7806 -- l_is_billing := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'BILLING');
7807 -- l_is_costing := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'COSTING');
7808
7809 -- IF (l_is_billing = 'Y') OR (l_is_costing = 'Y') THEN
7810 -- --Check if it has any published version.
7811 -- If (pa_project_structure_utils.CHECK_PUBLISHED_VER_EXISTS(
7812 -- p_src_project_id, l_structure_rec.proj_element_id) = 'Y') THEN
7813 -- l_structure_pub_status := 'Y';
7814 -- ELSE
7815 -- l_structure_pub_status := 'N';
7816 -- END IF;
7817 -- ELSE
7818 -- l_structure_pub_status := 'N';
7819 -- END IF;
7820 --end commented code by hsiu
7821
7822 -- Copy all of the structure versions, either published or unpublished from the source structure
7823 -- depending on the flag
7824 OPEN l_get_structure_versions_csr(p_src_project_id,
7825 l_structure_rec.proj_element_id,
7826 l_select);
7827 LOOP
7828 FETCH l_get_structure_versions_csr INTO l_structure_version_id;
7829 EXIT WHEN l_get_structure_versions_csr%NOTFOUND;
7830
7831 -- Get structure version info
7832 OPEN l_get_structure_ver_csr(l_structure_version_id);
7833 FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
7834 CLOSE l_get_structure_ver_csr;
7835
7836
7837 IF (p_debug_mode = 'Y') THEN
7838 pa_debug.debug('create structure version');
7839 END IF;
7840 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
7841 ( p_validate_only => p_validate_only
7842 ,p_structure_id => l_structure_id
7843 ,p_attribute_category => l_structure_ver_rec.attribute_category
7844 ,p_attribute1 => l_structure_ver_rec.attribute1
7845 ,p_attribute2 => l_structure_ver_rec.attribute2
7846 ,p_attribute3 => l_structure_ver_rec.attribute3
7847 ,p_attribute4 => l_structure_ver_rec.attribute4
7848 ,p_attribute5 => l_structure_ver_rec.attribute5
7849 ,p_attribute6 => l_structure_ver_rec.attribute6
7850 ,p_attribute7 => l_structure_ver_rec.attribute7
7851 ,p_attribute8 => l_structure_ver_rec.attribute8
7852 ,p_attribute9 => l_structure_ver_rec.attribute9
7853 ,p_attribute10 => l_structure_ver_rec.attribute10
7854 ,p_attribute11 => l_structure_ver_rec.attribute11
7855 ,p_attribute12 => l_structure_ver_rec.attribute12
7856 ,p_attribute13 => l_structure_ver_rec.attribute13
7857 ,p_attribute14 => l_structure_ver_rec.attribute14
7858 ,p_attribute15 => l_structure_ver_rec.attribute15
7859 ,x_structure_version_id => l_new_structure_version_id
7860 ,x_return_status => l_return_status
7861 ,x_msg_count => l_msg_count
7862 ,x_msg_data => l_msg_data );
7863
7864 --Check if there is any error.
7865 l_msg_count := FND_MSG_PUB.count_msg;
7866 IF l_msg_count > 0 THEN
7867 x_msg_count := l_msg_count;
7868 IF x_msg_count = 1 THEN
7869 x_msg_data := l_msg_data;
7870 END IF;
7871 RAISE FND_API.G_EXC_ERROR;
7872 END IF;
7873
7874 --Structure version attributes creates after tasks are created
7875
7876 -- If structure is workplan type create schedule version record
7877 if (l_structure_type = 'WORKPLAN') OR (l_structure_type IS NULL) THEN
7878
7879 OPEN l_get_ver_schedule_attr_csr(l_structure_version_id);
7880 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
7881 CLOSE l_get_ver_schedule_attr_csr;
7882
7883 --Hsiu added
7884 --Project Dates changes: Calculate delta
7885 IF (l_target_start_date IS NULL) THEN
7886 l_delta := 0;
7887 ELSE
7888 l_delta := l_target_start_date - l_ver_schedule_attr_rec.scheduled_start_date;
7889 END IF;
7890
7891 --calcuate scheduled start and finish dates
7892 IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_start_date + l_delta) THEN
7893 l_scheduled_start_date := l_target_finish_date;
7894 ELSE
7895 l_scheduled_start_date := l_ver_schedule_attr_rec.scheduled_start_date + l_delta;
7896 END IF;
7897
7898 IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_finish_date + l_delta) THEN
7899 l_scheduled_finish_date := l_target_finish_date;
7900 ELSE
7901 l_scheduled_finish_date := l_ver_schedule_attr_rec.scheduled_finish_date + l_delta;
7902 END IF;
7903 -- end calculate scheduled start and finish dates
7904
7905
7906 IF (p_debug_mode = 'Y') THEN
7907 pa_debug.debug('create schedule version for structure');
7908 END IF;
7909
7910 l_struc_scheduled_start_date := l_scheduled_start_date;
7911 l_struc_scheduled_finish_date := l_scheduled_finish_date;
7912
7913 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
7914 ( p_validate_only => FND_API.G_FALSE
7915 ,p_element_version_id => l_new_structure_version_id
7916 ,p_calendar_id => l_ver_schedule_attr_rec.calendar_id
7917 ,p_scheduled_start_date => l_scheduled_start_date
7918 ,p_scheduled_end_date => l_scheduled_finish_date
7919 ,p_obligation_start_date => l_ver_schedule_attr_rec.obligation_start_date
7920 ,p_obligation_end_date => l_ver_schedule_attr_rec.obligation_finish_date
7921 ,p_actual_start_date => l_ver_schedule_attr_rec.actual_start_date
7922 ,p_actual_finish_date => l_ver_schedule_attr_rec.actual_finish_date
7923 ,p_estimate_start_date => l_ver_schedule_attr_rec.estimated_start_date
7924 ,p_estimate_finish_date => l_ver_schedule_attr_rec.estimated_finish_date
7925 ,p_duration => l_ver_schedule_attr_rec.duration
7926 ,p_early_start_date => l_ver_schedule_attr_rec.early_start_date
7927 ,p_early_end_date => l_ver_schedule_attr_rec.early_finish_date
7928 ,p_late_start_date => l_ver_schedule_attr_rec.late_start_date
7929 ,p_late_end_date => l_ver_schedule_attr_rec.late_finish_date
7930 ,p_milestone_flag => l_ver_schedule_attr_rec.milestone_flag
7931 ,p_critical_flag => l_ver_schedule_attr_rec.critical_flag
7932 ,p_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
7933 ,p_PLANNED_EFFORT => l_ver_schedule_attr_rec.PLANNED_EFFORT
7934 ,x_pev_schedule_id => l_pev_schedule_id
7935 ,x_return_status => l_return_status
7936 ,x_msg_count => l_msg_count
7937 ,x_msg_data => l_msg_data );
7938
7939 --Check if there is any error.
7940 l_msg_count := FND_MSG_PUB.count_msg;
7941 IF l_msg_count > 0 THEN
7942 x_msg_count := l_msg_count;
7943 IF x_msg_count = 1 THEN
7944 x_msg_data := l_msg_data;
7945 END IF;
7946 RAISE FND_API.G_EXC_ERROR;
7947 END IF;
7948
7949 end if;
7950
7951
7952 -- Fetch all task versions for this structure version
7953 OPEN l_get_task_versions_csr(l_structure_version_id);
7954
7955 l_last_wbs_level := null;
7956
7957 LOOP
7958 FETCH l_get_task_versions_csr INTO l_task_versions_rec;
7959 EXIT WHEN l_get_task_versions_csr%NOTFOUND or p_copy_task_flag = 'N';
7960
7961 if l_last_wbs_level is null then
7962 -- first task version being created
7963 -- This task should have wbs level = 1
7964 l_ref_task_ver_id := l_new_structure_version_id;
7965 l_peer_or_sub := 'SUB';
7966 else
7967 if l_task_versions_rec.wbs_level > l_last_wbs_level then
7968 l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
7969 l_peer_or_sub := 'SUB';
7970 else
7971 l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
7972 l_peer_or_sub := 'PEER';
7973 end if;
7974 end if;
7975
7976
7977 --check if task already exist; if it does, then skip
7978 -- CREATE_TASK
7979 IF (p_debug_mode = 'Y') THEN
7980 pa_debug.debug('l_task_versions_rec.proj_elemnet_id = '||l_task_versions_rec.proj_element_id);
7981 END IF;
7982
7983 If (NOT (l_task_match_tbl.exists(l_task_versions_rec.proj_element_id))) THEN
7984
7985 OPEN l_get_tasks_csr(p_src_project_id, l_task_versions_rec.proj_element_id);
7986 FETCH l_get_tasks_csr INTO l_tasks_rec;
7987 CLOSE l_get_tasks_csr;
7988
7989 --commented by hsiu
7990 -- If (l_is_workplan = 'Y') AND (l_is_billing = 'N') AND (l_is_costing = 'N') THEN
7991 l_task_id := NULL;
7992 IF (l_structure_type = 'WORKPLAN') THEN
7993 --get new id
7994 select PA_TASKS_S.NEXTVAL into l_task_id from sys.dual;
7995 ELSE
7996 --id exists in pa_tasks. Need to find matching id by using task_number
7997 OPEN l_get_pa_tasks_csr(p_dest_project_id, l_tasks_rec.PA_TASK_NUMBER);
7998 FETCH l_get_pa_tasks_csr into l_task_id;
7999 CLOSE l_get_pa_tasks_csr;
8000 END IF;
8001
8002 IF (p_debug_mode = 'Y') THEN
8003 pa_debug.debug('inserting into task with id'||l_task_id);
8004 END IF;
8005
8006 OPEN get_init_task_stat(l_tasks_rec.TYPE_ID);
8007 FETCH get_init_task_stat into l_init_status_code;
8008 CLOSE get_init_task_stat;
8009
8010 PA_PROJ_ELEMENTS_PKG.Insert_Row(
8011 X_ROW_ID => l_rowid
8012 ,X_PROJ_ELEMENT_ID => l_task_id
8013 ,X_PROJECT_ID => p_dest_project_id
8014 ,X_OBJECT_TYPE => 'PA_TASKS'
8015 ,X_ELEMENT_NUMBER => l_tasks_rec.ELEMENT_NUMBER
8016 ,X_NAME => l_tasks_rec.NAME
8017 ,X_DESCRIPTION => l_tasks_rec.DESCRIPTION
8018 ,X_STATUS_CODE => l_init_status_code
8019 ,X_WF_STATUS_CODE => l_tasks_rec.WF_STATUS_CODE
8020 ,X_PM_PRODUCT_CODE => l_tasks_rec.PM_SOURCE_CODE
8021 ,X_PM_TASK_REFERENCE => l_tasks_rec.PM_SOURCE_REFERENCE
8022 ,X_CLOSED_DATE => l_tasks_rec.CLOSED_DATE
8023 ,X_LOCATION_ID => l_tasks_rec.LOCATION_ID
8024 ,X_MANAGER_PERSON_ID => l_tasks_rec.MANAGER_PERSON_ID
8025 ,X_CARRYING_OUT_ORGANIZATION_ID => l_tasks_rec.CARRYING_OUT_ORGANIZATION_ID
8026 ,X_TYPE_ID => l_tasks_rec.TYPE_ID
8027 ,X_PRIORITY_CODE => l_tasks_rec.PRIORITY_CODE
8028 ,X_INC_PROJ_PROGRESS_FLAG => l_tasks_rec.INC_PROJ_PROGRESS_FLAG
8029 ,X_REQUEST_ID => l_tasks_rec.REQUEST_ID
8030 ,X_PROGRAM_APPLICATION_ID => l_tasks_rec.PROGRAM_APPLICATION_ID
8031 ,X_PROGRAM_ID => l_tasks_rec.PROGRAM_ID
8032 ,X_PROGRAM_UPDATE_DATE => l_tasks_rec.PROGRAM_UPDATE_DATE
8033 ,X_LINK_TASK_FLAG => l_tasks_rec.LINK_TASK_FLAG
8034 ,X_ATTRIBUTE_CATEGORY => l_tasks_rec.ATTRIBUTE_CATEGORY
8035 ,X_ATTRIBUTE1 => l_tasks_rec.ATTRIBUTE1
8036 ,X_ATTRIBUTE2 => l_tasks_rec.ATTRIBUTE2
8037 ,X_ATTRIBUTE3 => l_tasks_rec.ATTRIBUTE3
8038 ,X_ATTRIBUTE4 => l_tasks_rec.ATTRIBUTE4
8039 ,X_ATTRIBUTE5 => l_tasks_rec.ATTRIBUTE5
8040 ,X_ATTRIBUTE6 => l_tasks_rec.ATTRIBUTE6
8041 ,X_ATTRIBUTE7 => l_tasks_rec.ATTRIBUTE7
8042 ,X_ATTRIBUTE8 => l_tasks_rec.ATTRIBUTE8
8043 ,X_ATTRIBUTE9 => l_tasks_rec.ATTRIBUTE9
8044 ,X_ATTRIBUTE10 => l_tasks_rec.ATTRIBUTE10
8045 ,X_ATTRIBUTE11 => l_tasks_rec.ATTRIBUTE11
8046 ,X_ATTRIBUTE12 => l_tasks_rec.ATTRIBUTE12
8047 ,X_ATTRIBUTE13 => l_tasks_rec.ATTRIBUTE13
8048 ,X_ATTRIBUTE14 => l_tasks_rec.ATTRIBUTE14
8049 ,X_ATTRIBUTE15 => l_tasks_rec.ATTRIBUTE15
8050 ,X_TASK_WEIGHTING_DERIV_CODE => NULL
8051 ,X_WORK_ITEM_CODE => l_tasks_rec.WQ_ITEM_CODE
8052 ,X_UOM_CODE => l_tasks_rec.WQ_UOM_CODE
8053 ,X_WQ_ACTUAL_ENTRY_CODE => l_tasks_rec.WQ_ACTUAL_ENTRY_CODE
8054 ,X_TASK_PROGRESS_ENTRY_PAGE_ID =>l_tasks_rec.TASK_PROGRESS_ENTRY_PAGE_ID
8055 ,X_PARENT_STRUCTURE_ID => l_structure_id
8056 ,X_PHASE_CODE => l_tasks_rec.PHASE_CODE
8057 ,X_PHASE_VERSION_ID => l_tasks_rec.PHASE_VERSION_ID
8058 ,X_SOURCE_OBJECT_ID => p_dest_project_id
8059 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
8060 );
8061
8062 -- insert task id into table so task will not be duplicated.
8063 l_task_match_tbl(l_tasks_rec.proj_element_id) := l_task_id;
8064
8065 ELSE
8066 --copy the id into l_task_id;
8067 l_task_id := l_task_match_tbl(l_task_versions_rec.proj_element_id);
8068 END IF;
8069
8070 IF (p_debug_mode = 'Y') THEN
8071 pa_debug.debug('l_task_id = '||l_task_id);
8072 END IF;
8073
8074
8075 IF (p_debug_mode = 'Y') THEN
8076 pa_debug.debug('before creating version:'||l_ref_task_ver_id||','||l_peer_or_sub);
8077 END IF;
8078
8079 OPEN get_task_ver_weighting(l_task_versions_rec.element_version_id);
8080 FETCH get_task_ver_weighting into l_weighting_percentage;
8081 CLOSE get_task_ver_weighting;
8082
8083 --hsiu: task version status changes
8084 IF (l_dest_template_flag = 'N') THEN
8085 --check if structure is shared
8086 -- if shared, check if versioned
8087 -- 'WORKING' if versioned; 'PUBLISHED' if not
8088 -- if split, check if 'FINANCIAL'
8089 -- 'PUBLISHED' if financial
8090 -- check if versioned
8091 -- 'WORKING' if versioend; 'PUBLISHED' if not
8092 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_dest_project_id)) THEN
8093 IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_dest_project_id) AND (l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N')) THEN
8094 l_task_unpub_ver_status_code := 'WORKING';
8095 ELSE
8096 l_task_unpub_ver_status_code := 'PUBLISHED';
8097 END IF;
8098 ELSE --split
8099 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL') AND
8100 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
8101 l_task_unpub_ver_status_code := 'PUBLISHED';
8102 ELSE --workplan only
8103 IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_dest_project_id) AND (l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N')) THEN
8104 l_task_unpub_ver_status_code := 'WORKING';
8105 ELSE
8106 l_task_unpub_ver_status_code := 'PUBLISHED';
8107 END IF;
8108 END IF;
8109 END IF;
8110 ELSE
8111 l_task_unpub_ver_status_code := 'WORKING';
8112 END IF;
8113 --end task version status changes
8114
8115 PA_TASK_PUB1.CREATE_TASK_VERSION
8116 ( p_validate_only => FND_API.G_FALSE
8117 ,p_ref_task_version_id => l_ref_task_ver_id
8118 ,p_peer_or_sub => l_peer_or_sub
8119 ,p_task_id => l_task_id--l_task_id_ref(l_task_versions_rec.proj_element_id)
8120 ,p_WEIGHTING_PERCENTAGE => l_weighting_percentage
8121 ,p_TASK_UNPUB_VER_STATUS_CODE => l_TASK_UNPUB_VER_STATUS_CODE
8122 ,x_task_version_id => l_task_version_id
8123 ,x_return_status => l_return_status
8124 ,x_msg_count => l_msg_count
8125 ,x_msg_data => l_msg_data);
8126
8127 t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
8128
8129 --Check if there is any error.
8130 l_msg_count := FND_MSG_PUB.count_msg;
8131 IF l_msg_count > 0 THEN
8132 x_msg_count := l_msg_count;
8133 IF x_msg_count = 1 THEN
8134 x_msg_data := l_msg_data;
8135 END IF;
8136 RAISE FND_API.G_EXC_ERROR;
8137 END IF;
8138
8139 if (l_structure_type = 'WORKPLAN') or (l_structure_type IS NULL) THEN
8140 -- Get task version schedule attributes
8141 OPEN l_get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id);
8142 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
8143 CLOSE l_get_ver_schedule_attr_csr;
8144
8145 --calcuate scheduled start and finish dates
8146 IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_start_date + l_delta) THEN
8147 l_scheduled_start_date := l_target_finish_date;
8148 ELSE
8149 l_scheduled_start_date := l_ver_schedule_attr_rec.scheduled_start_date + l_delta;
8150 END IF;
8151
8152 IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_finish_date + l_delta) THEN
8153 l_scheduled_finish_date := l_target_finish_date;
8154 ELSE
8155 l_scheduled_finish_date := l_ver_schedule_attr_rec.scheduled_finish_date + l_delta;
8156 END IF;
8157 -- end calculate scheduled start and finish dates
8158
8159 -- xxlu added DFF attributes
8160 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
8161 ( p_validate_only => FND_API.G_FALSE
8162 ,p_element_version_id => l_task_version_id
8163 ,p_calendar_id => l_ver_schedule_attr_rec.calendar_id
8164 -- anlee
8165 -- Dates changes
8166 ,p_scheduled_start_date => l_scheduled_start_date
8167 ,p_scheduled_end_date => l_scheduled_finish_date
8168 -- End of changes
8169 ,p_obligation_start_date => l_ver_schedule_attr_rec.obligation_start_date
8170 ,p_obligation_end_date => l_ver_schedule_attr_rec.obligation_finish_date
8171 ,p_actual_start_date => l_ver_schedule_attr_rec.actual_start_date
8172 ,p_actual_finish_date => l_ver_schedule_attr_rec.actual_finish_date
8173 ,p_estimate_start_date => l_ver_schedule_attr_rec.estimated_start_date
8174 ,p_estimate_finish_date => l_ver_schedule_attr_rec.estimated_finish_date
8175 ,p_duration => l_ver_schedule_attr_rec.duration
8176 ,p_early_start_date => l_ver_schedule_attr_rec.early_start_date
8177 ,p_early_end_date => l_ver_schedule_attr_rec.early_finish_date
8178 ,p_late_start_date => l_ver_schedule_attr_rec.late_start_date
8179 ,p_late_end_date => l_ver_schedule_attr_rec.late_finish_date
8180 ,p_milestone_flag => l_ver_schedule_attr_rec.milestone_flag
8181 ,p_critical_flag => l_ver_schedule_attr_rec.critical_flag
8182 ,p_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
8183 ,p_PLANNED_EFFORT => l_ver_schedule_attr_rec.PLANNED_EFFORT
8184 ,p_attribute_category => l_ver_schedule_attr_rec.attribute_category
8185 ,p_attribute1 => l_ver_schedule_attr_rec.attribute1
8186 ,p_attribute2 => l_ver_schedule_attr_rec.attribute2
8187 ,p_attribute3 => l_ver_schedule_attr_rec.attribute3
8188 ,p_attribute4 => l_ver_schedule_attr_rec.attribute4
8189 ,p_attribute5 => l_ver_schedule_attr_rec.attribute5
8190 ,p_attribute6 => l_ver_schedule_attr_rec.attribute6
8191 ,p_attribute7 => l_ver_schedule_attr_rec.attribute7
8192 ,p_attribute8 => l_ver_schedule_attr_rec.attribute8
8193 ,p_attribute9 => l_ver_schedule_attr_rec.attribute9
8194 ,p_attribute10 => l_ver_schedule_attr_rec.attribute10
8195 ,p_attribute11 => l_ver_schedule_attr_rec.attribute11
8196 ,p_attribute12 => l_ver_schedule_attr_rec.attribute12
8197 ,p_attribute13 => l_ver_schedule_attr_rec.attribute13
8198 ,p_attribute14 => l_ver_schedule_attr_rec.attribute14
8199 ,p_attribute15 => l_ver_schedule_attr_rec.attribute15
8200 ,x_pev_schedule_id => l_pev_schedule_id
8201 ,x_return_status => l_return_status
8202 ,x_msg_count => l_msg_count
8203 ,x_msg_data => l_msg_data );
8204 -- end xxlu changes
8205
8206 --Check if there is any error.
8207 l_msg_count := FND_MSG_PUB.count_msg;
8208 IF l_msg_count > 0 THEN
8209 x_msg_count := l_msg_count;
8210 IF x_msg_count = 1 THEN
8211 x_msg_data := l_msg_data;
8212 END IF;
8213 RAISE FND_API.G_EXC_ERROR;
8214 END IF;
8215 end if;
8216
8217 l_last_wbs_level := l_task_versions_rec.wbs_level;
8218 l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;--l_task_versions_rec.element_version_id;
8219
8220 END LOOP;
8221 CLOSE l_get_task_versions_csr;
8222
8223 --Delete linking tasks in PA_TASKS if this is a financial structure
8224 IF (l_structure_type = 'FINANCIAL' or l_structure_type IS NULL) THEN
8225 OPEN l_linking_tasks_csr(p_src_project_id, p_dest_project_id);
8226 LOOP
8227 FETCH l_linking_tasks_csr into l_task_delete;
8228 EXIT WHEN l_linking_tasks_csr%NOTFOUND;
8229
8230 select a.record_version_number, 0
8231 INTO l_task_delete_rvn, l_task_delete_wbs_rvn
8232 from pa_tasks a
8233 where a.task_id = l_task_delete;
8234
8235 PA_TASKS_MAINT_PUB.DELETE_TASK(
8236 p_init_msg_list => FND_API.G_FALSE
8237 ,p_commit => FND_API.G_FALSE
8238 ,p_project_id => p_dest_project_id
8239 ,p_task_id => l_task_delete
8240 ,p_record_version_number => l_task_delete_rvn
8241 ,p_wbs_record_version_number => l_task_delete_wbs_rvn
8242 ,x_return_status => l_return_status
8243 ,x_msg_count => l_msg_count
8244 ,x_msg_data => l_msg_data
8245 );
8246 l_msg_count := FND_MSG_PUB.count_msg;
8247 IF l_msg_count > 0 THEN
8248 x_msg_count := l_msg_count;
8249 IF x_msg_count = 1 THEN
8250 x_msg_data := l_msg_data;
8251 END IF;
8252 RAISE FND_API.G_EXC_ERROR;
8253 END IF;
8254
8255 END LOOP;
8256 CLOSE l_linking_tasks_csr;
8257 END IF;
8258
8259 -- Get structure version attributes
8260 OPEN l_get_structure_ver_attr_csr(l_structure_version_id);
8261 FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
8262 CLOSE l_get_structure_ver_attr_csr;
8263
8264 IF (p_debug_mode = 'Y') THEN
8265 pa_debug.debug('create structure version attribute');
8266 END IF;
8267
8268 IF (l_copy = 1) THEN
8269 l_status_code := 'STRUCTURE_WORKING';
8270 l_baseline_flag := 'N';
8271 l_latest_flag := 'N';
8272 ELSIF (l_copy = 2) THEN
8273 l_status_code := 'STRUCTURE_PUBLISHED';
8274 l_baseline_flag := 'Y';
8275 l_latest_flag := 'Y';
8276 ELSIF (l_copy = 3) THEN
8277 l_status_code := l_structure_ver_attr_rec.status_code;
8278 l_baseline_flag := l_structure_ver_attr_rec.current_flag;
8279 l_latest_flag := l_structure_ver_attr_rec.LATEST_EFF_PUBLISHED_FLAG;
8280 ELSIF (l_copy = 4) THEN
8281 l_status_code := 'STRUCTURE_PUBLISHED';
8282 l_baseline_flag := 'N';
8283 l_latest_flag := 'Y';
8284 END IF;
8285
8286 --moved here for baseline purpose
8287 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
8288 ( p_validate_only => FND_API.G_FALSE
8289 ,p_structure_version_id => l_new_structure_version_id
8290 -- ,p_structure_version_name => l_name
8291 --hsiu
8292 --fix bug 2640307
8293 --structure version name needs to be unique; copy from source.
8294 ,p_structure_version_name => l_structure_ver_attr_rec.name
8295 --end bug 2640307 fix
8296 ,p_structure_version_desc => l_structure_ver_attr_rec.description
8297 ,p_effective_date => l_structure_ver_attr_rec.effective_date
8298 ,p_latest_eff_published_flag => l_latest_flag
8299 ,p_locked_status_code => 'UNLOCKED'
8300 ,p_struct_version_status_code => l_status_code
8301 ,p_baseline_current_flag => l_baseline_flag
8302 ,p_baseline_original_flag => 'N'
8303 ,x_pev_structure_id => l_pev_structure_id
8304 ,x_return_status => l_return_status
8305 ,x_msg_count => l_msg_count
8306 ,x_msg_data => l_msg_data );
8307
8308 --Check if there is any error.
8309 l_msg_count := FND_MSG_PUB.count_msg;
8310 IF l_msg_count > 0 THEN
8311 x_msg_count := l_msg_count;
8312 IF x_msg_count = 1 THEN
8313 x_msg_data := l_msg_data;
8314 END IF;
8315 RAISE FND_API.G_EXC_ERROR;
8316 END IF;
8317
8318 --If status is published and latest version, or template
8319 --update project level schedule dates
8320 IF ((l_status_code = 'STRUCTURE_PUBLISHED') and (l_latest_flag = 'Y')) OR (l_dest_template_flag = 'Y') THEN
8321 OPEN get_proj_rec_ver_number(p_dest_project_id);
8322 FETCH get_proj_rec_ver_number into l_proj_record_ver_number;
8323 CLOSE get_proj_rec_ver_number;
8324
8325 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES(
8326 p_validate_only => FND_API.G_FALSE
8327 ,p_project_id => p_dest_project_id
8328 ,p_date_type => 'SCHEDULED'
8329 ,p_start_date => l_struc_scheduled_start_date
8330 ,p_finish_date => l_struc_scheduled_finish_date
8331 ,p_record_version_number => l_proj_record_ver_number
8332 ,x_return_status => l_return_status
8333 ,x_msg_count => l_msg_count
8334 ,x_msg_data => l_msg_data
8335 );
8336
8337 IF l_msg_count > 0 THEN
8338 x_msg_count := l_msg_count;
8339 IF x_msg_count = 1 THEN
8340 x_msg_data := l_msg_data;
8341 END IF;
8342 RAISE FND_API.G_EXC_ERROR;
8343 END IF;
8344 END IF;
8345
8346 END LOOP;
8347 CLOSE l_get_structure_versions_csr;
8348
8349 --Commented by hsiu
8350 --END IF;
8351 --END IF for check if project is template and if type = WORKPLAN
8352 END LOOP;
8353 CLOSE l_get_structure_csr;
8354 -- HSiu: commented old code
8355 -- end if;
8356
8357
8358 x_return_status := FND_API.G_RET_STS_SUCCESS;
8359
8360 IF (p_commit = FND_API.G_TRUE) THEN
8361 COMMIT;
8362 END IF;
8363
8364 IF (p_debug_mode = 'Y') THEN
8365 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE END');
8366 END IF;
8367
8368 EXCEPTION
8369 when FND_API.G_EXC_ERROR then
8370 if p_commit = FND_API.G_TRUE then
8371 rollback to copy_structure_pvt;
8372 end if;
8373 x_return_status := FND_API.G_RET_STS_ERROR;
8374 when FND_API.G_EXC_UNEXPECTED_ERROR then
8375 if p_commit = FND_API.G_TRUE then
8376 rollback to copy_structure_pvt;
8377 end if;
8378 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8379 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8380 p_procedure_name => 'COPY_STRUCTURE',
8381 p_error_text => SUBSTRB(SQLERRM,1,240));
8382 when OTHERS then
8383 if p_commit = FND_API.G_TRUE then
8384 rollback to copy_structure_pvt;
8385 end if;
8386 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8387 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8388 p_procedure_name => 'COPY_STRUCTURE',
8389 p_error_text => SUBSTRB(SQLERRM,1,240));
8390 raise;
8391 END COPY_STRUCTURE;
8392
8393
8394 PROCEDURE BASELINE_STRUCTURE_VERSION
8395 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
8396 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
8397 ,p_validation_level IN VARCHAR2 := 100
8398 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
8399 ,p_debug_mode IN VARCHAR2 := 'N'
8400 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8401 ,p_structure_version_id IN NUMBER
8402 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8403 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8404 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8405 )
8406 IS
8407 CURSOR c1( c_project_id NUMBER ) IS
8408 SELECT B.PROJ_ELEMENT_ID, B.SCHEDULED_START_DATE,
8409 B.SCHEDULED_FINISH_DATE, A.ELEMENT_VERSION_ID , duration
8410 FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B
8411 WHERE A.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
8412 AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8413 AND A.PROJECT_ID = B.PROJECT_ID
8414 AND A.project_id = c_project_id;
8415
8416 c1_rec c1%ROWTYPE;
8417 l_project_id NUMBER;
8418
8419 -- anlee
8420 -- Dates changes
8421 CURSOR c2 (c_project_id NUMBER)
8422 IS
8423 SELECT record_version_number
8424 FROM pa_projects_all
8425 WHERE project_id = c_project_id;
8426
8427 l_proj_record_ver_number NUMBER;
8428 l_return_status VARCHAR2(1);
8429 l_msg_count NUMBER;
8430 l_msg_data VARCHAR2(2000);
8431 -- End of changes
8432
8433 l_calendar_id NUMBER;
8434 l_duration NUMBER;
8435 l_duration_days NUMBER;
8436 cursor get_cal_id IS
8437 select a.calendar_id
8438 from pa_projects_all a, pa_proj_element_versions b
8439 where a.project_id = b.project_id
8440 and b.element_version_id = p_structure_version_id;
8441 BEGIN
8442 IF (p_debug_mode = 'Y') THEN
8443 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION BEGIN');
8444 END IF;
8445
8446 IF (p_commit = FND_API.G_TRUE) THEN
8447 savepoint baseline_structure_pvt;
8448 END IF;
8449
8450 SELECT PROJECT_ID
8451 INTO l_project_id
8452 FROM PA_PROJ_ELEMENT_VERSIONS
8453 WHERE ELEMENT_VERSION_ID = p_structure_version_id;
8454
8455 UPDATE PA_PROJ_ELEMENTS
8456 SET BASELINE_START_DATE= NULL ,
8457 BASELINE_FINISH_DATE= NULL ,
8458 RECORD_VERSION_NUMBER=NVL(RECORD_VERSION_NUMBER,0) + 1
8459 WHERE PROJECT_ID = l_project_id;
8460
8461 OPEN c1( l_project_id );
8462 LOOP
8463 FETCH c1 into c1_rec;
8464 EXIT WHEN c1%NOTFOUND;
8465
8466 /* -- Calc duration
8467 OPEN get_cal_id;
8468 FETCH get_cal_id INTO l_calendar_id;
8469 CLOSE get_cal_id;
8470
8471 PA_DURATION_UTILS.GET_DURATION(
8472 p_calendar_id => l_calendar_id
8473 ,p_start_date => c1_rec.scheduled_start_date
8474 ,p_end_date => c1_rec.scheduled_finish_date
8475 ,x_duration_days => l_duration_days
8476 ,x_duration_hours => l_duration
8477 ,x_return_status => l_return_status
8478 ,x_msg_count => l_msg_count
8479 ,x_msg_data => l_msg_data );
8480
8481 --Check if there is any error.
8482 l_msg_count := FND_MSG_PUB.count_msg;
8483 IF l_msg_count > 0 THEN
8484 x_msg_count := l_msg_count;
8485 IF x_msg_count = 1 THEN
8486 x_msg_data := l_msg_data;
8487 END IF;
8488 RAISE FND_API.G_EXC_ERROR;
8489 END IF;
8490 */
8491
8492 UPDATE PA_PROJ_ELEMENTS
8493 SET BASELINE_START_DATE=c1_rec.scheduled_start_date,
8494 BASELINE_FINISH_DATE=c1_rec.scheduled_finish_date, -- pa
8495 BASELINE_DURATION=c1_rec.duration,
8496 RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,0) + 1
8497 WHERE PROJ_ELEMENT_ID = c1_rec.proj_element_id;
8498
8499 -- anlee
8500 -- Dates changes
8501 if c1_rec.element_version_id = p_structure_version_id then
8502 OPEN c2(l_project_id);
8503 FETCH c2 INTO l_proj_record_ver_number;
8504 CLOSE c2;
8505
8506 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
8507 p_validate_only => FND_API.G_FALSE
8508 ,p_project_id => l_project_id
8509 ,p_date_type => 'BASELINE'
8510 ,p_start_date => c1_rec.scheduled_start_date
8511 ,p_finish_date => c1_rec.scheduled_finish_date
8512 ,p_record_version_number => l_proj_record_ver_number
8513 ,x_return_status => l_return_status
8514 ,x_msg_count => l_msg_count
8515 ,x_msg_data => l_msg_data );
8516
8517 --Check if there is any error.
8518 l_msg_count := FND_MSG_PUB.count_msg;
8519 IF l_msg_count > 0 THEN
8520 x_msg_count := l_msg_count;
8521 IF x_msg_count = 1 THEN
8522 x_msg_data := l_msg_data;
8523 END IF;
8524 RAISE FND_API.G_EXC_ERROR;
8525 END IF;
8526 END IF;
8527 -- End of changes
8528
8529 END LOOP;
8530 CLOSE c1;
8531
8532 IF (p_debug_mode = 'Y') THEN
8533 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION end');
8534 END IF;
8535
8536 x_return_status := FND_API.G_RET_STS_SUCCESS;
8537
8538 EXCEPTION
8539 when FND_API.G_EXC_ERROR then
8540 if p_commit = FND_API.G_TRUE then
8541 rollback to baseline_structure_pvt;
8542 end if;
8543 x_return_status := FND_API.G_RET_STS_ERROR;
8544 when FND_API.G_EXC_UNEXPECTED_ERROR then
8545 if p_commit = FND_API.G_TRUE then
8546 rollback to baseline_structure_pvt;
8547 end if;
8548 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8549 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8550 p_procedure_name => 'BASELINE_STRUCTURE_VERSION',
8551 p_error_text => SUBSTRB(SQLERRM,1,240));
8552 when OTHERS then
8553 if p_commit = FND_API.G_TRUE then
8554 rollback to baseline_structure_pvt;
8555 end if;
8556 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8557 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8558 p_procedure_name => 'BASELINE_STRUCTURE_VERSION',
8559 p_error_text => SUBSTRB(SQLERRM,1,240));
8560 raise;
8561 END BASELINE_STRUCTURE_VERSION;
8562
8563
8564 PROCEDURE SPLIT_WORKPLAN
8565 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
8566 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
8567 ,p_validation_level IN VARCHAR2 := 100
8568 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
8569 ,p_debug_mode IN VARCHAR2 := 'N'
8570 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8571 ,p_project_id IN NUMBER
8572 ,p_structure_name IN VARCHAR2
8573 ,p_structure_number IN VARCHAR2
8574 ,p_description IN VARCHAR2
8575 ,x_structure_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8576 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8577 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8578 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8579 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8580 )
8581 IS
8582 cursor c1 IS
8583 select a.proj_element_id
8584 from pa_proj_elements a,
8585 pa_proj_structure_types b,
8586 pa_structure_types c
8587 where a.project_id = p_project_id
8588 and a.object_type = 'PA_STRUCTURES'
8589 and a.proj_element_id = b.proj_element_id
8590 and b.structure_type_id = c.structure_type_id
8591 and c.structure_type_class_code IN ('FINANCIAL');
8592
8593 cursor sel_struct_type(c_structure_id NUMBER) IS
8594 select a.rowid
8595 from pa_proj_structure_types a, pa_structure_types b
8596 where a.proj_element_id = c_structure_id
8597 and a.structure_type_id = b.structure_type_id
8598 and b.structure_type_class_code = 'WORKPLAN';
8599
8600
8601 l_structure_id NUMBER;
8602 l_rowid VARCHAR2(255);
8603
8604 l_ret_stat VARCHAR2(1);
8605 l_msg_count NUMBER;
8606 l_msg_data VARCHAR2(250);
8607
8608 l_struc_id NUMBER;
8609 l_struc_ver_attr_id NUMBER;
8610 l_struc_ver_id NUMBER;
8611 l_pev_schedule_id NUMBER;
8612
8613 BEGIN
8614 IF (p_debug_mode = 'Y') THEN
8615 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN BEGIN');
8616 END IF;
8617
8618 IF (p_commit = FND_API.G_TRUE) THEN
8619 savepoint split_workplan;
8620 END IF;
8621
8622 IF (p_debug_mode = 'Y') THEN
8623 pa_debug.debug('Find existing structure');
8624 END IF;
8625
8626 --get current costing/billing structure id
8627 OPEN c1;
8628 FETCH c1 INTO l_structure_id;
8629 CLOSE c1;
8630
8631 --check if there is a published workplan version
8632 IF PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_project_id, l_structure_id) = 'Y' THEN
8633 --cannot split if publish version exists.
8634 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_CANNOT_SPLIT_STRUCT');
8635 x_msg_data := 'PA_PS_CANNOT_SPLIT_STRUCT';
8636 RAISE FND_API.G_EXC_ERROR;
8637 END IF;
8638
8639 --delete workplan structure type
8640 OPEN sel_struct_type(l_structure_id);
8641 FETCH sel_struct_type INTO l_rowid;
8642 IF sel_struct_type%FOUND THEN
8643 IF (p_debug_mode = 'Y') THEN
8644 pa_debug.debug('Deleting type structure type');
8645 END IF;
8646 PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
8647 END IF;
8648 CLOSE sel_struct_type;
8649
8650 --create_structure
8651 PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
8652 p_project_id => p_project_id
8653 ,p_structure_number => p_structure_number
8654 ,p_structure_name => p_structure_name
8655 ,p_structure_description => p_description
8656 ,p_calling_flag => 'WORKPLAN'
8657 ,x_structure_id => l_struc_id
8658 ,x_return_status => l_ret_stat
8659 ,x_msg_count => l_msg_count
8660 ,x_msg_data => l_msg_data
8661 );
8662
8663 x_structure_id := l_struc_id;
8664
8665 --Check if there is any error.
8666 l_msg_count := FND_MSG_PUB.count_msg;
8667 IF l_msg_count > 0 THEN
8668 x_msg_count := l_msg_count;
8669 IF x_msg_count = 1 THEN
8670 x_msg_data := l_msg_data;
8671 END IF;
8672 RAISE FND_API.G_EXC_ERROR;
8673 END IF;
8674
8675 --delete schedule info for structure versions and tasks
8676 delete from pa_proj_elem_ver_schedule
8677 where project_id = p_project_id;
8678
8679 --create_structure_version
8680 PA_PROJECT_STRUCTURE_PUB1.create_structure_Version(
8681 p_structure_id => l_struc_id,
8682 x_structure_version_id => l_struc_ver_id,
8683 x_return_status => l_ret_stat,
8684 x_msg_count => l_msg_count,
8685 x_msg_data => l_msg_data
8686 );
8687
8688 x_structure_version_id := l_struc_ver_id;
8689
8690 --Check if there is any error.
8691 l_msg_count := FND_MSG_PUB.count_msg;
8692 IF l_msg_count > 0 THEN
8693 x_msg_count := l_msg_count;
8694 IF x_msg_count = 1 THEN
8695 x_msg_data := l_msg_data;
8696 END IF;
8697 RAISE FND_API.G_EXC_ERROR;
8698 END IF;
8699
8700 --create_structure_version_attr
8701 PA_PROJECT_STRUCTURE_PUB1.create_structure_version_attr(
8702 p_structure_version_id => l_struc_ver_id,
8703 p_structure_version_name => p_structure_name,
8704 p_structure_version_desc => p_description,
8705 x_return_status => l_ret_stat,
8706 x_msg_count => l_msg_count,
8707 x_msg_data => l_msg_data,
8708 x_pev_structure_id => l_struc_ver_attr_id
8709 );
8710
8711 --Check if there is any error.
8712 l_msg_count := FND_MSG_PUB.count_msg;
8713 IF l_msg_count > 0 THEN
8714 x_msg_count := l_msg_count;
8715 IF x_msg_count = 1 THEN
8716 x_msg_data := l_msg_data;
8717 END IF;
8718 RAISE FND_API.G_EXC_ERROR;
8719 END IF;
8720
8721 --create_schedule_version
8722 PA_TASK_PUB1.Create_Schedule_Version(
8723 p_element_version_id => l_struc_ver_id
8724 ,p_scheduled_start_date => SYSDATE
8725 ,p_scheduled_end_date => SYSDATE
8726 ,x_pev_schedule_id => l_pev_schedule_id
8727 ,x_return_status => l_ret_stat
8728 ,x_msg_count => l_msg_count
8729 ,x_msg_data => l_msg_data
8730 );
8731
8732 --Check if there is any error.
8733 l_msg_count := FND_MSG_PUB.count_msg;
8734 IF l_msg_count > 0 THEN
8735 x_msg_count := l_msg_count;
8736 IF x_msg_count = 1 THEN
8737 x_msg_data := l_msg_data;
8738 END IF;
8739 RAISE FND_API.G_EXC_ERROR;
8740 END IF;
8741
8742 x_return_status := FND_API.G_RET_STS_SUCCESS;
8743
8744 IF (p_debug_mode = 'Y') THEN
8745 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN end');
8746 END IF;
8747
8748 EXCEPTION
8749 when FND_API.G_EXC_ERROR then
8750 if p_commit = FND_API.G_TRUE then
8751 rollback to split_workplan;
8752 end if;
8753 x_return_status := FND_API.G_RET_STS_ERROR;
8754 when FND_API.G_EXC_UNEXPECTED_ERROR then
8755 if p_commit = FND_API.G_TRUE then
8756 rollback to split_workplan;
8757 end if;
8758 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8759 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8760 p_procedure_name => 'SPLIT_WORKPLAN',
8761 p_error_text => SUBSTRB(SQLERRM,1,240));
8762 when OTHERS then
8763 if p_commit = FND_API.G_TRUE then
8764 rollback to split_workplan;
8765 end if;
8766 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8767 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8768 p_procedure_name => 'SPLIT_WORKPLAN',
8769 p_error_text => SUBSTRB(SQLERRM,1,240));
8770 raise;
8771 END SPLIT_WORKPLAN;
8772
8773
8774 procedure SUBMIT_WORKPLAN
8775 (
8776 p_api_version IN NUMBER := 1.0
8777 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
8778 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
8779 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
8780 ,p_validation_level IN VARCHAR2 := 100
8781 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
8782 ,p_debug_mode IN VARCHAR2 := 'N'
8783 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8784 ,p_project_id IN NUMBER
8785 ,p_structure_id IN NUMBER
8786 ,p_structure_version_id IN NUMBER
8787 ,p_responsibility_id IN NUMBER
8788 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8789 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8790 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8791 )
8792 IS
8793 l_structure_version_name VARCHAR2(240);
8794 l_structure_version_desc VARCHAR2(250);
8795 l_auto_pub VARCHAR2(1);
8796 l_published_struc_ver_id NUMBER;
8797 l_dummy VARCHAR2(1);
8798 l_item_key VARCHAR2(240);
8799 l_wf_enable VARCHAR2(1);
8800 l_wf_item_type VARCHAR2(30);
8801 l_wf_process VARCHAR2(30);
8802 l_wf_success_code VARCHAR2(30);
8803 l_wf_failure_code VARCHAR2(30);
8804 l_err_code NUMBER;
8805 l_err_stage VARCHAR2(30);
8806 l_err_stack VARCHAR2(240);
8807 l_return_status VARCHAR2(1);
8808 l_msg_count NUMBER;
8809 l_msg_data VARCHAR2(250);
8810 l_error_msg_code VARCHAR2(250);
8811
8812 CURSOR checkAutoPub IS
8813 select '1' from pa_proj_workplan_attr
8814 where project_id = p_project_id
8815 and wp_auto_publish_flag = 'Y';
8816
8817 CURSOR get_wp_info IS
8818 select name, description
8819 from pa_proj_elem_ver_structure
8820 where project_Id = p_project_id
8821 and element_version_id = p_structure_version_id;
8822
8823 /* Bug 2683138 */
8824 /* CURSOR get_start_wf IS
8825 select 'Y' from dual
8826 where exists (
8827 select 1 from pa_product_installation_v
8828 where product_short_code = 'PJT' AND INSTALLED_FLAG = 'Y'); */
8829
8830 CURSOR get_start_wf IS
8831 select 'Y' from dual;
8832
8833 CURSOR get_wf_info(c_status_code VARCHAR2) IS
8834 select enable_wf_flag, workflow_item_type,
8835 workflow_process, wf_success_status_code,
8836 wf_failure_status_code
8837 from pa_project_statuses
8838 where project_status_code = c_status_code;
8839 --status_code can be STRUCTURE_SUBMITTED, STRUCTURE_REJECTED,
8840 -- STRUCTURE_APPROVED, or STRUCTURE_PUBLISHED
8841
8842 --check if delete unpublished ok
8843 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
8844 select b.element_version_id
8845 from pa_proj_element_versions a,
8846 pa_proj_element_versions b
8847 where a.element_version_id = c_keep_struc_ver_id
8848 and a.project_id = b.project_id
8849 and a.proj_element_id = b.proj_element_id
8850 and b.element_version_id <> c_keep_struc_ver_id
8851 and b.object_type = 'PA_STRUCTURES';
8852 l_del_struc_ver_id NUMBER;
8853
8854 BEGIN
8855 PA_DEBUG.INIT_ERR_STACK('PA_PROJECT_STRUCTURE_PVT1.SUBMIT_WORKPLAN');
8856
8857 x_return_status := FND_API.G_RET_STS_SUCCESS;
8858
8859 IF (p_commit = FND_API.G_TRUE) THEN
8860 savepoint SUBMIT_WP_PRIVATE;
8861 END IF;
8862
8863 OPEN get_wp_info;
8864 FETCH get_wp_info into l_structure_version_name, l_structure_version_desc;
8865 CLOSE get_wp_info;
8866
8867 --Check if ok to publish workplan version
8868 OPEN checkAutoPub;
8869 FETCH checkAutoPub into l_dummy;
8870 IF checkAutoPub%NOTFOUND THEN
8871 l_auto_pub := 'N';
8872 ELSE
8873 l_auto_pub := 'Y';
8874 END IF;
8875 CLOSE checkAutoPub;
8876
8877
8878 --hsiu: bug 2684465
8879 --Check if this structure missing tasks with transactions
8880 -- IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
8881 -- PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
8882 -- x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
8883 -- RAISE FND_API.G_EXC_ERROR;
8884 -- END IF;
8885 PA_PROJECT_STRUCTURE_UTILS.CHECK_MISS_TRANSACTION_TASKS(p_structure_version_id,
8886 l_return_status,
8887 l_msg_count,
8888 l_msg_data);
8889 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8890 RAISE FND_API.G_EXC_ERROR;
8891 END IF;
8892
8893
8894
8895 --Check if task statuses are consistent
8896 PA_PROJECT_STRUCTURE_UTILS.check_tasks_statuses_valid(
8897 p_structure_version_id
8898 ,l_return_status
8899 ,l_msg_count
8900 ,l_msg_data
8901 );
8902 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8903 RAISE FND_API.G_EXC_ERROR;
8904 END IF;
8905
8906
8907 --Check if any new summary task has transactions
8908 PA_PROJECT_STRUCTURE_UTILS.Check_txn_on_summary_tasks(
8909 p_structure_version_id
8910 ,l_return_status
8911 ,l_msg_count
8912 ,l_msg_data
8913 );
8914 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8915 RAISE FND_API.G_EXC_ERROR;
8916 END IF;
8917
8918
8919 --end bug 2684465
8920
8921
8922
8923 IF (l_auto_pub = 'Y') THEN
8924
8925 /*
8926 --Check if this structure can be published (ie, if linked structures are published)
8927 IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Publish_Struc_Ver_Ok(p_structure_version_id)) THEN
8928 PA_UTILS.ADD_MESSAGE('PA','PA_PS_LINK_STRUC_NOT_PUB');
8929 x_msg_data := 'PA_PS_LINK_STRUC_NOT_PUB';
8930 RAISE FND_API.G_EXC_ERROR;
8931 END IF;
8932 */
8933
8934 /*
8935 PA_PROGRESS_PUB.CREATE_PROGRESS_FOR_WBS(
8936 p_validate_only => FND_API.G_TRUE
8937 ,p_commit => FND_API.G_FALSE
8938 ,p_project_id => p_project_id
8939 ,p_structure_version_id => p_structure_version_id
8940 ,x_return_status => l_return_status
8941 ,x_msg_count => l_msg_count
8942 ,x_msg_data => l_msg_data
8943 );
8944 */
8945
8946 --bug 3840509
8947 IF 'Y' = nvl(PA_PROJECT_STRUCTURE_UTILS.Get_Sch_Dirty_fl(p_project_id,
8948 p_structure_version_id), 'N') THEN
8949 --need to reschedule
8950 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NEED_THIRD_PT_SCH');
8951 x_msg_data := 'PA_PS_NEED_THIRD_PT_SCH';
8952 RAISE FND_API.G_EXC_ERROR;
8953 END IF;
8954 --end bug 3840509
8955
8956 --Check if there is any error.
8957 l_msg_count := FND_MSG_PUB.count_msg;
8958 IF l_msg_count > 0 THEN
8959 x_msg_count := l_msg_count;
8960 IF x_msg_count = 1 THEN
8961 x_msg_data := l_msg_data;
8962 END IF;
8963 RAISE FND_API.G_EXC_ERROR;
8964 END IF;
8965
8966 /*
8967 savepoint check_workplan;
8968
8969 PA_PROJECT_STRUCTURE_PVT1.Publish_Structure(
8970 p_responsibility_id => p_responsibility_id
8971 ,p_structure_version_id => p_structure_version_id
8972 ,p_publish_structure_ver_name => l_structure_version_name
8973 ,p_structure_ver_desc => l_structure_version_desc
8974 ,p_effective_date => TRUNC(SYSDATE)
8975 ,p_current_baseline_flag => 'N'
8976 ,x_published_struct_ver_id => l_published_struc_ver_id
8977 ,x_return_status => x_return_status
8978 ,x_msg_count => x_msg_count
8979 ,x_msg_data => x_msg_data
8980 );
8981
8982 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8983 RAISE FND_API.G_EXC_ERROR;
8984 END IF;
8985 rollback to check_workplan;
8986 */
8987 END IF;
8988
8989 -- For bug 3045358 : Functionality presently is that we do not require to check for the locking status of other working versions
8990 -- while submitting a particular version for approval.
8991 -- Hence commenting the below code
8992 /*
8993 OPEN sel_other_structure_ver(p_structure_version_id);
8994 LOOP
8995 FETCH sel_other_structure_ver into l_del_struc_ver_id;
8996 EXIT WHEN sel_other_structure_ver%NOTFOUND;
8997 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
8998 p_project_id => p_project_id
8999 ,p_structure_version_id =>l_del_struc_ver_id
9000 ,x_return_status => l_return_status
9001 ,x_error_message_code => l_msg_data
9002 );
9003
9004 IF (l_return_status <> 'S') THEN
9005 PA_UTILS.ADD_MESSAGE('PA',l_msg_data);
9006 x_msg_data := l_msg_data;
9007 CLOSE sel_other_structure_ver;
9008 RAISE FND_API.G_EXC_ERROR;
9009 END IF;
9010 END LOOP;
9011 CLOSE sel_other_structure_ver;
9012 */
9013 --Update to submit status
9014 UPDATE PA_PROJ_ELEM_VER_STRUCTURE
9015 set status_code = 'STRUCTURE_SUBMITTED',
9016 lock_status_code = 'UNLOCKED',
9017 locked_by_person_id = NULL,
9018 locked_date = NULL
9019 where project_id = p_project_id
9020 and element_version_id = p_structure_version_id;
9021
9022 --Submit for approval
9023 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9024
9025 OPEN get_start_wf;
9026 FETCH get_start_wf into l_dummy;
9027 IF get_start_wf%FOUND THEN
9028
9029 OPEN get_wf_info('STRUCTURE_SUBMITTED');
9030 FETCH get_wf_info into l_wf_enable, l_wf_item_type, l_wf_process,
9031 l_wf_success_code, l_wf_failure_code;
9032 IF (l_wf_enable = 'Y') THEN
9033 PA_WORKPLAN_WORKFLOW.Start_workflow
9034 (
9035 l_wf_item_type
9036 ,l_wf_process
9037 ,p_structure_version_id
9038 ,p_responsibility_id
9039 ,FND_GLOBAL.USER_ID
9040 ,l_item_key
9041 ,x_msg_count
9042 ,x_msg_data
9043 ,x_return_status
9044 );
9045
9046 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9047 --update pa_wf_process_table
9048 PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES
9049 (
9050 p_wf_type_code => 'WORKPLAN'
9051 ,p_item_type => l_wf_item_type
9052 ,p_item_key => l_item_key
9053 ,p_entity_key1 => p_project_id
9054 ,p_entity_key2 => p_structure_version_id
9055 ,p_description => NULL
9056 ,p_err_code => l_err_code
9057 ,p_err_stage => l_err_stage
9058 ,p_err_stack => l_err_stack
9059 );
9060 IF (l_err_code <> 0) THEN
9061 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9062 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9063 x_return_status := FND_API.G_RET_STS_ERROR;
9064 END IF;
9065 ELSE
9066 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9067 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9068 x_return_status := FND_API.G_RET_STS_ERROR;
9069 END IF;
9070 END IF;
9071 CLOSE get_wf_info;
9072 END IF;
9073 CLOSE get_start_wf;
9074
9075 END IF;
9076
9077 EXCEPTION
9078 WHEN FND_API.G_EXC_ERROR THEN
9079 IF (p_commit = FND_API.G_TRUE) THEN
9080 ROLLBACK to SUBMIT_WP_PRIVATE;
9081 END IF;
9082 x_msg_count := FND_MSG_PUB.count_msg;
9083 x_return_status := FND_API.G_RET_STS_ERROR;
9084 WHEN OTHERS THEN
9085 IF (p_commit = FND_API.G_TRUE) THEN
9086 ROLLBACK to SUBMIT_WP_PRIVATE;
9087 END IF;
9088 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9089 x_msg_count := FND_MSG_PUB.count_msg;
9090 --put message
9091 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
9092 p_procedure_name => 'Submit_Workplan',
9093 p_error_text => SUBSTRB(SQLERRM,1,240));
9094 RAISE;
9095 END SUBMIT_WORKPLAN;
9096
9097
9098 procedure CHANGE_WORKPLAN_STATUS
9099 (
9100 p_api_version IN NUMBER := 1.0,
9101 p_init_msg_list IN VARCHAR2 := fnd_api.g_true,
9102 p_commit IN VARCHAR2 := FND_API.g_false,
9103 p_validate_only IN VARCHAR2 := FND_API.g_false,
9104 p_max_msg_count IN NUMBER := FND_API.g_miss_num,
9105 p_project_id IN NUMBER := NULL,
9106 p_structure_version_id IN NUMBER := NULL,
9107 p_status_code IN VARCHAR2 := NULL,
9108 p_record_version_number IN NUMBER := NULL,
9109 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
9110 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
9111 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9112 )
9113 IS
9114 l_wf_enable VARCHAR2(1);
9115 l_wf_item_type VARCHAR2(30);
9116 l_wf_process VARCHAR2(30);
9117 l_success_code VARCHAR2(30);
9118 l_failure_code VARCHAR2(30);
9119 l_err_code NUMBER;
9120 l_err_stage VARCHAR2(30);
9121 l_err_stack VARCHAR2(240);
9122 l_dummy VARCHAR2(1);
9123 l_item_key NUMBER;
9124 l_pev_struc_id NUMBER;
9125 l_msg_count NUMBER;
9126 l_msg_data VARCHAR2(250);
9127
9128 /* Bug 2683138 */
9129 /* CURSOR get_start_wf IS
9130 select 'Y' from dual
9131 where exists (
9132 select 1 from pa_product_installation_v
9133 where product_short_code = 'PJT' AND INSTALLED_FLAG = 'Y'); */
9134
9135 CURSOR get_start_wf IS
9136 select 'Y' from dual;
9137
9138 CURSOR get_wf_info(c_status_code VARCHAR2) IS
9139 select enable_wf_flag, workflow_item_type,
9140 workflow_process, wf_success_status_code,
9141 wf_failure_status_code
9142 from pa_project_statuses
9143 where project_status_code = c_status_code;
9144
9145 CURSOR get_status_code(c_status_code VARCHAR2) IS
9146 select '1' from pa_project_statuses
9147 where project_status_code = c_status_code
9148 and status_type = 'STRUCTURE';
9149
9150 BEGIN
9151 PA_DEBUG.init_err_stack('PA_PROJECT_STRUCTURE_PVT1.CHANGE_WORKPLAN_STATUS');
9152
9153 -- Initialize the return status to success
9154 x_return_status := FND_API.G_RET_STS_SUCCESS;
9155
9156 --
9157 BEGIN
9158 select pev_structure_id into l_pev_struc_id
9159 from pa_proj_elem_ver_structure
9160 where project_id = p_project_id
9161 and element_version_id = p_structure_version_id
9162 and record_version_number = p_record_version_number
9163 for update of record_version_number NOWAIT;
9164 EXCEPTION
9165 when TIMEOUT_ON_RESOURCE then
9166 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9167 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
9168 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
9169 when NO_DATA_FOUND then
9170 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9171 p_msg_name => 'PA_XC_RECORD_CHANGED');
9172 l_msg_data := 'PA_XC_RECORD_CHANGED';
9173 when OTHERS then
9174 if SQLCODE = -54 then
9175 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9176 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
9177 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
9178 else
9179 raise;
9180 end if;
9181 END;
9182
9183 l_msg_count := FND_MSG_PUB.count_msg;
9184 if l_msg_count > 0 then
9185 x_msg_count := l_msg_count;
9186 if x_msg_count = 1 then
9187 x_msg_data := l_msg_data;
9188 end if;
9189 raise FND_API.G_EXC_ERROR;
9190 end if;
9191
9192 --check if status if valid
9193 OPEN get_status_code(p_status_code);
9194 FETCH get_status_code INTO l_dummy ;
9195 IF (get_status_code%NOTFOUND) THEN
9196 CLOSE get_status_code;
9197 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9198 p_msg_name => 'PA_PS_STRUC_STAT_INVAL');
9199 x_msg_data := 'PA_PS_STRUC_STAT_INVAL';
9200 RAISE FND_API.G_EXC_ERROR;
9201 END IF;
9202 CLOSE get_status_code;
9203 --end validation
9204
9205 update pa_proj_elem_ver_structure
9206 set status_code = p_status_code,
9207 record_version_number = record_version_number + 1
9208 where pev_structure_id = l_pev_struc_id;
9209
9210 OPEN get_start_wf;
9211 FETCH get_start_wf INTO l_dummy;
9212 IF (get_start_wf%found) THEN
9213 OPEN get_wf_info(p_status_code);
9214 FETCH get_wf_info INTO l_wf_enable, l_wf_item_type, l_wf_process,
9215 l_success_code,l_failure_code;
9216 IF (get_wf_info%found) then
9217 IF (l_wf_enable = 'Y') THEN
9218 PA_WORKPLAN_WORKFLOW.Start_workflow
9219 (
9220 l_wf_item_type
9221 ,l_wf_process
9222 ,p_structure_version_id
9223 ,FND_GLOBAL.RESP_ID -- NULL Added for bug 5372586
9224 ,FND_GLOBAL.USER_ID -- NULL Added for bug 5372586
9225 ,l_item_key
9226 ,x_msg_count
9227 ,x_msg_data
9228 ,x_return_status
9229 );
9230
9231 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9232 --update pa_wf_process_table
9233 PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES
9234 (
9235 p_wf_type_code => 'WORKPLAN'
9236 ,p_item_type => l_wf_item_type
9237 ,p_item_key => l_item_key
9238 ,p_entity_key1 => p_project_id
9239 ,p_entity_key2 => p_structure_version_id
9240 ,p_description => NULL
9241 ,p_err_code => l_err_code
9242 ,p_err_stage => l_err_stage
9243 ,p_err_stack => l_err_stack
9244 );
9245 IF (l_err_code <> 0) THEN
9246 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9247 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9248 x_return_status := FND_API.G_RET_STS_ERROR;
9249 END IF;
9250 ELSE
9251 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9252 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9253 x_return_status := FND_API.G_RET_STS_ERROR;
9254
9255 END IF;
9256 END IF;
9257 END IF;
9258 CLOSE get_wf_info;
9259
9260 END IF;
9261 CLOSE get_start_wf;
9262
9263 EXCEPTION
9264 WHEN FND_API.G_EXC_ERROR THEN
9265 x_msg_count := FND_MSG_PUB.count_msg;
9266 x_return_status := FND_API.G_RET_STS_ERROR;
9267 WHEN OTHERS THEN
9268 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9269 x_msg_count := FND_MSG_PUB.count_msg;
9270 --put message
9271 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
9272 p_procedure_name => 'Change_Workplan_Status',
9273 p_error_text => SUBSTRB(SQLERRM,1,240));
9274 RAISE;
9275 END CHANGE_WORKPLAN_STATUS;
9276
9277
9278 PROCEDURE rework_workplan
9279 (
9280 p_api_version IN NUMBER := 1.0
9281 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
9282 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9283 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
9284 ,p_validation_level IN VARCHAR2 := 100
9285 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
9286 ,p_debug_mode IN VARCHAR2 := 'N'
9287 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9288 ,p_project_id IN NUMBER
9289 ,p_structure_version_id IN NUMBER
9290 ,p_record_version_number IN NUMBER
9291 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9292 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9293 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9294 )
9295 IS
9296 l_item_key VARCHAR2(240);
9297 l_approve_req VARCHAR2(1);
9298 l_item_type VARCHAR2(30);
9299 l_wf_status VARCHAR2(30);
9300 l_msg_count NUMBER;
9301 l_msg_data VARCHAR2(300);
9302
9303 CURSOR check_approve_req IS
9304 select nvl(wp_approval_reqd_flag,'N') from pa_proj_workplan_attr
9305 where project_id = p_project_id;
9306
9307 /* Bug 2680486 -- Performance changes -- Added the join of wf_type_code to avoid full table scan on pa_wf_processes*/
9308
9309 CURSOR get_item_key IS
9310 select MAX(pwp.item_key), max(pwp.item_type)
9311 from pa_wf_processes pwp, pa_project_statuses pps
9312 where pwp.item_type = pps.workflow_item_type
9313 and pps.status_type = 'STRUCTURE'
9314 and pps.project_status_code = 'STRUCTURE_SUBMITTED'
9315 and entity_key2 = p_structure_version_id
9316 and pwp.wf_type_code = 'WORKPLAN';
9317
9318 CURSOR get_wf_status IS
9319 select 'Y'
9320 from wf_item_activity_statuses wias, pa_project_statuses pps
9321 where wias.item_type = pps.WORKFLOW_ITEM_TYPE
9322 and wias.item_key = l_item_key
9323 and wias.activity_status = 'ACTIVE'
9324 and pps.status_type = 'STRUCTURE'
9325 and pps.project_status_code = 'STRUCTURE_SUBMITTED';
9326
9327 BEGIN
9328 PA_DEBUG.init_err_stack('PA_PROJECT_STRUCTURE_PVT1.REWORK_WORKPLAN');
9329 x_return_status := FND_API.G_RET_STS_SUCCESS;
9330
9331 IF (p_commit = FND_API.G_TRUE) THEN
9332 savepoint rework_workplan_pvt;
9333 END IF;
9334
9335 change_workplan_status(
9336 p_project_id => p_project_id
9337 ,p_structure_version_id => p_structure_version_id
9338 ,p_status_code => 'STRUCTURE_WORKING'
9339 ,p_record_version_number => p_record_version_number
9340 ,x_return_status => x_return_status
9341 ,x_msg_count => l_msg_count
9342 ,x_msg_data => l_msg_data
9343 );
9344
9345 --Check if there is any error.
9346 l_msg_count := FND_MSG_PUB.count_msg;
9347 IF l_msg_count > 0 THEN
9348 x_msg_count := l_msg_count;
9349 IF x_msg_count = 1 THEN
9350 x_msg_data := l_msg_data;
9351 END IF;
9352 RAISE FND_API.G_EXC_ERROR;
9353 END IF;
9354
9355 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9356 OPEN check_approve_req;
9357 FETCH check_approve_req into l_approve_req;
9358 IF check_approve_req%NOTFOUND THEN
9359 l_approve_req := 'N';
9360 END IF;
9361 CLOSE check_approve_req;
9362
9363 OPEN get_item_key;
9364 FETCH get_item_key into l_item_key, l_item_type;
9365 IF (get_item_key%FOUND) THEN
9366
9367 --process exist
9368 OPEN get_wf_status;
9369 FETCH get_wf_status INTO l_wf_status;
9370 IF (get_wf_status%NOTFOUND or l_wf_status <> 'Y') THEN
9371 -- IF (l_approve_req = 'Y') THEN
9372 -- PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
9373 -- ,p_msg_name => 'PA_PR_CANCEL_WORKFLOW_INV');
9374 -- x_return_status := FND_API.G_RET_STS_ERROR;
9375 -- x_msg_count := FND_MSG_PUB.count_msg;
9376 -- if x_msg_count = 1 then
9377 -- x_msg_data := 'PA_PR_CANCEL_WORKFLOW_INV';
9378 -- end if;
9379 -- raise FND_API.G_EXC_ERROR;
9380 -- END IF;
9381 NULL;
9382 ELSE
9383 --cancel process
9384 PA_WORKPLAN_WORKFLOW.cancel_workflow(
9385 l_item_type
9386 ,l_item_key
9387 ,x_msg_count
9388 ,x_msg_data
9389 ,x_return_status
9390 );
9391 END IF;
9392 CLOSE get_wf_status;
9393
9394 ELSE
9395 IF (l_approve_req = 'Y') THEN
9396 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
9397 ,p_msg_name => 'PA_PR_CANCEL_WORKFLOW_INV');
9398 x_return_status := FND_API.G_RET_STS_ERROR;
9399 x_msg_count := FND_MSG_PUB.count_msg;
9400 if x_msg_count = 1 then
9401 x_msg_data := 'PA_PR_CANCEL_WORKFLOW_INV';
9402 end if;
9403 raise FND_API.G_EXC_ERROR;
9404 END IF;
9405 END IF;
9406 CLOSE get_item_key;
9407 END IF;
9408 EXCEPTION
9409 WHEN FND_API.G_EXC_ERROR THEN
9410 IF (p_commit = FND_API.G_TRUE) THEN
9411 ROLLBACK to rework_workplan_pvt;
9412 END IF;
9413 x_msg_count := FND_MSG_PUB.count_msg;
9414 x_return_status := FND_API.G_RET_STS_ERROR;
9415 WHEN OTHERS THEN
9416 IF (p_commit = FND_API.G_TRUE) THEN
9417 ROLLBACK to rework_workplan_pvt;
9418 END IF;
9419 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9420 x_msg_count := FND_MSG_PUB.count_msg;
9421 --put message
9422 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
9423 p_procedure_name => 'rework_Workplan',
9424 p_error_text => SUBSTRB(SQLERRM,1,240));
9425 RAISE;
9426 END rework_workplan;
9427
9428
9429 -- API name : update_structures_setup_attr
9430 -- Type : Update API
9431 -- Pre-reqs : None
9432 -- Return Value : Update_structures_setup_attr
9433 --
9434 -- Parameters
9435 -- p_project_id IN NUMBER
9436 -- p_workplan_enabled_flag IN VARCHAR2
9437 -- p_financial_enabled_flag IN VARCHAR2
9438 -- p_sharing_enabled_flag IN VARCHAR2
9439 -- x_return_status OUT VARCHAR2
9440 -- x_msg_count OUT NUMBER
9441 -- x_msg_data OUT VARCHAR2
9442 --
9443 -- History
9444 --
9445 -- 26-JUL-02 HSIU -Created
9446 -- 15-JAN-04 HSIU -rewrite API with sharing code changes
9447
9448 PROCEDURE update_structures_setup_old
9449 ( p_api_version IN NUMBER := 1.0
9450 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
9451 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9452 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
9453 ,p_validation_level IN VARCHAR2 := 100
9454 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
9455 ,p_debug_mode IN VARCHAR2 := 'N'
9456 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9457 ,p_project_id IN NUMBER
9458 ,p_workplan_enabled_flag IN VARCHAR2
9459 ,p_financial_enabled_flag IN VARCHAR2
9460 ,p_sharing_enabled_flag IN VARCHAR2
9461 --FP M changes bug 3301192
9462 ,p_deliverables_enabled_flag IN VARCHAR2
9463 ,p_sharing_option_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9464 --End FP M changes bug 3301192
9465 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9466 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9467 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9468 )
9469 IS
9470 l_ret_stat VARCHAR2(1);
9471 l_err_msg_code VARCHAR2(30);
9472 l_suffix VARCHAR2(80);
9473 l_name VARCHAR2(240);
9474 l_append VARCHAR2(10) := ': ';
9475 l_return_status VARCHAR2(1);
9476 l_msg_count NUMBER;
9477 l_msg_data VARCHAR2(250);
9478 l_structure_id NUMBER;
9479 l_structure_version_id NUMBER;
9480 l_template_flag VARCHAR2(1);
9481 l_status_code VARCHAR2(30);
9482 l_baseline_flag VARCHAR2(1);
9483 l_latest_eff_pub_flag VARCHAR2(1);
9484 l_effective_date DATE;
9485 l_wp_attr_rvn NUMBER;
9486 l_rowid VARCHAR2(255);
9487 l_keep_structure_ver_id NUMBER;
9488 l_del_struc_ver_id NUMBER;
9489 l_struc_ver_rvn NUMBER;
9490 l_pev_structure_id NUMBER;
9491 l_pev_schedule_id NUMBER;
9492 l_struc_ver_attr_rvn NUMBER;
9493 l_struc_type_id NUMBER;
9494 l_proj_structure_type_id NUMBER;
9495 l_task_id NUMBER;
9496 l_element_version_id NUMBER;
9497 l_start_date DATE;
9498 l_completion_date DATE;
9499 l_object_type VARCHAR2(30);
9500 l_task_ver_id NUMBER;
9501 /* Bug 2790703 Begin */
9502 -- l_task_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
9503 l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
9504 l_index number :=0 ;
9505 /* Bug 2790703 End */
9506
9507 l_proj_start_Date DATE;
9508 l_proj_completion_date DATE;
9509 l_proj_prog_attr_id NUMBER;
9510
9511 CURSOR get_project_info IS
9512 select name, target_start_date, target_finish_date
9513 from pa_projects_all
9514 where project_id = p_project_id;
9515
9516 --bug 2843569: added record_version_number
9517 CURSOR get_template_flag IS
9518 select template_flag, record_version_number
9519 from pa_projects_all
9520 where project_id = p_project_id;
9521
9522 CURSOR get_wp_attr_rvn IS
9523 select b.proj_element_id, a.record_version_number
9524 from pa_proj_workplan_attr a,
9525 pa_proj_elements b,
9526 pa_proj_structure_types c,
9527 pa_structure_types d
9528 where a.project_id = b.project_id
9529 and a.proj_element_id = b.proj_element_id
9530 and b.project_id = p_project_id
9531 and b.proj_element_id = c.proj_element_id
9532 and c.structure_type_id = d.structure_type_id
9533 and d.structure_type_class_code = 'WORKPLAN';
9534
9535 cursor sel_wp_struct_type(c_structure_id NUMBER) IS
9536 select a.rowid
9537 from pa_proj_structure_types a,
9538 pa_structure_types b
9539 where a.proj_element_id = c_structure_id
9540 and a.structure_type_id = b.structure_type_id
9541 and b.structure_type_class_code = 'WORKPLAN';
9542
9543 cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
9544 select element_version_id
9545 from pa_proj_elem_ver_structure
9546 where proj_element_id = c_structure_id
9547 and project_id = p_project_id
9548 and status_code = 'STRUCTURE_PUBLISHED'
9549 and LATEST_EFF_PUBLISHED_FLAG = 'Y';
9550
9551 cursor sel_wp_structure_id IS
9552 select a.proj_element_id
9553 from pa_proj_elements a,
9554 pa_proj_structure_types b,
9555 pa_structure_types c
9556 where a.project_id = p_project_id
9557 and a.object_type = 'PA_STRUCTURES'
9558 and a.proj_element_id = b.proj_element_id
9559 and b.structure_type_id = c.structure_type_id
9560 and c.structure_type_class_code = 'WORKPLAN';
9561
9562 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
9563 select b.element_version_id, b.record_version_number
9564 from pa_proj_element_versions a,
9565 pa_proj_element_versions b
9566 where a.element_version_id = c_keep_struc_ver_id
9567 and a.project_id = b.project_id
9568 and a.proj_element_id = b.proj_element_id
9569 and b.element_version_id <> c_keep_struc_ver_id
9570 and b.object_type = 'PA_STRUCTURES';
9571
9572 cursor sel_all_wp_structure_ver(c_struc_id NUMBER) IS
9573 select a.element_version_id, a.record_version_number
9574 from pa_proj_element_versions a,
9575 pa_proj_elements b
9576 where a.proj_element_id = b.proj_element_id
9577 and a.project_id = b.project_id
9578 and b.proj_element_id = c_struc_id;
9579
9580 cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
9581 select PEV_STRUCTURE_ID, record_version_number
9582 from pa_proj_elem_ver_structure
9583 where project_id = p_project_id
9584 and element_version_id = c_struc_ver_id;
9585
9586 cursor sel_proj_workplan_attr(c_struc_id NUMBER) is
9587 select *
9588 from pa_proj_workplan_attr
9589 where proj_element_id = c_struc_id;
9590 l_proj_workplan_attr_rec sel_proj_workplan_attr%ROWTYPE;
9591
9592 cursor sel_proj_progress_attr(c_struc_id NUMBER) IS
9593 select *
9594 from pa_proj_progress_attr
9595 where project_id = p_project_id
9596 and object_type = 'PA_STRUCTURES'
9597 and object_id = c_struc_id;
9598 l_proj_progress_attr_rec sel_proj_progress_attr%ROWTYPE;
9599
9600 cursor sel_fin_structure_id IS
9601 select a.proj_element_id
9602 from pa_proj_elements a,
9603 pa_proj_structure_types b,
9604 pa_structure_types c
9605 where a.project_id = p_project_id
9606 and a.object_type = 'PA_STRUCTURES'
9607 and a.proj_element_id = b.proj_element_id
9608 and b.structure_type_id = c.structure_type_id
9609 and c.structure_type_class_code = 'FINANCIAL';
9610
9611 CURSOR sel_struc_type_id IS
9612 select structure_type_id
9613 from pa_structure_types
9614 where structure_type_class_code = 'WORKPLAN';
9615
9616 cursor sel_struc_ver(c_structure_id NUMBER) IS
9617 select element_version_id
9618 from pa_proj_element_versions
9619 where project_id = p_project_id
9620 and proj_element_id = c_structure_id
9621 and object_type = 'PA_STRUCTURES';
9622
9623 --hsiu: commented for performance
9624 -- cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
9625 -- select object_type, proj_element_id, element_version_id
9626 -- from pa_proj_element_versions
9627 -- where parent_structure_version_id = c_struc_ver_id;
9628 cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
9629 select pev.object_type, pev.proj_element_id, pev.element_version_id
9630 from pa_proj_element_versions pev, pa_object_relationships rel
9631 where pev.parent_structure_version_id = c_struc_ver_id
9632 and rel.object_id_to1 = pev.element_version_id
9633 and rel.relationship_type = 'S'
9634 and NOT EXISTS (
9635 select 1
9636 from pa_object_Relationships
9637 where object_id_from1 = pev.element_version_id
9638 and relationship_type = 'S'
9639 );
9640
9641
9642 cursor sel_task_dates(c_task_id NUMBER) IS
9643 select start_date, completion_date
9644 from pa_tasks
9645 where task_id = c_task_id;
9646
9647 --hsiu added for bug 2634029
9648 cursor sel_target_dates IS
9649 select target_start_date, target_finish_date, calendar_id
9650 from pa_projects_all
9651 where project_id = p_project_id;
9652
9653 CURSOR get_top_tasks(c_structure_version_id NUMBER) IS
9654 select v.element_version_id
9655 from pa_proj_element_versions v,
9656 pa_object_relationships r
9657 where v.element_version_id = r.object_id_to1
9658 and r.object_id_from1 = c_structure_version_id
9659 and r.object_type_from = 'PA_STRUCTURES';
9660
9661 --bug 2843569
9662 CURSOR get_scheduled_dates(c_project_Id NUMBER,
9663 c_element_version_id NUMBER) IS
9664 select a.scheduled_start_date, a.scheduled_finish_date
9665 from pa_proj_elem_ver_schedule a
9666 where a.project_id = c_project_id
9667 and a.element_version_id = c_element_version_id;
9668 l_get_sch_dates_cur get_scheduled_dates%ROWTYPE;
9669 l_proj_rec_ver_num NUMBER;
9670 --end bug 2843569
9671
9672 l_target_start_date DATE;
9673 l_target_finish_date DATE;
9674 l_calendar_id NUMBER;
9675 --end changes for bug 2634029
9676
9677 --bug 3010538
9678 l_task_weight_basis_code VARCHAR2(30);
9679 l_update_proc_wbs_flag VARCHAR2(1);
9680 --end bug 3010538
9681
9682 l_wp_name VARCHAR2(240);
9683 BEGIN
9684 IF (p_debug_mode = 'Y') THEN
9685 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr');
9686 END IF;
9687
9688 IF (p_commit = FND_API.G_TRUE) THEN
9689 savepoint update_struc_setup_attr_pvt;
9690 END IF;
9691
9692 IF (p_debug_mode = 'Y') THEN
9693 pa_debug.debug('Performing validations');
9694 END IF;
9695
9696 /*
9697 --For enabling workplan
9698 IF (p_workplan_enabled_flag <>
9699 PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id)) THEN
9700 --BEGIN ENABLING WP CODE
9701
9702 IF (p_workplan_enabled_flag = 'Y') THEN
9703 --Validation
9704 PA_PROJECT_STRUCTURE_UTILS.check_enable_wp_ok(p_project_id,
9705 l_ret_stat,
9706 l_err_msg_code);
9707 IF (l_ret_stat = 'N') THEN
9708 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
9709 x_msg_data := l_err_msg_code;
9710 RAISE FND_API.G_EXC_ERROR;
9711 END IF;
9712 --enable WP
9713 --get project name
9714 OPEN get_project_info;
9715 FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date;
9716 CLOSE get_project_info;
9717
9718 IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
9719 l_proj_completion_date := l_proj_start_date;
9720 ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
9721 l_proj_completion_date := sysdate;
9722 l_proj_start_date := sysdate;
9723 END IF;
9724
9725 --get suffix
9726 select meaning
9727 into l_suffix
9728 from pa_lookups
9729 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
9730 and lookup_code = 'WORKPLAN';
9731
9732 l_name := substrb(l_name||l_append||l_suffix, 1, 240);
9733 --Create new structure
9734 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
9735 ( p_validate_only => FND_API.G_FALSE
9736 ,p_project_id => p_project_id
9737 ,p_structure_number => l_name
9738 ,p_structure_name => l_name
9739 ,p_calling_flag => 'WORKPLAN'
9740 ,x_structure_id => l_structure_id
9741 ,x_return_status => l_return_status
9742 ,x_msg_count => l_msg_count
9743 ,x_msg_data => l_msg_data );
9744
9745 --Check if there is any error.
9746 l_msg_count := FND_MSG_PUB.count_msg;
9747 IF l_msg_count > 0 THEN
9748 x_msg_count := l_msg_count;
9749 IF x_msg_count = 1 THEN
9750 x_msg_data := l_msg_data;
9751 END IF;
9752 RAISE FND_API.G_EXC_ERROR;
9753 END IF;
9754
9755 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
9756 ( p_validate_only => FND_API.G_FALSE
9757 ,p_structure_id => l_structure_id
9758 ,x_structure_version_id => l_structure_version_id
9759 ,x_return_status => l_return_status
9760 ,x_msg_count => l_msg_count
9761 ,x_msg_data => l_msg_data );
9762
9763 --Check if there is any error.
9764 l_msg_count := FND_MSG_PUB.count_msg;
9765 IF l_msg_count > 0 THEN
9766 x_msg_count := l_msg_count;
9767 IF x_msg_count = 1 THEN
9768 x_msg_data := l_msg_data;
9769 END IF;
9770 RAISE FND_API.G_EXC_ERROR;
9771 END IF;
9772
9773 PA_TASK_PUB1.Create_Schedule_Version(
9774 p_element_version_id => l_structure_version_id
9775 ,p_scheduled_start_date => l_proj_start_date
9776 ,p_scheduled_end_date => l_proj_completion_date
9777 ,x_pev_schedule_id => l_pev_schedule_id
9778 ,x_return_status => l_return_status
9779 ,x_msg_count => l_msg_count
9780 ,x_msg_data => l_msg_data
9781 );
9782
9783 --Check if there is any error.
9784 l_msg_count := FND_MSG_PUB.count_msg;
9785 IF l_msg_count > 0 THEN
9786 x_msg_count := l_msg_count;
9787 IF x_msg_count = 1 THEN
9788 x_msg_data := l_msg_data;
9789 END IF;
9790 RAISE FND_API.G_EXC_ERROR;
9791 END IF;
9792
9793 OPEN get_template_flag;
9794 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
9795 CLOSE get_template_flag;
9796
9797 IF (l_template_flag = 'Y') THEN
9798 l_status_code := 'STRUCTURE_WORKING';
9799 l_baseline_flag := 'N';
9800 l_latest_eff_pub_flag := 'N';
9801 l_effective_date := NULL;
9802 ELSE
9803 l_status_code := 'STRUCTURE_PUBLISHED';
9804 l_baseline_flag := 'Y';
9805 l_latest_eff_pub_flag := 'Y';
9806 l_effective_date := sysdate;
9807 END IF;
9808
9809 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
9810 ( p_validate_only => FND_API.G_FALSE
9811 ,p_structure_version_id => l_structure_version_id
9812 ,p_structure_version_name => l_name
9813 ,p_structure_version_desc => NULL
9814 ,p_effective_date => l_effective_date
9815 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
9816 ,p_locked_status_code => 'UNLOCKED'
9817 ,p_struct_version_status_code => l_status_code
9818 ,p_baseline_current_flag => l_baseline_flag
9819 ,p_baseline_original_flag => 'N'
9820 ,x_pev_structure_id => l_pev_structure_id
9821 ,x_return_status => l_return_status
9822 ,x_msg_count => l_msg_count
9823 ,x_msg_data => l_msg_data );
9824
9825 --Check if there is any error.
9826 l_msg_count := FND_MSG_PUB.count_msg;
9827 IF l_msg_count > 0 THEN
9828 x_msg_count := l_msg_count;
9829 IF x_msg_count = 1 THEN
9830 x_msg_data := l_msg_data;
9831 END IF;
9832 RAISE FND_API.G_EXC_ERROR;
9833 END IF;
9834
9835 --end enable WP
9836 ELSE
9837 --Validation
9838 PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
9839 l_ret_stat,
9840 l_err_msg_code);
9841 IF (l_ret_stat = 'N') THEN
9842 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
9843 x_msg_data := l_err_msg_code;
9844 RAISE FND_API.G_EXC_ERROR;
9845 END IF;
9846 --disable WP
9847
9848 --get structure_id
9849 OPEN sel_wp_structure_id;
9850 FETCH sel_wp_structure_id INTO l_structure_id;
9851 CLOSE sel_wp_structure_id;
9852
9853 IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id)
9854 = 'Y') THEN
9855 --Shared
9856 --Select version to be kept
9857 OPEN sel_latest_pub_ver(l_structure_id);
9858 FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
9859 IF sel_latest_pub_ver%NOTFOUND THEN
9860 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
9861 END IF;
9862 CLOSE sel_latest_pub_ver;
9863
9864 --Delete all other structure versions
9865 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
9866 LOOP
9867 FETCH sel_other_structure_ver into l_del_struc_ver_id,
9868 l_struc_ver_rvn;
9869 EXIT WHEN sel_other_structure_ver%NOTFOUND;
9870 -----hsiu: bug 2800553: added for sharing/splitting performance
9871 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
9872 p_project_id,
9873 l_del_struc_ver_id,
9874 l_return_status,
9875 l_err_msg_code);
9876 IF (l_return_status <> 'S') THEN
9877 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
9878 x_msg_data := l_err_msg_code;
9879 RAISE FND_API.G_EXC_ERROR;
9880 END IF;
9881
9882 --get top tasks
9883 OPEN get_top_tasks(l_del_struc_ver_id);
9884 LOOP
9885 FETCH get_top_tasks into l_task_ver_id;
9886 EXIT WHEN get_top_tasks%NOTFOUND;
9887
9888 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
9889 p_project_id => p_project_id
9890 ,p_task_version_id => l_task_ver_id
9891 ,p_parent_structure_ver_id => l_del_struc_ver_id
9892 ,x_return_status => l_return_status
9893 ,x_error_message_code => l_err_msg_code );
9894
9895 IF (l_return_status <> 'S') THEN
9896 x_return_status := l_return_status;
9897 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
9898 l_msg_data := l_err_msg_code;
9899 CLOSE get_top_tasks;
9900 RAISE FND_API.G_EXC_ERROR;
9901 END IF;
9902 END LOOP;
9903 CLOSE get_top_tasks;
9904
9905 -- PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
9906 PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
9907 p_structure_version_id => l_del_struc_ver_id
9908 ,p_record_version_number => l_struc_ver_rvn
9909 ,x_return_status => l_return_status
9910 ,x_msg_count => l_msg_count
9911 ,x_msg_data => l_msg_data
9912 );
9913 ----end changes
9914
9915 --Check if there is any error.
9916 l_msg_count := FND_MSG_PUB.count_msg;
9917 IF l_msg_count > 0 THEN
9918 x_msg_count := l_msg_count;
9919 IF x_msg_count = 1 THEN
9920 x_msg_data := l_msg_data;
9921 END IF;
9922 CLOSE sel_other_structure_ver;
9923 RAISE FND_API.G_EXC_ERROR;
9924 END IF;
9925
9926 END LOOP;
9927 CLOSE sel_other_structure_ver;
9928
9929 --NULL all baseline dates
9930 UPDATE pa_proj_elements
9931 SET baseline_start_date = NULL,
9932 baseline_finish_date = NULL,
9933 record_version_number = record_version_number+1
9934 WHERE project_id = p_project_id;
9935
9936 --Delete all schedule rows
9937 DELETE FROM pa_proj_elem_ver_schedule
9938 WHERE project_id = p_project_id;
9939
9940 --Delete wp attr row
9941 OPEN get_wp_attr_rvn;
9942 FETCH get_wp_attr_rvn into l_structure_id, l_wp_attr_rvn;
9943 CLOSE get_wp_attr_rvn;
9944
9945 PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
9946 p_validate_only => FND_API.G_FALSE
9947 ,p_project_id => p_project_id
9948 ,p_proj_element_id => l_structure_id
9949 ,p_record_version_number => l_wp_attr_rvn
9950 ,x_return_status => l_return_status
9951 ,x_msg_count => l_msg_count
9952 ,x_msg_data => l_msg_data
9953 );
9954
9955 --Check if there is any error.
9956 l_msg_count := FND_MSG_PUB.count_msg;
9957 IF l_msg_count > 0 THEN
9958 x_msg_count := l_msg_count;
9959 IF x_msg_count = 1 THEN
9960 x_msg_data := l_msg_data;
9961 END IF;
9962 RAISE FND_API.G_EXC_ERROR;
9963 END IF;
9964
9965 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
9966 p_validate_only => FND_API.G_FALSE
9967 ,p_project_id => p_project_id
9968 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
9969 ,p_object_id => l_structure_id
9970 ,x_return_status => l_return_status
9971 ,x_msg_count => l_msg_count
9972 ,x_msg_data => l_msg_data
9973 );
9974
9975 --Check if there is any error.
9976 l_msg_count := FND_MSG_PUB.count_msg;
9977 IF l_msg_count > 0 THEN
9978 x_msg_count := l_msg_count;
9979 IF x_msg_count = 1 THEN
9980 x_msg_data := l_msg_data;
9981 END IF;
9982 RAISE FND_API.G_EXC_ERROR;
9983 END IF;
9984
9985 --Delete structure type
9986 OPEN sel_wp_struct_type(l_structure_id);
9987 FETCH sel_wp_struct_type into l_rowid;
9988 PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
9989 CLOSE sel_wp_struct_type;
9990
9991 --Update structure status to published if project;
9992 -- working if template
9993 OPEN get_template_flag;
9994 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
9995 CLOSE get_template_flag;
9996
9997 OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
9998 FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
9999 l_struc_ver_attr_rvn;
10000 CLOSE sel_struc_ver_attr_rvn;
10001
10002 IF (l_template_flag = 'Y') THEN
10003 l_status_code := 'STRUCTURE_WORKING';
10004 l_latest_eff_pub_flag := 'N';
10005 l_effective_date := NULL;
10006 ELSE
10007 l_status_code := 'STRUCTURE_PUBLISHED';
10008 l_latest_eff_pub_flag := 'Y';
10009 l_effective_date := sysdate;
10010 END IF;
10011
10012 --Change status
10013 UPDATE pa_proj_elem_ver_structure
10014 set status_code = l_status_code,
10015 current_flag = 'N',
10016 current_baseline_date = NULL,
10017 current_baseline_person_id = NULL,
10018 latest_eff_published_flag = l_latest_eff_pub_flag,
10019 effective_date = l_effective_date,
10020 record_version_number = record_version_number + 1
10021 where pev_structure_id = l_pev_structure_id;
10022
10023 ELSE
10024 --Not Shared
10025 --Delete all structure versions
10026 OPEN sel_all_wp_structure_ver(l_structure_id);
10027 LOOP
10028 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
10029 l_struc_ver_rvn;
10030 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
10031 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10032 p_project_id,
10033 l_del_struc_ver_id,
10034 l_return_status,
10035 l_err_msg_code);
10036 IF (l_return_status <> 'S') THEN
10037 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10038 x_msg_data := l_err_msg_code;
10039 RAISE FND_API.G_EXC_ERROR;
10040 END IF;
10041
10042 --get top tasks
10043 OPEN get_top_tasks(l_del_struc_ver_id);
10044 LOOP
10045 FETCH get_top_tasks into l_task_ver_id;
10046 EXIT WHEN get_top_tasks%NOTFOUND;
10047
10048 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10049 p_project_id => p_project_id
10050 ,p_task_version_id => l_task_ver_id
10051 ,p_parent_structure_ver_id => l_del_struc_ver_id
10052 ,x_return_status => l_return_status
10053 ,x_error_message_code => l_err_msg_code );
10054
10055 IF (l_return_status <> 'S') THEN
10056 x_return_status := l_return_status;
10057 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10058 l_msg_data := l_err_msg_code;
10059 CLOSE get_top_tasks;
10060 RAISE FND_API.G_EXC_ERROR;
10061 END IF;
10062 END LOOP;
10063 CLOSE get_top_tasks;
10064
10065 -- PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10066 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10067 p_structure_version_id => l_del_struc_ver_id
10068 ,p_record_version_number => l_struc_ver_rvn
10069 ,x_return_status => l_return_status
10070 ,x_msg_count => l_msg_count
10071 ,x_msg_data => l_msg_data
10072 );
10073 ----end changes
10074
10075 --Check if there is any error.
10076 l_msg_count := FND_MSG_PUB.count_msg;
10077 IF l_msg_count > 0 THEN
10078 x_msg_count := l_msg_count;
10079 IF x_msg_count = 1 THEN
10080 x_msg_data := l_msg_data;
10081 END IF;
10082 CLOSE sel_all_wp_structure_ver;
10083 RAISE FND_API.G_EXC_ERROR;
10084 END IF;
10085 END LOOP;
10086 CLOSE sel_all_wp_structure_ver;
10087
10088 END IF;
10089 --end disable WP
10090 END IF;
10091 --END ENABLING WP CODE
10092 END IF;
10093
10094 --For sharing workplan
10095 IF (p_sharing_enabled_flag <>
10096 PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(p_project_id)) THEN
10097 --get structure_id
10098 OPEN sel_wp_structure_id;
10099 FETCH sel_wp_structure_id INTO l_structure_id;
10100 CLOSE sel_wp_structure_id;
10101
10102 --select current proj wp attributes
10103 OPEN sel_proj_workplan_attr(l_structure_id);
10104 FETCH sel_proj_workplan_attr INTO l_proj_workplan_attr_rec;
10105 CLOSE sel_proj_workplan_attr;
10106
10107 OPEN sel_proj_progress_attr(l_structure_id);
10108 FETCH sel_proj_progress_attr INTO l_proj_progress_attr_rec;
10109 CLOSE sel_proj_progress_attr;
10110
10111 --BEGIN SHARING CODE
10112 IF (p_sharing_enabled_flag = 'Y' AND
10113 PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id) = 'Y') THEN
10114 --Validation
10115 PA_PROJECT_STRUCTURE_UTILS.check_sharing_on_ok(p_project_id,
10116 l_ret_stat,
10117 l_err_msg_code);
10118 IF (l_ret_stat = 'N') THEN
10119 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10120 x_msg_data := l_err_msg_code;
10121 RAISE FND_API.G_EXC_ERROR;
10122 END IF;
10123
10124 --hsiu: bug 2634029; get target dates
10125 OPEN sel_target_dates;
10126 FETCH sel_target_dates into l_target_start_date, l_target_finish_date, l_calendar_id;
10127 CLOSE sel_target_dates;
10128 IF (l_target_start_date IS NULL or l_target_finish_date IS NULL) THEN
10129 l_target_start_date := sysdate;
10130 l_target_finish_date := sysdate;
10131 END IF;
10132 --end bug 2634029 changes
10133
10134 --sharing on
10135 --loop and delete all workplan versions
10136 OPEN sel_all_wp_structure_ver(l_structure_id);
10137 LOOP
10138 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
10139 l_struc_ver_rvn;
10140 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
10141 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10142 p_project_id,
10143 l_del_struc_ver_id,
10144 l_return_status,
10145 l_err_msg_code);
10146 IF (l_return_status <> 'S') THEN
10147 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10148 x_msg_data := l_err_msg_code;
10149 RAISE FND_API.G_EXC_ERROR;
10150 END IF;
10151
10152 --get top tasks
10153 OPEN get_top_tasks(l_del_struc_ver_id);
10154 LOOP
10155 FETCH get_top_tasks into l_task_ver_id;
10156 EXIT WHEN get_top_tasks%NOTFOUND;
10157
10158 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10159 p_project_id => p_project_id
10160 ,p_task_version_id => l_task_ver_id
10161 ,p_parent_structure_ver_id => l_del_struc_ver_id
10162 ,x_return_status => l_return_status
10163 ,x_error_message_code => l_err_msg_code );
10164
10165
10166 IF (l_return_status <> 'S') THEN
10167 x_return_status := l_return_status;
10168 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10169 l_msg_data := l_err_msg_code;
10170 CLOSE get_top_tasks;
10171 RAISE FND_API.G_EXC_ERROR;
10172 END IF;
10173 END LOOP;
10174 CLOSE get_top_tasks;
10175
10176 -- PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10177 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10178 p_structure_version_id => l_del_struc_ver_id
10179 ,p_record_version_number => l_struc_ver_rvn
10180 ,x_return_status => l_return_status
10181 ,x_msg_count => l_msg_count
10182 ,x_msg_data => l_msg_data
10183 );
10184
10185 ----end changes
10186
10187 --Check if there is any error.
10188 l_msg_count := FND_MSG_PUB.count_msg;
10189 IF l_msg_count > 0 THEN
10190 x_msg_count := l_msg_count;
10191 IF x_msg_count = 1 THEN
10192 x_msg_data := l_msg_data;
10193 END IF;
10194 CLOSE sel_all_wp_structure_ver;
10195 RAISE FND_API.G_EXC_ERROR;
10196 END IF;
10197 END LOOP;
10198 CLOSE sel_all_wp_structure_ver;
10199
10200 --Add structure type to financial
10201 OPEN sel_fin_structure_id;
10202 FETCH sel_fin_structure_id into l_structure_id;
10203 CLOSE sel_fin_structure_id;
10204
10205 OPEN sel_struc_type_id;
10206 FETCH sel_struc_type_id INTO l_struc_type_id;
10207 CLOSE sel_struc_type_id;
10208
10209 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
10210 X_ROWID => l_rowid
10211 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
10212 ,X_PROJ_ELEMENT_ID => l_structure_id
10213 ,X_STRUCTURE_TYPE_ID => l_struc_type_id
10214 ,X_RECORD_VERSION_NUMBER => 1
10215 ,X_ATTRIBUTE_CATEGORY => NULL
10216 ,X_ATTRIBUTE1 => NULL
10217 ,X_ATTRIBUTE2 => NULL
10218 ,X_ATTRIBUTE3 => NULL
10219 ,X_ATTRIBUTE4 => NULL
10220 ,X_ATTRIBUTE5 => NULL
10221 ,X_ATTRIBUTE6 => NULL
10222 ,X_ATTRIBUTE7 => NULL
10223 ,X_ATTRIBUTE8 => NULL
10224 ,X_ATTRIBUTE9 => NULL
10225 ,X_ATTRIBUTE10 => NULL
10226 ,X_ATTRIBUTE11 => NULL
10227 ,X_ATTRIBUTE12 => NULL
10228 ,X_ATTRIBUTE13 => NULL
10229 ,X_ATTRIBUTE14 => NULL
10230 ,X_ATTRIBUTE15 => NULL
10231 );
10232
10233 --add proj_wp attr
10234 PA_WORKPLAN_ATTR_PVT.CREATE_PROJ_WORKPLAN_ATTRS(
10235 p_validate_only => FND_API.G_FALSE
10236 ,p_project_id => p_project_id
10237 ,p_proj_element_id => l_structure_id
10238 ,p_approval_reqd_flag => l_proj_workplan_attr_rec.WP_APPROVAL_REQD_FLAG
10239 ,p_auto_publish_flag => l_proj_workplan_attr_rec.WP_AUTO_PUBLISH_FLAG
10240 ,p_approver_source_id => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_ID
10241 ,p_approver_source_type => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_TYPE
10242 ,p_default_display_lvl => l_proj_workplan_attr_rec.WP_DEFAULT_DISPLAY_LVL
10243 ,p_enable_wp_version_flag => l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG
10244 ,p_auto_pub_upon_creation_flag => l_proj_workplan_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
10245 ,p_auto_sync_txn_date_flag => l_proj_workplan_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
10246 ,p_txn_date_sync_buf_days => l_proj_workplan_attr_rec.TXN_DATE_SYNC_BUF_DAYS
10247 --LDENG
10248 ,p_lifecycle_version_id => l_proj_workplan_attr_rec.LIFECYCLE_VERSION_ID
10249 ,p_current_phase_version_id => l_proj_workplan_attr_rec.CURRENT_PHASE_VERSION_ID
10250 --END LDENG
10251 ,x_return_status => l_return_status
10252 ,x_msg_count => l_msg_count
10253 ,x_msg_data => l_msg_data
10254 );
10255
10256 --Check if there is any error.
10257 l_msg_count := FND_MSG_PUB.count_msg;
10258 IF l_msg_count > 0 THEN
10259 x_msg_count := l_msg_count;
10260 IF x_msg_count = 1 THEN
10261 x_msg_data := l_msg_data;
10262 END IF;
10263 RAISE FND_API.G_EXC_ERROR;
10264 END IF;
10265
10266 --bug 3010538
10267 --copy task weighting basis
10268 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
10269 p_validate_only => FND_API.G_FALSE
10270 ,p_project_id => p_project_id
10271 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
10272 ,P_OBJECT_ID => l_structure_id
10273 ,p_PROGRESS_CYCLE_ID => l_proj_progress_attr_rec.PROGRESS_CYCLE_ID
10274 ,p_wq_enable_flag => l_proj_progress_attr_rec.wq_enable_flag
10275 ,p_remain_effort_enable_flag => l_proj_progress_attr_rec.remain_effort_enable_flag
10276 ,p_percent_comp_enable_flag => l_proj_progress_attr_rec.percent_comp_enable_flag
10277 ,p_next_progress_update_date => l_proj_progress_attr_rec.next_progress_update_date
10278 ,p_action_set_id => NULL
10279 ,p_TASK_WEIGHT_BASIS_CODE => l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE
10280 ,x_proj_progress_attr_id => l_proj_prog_attr_id
10281 ,x_return_status => l_return_status
10282 ,x_msg_count => x_msg_count
10283 ,x_msg_data => x_msg_data
10284 );
10285
10286 --Check if there is any error.
10287 l_msg_count := FND_MSG_PUB.count_msg;
10288 IF l_msg_count > 0 THEN
10289 x_msg_count := l_msg_count;
10290 IF x_msg_count = 1 THEN
10291 x_msg_data := l_msg_data;
10292 END IF;
10293 RAISE FND_API.G_EXC_ERROR;
10294 END IF;
10295
10296 --Loop schedule version to structure version and task versions
10297 OPEN sel_struc_ver(l_structure_id);
10298 FETCH sel_struc_ver into l_structure_version_id;
10299 CLOSE sel_struc_ver;
10300
10301 --3035902: process update flag changes
10302 IF (l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE = 'EFFORT') THEN
10303 --set process flag to Y
10304 --get structure version id
10305 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
10306 p_project_id => p_project_id,
10307 p_structure_version_id => l_structure_version_id,
10308 p_update_wbs_flag => 'Y',
10309 x_return_status => l_return_status,
10310 x_msg_count => l_msg_count,
10311 x_msg_data => l_msg_data
10312 );
10313 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
10314 x_msg_count := FND_MSG_PUB.count_msg;
10315 if x_msg_count = 1 then
10316 x_msg_data := l_msg_data;
10317 end if;
10318 raise FND_API.G_EXC_ERROR;
10319 end if;
10320
10321 END IF;
10322 --3035902: end process update flag changes
10323
10324
10325 OPEN sel_struc_and_task_vers(l_structure_version_id);
10326 LOOP
10327 FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
10328 EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
10329 --hsiu: commented for performance enhancement
10330 -- l_start_date := sysdate;
10331 -- l_completion_date := sysdate;
10332
10333 --If it is lowest task, get dates
10334 --hsiu: commented for performance
10335 -- IF (l_object_type = 'PA_TASKS' AND
10336 -- PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_element_version_id) = 'Y') THEN
10337 -- OPEN sel_task_dates(l_task_id);
10338 -- FETCH sel_task_dates into l_start_date, l_completion_date;
10339 -- CLOSE sel_task_dates;
10340
10341 -- Bug 2790703 Begin
10342 --Add to array for rollup
10343 --l_task_ver_ids.extend;
10344 --l_task_ver_ids(l_task_ver_ids.count) := l_element_version_id;
10345 l_index := l_index + 1;
10346 l_task_ver_ids_tbl(l_index) := l_element_version_id;
10347 -- Bug 2790703 End
10348
10349 --hsiu: commented for performance
10350 -- IF (l_start_date IS NULL) OR (l_completion_date IS NULL) THEN
10351 -- CLOSE sel_struc_and_task_vers;
10352 -- PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_FIN_TK_DATE_MISS');
10353 -- x_msg_data := 'PA_PS_FIN_TK_DATE_MISS';
10354 -- RAISE FND_API.G_EXC_ERROR;
10355 --hsiu: 2634029
10356 -- Default sysdate or project target dates if transaction dates
10357 -- are missing.
10358 -- l_start_date := l_target_start_date;
10359 -- l_completion_date := l_target_finish_date;
10360 -- END IF;
10361 -- END IF;
10362
10363 -- anlee
10364 -- Commented out for performance
10365 -- Will use bulk insert into schedule table instead
10366 -- anlee end of comment
10367
10368 END LOOP;
10369 CLOSE sel_struc_and_task_vers;
10370
10371 INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
10372 pev_schedule_id,
10373 element_version_id,
10374 project_id,
10375 proj_element_id,
10376 creation_date,
10377 created_by,
10378 last_update_date,
10379 last_updated_by,
10380 scheduled_start_date,
10381 scheduled_finish_date,
10382 milestone_flag,
10383 critical_flag,
10384 calendar_id,
10385 record_version_number,
10386 last_update_login,
10387 source_object_id,
10388 source_object_type
10389 )
10390 SELECT
10391 pa_proj_elem_ver_schedule_s.nextval,
10392 PPEV.element_version_id,
10393 PPEV.project_id,
10394 PPEV.proj_element_id,
10395 SYSDATE,
10396 FND_GLOBAL.USER_ID,
10397 SYSDATE,
10398 FND_GLOBAL.USER_ID,
10399 DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', decode(PT.COMPLETION_DATE, NULL, trunc(l_target_start_date), trunc(PT.START_DATE))),
10400 DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_target_finish_date))),
10401 'N',
10402 'N',
10403 l_calendar_id,
10404 0,
10405 FND_GLOBAL.LOGIN_ID,
10406 PPEV.project_id,
10407 'PA_PROJECTS'
10408 FROM PA_TASKS PT,
10409 PA_PROJ_ELEMENT_VERSIONS PPEV
10410 WHERE
10411 PPEV.parent_structure_version_id = l_structure_version_id
10412 AND PPEV.proj_element_id = PT.task_id (+);
10413 -- anlee end of bulk insert
10414
10415 -- Bug 2790703 Begin
10416 IF (l_task_ver_ids_tbl.count > 0) THEN
10417 --rollup
10418 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
10419 p_commit => FND_API.G_FALSE,
10420 p_element_versions => l_task_ver_ids_tbl,
10421 x_return_status => l_return_status,
10422 x_msg_count => l_msg_count,
10423 x_msg_data => l_msg_data);
10424
10425 -- Bug 2790703 End
10426
10427 --Check if there is any error.
10428 l_msg_count := FND_MSG_PUB.count_msg;
10429 IF l_msg_count > 0 THEN
10430 x_msg_count := l_msg_count;
10431 IF x_msg_count = 1 THEN
10432 x_msg_data := l_msg_data;
10433 END IF;
10434 RAISE FND_API.G_EXC_ERROR;
10435 END IF;
10436 END IF;
10437
10438 --check if project or template; set status
10439 OPEN get_template_flag;
10440 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10441 CLOSE get_template_flag;
10442
10443 --bug 3010538
10444 --set update flag to 'Y' for all working versions (or published
10445 -- if versioning is disabled
10446 IF (l_template_flag = 'Y') THEN
10447 l_status_code := 'STRUCTURE_WORKING';
10448 l_baseline_flag := 'N';
10449 l_latest_eff_pub_flag := 'N';
10450 l_effective_date := NULL;
10451 ELSE
10452 l_status_code := 'STRUCTURE_PUBLISHED';
10453 l_baseline_flag := 'Y';
10454 l_latest_eff_pub_flag := 'Y';
10455 l_effective_date := sysdate;
10456 END IF;
10457
10458 --Change status
10459 OPEN sel_struc_ver_attr_rvn(l_structure_version_id);
10460 FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
10461 l_struc_ver_attr_rvn;
10462 CLOSE sel_struc_ver_attr_rvn;
10463
10464 --bug 3010538
10465 --added process_update_wbs_flag
10466 UPDATE pa_proj_elem_ver_structure
10467 set status_code = l_status_code,
10468 current_flag = l_baseline_flag,
10469 current_baseline_date = l_effective_date,
10470 current_baseline_person_id = NULL,
10471 latest_eff_published_flag = l_latest_eff_pub_flag,
10472 effective_date = l_effective_date,
10473 -- PROCESS_UPDATE_WBS_FLAG = l_update_proc_wbs_flag,
10474 record_version_number = record_version_number + 1
10475 where pev_structure_id = l_pev_structure_id;
10476
10477 --bug 2843569
10478 IF (l_status_code = 'STRUCTURE_PUBLISHED') OR
10479 (l_template_flag = 'Y') THEN
10480 OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
10481 FETCH get_scheduled_dates into l_get_sch_dates_cur;
10482 CLOSE get_scheduled_dates;
10483
10484 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
10485 p_validate_only => FND_API.G_FALSE
10486 ,p_project_id => p_project_id
10487 ,p_date_type => 'SCHEDULED'
10488 ,p_start_date => l_get_sch_dates_cur.scheduled_start_date
10489 ,p_finish_date => l_get_sch_dates_cur.scheduled_finish_date
10490 ,p_record_version_number=> l_proj_rec_ver_num
10491 ,x_return_status => x_return_status
10492 ,x_msg_count => x_msg_count
10493 ,x_msg_data => x_msg_data );
10494
10495 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10496 RAISE FND_API.G_EXC_ERROR;
10497 END IF;
10498 END IF;
10499 --bug 2843569
10500
10501 IF (l_baseline_flag = 'Y') THEN
10502 --baseline structure
10503 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
10504 p_commit => FND_API.G_FALSE,
10505 p_structure_version_id => l_structure_version_id,
10506 x_return_status => l_return_status,
10507 x_msg_count => l_msg_count,
10508 x_msg_data => l_msg_data);
10509
10510 --Check if there is any error.
10511 l_msg_count := FND_MSG_PUB.count_msg;
10512 IF l_msg_count > 0 THEN
10513 x_msg_count := l_msg_count;
10514 IF x_msg_count = 1 THEN
10515 x_msg_data := l_msg_data;
10516 END IF;
10517 RAISE FND_API.G_EXC_ERROR;
10518 END IF;
10519
10520 END IF;
10521 -- Bug 2758343 -- Added the following call to recalculate the weightings for existing tasks
10522 RECALC_FIN_TASK_WEIGHTS( p_structure_version_id => l_structure_version_id
10523 , p_project_id => p_project_id
10524 , x_msg_count => l_msg_count
10525 , x_msg_data => l_msg_data
10526 , x_return_status => l_return_status);
10527
10528 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10529 raise FND_API.G_EXC_UNEXPECTED_ERROR;
10530 END IF;
10531
10532 --end sharing on
10533 ELSIF (p_sharing_enabled_flag = 'Y' AND
10534 PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id) = 'N') THEN
10535 PA_UTILS.ADD_MESSAGE('PA','PA_PS_WP_NOT_EN_SHR_ERR');
10536 x_msg_data := 'PA_PS_WP_NOT_EN_SHR_ERR';
10537 RAISE FND_API.G_EXC_ERROR;
10538 ELSIF (p_sharing_enabled_flag = 'N') THEN
10539 --Validation
10540 PA_PROJECT_STRUCTURE_UTILS.check_sharing_off_ok(p_project_id,
10541 l_ret_stat,
10542 l_err_msg_code);
10543 IF (l_ret_stat = 'N') THEN
10544 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10545 x_msg_data := l_err_msg_code;
10546 RAISE FND_API.G_EXC_ERROR;
10547 END IF;
10548 --sharing off
10549 --Select version to be kept
10550 OPEN sel_latest_pub_ver(l_structure_id);
10551 FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
10552 IF sel_latest_pub_ver%NOTFOUND THEN
10553 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
10554 END IF;
10555 CLOSE sel_latest_pub_ver;
10556
10557 --Delete all other structure versions
10558 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
10559 LOOP
10560 FETCH sel_other_structure_ver into l_del_struc_ver_id,
10561 l_struc_ver_rvn;
10562 EXIT WHEN sel_other_structure_ver%NOTFOUND;
10563 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10564 p_project_id,
10565 l_del_struc_ver_id,
10566 l_return_status,
10567 l_err_msg_code);
10568 IF (l_return_status <> 'S') THEN
10569 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10570 x_msg_data := l_err_msg_code;
10571 RAISE FND_API.G_EXC_ERROR;
10572 END IF;
10573
10574 --get top tasks
10575 OPEN get_top_tasks(l_del_struc_ver_id);
10576 LOOP
10577 FETCH get_top_tasks into l_task_ver_id;
10578 EXIT WHEN get_top_tasks%NOTFOUND;
10579
10580 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10581 p_project_id => p_project_id
10582 ,p_task_version_id => l_task_ver_id
10583 ,p_parent_structure_ver_id => l_del_struc_ver_id
10584 ,x_return_status => l_return_status
10585 ,x_error_message_code => l_err_msg_code );
10586
10587 IF (l_return_status <> 'S') THEN
10588 x_return_status := l_return_status;
10589 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10590 l_msg_data := l_err_msg_code;
10591 CLOSE get_top_tasks;
10592 RAISE FND_API.G_EXC_ERROR;
10593 END IF;
10594 END LOOP;
10595 CLOSE get_top_tasks;
10596
10597 -- PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10598 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10599 p_structure_version_id => l_del_struc_ver_id
10600 ,p_record_version_number => l_struc_ver_rvn
10601 ,x_return_status => l_return_status
10602 ,x_msg_count => l_msg_count
10603 ,x_msg_data => l_msg_data
10604 );
10605 ----end changes
10606
10607 --Check if there is any error.
10608 l_msg_count := FND_MSG_PUB.count_msg;
10609 IF l_msg_count > 0 THEN
10610 x_msg_count := l_msg_count;
10611 IF x_msg_count = 1 THEN
10612 x_msg_data := l_msg_data;
10613 END IF;
10614 CLOSE sel_other_structure_ver;
10615 RAISE FND_API.G_EXC_ERROR;
10616 END IF;
10617
10618 END LOOP;
10619 CLOSE sel_other_structure_ver;
10620
10621 --NULL all baseline dates
10622 UPDATE pa_proj_elements
10623 SET baseline_start_date = NULL,
10624 baseline_finish_date = NULL,
10625 record_version_number = record_version_number+1
10626 WHERE project_id = p_project_id;
10627
10628 --Delete all schedule rows
10629 DELETE FROM pa_proj_elem_ver_schedule
10630 WHERE project_id = p_project_id;
10631
10632 --Delete wp attr row
10633 OPEN get_wp_attr_rvn;
10634 FETCH get_wp_attr_rvn into l_structure_id, l_wp_attr_rvn;
10635 CLOSE get_wp_attr_rvn;
10636
10637 PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
10638 p_validate_only => FND_API.G_FALSE
10639 ,p_project_id => p_project_id
10640 ,p_proj_element_id => l_structure_id
10641 ,p_record_version_number => l_wp_attr_rvn
10642 ,x_return_status => l_return_status
10643 ,x_msg_count => l_msg_count
10644 ,x_msg_data => l_msg_data
10645 );
10646
10647 --Check if there is any error.
10648 l_msg_count := FND_MSG_PUB.count_msg;
10649 IF l_msg_count > 0 THEN
10650 x_msg_count := l_msg_count;
10651 IF x_msg_count = 1 THEN
10652 x_msg_data := l_msg_data;
10653 END IF;
10654 RAISE FND_API.G_EXC_ERROR;
10655 END IF;
10656
10657 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
10658 p_validate_only => FND_API.G_FALSE
10659 ,p_project_id => p_project_id
10660 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
10661 ,P_OBJECT_ID => l_structure_id
10662 ,x_return_status => l_return_status
10663 ,x_msg_count => x_msg_count
10664 ,x_msg_data => x_msg_data
10665 );
10666
10667 --Check if there is any error.
10668 l_msg_count := FND_MSG_PUB.count_msg;
10669 IF l_msg_count > 0 THEN
10670 x_msg_count := l_msg_count;
10671 IF x_msg_count = 1 THEN
10672 x_msg_data := l_msg_data;
10673 END IF;
10674 RAISE FND_API.G_EXC_ERROR;
10675 END IF;
10676
10677 --Delete structure type
10678 OPEN sel_wp_struct_type(l_structure_id);
10679 FETCH sel_wp_struct_type into l_rowid;
10680 PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
10681 CLOSE sel_wp_struct_type;
10682
10683 --Update structure status to published if project;
10684 -- working if template
10685 OPEN get_template_flag;
10686 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10687 CLOSE get_template_flag;
10688
10689 OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
10690 FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
10691 l_struc_ver_attr_rvn;
10692 CLOSE sel_struc_ver_attr_rvn;
10693
10694 IF (l_template_flag = 'Y') THEN
10695 l_status_code := 'STRUCTURE_WORKING';
10696 l_latest_eff_pub_flag := 'N';
10697 l_effective_date := NULL;
10698 ELSE
10699 l_status_code := 'STRUCTURE_PUBLISHED';
10700 l_latest_eff_pub_flag := 'Y';
10701 l_effective_date := sysdate;
10702 END IF;
10703
10704 --Change status
10705 UPDATE pa_proj_elem_ver_structure
10706 set status_code = l_status_code,
10707 current_flag = 'N',
10708 current_baseline_date = NULL,
10709 current_baseline_person_id = NULL,
10710 latest_eff_published_flag = l_latest_eff_pub_flag,
10711 effective_date = l_effective_date,
10712 record_version_number = record_version_number + 1
10713 where pev_structure_id = l_pev_structure_id;
10714
10715 --Create structure
10716 --get project name
10717 OPEN get_project_info;
10718 FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date;
10719 CLOSE get_project_info;
10720
10721 IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
10722 l_proj_completion_date := l_proj_start_date;
10723 ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
10724 l_proj_completion_date := sysdate;
10725 l_proj_start_date := sysdate;
10726 END IF;
10727
10728 --get suffix
10729 select meaning
10730 into l_suffix
10731 from pa_lookups
10732 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
10733 and lookup_code = 'WORKPLAN';
10734
10735 l_name := substrb(l_name||l_append||l_suffix, 1, 240);
10736 --Create new structure
10737 PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE
10738 ( p_validate_only => FND_API.G_FALSE
10739 ,p_project_id => p_project_id
10740 ,p_structure_number => l_name
10741 ,p_structure_name => l_name
10742 ,p_calling_flag => 'WORKPLAN'
10743 ,p_approval_reqd_flag => l_proj_workplan_attr_rec.WP_APPROVAL_REQD_FLAG
10744 ,p_auto_publish_flag => l_proj_workplan_attr_rec.WP_AUTO_PUBLISH_FLAG
10745 ,p_approver_source_id => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_ID
10746 ,p_approver_source_type => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_TYPE
10747 ,p_default_display_lvl => l_proj_workplan_attr_rec.WP_DEFAULT_DISPLAY_LVL
10748 ,p_enable_wp_version_flag => l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG
10749 ,p_auto_pub_upon_creation_flag => l_proj_workplan_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
10750 ,p_auto_sync_txn_date_flag => l_proj_workplan_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
10751 ,p_txn_date_sync_buf_days => l_proj_workplan_attr_rec.TXN_DATE_SYNC_BUF_DAYS
10752 --LDENG
10753 ,p_lifecycle_version_id => l_proj_workplan_attr_rec.LIFECYCLE_VERSION_ID
10754 ,p_current_phase_version_id => l_proj_workplan_attr_rec.CURRENT_PHASE_VERSION_ID
10755 --END LDENG
10756 ,p_progress_cycle_id => l_proj_progress_attr_rec.PROGRESS_CYCLE_ID
10757 ,p_wq_enable_flag => l_proj_progress_attr_rec.wq_enable_flag
10758 ,p_remain_effort_enable_flag => l_proj_progress_attr_rec.remain_effort_enable_flag
10759 ,p_percent_comp_enable_flag => l_proj_progress_attr_rec.percent_comp_enable_flag
10760 ,p_next_progress_update_date => l_proj_progress_attr_rec.next_progress_update_date
10761 ,p_action_set_id => NULL
10762 ,p_task_weight_basis_code => l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE
10763 ,x_structure_id => l_structure_id
10764 ,x_return_status => l_return_status
10765 ,x_msg_count => l_msg_count
10766 ,x_msg_data => l_msg_data );
10767
10768 --Check if there is any error.
10769 l_msg_count := FND_MSG_PUB.count_msg;
10770 IF l_msg_count > 0 THEN
10771 x_msg_count := l_msg_count;
10772 IF x_msg_count = 1 THEN
10773 x_msg_data := l_msg_data;
10774 END IF;
10775 RAISE FND_API.G_EXC_ERROR;
10776 END IF;
10777
10778 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
10779 ( p_validate_only => FND_API.G_FALSE
10780 ,p_structure_id => l_structure_id
10781 ,x_structure_version_id => l_structure_version_id
10782 ,x_return_status => l_return_status
10783 ,x_msg_count => l_msg_count
10784 ,x_msg_data => l_msg_data );
10785
10786 --Check if there is any error.
10787 l_msg_count := FND_MSG_PUB.count_msg;
10788 IF l_msg_count > 0 THEN
10789 x_msg_count := l_msg_count;
10790 IF x_msg_count = 1 THEN
10791 x_msg_data := l_msg_data;
10792 END IF;
10793 RAISE FND_API.G_EXC_ERROR;
10794 END IF;
10795
10796 PA_TASK_PUB1.Create_Schedule_Version(
10797 p_element_version_id => l_structure_version_id
10798 ,p_scheduled_start_date => l_proj_start_date
10799 ,p_scheduled_end_date => l_proj_completion_date
10800 ,x_pev_schedule_id => l_pev_schedule_id
10801 ,x_return_status => l_return_status
10802 ,x_msg_count => l_msg_count
10803 ,x_msg_data => l_msg_data
10804 );
10805
10806 --Check if there is any error.
10807 l_msg_count := FND_MSG_PUB.count_msg;
10808 IF l_msg_count > 0 THEN
10809 x_msg_count := l_msg_count;
10810 IF x_msg_count = 1 THEN
10811 x_msg_data := l_msg_data;
10812 END IF;
10813 RAISE FND_API.G_EXC_ERROR;
10814 END IF;
10815
10816 --Check versioning flag, project or template
10817 OPEN get_template_flag;
10818 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10819 CLOSE get_template_flag;
10820
10821 IF (l_template_flag = 'Y') OR
10822 (l_template_flag = 'N' AND l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y') THEN
10823 l_status_code := 'STRUCTURE_WORKING';
10824 l_baseline_flag := 'N';
10825 l_latest_eff_pub_flag := 'N';
10826 l_effective_date := NULL;
10827 ELSE
10828 l_status_code := 'STRUCTURE_PUBLISHED';
10829 l_baseline_flag := 'Y';
10830 l_latest_eff_pub_flag := 'Y';
10831 l_effective_date := sysdate;
10832 END IF;
10833
10834 IF (l_template_flag = 'Y') THEN
10835 --update project dates
10836 OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
10837 FETCH get_scheduled_dates into l_get_sch_dates_cur;
10838 CLOSE get_scheduled_dates;
10839
10840 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
10841 p_validate_only => FND_API.G_FALSE
10842 ,p_project_id => p_project_id
10843 ,p_date_type => 'SCHEDULED'
10844 ,p_start_date => l_get_sch_dates_cur.scheduled_start_date
10845 ,p_finish_date => l_get_sch_dates_cur.scheduled_finish_date
10846 ,p_record_version_number=> l_proj_rec_ver_num
10847 ,x_return_status => x_return_status
10848 ,x_msg_count => x_msg_count
10849 ,x_msg_data => x_msg_data );
10850
10851 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10852 RAISE FND_API.G_EXC_ERROR;
10853 END IF;
10854 ELSE
10855 IF (l_status_code = 'STRUCTURE_WORKING') THEN
10856 --clear previously set dates
10857 UPDATE PA_PROJECTS_ALL
10858 SET baseline_start_date = NULL,
10859 baseline_finish_date = NULL,
10860 baseline_duration = NULL,
10861 baseline_as_of_date = NULL,
10862 scheduled_start_date = NULL,
10863 scheduled_finish_date = NULL,
10864 scheduled_duration = NULL,
10865 scheduled_as_of_date = NULL
10866 WHERE Project_id = p_project_id;
10867 END IF;
10868 END IF;
10869
10870 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
10871 ( p_validate_only => FND_API.G_FALSE
10872 ,p_structure_version_id => l_structure_version_id
10873 ,p_structure_version_name => l_name
10874 ,p_structure_version_desc => NULL
10875 ,p_effective_date => l_effective_date
10876 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
10877 ,p_locked_status_code => 'UNLOCKED'
10878 ,p_struct_version_status_code => l_status_code
10879 ,p_baseline_current_flag => l_baseline_flag
10880 ,p_baseline_original_flag => 'N'
10881 ,x_pev_structure_id => l_pev_structure_id
10882 ,x_return_status => l_return_status
10883 ,x_msg_count => l_msg_count
10884 ,x_msg_data => l_msg_data );
10885
10886 --Check if there is any error.
10887 l_msg_count := FND_MSG_PUB.count_msg;
10888 IF l_msg_count > 0 THEN
10889 x_msg_count := l_msg_count;
10890 IF x_msg_count = 1 THEN
10891 x_msg_data := l_msg_data;
10892 END IF;
10893 RAISE FND_API.G_EXC_ERROR;
10894 END IF;
10895
10896 --end sharing off
10897 END IF;
10898 --END SHARING CODE
10899 END IF;
10900 */
10901
10902 x_return_status := FND_API.G_RET_STS_SUCCESS;
10903
10904 IF (p_debug_mode = 'Y') THEN
10905 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr end');
10906 END IF;
10907
10908 EXCEPTION
10909 WHEN FND_API.G_EXC_ERROR THEN
10910 IF (p_commit = FND_API.G_TRUE) THEN
10911 ROLLBACK to update_struc_setup_attr_pvt;
10912 END IF;
10913 x_msg_count := FND_MSG_PUB.count_msg;
10914 x_return_status := FND_API.G_RET_STS_ERROR;
10915 WHEN OTHERS THEN
10916 IF (p_commit = FND_API.G_TRUE) THEN
10917 ROLLBACK to update_struc_setup_attr_pvt;
10918 END IF;
10919 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10920 x_msg_count := FND_MSG_PUB.count_msg;
10921 --put message
10922 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
10923 p_procedure_name => 'update_structures_setup_attr',
10924 p_error_text => SUBSTRB(SQLERRM,1,240));
10925 RAISE;
10926 END update_structures_setup_old;
10927
10928 PROCEDURE update_workplan_versioning
10929 ( p_api_version IN NUMBER := 1.0
10930 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
10931 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
10932 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
10933 ,p_validation_level IN VARCHAR2 := 100
10934 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
10935 ,p_debug_mode IN VARCHAR2 := 'N'
10936 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10937 ,p_proj_element_id IN NUMBER
10938 ,p_enable_wp_version_flag IN VARCHAR2
10939 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10940 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10941 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10942 )
10943 IS
10944 l_return_status VARCHAR2(1);
10945 l_msg_count NUMBER;
10946 l_msg_data VARCHAR2(250);
10947 l_ret_stat VARCHAR2(1);
10948 l_err_msg_code VARCHAR2(30);
10949 l_keep_structure_ver_id NUMBER;
10950 l_template_flag VARCHAR2(1);
10951 l_pev_structure_id NUMBER;
10952 l_struc_ver_attr_rvn NUMBER;
10953 l_del_struc_ver_id NUMBER;
10954 l_struc_ver_rvn NUMBER;
10955
10956 --bug 3125813
10957 l_project_id NUMBER;
10958 l_struc_ver_id NUMBER;
10959 --end bug 3125813
10960
10961 cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
10962 select a.element_version_id
10963 from pa_proj_elem_ver_structure a,
10964 pa_proj_elements b
10965 where b.proj_element_id = c_structure_id
10966 and b.project_id = a.project_id
10967 and b.proj_element_id = a.proj_element_id
10968 and a.status_code = 'STRUCTURE_PUBLISHED'
10969 and a.LATEST_EFF_PUBLISHED_FLAG = 'Y';
10970
10971 CURSOR get_template_flag IS
10972 select a.template_flag
10973 from pa_projects_all a,
10974 pa_proj_elements b
10975 where a.project_id = b.project_id
10976 and b.proj_element_id = p_proj_element_id;
10977
10978 cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
10979 select a.PEV_STRUCTURE_ID, a.record_version_number
10980 from pa_proj_elem_ver_structure a,
10981 pa_proj_element_versions b
10982 where b.project_id = a.project_id
10983 and b.element_version_id = c_struc_ver_id
10984 and a.element_version_id = b.element_version_id;
10985
10986 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
10987 select b.element_version_id, b.record_version_number
10988 from pa_proj_element_versions a,
10989 pa_proj_element_versions b
10990 where a.element_version_id = c_keep_struc_ver_id
10991 and a.project_id = b.project_id
10992 and a.proj_element_id = b.proj_element_id
10993 and b.element_version_id <> c_keep_struc_ver_id
10994 and b.object_type = 'PA_STRUCTURES';
10995
10996 --bug 3125813
10997 cursor sel_one_struc_ver(c_structure_id NUMBER) IS
10998 select b.project_id, b.element_version_id
10999 from pa_proj_elements a,
11000 pa_proj_element_versions b
11001 where a.proj_element_id = c_structure_id
11002 and a.project_id = b.project_id
11003 and a.proj_element_id = b.proj_element_id;
11004 --end bug 3125813
11005
11006 --bug 4263266
11007 CURSOR cur_chk_tasks(c_project_id NUMBER, c_structure_version_id NUMBER)
11008 IS
11009 SELECT 'x' from pa_proj_element_versions
11010 WHERE project_id = c_project_id
11011 AND parent_structure_version_id = c_structure_version_id
11012 AND object_type = 'PA_TASKS'
11013 ;
11014 l_dummy VARCHAR2(1);
11015 --end bug 4263266
11016
11017 --BUG 4330926
11018 l_curr_wp_ver_flag PA_PROJ_WORKPLAN_ATTR.WP_ENABLE_VERSION_FLAG%TYPE;
11019
11020 CURSOR get_curr_wp_flag (l_proj_element_id NUMBER, l_project_id NUMBER )IS
11021 SELECT WP_ENABLE_VERSION_FLAG
11022 FROM PA_PROJ_WORKPLAN_ATTR
11023 WHERE PROJ_ELEMENT_ID = l_proj_element_id
11024 AND PROJECT_ID = l_project_id;
11025
11026 --BUG 4330926
11027
11028 --bug 4546607
11029 CURSOR sub_projects ( c_project_id NUMBER, c_relationship_type VARCHAR2)
11030 IS
11031 SELECT *
11032 from pa_structures_links_v
11033 where parent_project_id= c_project_id
11034 and relationship_type = c_relationship_type
11035 ;
11036 --end bug 4546607
11037
11038 BEGIN
11039 IF (p_debug_mode = 'Y') THEN
11040 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_workplan_versioning');
11041 END IF;
11042
11043 IF (p_commit = FND_API.G_TRUE) THEN
11044 savepoint update_wp_versioning_pvt;
11045 END IF;
11046
11047 IF (p_debug_mode = 'Y') THEN
11048 pa_debug.debug('Performing validations');
11049 END IF;
11050
11051 IF (p_enable_wp_version_flag = 'Y') THEN
11052 --enable versioning
11053 PA_PROJECT_STRUCTURE_UTILS.check_versioning_on_ok(
11054 p_proj_element_id
11055 ,l_ret_stat
11056 ,l_err_msg_code);
11057 IF (l_ret_stat = 'N') THEN
11058 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
11059 x_msg_data := l_err_msg_code;
11060 RAISE FND_API.G_EXC_ERROR;
11061 END IF;
11062 --enable versioning
11063 --do not need to do anything
11064
11065 --bug 3125813
11066 --need to update weightings (if necessary) when enable versiong because
11067 --structure will become published.
11068 OPEN sel_one_struc_ver(p_proj_element_id);
11069 FETCH sel_one_struc_ver into l_project_id, l_struc_ver_id;
11070 CLOSE sel_one_struc_ver;
11071
11072 --bug 4546607
11073 --Delete all LW links without checking bcoz versioning is always allowed
11074 --for workplan.
11075 FOR sub_projects_rec in sub_projects(l_project_id, 'LW') LOOP
11076 IF PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published(sub_projects_rec.sub_project_id, sub_projects_rec.sub_structure_ver_id) = 'N'
11077 THEN
11078 PA_RELATIONSHIP_PUB.Delete_SubProject_Association(
11079 p_object_relationships_id => sub_projects_rec.object_relationship_id,
11080 p_record_version_number => sub_projects_rec.record_version_number,
11081 x_return_status => l_return_status,
11082 x_msg_count => l_msg_count,
11083 x_msg_data => l_msg_data
11084 );
11085 --Check if there is any error.
11086 l_msg_count := FND_MSG_PUB.count_msg;
11087 IF l_msg_count > 0 THEN
11088 x_msg_count := l_msg_count;
11089 IF x_msg_count = 1 THEN
11090 x_msg_data := l_msg_data;
11091 END IF;
11092 RAISE FND_API.G_EXC_ERROR;
11093 END IF;
11094 END IF;
11095 END LOOP;
11096 --end bug 4546607
11097
11098 --bug 4263266
11099 --call process wbs updates only if there is atleast one task.
11100 OPEN cur_chk_tasks(l_project_id,l_struc_ver_id);
11101 FETCH cur_chk_tasks INTO l_dummy;
11102 IF cur_chk_tasks%FOUND
11103 THEN
11104 --end bug 4263266
11105 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP(
11106 p_project_id => l_project_id,
11107 p_structure_version_id => l_struc_ver_id,
11108 x_return_status => l_return_status,
11109 x_msg_count => l_msg_count,
11110 x_msg_data => l_msg_data
11111 );
11112
11113 --Check if there is any error.
11114 l_msg_count := FND_MSG_PUB.count_msg;
11115 IF l_msg_count > 0 THEN
11116 x_msg_count := l_msg_count;
11117 IF x_msg_count = 1 THEN
11118 x_msg_data := l_msg_data;
11119 END IF;
11120 -- CLOSE sel_other_structure_ver; --Bug 3793128
11121 RAISE FND_API.G_EXC_ERROR;
11122 END IF;
11123 --end bug 3125813
11124 --bug 4263266
11125 END IF; --if cur_chk_tasks%FOUND
11126 CLOSE cur_chk_tasks;
11127 --end bug 4263266
11128
11129 --Added by rtarway for BUG 4330926
11130 OPEN get_template_flag;
11131 FETCH get_template_flag into l_template_flag;
11132 CLOSE get_template_flag;
11133
11134 OPEN get_curr_wp_flag(p_proj_element_id ,l_project_id);
11135 FETCH get_curr_wp_flag into l_curr_wp_ver_flag;
11136 CLOSE get_curr_wp_flag;
11137
11138 IF ( l_curr_wp_ver_flag ='N' AND l_template_flag = 'N' ) THEN
11139 UPDATE pa_proj_elem_ver_structure
11140 SET current_working_flag = 'N'
11141 WHERE element_version_id = l_struc_ver_id
11142 and project_id = l_project_id;
11143 END IF;
11144 --End Added by rtarway for BUG 4330926
11145
11146 --end enable versioning
11147 ELSIF (p_enable_wp_version_flag = 'N') THEN
11148 --disable versioning
11149 PA_PROJECT_STRUCTURE_UTILS.check_versioning_off_ok(
11150 p_proj_element_id
11151 ,l_ret_stat
11152 ,l_err_msg_code);
11153 IF (l_ret_stat = 'N') THEN
11154 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
11155 x_msg_data := l_err_msg_code;
11156 RAISE FND_API.G_EXC_ERROR;
11157 END IF;
11158 --disable versioning
11159 --Applies to project only
11160 OPEN get_template_flag;
11161 FETCH get_template_flag into l_template_flag;
11162 CLOSE get_template_flag;
11163
11164 IF (l_template_flag = 'N') THEN
11165 --Select version to be kept
11166 OPEN sel_latest_pub_ver(p_proj_element_id);
11167 FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
11168 IF sel_latest_pub_ver%NOTFOUND THEN
11169 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(p_proj_element_id);
11170 END IF;
11171 CLOSE sel_latest_pub_ver;
11172
11173 --Delete all versions except the keep version
11174 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
11175 LOOP
11176 FETCH sel_other_structure_ver into l_del_struc_ver_id,
11177 l_struc_ver_rvn;
11178 EXIT WHEN sel_other_structure_ver%NOTFOUND;
11179 PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
11180 p_structure_version_id => l_del_struc_ver_id
11181 ,p_record_version_number => l_struc_ver_rvn
11182 ,p_calling_from => 'DEL_WP_STRUC_DISABLE_VERSION' ---Added for bug 6023347
11183 ,x_return_status => l_return_status
11184 ,x_msg_count => l_msg_count
11185 ,x_msg_data => l_msg_data
11186 );
11187
11188 --Check if there is any error.
11189 l_msg_count := FND_MSG_PUB.count_msg;
11190 IF l_msg_count > 0 THEN
11191 x_msg_count := l_msg_count;
11192 IF x_msg_count = 1 THEN
11193 x_msg_data := l_msg_data;
11194 END IF;
11195 CLOSE sel_other_structure_ver;
11196 RAISE FND_API.G_EXC_ERROR;
11197 END IF;
11198
11199 END LOOP;
11200 CLOSE sel_other_structure_ver;
11201
11202 --Change status
11203 OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
11204 FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
11205 l_struc_ver_attr_rvn;
11206 CLOSE sel_struc_ver_attr_rvn;
11207
11208 --set status to latest published and baselined
11209
11210 UPDATE pa_proj_elem_ver_structure
11211 set status_code = 'STRUCTURE_PUBLISHED',
11212 published_date = sysdate,
11213 current_flag = 'Y',
11214 current_baseline_date = sysdate,
11215 current_baseline_person_id = NULL,
11216 latest_eff_published_flag = 'Y',
11217 effective_date = sysdate,
11218 LOCK_STATUS_CODE = 'UNLOCKED',
11219 LOCKED_BY_PERSON_ID = NULL,
11220 LOCKED_DATE = NULL,
11221 record_version_number = record_version_number + 1
11222 where pev_structure_id = l_pev_structure_id;
11223
11224 --baseline structure
11225 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
11226 p_commit => FND_API.G_FALSE,
11227 p_structure_version_id => l_keep_structure_ver_id,
11228 x_return_status => l_return_status,
11229 x_msg_count => l_msg_count,
11230 x_msg_data => l_msg_data);
11231
11232 --Check if there is any error.
11233 l_msg_count := FND_MSG_PUB.count_msg;
11234 IF l_msg_count > 0 THEN
11235 x_msg_count := l_msg_count;
11236 IF x_msg_count = 1 THEN
11237 x_msg_data := l_msg_data;
11238 END IF;
11239 RAISE FND_API.G_EXC_ERROR;
11240 END IF;
11241
11242 END IF; --for project
11243
11244 --end disable versioning
11245 END IF;
11246
11247 x_return_status := FND_API.G_RET_STS_SUCCESS;
11248
11249 IF (p_debug_mode = 'Y') THEN
11250 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_workplan_versioning end');
11251 END IF;
11252
11253 EXCEPTION
11254 WHEN FND_API.G_EXC_ERROR THEN
11255 IF (p_commit = FND_API.G_TRUE) THEN
11256 ROLLBACK to update_wp_versioning_pvt;
11257 END IF;
11258 x_msg_count := FND_MSG_PUB.count_msg;
11259 x_return_status := FND_API.G_RET_STS_ERROR;
11260 WHEN OTHERS THEN
11261 IF (p_commit = FND_API.G_TRUE) THEN
11262 ROLLBACK to update_wp_versioning_pvt;
11263 END IF;
11264 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11265 x_msg_count := FND_MSG_PUB.count_msg;
11266 --put message
11267 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
11268 p_procedure_name => 'update_workplan_versioning',
11269 p_error_text => SUBSTRB(SQLERRM,1,240));
11270 RAISE;
11271 END update_workplan_versioning;
11272
11273
11274 PROCEDURE update_wp_calendar
11275 (
11276 p_api_version IN NUMBER := 1.0
11277 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
11278 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
11279 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
11280 ,p_validation_level IN VARCHAR2 := 100
11281 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
11282 ,p_debug_mode IN VARCHAR2 := 'N'
11283 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11284 ,p_project_id IN NUMBER
11285 ,p_calendar_id IN NUMBER
11286 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11287 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11288 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11289 )
11290 IS
11291 l_opt VARCHAR2(1);
11292
11293 cursor get_wp_versions IS
11294 select ppevs.element_version_id
11295 from pa_proj_elem_ver_structure ppevs,
11296 pa_proj_elements ppe,
11297 pa_proj_structure_types ppst,
11298 pa_structure_types pst
11299 where ppevs.status_code <> 'STRUCTURE_PUBLISHED'
11300 and ppevs.project_id = ppe.project_id
11301 and ppevs.proj_element_id = ppe.proj_element_id
11302 and ppe.object_type = 'PA_STRUCTURES'
11303 and ppe.proj_element_id = ppst.proj_element_id
11304 and ppst.structure_type_id = pst.structure_type_id
11305 and pst.structure_type_class_code = 'WORKPLAN'
11306 and ppe.project_id = p_project_id
11307 and '1' = l_opt
11308 union all
11309 select ppevs.element_version_id
11310 from pa_proj_elem_ver_structure ppevs,
11311 pa_proj_elements ppe,
11312 pa_proj_structure_types ppst,
11313 pa_structure_types pst
11314 where ppevs.status_code = 'STRUCTURE_PUBLISHED'
11315 and ppevs.project_id = ppe.project_id
11316 and ppevs.proj_element_id = ppe.proj_element_id
11317 and ppe.object_type = 'PA_STRUCTURES'
11318 and ppe.proj_element_id = ppst.proj_element_id
11319 and ppst.structure_type_id = pst.structure_type_id
11320 and pst.structure_type_class_code = 'WORKPLAN'
11321 and ppe.project_id = p_project_id
11322 and '2' = l_opt;
11323
11324 l_structure_version_id NUMBER;
11325 l_return_status VARCHAR2(1);
11326 l_msg_count NUMBER;
11327 l_msg_data VARCHAR2(250);
11328 l_sch_hours NUMBER;
11329 l_bsl_hours NUMBER;
11330 l_act_hours NUMBER;
11331 l_days NUMBER;
11332 l_start_date DATE;
11333 l_finish_date DATE;
11334 l_template_flag VARCHAR2(1);
11335
11336 --Bug 3010538.
11337 l_weight_basis pa_proj_progress_attr.task_weight_basis_code%TYPE;
11338
11339 CURSOR c1 IS
11340 select template_flag
11341 from pa_projects_all where project_id = p_project_id;
11342
11343 CURSOR c2 IS
11344 select SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE
11345 from pa_projects_all where project_id = p_project_id;
11346
11347 CURSOR c3 IS
11348 select ACTUAL_START_DATE, ACTUAL_FINISH_DATE
11349 from pa_projects_all where project_id = p_project_id;
11350
11351 CURSOR c4 IS
11352 select BASELINE_START_DATE, BASELINE_FINISH_DATE
11353 from pa_projects_all where project_id = p_project_id;
11354 --
11355 l_sch_dur NUMBER; -- Bug 3657808
11356 l_act_dur NUMBER; -- Bug 3657808
11357 l_bsl_dur NUMBER; -- Bug 3657808
11358 --
11359 BEGIN
11360 IF (p_debug_mode = 'Y') THEN
11361 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_WP_CALENDAR BEGIN');
11362 END IF;
11363
11364 IF (p_commit = FND_API.G_TRUE) THEN
11365 savepoint update_wp_calendar;
11366 END IF;
11367
11368 OPEN c1;
11369 FETCH c1 into l_template_flag;
11370 CLOSE c1;
11371
11372 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id) = 'N') THEN
11373 -- Bug 3010538. Task Weighting enhancement.
11374 -- For a template even if the versioning flag is enabled, we will have only a
11375 -- working version and not a published version. Hence setting the option to 1 always
11376 -- in case of a template so that the working version is queried.
11377 IF nvl(l_template_flag,'N') = 'Y' THEN
11378 l_opt := '1';
11379 ELSE
11380 l_opt := '2';
11381 END IF;
11382 --need to modify
11383 --SCHEDULED_DURATION (template and project)
11384 --BASELINE_DURATION (project only)
11385 --ACTUAL_DURATION (project only)
11386 OPEN c2;
11387 FETCH c2 into l_start_date, l_finish_date;
11388 CLOSE c2;
11389
11390 IF (l_start_date IS NOT NULL AND
11391 l_finish_date IS NOT NULL) THEN
11392 -- Bug 3657808 Remove duration calculation using calendar
11393 --Storing in days
11394 l_sch_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11395 /*PA_DURATION_UTILS.get_duration(
11396 p_calendar_id => p_calendar_id
11397 ,p_start_date => l_start_date
11398 ,p_end_date => l_finish_date
11399 ,x_duration_days => l_days
11400 ,x_duration_hours => l_sch_hours
11401 ,x_return_status => l_return_status
11402 ,x_msg_count => l_msg_count
11403 ,x_msg_data => l_msg_data
11404 );
11405
11406 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11407 x_msg_count := FND_MSG_PUB.count_msg;
11408 if x_msg_count = 1 then
11409 x_msg_data := l_msg_data;
11410 end if;
11411 raise FND_API.G_EXC_ERROR;
11412 END IF;*/
11413
11414 END IF;
11415
11416 IF (l_template_flag = 'N') THEN
11417 OPEN c3;
11418 FETCH c3 into l_start_date, l_finish_date;
11419 CLOSE c3;
11420
11421 IF (l_start_date IS NOT NULL AND
11422 l_finish_date IS NOT NULL) THEN
11423 -- Bug 3657808 Remove duration calculation using calendar
11424 --Storing in days
11425 l_act_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11426 /*PA_DURATION_UTILS.get_duration(
11427 p_calendar_id => p_calendar_id
11428 ,p_start_date => l_start_date
11429 ,p_end_date => l_finish_date
11430 ,x_duration_days => l_days
11431 ,x_duration_hours => l_act_hours
11432 ,x_return_status => l_return_status
11433 ,x_msg_count => l_msg_count
11434 ,x_msg_data => l_msg_data
11435 );
11436
11437 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11438 x_msg_count := FND_MSG_PUB.count_msg;
11439 if x_msg_count = 1 then
11440 x_msg_data := l_msg_data;
11441 end if;
11442 raise FND_API.G_EXC_ERROR;
11443 END IF;*/
11444 END IF;
11445
11446
11447 OPEN c4;
11448 FETCH c4 into l_start_date, l_finish_date;
11449 CLOSE c4;
11450
11451 IF (l_start_date IS NOT NULL AND
11452 l_finish_date IS NOT NULL) THEN
11453 -- Bug 3657808 Remove duration calculation using calendar
11454 --Storing in days
11455 l_bsl_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11456 /*PA_DURATION_UTILS.get_duration(
11457 p_calendar_id => p_calendar_id
11458 ,p_start_date => l_start_date
11459 ,p_end_date => l_finish_date
11460 ,x_duration_days => l_days
11461 ,x_duration_hours => l_bsl_hours
11462 ,x_return_status => l_return_status
11463 ,x_msg_count => l_msg_count
11464 ,x_msg_data => l_msg_data
11465 );
11466
11467 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11468 x_msg_count := FND_MSG_PUB.count_msg;
11469 if x_msg_count = 1 then
11470 x_msg_data := l_msg_data;
11471 end if;
11472 raise FND_API.G_EXC_ERROR;
11473 END IF;*/
11474 END IF;
11475
11476 --hsiu: removed record version number for Forms changes
11477 update pa_projects_all
11478 /*set SCHEDULED_DURATION = l_sch_hours,
11479 BASELINE_DURATION = l_bsl_hours,
11480 ACTUAL_DURATION = l_act_hours*/
11481 set SCHEDULED_DURATION = l_sch_dur,
11482 BASELINE_DURATION = l_bsl_dur,
11483 ACTUAL_DURATION = l_act_dur
11484 where project_id = p_project_id;
11485
11486 END IF;
11487 ELSE
11488 l_opt := '1';
11489
11490 IF (l_template_flag = 'Y') THEN
11491 OPEN c2;
11492 FETCH c2 into l_start_date, l_finish_date;
11493 CLOSE c2;
11494
11495 IF (l_start_date IS NOT NULL AND
11496 l_finish_date IS NOT NULL) THEN
11497 -- Bug 3657808 Remove duration calculation using calendar
11498 --Storing in days
11499 l_sch_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11500 /*PA_DURATION_UTILS.get_duration(
11501 p_calendar_id => p_calendar_id
11502 ,p_start_date => l_start_date
11503 ,p_end_date => l_finish_date
11504 ,x_duration_days => l_days
11505 ,x_duration_hours => l_sch_hours
11506 ,x_return_status => l_return_status
11507 ,x_msg_count => l_msg_count
11508 ,x_msg_data => l_msg_data
11509 );
11510
11511 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11512 x_msg_count := FND_MSG_PUB.count_msg;
11513 if x_msg_count = 1 then
11514 x_msg_data := l_msg_data;
11515 end if;
11516 raise FND_API.G_EXC_ERROR;
11517 END IF;*/
11518 END IF;
11519
11520 --hsiu: removed record version number for Forms changes
11521 update pa_projects_all
11522 -- set SCHEDULED_DURATION = l_sch_hours
11523 set SCHEDULED_DURATION = l_sch_dur
11524 where project_id = p_project_id;
11525
11526 END IF;
11527 END IF;
11528
11529 -- Bug 3010538. Task Weighting enhancement.
11530 -- Obtain the task weighting basis for the project.
11531 l_weight_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
11532
11533 --get all working versions
11534 OPEN get_wp_versions;
11535 LOOP
11536 FETCH get_wp_versions into l_structure_version_id;
11537 EXIT WHEN get_wp_versions%NOTFOUND;
11538
11539 -- Bug 3010538. Task Weighting enhancement.
11540 -- The weightage needs to be recalculated for the structure version(s), if the task
11541 -- weighting basis is DURATION. Recalculation has to be done for the only version(that
11542 -- is published) if versioning is disabled and for all the non published versions when
11543 -- versioning is enabled in case of a project and for the working version in case of a
11544 -- template.
11545 IF l_weight_basis = 'DURATION' THEN
11546 -- Always call this API as the cursor would have taken care to select the appropriate
11547 -- structure version for processing.
11548 pa_proj_task_struc_pub.set_update_wbs_flag(
11549 p_project_id => p_project_id
11550 ,p_structure_version_id => l_structure_version_id
11551 ,x_return_status => l_return_status
11552 ,x_msg_count => l_msg_count
11553 ,x_msg_data => l_msg_data
11554 );
11555
11556 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11557 x_msg_count := FND_MSG_PUB.count_msg;
11558 if x_msg_count = 1 then
11559 x_msg_data := l_msg_data;
11560 end if;
11561 raise FND_API.G_EXC_ERROR;
11562 END IF;
11563 END IF;
11564
11565 PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION(
11566 p_structure_version_id => l_structure_version_id
11567 ,p_calendar_id => p_calendar_id
11568 ,x_return_status => l_return_status
11569 ,x_msg_count => l_msg_count
11570 ,x_msg_data => l_msg_data
11571 );
11572
11573 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11574 x_msg_count := FND_MSG_PUB.count_msg;
11575 if x_msg_count = 1 then
11576 x_msg_data := l_msg_data;
11577 end if;
11578 raise FND_API.G_EXC_ERROR;
11579 END IF;
11580
11581 --update duration for all working structure versions
11582 END LOOP;
11583 CLOSE get_wp_versions;
11584
11585 x_return_status := FND_API.G_RET_STS_SUCCESS;
11586
11587 IF (p_debug_mode = 'Y') THEN
11588 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_WP_CALENDAR end');
11589 END IF;
11590
11591 EXCEPTION
11592 WHEN FND_API.G_EXC_ERROR THEN
11593 IF (p_commit = FND_API.G_TRUE) THEN
11594 ROLLBACK to update_wp_calendar;
11595 END IF;
11596 x_msg_count := FND_MSG_PUB.count_msg;
11597 x_return_status := FND_API.G_RET_STS_ERROR;
11598 WHEN OTHERS THEN
11599 IF (p_commit = FND_API.G_TRUE) THEN
11600 ROLLBACK to update_wp_calendar;
11601 END IF;
11602 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11603 x_msg_count := FND_MSG_PUB.count_msg;
11604 --put message
11605 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
11606 p_procedure_name => 'Update_wp_calendar',
11607 p_error_text => SUBSTRB(SQLERRM,1,240));
11608 RAISE;
11609 END update_wp_calendar;
11610
11611 PROCEDURE update_all_wp_calendar
11612 (
11613 p_api_version IN NUMBER := 1.0
11614 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
11615 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
11616 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
11617 ,p_validation_level IN VARCHAR2 := 100
11618 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
11619 ,p_debug_mode IN VARCHAR2 := 'N'
11620 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11621 ,p_calendar_id IN NUMBER
11622 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11623 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11624 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11625 )
11626 is
11627 Cursor c_calendar_projects
11628 IS
11629 Select project_id
11630 from pa_projects_all
11631 where calendar_id = p_calendar_id;
11632 BEGIN
11633 IF (p_debug_mode = 'Y') THEN
11634 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_ALL_WP_CALENDAR BEGIN');
11635 END IF;
11636
11637 IF (p_commit = FND_API.G_TRUE) THEN
11638 savepoint update_all_wp_calendar;
11639 END IF;
11640
11641 FOR c_rec IN c_calendar_projects
11642 LOOP
11643 PA_PROJECT_STRUCTURE_PVT1.update_wp_calendar
11644 (
11645 p_api_version => p_api_version
11646 ,p_init_msg_list => p_init_msg_list
11647 ,p_commit => p_commit
11648 ,p_validate_only => p_validate_only
11649 ,p_validation_level => p_validation_level
11650 ,p_calling_module => p_calling_module
11651 ,p_debug_mode => p_debug_mode
11652 ,p_max_msg_count => p_max_msg_count
11653 ,p_project_id => c_rec.project_id
11654 ,p_calendar_id => p_calendar_id
11655 ,x_return_status => x_return_status
11656 ,x_msg_count => x_msg_count
11657 ,x_msg_data => x_msg_data
11658 );
11659 END LOOP;
11660 x_return_status := FND_API.G_RET_STS_SUCCESS;
11661
11662 IF (p_debug_mode = 'Y') THEN
11663 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_ALL_WP_CALENDAR END');
11664 END IF;
11665
11666 EXCEPTION
11667 WHEN OTHERS THEN
11668 IF (p_commit = FND_API.G_TRUE) THEN
11669 ROLLBACK to update_all_wp_calendar;
11670 END IF;
11671 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11672 x_msg_count := FND_MSG_PUB.count_msg;
11673 --put message
11674 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
11675 p_procedure_name => 'Update_all_wp_calendar',
11676 p_error_text => SUBSTRB(SQLERRM,1,240));
11677 RAISE;
11678 END UPDATE_ALL_WP_CALENDAR;
11679
11680
11681 PROCEDURE RECALC_STRUC_VER_DURATION(
11682 p_api_version IN NUMBER := 1.0
11683 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
11684 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
11685 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
11686 ,p_validation_level IN VARCHAR2 := 100
11687 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
11688 ,p_debug_mode IN VARCHAR2 := 'N'
11689 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11690 ,p_structure_version_id IN NUMBER
11691 ,p_calendar_id IN NUMBER
11692 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11693 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11694 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11695 )
11696 IS
11697 CURSOR get_dates IS
11698 select ppvsch.pev_schedule_id,
11699 ppvsch.scheduled_start_date, ppvsch.scheduled_finish_date,
11700 ppvsch.estimated_start_date, ppvsch.estimated_finish_date,
11701 ppvsch.actual_start_date, ppvsch.actual_finish_date
11702 from pa_proj_elem_ver_schedule ppvsch,
11703 pa_proj_element_versions ppv
11704 where ppv.parent_structure_version_id = p_structure_version_id
11705 and ppv.project_id = ppvsch.project_id
11706 and ppv.proj_element_id = ppvsch.proj_element_id
11707 and ppv.element_version_id = ppvsch.element_version_id;
11708
11709 l_pev_schedule_id NUMBER;
11710 l_days NUMBER;
11711 l_hours NUMBER;
11712 l_scheduled_start_date DATE;
11713 l_scheduled_finish_date DATE;
11714 l_estimated_start_date DATE;
11715 l_estimated_finish_date DATE;
11716 l_actual_start_date DATE;
11717 l_actual_finish_date DATE;
11718
11719 l_return_status VARCHAR2(1);
11720 l_msg_count NUMBER;
11721 l_msg_data VARCHAR2(250);
11722 l_act_days NUMBER; -- Bug 3657808
11723 l_sch_days NUMBER; -- Bug 3657808
11724 l_est_days NUMBER; -- Bug 3657808
11725 BEGIN
11726
11727 IF (p_debug_mode = 'Y') THEN
11728 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION BEGIN');
11729 END IF;
11730
11731 IF (p_commit = FND_API.G_TRUE) THEN
11732 savepoint RECALC_STRUC_VER_DURATION;
11733 END IF;
11734
11735 OPEN get_dates;
11736 LOOP
11737 FETCH get_dates INTO l_pev_schedule_id,
11738 l_scheduled_start_date,
11739 l_scheduled_finish_date,
11740 l_estimated_start_date,
11741 l_estimated_finish_date,
11742 l_actual_start_date,
11743 l_actual_finish_date;
11744 EXIT WHEN get_dates%NOTFOUND;
11745
11746 --Update calendar id
11747 UPDATE PA_PROJ_ELEM_VER_SCHEDULE
11748 SET calendar_id = p_calendar_id
11749 WHERE pev_schedule_id = l_pev_schedule_id;
11750
11751 --Update schedule dates
11752 IF (l_scheduled_start_date IS NOT NULL AND
11753 l_scheduled_finish_date IS NOT NULL) THEN
11754 -- Bug 3657808 Remove duration calculation using calendar
11755 --Storing in days
11756 l_sch_days:=trunc(l_scheduled_finish_date) - trunc(l_scheduled_start_date) + 1;
11757 /*PA_DURATION_UTILS.get_duration(
11758 p_calendar_id => p_calendar_id
11759 ,p_start_date => l_scheduled_start_date
11760 ,p_end_date => l_scheduled_finish_date
11761 ,x_duration_days => l_days
11762 ,x_duration_hours => l_hours
11763 ,x_return_status => l_return_status
11764 ,x_msg_count => l_msg_count
11765 ,x_msg_data => l_msg_data
11766 );
11767
11768 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11769 x_msg_count := FND_MSG_PUB.count_msg;
11770 if x_msg_count = 1 then
11771 x_msg_data := l_msg_data;
11772 end if;
11773 raise FND_API.G_EXC_ERROR;
11774 END IF;*/
11775
11776 UPDATE PA_PROJ_ELEM_VER_SCHEDULE
11777 --SET DURATION = l_hours
11778 SET DURATION = l_sch_days
11779 WHERE pev_schedule_id = l_pev_schedule_id;
11780 END IF;
11781
11782 --Update estimated dates
11783 IF (l_estimated_start_date IS NOT NULL AND
11784 l_estimated_finish_date IS NOT NULL) THEN
11785 -- Bug 3657808 Remove duration calculation using calendar
11786 --Storing in days
11787 /* Commented call to API for 4210634 - It was missed during code fix for bug 3657808 */
11788 l_est_days:=trunc(l_estimated_finish_date) - trunc(l_estimated_start_date) + 1;
11789 /* PA_DURATION_UTILS.get_duration(
11790 p_calendar_id => p_calendar_id
11791 ,p_start_date => l_estimated_start_date
11792 ,p_end_date => l_estimated_finish_date
11793 ,x_duration_days => l_days
11794 ,x_duration_hours => l_hours
11795 ,x_return_status => l_return_status
11796 ,x_msg_count => l_msg_count
11797 ,x_msg_data => l_msg_data
11798 );
11799
11800 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11801 x_msg_count := FND_MSG_PUB.count_msg;
11802 if x_msg_count = 1 then
11803 x_msg_data := l_msg_data;
11804 end if;
11805 raise FND_API.G_EXC_ERROR;
11806 END IF; */
11807
11808 UPDATE PA_PROJ_ELEM_VER_SCHEDULE
11809 --SET ESTIMATED_DURATION = l_hours
11810 SET ESTIMATED_DURATION = l_est_days
11811 WHERE pev_schedule_id = l_pev_schedule_id;
11812 END IF;
11813
11814 --Update actual dates
11815 IF (l_actual_start_date IS NOT NULL AND
11816 l_actual_finish_date IS NOT NULL) THEN
11817 -- Bug 3657808 Remove duration calculation using calendar
11818 --Storing in days
11819 l_act_days:=trunc(l_actual_finish_date) - trunc(l_actual_start_date) + 1;
11820 /*PA_DURATION_UTILS.get_duration(
11821 p_calendar_id => p_calendar_id
11822 ,p_start_date => l_actual_start_date
11823 ,p_end_date => l_actual_finish_date
11824 ,x_duration_days => l_days
11825 ,x_duration_hours => l_hours
11826 ,x_return_status => l_return_status
11827 ,x_msg_count => l_msg_count
11828 ,x_msg_data => l_msg_data
11829 );
11830
11831 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11832 x_msg_count := FND_MSG_PUB.count_msg;
11833 if x_msg_count = 1 then
11834 x_msg_data := l_msg_data;
11835 end if;
11836 raise FND_API.G_EXC_ERROR;
11837 END IF;*/
11838
11839 UPDATE PA_PROJ_ELEM_VER_SCHEDULE
11840 -- SET ACTUAL_DURATION = l_hours
11841 SET ACTUAL_DURATION = l_act_days
11842 WHERE pev_schedule_id = l_pev_schedule_id;
11843 END IF;
11844
11845 END LOOP;
11846 CLOSE get_dates;
11847
11848 IF (p_debug_mode = 'Y') THEN
11849 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION end');
11850 END IF;
11851
11852 EXCEPTION
11853 WHEN FND_API.G_EXC_ERROR THEN
11854 IF (p_commit = FND_API.G_TRUE) THEN
11855 ROLLBACK to RECALC_STRUC_VER_DURATION;
11856 END IF;
11857 x_msg_count := FND_MSG_PUB.count_msg;
11858 x_return_status := FND_API.G_RET_STS_ERROR;
11859 WHEN OTHERS THEN
11860 IF (p_commit = FND_API.G_TRUE) THEN
11861 ROLLBACK to RECALC_STRUC_VER_DURATION;
11862 END IF;
11863 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11864 x_msg_count := FND_MSG_PUB.count_msg;
11865 --put message
11866 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
11867 p_procedure_name => 'RECALC_STRUC_VER_DURATION',
11868 p_error_text => SUBSTRB(SQLERRM,1,240));
11869 RAISE;
11870 END RECALC_STRUC_VER_DURATION;
11871
11872
11873 procedure Delete_Struc_Ver_Wo_Val
11874 (
11875 p_api_version IN NUMBER := 1.0
11876 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
11877 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
11878 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
11879 ,p_validation_level IN VARCHAR2 := 100
11880 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
11881 ,p_debug_mode IN VARCHAR2 := 'N'
11882 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11883 ,p_structure_version_id IN NUMBER
11884 ,p_record_version_number IN NUMBER
11885 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11886 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11887 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11888 )
11889 IS
11890 l_api_name CONSTANT VARCHAR(30) := 'Delete_Struc_Ver_Wo_Val';
11891 l_api_version CONSTANT NUMBER := 1.0;
11892
11893 l_return_status VARCHAR2(1);
11894 l_msg_count NUMBER;
11895 l_msg_data VARCHAR2(250);
11896 l_data VARCHAR2(250);
11897 l_msg_index_out NUMBER;
11898
11899 l_dummy VARCHAR2(1);
11900 l_error_message_code VARCHAR2(250);
11901
11902 CURSOR get_struc_ver IS
11903 select pev.project_id, pe.proj_element_id, pe.record_version_number,
11904 pev.element_version_id, pev.record_version_number,
11905 pevs.pev_structure_id, pevs.record_version_number,
11906 pevsh.pev_schedule_id, pevsh.record_version_number,
11907 pevsh.rowid
11908 from pa_proj_elements pe,
11909 pa_proj_element_versions pev,
11910 pa_proj_elem_ver_structure pevs,
11911 pa_proj_elem_ver_schedule pevsh
11912 where pev.element_version_id = p_structure_version_id and
11913 pev.proj_element_id = pe.proj_element_id and
11914 pev.project_id = pevs.project_id and
11915 pev.element_version_id = pevs.element_version_id and
11916 pev.project_id = pevsh.project_id (+) and
11917 pev.element_version_id = pevsh.element_version_id (+);
11918
11919 CURSOR is_last_version(p_structure_id NUMBER) IS
11920 select 'N'
11921 from pa_proj_element_versions
11922 where proj_element_id = p_structure_id;
11923
11924 CURSOR get_top_tasks IS
11925 select v.element_version_id
11926 from pa_proj_element_versions v,
11927 pa_object_relationships r
11928 where v.element_version_id = r.object_id_to1
11929 and r.object_id_from1 = p_structure_version_id
11930 and r.object_type_from = 'PA_STRUCTURES';
11931
11932 cursor sel_wp_attr(c_proj_element_id NUMBER) IS
11933 select record_version_number
11934 from pa_proj_workplan_attr
11935 where proj_element_id = c_proj_element_id;
11936
11937 l_project_id PA_PROJ_ELEMENT_VERSIONS.PROJECT_ID%TYPE;
11938 l_proj_element_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
11939 l_pe_rvn PA_PROJ_ELEMENTS.RECORD_VERSION_NUMBER%TYPE;
11940 l_element_version_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
11941 l_pev_rvn PA_PROJ_ELEMENT_VERSIONS.RECORD_VERSION_NUMBER%TYPE;
11942 l_pev_structure_id PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
11943 l_pevs_rvn PA_PROJ_ELEM_VER_STRUCTURE.RECORD_VERSION_NUMBER%TYPE;
11944 l_pev_schedule_id PA_PROJ_ELEM_VER_SCHEDULE.PEV_SCHEDULE_ID%TYPE;
11945 l_pevsh_rvn PA_PROJ_ELEM_VER_SCHEDULE.RECORD_VERSION_NUMBER%TYPE;
11946 l_pevsh_rowid VARCHAR2(255);
11947
11948 l_task_version_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
11949 l_task_rvn PA_PROJ_ELEMENT_VERSIONS.RECORD_VERSION_NUMBER%TYPE;
11950 l_wp_attr_rvn PA_PROJ_WORKPLAN_ATTR.RECORD_VERSION_NUMBER%TYPE;
11951
11952 l_parent_struc_ver_id PA_PROJ_ELEMENT_VERSIONS.PARENT_STRUCTURE_VERSION_ID%TYPE;
11953
11954 BEGIN
11955 IF (p_debug_mode = 'Y') THEN
11956 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL begin');
11957 END IF;
11958
11959 IF (p_commit = FND_API.G_TRUE) THEN
11960 savepoint delete_struc_ver_wo_val;
11961 END IF;
11962
11963 IF (p_debug_mode = 'Y') THEN
11964 pa_debug.debug('get structure version_info');
11965 END IF;
11966
11967 --Delete logic
11968 --Get structure version information
11969 OPEN get_struc_ver;
11970 FETCH get_struc_ver INTO l_project_id,
11971 l_proj_element_id,
11972 l_pe_rvn,
11973 l_element_version_id,
11974 l_pev_rvn,
11975 l_pev_structure_id,
11976 l_pevs_rvn,
11977 l_pev_schedule_id,
11978 l_pevsh_rvn,
11979 l_pevsh_rowid;
11980 IF (get_struc_ver%NOTFOUND) THEN
11981 CLOSE get_struc_ver;
11982 RAISE NO_DATA_FOUND;
11983 END IF;
11984 CLOSE get_struc_ver;
11985
11986 --NO ERROR, call delete_task_ver_wo_val
11987 --select all top level tasks
11988 OPEN get_top_tasks;
11989 LOOP
11990 FETCH get_top_tasks into l_task_version_id;
11991 EXIT WHEN get_top_tasks%NOTFOUND;
11992 IF (p_debug_mode = 'Y') THEN
11993 pa_debug.debug('deleting task version '||to_char(l_task_version_id));
11994 END IF;
11995
11996 --Get record version number for task, as it will change everytime
11997 --a task is deleted.
11998 select record_version_number, parent_structure_version_id
11999 into l_task_rvn, l_parent_struc_ver_id
12000 from pa_proj_element_versions
12001 where element_version_id = l_task_version_id;
12002
12003
12004 PA_TASK_PVT1.DELETE_TASK_VER_WO_VAL(p_commit => 'N',
12005 p_debug_mode => p_debug_mode,
12006 p_calling_module => 'DEL_STRUCT',
12007 p_structure_version_id => l_parent_struc_ver_id,
12008 p_task_version_id => l_task_version_id,
12009 p_record_version_number => l_task_rvn,
12010 x_return_status => l_return_status,
12011 x_msg_count => l_msg_count,
12012 x_msg_data => l_msg_data);
12013
12014 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12015 x_msg_count := FND_MSG_PUB.count_msg;
12016 IF x_msg_count = 1 then
12017 pa_interface_utils_pub.get_messages
12018 (p_encoded => FND_API.G_TRUE,
12019 p_msg_index => 1,
12020 p_data => l_data,
12021 p_msg_index_out => l_msg_index_out);
12022 x_msg_data := l_data;
12023 END IF;
12024 CLOSE get_top_tasks;
12025 raise FND_API.G_EXC_ERROR;
12026 END IF;
12027
12028 END LOOP;
12029 CLOSE get_top_tasks;
12030
12031 IF (p_debug_mode = 'Y') THEN
12032 pa_debug.debug('done deleting tasks');
12033 END IF;
12034 --If all tasks are deleted, delete schedule if workplan
12035 --Check if this is workplan
12036 If ('Y' = PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN')) THEN
12037 --Structure type exists. Delete from schedule table
12038 IF (p_debug_mode = 'Y') THEN
12039 pa_debug.debug('WORKPLAN type');
12040 END IF;
12041 PA_PROJ_ELEMENT_SCH_PKG.Delete_Row(l_pevsh_rowid);
12042
12043 --bug 4172646
12044 --remove the code to call PA_FIN_PLAN_PVT.delete_wp_budget_versions as its also called from
12045 --PA_PROJECT_STRUCTURE_PVT1.delete_structure_versions API.
12046 --
12047
12048 END IF;
12049
12050 --check for errors.
12051 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12052 x_msg_count := FND_MSG_PUB.count_msg;
12053 IF x_msg_count = 1 then
12054 pa_interface_utils_pub.get_messages
12055 (p_encoded => FND_API.G_TRUE,
12056 p_msg_index => 1,
12057 -- p_msg_count => l_msg_count,
12058 -- p_msg_data => l_msg_data,
12059 p_data => l_data,
12060 p_msg_index_out => l_msg_index_out);
12061 x_msg_data := l_data;
12062 END IF;
12063 raise FND_API.G_EXC_ERROR;
12064 END IF;
12065
12066 IF (p_debug_mode = 'Y') THEN
12067 pa_debug.debug('del structure version attr');
12068 END IF;
12069 --Delete structure version attribute
12070 PA_PROJECT_STRUCTURE_PVT1.Delete_Structure_Version_Attr(
12071 p_commit => p_commit,
12072 p_debug_mode => p_debug_mode,
12073 p_pev_structure_id => l_pev_structure_id,
12074 p_record_version_number => l_pevs_rvn,
12075 x_return_status => l_return_status,
12076 x_msg_count => l_msg_count,
12077 x_msg_data => l_msg_data);
12078 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12079 x_msg_count := FND_MSG_PUB.count_msg;
12080 IF x_msg_count = 1 then
12081 pa_interface_utils_pub.get_messages
12082 (p_encoded => FND_API.G_TRUE,
12083 p_msg_index => 1,
12084 -- p_msg_count => l_msg_count,
12085 -- p_msg_data => l_msg_data,
12086 p_data => l_data,
12087 p_msg_index_out => l_msg_index_out);
12088 x_msg_data := l_data;
12089 END IF;
12090 raise FND_API.G_EXC_ERROR;
12091 END IF;
12092
12093
12094 IF (p_debug_mode = 'Y') THEN
12095 pa_debug.debug('del structure version');
12096 END IF;
12097
12098 --Delete structure version
12099 PA_PROJECT_STRUCTURE_PVT1.Delete_Structure_Version(
12100 p_commit => p_commit,
12101 p_debug_mode => p_debug_mode,
12102 p_structure_version_id => l_element_version_id,
12103 p_record_version_number => l_pev_rvn,
12104 x_return_status => l_return_status,
12105 x_msg_count => l_msg_count,
12106 x_msg_data => l_msg_data);
12107
12108 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12109 x_msg_count := FND_MSG_PUB.count_msg;
12110 IF x_msg_count = 1 then
12111 pa_interface_utils_pub.get_messages
12112 (p_encoded => FND_API.G_TRUE,
12113 p_msg_index => 1,
12114 -- p_msg_count => l_msg_count,
12115 -- p_msg_data => l_msg_data,
12116 p_data => l_data,
12117 p_msg_index_out => l_msg_index_out);
12118 x_msg_data := l_data;
12119 END IF;
12120 raise FND_API.G_EXC_ERROR;
12121 END IF;
12122
12123
12124 --Delete structure if this is the last version
12125 OPEN is_last_version(l_proj_element_id);
12126 FETCH is_last_version into l_dummy;
12127 IF is_last_version%NOTFOUND THEN
12128 --We are deleting the last version. Delete structure
12129 IF (p_debug_mode = 'Y') THEN
12130 pa_debug.debug('delete non-versioned structure');
12131 END IF;
12132
12133
12134 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'WORKPLAN') = 'Y') THEN
12135 --delete workplan attribute
12136 OPEN sel_wp_attr(l_proj_element_id);
12137 FETCH sel_wp_attr into l_wp_attr_rvn;
12138 CLOSE sel_wp_attr;
12139
12140 PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
12141 p_validate_only => FND_API.G_FALSE
12142 ,p_project_id => l_project_id
12143 ,p_proj_element_id => l_proj_element_id
12144 ,p_record_version_number => l_wp_attr_rvn
12145 ,x_return_status => l_return_status
12146 ,x_msg_count => l_msg_count
12147 ,x_msg_data => l_msg_data
12148 );
12149
12150 --Check error
12151 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12152 x_msg_count := FND_MSG_PUB.count_msg;
12153 IF x_msg_count = 1 then
12154 pa_interface_utils_pub.get_messages
12155 (p_encoded => FND_API.G_TRUE,
12156 p_msg_index => 1,
12157 p_data => l_data,
12158 p_msg_index_out => l_msg_index_out);
12159 x_msg_data := l_data;
12160 END IF;
12161 raise FND_API.G_EXC_ERROR;
12162 END IF;
12163
12164 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
12165 p_validate_only => FND_API.G_FALSE
12166 ,p_project_id => l_project_id
12167 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
12168 ,p_object_id => l_proj_element_id
12169 ,p_structure_type => 'WORKPLAN' --Amit
12170 ,x_return_status => l_return_status
12171 ,x_msg_count => l_msg_count
12172 ,x_msg_data => l_msg_data
12173 );
12174
12175 --Check error
12176 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12177 x_msg_count := FND_MSG_PUB.count_msg;
12178 IF x_msg_count = 1 then
12179 pa_interface_utils_pub.get_messages
12180 (p_encoded => FND_API.G_TRUE,
12181 p_msg_index => 1,
12182 p_data => l_data,
12183 p_msg_index_out => l_msg_index_out);
12184 x_msg_data := l_data;
12185 END IF;
12186 raise FND_API.G_EXC_ERROR;
12187 END IF;
12188
12189 END IF;
12190
12191 select record_version_number into l_pe_rvn
12192 from pa_proj_elements where proj_element_id = l_proj_element_id;
12193 PA_PROJECT_STRUCTURE_PVT1.Delete_Structure(
12194 p_commit => p_commit,
12195 p_debug_mode => p_debug_mode,
12196 p_structure_id => l_proj_element_id,
12197 p_record_version_number => l_pe_rvn,
12198 x_return_status => l_return_status,
12199 x_msg_count => l_msg_count,
12200 x_msg_data => l_msg_data);
12201
12202 END IF;
12203 CLOSE is_last_version;
12204
12205 --Check error
12206 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12207 x_msg_count := FND_MSG_PUB.count_msg;
12208 IF x_msg_count = 1 then
12209 pa_interface_utils_pub.get_messages
12210 (p_encoded => FND_API.G_TRUE,
12211 p_msg_index => 1,
12212 p_data => l_data,
12213 p_msg_index_out => l_msg_index_out);
12214 x_msg_data := l_data;
12215 END IF;
12216 raise FND_API.G_EXC_ERROR;
12217 END IF;
12218
12219 x_return_status := FND_API.G_RET_STS_SUCCESS;
12220
12221 IF (p_debug_mode = 'Y') THEN
12222 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL end');
12223 END IF;
12224
12225 EXCEPTION
12226 when FND_API.G_EXC_ERROR then
12227 if p_commit = FND_API.G_TRUE then
12228 rollback to delete_struc_ver_wo_val;
12229 end if;
12230 x_msg_count := FND_MSG_PUB.count_msg;
12231 x_return_status := FND_API.G_RET_STS_ERROR;
12232 when FND_API.G_EXC_UNEXPECTED_ERROR then
12233 if p_commit = FND_API.G_TRUE then
12234 rollback to delete_struc_ver_wo_val;
12235 end if;
12236 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12237 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
12238 p_procedure_name => 'Delete_Struc_Ver_Wo_Val',
12239 p_error_text => SUBSTRB(SQLERRM,1,240));
12240 when OTHERS then
12241 if p_commit = FND_API.G_TRUE then
12242 rollback to delete_struc_ver_wo_val;
12243 end if;
12244 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12245 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
12246 p_procedure_name => 'Delete_Struc_Ver_Wo_Val',
12247 p_error_text => SUBSTRB(SQLERRM,1,240));
12248 raise;
12249 END DELETE_STRUC_VER_WO_VAL;
12250
12251 procedure Generate_Error_Page
12252 (
12253 p_api_version IN NUMBER := 1.0
12254 ,p_commit IN VARCHAR2 := 'N'
12255 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
12256 ,p_debug_mode IN VARCHAR2 := 'N'
12257 ,p_max_msg_count IN NUMBER := NULL
12258 ,p_structure_version_id IN NUMBER
12259 ,p_error_tbl IN PA_PUBLISH_ERR_TBL_TYPE
12260 ,x_page_content_id OUT NOCOPY NUMBER
12261 ,x_return_status OUT NOCOPY VARCHAR2
12262 ,x_msg_count OUT NOCOPY NUMBER
12263 ,x_msg_data OUT NOCOPY VARCHAR2
12264 )
12265 IS PRAGMA AUTONOMOUS_TRANSACTION;
12266 CURSOR get_struct_ver_info IS
12267 select a.name, a.version_number, c.scheduled_start_date,
12268 c.scheduled_finish_date, b.project_id
12269 from pa_proj_elem_ver_structure a,
12270 pa_proj_element_versions b,
12271 pa_proj_elem_ver_schedule c
12272 where b.element_version_id = p_structure_version_id
12273 and b.project_id = a.project_id
12274 and b.proj_element_id = a.proj_element_id
12275 and b.element_version_id = a.element_version_id
12276 and b.project_id = c.project_id
12277 and b.proj_element_id = c.proj_element_id
12278 and b.element_version_id = c.element_version_id;
12279 l_struc_ver_info_rec get_struct_ver_info%ROWTYPE;
12280
12281 CURSOR get_project_info(c_project_id NUMBER) IS
12282 select ppa.name name, ppa.segment1,
12283 hou.name carrying_out_org_name, ppl.full_name
12284 from pa_projects_all ppa,
12285 hr_all_organization_units hou,
12286 per_all_people_f ppl,
12287 pa_project_parties ppp
12288 where ppa.carrying_out_organization_id = hou.organization_id
12289 and ppa.project_id = ppp.project_id (+)
12290 and ppa.project_id = c_project_id
12291 and 1 = ppp.project_role_id (+)
12292 and sysdate between ppp.start_date_active(+)
12293 and nvl(ppp.end_date_active(+), sysdate)
12294 and ppp.resource_source_id = ppl.person_id (+)
12295 and sysdate between ppl.effective_start_date(+)
12296 and nvl(ppl.effective_end_date (+), sysdate);
12297 l_proj_info_rec get_project_info%ROWTYPE;
12298
12299 CURSOR get_lookup_meaning(c_lookup_code VARCHAR2) IS
12300 select meaning
12301 from pa_lookups
12302 where lookup_type = 'PA_WORKPLAN_ERROR_NOTIF'
12303 and lookup_code = c_lookup_code;
12304 l_workplan_version_err varchar2(80);
12305 l_err_instruction varchar2(80);
12306 l_project_info varchar2(80);
12307 l_project_name varchar2(80);
12308 l_project_num varchar2(80);
12309 l_project_mgr varchar2(80);
12310 l_project_org varchar2(80);
12311 l_workplan_ver_info varchar2(80);
12312 l_workplan_ver_name varchar2(80);
12313 l_workplan_ver_num varchar2(80);
12314 l_wp_sch_start_date varchar2(80);
12315 l_wp_sch_finish_date varchar2(80);
12316 l_error_header varchar2(80);
12317 l_error varchar2(80);
12318
12319 l_page_content_id NUMBER;
12320 l_clob clob;
12321 l_text VARCHAR2(32767);
12322 l_index NUMBER;
12323 l_item_key VARCHAR2(240);
12324 l_return_status VARCHAR2(1);
12325 l_msg_count NUMBER;
12326 l_msg_data VARCHAR2(250);
12327 l_err_code NUMBER:= 0;
12328 l_err_stack VARCHAR2(630);
12329 l_err_stage VARCHAR2(80);
12330
12331 BEGIN
12332
12333 OPEN get_struct_ver_info;
12334 FETCH get_struct_ver_info INTO l_struc_ver_info_rec;
12335 CLOSE get_struct_ver_info;
12336
12337 OPEN get_project_info(l_struc_ver_info_rec.project_id);
12338 FETCH get_project_info INTO l_proj_info_rec;
12339 CLOSE get_project_info;
12340
12341 --get headers and prompts
12342 OPEN get_lookup_meaning('PA_WORKPLAN_VERSION_ERR');
12343 FETCH get_lookup_meaning into l_workplan_version_err;
12344 CLOSE get_lookup_meaning;
12345
12346 OPEN get_lookup_meaning('PA_ERR_INSTRUCTION');
12347 FETCH get_lookup_meaning into l_err_instruction;
12348 CLOSE get_lookup_meaning;
12349
12350 OPEN get_lookup_meaning('PA_PROJECT_INFO');
12351 FETCH get_lookup_meaning into l_project_info;
12352 CLOSE get_lookup_meaning;
12353
12354 OPEN get_lookup_meaning('PA_PROJECT_NAME');
12355 FETCH get_lookup_meaning into l_project_name;
12356 CLOSE get_lookup_meaning;
12357
12358 OPEN get_lookup_meaning('PA_PROJECT_NUM');
12359 FETCH get_lookup_meaning into l_project_num;
12360 CLOSE get_lookup_meaning;
12361
12362 OPEN get_lookup_meaning('PA_PROJECT_MGR');
12363 FETCH get_lookup_meaning into l_project_mgr;
12364 CLOSE get_lookup_meaning;
12365
12366 OPEN get_lookup_meaning('PA_PROJECT_ORG');
12367 FETCH get_lookup_meaning into l_project_org;
12368 CLOSE get_lookup_meaning;
12369
12370 OPEN get_lookup_meaning('PA_WORKPLAN_VER_INFO');
12371 FETCH get_lookup_meaning into l_workplan_ver_info;
12372 CLOSE get_lookup_meaning;
12373
12374 OPEN get_lookup_meaning('PA_WORKPLAN_VER_NAME');
12375 FETCH get_lookup_meaning into l_workplan_ver_name;
12376 CLOSE get_lookup_meaning;
12377
12378 OPEN get_lookup_meaning('PA_WORKPLAN_VER_NUM');
12379 FETCH get_lookup_meaning into l_workplan_ver_num;
12380 CLOSE get_lookup_meaning;
12381
12382 OPEN get_lookup_meaning('PA_WP_SCH_START_DATE');
12383 FETCH get_lookup_meaning into l_wp_sch_start_date;
12384 CLOSE get_lookup_meaning;
12385
12386 OPEN get_lookup_meaning('PA_WP_SCH_FINISH_DATE');
12387 FETCH get_lookup_meaning into l_wp_sch_finish_date;
12388 CLOSE get_lookup_meaning;
12389
12390 OPEN get_lookup_meaning('PA_ERROR_HEADER');
12391 FETCH get_lookup_meaning into l_error_header;
12392 CLOSE get_lookup_meaning;
12393
12394 OPEN get_lookup_meaning('PA_ERROR');
12395 FETCH get_lookup_meaning into l_error;
12396 CLOSE get_lookup_meaning;
12397 --done getting header and prompt
12398
12399 --create record in pa_page_layouts
12400 PA_PAGE_CONTENTS_PUB.CREATE_PAGE_CONTENTS(
12401 p_init_msg_list => fnd_api.g_false
12402 ,p_validate_only => fnd_api.g_false
12403 ,p_object_type => 'PA_STRUCTURES'
12404 ,p_pk1_value => p_structure_version_id
12405 ,p_pk2_value => 1
12406 ,x_page_content_id => x_page_content_id
12407 ,x_return_status => x_return_status
12408 ,x_msg_count => x_msg_count
12409 ,x_msg_data => x_msg_data
12410 );
12411
12412 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12413 RAISE FND_API.G_EXC_ERROR;
12414 END IF;
12415
12416 --create notification page
12417 select page_content
12418 into l_clob
12419 from pa_page_contents
12420 where page_content_id = x_page_content_id for update;
12421
12422 --print title
12423 l_text := '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary="">';
12424 l_text := l_text||'<tbody><tr><td width="100%"><font class="OraHeader" face="Tahoma,Arial,Helvetica,Geneva,sans-serif" color="#3c3c3c" size="5">';
12425 l_text := l_text||l_workplan_version_err||': ';
12426 l_text := l_text||l_struc_ver_info_rec.name;
12427 l_text := l_text||' ('||l_struc_ver_info_rec.version_number||')';
12428
12429 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12430 l_text
12431 ,l_clob);
12432
12433 --print instruction text
12434 l_text := '</font></td></tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table><table cellspacing=0 cellpadding=0 width="100%" border=0 summary="">';
12435 l_text := l_text||'<tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr><td></td><td><span>';
12436 l_text := l_text||'<font face="Tahoma,Arial,Helvetica,Geneva,sans-serif" color="#000000" size="2">';
12437 l_text := l_text||l_err_instruction||'</font></span></td>';
12438
12439 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12440 l_text
12441 ,l_clob);
12442
12443 --print project info
12444 l_text := '</tr></tbody></table><table cellspacing=10 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td valign=top width="100%">';
12445 l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td height=17></td></tr><tr><td width=20 rowspan=3>';
12446 l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12447 l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12448 l_text := l_text||l_project_info||'</b></font></td>';
12449
12450 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12451 l_text
12452 ,l_clob);
12453
12454 --print project name
12455 l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12456 l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary="">';
12457 l_text := l_text||'<tbody><tr><td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary="">';
12458 l_text := l_text||'<tbody><tr><td noWrap align=right><span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2>';
12459 l_text := l_text||'<label>';
12460 l_text := l_text||l_project_name||'</label></font></span></td><td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12461 l_text := l_text||l_proj_info_rec.name||'</b></font></td>';
12462
12463 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12464 l_text
12465 ,l_clob);
12466
12467 --print project number
12468 l_text := '</tr><tr><td height=3></td><td></td><td></td></tr><tr><td noWrap align=right><span align="right">';
12469 l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12470 l_text := l_text||l_project_num||'</label></font></span></td><td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12471 l_text := l_text||l_proj_info_rec.segment1||'</b></font></td>';
12472
12473 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12474 l_text
12475 ,l_clob);
12476
12477 --print project manager
12478 l_text := '</tr><tr><td height=3></td><td></td><td></td></tr></tbody></table></td><td width="5%"></td><td valign=top>';
12479 l_text := l_text||'<table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr><td noWrap align=right><span align="right">';
12480 l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12481 l_text := l_text||l_project_mgr||'</label></font></span></td>';
12482 l_text := l_text||'<td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12483 l_text := l_text||l_proj_info_rec.full_name||'</b></font></td>';
12484
12485 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12486 l_text
12487 ,l_clob);
12488
12489 --print organization
12490 l_text := '</tr><tr><td height=3></td><td></td><td></td></tr><tr><td noWrap align=right><span align="right">';
12491 l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12492 l_text := l_text||l_project_org||'</label></font></span></td><td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12493 l_text := l_text||l_proj_info_rec.carrying_out_org_name;
12494 l_text := l_text||'</b></font></td></tr><tr><td height=3></td><td></td><td></td></tr></tbody></table></td></tr></tbody></table>';
12495 l_text := l_text||'</td></tr></tbody></table></td></tr></tbody></table>';
12496
12497 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12498 l_text
12499 ,l_clob);
12500
12501 --print workplan version information
12502 l_text := '<div><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td height=17></td></tr><tr><td width=20 rowspan=3>';
12503 l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12504 l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12505 l_text := l_text||l_workplan_ver_info||'</b></font></td>';
12506
12507 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12508 l_text
12509 ,l_clob);
12510
12511 --print version name
12512 l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12513 l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary="" width="319">';
12514 l_text := l_text||'<tbody><tr><td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary="" width="419">';
12515 l_text := l_text||'<tbody><tr><td noWrap align=right width="177"><span align="right">';
12516 l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12517 l_text := l_text||l_workplan_ver_name||'</label></font></span></td><td width=12></td><td width="198">';
12518 l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12519 l_text := l_text||l_struc_ver_info_rec.name||'</b></font></td>';
12520
12521 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12522 l_text
12523 ,l_clob);
12524
12525 --print version number
12526 l_text := '</tr><tr><td height=3 width="177"></td><td width="12"></td><td width="198"></td></tr><tr><td noWrap align=right width="177">';
12527 l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12528 l_text := l_text||l_workplan_ver_num||'</label></font></span></td>';
12529 l_text := l_text||'<td width=12></td><td width="198"><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12530 l_text := l_text||l_struc_ver_info_rec.version_number||'</b></font></td>';
12531
12532 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12533 l_text
12534 ,l_clob);
12535
12536 l_text := '</tr><tr><td height=3 width="177"></td><td width="12"></td><td width="198"></td></tr><tr><td noWrap align=right width="177">';
12537 l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12538 l_text := l_text||l_wp_sch_start_date||'</label></font></span></td><td width=12></td><td width="198">';
12539 l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12540 l_text := l_text||l_struc_ver_info_rec.scheduled_start_date||'</b></font></td>';
12541
12542 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12543 l_text
12544 ,l_clob);
12545
12546 --print scheduled finish date
12547 l_text := '</tr><tr><td height=3 width="177"></td><td width="12"></td><td width="198"></td></tr><tr><td noWrap align=right width="177">';
12548 l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12549 l_text := l_text||l_wp_sch_finish_date||'</label></font></span></td><td width=12></td><td width="198">';
12550 l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12551 l_text := l_text||l_struc_ver_info_rec.scheduled_finish_date||'</b></font></td></tr></tbody></table></td></tr></tbody></table><div></div></td>';
12552 l_text := l_text||'</tr></tbody></table></td></tr></tbody></table></div><div></div>';
12553
12554 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12555 l_text
12556 ,l_clob);
12557
12558 --print error header
12559 l_text := '<div><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td height=17></td></tr><tr><td width=20 rowspan=3>';
12560 l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12561 l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12562 l_text := l_text||l_error_header||'</b></font></td>';
12563
12564 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12565 l_text
12566 ,l_clob);
12567
12568 --print error table
12569
12570 l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12571 l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td><table cellspacing=0 cellpadding=0 width=0 border=0 summary="">';
12572 l_text := l_text||' <tbody><tr><td class=OraTable bgcolor=#999966><table style="BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=1 width="100%" border=0 summary="">';
12573 l_text := l_text||'<tbody><tr><th style="BORDER-LEFT: #f2f2f5 1px solid" valign=bottom align=left bgcolor=#cfe0f1 scope="col">';
12574 l_text := l_text||'<font class=OraTableColumnHeader face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c size=2>';
12575 l_text := l_text||'<b><span class=OraTableHeaderLink bgcolor="#cfe0f1">';
12576 l_text := l_text||l_error||'</span></b></font></th></tr>';
12577
12578 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12579 l_text
12580 ,l_clob);
12581
12582 --print errors
12583 --loop
12584 l_index := p_error_tbl.FIRST;
12585 LOOP
12586 l_text := '<tr><td style="BORDER-RIGHT: #cfe0f1 1px solid; BORDER-TOP: #cfe0f1 1px solid; BORDER-LEFT: #cfe0f1 1px solid; BORDER-BOTTOM: #cfe0f1 1px solid" valign=baseline noWrap bgcolor=#f2f2f5>';
12587 l_text := l_text||'<font class=OraTableCellText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><span>';
12588 l_text := l_text||p_error_tbl(l_index)||'</span></font></td></tr>';
12589
12590 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12591 l_text
12592 ,l_clob);
12593
12594 EXIT WHEN l_index = p_error_tbl.LAST;
12595 l_index := p_error_tbl.next(l_index);
12596
12597 END LOOP;
12598 --end loop
12599 --print end
12600
12601 l_text := '</tbody></table></td></tr></tbody></table><div></div><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr>';
12602 l_text := l_text||'<td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody></tbody></table></td>';
12603 l_text := l_text||'</tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table></td>';
12604 l_text := l_text||'</tr></tbody></table><p></p><p></p></td></tr></table>';
12605
12606 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12607 l_text
12608 ,l_clob);
12609
12610 --send notification
12611 PA_WORKPLAN_WORKFLOW.START_WORKFLOW(
12612 'PAWFPPWP'
12613 ,'PA_WORKPLAN_ERRORS'
12614 ,p_structure_version_id
12615 ,NULL
12616 ,NULL
12617 ,l_item_key
12618 ,l_msg_count
12619 ,l_msg_data
12620 ,l_return_status
12621 );
12622 IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
12623 PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES(
12624 p_wf_type_code => 'WORKPLAN'
12625 ,p_item_type => 'PAWFPPWP'
12626 ,p_item_key => l_item_key
12627 ,p_entity_key1 => l_struc_ver_info_rec.project_id
12628 ,p_entity_key2 => p_structure_version_id
12629 ,p_description => NULL
12630 ,p_err_code => l_err_code
12631 ,p_err_stage => l_err_stage
12632 ,p_err_stack => l_err_stack
12633 );
12634 IF (l_err_code <> 0) THEN
12635 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12636 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
12637 RAISE FND_API.G_EXC_ERROR;
12638 END IF;
12639 ELSE
12640 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12641 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
12642 RAISE FND_API.G_EXC_ERROR;
12643 END IF;
12644
12645
12646 x_return_status := FND_API.G_RET_STS_SUCCESS;
12647 COMMIT;
12648
12649 EXCEPTION
12650 when FND_API.G_EXC_ERROR then
12651 ROLLBACK;
12652 x_msg_count := FND_MSG_PUB.count_msg;
12653 x_return_status := FND_API.G_RET_STS_ERROR;
12654 when OTHERS then
12655 ROLLBACK;
12656 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12657 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
12658 p_procedure_name => 'Generate_Error_Page',
12659 p_error_text => SUBSTRB(SQLERRM,1,240));
12660 raise;
12661 END Generate_Error_Page;
12662
12663
12664 PROCEDURE APPEND_VARCHAR_TO_CLOB(p_varchar IN varchar2,
12665 p_clob IN OUT NOCOPY CLOB)
12666 IS
12667 l_chunkSize INTEGER;
12668 v_offset INTEGER := 0;
12669 l_clob clob;
12670 l_length INTEGER;
12671
12672 v_size NUMBER;
12673 v_text VARCHAR2(3000); -- Bug 3634909. Increased to 3000 from 1000
12674 BEGIN
12675 l_chunksize := length(p_varchar);
12676 l_length := dbms_lob.getlength(p_clob);
12677
12678 dbms_lob.write(p_clob,
12679 l_chunksize,
12680 l_length+1,
12681 p_varchar);
12682 v_size := 1000;
12683 dbms_lob.read(p_clob, v_size, 1, v_text);
12684 END APPEND_VARCHAR_TO_CLOB;
12685
12686 -- Following procedure is added for Bug 2758343
12687 -- It will recalculate the task weightings based on
12688 -- duration for a given project and structure version id
12689
12690 PROCEDURE RECALC_FIN_TASK_WEIGHTS
12691 ( p_structure_version_id IN NUMBER
12692 ,p_project_id IN NUMBER
12693 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12694 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12695 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
12696
12697 IS
12698
12699 CURSOR c_get_task_ver IS
12700 SELECT element_version_id
12701 , wbs_level
12702 FROM pa_proj_element_versions
12703 WHERE project_id = p_project_id
12704 AND parent_structure_version_id = p_structure_version_id
12705 AND object_type = 'PA_TASKS';
12706
12707 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
12708 SELECT ptt.prog_entry_enable_flag
12709 FROM pa_task_types ptt
12710 , pa_proj_element_versions ppev
12711 , pa_proj_elements ppe
12712 WHERE ppev.element_version_id = c_element_version_id
12713 AND ppev.proj_element_id = ppe.proj_element_id
12714 AND ptt.object_type ='PA_TASKS' /* bug 3279978 FP M Enhancement */
12715 AND ppe.TYPE_ID = ptt.task_type_id;
12716
12717 CURSOR get_parent(c_element_version_id NUMBER) IS
12718 SELECT object_id_from1
12719 FROM pa_object_relationships
12720 WHERE object_id_to1 = c_element_version_id
12721 AND object_type_to = 'PA_TASKS'
12722 AND relationship_type = 'S'
12723 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
12724
12725 CURSOR get_summed_duration(c_parent_element_version_id NUMBER) IS
12726 SELECT sum(ppevs.duration)
12727 FROM pa_proj_elem_ver_schedule ppevs
12728 , pa_object_relationships por
12729 , pa_proj_element_versions ppev
12730 , pa_proj_elements ppe
12731 , pa_task_types ptt
12732 WHERE por.object_id_from1 = c_parent_element_version_id
12733 AND por.object_type_to = 'PA_TASKS'
12734 AND por.relationship_type = 'S'
12735 AND por.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
12736 AND por.object_id_to1 = ppevs.element_version_id
12737 AND por.object_id_to1 = ppev.element_version_id
12738 AND ppev.proj_element_id = ppe.proj_element_id
12739 AND ppevs.project_id = ppe.project_id
12740 AND ppe.TYPE_ID = ptt.task_type_id
12741 AND ptt.object_type ='PA_TASKS' /* bug 3279978 FP M Enhancement */
12742 AND ptt.prog_entry_enable_flag = 'Y';
12743
12744 CURSOR get_task_duration(c_element_version_id NUMBER, c_project_id NUMBER) IS
12745 SELECT duration
12746 FROM pa_proj_elem_ver_schedule
12747 WHERE element_version_id = c_element_version_id
12748 AND project_id = c_project_id;
12749
12750 CURSOR get_existing_weights(c_parent_element_version_id NUMBER) IS
12751 SELECT sum(weighting_percentage)
12752 FROM PA_OBJECT_RELATIONSHIPS
12753 WHERE object_id_from1 = c_parent_element_version_id
12754 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
12755 AND object_type_to = 'PA_TASKS'
12756 AND relationship_type = 'S';
12757
12758
12759 l_element_version_id NUMBER;
12760 l_parent_element_version_id NUMBER;
12761 l_outline_level NUMBER;
12762 l_progress_allowed VARCHAR2(1);
12763
12764 TYPE durations IS TABLE OF NUMBER
12765 INDEX BY BINARY_INTEGER;
12766
12767 l_durations durations;
12768 l_total_duration NUMBER;
12769 l_task_weight PA_OBJECT_RELATIONSHIPS.weighting_percentage%TYPE;
12770 l_task_duration NUMBER;
12771 l_existing_weight NUMBER;
12772 l_remaining_weight NUMBER;
12773
12774 BEGIN
12775
12776 For l_get_task_ver IN c_get_task_ver LOOP
12777
12778 l_element_version_id := l_get_task_ver.element_version_id;
12779 l_outline_level := l_get_task_ver.wbs_level;
12780
12781 OPEN check_progress_allowed(l_element_version_id);
12782 FETCH check_progress_allowed INTO l_progress_allowed;
12783 CLOSE check_progress_allowed;
12784
12785 OPEN get_parent(l_element_version_id);
12786 FETCH get_parent INTO l_parent_element_version_id;
12787 CLOSE get_parent;
12788
12789
12790 IF l_progress_allowed = 'N' THEN
12791 -- Populate task weight as zero
12792 UPDATE PA_OBJECT_RELATIONSHIPS
12793 SET weighting_percentage = 0
12794 WHERE object_id_from1 = l_parent_element_version_id
12795 AND object_id_to1 = l_element_version_id
12796 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
12797 AND object_type_to = 'PA_TASKS'
12798 AND relationship_type = 'S';
12799 ELSE
12800
12801 IF l_durations.exists(l_parent_element_version_id) then
12802 NULL;
12803 ELSE
12804 OPEN get_summed_duration(l_parent_element_version_id);
12805 FETCH get_summed_duration INTO l_total_duration;
12806 CLOSE get_summed_duration;
12807
12808 l_durations(l_parent_element_version_id) := l_total_duration;
12809 END IF;
12810
12811 OPEN get_task_duration(l_element_version_id, p_project_id);
12812 FETCH get_task_duration INTO l_task_duration;
12813 CLOSE get_task_duration;
12814
12815 IF (l_durations(l_parent_element_version_id) IS NULL) OR (l_durations(l_parent_element_version_id) = 0) THEN
12816 l_task_weight := 0;
12817 ELSE
12818 OPEN get_existing_weights(l_parent_element_version_id);
12819 FETCH get_existing_weights INTO l_existing_weight;
12820 CLOSE get_existing_weights;
12821
12822 l_remaining_weight := 100 - l_existing_weight;
12823 l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
12824
12825 IF(abs(l_remaining_weight - l_task_weight) <= .05) THEN
12826 l_task_weight := l_remaining_weight;
12827 END IF;
12828 IF(abs(l_remaining_weight) <= .01) THEN
12829 l_task_weight := l_task_weight+l_remaining_weight;
12830 END IF;
12831 END IF;
12832
12833 UPDATE PA_OBJECT_RELATIONSHIPS
12834 SET weighting_percentage = l_task_weight
12835 WHERE object_id_from1 = l_parent_element_version_id
12836 AND object_id_to1 = l_element_version_id
12837 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
12838 AND object_type_to = 'PA_TASKS'
12839 AND relationship_type = 'S';
12840 END IF;
12841 END LOOP;
12842
12843 x_return_status := FND_API.G_RET_STS_SUCCESS;
12844
12845 EXCEPTION
12846 WHEN OTHERS THEN
12847 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12848 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
12849 p_procedure_name => 'RECALC_FIN_TASK_WEIGHTS',
12850 p_error_text => SUBSTRB(SQLERRM,1,240));
12851 END RECALC_FIN_TASK_WEIGHTS;
12852
12853 --maansari
12854 FUNCTION copy_task_version( p_structure_version_id NUMBER, p_task_version_id NUMBER ) RETURN VARCHAR2 IS
12855 l_copy_task_flag VARCHAR2(1) := 'Y';
12856 l_parent_task_version_id NUMBER;
12857 BEGIN
12858
12859 FOR i in 1..l_src_tasks_versions_tbl.count LOOP
12860 IF p_task_version_id = l_src_tasks_versions_tbl(i).src_task_version_id
12861 THEN
12862 l_copy_task_flag := l_src_tasks_versions_tbl(i).copy_flag;
12863 l_parent_task_version_id := l_src_tasks_versions_tbl(i).src_parent_task_version_id;
12864 --loop thru untill top of the hierarchy.
12865 WHILE l_parent_task_version_id <> p_structure_version_id LOOP
12866 FOR i in 1..l_src_tasks_versions_tbl.count LOOP
12867 IF l_parent_task_version_id = l_src_tasks_versions_tbl(i).src_task_version_id
12868 THEN
12869 --bug 2863836
12870 IF l_src_tasks_versions_tbl(i).copy_flag = 'N' THEN
12871 l_copy_task_flag := l_src_tasks_versions_tbl(i).copy_flag;
12872 END IF;
12873 --end bug 2863836
12874 l_parent_task_version_id := l_src_tasks_versions_tbl(i).src_parent_task_version_id;
12875 exit;
12876 END IF;
12877 END LOOP;
12878 END LOOP;
12879 exit;
12880 END IF;
12881 END LOOP;
12882
12883 return l_copy_task_flag;
12884 END copy_task_version;
12885 --maansari
12886
12887 -- Performance changes : added this API. It is bulk version of COPY_STRUCTURE_VERSION
12888
12889 PROCEDURE COPY_STRUCTURE_VERSION_BULK
12890 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
12891 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
12892 ,p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL
12893 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
12894 ,p_debug_mode IN VARCHAR2 := 'N'
12895 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
12896 ,p_structure_version_id IN NUMBER
12897 ,p_new_struct_ver_name IN VARCHAR2
12898 ,p_new_struct_ver_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12899 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12900 ,x_new_struct_ver_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12901 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12902 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12903 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
12904 IS
12905 l_new_struct_ver_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
12906 -- added for Bug Fix: 4537865
12907 l_tmp_struct_ver_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
12908 -- added for Bug Fix: 4537865
12909 l_return_status VARCHAR2(1);
12910 l_msg_count NUMBER;
12911 l_msg_data VARCHAR2(250);
12912 l_data VARCHAR2(2000);
12913 l_msg_index_out NUMBER;
12914 l_pev_structure_id NUMBER;
12915
12916 CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
12917 IS
12918 SELECT *
12919 FROM PA_PROJ_ELEMENT_VERSIONS
12920 WHERE element_version_id = c_structure_version_id;
12921
12922 l_structure_ver_rec l_get_structure_ver_csr%ROWTYPE;
12923 l_structure_ver_to_rec l_get_structure_ver_csr%ROWTYPE;
12924
12925 CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
12926 IS
12927 SELECT a.*
12928 FROM PA_PROJ_ELEM_VER_STRUCTURE a,
12929 PA_PROJ_ELEMENT_VERSIONS b
12930 WHERE b.element_version_id = c_structure_version_id
12931 AND b.project_id = a.project_id
12932 AND b.element_version_id = a.project_id;
12933
12934 l_structure_ver_attr_rec l_get_structure_ver_attr_csr%ROWTYPE;
12935
12936 l_ref_task_ver_id NUMBER;
12937 l_peer_or_sub VARCHAR2(10);
12938
12939 CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
12940 IS
12941 SELECT a.*
12942 FROM PA_PROJ_ELEM_VER_SCHEDULE a,
12943 PA_PROJ_ELEMENT_VERSIONS b
12944 WHERE b.element_version_id = c_element_version_id
12945 AND b.project_id = a.project_id
12946 AND b.element_version_id = a.element_version_id;
12947
12948 l_ver_schedule_attr_rec l_get_ver_schedule_attr_csr%ROWTYPE;
12949
12950 l_last_wbs_level NUMBER;
12951 l_task_version_id NUMBER;
12952 l_pev_schedule_id NUMBER;
12953
12954 CURSOR l_get_structure_type_csr(c_structure_version_id NUMBER)
12955 IS
12956 SELECT pst.structure_type_class_code
12957 FROM PA_STRUCTURE_TYPES pst,
12958 PA_PROJ_ELEMENT_VERSIONS ppev,
12959 PA_PROJ_STRUCTURE_TYPES ppst
12960 WHERE ppev.element_version_id = c_structure_version_id
12961 AND ppev.proj_element_id = ppst.proj_element_id
12962 AND ppst.structure_type_id = pst.structure_type_id;
12963
12964 l_structure_type PA_STRUCTURE_TYPES.structure_type%TYPE;
12965
12966 CURSOR l_check_working_versions_csr(c_structure_version_id NUMBER)
12967 IS
12968 SELECT 'Y'
12969 FROM PA_PROJ_ELEMENT_VERSIONS ppev
12970 WHERE ppev.element_version_id = c_structure_version_id
12971 AND EXISTS
12972 (SELECT 'Y'
12973 FROM PA_PROJ_ELEMENT_VERSIONS ppev2,
12974 PA_PROJ_ELEM_VER_STRUCTURE ppevs
12975 WHERE ppev2.proj_element_id = ppev.proj_element_id
12976 AND ppev2.project_id = ppev.project_id
12977 AND ppevs.project_id = ppev2.project_id
12978 AND ppevs.element_version_id = ppev2.element_version_id
12979 AND ppevs.status_code <> 'STRUCTURE_PUBLISHED');
12980
12981 l_dummy VARCHAR2(1);
12982
12983
12984 l_new_obj_rel_id PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
12985 l_structure_type1 PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
12986
12987 --Added by rtarway
12988 l_rowid VARCHAR2(255);
12989
12990 X_Row_id VARCHAR2(255);
12991 l_project_id number;
12992 l_user_id number;
12993 l_login_id number;
12994
12995 CURSOR cur_elem_ver_seq IS
12996 SELECT pa_proj_element_versions_s.nextval
12997 FROM sys.dual;
12998
12999 l_wp_struc VARCHAR2(1);
13000 l_fin_struc VARCHAR2(1);
13001
13002 BEGIN
13003
13004 pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK');
13005
13006 IF (p_debug_mode = 'Y') THEN
13007 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK begin');
13008 END IF;
13009
13010 IF (p_commit = FND_API.G_TRUE) THEN
13011 savepoint copy_structure_version_pvt_blk;
13012 END IF;
13013
13014 -- Get structure version info
13015 OPEN l_get_structure_ver_csr(p_structure_version_id);
13016 FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
13017 CLOSE l_get_structure_ver_csr;
13018
13019 l_project_id := l_structure_ver_rec.project_id;
13020
13021 OPEN cur_elem_ver_seq;
13022 FETCH cur_elem_ver_seq INTO l_new_struct_ver_id;
13023 CLOSE cur_elem_ver_seq;
13024
13025 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
13026 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_tmp_struct_ver_id
13027 -- to l_new_struct_ver_id
13028
13029 l_tmp_struct_ver_id := l_new_struct_ver_id ;
13030
13031 -- End 4657794
13032
13033 PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
13034 X_ROW_ID => l_rowid
13035 --,X_ELEMENT_VERSION_ID => l_new_struct_ver_id * commented for Bug Fix: 453786
13036 ,X_ELEMENT_VERSION_ID => l_tmp_struct_ver_id -- added for bug Fix: 4537865
13037 ,X_PROJ_ELEMENT_ID => l_structure_ver_rec.proj_element_id
13038 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
13039 ,X_PROJECT_ID => l_project_id
13040 ,X_PARENT_STRUCTURE_VERSION_ID => l_new_struct_ver_id
13041 ,X_DISPLAY_SEQUENCE => NULL
13042 ,X_WBS_LEVEL => NULL
13043 ,X_WBS_NUMBER => '0'
13044 ,X_ATTRIBUTE_CATEGORY => l_structure_ver_rec.attribute_category
13045 ,X_ATTRIBUTE1 => l_structure_ver_rec.attribute1
13046 ,X_ATTRIBUTE2 => l_structure_ver_rec.attribute2
13047 ,X_ATTRIBUTE3 => l_structure_ver_rec.attribute3
13048 ,X_ATTRIBUTE4 => l_structure_ver_rec.attribute4
13049 ,X_ATTRIBUTE5 => l_structure_ver_rec.attribute5
13050 ,X_ATTRIBUTE6 => l_structure_ver_rec.attribute6
13051 ,X_ATTRIBUTE7 => l_structure_ver_rec.attribute7
13052 ,X_ATTRIBUTE8 => l_structure_ver_rec.attribute8
13053 ,X_ATTRIBUTE9 => l_structure_ver_rec.attribute9
13054 ,X_ATTRIBUTE10 => l_structure_ver_rec.attribute10
13055 ,X_ATTRIBUTE11 => l_structure_ver_rec.attribute11
13056 ,X_ATTRIBUTE12 => l_structure_ver_rec.attribute12
13057 ,X_ATTRIBUTE13 => l_structure_ver_rec.attribute13
13058 ,X_ATTRIBUTE14 => l_structure_ver_rec.attribute14
13059 ,X_ATTRIBUTE15 => l_structure_ver_rec.element_version_id
13060 ,X_TASK_UNPUB_VER_STATUS_CODE => NULL
13061 ,X_SOURCE_OBJECT_ID => l_project_id
13062 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
13063 );
13064 -- added for bug Fix: 4537865
13065 l_new_struct_ver_id := l_tmp_struct_ver_id;
13066 -- added for bug Fix: 4537865
13067
13068 /*
13069 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
13070 ( p_validate_only => p_validate_only
13071 ,p_structure_id => l_structure_ver_rec.proj_element_id
13072 ,p_attribute_category => l_structure_ver_rec.attribute_category
13073 ,p_attribute1 => l_structure_ver_rec.attribute1
13074 ,p_attribute2 => l_structure_ver_rec.attribute2
13075 ,p_attribute3 => l_structure_ver_rec.attribute3
13076 ,p_attribute4 => l_structure_ver_rec.attribute4
13077 ,p_attribute5 => l_structure_ver_rec.attribute5
13078 ,p_attribute6 => l_structure_ver_rec.attribute6
13079 ,p_attribute7 => l_structure_ver_rec.attribute7
13080 ,p_attribute8 => l_structure_ver_rec.attribute8
13081 ,p_attribute9 => l_structure_ver_rec.attribute9
13082 ,p_attribute10 => l_structure_ver_rec.attribute10
13083 ,p_attribute11 => l_structure_ver_rec.attribute11
13084 ,p_attribute12 => l_structure_ver_rec.attribute12
13085 ,p_attribute13 => l_structure_ver_rec.attribute13
13086 ,p_attribute14 => l_structure_ver_rec.attribute14
13087 ,p_attribute15 => l_structure_ver_rec.element_version_id --fix bug 2833989: replaced l_structure_ver_rec.attribute15
13088 ,x_structure_version_id => l_new_struct_ver_id
13089 ,x_return_status => l_return_status
13090 ,x_msg_count => l_msg_count
13091 ,x_msg_data => l_msg_data );
13092 */
13093
13094 If (p_debug_mode = 'Y') THEN
13095 pa_debug.debug('Create Structure Version Bulk return status: ' || l_return_status);
13096 pa_debug.debug('l_new_struct_ver_id: ' || l_new_struct_ver_id);
13097 END IF;
13098
13099
13100 --Check if there is any error.
13101 l_msg_count := FND_MSG_PUB.count_msg;
13102 IF l_msg_count > 0 THEN
13103 x_msg_count := l_msg_count;
13104 IF x_msg_count = 1 THEN
13105 x_msg_data := l_msg_data;
13106 END IF;
13107 RAISE FND_API.G_EXC_ERROR;
13108 END IF;
13109
13110 -- Get structure version attributes
13111 OPEN l_get_structure_ver_attr_csr(p_structure_version_id);
13112 FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
13113 CLOSE l_get_structure_ver_attr_csr;
13114
13115 If (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
13116 l_structure_ver_attr_rec.change_reason_code := p_change_reason_code;
13117 END IF;
13118
13119 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
13120 ( p_validate_only => FND_API.G_FALSE
13121 ,p_structure_version_id => l_new_struct_ver_id
13122 ,p_structure_version_name => p_new_struct_ver_name
13123 ,p_structure_version_desc => p_new_struct_ver_desc
13124 ,p_effective_date => l_structure_ver_attr_rec.effective_date
13125 ,p_latest_eff_published_flag => l_structure_ver_attr_rec.latest_eff_published_flag
13126 ,p_locked_status_code => l_structure_ver_attr_rec.lock_status_code
13127 ,p_struct_version_status_code => l_structure_ver_attr_rec.status_code
13128 ,p_baseline_current_flag => l_structure_ver_attr_rec.current_flag
13129 ,p_baseline_original_flag => l_structure_ver_attr_rec.original_flag
13130 ,p_change_reason_code => l_structure_ver_attr_rec.change_reason_code
13131 ,x_pev_structure_id => l_pev_structure_id
13132 ,x_return_status => l_return_status
13133 ,x_msg_count => l_msg_count
13134 ,x_msg_data => l_msg_data );
13135
13136 IF (p_debug_mode = 'Y') THEN
13137 pa_debug.debug('Create Structure Version Bulk Attr return status: ' || l_return_status);
13138 pa_debug.debug('l_pev_structure_id: ' || l_pev_structure_id);
13139 END IF;
13140
13141 --Check if there is any error.
13142 l_msg_count := FND_MSG_PUB.count_msg;
13143 IF l_msg_count > 0 THEN
13144 x_msg_count := l_msg_count;
13145 IF x_msg_count = 1 THEN
13146 x_msg_data := l_msg_data;
13147 END IF;
13148 RAISE FND_API.G_EXC_ERROR;
13149 END IF;
13150
13151 --Search for outgoing links for the structure version; create new Links
13152 -- Amit: Code(get_to_id) which was commented earlier is removed. If needed it can be found from COPY_STRUCTURE_VERSION
13153
13154 --hsiu: added to check for structure type
13155 l_wp_struc := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
13156 l_fin_struc:= PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
13157
13158 OPEN l_get_structure_type_csr(p_structure_version_id);
13159 FETCH l_get_structure_type_csr INTO l_structure_type;
13160 CLOSE l_get_structure_type_csr;
13161
13162 -- If structure is workplan type create schedule version record
13163 -- if l_structure_type = 'WORKPLAN' then
13164 IF (l_wp_struc = 'Y') THEN
13165
13166 OPEN l_get_ver_schedule_attr_csr(p_structure_version_id);
13167 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
13168 CLOSE l_get_ver_schedule_attr_csr;
13169
13170 -- Amit: Code(PA_TASK_PUB1.CREATE_SCHEDULE_VERSION) which was commented earlier is removed.
13171 -- If needed it can be found from COPY_STRUCTURE_VERSION
13172
13173 l_pev_schedule_id := NULL;
13174 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
13175 X_ROW_ID => X_Row_Id
13176 ,X_PEV_SCHEDULE_ID => l_pev_schedule_id
13177 ,X_ELEMENT_VERSION_ID => l_new_struct_ver_id
13178 ,X_PROJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
13179 ,X_PROJ_ELEMENT_ID => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
13180 ,X_SCHEDULED_START_DATE => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
13181 ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
13182 ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
13183 ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
13184 ,X_ACTUAL_START_DATE => l_ver_schedule_attr_rec.ACTUAL_START_DATE
13185 ,X_ACTUAL_FINISH_DATE => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
13186 ,X_ESTIMATED_START_DATE => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
13187 ,X_ESTIMATED_FINISH_DATE => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
13188 ,X_DURATION => l_ver_schedule_attr_rec.DURATION
13189 ,X_EARLY_START_DATE => l_ver_schedule_attr_rec.EARLY_START_DATE
13190 ,X_EARLY_FINISH_DATE => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
13191 ,X_LATE_START_DATE => l_ver_schedule_attr_rec.LATE_START_DATE
13192 ,X_LATE_FINISH_DATE => l_ver_schedule_attr_rec.LATE_FINISH_DATE
13193 ,X_CALENDAR_ID => l_ver_schedule_attr_rec.CALENDAR_ID
13194 ,X_MILESTONE_FLAG => l_ver_schedule_attr_rec.MILESTONE_FLAG
13195 ,X_CRITICAL_FLAG => l_ver_schedule_attr_rec.CRITICAL_FLAG
13196 ,X_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.wq_planned_quantity
13197 ,X_PLANNED_EFFORT => l_ver_schedule_attr_rec.planned_effort
13198 ,X_ACTUAL_DURATION => l_ver_schedule_attr_rec.actual_duration
13199 ,X_ESTIMATED_DURATION => l_ver_schedule_attr_rec.estimated_duration
13200 ,X_ATTRIBUTE_CATEGORY => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
13201 ,X_ATTRIBUTE1 => l_ver_schedule_attr_rec.ATTRIBUTE1
13202 ,X_ATTRIBUTE2 => l_ver_schedule_attr_rec.ATTRIBUTE2
13203 ,X_ATTRIBUTE3 => l_ver_schedule_attr_rec.ATTRIBUTE3
13204 ,X_ATTRIBUTE4 => l_ver_schedule_attr_rec.ATTRIBUTE4
13205 ,X_ATTRIBUTE5 => l_ver_schedule_attr_rec.ATTRIBUTE5
13206 ,X_ATTRIBUTE6 => l_ver_schedule_attr_rec.ATTRIBUTE6
13207 ,X_ATTRIBUTE7 => l_ver_schedule_attr_rec.ATTRIBUTE7
13208 ,X_ATTRIBUTE8 => l_ver_schedule_attr_rec.ATTRIBUTE8
13209 ,X_ATTRIBUTE9 => l_ver_schedule_attr_rec.ATTRIBUTE9
13210 ,X_ATTRIBUTE10 => l_ver_schedule_attr_rec.ATTRIBUTE10
13211 ,X_ATTRIBUTE11 => l_ver_schedule_attr_rec.ATTRIBUTE11
13212 ,X_ATTRIBUTE12 => l_ver_schedule_attr_rec.ATTRIBUTE12
13213 ,X_ATTRIBUTE13 => l_ver_schedule_attr_rec.ATTRIBUTE13
13214 ,X_ATTRIBUTE14 => l_ver_schedule_attr_rec.ATTRIBUTE14
13215 ,X_ATTRIBUTE15 => l_ver_schedule_attr_rec.ATTRIBUTE15
13216 ,X_SOURCE_OBJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
13217 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
13218 );
13219
13220
13221 IF (p_debug_mode = 'Y') THEN
13222 pa_debug.debug('Create Schedule Version Bulk return status: ' || l_return_status);
13223 pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
13224 END IF;
13225
13226 --Check if there is any error.
13227 l_msg_count := FND_MSG_PUB.count_msg;
13228 IF l_msg_count > 0 THEN
13229 x_msg_count := l_msg_count;
13230 IF x_msg_count = 1 THEN
13231 x_msg_data := l_msg_data;
13232 END IF;
13233 RAISE FND_API.G_EXC_ERROR;
13234 END IF;
13235 END IF;
13236
13237 -- ELSIF l_structure_type in ('FINANCIAL') then
13238 IF l_wp_struc = 'N' and l_fin_struc = 'Y' THEN
13239 -- There can only be one working version any any time for a financial structure
13240 OPEN l_check_working_versions_csr(p_structure_version_id);
13241 FETCH l_check_working_versions_csr INTO l_dummy;
13242 if l_check_working_versions_csr%FOUND then
13243 CLOSE l_check_working_versions_csr;
13244 PA_UTILS.ADD_MESSAGE('PA','PA_PS_WORKING_VER_EXISTS');
13245 x_msg_data := 'PA_PS_WORKING_VER_EXISTS';
13246 RAISE FND_API.G_EXC_ERROR;
13247 end if;
13248 CLOSE l_check_working_versions_csr;
13249 end if;
13250
13251 -- Amit The code to get all the task versions and then create task versions one by one is commented
13252 -- Now we are using bulk insert for this purpose.
13253
13254 l_user_id := FND_GLOBAl.user_id;
13255 l_login_id := FND_GLOBAl.login_id;
13256
13257 INSERT INTO pa_proj_element_versions(
13258 ELEMENT_VERSION_ID
13259 ,PROJ_ELEMENT_ID
13260 ,OBJECT_TYPE
13261 ,PROJECT_ID
13262 ,PARENT_STRUCTURE_VERSION_ID
13263 ,DISPLAY_SEQUENCE
13264 ,WBS_LEVEL
13265 ,WBS_NUMBER
13266 ,CREATION_DATE
13267 ,CREATED_BY
13268 ,LAST_UPDATE_DATE
13269 ,LAST_UPDATED_BY
13270 ,LAST_UPDATE_LOGIN
13271 ,RECORD_VERSION_NUMBER
13272 ,ATTRIBUTE_CATEGORY
13273 ,ATTRIBUTE1
13274 ,ATTRIBUTE2
13275 ,ATTRIBUTE3
13276 ,ATTRIBUTE4
13277 ,ATTRIBUTE5
13278 ,ATTRIBUTE6
13279 ,ATTRIBUTE7
13280 ,ATTRIBUTE8
13281 ,ATTRIBUTE9
13282 ,ATTRIBUTE10
13283 ,ATTRIBUTE11
13284 ,ATTRIBUTE12
13285 ,ATTRIBUTE13
13286 ,ATTRIBUTE14
13287 ,TASK_UNPUB_VER_STATUS_CODE
13288 ,FINANCIAL_TASK_FLAG
13289 ,attribute15 --this column is used to store structure ver id of the source str to be used to created relationships.
13290 ,source_object_id
13291 ,source_object_type
13292 )
13293 SELECT
13294 pa_proj_element_versions_s.nextval
13295 ,ppev.proj_element_id
13296 ,ppev.object_type
13297 ,l_project_id
13298 ,l_new_struct_ver_id
13299 ,ppev.display_sequence
13300 ,ppev.WBS_LEVEL
13301 ,ppev.WBS_NUMBER
13302 ,SYSDATE
13303 ,l_user_id
13304 ,SYSDATE
13305 ,l_user_id
13306 ,l_login_id
13307 ,ppev.RECORD_VERSION_NUMBER
13308 ,ppev.ATTRIBUTE_CATEGORY
13309 ,ppev.ATTRIBUTE1
13310 ,ppev.ATTRIBUTE2
13311 ,ppev.ATTRIBUTE3
13312 ,ppev.ATTRIBUTE4
13313 ,ppev.ATTRIBUTE5
13314 ,ppev.ATTRIBUTE6
13315 ,ppev.ATTRIBUTE7
13316 ,ppev.ATTRIBUTE8
13317 ,ppev.ATTRIBUTE9
13318 ,ppev.ATTRIBUTE10
13319 ,ppev.ATTRIBUTE11
13320 ,ppev.ATTRIBUTE12
13321 ,ppev.ATTRIBUTE13
13322 ,ppev.ATTRIBUTE14
13323 ,ppev.TASK_UNPUB_VER_STATUS_CODE
13324 ,ppev.FINANCIAL_TASK_FLAG
13325 ,ppev.element_version_id
13326 ,l_project_id
13327 ,'PA_PROJECTS'
13328 FROM ( SELECT ppev2.* from pa_proj_element_versions ppev2
13329 ,pa_proj_elements ppe --bug 4573340
13330 WHERE -- bug#3094283 ppev2.project_id = l_project_id
13331 ppev2.parent_structure_version_id = p_structure_version_id
13332 --bug 4573340
13333 and ppe.project_id = ppev2.project_id
13334 and ppe.proj_element_id = ppev2.proj_element_id
13335 and ppe.link_task_flag = 'N'
13336 --bug 4573340
13337 and ppev2.object_type = 'PA_TASKS'
13338 order by ppev2.display_sequence ) ppev
13339 ;
13340 -- Bug 4205167 : Added hint to use Hash Join
13341 INSERT INTO PA_OBJECT_RELATIONSHIPS (
13342 object_relationship_id,
13343 object_type_from,
13344 object_id_from1,
13345 object_type_to,
13346 object_id_to1,
13347 relationship_type,
13348 relationship_subtype,
13349 Record_Version_Number,
13350 CREATED_BY,
13351 CREATION_DATE,
13352 LAST_UPDATED_BY,
13353 LAST_UPDATE_DATE,
13354 LAST_UPDATE_LOGIN,
13355 weighting_percentage
13356 )
13357 SELECT /*+ USE_HASH(ppev2 ppev1)*/
13358 pa_object_relationships_s.nextval,
13359 pobj.object_type_from,
13360 ppev1.element_version_id,
13361 pobj.object_type_to,
13362 ppev2.element_version_id,
13363 pobj.relationship_type,
13364 pobj.relationship_subtype,
13365 pobj.Record_Version_Number,
13366 l_user_id,
13367 SYSDATE,
13368 l_user_id,
13369 SYSDATE,
13370 l_login_id,
13371 pobj.weighting_percentage
13372 FROM ( SELECT object_type_from, object_id_from1,
13373 object_type_to, object_id_to1,
13374 relationship_type, relationship_subtype,
13375 Record_Version_Number, weighting_percentage
13376 FROM pa_object_relationships
13377 --bug#3094283 WHERE RELATIONSHIP_TYPE = 'S'
13378 start with object_id_from1 = p_structure_version_id
13379 and RELATIONSHIP_TYPE = 'S' /* Bug 2881667 - Added this condition */
13380 connect by object_id_from1 = prior object_id_to1
13381 and RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 - Added this condition */
13382 pa_proj_element_versions ppev1,
13383 pa_proj_element_versions ppev2
13384 WHERE
13385 --bug#3094283 ppev1.project_id = l_project_id
13386 ppev1.attribute15 = pobj.object_id_from1
13387 --bug#3094283 AND ppev2.project_id = l_project_id
13388 AND ppev2.attribute15 = pobj.object_id_to1
13389 and ppev1.parent_structure_version_id = l_new_struct_ver_id
13390 and ppev2.parent_structure_version_id = l_new_struct_ver_id
13391 ;
13392
13393
13394 INSERT INTO pa_proj_elem_ver_schedule(
13395 PEV_SCHEDULE_ID
13396 ,ELEMENT_VERSION_ID
13397 ,PROJECT_ID
13398 ,PROJ_ELEMENT_ID
13399 ,CREATION_DATE
13400 ,CREATED_BY
13401 ,LAST_UPDATE_DATE
13402 ,LAST_UPDATED_BY
13403 ,SCHEDULED_START_DATE
13404 ,SCHEDULED_FINISH_DATE
13405 ,OBLIGATION_START_DATE
13406 ,OBLIGATION_FINISH_DATE
13407 ,ACTUAL_START_DATE
13408 ,ACTUAL_FINISH_DATE
13409 ,ESTIMATED_START_DATE
13410 ,ESTIMATED_FINISH_DATE
13411 ,DURATION
13412 ,EARLY_START_DATE
13413 ,EARLY_FINISH_DATE
13414 ,LATE_START_DATE
13415 ,LATE_FINISH_DATE
13416 ,CALENDAR_ID
13417 ,MILESTONE_FLAG
13418 ,CRITICAL_FLAG
13419 ,RECORD_VERSION_NUMBER
13420 ,LAST_UPDATE_LOGIN
13421 ,WQ_PLANNED_QUANTITY
13422 ,PLANNED_EFFORT
13423 ,ACTUAL_DURATION
13424 ,ESTIMATED_DURATION
13425 ,ATTRIBUTE_CATEGORY
13426 ,ATTRIBUTE1
13427 ,ATTRIBUTE2
13428 ,ATTRIBUTE3
13429 ,ATTRIBUTE4
13430 ,ATTRIBUTE5
13431 ,ATTRIBUTE6
13432 ,ATTRIBUTE7
13433 ,ATTRIBUTE8
13434 ,ATTRIBUTE9
13435 ,ATTRIBUTE10
13436 ,ATTRIBUTE11
13437 ,ATTRIBUTE12
13438 ,ATTRIBUTE13
13439 ,ATTRIBUTE14
13440 ,ATTRIBUTE15
13441 ,source_object_id
13442 ,source_object_type
13443 ,CONSTRAINT_TYPE_CODE
13444 ,CONSTRAINT_DATE
13445 ,FREE_SLACK
13446 ,TOTAL_SLACK
13447 ,EFFORT_DRIVEN_FLAG
13448 ,LEVEL_ASSIGNMENTS_FLAG
13449 ,EXT_ACT_DURATION
13450 ,EXT_REMAIN_DURATION
13451 ,EXT_SCH_DURATION
13452 ,DEF_SCH_TOOL_TSK_TYPE_CODE -- Fix For Bug # 4321287.
13453 )
13454 SELECT
13455 pa_proj_elem_ver_schedule_s.nextval
13456 ,ppev1.ELEMENT_VERSION_ID
13457 ,l_PROJECT_ID
13458 ,ppev1.PROJ_ELEMENT_ID
13459 ,SYSDATE
13460 ,l_user_id
13461 ,SYSDATE
13462 ,l_user_id
13463 ,ppevs.SCHEDULED_START_DATE
13464 ,ppevs.SCHEDULED_FINISH_DATE
13465 ,ppevs.OBLIGATION_START_DATE
13466 ,ppevs.OBLIGATION_FINISH_DATE
13467 ,ppevs.ACTUAL_START_DATE
13468 ,ppevs.ACTUAL_FINISH_DATE
13469 ,ppevs.ESTIMATED_START_DATE
13470 ,ppevs.ESTIMATED_FINISH_DATE
13471 ,ppevs.DURATION
13472 ,ppevs.EARLY_START_DATE
13473 ,ppevs.EARLY_FINISH_DATE
13474 ,ppevs.LATE_START_DATE
13475 ,ppevs.LATE_FINISH_DATE
13476 ,ppevs.CALENDAR_ID
13477 ,ppevs.MILESTONE_FLAG
13478 ,ppevs.CRITICAL_FLAG
13479 ,ppevs.RECORD_VERSION_NUMBER
13480 ,l_login_id
13481 ,ppevs.WQ_PLANNED_QUANTITY
13482 ,ppevs.PLANNED_EFFORT
13483 ,ppevs.ACTUAL_DURATION
13484 ,ppevs.ESTIMATED_DURATION
13485 ,ppevs.ATTRIBUTE_CATEGORY
13486 ,ppevs.ATTRIBUTE1
13487 ,ppevs.ATTRIBUTE2
13488 ,ppevs.ATTRIBUTE3
13489 ,ppevs.ATTRIBUTE4
13490 ,ppevs.ATTRIBUTE5
13491 ,ppevs.ATTRIBUTE6
13492 ,ppevs.ATTRIBUTE7
13493 ,ppevs.ATTRIBUTE8
13494 ,ppevs.ATTRIBUTE9
13495 ,ppevs.ATTRIBUTE10
13496 ,ppevs.ATTRIBUTE11
13497 ,ppevs.ATTRIBUTE12
13498 ,ppevs.ATTRIBUTE13
13499 ,ppevs.ATTRIBUTE14
13500 ,ppevs.ATTRIBUTE15
13501 ,l_PROJECT_ID
13502 ,'PA_PROJECTS'
13503 ,ppevs.CONSTRAINT_TYPE_CODE
13504 ,ppevs.CONSTRAINT_DATE
13505 ,ppevs.FREE_SLACK
13506 ,ppevs.TOTAL_SLACK
13507 ,ppevs.EFFORT_DRIVEN_FLAG
13508 ,ppevs.LEVEL_ASSIGNMENTS_FLAG
13509 ,ppevs.EXT_ACT_DURATION
13510 ,ppevs.EXT_REMAIN_DURATION
13511 ,ppevs.EXT_SCH_DURATION
13512 ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE -- Fix For Bug # 4321287.
13513 FROM pa_proj_elem_ver_schedule ppevs,
13514 pa_proj_element_versions ppev1
13515 where ppev1.attribute15 = ppevs.element_version_id
13516 and ppevs.project_id = l_project_id
13517 and ppev1.project_id = l_project_id
13518 and ppev1.parent_structure_version_id = l_new_struct_ver_id
13519 and ppev1.object_type = 'PA_TASKS';
13520
13521 -----------------------------------------FP_M Changes : Begin
13522 -- Refer to tracking bug 3305199
13523 --
13524 Declare
13525 /* Bug #: 3305199 SMukka */
13526 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13527 /* Old_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
13528 /* New_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
13529 Old_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13530 New_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13531 Begin
13532 Select Element_Version_ID, attribute15 BULK COLLECT
13533 INTO New_Versions_Tab, Old_Versions_Tab
13534 From PA_Proj_Element_Versions
13535 Where Project_ID = l_project_id
13536 AND parent_structure_version_id = l_new_struct_ver_id;
13537
13538 PA_Relationship_Pvt.Copy_Intra_Dependency (
13539 P_Source_Ver_Tbl => Old_Versions_Tab,
13540 P_Destin_Ver_Tbl => New_Versions_Tab,
13541 X_Return_Status => X_Return_Status,
13542 X_Msg_Count => X_Msg_Count,
13543 X_Msg_Data => X_Msg_Data
13544 );
13545
13546 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13547 RAISE FND_API.G_EXC_ERROR;
13548 END IF;
13549
13550 PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
13551 P_Source_Ver_Tbl => Old_Versions_Tab,
13552 P_Destin_Ver_Tbl => New_Versions_Tab,
13553 X_Return_Status => X_Return_Status,
13554 X_Msg_Count => X_Msg_Count,
13555 X_Msg_Data => X_Msg_Data
13556 );
13557 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13558 RAISE FND_API.G_EXC_ERROR;
13559 END IF;
13560 End;
13561 /* SMukka 01-Mar-04 Bug No. 3450684 */
13562 /* Added call to PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass */
13563 /* API to copy all the out going sub project assoication */
13564
13565 -- Begin fix for Bug # 4530436.
13566
13567 -- The out going sub-project association links will not copied into the new structure version
13568 -- if the new structure version created is a working structure version.
13569
13570 if
13571 (pa_project_structure_utils.Check_Struc_Ver_Published(l_project_id, l_new_struct_ver_id) = 'Y')
13572 then
13573
13574 -- End fix for Bug # 4530436.
13575
13576 PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
13577 p_validate_only => p_validate_only,
13578 p_validation_level => p_validation_level,
13579 p_calling_module => p_calling_module,
13580 p_debug_mode => p_debug_mode,
13581 p_max_msg_count => p_max_msg_count,
13582 p_commit => p_commit,
13583 p_src_str_version_id => p_structure_version_id,
13584 p_dest_str_version_id => l_new_struct_ver_id, -- Destination Str version id can be of published str also
13585 x_return_status => X_Return_Status,
13586 x_msg_count => X_Msg_Count,
13587 x_msg_data => X_Msg_Data);
13588 IF (X_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
13589 x_msg_count := FND_MSG_PUB.count_msg;
13590 IF x_msg_count = 1 then
13591 pa_interface_utils_pub.get_messages
13592 (p_encoded => FND_API.G_TRUE,
13593 p_msg_index => 1,
13594 p_msg_count => l_msg_count,
13595 p_msg_data => l_msg_data,
13596 p_data => l_data,
13597 p_msg_index_out => l_msg_index_out);
13598 x_msg_data := l_data;
13599 END IF;
13600 raise FND_API.G_EXC_ERROR;
13601 END IF;
13602
13603 end if; -- Fix for Bug # 4530436.
13604
13605 --3755117 for copying mapping
13606 BEGIN
13607 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
13608 p_context => 'CREATE_WORKING_VERSION'
13609 ,p_src_project_id => l_project_id
13610 ,p_dest_project_id => l_project_id
13611 ,p_src_str_version_id => p_structure_version_id
13612 ,p_dest_str_version_id => l_new_struct_ver_id
13613 ,x_return_status => x_return_status
13614 ,x_msg_count => x_msg_count
13615 ,x_msg_data => x_msg_data
13616 );
13617
13618 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13619 RAISE FND_API.G_EXC_ERROR;
13620 END IF;
13621 EXCEPTION
13622 WHEN OTHERS THEN
13623 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
13624 p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13625 p_error_text => SUBSTRB('PA_PROJ_STRUC_MAPPING_PUB.copy_mapping:'||SQLERRM,1,240));
13626 RAISE FND_API.G_EXC_ERROR;
13627 END;
13628
13629 -- Changes added by skannoji
13630 -- Added code for doosan customer
13631 IF (l_wp_struc = 'Y') THEN
13632 Declare
13633 /* Bug #: 3305199 SMukka */
13634 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13635 /* src_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
13636 /* dest_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
13637 src_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13638 dest_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13639 Begin
13640 src_versions_tab.extend(1); /* Venky */
13641 dest_versions_tab.extend(1); /* Venky */
13642 src_versions_tab(1) := p_structure_version_id;
13643 dest_versions_tab(1) := l_new_struct_ver_id;
13644
13645 -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
13646 /*Smukka Bug No. 3474141 Date 03/01/2004 */
13647 /*moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block */
13648 BEGIN
13649 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
13650 (
13651 p_source_project_id => l_project_id
13652 ,p_target_project_id => l_project_id
13653 ,p_src_sv_ids_tbl => src_Versions_Tab /* Workplan version id tbl */
13654 ,p_target_sv_ids_tbl => dest_Versions_Tab /* Workplan version id tbl */
13655 ,p_copy_mode => 'V' --bug 5118313
13656 ,x_return_status => x_return_status
13657 ,x_msg_count => x_msg_count
13658 ,x_Msg_data => x_msg_data
13659 );
13660 EXCEPTION
13661 WHEN OTHERS THEN
13662 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
13663 p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13664 p_error_text => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
13665 RAISE FND_API.G_EXC_ERROR;
13666 END;
13667 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13668 RAISE FND_API.G_EXC_ERROR;
13669 END IF;
13670 End;
13671 END IF;
13672 -- till here by skannoji
13673
13674 -----------------------------------------FP_M Changes : End
13675
13676 UPDATE pa_proj_element_versions ppevs1
13677 SET attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
13678 where ppevs2.project_id = l_project_id
13679 and parent_structure_version_id = p_structure_version_id
13680 and ppevs2.element_version_id = ppevs1.attribute15
13681 )
13682 WHERE project_id = l_project_id
13683 AND parent_structure_version_id = l_new_struct_ver_id
13684 ;
13685
13686
13687 x_new_struct_ver_id := l_new_struct_ver_id;
13688 x_return_status := FND_API.G_RET_STS_SUCCESS;
13689
13690 IF (p_commit = FND_API.G_TRUE) THEN
13691 COMMIT;
13692 END IF;
13693
13694 IF (p_debug_mode = 'Y') THEN
13695 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK END');
13696 END IF;
13697
13698 EXCEPTION
13699 when FND_API.G_EXC_ERROR then
13700 if p_commit = FND_API.G_TRUE then
13701 rollback to copy_structure_version_pvt_blk;
13702 end if;
13703 x_return_status := FND_API.G_RET_STS_ERROR;
13704 when FND_API.G_EXC_UNEXPECTED_ERROR then
13705 if p_commit = FND_API.G_TRUE then
13706 rollback to copy_structure_version_pvt_blk;
13707 end if;
13708 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13709 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
13710 p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13711 p_error_text => SUBSTRB(SQLERRM,1,240));
13712 when OTHERS then
13713 if p_commit = FND_API.G_TRUE then
13714 rollback to copy_structure_version_pvt_blk;
13715 end if;
13716 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13717 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
13718 p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13719 p_error_text => SUBSTRB(SQLERRM,1,240));
13720 raise;
13721 END COPY_STRUCTURE_VERSION_BULK;
13722
13723 procedure update_sch_dirty_flag(
13724 p_project_id IN NUMBER := NULL
13725 ,p_structure_version_id IN NUMBER
13726 ,p_dirty_flag IN VARCHAR2 := 'N'
13727 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13728 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13729 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13730 )
13731 IS
13732 l_dirty_flag VARCHAR2(1);
13733 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
13734
13735 --Bug No 3634334
13736 --Commented the following query for performance reason and rewritten the same.
13737 --Getting the project_id from pa_proj_element_versions table instead of getting
13738 --it from pa_proj_elem_ver_structure table, in this optimizer will be using the
13739 --unique index on element_version_id and functionally the process is fetching
13740 --project_id
13741 /* CURSOR get_proj_id(cp_structure_version_id NUMBER) IS
13742 SELECT project_id
13743 FROM pa_proj_elem_ver_structure
13744 WHERE element_version_id = cp_structure_version_id;*/
13745
13746 CURSOR get_proj_id(cp_structure_version_id NUMBER) IS
13747 SELECT project_id
13748 FROM pa_proj_element_versions
13749 WHERE element_version_id = cp_structure_version_id;
13750 l_proj_id NUMBER;
13751 BEGIN
13752
13753 /* IF (p_dirty_flag = 'N') THEN
13754 l_dirty_flag := 'N';
13755 ELSE
13756 l_dirty_flag := 'Y';
13757 END IF;*/
13758
13759 IF (p_dirty_flag IS NULL) THEN
13760 l_dirty_flag := 'N';
13761 ELSE
13762 l_dirty_flag := p_dirty_flag;
13763 END IF;
13764 --
13765 IF p_project_id IS NULL THEN
13766 OPEN get_proj_id(p_structure_version_id);
13767 FETCH get_proj_id INTO l_proj_id;
13768 CLOSE get_proj_id;
13769 --
13770 UPDATE pa_proj_elem_ver_structure
13771 SET SCHEDULE_DIRTY_FLAG = l_dirty_flag
13772 WHERE element_version_id = p_structure_version_id
13773 AND project_id = l_proj_id;
13774 ELSE
13775 UPDATE pa_proj_elem_ver_structure
13776 SET SCHEDULE_DIRTY_FLAG = l_dirty_flag
13777 WHERE element_version_id = p_structure_version_id
13778 AND project_id = p_project_id;
13779 END IF;
13780
13781 x_return_status := l_return_status;
13782 EXCEPTION
13783 WHEN OTHERS THEN
13784 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13785 x_msg_count := FND_MSG_PUB.count_msg;
13786 --put message
13787 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
13788 p_procedure_name => 'update_sch_dirty_flag',
13789 p_error_text => SUBSTRB(SQLERRM,1,240));
13790 RAISE;
13791 END update_sch_dirty_flag;
13792
13793 --bug 3305199
13794 --Please refer to update_structures_setup_old for old code
13795 PROCEDURE update_structures_setup_attr
13796 ( p_api_version IN NUMBER := 1.0
13797 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
13798 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
13799 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
13800 ,p_validation_level IN VARCHAR2 := 100
13801 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
13802 ,p_debug_mode IN VARCHAR2 := 'N'
13803 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13804 ,p_project_id IN NUMBER
13805 ,p_workplan_enabled_flag IN VARCHAR2
13806 ,p_financial_enabled_flag IN VARCHAR2
13807 ,p_sharing_enabled_flag IN VARCHAR2
13808 --FP M changes bug 3301192
13809 ,p_deliverables_enabled_flag IN VARCHAR2
13810 ,p_sharing_option_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13811 --End FP M changes bug 3301192
13812 ,p_sys_program_flag IN varchar2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13813 ,p_allow_multi_prog_rollup IN varchar2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13814 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13815 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13816 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13817 )
13818 IS
13819 l_ret_stat VARCHAR2(1);
13820 l_err_msg_code VARCHAR2(250);
13821 l_suffix VARCHAR2(80);
13822 l_name VARCHAR2(240);
13823 l_append VARCHAR2(10) := ': ';
13824 l_return_status VARCHAR2(1);
13825 l_msg_count NUMBER;
13826 l_msg_data VARCHAR2(250);
13827 l_structure_id NUMBER;
13828 l_structure_version_id NUMBER;
13829 l_template_flag VARCHAR2(1);
13830 l_status_code VARCHAR2(30);
13831 l_baseline_flag VARCHAR2(1);
13832 l_latest_eff_pub_flag VARCHAR2(1);
13833 l_effective_date DATE;
13834 l_wp_attr_rvn NUMBER;
13835 l_rowid VARCHAR2(255);
13836 l_keep_structure_ver_id NUMBER;
13837 l_del_struc_ver_id NUMBER;
13838 l_struc_ver_rvn NUMBER;
13839 l_pev_structure_id NUMBER;
13840 l_pev_schedule_id NUMBER;
13841 l_struc_ver_attr_rvn NUMBER;
13842 l_struc_type_id NUMBER;
13843 l_proj_structure_type_id NUMBER;
13844 l_task_id NUMBER;
13845 l_element_version_id NUMBER;
13846 l_start_date DATE;
13847 l_completion_date DATE;
13848 l_object_type VARCHAR2(30);
13849 l_task_ver_id NUMBER;
13850 /* Bug 2790703 Begin */
13851 -- l_task_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13852 l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
13853 l_index number :=0 ;
13854 /* Bug 2790703 End */
13855
13856 l_proj_start_Date DATE;
13857 l_proj_completion_date DATE;
13858 l_proj_prog_attr_id NUMBER;
13859
13860 -- FP.M Changes below
13861 l_sys_program_flag PA_PROJECTS_ALL.sys_program_flag%TYPE;
13862 l_allow_multi_program_rollup PA_PROJECTS_ALL.allow_multi_program_rollup%TYPE;
13863 l_proj_sys_program_flag PA_PROJECTS_ALL.sys_program_flag%TYPE;
13864 l_proj_allow_program_rollup PA_PROJECTS_ALL.allow_multi_program_rollup%TYPE;
13865 l_flag VARCHAR2(1);
13866
13867 -- NYU
13868 l_del_trans_exist VARCHAR2(1);
13869
13870 CURSOR get_project_info IS
13871 select name, target_start_date, target_finish_date, sys_program_flag, allow_multi_program_rollup
13872 from pa_projects_all
13873 where project_id = p_project_id;
13874
13875 --bug 2843569: added record_version_number
13876 CURSOR get_template_flag IS
13877 select template_flag, record_version_number
13878 from pa_projects_all
13879 where project_id = p_project_id;
13880
13881 CURSOR get_wp_attr_rvn IS
13882 select b.proj_element_id, a.record_version_number
13883 from pa_proj_workplan_attr a,
13884 pa_proj_elements b,
13885 pa_proj_structure_types c,
13886 pa_structure_types d
13887 where a.project_id = b.project_id
13888 and a.proj_element_id = b.proj_element_id
13889 and b.project_id = p_project_id
13890 and b.proj_element_id = c.proj_element_id
13891 and c.structure_type_id = d.structure_type_id
13892 and d.structure_type_class_code = 'WORKPLAN';
13893
13894 cursor sel_wp_struct_type(c_structure_id NUMBER) IS
13895 select a.rowid
13896 from pa_proj_structure_types a,
13897 pa_structure_types b
13898 where a.proj_element_id = c_structure_id
13899 and a.structure_type_id = b.structure_type_id
13900 and b.structure_type_class_code = 'WORKPLAN';
13901
13902 cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
13903 select element_version_id
13904 from pa_proj_elem_ver_structure
13905 where proj_element_id = c_structure_id
13906 and project_id = p_project_id
13907 and status_code = 'STRUCTURE_PUBLISHED'
13908 and LATEST_EFF_PUBLISHED_FLAG = 'Y';
13909
13910 --bug 4054587, replace literal with bind variable
13911 l_wp_structure_code VARCHAR2(10) := 'WORKPLAN';
13912 cursor sel_wp_structure_id IS
13913 select a.proj_element_id
13914 from pa_proj_elements a,
13915 pa_proj_structure_types b,
13916 pa_structure_types c
13917 where a.project_id = p_project_id
13918 and a.object_type = 'PA_STRUCTURES'
13919 and a.proj_element_id = b.proj_element_id
13920 and b.structure_type_id = c.structure_type_id
13921 --and c.structure_type_class_code = 'WORKPLAN';
13922 and c.structure_type_class_code = l_wp_structure_code;
13923
13924 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
13925 select b.element_version_id, b.record_version_number
13926 from pa_proj_element_versions a,
13927 pa_proj_element_versions b
13928 where a.element_version_id = c_keep_struc_ver_id
13929 and a.project_id = b.project_id
13930 and a.proj_element_id = b.proj_element_id
13931 and b.element_version_id <> c_keep_struc_ver_id
13932 and b.object_type = 'PA_STRUCTURES';
13933
13934 cursor sel_all_wp_structure_ver(c_struc_id NUMBER) IS
13935 select a.element_version_id, a.record_version_number
13936 from pa_proj_element_versions a,
13937 pa_proj_elements b
13938 where a.proj_element_id = b.proj_element_id
13939 and a.project_id = b.project_id
13940 and b.proj_element_id = c_struc_id;
13941
13942 cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
13943 select PEV_STRUCTURE_ID, record_version_number
13944 from pa_proj_elem_ver_structure
13945 where project_id = p_project_id
13946 and element_version_id = c_struc_ver_id;
13947
13948 cursor sel_proj_workplan_attr(c_struc_id NUMBER) is
13949 select *
13950 from pa_proj_workplan_attr
13951 where proj_element_id = c_struc_id;
13952 l_proj_workplan_attr_rec sel_proj_workplan_attr%ROWTYPE;
13953
13954 cursor sel_proj_progress_attr(c_struc_id NUMBER) IS
13955 select *
13956 from pa_proj_progress_attr
13957 where project_id = p_project_id
13958 and object_type = 'PA_STRUCTURES'
13959 and object_id = c_struc_id;
13960 l_proj_progress_attr_rec sel_proj_progress_attr%ROWTYPE;
13961
13962 --bug 4054587, replace literal with bind variable
13963 l_fin_structure_code VARCHAR2(10) := 'FINANCIAL';
13964 cursor sel_fin_structure_id IS
13965 select a.proj_element_id
13966 from pa_proj_elements a,
13967 pa_proj_structure_types b,
13968 pa_structure_types c
13969 where a.project_id = p_project_id
13970 and a.object_type = 'PA_STRUCTURES'
13971 and a.proj_element_id = b.proj_element_id
13972 and b.structure_type_id = c.structure_type_id
13973 --and c.structure_type_class_code = 'FINANCIAL';
13974 and c.structure_type_class_code = l_fin_structure_code;
13975
13976 CURSOR sel_struc_type_id IS
13977 select structure_type_id
13978 from pa_structure_types
13979 where structure_type_class_code = 'WORKPLAN';
13980
13981 cursor sel_struc_ver(c_structure_id NUMBER) IS
13982 select element_version_id
13983 from pa_proj_element_versions
13984 where project_id = p_project_id
13985 and proj_element_id = c_structure_id
13986 and object_type = 'PA_STRUCTURES';
13987
13988 --hsiu: commented for performance
13989 -- cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
13990 -- select object_type, proj_element_id, element_version_id
13991 -- from pa_proj_element_versions
13992 -- where parent_structure_version_id = c_struc_ver_id;
13993 cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
13994 select pev.object_type, pev.proj_element_id, pev.element_version_id
13995 from pa_proj_element_versions pev, pa_object_relationships rel
13996 where pev.parent_structure_version_id = c_struc_ver_id
13997 and rel.object_id_to1 = pev.element_version_id
13998 and rel.relationship_type = 'S'
13999 and NOT EXISTS (
14000 select 1
14001 from pa_object_Relationships
14002 where object_id_from1 = pev.element_version_id
14003 and relationship_type = 'S'
14004 );
14005
14006
14007 cursor sel_task_dates(c_task_id NUMBER) IS
14008 select start_date, completion_date
14009 from pa_tasks
14010 where task_id = c_task_id;
14011
14012 --hsiu added for bug 2634029
14013 cursor sel_target_dates IS
14014 select target_start_date, target_finish_date, calendar_id
14015 from pa_projects_all
14016 where project_id = p_project_id;
14017
14018 CURSOR get_top_tasks(c_structure_version_id NUMBER) IS
14019 select v.element_version_id
14020 from pa_proj_element_versions v,
14021 pa_object_relationships r
14022 where v.element_version_id = r.object_id_to1
14023 and r.object_id_from1 = c_structure_version_id
14024 and r.object_type_from = 'PA_STRUCTURES';
14025
14026 --bug 2843569
14027 CURSOR get_scheduled_dates(c_project_Id NUMBER,
14028 c_element_version_id NUMBER) IS
14029 select a.scheduled_start_date, a.scheduled_finish_date
14030 from pa_proj_elem_ver_schedule a
14031 where a.project_id = c_project_id
14032 and a.element_version_id = c_element_version_id;
14033 l_get_sch_dates_cur get_scheduled_dates%ROWTYPE;
14034 l_proj_rec_ver_num NUMBER;
14035 --end bug 2843569
14036
14037 l_target_start_date DATE;
14038 l_target_finish_date DATE;
14039 l_calendar_id NUMBER;
14040 --end changes for bug 2634029
14041
14042 --bug 3010538
14043 l_task_weight_basis_code VARCHAR2(30);
14044 l_update_proc_wbs_flag VARCHAR2(1);
14045 --end bug 3010538
14046
14047 l_wp_name VARCHAR2(240);
14048
14049 CURSOR sel_fin_struc_type_id IS
14050 select structure_type_id
14051 from pa_structure_types
14052 where structure_type_class_code = 'FINANCIAL';
14053 l_fin_struc_type_id NUMBER;
14054 l_del_name VARCHAR2(240);
14055 l_wp_enabled VARCHAR2(1);
14056 l_fin_enabled VARCHAR2(1);
14057 l_delv_enabled VARCHAR2(1);
14058 l_share_code VARCHAR2(30);
14059 l_new_share_code VARCHAR2(30);
14060
14061 l_struct_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
14062
14063 /* Bug # 3420093. Progress Management changes. */
14064
14065 l_proj_progress_attr_id NUMBER;
14066
14067 /* Bug # 3420093. Progress Management changes. */
14068
14069 -- Begin fix for Bug # 4426392.
14070
14071 cursor cur_program (c_project_id NUMBER) is
14072 select 'Y'
14073 from pa_object_relationships por
14074 where (por.object_id_from2 = c_project_id
14075 or por.object_id_to2 = c_project_id)
14076 and por.relationship_type in ('LW', 'LF');
14077
14078 l_program VARCHAR2(1) := null;
14079
14080 cursor cur_links (c_project_id NUMBER) is
14081 -- Select links from the working structure version of all parent projects
14082 -- with sharing enabled to the given project.
14083 select por1.object_relationship_id obj_rel_id
14084 , por1.object_id_from2 src_proj_id
14085 , por2.object_id_from1 task_ver_id
14086 , c_project_id dest_proj_id
14087 , ppev.parent_structure_version_id src_str_ver_id
14088 , por1.record_version_number rec_ver_number
14089 from pa_object_relationships por1
14090 , pa_object_relationships por2
14091 , pa_projects_all ppa
14092 , pa_proj_element_versions ppev
14093 , pa_proj_elem_ver_structure ppevs
14094 where por1.object_id_to2 = c_project_id
14095 and por1.relationship_type in ('LW', 'LF')
14096 and por1.object_id_from1 = por2.object_id_to1
14097 and por2.relationship_type = 'S'
14098 and por1.object_id_from2 = ppa.project_id
14099 and ppa.structure_sharing_code in ('SHARE_FULL', 'SHARE_PARTIAL')
14100 and por2.object_id_from1 = ppev.element_version_id
14101 -- Bug Fix 4868867
14102 -- Ram Namburi
14103 -- adding the following additional project id join to avoid the Full Table Scan on
14104 -- pa_proj_elem_ver_structure table and to use N1.
14105 and ppev.project_id = ppevs.project_id
14106 and ppev.parent_structure_version_id = ppevs.element_version_id
14107 and ppevs.current_working_flag = 'Y'
14108 union
14109 -- Select links from the working structure version of the given project to all child projects
14110 -- with sharing enabled.
14111 select por1.object_relationship_id obj_rel_id
14112 , c_project_id src_proj_id
14113 , por2.object_id_from1 task_ver_id
14114 , por1.object_id_to2 dest_proj_id
14115 , ppev.parent_structure_version_id src_str_ver_id
14116 , por1.record_version_number rec_ver_number
14117 from pa_object_relationships por1
14118 , pa_object_relationships por2
14119 , pa_projects_all ppa
14120 , pa_proj_element_versions ppev
14121 , pa_proj_elem_ver_structure ppevs
14122 where por1.object_id_from2 = c_project_id
14123 and por1.relationship_type in ('LW', 'LF')
14124 and por1.object_id_from1 = por2.object_id_to1
14125 and por2.relationship_type = 'S'
14126 and por1.object_id_to2 = ppa.project_id
14127 and ppa.structure_sharing_code in ('SHARE_FULL', 'SHARE_PARTIAL')
14128 and por2.object_id_from1 = ppev.element_version_id
14129 -- Bug Fix 4868867
14130 -- Ram Namburi
14131 -- adding the following additional project id join to avoid the Full Table Scan on
14132 -- pa_proj_elem_ver_structure table and to use N1.
14133 and ppev.project_id = ppevs.project_id
14134 and ppev.parent_structure_version_id = ppevs.element_version_id
14135 and ppevs.current_working_flag = 'Y';
14136
14137 l_cur_links_rec cur_links%rowtype;
14138
14139 l_comment VARCHAR2(30) := null;
14140
14141 l_dest_proj_name VARCHAR2(30) := null;
14142
14143 -- End fix for Bug # 4426392.
14144
14145 BEGIN
14146 IF (p_debug_mode = 'Y') THEN
14147 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr');
14148 END IF;
14149
14150 IF (p_commit = FND_API.G_TRUE) THEN
14151 savepoint update_struc_setup_attr_pvt;
14152 END IF;
14153
14154 IF (p_debug_mode = 'Y') THEN
14155 pa_debug.debug('Performing validations');
14156 END IF;
14157
14158 l_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_workplan_enabled(p_project_id);
14159 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_financial_enabled(p_project_id);
14160 l_share_code := PA_PROJECT_STRUCTURE_UTILS.Get_Structure_sharing_code(p_project_id);
14161 l_delv_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_deliverable_enabled(p_project_id);
14162
14163
14164 --get template flag
14165 OPEN get_template_flag;
14166 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
14167 CLOSE get_template_flag;
14168
14169 --get project name
14170 OPEN get_project_info;
14171 FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date, l_proj_sys_program_flag, l_proj_allow_program_rollup;
14172 CLOSE get_project_info;
14173
14174 -- Begin fix for Bug # 4426392.
14175
14176 -- If a project is part of a program then the user cannot disable its project structures
14177 -- or change its structure integration option from split tp shared or vice-versa.
14178
14179 -- Please ensure that this code s always the first check in this API.
14180
14181 open cur_program(p_project_id);
14182 fetch cur_program into l_program;
14183 close cur_program;
14184
14185 if (
14186 (nvl(l_program,'N') = 'Y')
14187 and (((l_wp_enabled = 'Y') and (p_workplan_enabled_flag = 'N'))
14188 or ((l_fin_enabled = 'Y') and (p_financial_enabled_flag = 'N'))
14189 or ((l_share_code in ('SHARE_FULL','SHARE_PARTIAL'))
14190 and (p_sharing_option_code in ('SPLIT_MAPPING','SPLIT_NO_MAPPING')))
14191 or ((l_share_code in ('SPLIT_MAPPING','SPLIT_NO_MAPPING'))
14192 and (p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL'))))
14193 ) then
14194
14195 PA_UTILS.ADD_MESSAGE('PA', 'PA_WP_PROG_CANT_CHG_STR');
14196
14197 RAISE FND_API.G_EXC_ERROR;
14198
14199 end if;
14200
14201 -- End fix for Bug # 4426392.
14202
14203 --check if ok to enable workplan
14204 If (l_wp_enabled <> p_workplan_enabled_flag AND p_workplan_enabled_flag = 'Y') THEN
14205 PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
14206 l_ret_stat,
14207 l_err_msg_code);
14208 IF (l_ret_stat = 'N') THEN
14209 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14210 x_msg_data := l_err_msg_code;
14211 RAISE FND_API.G_EXC_ERROR;
14212 END IF;
14213 END IF;
14214
14215 --check if ok to disable workplan
14216 IF (l_wp_enabled <> p_workplan_enabled_flag AND p_workplan_enabled_flag = 'N') THEN
14217 PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
14218 l_ret_stat,
14219 l_err_msg_code);
14220 IF (l_ret_stat = 'N') THEN
14221 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14222 x_msg_data := l_err_msg_code;
14223 RAISE FND_API.G_EXC_ERROR;
14224 END IF;
14225 END IF;
14226
14227 --check if ok to share
14228 IF (l_share_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING') and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
14229 PA_PROJECT_STRUCTURE_UTILS.check_sharing_on_ok(p_project_id,
14230 l_ret_stat,
14231 l_err_msg_code);
14232 IF (l_ret_stat = 'N') THEN
14233 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14234 x_msg_data := l_err_msg_code;
14235 RAISE FND_API.G_EXC_ERROR;
14236 END IF;
14237 END IF;
14238
14239 --check if ok to split
14240 IF (l_share_code IN ('SHARE_FULL','SHARE_PARTIAL') and p_sharing_option_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING')) THEN
14241 PA_PROJECT_STRUCTURE_UTILS.check_sharing_off_ok(p_project_id,
14242 l_ret_stat,
14243 l_err_msg_code);
14244 IF (l_ret_stat = 'N') THEN
14245 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14246 x_msg_data := l_err_msg_code;
14247 RAISE FND_API.G_EXC_ERROR;
14248 END IF;
14249 END IF;
14250
14251 IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
14252 l_proj_completion_date := l_proj_start_date;
14253 ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
14254 l_proj_completion_date := sysdate;
14255 l_proj_start_date := sysdate;
14256 END IF;
14257
14258 --get suffix
14259 select meaning
14260 into l_suffix
14261 from pa_lookups
14262 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
14263 and lookup_code = 'WORKPLAN';
14264 --get workplan name
14265 l_wp_name := substrb(l_name||l_append||l_suffix, 1, 240);
14266
14267 --check for
14268 IF (l_wp_enabled = 'N' and l_fin_enabled = 'N') THEN
14269 --both currently disabled
14270 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
14271 --disabled both
14272 NULL;
14273 ELSIF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
14274 --disable workplan (enable financial)
14275 --create financial structure API
14276 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14277 (p_validate_only => FND_API.G_FALSE
14278 ,p_project_id => p_project_id
14279 ,p_structure_number => l_name
14280 ,p_structure_name => l_name
14281 ,p_calling_flag => 'FINANCIAL'
14282 ,x_structure_id => l_structure_id
14283 ,x_return_status => l_return_status
14284 ,x_msg_count => l_msg_count
14285 ,x_msg_data => l_msg_data);
14286
14287 --Check if there is any error.
14288 l_msg_count := FND_MSG_PUB.count_msg;
14289 IF l_msg_count > 0 THEN
14290 x_msg_count := l_msg_count;
14291 IF x_msg_count = 1 THEN
14292 x_msg_data := l_msg_data;
14293 END IF;
14294 RAISE FND_API.G_EXC_ERROR;
14295 END IF;
14296
14297 --create row in pa_proj_workplan_attr
14298 PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
14299 (p_validate_only => FND_API.G_FALSE
14300 ,p_project_id => p_project_id
14301 ,p_proj_element_id => l_structure_id
14302 ,x_return_status => l_return_status
14303 ,x_msg_count => l_msg_count
14304 ,x_msg_data => l_msg_data);
14305
14306 --Check if there is any error.
14307 l_msg_count := FND_MSG_PUB.count_msg;
14308 IF l_msg_count > 0 THEN
14309 x_msg_count := l_msg_count;
14310 IF x_msg_count = 1 THEN
14311 x_msg_data := l_msg_data;
14312 END IF;
14313 RAISE FND_API.G_EXC_ERROR;
14314 END IF;
14315
14316 --create structure version
14317 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14318 (p_validate_only => FND_API.G_FALSE
14319 ,p_structure_id => l_structure_id
14320 ,x_structure_version_id => l_structure_version_id
14321 ,x_return_status => l_return_status
14322 ,x_msg_count => l_msg_count
14323 ,x_msg_data => l_msg_data );
14324
14325 --Check if there is any error.
14326 l_msg_count := FND_MSG_PUB.count_msg;
14327 IF l_msg_count > 0 THEN
14328 x_msg_count := l_msg_count;
14329 IF x_msg_count = 1 THEN
14330 x_msg_data := l_msg_data;
14331 END IF;
14332 RAISE FND_API.G_EXC_ERROR;
14333 END IF;
14334
14335 IF (l_template_flag = 'Y') THEN
14336 l_status_code := 'STRUCTURE_WORKING';
14337 l_baseline_flag := 'N';
14338 l_latest_eff_pub_flag := 'N';
14339 l_effective_date := NULL;
14340 ELSE
14341 l_status_code := 'STRUCTURE_PUBLISHED';
14342 l_baseline_flag := 'N';
14343 l_latest_eff_pub_flag := 'Y';
14344 l_effective_date := sysdate;
14345 END IF;
14346
14347 --create structure version
14348 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14349 (p_validate_only => FND_API.G_FALSE
14350 ,p_structure_version_id => l_structure_version_id
14351 ,p_structure_version_name => l_name
14352 ,p_structure_version_desc => NULL
14353 ,p_effective_date => l_effective_date
14354 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
14355 ,p_locked_status_code => 'UNLOCKED'
14356 ,p_struct_version_status_code => l_status_code
14357 ,p_baseline_current_flag => l_baseline_flag
14358 ,p_baseline_original_flag => 'N'
14359 ,x_pev_structure_id => l_pev_structure_id
14360 ,x_return_status => l_return_status
14361 ,x_msg_count => l_msg_count
14362 ,x_msg_data => l_msg_data );
14363
14364 --Check if there is any error.
14365 l_msg_count := FND_MSG_PUB.count_msg;
14366 IF l_msg_count > 0 THEN
14367 x_msg_count := l_msg_count;
14368 IF x_msg_count = 1 THEN
14369 x_msg_data := l_msg_data;
14370 END IF;
14371 RAISE FND_API.G_EXC_ERROR;
14372 END IF;
14373
14374 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
14375 --disable financial (enable workplan)
14376 --create workplan structure
14377 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14378 (p_validate_only => FND_API.G_FALSE
14379 ,p_project_id => p_project_id
14380 ,p_structure_number => l_wp_name
14381 ,p_structure_name => l_wp_name
14382 ,p_calling_flag => 'WORKPLAN'
14383 ,x_structure_id => l_structure_id
14384 ,x_return_status => l_return_status
14385 ,x_msg_count => l_msg_count
14386 ,x_msg_data => l_msg_data );
14387
14388 --Check if there is any error.
14389 l_msg_count := FND_MSG_PUB.count_msg;
14390 IF l_msg_count > 0 THEN
14391 x_msg_count := l_msg_count;
14392 IF x_msg_count = 1 THEN
14393 x_msg_data := l_msg_data;
14394 END IF;
14395 RAISE FND_API.G_EXC_ERROR;
14396 END IF;
14397
14398 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14399 (p_validate_only => FND_API.G_FALSE
14400 ,p_structure_id => l_structure_id
14401 ,x_structure_version_id => l_structure_version_id
14402 ,x_return_status => l_return_status
14403 ,x_msg_count => l_msg_count
14404 ,x_msg_data => l_msg_data );
14405
14406 --Check if there is any error.
14407 l_msg_count := FND_MSG_PUB.count_msg;
14408 IF l_msg_count > 0 THEN
14409 x_msg_count := l_msg_count;
14410 IF x_msg_count = 1 THEN
14411 x_msg_data := l_msg_data;
14412 END IF;
14413 RAISE FND_API.G_EXC_ERROR;
14414 END IF;
14415
14416 PA_TASK_PUB1.Create_Schedule_Version(
14417 p_element_version_id => l_structure_version_id
14418 ,p_scheduled_start_date => l_proj_start_date
14419 ,p_scheduled_end_date => l_proj_completion_date
14420 ,x_pev_schedule_id => l_pev_schedule_id
14421 ,x_return_status => l_return_status
14422 ,x_msg_count => l_msg_count
14423 ,x_msg_data => l_msg_data);
14424
14425 --Check if there is any error.
14426 l_msg_count := FND_MSG_PUB.count_msg;
14427 IF l_msg_count > 0 THEN
14428 x_msg_count := l_msg_count;
14429 IF x_msg_count = 1 THEN
14430 x_msg_data := l_msg_data;
14431 END IF;
14432 RAISE FND_API.G_EXC_ERROR;
14433 END IF;
14434
14435 IF (l_template_flag = 'Y') THEN
14436 l_status_code := 'STRUCTURE_WORKING';
14437 l_baseline_flag := 'N';
14438 l_latest_eff_pub_flag := 'N';
14439 l_effective_date := NULL;
14440 ELSE
14441 l_status_code := 'STRUCTURE_PUBLISHED';
14442 l_baseline_flag := 'Y';
14443 l_latest_eff_pub_flag := 'Y';
14444 l_effective_date := sysdate;
14445 END IF;
14446
14447 --create structure version
14448 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14449 (p_validate_only => FND_API.G_FALSE
14450 ,p_structure_version_id => l_structure_version_id
14451 ,p_structure_version_name => l_name
14452 ,p_structure_version_desc => NULL
14453 ,p_effective_date => l_effective_date
14454 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
14455 ,p_locked_status_code => 'UNLOCKED'
14456 ,p_struct_version_status_code => l_status_code
14457 ,p_baseline_current_flag => l_baseline_flag
14458 ,p_baseline_original_flag => 'N'
14459 ,x_pev_structure_id => l_pev_structure_id
14460 ,x_return_status => l_return_status
14461 ,x_msg_count => l_msg_count
14462 ,x_msg_data => l_msg_data );
14463
14464 --Check if there is any error.
14465 l_msg_count := FND_MSG_PUB.count_msg;
14466 IF l_msg_count > 0 THEN
14467 x_msg_count := l_msg_count;
14468 IF x_msg_count = 1 THEN
14469 x_msg_data := l_msg_data;
14470 END IF;
14471 RAISE FND_API.G_EXC_ERROR;
14472 END IF;
14473
14474 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL', 'SHARE_FULL')) THEN
14475 --partial share/full share
14476 --enable workplan structure API
14477 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14478 (p_validate_only => FND_API.G_FALSE
14479 ,p_project_id => p_project_id
14480 ,p_structure_number => l_name
14481 ,p_structure_name => l_name
14482 ,p_calling_flag => 'WORKPLAN'
14483 ,x_structure_id => l_structure_id
14484 ,x_return_status => l_return_status
14485 ,x_msg_count => l_msg_count
14486 ,x_msg_data => l_msg_data );
14487
14488 --Check if there is any error.
14489 l_msg_count := FND_MSG_PUB.count_msg;
14490 IF l_msg_count > 0 THEN
14491 x_msg_count := l_msg_count;
14492 IF x_msg_count = 1 THEN
14493 x_msg_data := l_msg_data;
14494 END IF;
14495 RAISE FND_API.G_EXC_ERROR;
14496 END IF;
14497
14498 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14499 (p_validate_only => FND_API.G_FALSE
14500 ,p_structure_id => l_structure_id
14501 ,x_structure_version_id => l_structure_version_id
14502 ,x_return_status => l_return_status
14503 ,x_msg_count => l_msg_count
14504 ,x_msg_data => l_msg_data );
14505
14506 --Check if there is any error.
14507 l_msg_count := FND_MSG_PUB.count_msg;
14508 IF l_msg_count > 0 THEN
14509 x_msg_count := l_msg_count;
14510 IF x_msg_count = 1 THEN
14511 x_msg_data := l_msg_data;
14512 END IF;
14513 RAISE FND_API.G_EXC_ERROR;
14514 END IF;
14515
14516 PA_TASK_PUB1.Create_Schedule_Version(
14517 p_element_version_id => l_structure_version_id
14518 ,p_scheduled_start_date => l_proj_start_date
14519 ,p_scheduled_end_date => l_proj_completion_date
14520 ,x_pev_schedule_id => l_pev_schedule_id
14521 ,x_return_status => l_return_status
14522 ,x_msg_count => l_msg_count
14523 ,x_msg_data => l_msg_data);
14524
14525 --Check if there is any error.
14526 l_msg_count := FND_MSG_PUB.count_msg;
14527 IF l_msg_count > 0 THEN
14528 x_msg_count := l_msg_count;
14529 IF x_msg_count = 1 THEN
14530 x_msg_data := l_msg_data;
14531 END IF;
14532 RAISE FND_API.G_EXC_ERROR;
14533 END IF;
14534
14535 IF (l_template_flag = 'Y') THEN
14536 l_status_code := 'STRUCTURE_WORKING';
14537 l_baseline_flag := 'N';
14538 l_latest_eff_pub_flag := 'N';
14539 l_effective_date := NULL;
14540 ELSE
14541 l_status_code := 'STRUCTURE_PUBLISHED';
14542 l_baseline_flag := 'Y';
14543 l_latest_eff_pub_flag := 'Y';
14544 l_effective_date := sysdate;
14545 END IF;
14546
14547 --create structure version
14548 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14549 (p_validate_only => FND_API.G_FALSE
14550 ,p_structure_version_id => l_structure_version_id
14551 ,p_structure_version_name => l_name
14552 ,p_structure_version_desc => NULL
14553 ,p_effective_date => l_effective_date
14554 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
14555 ,p_locked_status_code => 'UNLOCKED'
14556 ,p_struct_version_status_code => l_status_code
14557 ,p_baseline_current_flag => l_baseline_flag
14558 ,p_baseline_original_flag => 'N'
14559 ,x_pev_structure_id => l_pev_structure_id
14560 ,x_return_status => l_return_status
14561 ,x_msg_count => l_msg_count
14562 ,x_msg_data => l_msg_data );
14563
14564 --Check if there is any error.
14565 l_msg_count := FND_MSG_PUB.count_msg;
14566 IF l_msg_count > 0 THEN
14567 x_msg_count := l_msg_count;
14568 IF x_msg_count = 1 THEN
14569 x_msg_data := l_msg_data;
14570 END IF;
14571 RAISE FND_API.G_EXC_ERROR;
14572 END IF;
14573
14574 --create financial type
14575 OPEN sel_fin_struc_type_id;
14576 FETCH sel_fin_struc_type_id INTO l_fin_struc_type_id;
14577 CLOSE sel_fin_struc_type_id;
14578
14579 l_proj_structure_type_id := NULL;
14580 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
14581 X_ROWID => l_rowid
14582 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
14583 ,X_PROJ_ELEMENT_ID => l_structure_id
14584 ,X_STRUCTURE_TYPE_ID => l_fin_struc_type_id
14585 ,X_RECORD_VERSION_NUMBER => 1
14586 ,X_ATTRIBUTE_CATEGORY => NULL
14587 ,X_ATTRIBUTE1 => NULL
14588 ,X_ATTRIBUTE2 => NULL
14589 ,X_ATTRIBUTE3 => NULL
14590 ,X_ATTRIBUTE4 => NULL
14591 ,X_ATTRIBUTE5 => NULL
14592 ,X_ATTRIBUTE6 => NULL
14593 ,X_ATTRIBUTE7 => NULL
14594 ,X_ATTRIBUTE8 => NULL
14595 ,X_ATTRIBUTE9 => NULL
14596 ,X_ATTRIBUTE10 => NULL
14597 ,X_ATTRIBUTE11 => NULL
14598 ,X_ATTRIBUTE12 => NULL
14599 ,X_ATTRIBUTE13 => NULL
14600 ,X_ATTRIBUTE14 => NULL
14601 ,X_ATTRIBUTE15 => NULL
14602 );
14603
14604 IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
14605 NULL;
14606 ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
14607 NULL;
14608 END IF;
14609
14610 /* Bug # 3420093. Progress Management changes. */
14611
14612 --create row in pa_proj_progress_attr
14613 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
14614 p_project_id => p_project_id
14615 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
14616 ,P_OBJECT_ID => l_structure_id
14617 ,P_PROGRESS_CYCLE_ID => to_number(null)
14618 ,P_WQ_ENABLE_FLAG => 'N'
14619 ,P_REMAIN_EFFORT_ENABLE_FLAG => 'N'
14620 ,P_PERCENT_COMP_ENABLE_FLAG => 'Y'
14621 ,P_NEXT_PROGRESS_UPDATE_DATE => to_date(null)
14622 ,p_TASK_WEIGHT_BASIS_CODE => 'COST'
14623 ,X_PROJ_PROGRESS_ATTR_ID => l_proj_progress_attr_id
14624 ,P_ALLOW_COLLAB_PROG_ENTRY => 'N'
14625 ,P_ALLW_PHY_PRCNT_CMP_OVERRIDES => 'Y'
14626 ,p_structure_type => 'FINANCIAL' --Amit
14627 ,x_return_status => l_return_status
14628 ,x_msg_count => l_msg_count
14629 ,x_msg_data => l_msg_data
14630 );
14631
14632 /* Bug # 3420093. Progress Management changes. */
14633
14634
14635 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING')) THEN
14636 --split mapping/split no mapping
14637 --enable financial structure API
14638 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14639 (p_validate_only => FND_API.G_FALSE
14640 ,p_project_id => p_project_id
14641 ,p_structure_number => l_name
14642 ,p_structure_name => l_name
14643 ,p_calling_flag => 'FINANCIAL'
14644 ,x_structure_id => l_structure_id
14645 ,x_return_status => l_return_status
14646 ,x_msg_count => l_msg_count
14647 ,x_msg_data => l_msg_data);
14648
14649 --Check if there is any error.
14650 l_msg_count := FND_MSG_PUB.count_msg;
14651 IF l_msg_count > 0 THEN
14652 x_msg_count := l_msg_count;
14653 IF x_msg_count = 1 THEN
14654 x_msg_data := l_msg_data;
14655 END IF;
14656 RAISE FND_API.G_EXC_ERROR;
14657 END IF;
14658
14659 --create row in pa_proj_workplan_attr
14660 PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
14661 (p_validate_only => FND_API.G_FALSE
14662 ,p_project_id => p_project_id
14663 ,p_proj_element_id => l_structure_id
14664 ,x_return_status => l_return_status
14665 ,x_msg_count => l_msg_count
14666 ,x_msg_data => l_msg_data);
14667
14668 --Check if there is any error.
14669 l_msg_count := FND_MSG_PUB.count_msg;
14670 IF l_msg_count > 0 THEN
14671 x_msg_count := l_msg_count;
14672 IF x_msg_count = 1 THEN
14673 x_msg_data := l_msg_data;
14674 END IF;
14675 RAISE FND_API.G_EXC_ERROR;
14676 END IF;
14677
14678 --create structure version
14679 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14680 (p_validate_only => FND_API.G_FALSE
14681 ,p_structure_id => l_structure_id
14682 ,x_structure_version_id => l_structure_version_id
14683 ,x_return_status => l_return_status
14684 ,x_msg_count => l_msg_count
14685 ,x_msg_data => l_msg_data );
14686
14687 --Check if there is any error.
14688 l_msg_count := FND_MSG_PUB.count_msg;
14689 IF l_msg_count > 0 THEN
14690 x_msg_count := l_msg_count;
14691 IF x_msg_count = 1 THEN
14692 x_msg_data := l_msg_data;
14693 END IF;
14694 RAISE FND_API.G_EXC_ERROR;
14695 END IF;
14696
14697 IF (l_template_flag = 'Y') THEN
14698 l_status_code := 'STRUCTURE_WORKING';
14699 l_baseline_flag := 'N';
14700 l_latest_eff_pub_flag := 'N';
14701 l_effective_date := NULL;
14702 ELSE
14703 l_status_code := 'STRUCTURE_PUBLISHED';
14704 l_baseline_flag := 'N';
14705 l_latest_eff_pub_flag := 'Y';
14706 l_effective_date := sysdate;
14707 END IF;
14708
14709 --create structure version
14710 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14711 (p_validate_only => FND_API.G_FALSE
14712 ,p_structure_version_id => l_structure_version_id
14713 ,p_structure_version_name => l_name
14714 ,p_structure_version_desc => NULL
14715 ,p_effective_date => l_effective_date
14716 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
14717 ,p_locked_status_code => 'UNLOCKED'
14718 ,p_struct_version_status_code => l_status_code
14719 ,p_baseline_current_flag => l_baseline_flag
14720 ,p_baseline_original_flag => 'N'
14721 ,x_pev_structure_id => l_pev_structure_id
14722 ,x_return_status => l_return_status
14723 ,x_msg_count => l_msg_count
14724 ,x_msg_data => l_msg_data );
14725
14726 --Check if there is any error.
14727 l_msg_count := FND_MSG_PUB.count_msg;
14728 IF l_msg_count > 0 THEN
14729 x_msg_count := l_msg_count;
14730 IF x_msg_count = 1 THEN
14731 x_msg_data := l_msg_data;
14732 END IF;
14733 RAISE FND_API.G_EXC_ERROR;
14734 END IF;
14735
14736 --create workplan structure
14737 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14738 (p_validate_only => FND_API.G_FALSE
14739 ,p_project_id => p_project_id
14740 ,p_structure_number => l_wp_name
14741 ,p_structure_name => l_wp_name
14742 ,p_calling_flag => 'WORKPLAN'
14743 ,x_structure_id => l_structure_id
14744 ,x_return_status => l_return_status
14745 ,x_msg_count => l_msg_count
14746 ,x_msg_data => l_msg_data );
14747
14748 --Check if there is any error.
14749 l_msg_count := FND_MSG_PUB.count_msg;
14750 IF l_msg_count > 0 THEN
14751 x_msg_count := l_msg_count;
14752 IF x_msg_count = 1 THEN
14753 x_msg_data := l_msg_data;
14754 END IF;
14755 RAISE FND_API.G_EXC_ERROR;
14756 END IF;
14757
14758 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14759 (p_validate_only => FND_API.G_FALSE
14760 ,p_structure_id => l_structure_id
14761 ,x_structure_version_id => l_structure_version_id
14762 ,x_return_status => l_return_status
14763 ,x_msg_count => l_msg_count
14764 ,x_msg_data => l_msg_data );
14765
14766 --Check if there is any error.
14767 l_msg_count := FND_MSG_PUB.count_msg;
14768 IF l_msg_count > 0 THEN
14769 x_msg_count := l_msg_count;
14770 IF x_msg_count = 1 THEN
14771 x_msg_data := l_msg_data;
14772 END IF;
14773 RAISE FND_API.G_EXC_ERROR;
14774 END IF;
14775
14776 PA_TASK_PUB1.Create_Schedule_Version(
14777 p_element_version_id => l_structure_version_id
14778 ,p_scheduled_start_date => l_proj_start_date
14779 ,p_scheduled_end_date => l_proj_completion_date
14780 ,x_pev_schedule_id => l_pev_schedule_id
14781 ,x_return_status => l_return_status
14782 ,x_msg_count => l_msg_count
14783 ,x_msg_data => l_msg_data);
14784
14785 --Check if there is any error.
14786 l_msg_count := FND_MSG_PUB.count_msg;
14787 IF l_msg_count > 0 THEN
14788 x_msg_count := l_msg_count;
14789 IF x_msg_count = 1 THEN
14790 x_msg_data := l_msg_data;
14791 END IF;
14792 RAISE FND_API.G_EXC_ERROR;
14793 END IF;
14794
14795 IF (l_template_flag = 'Y') THEN
14796 l_status_code := 'STRUCTURE_WORKING';
14797 l_baseline_flag := 'N';
14798 l_latest_eff_pub_flag := 'N';
14799 l_effective_date := NULL;
14800 ELSE
14801 l_status_code := 'STRUCTURE_PUBLISHED';
14802 l_baseline_flag := 'Y';
14803 l_latest_eff_pub_flag := 'Y';
14804 l_effective_date := sysdate;
14805 END IF;
14806
14807 --create structure version
14808 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14809 (p_validate_only => FND_API.G_FALSE
14810 ,p_structure_version_id => l_structure_version_id
14811 ,p_structure_version_name => l_name
14812 ,p_structure_version_desc => NULL
14813 ,p_effective_date => l_effective_date
14814 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
14815 ,p_locked_status_code => 'UNLOCKED'
14816 ,p_struct_version_status_code => l_status_code
14817 ,p_baseline_current_flag => l_baseline_flag
14818 ,p_baseline_original_flag => 'N'
14819 ,x_pev_structure_id => l_pev_structure_id
14820 ,x_return_status => l_return_status
14821 ,x_msg_count => l_msg_count
14822 ,x_msg_data => l_msg_data );
14823
14824 --Check if there is any error.
14825 l_msg_count := FND_MSG_PUB.count_msg;
14826 IF l_msg_count > 0 THEN
14827 x_msg_count := l_msg_count;
14828 IF x_msg_count = 1 THEN
14829 x_msg_data := l_msg_data;
14830 END IF;
14831 RAISE FND_API.G_EXC_ERROR;
14832 END IF;
14833
14834 IF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
14835 NULL;
14836 ELSIF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
14837 NULL;
14838 END IF;
14839
14840 END IF;
14841
14842 ELSIF (l_wp_enabled = 'N' and l_fin_enabled = 'Y') THEN
14843 --workplan currently disabled (financial enabled)
14844 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
14845 --disabled both
14846 --disable financial structure API
14847 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
14848 p_validate_only => FND_API.G_FALSE
14849 ,p_project_id => p_project_id
14850 ,x_return_status => l_return_status
14851 ,x_msg_count => l_msg_count
14852 ,x_msg_data => l_msg_data);
14853
14854 --Check if there is any error.
14855 l_msg_count := FND_MSG_PUB.count_msg;
14856 IF l_msg_count > 0 THEN
14857 x_msg_count := l_msg_count;
14858 IF x_msg_count = 1 THEN
14859 x_msg_data := l_msg_data;
14860 END IF;
14861 RAISE FND_API.G_EXC_ERROR;
14862 END IF;
14863
14864 ELSIF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
14865 --disable workplan (enable financial)
14866 NULL;
14867 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
14868 --disable financial (enable workplan)
14869 --disable financial structure API
14870 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
14871 p_validate_only => FND_API.G_FALSE
14872 ,p_project_id => p_project_id
14873 ,x_return_status => l_return_status
14874 ,x_msg_count => l_msg_count
14875 ,x_msg_data => l_msg_data);
14876
14877 --Check if there is any error.
14878 l_msg_count := FND_MSG_PUB.count_msg;
14879 IF l_msg_count > 0 THEN
14880 x_msg_count := l_msg_count;
14881 IF x_msg_count = 1 THEN
14882 x_msg_data := l_msg_data;
14883 END IF;
14884 RAISE FND_API.G_EXC_ERROR;
14885 END IF;
14886
14887 --create workplan structure
14888 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14889 (p_validate_only => FND_API.G_FALSE
14890 ,p_project_id => p_project_id
14891 ,p_structure_number => l_wp_name
14892 ,p_structure_name => l_wp_name
14893 ,p_calling_flag => 'WORKPLAN'
14894 ,x_structure_id => l_structure_id
14895 ,x_return_status => l_return_status
14896 ,x_msg_count => l_msg_count
14897 ,x_msg_data => l_msg_data );
14898
14899 --Check if there is any error.
14900 l_msg_count := FND_MSG_PUB.count_msg;
14901 IF l_msg_count > 0 THEN
14902 x_msg_count := l_msg_count;
14903 IF x_msg_count = 1 THEN
14904 x_msg_data := l_msg_data;
14905 END IF;
14906 RAISE FND_API.G_EXC_ERROR;
14907 END IF;
14908
14909 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14910 (p_validate_only => FND_API.G_FALSE
14911 ,p_structure_id => l_structure_id
14912 ,x_structure_version_id => l_structure_version_id
14913 ,x_return_status => l_return_status
14914 ,x_msg_count => l_msg_count
14915 ,x_msg_data => l_msg_data );
14916
14917 --Check if there is any error.
14918 l_msg_count := FND_MSG_PUB.count_msg;
14919 IF l_msg_count > 0 THEN
14920 x_msg_count := l_msg_count;
14921 IF x_msg_count = 1 THEN
14922 x_msg_data := l_msg_data;
14923 END IF;
14924 RAISE FND_API.G_EXC_ERROR;
14925 END IF;
14926
14927 PA_TASK_PUB1.Create_Schedule_Version(
14928 p_element_version_id => l_structure_version_id
14929 ,p_scheduled_start_date => l_proj_start_date
14930 ,p_scheduled_end_date => l_proj_completion_date
14931 ,x_pev_schedule_id => l_pev_schedule_id
14932 ,x_return_status => l_return_status
14933 ,x_msg_count => l_msg_count
14934 ,x_msg_data => l_msg_data);
14935
14936 --Check if there is any error.
14937 l_msg_count := FND_MSG_PUB.count_msg;
14938 IF l_msg_count > 0 THEN
14939 x_msg_count := l_msg_count;
14940 IF x_msg_count = 1 THEN
14941 x_msg_data := l_msg_data;
14942 END IF;
14943 RAISE FND_API.G_EXC_ERROR;
14944 END IF;
14945
14946 IF (l_template_flag = 'Y') THEN
14947 l_status_code := 'STRUCTURE_WORKING';
14948 l_baseline_flag := 'N';
14949 l_latest_eff_pub_flag := 'N';
14950 l_effective_date := NULL;
14951 ELSE
14952 l_status_code := 'STRUCTURE_PUBLISHED';
14953 l_baseline_flag := 'Y';
14954 l_latest_eff_pub_flag := 'Y';
14955 l_effective_date := sysdate;
14956 END IF;
14957
14958 --create structure version
14959 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14960 (p_validate_only => FND_API.G_FALSE
14961 ,p_structure_version_id => l_structure_version_id
14962 ,p_structure_version_name => l_wp_name
14963 ,p_structure_version_desc => NULL
14964 ,p_effective_date => l_effective_date
14965 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
14966 ,p_locked_status_code => 'UNLOCKED'
14967 ,p_struct_version_status_code => l_status_code
14968 ,p_baseline_current_flag => l_baseline_flag
14969 ,p_baseline_original_flag => 'N'
14970 ,x_pev_structure_id => l_pev_structure_id
14971 ,x_return_status => l_return_status
14972 ,x_msg_count => l_msg_count
14973 ,x_msg_data => l_msg_data );
14974
14975 --Check if there is any error.
14976 l_msg_count := FND_MSG_PUB.count_msg;
14977 IF l_msg_count > 0 THEN
14978 x_msg_count := l_msg_count;
14979 IF x_msg_count = 1 THEN
14980 x_msg_data := l_msg_data;
14981 END IF;
14982 RAISE FND_API.G_EXC_ERROR;
14983 END IF;
14984
14985 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL', 'SHARE_FULL')) THEN
14986 --partial share
14987 --add workplan structure type
14988 OPEN sel_fin_structure_id;
14989 FETCH sel_fin_structure_id into l_structure_id;
14990 CLOSE sel_fin_structure_id;
14991
14992 OPEN sel_struc_type_id;
14993 FETCH sel_struc_type_id INTO l_struc_type_id;
14994 CLOSE sel_struc_type_id;
14995
14996 l_proj_structure_type_id := NULL;
14997 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
14998 X_ROWID => l_rowid
14999 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
15000 ,X_PROJ_ELEMENT_ID => l_structure_id
15001 ,X_STRUCTURE_TYPE_ID => l_struc_type_id
15002 ,X_RECORD_VERSION_NUMBER => 1
15003 ,X_ATTRIBUTE_CATEGORY => NULL
15004 ,X_ATTRIBUTE1 => NULL
15005 ,X_ATTRIBUTE2 => NULL
15006 ,X_ATTRIBUTE3 => NULL
15007 ,X_ATTRIBUTE4 => NULL
15008 ,X_ATTRIBUTE5 => NULL
15009 ,X_ATTRIBUTE6 => NULL
15010 ,X_ATTRIBUTE7 => NULL
15011 ,X_ATTRIBUTE8 => NULL
15012 ,X_ATTRIBUTE9 => NULL
15013 ,X_ATTRIBUTE10 => NULL
15014 ,X_ATTRIBUTE11 => NULL
15015 ,X_ATTRIBUTE12 => NULL
15016 ,X_ATTRIBUTE13 => NULL
15017 ,X_ATTRIBUTE14 => NULL
15018 ,X_ATTRIBUTE15 => NULL);
15019
15020 --add progress row
15021 l_proj_prog_attr_id := NULL;
15022 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
15023 p_validate_only => FND_API.G_FALSE
15024 ,p_project_id => p_project_id
15025 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
15026 ,P_OBJECT_ID => l_structure_id
15027 ,p_action_set_id => NULL
15028 ,p_structure_type => 'WORKPLAN' -- Amit
15029 ,x_proj_progress_attr_id => l_proj_prog_attr_id
15030 ,x_return_status => l_return_status
15031 ,x_msg_count => x_msg_count
15032 ,x_msg_data => x_msg_data);
15033
15034 --Check if there is any error.
15035 l_msg_count := FND_MSG_PUB.count_msg;
15036 IF l_msg_count > 0 THEN
15037 x_msg_count := l_msg_count;
15038 IF x_msg_count = 1 THEN
15039 x_msg_data := l_msg_data;
15040 END IF;
15041 RAISE FND_API.G_EXC_ERROR;
15042 END IF;
15043
15044 OPEN sel_struc_ver(l_structure_id);
15045 FETCH sel_struc_ver into l_structure_version_id;
15046 CLOSE sel_struc_ver;
15047
15048 --add financial planning
15049 /*Smukka Bug No. 3474141 Date 03/01/2004 */
15050 /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block */
15051 BEGIN
15052 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
15053 p_context => 'WORKPLAN'
15054 ,p_project_id => p_project_id
15055 ,p_struct_elem_version_id => l_structure_version_id
15056 ,x_return_status => l_return_status
15057 ,x_msg_count => x_msg_count
15058 ,x_Msg_data => x_msg_data);
15059 EXCEPTION
15060 WHEN OTHERS THEN
15061 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
15062 p_procedure_name => 'update_structures_setup_attr',
15063 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
15064 RAISE FND_API.G_EXC_ERROR;
15065 END;
15066 --Check if there is any error.
15067 l_msg_count := FND_MSG_PUB.count_msg;
15068 IF l_msg_count > 0 THEN
15069 x_msg_count := l_msg_count;
15070 IF x_msg_count = 1 THEN
15071 x_msg_data := l_msg_data;
15072 END IF;
15073 RAISE FND_API.G_EXC_ERROR;
15074 END IF;
15075
15076
15077 --create schedule row for each task
15078 INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
15079 pev_schedule_id,
15080 element_version_id,
15081 project_id,
15082 proj_element_id,
15083 creation_date,
15084 created_by,
15085 last_update_date,
15086 last_updated_by,
15087 scheduled_start_date,
15088 scheduled_finish_date,
15089 milestone_flag,
15090 critical_flag,
15091 calendar_id,
15092 record_version_number,
15093 last_update_login,
15094 source_object_id,
15095 source_object_type)
15096 SELECT
15097 pa_proj_elem_ver_schedule_s.nextval,
15098 PPEV.element_version_id,
15099 PPEV.project_id,
15100 PPEV.proj_element_id,
15101 SYSDATE,
15102 FND_GLOBAL.USER_ID,
15103 SYSDATE,
15104 FND_GLOBAL.USER_ID,
15105 DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.START_DATE), trunc(l_proj_start_date))),
15106 DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_proj_completion_date))),
15107 'N',
15108 'N',
15109 NULL,
15110 0,
15111 FND_GLOBAL.LOGIN_ID,
15112 PPEV.project_id,
15113 'PA_PROJECTS'
15114 FROM PA_TASKS PT,
15115 PA_PROJ_ELEMENT_VERSIONS PPEV
15116 WHERE
15117 PPEV.parent_structure_version_id = l_structure_version_id
15118 AND PPEV.proj_element_id = PT.task_id (+);
15119
15120 OPEN sel_struc_and_task_vers(l_structure_version_id);
15121 LOOP
15122 FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
15123 EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
15124 /* Bug 2790703 Begin */
15125 --Add to array for rollup
15126 l_index := l_index + 1;
15127 l_task_ver_ids_tbl(l_index) := l_element_version_id;
15128 /* Bug 2790703 End */
15129 END LOOP;
15130 CLOSE sel_struc_and_task_vers;
15131
15132 IF (l_task_ver_ids_tbl.count > 0) THEN
15133 --rollup
15134 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
15135 p_commit => FND_API.G_FALSE,
15136 p_element_versions => l_task_ver_ids_tbl,
15137 x_return_status => l_return_status,
15138 x_msg_count => l_msg_count,
15139 x_msg_data => l_msg_data);
15140
15141 --Check if there is any error.
15142 l_msg_count := FND_MSG_PUB.count_msg;
15143 IF l_msg_count > 0 THEN
15144 x_msg_count := l_msg_count;
15145 IF x_msg_count = 1 THEN
15146 x_msg_data := l_msg_data;
15147 END IF;
15148 RAISE FND_API.G_EXC_ERROR;
15149 END IF;
15150 END IF;
15151
15152 IF (l_status_code = 'STRUCTURE_PUBLISHED') OR
15153 (l_template_flag = 'Y') THEN
15154 OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
15155 FETCH get_scheduled_dates into l_get_sch_dates_cur;
15156 CLOSE get_scheduled_dates;
15157
15158 /* the record version number contained in the variabe l_proj_rec_ver_num is
15159 no more latest bcoz there was an update done by some other api by now.
15160 selcting latest record version number to avoid concurrency issue. maansari*/
15161 OPEN get_template_flag;
15162 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
15163 CLOSE get_template_flag;
15164
15165 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
15166 p_validate_only => FND_API.G_FALSE
15167 ,p_project_id => p_project_id
15168 ,p_date_type => 'SCHEDULED'
15169 ,p_start_date => l_get_sch_dates_cur.scheduled_start_date
15170 ,p_finish_date => l_get_sch_dates_cur.scheduled_finish_date
15171 ,p_record_version_number=> l_proj_rec_ver_num
15172 ,x_return_status => x_return_status
15173 ,x_msg_count => x_msg_count
15174 ,x_msg_data => x_msg_data );
15175
15176 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15177 RAISE FND_API.G_EXC_ERROR;
15178 END IF;
15179 END IF;
15180
15181 RECALC_FIN_TASK_WEIGHTS(
15182 p_structure_version_id => l_structure_version_id
15183 , p_project_id => p_project_id
15184 , x_msg_count => l_msg_count
15185 , x_msg_data => l_msg_data
15186 , x_return_status => l_return_status);
15187
15188 l_msg_count := FND_MSG_PUB.count_msg;
15189 IF l_msg_count > 0 THEN
15190 x_msg_count := l_msg_count;
15191 IF x_msg_count = 1 THEN
15192 x_msg_data := l_msg_data;
15193 END IF;
15194 RAISE FND_API.G_EXC_ERROR;
15195 END IF;
15196
15197 -- Begin fix for Bug # 4426392.
15198
15199 -- For a FINANCIAL structure only project that is part of a program, if WORKPLAN structure is enabled
15200 -- and the structures are SHARED.
15201
15202 if (nvl(l_program, 'N') = 'Y') then
15203
15204 for l_cur_links_rec in cur_links (p_project_id)
15205 loop
15206
15207 -- Delete the 'LW' or 'LF' links that currently exist from the task version.
15208
15209 pa_relationship_pub.delete_subproject_association
15210 (p_api_version => p_api_version
15211 ,p_init_msg_list => p_init_msg_list
15212 ,p_commit => p_commit
15213 ,p_validate_only => p_validate_only
15214 ,p_validation_level => p_validation_level
15215 ,p_calling_module => p_calling_module
15216 ,p_debug_mode => p_debug_mode
15217 ,p_max_msg_count => p_max_msg_count
15218 ,p_object_relationships_id => l_cur_links_rec.obj_rel_id
15219 ,p_record_version_number => l_cur_links_rec.rec_ver_number
15220 ,x_return_status => x_return_status
15221 ,x_msg_count => x_msg_count
15222 ,x_msg_data => x_msg_data);
15223
15224 -- Create both the 'LW' and 'LF' links anew from the task version.
15225
15226 pa_relationship_pub.create_subproject_association
15227 (p_api_version => p_api_version
15228 ,p_init_msg_list => p_init_msg_list
15229 ,p_commit => p_commit
15230 ,p_validate_only => p_validate_only
15231 ,p_validation_level => p_validation_level
15232 ,p_calling_module => p_calling_module
15233 ,p_debug_mode => p_debug_mode
15234 ,p_max_msg_count => p_max_msg_count
15235 ,p_src_proj_id => l_cur_links_rec.src_proj_id
15236 ,p_task_ver_id => l_cur_links_rec.task_ver_id
15237 ,p_dest_proj_id => l_cur_links_rec.dest_proj_id
15238 ,p_dest_proj_name => l_dest_proj_name
15239 ,p_comment => l_comment
15240 ,x_return_status => x_return_status
15241 ,x_msg_count => x_msg_count
15242 ,x_msg_data => x_msg_data);
15243
15244 -- Set the process update flag for the source structure version to 'Y'.
15245
15246 update pa_proj_elem_ver_structure ppevs
15247 set ppevs.process_update_wbs_flag = 'Y'
15248 where ppevs.element_version_id = l_cur_links_rec.src_str_ver_id
15249 and ppevs.project_id = l_cur_links_rec.src_proj_id;
15250
15251 end loop;
15252
15253 end if;
15254
15255 -- End fix for Bug # 4426392.
15256
15257 IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
15258 --extra code for partial share
15259 NULL;
15260 ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
15261 --extra code for full share
15262 NULL;
15263 END IF;
15264
15265 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING', 'SPLIT_MAPPING')) THEN
15266 --split mapping
15267 --Create default workplan structure
15268 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15269 (p_validate_only => FND_API.G_FALSE
15270 ,p_project_id => p_project_id
15271 ,p_structure_number => l_wp_name
15272 ,p_structure_name => l_wp_name
15273 ,p_calling_flag => 'WORKPLAN'
15274 ,x_structure_id => l_structure_id
15275 ,x_return_status => l_return_status
15276 ,x_msg_count => l_msg_count
15277 ,x_msg_data => l_msg_data );
15278
15279 --Check if there is any error.
15280 l_msg_count := FND_MSG_PUB.count_msg;
15281 IF l_msg_count > 0 THEN
15282 x_msg_count := l_msg_count;
15283 IF x_msg_count = 1 THEN
15284 x_msg_data := l_msg_data;
15285 END IF;
15286 RAISE FND_API.G_EXC_ERROR;
15287 END IF;
15288
15289 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15290 (p_validate_only => FND_API.G_FALSE
15291 ,p_structure_id => l_structure_id
15292 ,x_structure_version_id => l_structure_version_id
15293 ,x_return_status => l_return_status
15294 ,x_msg_count => l_msg_count
15295 ,x_msg_data => l_msg_data );
15296
15297 --Check if there is any error.
15298 l_msg_count := FND_MSG_PUB.count_msg;
15299 IF l_msg_count > 0 THEN
15300 x_msg_count := l_msg_count;
15301 IF x_msg_count = 1 THEN
15302 x_msg_data := l_msg_data;
15303 END IF;
15304 RAISE FND_API.G_EXC_ERROR;
15305 END IF;
15306
15307 PA_TASK_PUB1.Create_Schedule_Version(
15308 p_element_version_id => l_structure_version_id
15309 ,p_scheduled_start_date => l_proj_start_date
15310 ,p_scheduled_end_date => l_proj_completion_date
15311 ,x_pev_schedule_id => l_pev_schedule_id
15312 ,x_return_status => l_return_status
15313 ,x_msg_count => l_msg_count
15314 ,x_msg_data => l_msg_data);
15315
15316 --Check if there is any error.
15317 l_msg_count := FND_MSG_PUB.count_msg;
15318 IF l_msg_count > 0 THEN
15319 x_msg_count := l_msg_count;
15320 IF x_msg_count = 1 THEN
15321 x_msg_data := l_msg_data;
15322 END IF;
15323 RAISE FND_API.G_EXC_ERROR;
15324 END IF;
15325
15326 IF (l_template_flag = 'Y') THEN
15327 l_status_code := 'STRUCTURE_WORKING';
15328 l_baseline_flag := 'N';
15329 l_latest_eff_pub_flag := 'N';
15330 l_effective_date := NULL;
15331 ELSE
15332 l_status_code := 'STRUCTURE_PUBLISHED';
15333 l_baseline_flag := 'Y';
15334 l_latest_eff_pub_flag := 'Y';
15335 l_effective_date := sysdate;
15336 END IF;
15337
15338 --create structure version
15339 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15340 (p_validate_only => FND_API.G_FALSE
15341 ,p_structure_version_id => l_structure_version_id
15342 ,p_structure_version_name => l_name
15343 ,p_structure_version_desc => NULL
15344 ,p_effective_date => l_effective_date
15345 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
15346 ,p_locked_status_code => 'UNLOCKED'
15347 ,p_struct_version_status_code => l_status_code
15348 ,p_baseline_current_flag => l_baseline_flag
15349 ,p_baseline_original_flag => 'N'
15350 ,x_pev_structure_id => l_pev_structure_id
15351 ,x_return_status => l_return_status
15352 ,x_msg_count => l_msg_count
15353 ,x_msg_data => l_msg_data );
15354
15355 --Check if there is any error.
15356 l_msg_count := FND_MSG_PUB.count_msg;
15357 IF l_msg_count > 0 THEN
15358 x_msg_count := l_msg_count;
15359 IF x_msg_count = 1 THEN
15360 x_msg_data := l_msg_data;
15361 END IF;
15362 RAISE FND_API.G_EXC_ERROR;
15363 END IF;
15364
15365 IF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
15366 NULL;
15367 ELSIF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
15368 NULL;
15369 END IF;
15370 END IF;
15371
15372 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'N') THEN
15373 --financial currently disabled
15374 IF (p_workplan_enabled_flag = 'N') THEN
15375 --disabled both
15376 --delete all dependencies
15377 --disable workplan
15378
15379 --get structure_id
15380 OPEN sel_wp_structure_id;
15381 FETCH sel_wp_structure_id INTO l_structure_id;
15382 CLOSE sel_wp_structure_id;
15383
15384 --delete workplan structure
15385 OPEN sel_all_wp_structure_ver(l_structure_id);
15386 LOOP
15387 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
15388 l_struc_ver_rvn;
15389 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
15390 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
15391 p_project_id,
15392 l_del_struc_ver_id,
15393 l_return_status,
15394 l_err_msg_code);
15395 IF (l_return_status <> 'S') THEN
15396 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15397 x_msg_data := l_err_msg_code;
15398 RAISE FND_API.G_EXC_ERROR;
15399 END IF;
15400
15401 --get top tasks
15402 OPEN get_top_tasks(l_del_struc_ver_id);
15403 LOOP
15404 FETCH get_top_tasks into l_task_ver_id;
15405 EXIT WHEN get_top_tasks%NOTFOUND;
15406
15407 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
15408 p_project_id => p_project_id
15409 ,p_task_version_id => l_task_ver_id
15410 ,p_parent_structure_ver_id => l_del_struc_ver_id
15411 ,x_return_status => l_return_status
15412 ,x_error_message_code => l_err_msg_code );
15413
15414 IF (l_return_status <> 'S') THEN
15415 x_return_status := l_return_status;
15416 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15417 l_msg_data := l_err_msg_code;
15418 CLOSE get_top_tasks;
15419 RAISE FND_API.G_EXC_ERROR;
15420 END IF;
15421 END LOOP;
15422 CLOSE get_top_tasks;
15423
15424 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
15425 p_structure_version_id => l_del_struc_ver_id
15426 ,p_record_version_number => l_struc_ver_rvn
15427 ,x_return_status => l_return_status
15428 ,x_msg_count => l_msg_count
15429 ,x_msg_data => l_msg_data);
15430
15431 --Check if there is any error.
15432 l_msg_count := FND_MSG_PUB.count_msg;
15433 IF l_msg_count > 0 THEN
15434 x_msg_count := l_msg_count;
15435 IF x_msg_count = 1 THEN
15436 x_msg_data := l_msg_data;
15437 END IF;
15438 CLOSE sel_all_wp_structure_ver;
15439 RAISE FND_API.G_EXC_ERROR;
15440 END IF;
15441 END LOOP;
15442 CLOSE sel_all_wp_structure_ver;
15443
15444 IF (p_financial_enabled_flag = 'N') THEN
15445 NULL;
15446 ELSIF (p_financial_enabled_flag = 'Y') THEN
15447 --call enable financial structure API
15448 --enable financial structure API
15449 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15450 (p_validate_only => FND_API.G_FALSE
15451 ,p_project_id => p_project_id
15452 ,p_structure_number => l_name
15453 ,p_structure_name => l_name
15454 ,p_calling_flag => 'FINANCIAL'
15455 ,x_structure_id => l_structure_id
15456 ,x_return_status => l_return_status
15457 ,x_msg_count => l_msg_count
15458 ,x_msg_data => l_msg_data);
15459
15460 --Check if there is any error.
15461 l_msg_count := FND_MSG_PUB.count_msg;
15462 IF l_msg_count > 0 THEN
15463 x_msg_count := l_msg_count;
15464 IF x_msg_count = 1 THEN
15465 x_msg_data := l_msg_data;
15466 END IF;
15467 RAISE FND_API.G_EXC_ERROR;
15468 END IF;
15469
15470 --create row in pa_proj_workplan_attr
15471 PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
15472 (p_validate_only => FND_API.G_FALSE
15473 ,p_project_id => p_project_id
15474 ,p_proj_element_id => l_structure_id
15475 ,x_return_status => l_return_status
15476 ,x_msg_count => l_msg_count
15477 ,x_msg_data => l_msg_data);
15478
15479 --Check if there is any error.
15480 l_msg_count := FND_MSG_PUB.count_msg;
15481 IF l_msg_count > 0 THEN
15482 x_msg_count := l_msg_count;
15483 IF x_msg_count = 1 THEN
15484 x_msg_data := l_msg_data;
15485 END IF;
15486 RAISE FND_API.G_EXC_ERROR;
15487 END IF;
15488
15489 --create structure version
15490 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15491 (p_validate_only => FND_API.G_FALSE
15492 ,p_structure_id => l_structure_id
15493 ,x_structure_version_id => l_structure_version_id
15494 ,x_return_status => l_return_status
15495 ,x_msg_count => l_msg_count
15496 ,x_msg_data => l_msg_data );
15497
15498 --Check if there is any error.
15499 l_msg_count := FND_MSG_PUB.count_msg;
15500 IF l_msg_count > 0 THEN
15501 x_msg_count := l_msg_count;
15502 IF x_msg_count = 1 THEN
15503 x_msg_data := l_msg_data;
15504 END IF;
15505 RAISE FND_API.G_EXC_ERROR;
15506 END IF;
15507
15508 IF (l_template_flag = 'Y') THEN
15509 l_status_code := 'STRUCTURE_WORKING';
15510 l_baseline_flag := 'N';
15511 l_latest_eff_pub_flag := 'N';
15512 l_effective_date := NULL;
15513 ELSE
15514 l_status_code := 'STRUCTURE_PUBLISHED';
15515 l_baseline_flag := 'N';
15516 l_latest_eff_pub_flag := 'Y';
15517 l_effective_date := sysdate;
15518 END IF;
15519
15520 --create structure version
15521 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15522 (p_validate_only => FND_API.G_FALSE
15523 ,p_structure_version_id => l_structure_version_id
15524 ,p_structure_version_name => l_name
15525 ,p_structure_version_desc => NULL
15526 ,p_effective_date => l_effective_date
15527 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
15528 ,p_locked_status_code => 'UNLOCKED'
15529 ,p_struct_version_status_code => l_status_code
15530 ,p_baseline_current_flag => l_baseline_flag
15531 ,p_baseline_original_flag => 'N'
15532 ,x_pev_structure_id => l_pev_structure_id
15533 ,x_return_status => l_return_status
15534 ,x_msg_count => l_msg_count
15535 ,x_msg_data => l_msg_data );
15536
15537 --Check if there is any error.
15538 l_msg_count := FND_MSG_PUB.count_msg;
15539 IF l_msg_count > 0 THEN
15540 x_msg_count := l_msg_count;
15541 IF x_msg_count = 1 THEN
15542 x_msg_data := l_msg_data;
15543 END IF;
15544 RAISE FND_API.G_EXC_ERROR;
15545 END IF;
15546
15547 END IF;
15548
15549 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
15550 --disable financial (enable workplan), do nothing
15551 NULL;
15552 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL','SHARE_FULL')) THEN
15553 --partial share
15554 --add financial structure type
15555 OPEN sel_wp_structure_id;
15556 FETCH sel_wp_structure_id INTO l_structure_id;
15557 CLOSE sel_wp_structure_id;
15558
15559 --create financial type
15560 OPEN sel_fin_struc_type_id;
15561 FETCH sel_fin_struc_type_id INTO l_fin_struc_type_id;
15562 CLOSE sel_fin_struc_type_id;
15563
15564 l_proj_structure_type_id := NULL;
15565 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
15566 X_ROWID => l_rowid
15567 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
15568 ,X_PROJ_ELEMENT_ID => l_structure_id
15569 ,X_STRUCTURE_TYPE_ID => l_fin_struc_type_id
15570 ,X_RECORD_VERSION_NUMBER => 1
15571 ,X_ATTRIBUTE_CATEGORY => NULL
15572 ,X_ATTRIBUTE1 => NULL
15573 ,X_ATTRIBUTE2 => NULL
15574 ,X_ATTRIBUTE3 => NULL
15575 ,X_ATTRIBUTE4 => NULL
15576 ,X_ATTRIBUTE5 => NULL
15577 ,X_ATTRIBUTE6 => NULL
15578 ,X_ATTRIBUTE7 => NULL
15579 ,X_ATTRIBUTE8 => NULL
15580 ,X_ATTRIBUTE9 => NULL
15581 ,X_ATTRIBUTE10 => NULL
15582 ,X_ATTRIBUTE11 => NULL
15583 ,X_ATTRIBUTE12 => NULL
15584 ,X_ATTRIBUTE13 => NULL
15585 ,X_ATTRIBUTE14 => NULL
15586 ,X_ATTRIBUTE15 => NULL
15587 );
15588
15589 --get structure version id
15590 OPEN sel_struc_ver(l_structure_id);
15591 FETCH sel_struc_ver into l_structure_version_id;
15592 CLOSE sel_struc_ver;
15593
15594 -- Bug 3938654 : Additional Fix that will go as a part of this bug
15595 -- This fix is not related to main issue reported in the bug
15596
15597 -- The present case is when WP is already enabled (l_wp_enabled = Y) and Fin. is disabled(l_fin_enabled = N)
15598 -- But Now,We have enabled Fin. (i.e) p_financial_enabled_flag = Y and made in a shared structure(may be full / partial)
15599
15600 -- In this Case ,The Already Existing Structure Name will be of the format l_name : Workplan
15601 -- (Because earlier itself WP was enabled and the structure name hence would be of above format)
15602
15603 -- While we are going to 'SHARE' it now ,We have to reset the Structure Name Format to : l_name
15604 -- This is needed because : Later If we try to Split the structure ,It will again try to create an empty
15605 -- WP Structure with the structure name in the format l_name : Workplan
15606
15607 -- Hence ,the structure split will not be allowed as "name not unique error will be thrown"
15608 -- To avoid this Problem , We are resetting the structure name before Sharing
15609
15610 UPDATE pa_proj_elements
15611 SET name = l_name
15612 ,element_number = l_name
15613 WHERE proj_element_id = l_structure_id ;
15614
15615 -- End of Fix : 3938654
15616
15617 --bug 4114101
15618 --insert progress attr row for financial struc
15619 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
15620 p_validate_only => FND_API.G_FALSE
15621 ,p_project_id => p_project_id
15622 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
15623 ,P_OBJECT_ID => l_structure_id
15624 ,P_PROGRESS_CYCLE_ID => to_number(null)
15625 ,P_WQ_ENABLE_FLAG => 'N'
15626 ,P_REMAIN_EFFORT_ENABLE_FLAG => 'N'
15627 ,P_PERCENT_COMP_ENABLE_FLAG => 'Y'
15628 ,P_NEXT_PROGRESS_UPDATE_DATE => to_date(null)
15629 ,p_TASK_WEIGHT_BASIS_CODE => 'COST'
15630 ,X_PROJ_PROGRESS_ATTR_ID => l_proj_progress_attr_id
15631 ,P_ALLOW_COLLAB_PROG_ENTRY => 'N'
15632 ,P_ALLW_PHY_PRCNT_CMP_OVERRIDES => 'Y'
15633 ,p_structure_type => 'FINANCIAL' --Amit
15634 ,x_return_status => l_return_status
15635 ,x_msg_count => l_msg_count
15636 ,x_msg_data => l_msg_data
15637 );
15638
15639 l_msg_count := FND_MSG_PUB.count_msg;
15640 IF l_msg_count > 0 THEN
15641 x_msg_count := l_msg_count;
15642 IF x_msg_count = 1 THEN
15643 x_msg_data := l_msg_data;
15644 END IF;
15645 RAISE FND_API.G_EXC_ERROR;
15646 END IF;
15647 --end bug 4114101
15648
15649 IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
15650 NULL;
15651 ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
15652 --set financial task flag to Y for all tasks
15653 update pa_proj_element_versions
15654 set financial_task_flag = 'Y'
15655 where parent_structure_version_id = l_structure_version_id
15656 and object_type = 'PA_TASKS'
15657 and proj_element_id NOT IN
15658 (select proj_element_id
15659 from pa_proj_elements
15660 where project_id = p_project_id
15661 and object_type = 'PA_TASKS'
15662 and link_task_flag = 'Y');
15663 END IF;
15664
15665 --need to call sync up API
15666 PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN
15667 (p_patask_record_version_number => NULL
15668 ,p_parent_task_version_id => NULL
15669 ,p_project_id => p_project_id
15670 ,p_syncup_all_tasks => 'Y'
15671 ,p_task_version_id => NULL
15672 ,p_structure_version_id => l_structure_version_id
15673 ,p_check_for_transactions => 'N'
15674 ,p_checked_flag => FND_API.G_MISS_CHAR
15675 ,p_mode => 'ALL'
15676 ,x_return_status => l_return_status
15677 ,x_msg_count => l_msg_count
15678 ,x_msg_data => l_msg_data);
15679
15680 --Check if there is any error.
15681 l_msg_count := FND_MSG_PUB.count_msg;
15682 IF l_msg_count > 0 THEN
15683 x_msg_count := l_msg_count;
15684 IF x_msg_count = 1 THEN
15685 x_msg_data := l_msg_data;
15686 END IF;
15687 RAISE FND_API.G_EXC_ERROR;
15688 END IF;
15689
15690 -- Begin fix for Bug # 4426392.
15691
15692 -- For a WORKPLAN structure only project that is part of a program, if a FINANCIAL structure is enabled
15693 -- and the structures are SHARED.
15694
15695 if (nvl(l_program, 'N') = 'Y') then
15696
15697 for l_cur_links_rec in cur_links (p_project_id)
15698 loop
15699
15700 -- Delete the 'LW' or 'LF' links that currently exist from the task version.
15701
15702 pa_relationship_pub.delete_subproject_association
15703 (p_api_version => p_api_version
15704 ,p_init_msg_list => p_init_msg_list
15705 ,p_commit => p_commit
15706 ,p_validate_only => p_validate_only
15707 ,p_validation_level => p_validation_level
15708 ,p_calling_module => p_calling_module
15709 ,p_debug_mode => p_debug_mode
15710 ,p_max_msg_count => p_max_msg_count
15711 ,p_object_relationships_id => l_cur_links_rec.obj_rel_id
15712 ,p_record_version_number => l_cur_links_rec.rec_ver_number
15713 ,x_return_status => x_return_status
15714 ,x_msg_count => x_msg_count
15715 ,x_msg_data => x_msg_data);
15716
15717 -- Create both the 'LW' and 'LF' links anew from the task version.
15718
15719 pa_relationship_pub.create_subproject_association
15720 (p_api_version => p_api_version
15721 ,p_init_msg_list => p_init_msg_list
15722 ,p_commit => p_commit
15723 ,p_validate_only => p_validate_only
15724 ,p_validation_level => p_validation_level
15725 ,p_calling_module => p_calling_module
15726 ,p_debug_mode => p_debug_mode
15727 ,p_max_msg_count => p_max_msg_count
15728 ,p_src_proj_id => l_cur_links_rec.src_proj_id
15729 ,p_task_ver_id => l_cur_links_rec.task_ver_id
15730 ,p_dest_proj_id => l_cur_links_rec.dest_proj_id
15731 ,p_dest_proj_name => l_dest_proj_name
15732 ,p_comment => l_comment
15733 ,x_return_status => x_return_status
15734 ,x_msg_count => x_msg_count
15735 ,x_msg_data => x_msg_data);
15736
15737 -- Set the process update flag for the source structure version to 'Y'.
15738
15739 update pa_proj_elem_ver_structure ppevs
15740 set ppevs.process_update_wbs_flag = 'Y'
15741 where ppevs.element_version_id = l_cur_links_rec.src_str_ver_id
15742 and ppevs.project_id = l_cur_links_rec.src_proj_id;
15743
15744 end loop;
15745
15746 end if;
15747
15748 -- End fix for Bug # 4426392.
15749
15750 -- Amit : Add progress attr fro Financial here
15751 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
15752 --split mapping/ no mapping
15753 --call enable financial structure API
15754 --create financial structure API
15755 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15756 (p_validate_only => FND_API.G_FALSE
15757 ,p_project_id => p_project_id
15758 ,p_structure_number => l_name
15759 ,p_structure_name => l_name
15760 ,p_calling_flag => 'FINANCIAL'
15761 ,x_structure_id => l_structure_id
15762 ,x_return_status => l_return_status
15763 ,x_msg_count => l_msg_count
15764 ,x_msg_data => l_msg_data);
15765
15766 --Check if there is any error.
15767 l_msg_count := FND_MSG_PUB.count_msg;
15768 IF l_msg_count > 0 THEN
15769 x_msg_count := l_msg_count;
15770 IF x_msg_count = 1 THEN
15771 x_msg_data := l_msg_data;
15772 END IF;
15773 RAISE FND_API.G_EXC_ERROR;
15774 END IF;
15775
15776 --create row in pa_proj_workplan_attr
15777 PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
15778 (p_validate_only => FND_API.G_FALSE
15779 ,p_project_id => p_project_id
15780 ,p_proj_element_id => l_structure_id
15781 ,x_return_status => l_return_status
15782 ,x_msg_count => l_msg_count
15783 ,x_msg_data => l_msg_data);
15784
15785 --Check if there is any error.
15786 l_msg_count := FND_MSG_PUB.count_msg;
15787 IF l_msg_count > 0 THEN
15788 x_msg_count := l_msg_count;
15789 IF x_msg_count = 1 THEN
15790 x_msg_data := l_msg_data;
15791 END IF;
15792 RAISE FND_API.G_EXC_ERROR;
15793 END IF;
15794
15795 --create structure version
15796 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15797 (p_validate_only => FND_API.G_FALSE
15798 ,p_structure_id => l_structure_id
15799 ,x_structure_version_id => l_structure_version_id
15800 ,x_return_status => l_return_status
15801 ,x_msg_count => l_msg_count
15802 ,x_msg_data => l_msg_data );
15803
15804 --Check if there is any error.
15805 l_msg_count := FND_MSG_PUB.count_msg;
15806 IF l_msg_count > 0 THEN
15807 x_msg_count := l_msg_count;
15808 IF x_msg_count = 1 THEN
15809 x_msg_data := l_msg_data;
15810 END IF;
15811 RAISE FND_API.G_EXC_ERROR;
15812 END IF;
15813
15814 IF (l_template_flag = 'Y') THEN
15815 l_status_code := 'STRUCTURE_WORKING';
15816 l_baseline_flag := 'N';
15817 l_latest_eff_pub_flag := 'N';
15818 l_effective_date := NULL;
15819 ELSE
15820 l_status_code := 'STRUCTURE_PUBLISHED';
15821 l_baseline_flag := 'N';
15822 l_latest_eff_pub_flag := 'Y';
15823 l_effective_date := sysdate;
15824 END IF;
15825
15826 --create structure version
15827 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15828 (p_validate_only => FND_API.G_FALSE
15829 ,p_structure_version_id => l_structure_version_id
15830 ,p_structure_version_name => l_name
15831 ,p_structure_version_desc => NULL
15832 ,p_effective_date => l_effective_date
15833 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
15834 ,p_locked_status_code => 'UNLOCKED'
15835 ,p_struct_version_status_code => l_status_code
15836 ,p_baseline_current_flag => l_baseline_flag
15837 ,p_baseline_original_flag => 'N'
15838 ,x_pev_structure_id => l_pev_structure_id
15839 ,x_return_status => l_return_status
15840 ,x_msg_count => l_msg_count
15841 ,x_msg_data => l_msg_data );
15842
15843 --Check if there is any error.
15844 l_msg_count := FND_MSG_PUB.count_msg;
15845 IF l_msg_count > 0 THEN
15846 x_msg_count := l_msg_count;
15847 IF x_msg_count = 1 THEN
15848 x_msg_data := l_msg_data;
15849 END IF;
15850 RAISE FND_API.G_EXC_ERROR;
15851 END IF;
15852
15853 IF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
15854 NULL;
15855 ELSIF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
15856 NULL;
15857 END IF;
15858 END IF;
15859
15860 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_PARTIAL') THEN
15861 --currently partial share
15862 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
15863 --disabled both
15864 --delete all dependencies
15865 --delete Financial structure API
15866 --get structure id
15867 OPEN sel_wp_structure_id;
15868 FETCH sel_wp_structure_id INTO l_structure_id;
15869 CLOSE sel_wp_structure_id;
15870
15871 OPEN sel_all_wp_structure_ver(l_structure_id);
15872 LOOP
15873 FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
15874 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
15875
15876 PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
15877 p_structure_version_id => l_structure_version_id
15878 ,p_record_version_number => l_struc_ver_rvn
15879 ,x_return_status => l_return_status
15880 ,x_msg_count => l_msg_count
15881 ,x_msg_data => l_msg_data
15882 );
15883
15884 IF (l_return_status <> 'S') THEN
15885 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15886 x_msg_data := l_err_msg_code;
15887 RAISE FND_API.G_EXC_ERROR;
15888 END IF;
15889
15890 END LOOP;
15891 CLOSE sel_all_wp_structure_ver;
15892
15893 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING', 'SPLIT_MAPPING')) OR (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
15894 --split mapping/split no mapping/disable workplan
15895 --delete all tasks not marked as financial
15896 --get structure id
15897 OPEN sel_wp_structure_id;
15898 FETCH sel_wp_structure_id INTO l_structure_id;
15899 CLOSE sel_wp_structure_id;
15900
15901 --get structure version id
15902 OPEN sel_latest_pub_ver(l_structure_id);
15903 FETCH sel_latest_pub_ver into l_structure_version_id;
15904 IF sel_latest_pub_ver%NOTFOUND THEN
15905 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
15906 ELSE
15907 l_keep_structure_ver_id := l_structure_version_id;
15908 END IF;
15909 CLOSE sel_latest_pub_ver;
15910
15911 /* Bug 3597178 Commented the call to PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS
15912 As we can change from a shared to split,mapped etc even though deliverable transactions exist
15913 --NYU
15914 --Check if deliverable transactions exist. If so, we cannot change the structure sharing to SPLIT
15915 l_del_trans_exist := PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS(
15916 p_project_id => p_project_id,
15917 x_return_status => l_return_status,
15918 x_msg_count => x_msg_count,
15919 x_msg_data => x_msg_data);
15920 IF l_del_trans_exist = 'Y' THEN
15921 RAISE FND_API.G_EXC_ERROR;
15922 END IF;
15923 */
15924 --delete wp budget for the version we keep
15925 l_struct_version_id_tbl.extend(1); /* Venky */
15926 l_struct_version_id_tbl(1) := l_keep_structure_ver_id;
15927 /*Smukka Bug No. 3474141 Date 03/01/2004 */
15928 /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block */
15929 BEGIN
15930 /*Commented call to this API and replaced with pa_fin_plan_pvt.Delete_wp_option
15931 for Bug 3954050
15932 PA_FIN_PLAN_PVT.delete_wp_budget_versions(
15933 p_struct_elem_version_id_tbl => l_struct_version_id_tbl
15934 ,x_return_status => l_return_status
15935 ,x_msg_count => x_msg_count
15936 ,x_Msg_data => x_msg_data);
15937 */
15938 PA_FIN_PLAN_PVT.delete_wp_option
15939 (
15940 p_project_id => p_project_id,
15941 x_return_status => l_return_status,
15942 x_msg_count => x_msg_count,
15943 x_msg_data => x_msg_data
15944 );
15945 EXCEPTION
15946 WHEN OTHERS THEN
15947 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
15948 p_procedure_name => 'update_structures_setup_attr',
15949 p_error_text => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_options :'||SQLERRM,1,240));
15950 RAISE FND_API.G_EXC_ERROR;
15951 END;
15952 l_msg_count := FND_MSG_PUB.count_msg;
15953 IF l_msg_count > 0 THEN
15954 x_msg_count := l_msg_count;
15955 IF x_msg_count = 1 THEN
15956 x_msg_data := l_msg_data;
15957 END IF;
15958 RAISE FND_API.G_EXC_ERROR;
15959 END IF;
15960
15961 --Delete all other structure versions
15962 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
15963 LOOP
15964 FETCH sel_other_structure_ver into l_del_struc_ver_id,
15965 l_struc_ver_rvn;
15966 EXIT WHEN sel_other_structure_ver%NOTFOUND;
15967 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
15968 p_project_id,
15969 l_del_struc_ver_id,
15970 l_return_status,
15971 l_err_msg_code);
15972 IF (l_return_status <> 'S') THEN
15973 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15974 x_msg_data := l_err_msg_code;
15975 RAISE FND_API.G_EXC_ERROR;
15976 END IF;
15977
15978 --get top tasks
15979 OPEN get_top_tasks(l_del_struc_ver_id);
15980 LOOP
15981 FETCH get_top_tasks into l_task_ver_id;
15982 EXIT WHEN get_top_tasks%NOTFOUND;
15983
15984 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
15985 p_project_id => p_project_id
15986 ,p_task_version_id => l_task_ver_id
15987 ,p_parent_structure_ver_id => l_del_struc_ver_id
15988 ,x_return_status => l_return_status
15989 ,x_error_message_code => l_err_msg_code );
15990
15991 IF (l_return_status <> 'S') THEN
15992 x_return_status := l_return_status;
15993 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15994 l_msg_data := l_err_msg_code;
15995 CLOSE get_top_tasks;
15996 RAISE FND_API.G_EXC_ERROR;
15997 END IF;
15998 END LOOP;
15999 CLOSE get_top_tasks;
16000
16001 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16002 p_structure_version_id => l_del_struc_ver_id
16003 ,p_record_version_number => l_struc_ver_rvn
16004 ,x_return_status => l_return_status
16005 ,x_msg_count => l_msg_count
16006 ,x_msg_data => l_msg_data);
16007 --Check if there is any error.
16008 l_msg_count := FND_MSG_PUB.count_msg;
16009 IF l_msg_count > 0 THEN
16010 x_msg_count := l_msg_count;
16011 IF x_msg_count = 1 THEN
16012 x_msg_data := l_msg_data;
16013 END IF;
16014 CLOSE sel_other_structure_ver;
16015 RAISE FND_API.G_EXC_ERROR;
16016 END IF;
16017 END LOOP;
16018 CLOSE sel_other_structure_ver;
16019
16020 --delete from pa_proj_progress_attr
16021 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
16022 p_validate_only => FND_API.G_FALSE
16023 ,p_project_id => p_project_id
16024 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
16025 ,p_object_id => l_structure_id
16026 ,p_structure_type => 'WORKPLAN'
16027 ,x_return_status => l_return_status
16028 ,x_msg_count => l_msg_count
16029 ,x_msg_data => l_msg_data
16030 );
16031
16032 --Check if there is any error.
16033 l_msg_count := FND_MSG_PUB.count_msg;
16034 IF l_msg_count > 0 THEN
16035 x_msg_count := l_msg_count;
16036 IF x_msg_count = 1 THEN
16037 x_msg_data := l_msg_data;
16038 END IF;
16039 RAISE FND_API.G_EXC_ERROR;
16040 END IF;
16041
16042 --delete all tasks not marked as financial in the structure keeping
16043 --delete schedule versions
16044 delete from pa_proj_elem_ver_schedule
16045 where project_id =p_project_id --Bug No 3634334
16046 and element_version_id IN (
16047 select element_version_id
16048 from pa_proj_element_versions
16049 where project_id = p_project_id --Bug No 3634334
16050 and parent_structure_version_id = l_keep_structure_ver_id
16051 and object_type IN ('PA_TASKS', 'PA_STRUCTURES'));
16052
16053 --delete relationships
16054 --Bug No 3634334 Commented for performance tuning and rewritten the query.
16055 /* delete from pa_object_relationships rel
16056 where rel.relationship_type IN ('D','S')
16057 and EXISTS (
16058 select 1 from pa_proj_element_versions
16059 where (rel.object_id_from1 = element_version_id OR
16060 rel.object_id_to1 = element_version_id ) and
16061 parent_structure_version_id = l_keep_structure_ver_id and
16062 financial_task_flag = 'N'); */
16063
16064 --Bug No 3634334 Created for performance tuning for the above query.
16065
16066 delete from pa_object_relationships rel
16067 where OBJECT_RELATIONSHIP_ID IN (
16068 select OBJECT_RELATIONSHIP_ID
16069 from pa_object_relationships rel,
16070 pa_proj_element_versions
16071 where rel.relationship_type IN ('D','S')
16072 and object_type_to = 'PA_TASKS'
16073 and rel.object_id_to1 = element_version_id
16074 and parent_structure_version_id = l_keep_structure_ver_id
16075 and financial_task_flag = 'N'
16076 UNION
16077 select OBJECT_RELATIONSHIP_ID
16078 from pa_object_relationships rel,
16079 pa_proj_element_versions
16080 where rel.relationship_type IN ('D','S')
16081 and object_type_from = 'PA_TASKS'
16082 and rel.object_id_from1 = element_version_id
16083 and parent_structure_version_id = l_keep_structure_ver_id
16084 and financial_task_flag = 'N');
16085
16086 /* Bug 3906015 Just moved the existing code after the delete statements
16087 to this position
16088 */
16089 -- NYU
16090 -- delete deliverable associations
16091 PA_DELIVERABLE_PUB.delete_dlv_associations
16092 (p_project_id=>p_project_id,
16093 x_return_status=>l_return_status,
16094 x_msg_count=>l_msg_count,
16095 x_msg_data=>l_msg_data);
16096
16097 --delete elements
16098 delete from pa_proj_elements ppe
16099 where proj_element_ID in (
16100 select proj_element_id
16101 from pa_proj_element_versions
16102 where parent_structure_version_id = l_keep_structure_ver_id
16103 and object_type = 'PA_TASKS'
16104 and financial_task_flag = 'N');
16105
16106 --delete element versions
16107 Delete from pa_proj_element_versions
16108 where parent_structure_version_id = l_keep_structure_ver_id
16109 and object_type = 'PA_TASKS'
16110 and financial_task_flag = 'N';
16111
16112 --delete from pa_proj_structure_types
16113 DELETe FROM pa_proj_structure_types
16114 where proj_element_id = l_structure_id
16115 and structure_type_id = (
16116 select structure_type_id from pa_structure_types
16117 where structure_type = 'WORKPLAN');
16118
16119 /* Bug 3906015
16120 Moved this code to above (i.e) before deleting the elements (Before deleting task)
16121 This is necessary because : delete_dlv_associations API has been modified
16122 in such a way that it retrives the tasks from pa_proj_element_versions table for the passed project_id
16123 and then for those values ,it performs deliverable related validations for Workplan Task Deletion
16124
16125 If this call,is after delete statement on pa_proj_element_versions tables,the logic written
16126 in delete_dlv_associations APi will fail .Hence moved the code up.
16127
16128 -- NYU
16129 -- delete deliverable associations
16130 PA_DELIVERABLE_PUB.delete_dlv_associations
16131 (p_project_id=>p_project_id,
16132 x_return_status=>l_return_status,
16133 x_msg_count=>l_msg_count,
16134 x_msg_data=>l_msg_data);
16135 */
16136
16137 --Check if there is any error.
16138 l_msg_count := FND_MSG_PUB.count_msg;
16139 IF l_msg_count > 0 THEN
16140 x_msg_count := l_msg_count;
16141 IF x_msg_count = 1 THEN
16142 x_msg_data := l_msg_data;
16143 END IF;
16144 RAISE FND_API.G_EXC_ERROR;
16145 END IF;
16146
16147 --bug 3894059
16148 --set versioning disable for financial structure, and structure version as published if it is a project
16149 update pa_proj_workplan_attr
16150 set WP_ENABLE_VERSION_FLAG = 'N'
16151 where proj_element_id = l_structure_id;
16152
16153 IF (l_template_flag <> 'Y') THEN
16154 --project
16155 update pa_proj_elem_ver_structure
16156 set status_code = 'STRUCTURE_PUBLISHED',
16157 latest_eff_published_flag = 'Y',
16158 published_date = sysdate
16159 where project_id = p_project_id
16160 and element_version_id = l_keep_structure_ver_id;
16161 END IF;
16162 --end bug 3894059
16163
16164 IF (p_workplan_enabled_flag = 'Y' AND p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
16165 --Create empty workplan structure
16166 l_structure_id := NULL;
16167 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
16168 (p_validate_only => FND_API.G_FALSE
16169 ,p_project_id => p_project_id
16170 ,p_structure_number => l_wp_name
16171 ,p_structure_name => l_wp_name
16172 ,p_calling_flag => 'WORKPLAN'
16173 ,x_structure_id => l_structure_id
16174 ,x_return_status => l_return_status
16175 ,x_msg_count => l_msg_count
16176 ,x_msg_data => l_msg_data );
16177
16178 --Check if there is any error.
16179 l_msg_count := FND_MSG_PUB.count_msg;
16180 IF l_msg_count > 0 THEN
16181 x_msg_count := l_msg_count;
16182 IF x_msg_count = 1 THEN
16183 x_msg_data := l_msg_data;
16184 END IF;
16185 RAISE FND_API.G_EXC_ERROR;
16186 END IF;
16187
16188 l_structure_version_id := NULL;
16189 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
16190 (p_validate_only => FND_API.G_FALSE
16191 ,p_structure_id => l_structure_id
16192 ,x_structure_version_id => l_structure_version_id
16193 ,x_return_status => l_return_status
16194 ,x_msg_count => l_msg_count
16195 ,x_msg_data => l_msg_data );
16196
16197 --Check if there is any error.
16198 l_msg_count := FND_MSG_PUB.count_msg;
16199 IF l_msg_count > 0 THEN
16200 x_msg_count := l_msg_count;
16201 IF x_msg_count = 1 THEN
16202 x_msg_data := l_msg_data;
16203 END IF;
16204 RAISE FND_API.G_EXC_ERROR;
16205 END IF;
16206
16207 PA_TASK_PUB1.Create_Schedule_Version(
16208 p_element_version_id => l_structure_version_id
16209 ,p_scheduled_start_date => l_proj_start_date
16210 ,p_scheduled_end_date => l_proj_completion_date
16211 ,x_pev_schedule_id => l_pev_schedule_id
16212 ,x_return_status => l_return_status
16213 ,x_msg_count => l_msg_count
16214 ,x_msg_data => l_msg_data);
16215
16216 --Check if there is any error.
16217 l_msg_count := FND_MSG_PUB.count_msg;
16218 IF l_msg_count > 0 THEN
16219 x_msg_count := l_msg_count;
16220 IF x_msg_count = 1 THEN
16221 x_msg_data := l_msg_data;
16222 END IF;
16223 RAISE FND_API.G_EXC_ERROR;
16224 END IF;
16225
16226 IF (l_template_flag = 'Y') THEN
16227 l_status_code := 'STRUCTURE_WORKING';
16228 l_baseline_flag := 'N';
16229 l_latest_eff_pub_flag := 'N';
16230 l_effective_date := NULL;
16231 ELSE
16232 l_status_code := 'STRUCTURE_PUBLISHED';
16233 l_baseline_flag := 'Y';
16234 l_latest_eff_pub_flag := 'Y';
16235 l_effective_date := sysdate;
16236 END IF;
16237
16238 --create structure version
16239 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
16240 (p_validate_only => FND_API.G_FALSE
16241 ,p_structure_version_id => l_structure_version_id
16242 ,p_structure_version_name => l_name
16243 ,p_structure_version_desc => NULL
16244 ,p_effective_date => l_effective_date
16245 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
16246 ,p_locked_status_code => 'UNLOCKED'
16247 ,p_struct_version_status_code => l_status_code
16248 ,p_baseline_current_flag => l_baseline_flag
16249 ,p_baseline_original_flag => 'N'
16250 ,x_pev_structure_id => l_pev_structure_id
16251 ,x_return_status => l_return_status
16252 ,x_msg_count => l_msg_count
16253 ,x_msg_data => l_msg_data );
16254
16255 --Check if there is any error.
16256 l_msg_count := FND_MSG_PUB.count_msg;
16257 IF l_msg_count > 0 THEN
16258 x_msg_count := l_msg_count;
16259 IF x_msg_count = 1 THEN
16260 x_msg_data := l_msg_data;
16261 END IF;
16262 RAISE FND_API.G_EXC_ERROR;
16263 END IF;
16264
16265 NULL;
16266 ELSIF (p_workplan_enabled_flag = 'N' ) THEN
16267 NULL;
16268 END IF;
16269
16270 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
16271 --disable financial (enable workplan)
16272 --get structure id
16273 OPEN sel_wp_structure_id;
16274 FETCH sel_wp_structure_id INTO l_structure_id;
16275 CLOSE sel_wp_structure_id;
16276
16277 update pa_proj_elements
16278 set name = l_wp_name,
16279 element_number = l_wp_name
16280 where proj_element_id = l_structure_id;
16281
16282 --Need delete financial tasks API
16283 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
16284 p_validate_only => FND_API.G_FALSE
16285 ,p_project_id => p_project_id
16286 ,x_return_status => l_return_status
16287 ,x_msg_count => l_msg_count
16288 ,x_msg_data => l_msg_data);
16289
16290 --Check if there is any error.
16291 l_msg_count := FND_MSG_PUB.count_msg;
16292 IF l_msg_count > 0 THEN
16293 x_msg_count := l_msg_count;
16294 IF x_msg_count = 1 THEN
16295 x_msg_data := l_msg_data;
16296 END IF;
16297 RAISE FND_API.G_EXC_ERROR;
16298 END IF;
16299
16300 --clear financial Flag API
16301 OPEN sel_all_wp_structure_ver(l_structure_id);
16302 LOOP
16303 FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16304 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16305
16306 PA_PROJECT_STRUCTURE_PUB1.CLEAR_FINANCIAL_FLAG(
16307 p_validate_only => FND_API.G_FALSE
16308 ,p_project_id => p_project_id
16309 ,p_task_version_id => NULL
16310 ,p_structure_version_id => l_structure_version_id
16311 ,x_return_status => l_return_status
16312 ,x_msg_count => l_msg_count
16313 ,x_msg_data => l_msg_data);
16314
16315 --Check if there is any error.
16316 l_msg_count := FND_MSG_PUB.count_msg;
16317 IF l_msg_count > 0 THEN
16318 x_msg_count := l_msg_count;
16319 IF x_msg_count = 1 THEN
16320 x_msg_data := l_msg_data;
16321 END IF;
16322 RAISE FND_API.G_EXC_ERROR;
16323 END IF;
16324
16325 END LOOP;
16326 CLOSE sel_all_wp_structure_ver;
16327
16328 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_PARTIAL') THEN
16329 --partial share; no action required
16330 NULL;
16331 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_FULL') THEN
16332 --full share
16333 --Need to call sync up API
16334 --get structure id
16335 OPEN sel_wp_structure_id;
16336 FETCH sel_wp_structure_id INTO l_structure_id;
16337 CLOSE sel_wp_structure_id;
16338
16339 --get structure version id
16340 OPEN sel_latest_pub_ver(l_structure_id);
16341 FETCH sel_latest_pub_ver into l_structure_version_id;
16342 IF sel_latest_pub_ver%NOTFOUND THEN
16343 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16344 ELSE
16345 l_keep_structure_ver_id := l_structure_version_id;
16346 END IF;
16347 CLOSE sel_latest_pub_ver;
16348
16349 update pa_proj_element_versions
16350 set financial_task_flag = 'Y'
16351 where parent_structure_version_id = l_structure_version_id
16352 and object_type = 'PA_TASKS'
16353 and proj_element_id NOT IN
16354 (select proj_element_id
16355 from pa_proj_elements
16356 where project_id = p_project_id
16357 and object_type = 'PA_TASKS'
16358 and link_task_flag = 'Y');
16359
16360 --need to call sync up API
16361 PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN
16362 (p_patask_record_version_number => NULL
16363 ,p_parent_task_version_id => NULL
16364 ,p_project_id => p_project_id
16365 ,p_syncup_all_tasks => 'Y'
16366 ,p_task_version_id => NULL
16367 ,p_structure_version_id => l_structure_version_id
16368 ,p_check_for_transactions => 'N'
16369 ,p_checked_flag => FND_API.G_MISS_CHAR
16370 ,p_mode => 'ALL'
16371 ,x_return_status => l_return_status
16372 ,x_msg_count => l_msg_count
16373 ,x_msg_data => l_msg_data);
16374
16375 --Check if there is any error.
16376 l_msg_count := FND_MSG_PUB.count_msg;
16377 IF l_msg_count > 0 THEN
16378 x_msg_count := l_msg_count;
16379 IF x_msg_count = 1 THEN
16380 x_msg_data := l_msg_data;
16381 END IF;
16382 RAISE FND_API.G_EXC_ERROR;
16383 END IF;
16384
16385 END IF;
16386
16387 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_FULL') THEN
16388 --currently full share
16389 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
16390 --disabled both
16391 --delete all dependencies
16392 --delete Financial structure API
16393 --get structure id
16394 OPEN sel_wp_structure_id;
16395 FETCH sel_wp_structure_id INTO l_structure_id;
16396 CLOSE sel_wp_structure_id;
16397
16398 OPEN sel_all_wp_structure_ver(l_structure_id);
16399 LOOP
16400 FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16401 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16402
16403 PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
16404 p_structure_version_id => l_structure_version_id
16405 ,p_record_version_number => l_struc_ver_rvn
16406 ,x_return_status => l_return_status
16407 ,x_msg_count => l_msg_count
16408 ,x_msg_data => l_msg_data
16409 );
16410
16411 IF (l_return_status <> 'S') THEN
16412 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16413 x_msg_data := l_err_msg_code;
16414 RAISE FND_API.G_EXC_ERROR;
16415 END IF;
16416
16417 END LOOP;
16418 CLOSE sel_all_wp_structure_ver;
16419
16420 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_MAPPING', 'SPLIT_NO_MAPPING')) OR (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
16421 --split mapping/split no mapping/disable workplan
16422 --get structure id
16423 OPEN sel_wp_structure_id;
16424 FETCH sel_wp_structure_id INTO l_structure_id;
16425 CLOSE sel_wp_structure_id;
16426
16427 --get structure version id
16428 OPEN sel_latest_pub_ver(l_structure_id);
16429 FETCH sel_latest_pub_ver into l_structure_version_id;
16430 IF sel_latest_pub_ver%NOTFOUND THEN
16431 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16432 ELSE
16433 l_keep_structure_ver_id := l_structure_version_id;
16434 END IF;
16435 CLOSE sel_latest_pub_ver;
16436
16437 -- Bug 3938654 : Additional Fix that will go as a part of this bug
16438 -- This fix is not related to main issue reported in the bug
16439
16440 -- Actually this call should not be present .This fix should have been
16441 -- done long back as a part of 3597178
16442 -- For the case l_wp_enabled_flag=Y,l_fin_enabled_flag=Y,l_share_code=SHARE_PARTIAL ,this fix
16443 -- has already been done .For this case (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_FULL')
16444 -- It had been missed.
16445
16446 /* Hence doing the commenting
16447 --NYU
16448 --Check if deliverable transactions exist. If so, we cannot change the structure sharing to SPLIT
16449 l_del_trans_exist := PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS(
16450 p_project_id => p_project_id,
16451 x_return_status => l_return_status,
16452 x_msg_count => x_msg_count,
16453 x_msg_data => x_msg_data);
16454 IF l_del_trans_exist = 'Y' THEN
16455 RAISE FND_API.G_EXC_ERROR;
16456 END IF;
16457 */
16458
16459 --delete wp budget for the version we keep
16460 l_struct_version_id_tbl.extend(1); /* Venky */
16461 l_struct_version_id_tbl(1) := l_keep_structure_ver_id;
16462 /*Smukka Bug No. 3474141 Date 03/01/2004 */
16463 /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block */
16464 BEGIN
16465 /*Commented call to this API and replaced with pa_fin_plan_pvt.Delete_wp_option
16466 for Bug 3954050
16467 PA_FIN_PLAN_PVT.delete_wp_budget_versions(
16468 p_struct_elem_version_id_tbl => l_struct_version_id_tbl
16469 ,x_return_status => l_return_status
16470 ,x_msg_count => x_msg_count
16471 ,x_Msg_data => x_msg_data);
16472 */
16473 PA_FIN_PLAN_PVT.delete_wp_option
16474 (
16475 p_project_id => p_project_id,
16476 x_return_status => l_return_status,
16477 x_msg_count => x_msg_count,
16478 x_msg_data => x_msg_data
16479 );
16480 EXCEPTION
16481 WHEN OTHERS THEN
16482 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
16483 p_procedure_name => 'update_structures_setup_attr',
16484 p_error_text => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_option:'||SQLERRM,1,240));
16485 RAISE FND_API.G_EXC_ERROR;
16486 END;
16487 l_msg_count := FND_MSG_PUB.count_msg;
16488 IF l_msg_count > 0 THEN
16489 x_msg_count := l_msg_count;
16490 IF x_msg_count = 1 THEN
16491 x_msg_data := l_msg_data;
16492 END IF;
16493 RAISE FND_API.G_EXC_ERROR;
16494 END IF;
16495
16496 --Delete all other structure versions
16497 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
16498 LOOP
16499 FETCH sel_other_structure_ver into l_del_struc_ver_id,
16500 l_struc_ver_rvn;
16501 EXIT WHEN sel_other_structure_ver%NOTFOUND;
16502 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16503 p_project_id,
16504 l_del_struc_ver_id,
16505 l_return_status,
16506 l_err_msg_code);
16507 IF (l_return_status <> 'S') THEN
16508 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16509 x_msg_data := l_err_msg_code;
16510 RAISE FND_API.G_EXC_ERROR;
16511 END IF;
16512
16513 --get top tasks
16514 OPEN get_top_tasks(l_del_struc_ver_id);
16515 LOOP
16516 FETCH get_top_tasks into l_task_ver_id;
16517 EXIT WHEN get_top_tasks%NOTFOUND;
16518
16519 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16520 p_project_id => p_project_id
16521 ,p_task_version_id => l_task_ver_id
16522 ,p_parent_structure_ver_id => l_del_struc_ver_id
16523 ,x_return_status => l_return_status
16524 ,x_error_message_code => l_err_msg_code );
16525
16526 IF (l_return_status <> 'S') THEN
16527 x_return_status := l_return_status;
16528 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16529 l_msg_data := l_err_msg_code;
16530 CLOSE get_top_tasks;
16531 RAISE FND_API.G_EXC_ERROR;
16532 END IF;
16533 END LOOP;
16534 CLOSE get_top_tasks;
16535
16536 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16537 p_structure_version_id => l_del_struc_ver_id
16538 ,p_record_version_number => l_struc_ver_rvn
16539 ,x_return_status => l_return_status
16540 ,x_msg_count => l_msg_count
16541 ,x_msg_data => l_msg_data);
16542 --Check if there is any error.
16543 l_msg_count := FND_MSG_PUB.count_msg;
16544 IF l_msg_count > 0 THEN
16545 x_msg_count := l_msg_count;
16546 IF x_msg_count = 1 THEN
16547 x_msg_data := l_msg_data;
16548 END IF;
16549 CLOSE sel_other_structure_ver;
16550 RAISE FND_API.G_EXC_ERROR;
16551 END IF;
16552 END LOOP;
16553 CLOSE sel_other_structure_ver;
16554
16555 --delete from pa_proj_progress_attr
16556 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
16557 p_validate_only => FND_API.G_FALSE
16558 ,p_project_id => p_project_id
16559 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
16560 ,p_object_id => l_structure_id
16561 ,p_structure_type => 'WORKPLAN' --Amit
16562 ,x_return_status => l_return_status
16563 ,x_msg_count => l_msg_count
16564 ,x_msg_data => l_msg_data
16565 );
16566
16567 --Check if there is any error.
16568 l_msg_count := FND_MSG_PUB.count_msg;
16569 IF l_msg_count > 0 THEN
16570 x_msg_count := l_msg_count;
16571 IF x_msg_count = 1 THEN
16572 x_msg_data := l_msg_data;
16573 END IF;
16574 RAISE FND_API.G_EXC_ERROR;
16575 END IF;
16576
16577 --delete all tasks not marked as financial in the structure keeping
16578 --delete schedule versions
16579 delete from pa_proj_elem_ver_schedule
16580 where project_id =p_project_id --Bug No 3634334
16581 and element_version_id IN (
16582 select element_version_id
16583 from pa_proj_element_versions
16584 where project_id =p_project_id --Bug No 3634334
16585 and parent_structure_version_id = l_keep_structure_ver_id
16586 and object_type IN ('PA_TASKS', 'PA_STRUCTURES'));
16587
16588 --delete from pa_proj_structure_types
16589 DELETe FROM pa_proj_structure_types
16590 where proj_element_id = l_structure_id
16591 and structure_type_id = (
16592 select structure_type_id from pa_structure_types
16593 where structure_type = 'WORKPLAN');
16594
16595 -- NYU
16596 -- delete deliverable associations
16597 PA_DELIVERABLE_PUB.delete_dlv_associations
16598 (p_project_id=>p_project_id,
16599 x_return_status=>l_return_status,
16600 x_msg_count=>l_msg_count,
16601 x_msg_data=>l_msg_data);
16602
16603 --Check if there is any error.
16604 l_msg_count := FND_MSG_PUB.count_msg;
16605 IF l_msg_count > 0 THEN
16606 x_msg_count := l_msg_count;
16607 IF x_msg_count = 1 THEN
16608 x_msg_data := l_msg_data;
16609 END IF;
16610 RAISE FND_API.G_EXC_ERROR;
16611 END IF;
16612
16613 --bug 3894059
16614 --set versioning disable for financial structure, and structure version as published if it is a project
16615 update pa_proj_workplan_attr
16616 set WP_ENABLE_VERSION_FLAG = 'N'
16617 where proj_element_id = l_structure_id;
16618
16619 IF (l_template_flag <> 'Y') THEN
16620 --project
16621 update pa_proj_elem_ver_structure
16622 set status_code = 'STRUCTURE_PUBLISHED',
16623 latest_eff_published_flag = 'Y',
16624 published_date = sysdate
16625 where project_id = p_project_id
16626 and element_version_id = l_keep_structure_ver_id;
16627 END IF;
16628 --end bug 3894059
16629
16630 IF (p_workplan_enabled_flag = 'Y' AND p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
16631 --Create empty workplan structure
16632 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
16633 (p_validate_only => FND_API.G_FALSE
16634 ,p_project_id => p_project_id
16635 ,p_structure_number => l_wp_name
16636 ,p_structure_name => l_wp_name
16637 ,p_calling_flag => 'WORKPLAN'
16638 ,x_structure_id => l_structure_id
16639 ,x_return_status => l_return_status
16640 ,x_msg_count => l_msg_count
16641 ,x_msg_data => l_msg_data );
16642
16643 --Check if there is any error.
16644 l_msg_count := FND_MSG_PUB.count_msg;
16645 IF l_msg_count > 0 THEN
16646 x_msg_count := l_msg_count;
16647 IF x_msg_count = 1 THEN
16648 x_msg_data := l_msg_data;
16649 END IF;
16650 RAISE FND_API.G_EXC_ERROR;
16651 END IF;
16652
16653 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
16654 (p_validate_only => FND_API.G_FALSE
16655 ,p_structure_id => l_structure_id
16656 ,x_structure_version_id => l_structure_version_id
16657 ,x_return_status => l_return_status
16658 ,x_msg_count => l_msg_count
16659 ,x_msg_data => l_msg_data );
16660
16661 --Check if there is any error.
16662 l_msg_count := FND_MSG_PUB.count_msg;
16663 IF l_msg_count > 0 THEN
16664 x_msg_count := l_msg_count;
16665 IF x_msg_count = 1 THEN
16666 x_msg_data := l_msg_data;
16667 END IF;
16668 RAISE FND_API.G_EXC_ERROR;
16669 END IF;
16670
16671 PA_TASK_PUB1.Create_Schedule_Version(
16672 p_element_version_id => l_structure_version_id
16673 ,p_scheduled_start_date => l_proj_start_date
16674 ,p_scheduled_end_date => l_proj_completion_date
16675 ,x_pev_schedule_id => l_pev_schedule_id
16676 ,x_return_status => l_return_status
16677 ,x_msg_count => l_msg_count
16678 ,x_msg_data => l_msg_data);
16679
16680 --Check if there is any error.
16681 l_msg_count := FND_MSG_PUB.count_msg;
16682 IF l_msg_count > 0 THEN
16683 x_msg_count := l_msg_count;
16684 IF x_msg_count = 1 THEN
16685 x_msg_data := l_msg_data;
16686 END IF;
16687 RAISE FND_API.G_EXC_ERROR;
16688 END IF;
16689
16690 IF (l_template_flag = 'Y') THEN
16691 l_status_code := 'STRUCTURE_WORKING';
16692 l_baseline_flag := 'N';
16693 l_latest_eff_pub_flag := 'N';
16694 l_effective_date := NULL;
16695 ELSE
16696 l_status_code := 'STRUCTURE_PUBLISHED';
16697 l_baseline_flag := 'Y';
16698 l_latest_eff_pub_flag := 'Y';
16699 l_effective_date := sysdate;
16700 END IF;
16701
16702 --create structure version
16703 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
16704 (p_validate_only => FND_API.G_FALSE
16705 ,p_structure_version_id => l_structure_version_id
16706 ,p_structure_version_name => l_name
16707 ,p_structure_version_desc => NULL
16708 ,p_effective_date => l_effective_date
16709 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
16710 ,p_locked_status_code => 'UNLOCKED'
16711 ,p_struct_version_status_code => l_status_code
16712 ,p_baseline_current_flag => l_baseline_flag
16713 ,p_baseline_original_flag => 'N'
16714 ,x_pev_structure_id => l_pev_structure_id
16715 ,x_return_status => l_return_status
16716 ,x_msg_count => l_msg_count
16717 ,x_msg_data => l_msg_data );
16718
16719 --Check if there is any error.
16720 l_msg_count := FND_MSG_PUB.count_msg;
16721 IF l_msg_count > 0 THEN
16722 x_msg_count := l_msg_count;
16723 IF x_msg_count = 1 THEN
16724 x_msg_data := l_msg_data;
16725 END IF;
16726 RAISE FND_API.G_EXC_ERROR;
16727 END IF;
16728
16729 NULL;
16730 ELSIF (p_workplan_enabled_flag = 'N' ) THEN
16731 NULL;
16732 END IF;
16733
16734 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
16735 --disable financial (enable workplan)
16736 --call disable financial structure API
16737 --get structure id
16738 OPEN sel_wp_structure_id;
16739 FETCH sel_wp_structure_id INTO l_structure_id;
16740 CLOSE sel_wp_structure_id;
16741
16742 update pa_proj_elements
16743 set name = l_wp_name,
16744 element_number = l_wp_name
16745 where proj_element_id = l_structure_id;
16746
16747 --Need delete financial tasks API
16748 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
16749 p_validate_only => FND_API.G_FALSE
16750 ,p_project_id => p_project_id
16751 ,x_return_status => l_return_status
16752 ,x_msg_count => l_msg_count
16753 ,x_msg_data => l_msg_data);
16754
16755 --Check if there is any error.
16756 l_msg_count := FND_MSG_PUB.count_msg;
16757 IF l_msg_count > 0 THEN
16758 x_msg_count := l_msg_count;
16759 IF x_msg_count = 1 THEN
16760 x_msg_data := l_msg_data;
16761 END IF;
16762 RAISE FND_API.G_EXC_ERROR;
16763 END IF;
16764
16765 --clear financial Flag API
16766 OPEN sel_all_wp_structure_ver(l_structure_id);
16767 LOOP
16768 FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16769 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16770
16771 PA_PROJECT_STRUCTURE_PUB1.CLEAR_FINANCIAL_FLAG(
16772 p_validate_only => FND_API.G_FALSE
16773 ,p_project_id => p_project_id
16774 ,p_task_version_id => NULL
16775 ,p_structure_version_id => l_structure_version_id
16776 ,x_return_status => l_return_status
16777 ,x_msg_count => l_msg_count
16778 ,x_msg_data => l_msg_data);
16779
16780 --Check if there is any error.
16781 l_msg_count := FND_MSG_PUB.count_msg;
16782 IF l_msg_count > 0 THEN
16783 x_msg_count := l_msg_count;
16784 IF x_msg_count = 1 THEN
16785 x_msg_data := l_msg_data;
16786 END IF;
16787 RAISE FND_API.G_EXC_ERROR;
16788 END IF;
16789
16790 END LOOP;
16791 CLOSE sel_all_wp_structure_ver;
16792
16793 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_PARTIAL') THEN
16794 --partial share; no action required
16795 NULL;
16796 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_FULL') THEN
16797 --full share; no action required
16798 NULL;
16799 END IF;
16800
16801 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SPLIT_MAPPING') THEN
16802 --currently split with mapping
16803 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') OR
16804 (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') OR
16805 (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
16806 --disabled both/workplan/financial
16807 --remove mapping APIs
16808 PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
16809 p_project_id => p_project_id
16810 ,x_return_status => l_return_status
16811 ,x_msg_count => l_msg_count
16812 ,x_msg_data => l_msg_data);
16813
16814 --Check if there is any error.
16815 l_msg_count := FND_MSG_PUB.count_msg;
16816 IF l_msg_count > 0 THEN
16817 x_msg_count := l_msg_count;
16818 IF x_msg_count = 1 THEN
16819 x_msg_data := l_msg_data;
16820 END IF;
16821 RAISE FND_API.G_EXC_ERROR;
16822 END IF;
16823
16824 IF (p_workplan_enabled_flag = 'N') THEN
16825 --disable workplan
16826 --get structure_id
16827 OPEN sel_wp_structure_id;
16828 FETCH sel_wp_structure_id INTO l_structure_id;
16829 CLOSE sel_wp_structure_id;
16830
16831 --delete workplan structure
16832 OPEN sel_all_wp_structure_ver(l_structure_id);
16833 LOOP
16834 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
16835 l_struc_ver_rvn;
16836 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16837 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16838 p_project_id,
16839 l_del_struc_ver_id,
16840 l_return_status,
16841 l_err_msg_code);
16842 IF (l_return_status <> 'S') THEN
16843 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16844 x_msg_data := l_err_msg_code;
16845 RAISE FND_API.G_EXC_ERROR;
16846 END IF;
16847
16848 --get top tasks
16849 OPEN get_top_tasks(l_del_struc_ver_id);
16850 LOOP
16851 FETCH get_top_tasks into l_task_ver_id;
16852 EXIT WHEN get_top_tasks%NOTFOUND;
16853
16854 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16855 p_project_id => p_project_id
16856 ,p_task_version_id => l_task_ver_id
16857 ,p_parent_structure_ver_id => l_del_struc_ver_id
16858 ,x_return_status => l_return_status
16859 ,x_error_message_code => l_err_msg_code );
16860
16861 IF (l_return_status <> 'S') THEN
16862 x_return_status := l_return_status;
16863 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16864 l_msg_data := l_err_msg_code;
16865 CLOSE get_top_tasks;
16866 RAISE FND_API.G_EXC_ERROR;
16867 END IF;
16868 END LOOP;
16869 CLOSE get_top_tasks;
16870
16871 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16872 p_structure_version_id => l_del_struc_ver_id
16873 ,p_record_version_number => l_struc_ver_rvn
16874 ,x_return_status => l_return_status
16875 ,x_msg_count => l_msg_count
16876 ,x_msg_data => l_msg_data);
16877
16878 --Check if there is any error.
16879 l_msg_count := FND_MSG_PUB.count_msg;
16880 IF l_msg_count > 0 THEN
16881 x_msg_count := l_msg_count;
16882 IF x_msg_count = 1 THEN
16883 x_msg_data := l_msg_data;
16884 END IF;
16885 CLOSE sel_all_wp_structure_ver;
16886 RAISE FND_API.G_EXC_ERROR;
16887 END IF;
16888 END LOOP;
16889 CLOSE sel_all_wp_structure_ver;
16890 END IF;
16891
16892 IF (p_financial_enabled_flag = 'N') THEN
16893 --disable financial structure API
16894 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
16895 p_validate_only => FND_API.G_FALSE
16896 ,p_project_id => p_project_id
16897 ,x_return_status => l_return_status
16898 ,x_msg_count => l_msg_count
16899 ,x_msg_data => l_msg_data);
16900
16901 --Check if there is any error.
16902 l_msg_count := FND_MSG_PUB.count_msg;
16903 IF l_msg_count > 0 THEN
16904 x_msg_count := l_msg_count;
16905 IF x_msg_count = 1 THEN
16906 x_msg_data := l_msg_data;
16907 END IF;
16908 RAISE FND_API.G_EXC_ERROR;
16909 END IF;
16910 END IF;
16911
16912 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
16913 --partial share/full share
16914 --remove mapping APIs
16915 PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
16916 p_project_id => p_project_id
16917 ,x_return_status => l_return_status
16918 ,x_msg_count => l_msg_count
16919 ,x_msg_data => l_msg_data);
16920
16921 --loop and delete all workplan versions
16922 OPEN sel_wp_structure_id;
16923 FETCH sel_wp_structure_id INTO l_structure_id;
16924 CLOSE sel_wp_structure_id;
16925
16926 OPEN sel_all_wp_structure_ver(l_structure_id);
16927 LOOP
16928 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
16929 l_struc_ver_rvn;
16930 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16931 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16932 p_project_id,
16933 l_del_struc_ver_id,
16934 l_return_status,
16935 l_err_msg_code);
16936 IF (l_return_status <> 'S') THEN
16937 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16938 x_msg_data := l_err_msg_code;
16939 RAISE FND_API.G_EXC_ERROR;
16940 END IF;
16941
16942 --get top tasks
16943 OPEN get_top_tasks(l_del_struc_ver_id);
16944 LOOP
16945 FETCH get_top_tasks into l_task_ver_id;
16946 EXIT WHEN get_top_tasks%NOTFOUND;
16947
16948 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16949 p_project_id => p_project_id
16950 ,p_task_version_id => l_task_ver_id
16951 ,p_parent_structure_ver_id => l_del_struc_ver_id
16952 ,x_return_status => l_return_status
16953 ,x_error_message_code => l_err_msg_code );
16954
16955
16956 IF (l_return_status <> 'S') THEN
16957 x_return_status := l_return_status;
16958 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16959 l_msg_data := l_err_msg_code;
16960 CLOSE get_top_tasks;
16961 RAISE FND_API.G_EXC_ERROR;
16962 END IF;
16963 END LOOP;
16964 CLOSE get_top_tasks;
16965
16966 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16967 p_structure_version_id => l_del_struc_ver_id
16968 ,p_record_version_number => l_struc_ver_rvn
16969 ,x_return_status => l_return_status
16970 ,x_msg_count => l_msg_count
16971 ,x_msg_data => l_msg_data
16972 );
16973
16974 --Check if there is any error.
16975 l_msg_count := FND_MSG_PUB.count_msg;
16976 IF l_msg_count > 0 THEN
16977 x_msg_count := l_msg_count;
16978 IF x_msg_count = 1 THEN
16979 x_msg_data := l_msg_data;
16980 END IF;
16981 CLOSE sel_all_wp_structure_ver;
16982 RAISE FND_API.G_EXC_ERROR;
16983 END IF;
16984 END LOOP;
16985 CLOSE sel_all_wp_structure_ver;
16986
16987 --Add structure type to financial
16988 OPEN sel_fin_structure_id;
16989 FETCH sel_fin_structure_id into l_structure_id;
16990 CLOSE sel_fin_structure_id;
16991
16992 OPEN sel_struc_type_id;
16993 FETCH sel_struc_type_id INTO l_struc_type_id;
16994 CLOSE sel_struc_type_id;
16995
16996 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
16997 X_ROWID => l_rowid
16998 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
16999 ,X_PROJ_ELEMENT_ID => l_structure_id
17000 ,X_STRUCTURE_TYPE_ID => l_struc_type_id
17001 ,X_RECORD_VERSION_NUMBER => 1
17002 ,X_ATTRIBUTE_CATEGORY => NULL
17003 ,X_ATTRIBUTE1 => NULL
17004 ,X_ATTRIBUTE2 => NULL
17005 ,X_ATTRIBUTE3 => NULL
17006 ,X_ATTRIBUTE4 => NULL
17007 ,X_ATTRIBUTE5 => NULL
17008 ,X_ATTRIBUTE6 => NULL
17009 ,X_ATTRIBUTE7 => NULL
17010 ,X_ATTRIBUTE8 => NULL
17011 ,X_ATTRIBUTE9 => NULL
17012 ,X_ATTRIBUTE10 => NULL
17013 ,X_ATTRIBUTE11 => NULL
17014 ,X_ATTRIBUTE12 => NULL
17015 ,X_ATTRIBUTE13 => NULL
17016 ,X_ATTRIBUTE14 => NULL
17017 ,X_ATTRIBUTE15 => NULL);
17018
17019 l_proj_prog_attr_id := NULL;
17020 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
17021 p_validate_only => FND_API.G_FALSE
17022 ,p_project_id => p_project_id
17023 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
17024 ,P_OBJECT_ID => l_structure_id
17025 ,p_action_set_id => NULL
17026 ,p_structure_type => 'WORKPLAN' --Amit
17027 ,x_proj_progress_attr_id => l_proj_prog_attr_id
17028 ,x_return_status => l_return_status
17029 ,x_msg_count => x_msg_count
17030 ,x_msg_data => x_msg_data);
17031
17032 --get structure version id
17033 OPEN sel_struc_ver(l_structure_id);
17034 FETCH sel_struc_ver into l_structure_version_id;
17035 CLOSE sel_struc_ver;
17036
17037 --add planning transaction to the shared structure version
17038 --add financial planning
17039 /*Smukka Bug No. 3474141 Date 03/01/2004 */
17040 /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block */
17041 BEGIN
17042 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
17043 p_context => 'WORKPLAN'
17044 ,p_project_id => p_project_id
17045 ,p_struct_elem_version_id => l_structure_version_id
17046 ,x_return_status => l_return_status
17047 ,x_msg_count => x_msg_count
17048 ,x_Msg_data => x_msg_data);
17049 EXCEPTION
17050 WHEN OTHERS THEN
17051 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
17052 p_procedure_name => 'update_structures_setup_attr',
17053 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
17054 RAISE FND_API.G_EXC_ERROR;
17055 END;
17056 --Check if there is any error.
17057 l_msg_count := FND_MSG_PUB.count_msg;
17058 IF l_msg_count > 0 THEN
17059 x_msg_count := l_msg_count;
17060 IF x_msg_count = 1 THEN
17061 x_msg_data := l_msg_data;
17062 END IF;
17063 RAISE FND_API.G_EXC_ERROR;
17064 END IF;
17065
17066 --create schedule row for each task
17067 INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
17068 pev_schedule_id,
17069 element_version_id,
17070 project_id,
17071 proj_element_id,
17072 creation_date,
17073 created_by,
17074 last_update_date,
17075 last_updated_by,
17076 scheduled_start_date,
17077 scheduled_finish_date,
17078 milestone_flag,
17079 critical_flag,
17080 calendar_id,
17081 record_version_number,
17082 last_update_login,
17083 source_object_id,
17084 source_object_type)
17085 SELECT
17086 pa_proj_elem_ver_schedule_s.nextval,
17087 PPEV.element_version_id,
17088 PPEV.project_id,
17089 PPEV.proj_element_id,
17090 SYSDATE,
17091 FND_GLOBAL.USER_ID,
17092 SYSDATE,
17093 FND_GLOBAL.USER_ID,
17094 DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.START_DATE), trunc(l_proj_start_date))),
17095 DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_proj_completion_date))),
17096 'N',
17097 'N',
17098 NULL,
17099 0,
17100 FND_GLOBAL.LOGIN_ID,
17101 PPEV.project_id,
17102 'PA_PROJECTS'
17103 FROM PA_TASKS PT,
17104 PA_PROJ_ELEMENT_VERSIONS PPEV
17105 WHERE
17106 PPEV.parent_structure_version_id = l_structure_version_id
17107 AND PPEV.proj_element_id = PT.task_id (+);
17108
17109 OPEN sel_struc_and_task_vers(l_structure_version_id);
17110 LOOP
17111 FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
17112 EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
17113 /* Bug 2790703 Begin */
17114 --Add to array for rollup
17115 l_index := l_index + 1;
17116 l_task_ver_ids_tbl(l_index) := l_element_version_id;
17117 /* Bug 2790703 End */
17118 END LOOP;
17119 CLOSE sel_struc_and_task_vers;
17120
17121 IF (l_task_ver_ids_tbl.count > 0) THEN
17122 --rollup
17123 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
17124 p_commit => FND_API.G_FALSE,
17125 p_element_versions => l_task_ver_ids_tbl,
17126 x_return_status => l_return_status,
17127 x_msg_count => l_msg_count,
17128 x_msg_data => l_msg_data);
17129
17130 --Check if there is any error.
17131 l_msg_count := FND_MSG_PUB.count_msg;
17132 IF l_msg_count > 0 THEN
17133 x_msg_count := l_msg_count;
17134 IF x_msg_count = 1 THEN
17135 x_msg_data := l_msg_data;
17136 END IF;
17137 RAISE FND_API.G_EXC_ERROR;
17138 END IF;
17139 END IF;
17140
17141 --Check if there is any error.
17142 l_msg_count := FND_MSG_PUB.count_msg;
17143 IF l_msg_count > 0 THEN
17144 x_msg_count := l_msg_count;
17145 IF x_msg_count = 1 THEN
17146 x_msg_data := l_msg_data;
17147 END IF;
17148 RAISE FND_API.G_EXC_ERROR;
17149 END IF;
17150
17151
17152 -- Bug # 5077599.
17153
17154 -- If the project is version disabled, then baseline the structure version.
17155
17156 if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'N') then
17157
17158 update pa_proj_elem_ver_structure ppevs
17159 set ppevs.current_flag = 'Y'
17160 , ppevs.original_flag = 'Y'
17161 , ppevs.record_version_number = (ppevs.record_version_number+1)
17162 where ppevs.project_id = p_project_id
17163 and ppevs.element_version_id = l_structure_version_id;
17164
17165 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION
17166 (p_commit => p_commit
17167 ,p_validate_only => p_validate_only
17168 ,p_validation_level => p_validation_level
17169 ,p_calling_module => p_calling_module
17170 ,p_debug_mode => p_debug_mode
17171 ,p_max_msg_count => p_max_msg_count
17172 ,p_structure_version_id => l_structure_version_id
17173 ,x_return_status => x_return_status
17174 ,x_msg_count => x_msg_count
17175 ,x_msg_data => x_msg_data);
17176
17177 end if;
17178
17179 -- Bug # 5077599.
17180
17181
17182 IF (p_sharing_option_code = 'SHARE_FULL') THEN
17183 NULL;
17184 ELSIF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
17185 NULL;
17186 END IF;
17187 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_MAPPING') THEN
17188 --split mapping; no action required
17189 NULL;
17190 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
17191 --split no mapping
17192 --remove mapping APIs
17193 PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
17194 p_project_id => p_project_id
17195 ,x_return_status => l_return_status
17196 ,x_msg_count => l_msg_count
17197 ,x_msg_data => l_msg_data);
17198
17199 --Check if there is any error.
17200 l_msg_count := FND_MSG_PUB.count_msg;
17201 IF l_msg_count > 0 THEN
17202 x_msg_count := l_msg_count;
17203 IF x_msg_count = 1 THEN
17204 x_msg_data := l_msg_data;
17205 END IF;
17206 RAISE FND_API.G_EXC_ERROR;
17207 END IF;
17208
17209 END IF;
17210
17211 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SPLIT_NO_MAPPING') THEN
17212 --currently split no mapping
17213 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') OR
17214 (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') OR
17215 (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
17216 --disabled both/delete workplan structure/disable financial structure API
17217
17218 IF (p_workplan_enabled_flag = 'N') THEN
17219 --delete workplan structure
17220 --get structure_id
17221 OPEN sel_wp_structure_id;
17222 FETCH sel_wp_structure_id INTO l_structure_id;
17223 CLOSE sel_wp_structure_id;
17224
17225 --delete workplan structure
17226 OPEN sel_all_wp_structure_ver(l_structure_id);
17227 LOOP
17228 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17229 l_struc_ver_rvn;
17230 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17231 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17232 p_project_id,
17233 l_del_struc_ver_id,
17234 l_return_status,
17235 l_err_msg_code);
17236 IF (l_return_status <> 'S') THEN
17237 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17238 x_msg_data := l_err_msg_code;
17239 RAISE FND_API.G_EXC_ERROR;
17240 END IF;
17241
17242 --get top tasks
17243 OPEN get_top_tasks(l_del_struc_ver_id);
17244 LOOP
17245 FETCH get_top_tasks into l_task_ver_id;
17246 EXIT WHEN get_top_tasks%NOTFOUND;
17247
17248 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17249 p_project_id => p_project_id
17250 ,p_task_version_id => l_task_ver_id
17251 ,p_parent_structure_ver_id => l_del_struc_ver_id
17252 ,x_return_status => l_return_status
17253 ,x_error_message_code => l_err_msg_code );
17254
17255 IF (l_return_status <> 'S') THEN
17256 x_return_status := l_return_status;
17257 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17258 l_msg_data := l_err_msg_code;
17259 CLOSE get_top_tasks;
17260 RAISE FND_API.G_EXC_ERROR;
17261 END IF;
17262 END LOOP;
17263 CLOSE get_top_tasks;
17264
17265 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17266 p_structure_version_id => l_del_struc_ver_id
17267 ,p_record_version_number => l_struc_ver_rvn
17268 ,x_return_status => l_return_status
17269 ,x_msg_count => l_msg_count
17270 ,x_msg_data => l_msg_data);
17271
17272 --Check if there is any error.
17273 l_msg_count := FND_MSG_PUB.count_msg;
17274 IF l_msg_count > 0 THEN
17275 x_msg_count := l_msg_count;
17276 IF x_msg_count = 1 THEN
17277 x_msg_data := l_msg_data;
17278 END IF;
17279 CLOSE sel_all_wp_structure_ver;
17280 RAISE FND_API.G_EXC_ERROR;
17281 END IF;
17282 END LOOP;
17283 CLOSE sel_all_wp_structure_ver;
17284 END IF;
17285
17286 IF (p_financial_enabled_flag = 'N') THEN
17287 --disable financial structure API
17288 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
17289 p_validate_only => FND_API.G_FALSE
17290 ,p_project_id => p_project_id
17291 ,x_return_status => l_return_status
17292 ,x_msg_count => l_msg_count
17293 ,x_msg_data => l_msg_data);
17294
17295 --Check if there is any error.
17296 l_msg_count := FND_MSG_PUB.count_msg;
17297 IF l_msg_count > 0 THEN
17298 x_msg_count := l_msg_count;
17299 IF x_msg_count = 1 THEN
17300 x_msg_data := l_msg_data;
17301 END IF;
17302 RAISE FND_API.G_EXC_ERROR;
17303 END IF;
17304 END IF;
17305 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
17306 --partial share/full share
17307 --remove financial structure row in pa_proj_workplan_attr
17308 --delete all workplan dependencies
17309 --delete workplan structure
17310 --add schedule rows for financial structure and tasks
17311 --add workplan structure type
17312
17313 --loop and delete all workplan versions
17314 OPEN sel_wp_structure_id;
17315 FETCH sel_wp_structure_id INTO l_structure_id;
17316 CLOSE sel_wp_structure_id;
17317
17318 OPEN sel_all_wp_structure_ver(l_structure_id);
17319 LOOP
17320 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17321 l_struc_ver_rvn;
17322 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17323 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17324 p_project_id,
17325 l_del_struc_ver_id,
17326 l_return_status,
17327 l_err_msg_code);
17328 IF (l_return_status <> 'S') THEN
17329 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17330 x_msg_data := l_err_msg_code;
17331 RAISE FND_API.G_EXC_ERROR;
17332 END IF;
17333
17334 --get top tasks
17335 OPEN get_top_tasks(l_del_struc_ver_id);
17336 LOOP
17337 FETCH get_top_tasks into l_task_ver_id;
17338 EXIT WHEN get_top_tasks%NOTFOUND;
17339
17340 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17341 p_project_id => p_project_id
17342 ,p_task_version_id => l_task_ver_id
17343 ,p_parent_structure_ver_id => l_del_struc_ver_id
17344 ,x_return_status => l_return_status
17345 ,x_error_message_code => l_err_msg_code );
17346
17347
17348 IF (l_return_status <> 'S') THEN
17349 x_return_status := l_return_status;
17350 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17351 l_msg_data := l_err_msg_code;
17352 CLOSE get_top_tasks;
17353 RAISE FND_API.G_EXC_ERROR;
17354 END IF;
17355 END LOOP;
17356 CLOSE get_top_tasks;
17357
17358 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17359 p_structure_version_id => l_del_struc_ver_id
17360 ,p_record_version_number => l_struc_ver_rvn
17361 ,x_return_status => l_return_status
17362 ,x_msg_count => l_msg_count
17363 ,x_msg_data => l_msg_data
17364 );
17365
17366 --Check if there is any error.
17367 l_msg_count := FND_MSG_PUB.count_msg;
17368 IF l_msg_count > 0 THEN
17369 x_msg_count := l_msg_count;
17370 IF x_msg_count = 1 THEN
17371 x_msg_data := l_msg_data;
17372 END IF;
17373 CLOSE sel_all_wp_structure_ver;
17374 RAISE FND_API.G_EXC_ERROR;
17375 END IF;
17376 END LOOP;
17377 CLOSE sel_all_wp_structure_ver;
17378
17379 --Add structure type to financial
17380 OPEN sel_fin_structure_id;
17381 FETCH sel_fin_structure_id into l_structure_id;
17382 CLOSE sel_fin_structure_id;
17383
17384 OPEN sel_struc_type_id;
17385 FETCH sel_struc_type_id INTO l_struc_type_id;
17386 CLOSE sel_struc_type_id;
17387
17388 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
17389 X_ROWID => l_rowid
17390 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
17391 ,X_PROJ_ELEMENT_ID => l_structure_id
17392 ,X_STRUCTURE_TYPE_ID => l_struc_type_id
17393 ,X_RECORD_VERSION_NUMBER => 1
17394 ,X_ATTRIBUTE_CATEGORY => NULL
17395 ,X_ATTRIBUTE1 => NULL
17396 ,X_ATTRIBUTE2 => NULL
17397 ,X_ATTRIBUTE3 => NULL
17398 ,X_ATTRIBUTE4 => NULL
17399 ,X_ATTRIBUTE5 => NULL
17400 ,X_ATTRIBUTE6 => NULL
17401 ,X_ATTRIBUTE7 => NULL
17402 ,X_ATTRIBUTE8 => NULL
17403 ,X_ATTRIBUTE9 => NULL
17404 ,X_ATTRIBUTE10 => NULL
17405 ,X_ATTRIBUTE11 => NULL
17406 ,X_ATTRIBUTE12 => NULL
17407 ,X_ATTRIBUTE13 => NULL
17408 ,X_ATTRIBUTE14 => NULL
17409 ,X_ATTRIBUTE15 => NULL);
17410
17411 l_proj_prog_attr_id := NULL;
17412 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
17413 p_validate_only => FND_API.G_FALSE
17414 ,p_project_id => p_project_id
17415 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
17416 ,P_OBJECT_ID => l_structure_id
17417 ,p_action_set_id => NULL
17418 ,p_structure_type => 'WORKPLAN' --Amit
17419 ,x_proj_progress_attr_id => l_proj_prog_attr_id
17420 ,x_return_status => l_return_status
17421 ,x_msg_count => x_msg_count
17422 ,x_msg_data => x_msg_data);
17423
17424 --get structure version id
17425 OPEN sel_struc_ver(l_structure_id);
17426 FETCH sel_struc_ver into l_structure_version_id;
17427 CLOSE sel_struc_ver;
17428
17429 --add financial planning
17430 /*Smukka Bug No. 3474141 Date 03/01/2004 */
17431 /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block */
17432 BEGIN
17433 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
17434 p_context => 'WORKPLAN'
17435 ,p_project_id => p_project_id
17436 ,p_struct_elem_version_id => l_structure_version_id
17437 ,x_return_status => l_return_status
17438 ,x_msg_count => x_msg_count
17439 ,x_Msg_data => x_msg_data);
17440 EXCEPTION
17441 WHEN OTHERS THEN
17442 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
17443 p_procedure_name => 'update_structures_setup_attr',
17444 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
17445 RAISE FND_API.G_EXC_ERROR;
17446 END;
17447 --Check if there is any error.
17448 l_msg_count := FND_MSG_PUB.count_msg;
17449 IF l_msg_count > 0 THEN
17450 x_msg_count := l_msg_count;
17451 IF x_msg_count = 1 THEN
17452 x_msg_data := l_msg_data;
17453 END IF;
17454 RAISE FND_API.G_EXC_ERROR;
17455 END IF;
17456
17457 --create schedule row for each task
17458 INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
17459 pev_schedule_id,
17460 element_version_id,
17461 project_id,
17462 proj_element_id,
17463 creation_date,
17464 created_by,
17465 last_update_date,
17466 last_updated_by,
17467 scheduled_start_date,
17468 scheduled_finish_date,
17469 milestone_flag,
17470 critical_flag,
17471 calendar_id,
17472 record_version_number,
17473 last_update_login,
17474 source_object_id,
17475 source_object_type
17476 )
17477 SELECT
17478 pa_proj_elem_ver_schedule_s.nextval,
17479 PPEV.element_version_id,
17480 PPEV.project_id,
17481 PPEV.proj_element_id,
17482 SYSDATE,
17483 FND_GLOBAL.USER_ID,
17484 SYSDATE,
17485 FND_GLOBAL.USER_ID,
17486 DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.START_DATE), trunc(l_proj_start_date))),
17487 DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_proj_completion_date))),
17488 'N',
17489 'N',
17490 NULL,
17491 0,
17492 FND_GLOBAL.LOGIN_ID,
17493 PPEV.project_id,
17494 'PA_PROJECTS'
17495 FROM PA_TASKS PT,
17496 PA_PROJ_ELEMENT_VERSIONS PPEV
17497 WHERE
17498 PPEV.parent_structure_version_id = l_structure_version_id
17499 AND PPEV.proj_element_id = PT.task_id (+);
17500
17501 OPEN sel_struc_and_task_vers(l_structure_version_id);
17502 LOOP
17503 FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
17504 EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
17505 /* Bug 2790703 Begin */
17506 --Add to array for rollup
17507 l_index := l_index + 1;
17508 l_task_ver_ids_tbl(l_index) := l_element_version_id;
17509 /* Bug 2790703 End */
17510 END LOOP;
17511 CLOSE sel_struc_and_task_vers;
17512
17513 IF (l_task_ver_ids_tbl.count > 0) THEN
17514 --rollup
17515 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
17516 p_commit => FND_API.G_FALSE,
17517 p_element_versions => l_task_ver_ids_tbl,
17518 x_return_status => l_return_status,
17519 x_msg_count => l_msg_count,
17520 x_msg_data => l_msg_data);
17521
17522 --Check if there is any error.
17523 l_msg_count := FND_MSG_PUB.count_msg;
17524 IF l_msg_count > 0 THEN
17525 x_msg_count := l_msg_count;
17526 IF x_msg_count = 1 THEN
17527 x_msg_data := l_msg_data;
17528 END IF;
17529 RAISE FND_API.G_EXC_ERROR;
17530 END IF;
17531 END IF;
17532
17533 --Check if there is any error.
17534 l_msg_count := FND_MSG_PUB.count_msg;
17535 IF l_msg_count > 0 THEN
17536 x_msg_count := l_msg_count;
17537 IF x_msg_count = 1 THEN
17538 x_msg_data := l_msg_data;
17539 END IF;
17540 RAISE FND_API.G_EXC_ERROR;
17541 END IF;
17542
17543 -- Bug # 5077599.
17544
17545 -- If the project is version disabled, then baseline the structure version.
17546
17547 if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'N') then
17548
17549 update pa_proj_elem_ver_structure ppevs
17550 set ppevs.current_flag = 'Y'
17551 , ppevs.original_flag = 'Y'
17552 , ppevs.record_version_number = (ppevs.record_version_number+1)
17553 where ppevs.project_id = p_project_id
17554 and ppevs.element_version_id = l_structure_version_id;
17555
17556 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION
17557 (p_commit => p_commit
17558 ,p_validate_only => p_validate_only
17559 ,p_validation_level => p_validation_level
17560 ,p_calling_module => p_calling_module
17561 ,p_debug_mode => p_debug_mode
17562 ,p_max_msg_count => p_max_msg_count
17563 ,p_structure_version_id => l_structure_version_id
17564 ,x_return_status => x_return_status
17565 ,x_msg_count => x_msg_count
17566 ,x_msg_data => x_msg_data);
17567
17568 end if;
17569
17570 -- Bug # 5077599.
17571
17572
17573 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_MAPPING') THEN
17574 --split mapping; no action required
17575 NULL;
17576 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
17577 --split no mapping; no action required
17578 NULL;
17579 END IF;
17580
17581 END IF;
17582
17583 IF (p_workplan_enabled_flag = 'N' or p_financial_enabled_flag = 'N') THEN
17584 --clear sharing option
17585 l_new_share_code := NULL;
17586 ELSE
17587 l_new_share_code := p_sharing_option_code;
17588 END IF;
17589
17590 update pa_projects_all
17591 set structure_sharing_code = l_new_share_code
17592 where project_id = p_project_id;
17593
17594 IF l_delv_enabled = 'Y' THEN
17595 --currently enabled
17596 IF (p_deliverables_enabled_flag = 'N') THEN
17597 PA_DELIVERABLE_PUB.DELETE_DELIVERABLE_STRUCTURE
17598 (p_project_id => p_project_id
17599 ,x_return_status => l_return_status
17600 ,x_msg_count => l_msg_count
17601 ,x_msg_data => l_msg_data );
17602
17603 --Check if there is any error.
17604 l_msg_count := FND_MSG_PUB.count_msg;
17605 IF l_msg_count > 0 THEN
17606 x_msg_count := l_msg_count;
17607 IF x_msg_count = 1 THEN
17608 x_msg_data := l_msg_data;
17609 END IF;
17610 RAISE FND_API.G_EXC_ERROR;
17611 END IF;
17612 END IF;
17613 ELSE --l_delv_enabled = 'N'
17614 --currently disabled
17615 IF (p_deliverables_enabled_flag = 'Y') THEN
17616 --enable deliverable
17617 --get suffix
17618 select meaning
17619 into l_suffix
17620 from pa_lookups
17621 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
17622 and lookup_code = 'DELIVERABLE';
17623 --get deliverable name
17624 l_del_name := substrb(l_name||l_append||l_suffix, 1, 240);
17625
17626 --create workplan structure
17627 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
17628 (p_validate_only => FND_API.G_FALSE
17629 ,p_project_id => p_project_id
17630 ,p_structure_number => l_del_name
17631 ,p_structure_name => l_del_name
17632 ,p_calling_flag => 'DELIVERABLE'
17633 ,x_structure_id => l_structure_id
17634 ,x_return_status => l_return_status
17635 ,x_msg_count => l_msg_count
17636 ,x_msg_data => l_msg_data );
17637
17638 --Check if there is any error.
17639 l_msg_count := FND_MSG_PUB.count_msg;
17640 IF l_msg_count > 0 THEN
17641 x_msg_count := l_msg_count;
17642 IF x_msg_count = 1 THEN
17643 x_msg_data := l_msg_data;
17644 END IF;
17645 RAISE FND_API.G_EXC_ERROR;
17646 END IF;
17647
17648 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
17649 (p_validate_only => FND_API.G_FALSE
17650 ,p_structure_id => l_structure_id
17651 ,x_structure_version_id => l_structure_version_id
17652 ,x_return_status => l_return_status
17653 ,x_msg_count => l_msg_count
17654 ,x_msg_data => l_msg_data );
17655
17656 --Check if there is any error.
17657 l_msg_count := FND_MSG_PUB.count_msg;
17658 IF l_msg_count > 0 THEN
17659 x_msg_count := l_msg_count;
17660 IF x_msg_count = 1 THEN
17661 x_msg_data := l_msg_data;
17662 END IF;
17663 RAISE FND_API.G_EXC_ERROR;
17664 END IF;
17665
17666 PA_TASK_PUB1.Create_Schedule_Version(
17667 p_element_version_id => l_structure_version_id
17668 ,p_scheduled_start_date => l_proj_start_date
17669 ,p_scheduled_end_date => l_proj_completion_date
17670 ,x_pev_schedule_id => l_pev_schedule_id
17671 ,x_return_status => l_return_status
17672 ,x_msg_count => l_msg_count
17673 ,x_msg_data => l_msg_data);
17674
17675 --Check if there is any error.
17676 l_msg_count := FND_MSG_PUB.count_msg;
17677 IF l_msg_count > 0 THEN
17678 x_msg_count := l_msg_count;
17679 IF x_msg_count = 1 THEN
17680 x_msg_data := l_msg_data;
17681 END IF;
17682 RAISE FND_API.G_EXC_ERROR;
17683 END IF;
17684
17685 IF (l_template_flag = 'Y') THEN
17686 l_status_code := 'STRUCTURE_WORKING';
17687 l_baseline_flag := 'N';
17688 l_latest_eff_pub_flag := 'N';
17689 l_effective_date := NULL;
17690 ELSE
17691 l_status_code := 'STRUCTURE_PUBLISHED';
17692 l_baseline_flag := 'N';
17693 l_latest_eff_pub_flag := 'Y';
17694 l_effective_date := sysdate;
17695 END IF;
17696
17697 --create structure version
17698 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
17699 (p_validate_only => FND_API.G_FALSE
17700 ,p_structure_version_id => l_structure_version_id
17701 ,p_structure_version_name => l_del_name
17702 ,p_structure_version_desc => NULL
17703 ,p_effective_date => l_effective_date
17704 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
17705 ,p_locked_status_code => 'UNLOCKED'
17706 ,p_struct_version_status_code => l_status_code
17707 ,p_baseline_current_flag => l_baseline_flag
17708 ,p_baseline_original_flag => 'N'
17709 ,x_pev_structure_id => l_pev_structure_id
17710 ,x_return_status => l_return_status
17711 ,x_msg_count => l_msg_count
17712 ,x_msg_data => l_msg_data );
17713
17714 --Check if there is any error.
17715 l_msg_count := FND_MSG_PUB.count_msg;
17716 IF l_msg_count > 0 THEN
17717 x_msg_count := l_msg_count;
17718 IF x_msg_count = 1 THEN
17719 x_msg_data := l_msg_data;
17720 END IF;
17721 RAISE FND_API.G_EXC_ERROR;
17722 END IF;
17723
17724 END IF;
17725 END IF;
17726
17727 -- FP.M changes below
17728 If p_sys_program_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17729 l_sys_program_flag := null;
17730 else
17731 l_sys_program_flag := p_sys_program_flag;
17732 end if;
17733
17734 If p_allow_multi_prog_rollup = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17735 l_allow_multi_program_rollup :=null;
17736 else
17737 l_allow_multi_program_rollup :=p_allow_multi_prog_rollup;
17738 end if;
17739
17740 --bug 4275096
17741 IF l_sys_program_flag = 'N' AND l_allow_multi_program_rollup = 'Y'
17742 THEN
17743 Pa_Utils.ADD_MESSAGE
17744 ( p_app_short_name => 'PA',
17745 p_msg_name =>'PA_PS_EN_SYS_PROG_ERR');
17746 RAISE FND_API.G_EXC_ERROR;
17747 END IF;
17748 --end bug 4275096
17749
17750 IF (l_proj_sys_program_flag='Y' and nvl(l_sys_program_flag,'N')='N' ) then
17751 l_flag := PA_RELATIONSHIP_UTILS.DISABLE_SYS_PROG_OK(p_project_id);
17752 If l_flag='N' Then
17753 Pa_Utils.ADD_MESSAGE
17754 ( p_app_short_name => 'PA',
17755 p_msg_name =>'PA_PS_DIS_SYS_PROG_ERR');
17756 RAISE FND_API.G_EXC_ERROR;
17757 END IF;
17758 END IF;
17759
17760 IF (l_proj_allow_program_rollup='Y' and nvl(l_allow_multi_program_rollup,'N')='N' ) then
17761 l_flag := PA_RELATIONSHIP_UTILS.DISABLE_MULTI_PROG_OK(p_project_id);
17762 IF l_flag ='N' Then
17763 Pa_Utils.ADD_MESSAGE
17764 ( p_app_short_name => 'PA',
17765 p_msg_name =>'PA_PS_DIS_MULTI_PROG_ERR');
17766 RAISE FND_API.G_EXC_ERROR;
17767 END IF;
17768 END IF;
17769
17770 -- IF NOT FND_API.TO_BOOLEAN(p_validate_only) THEN
17771 UPDATE pa_projects_all
17772 SET
17773 sys_program_flag = nvl(l_sys_program_flag,'N'),
17774 allow_multi_program_rollup = nvl(l_allow_multi_program_rollup,'N')
17775 WHERE project_id = p_project_id;
17776 -- END IF;
17777 -- end of FP.M changes
17778
17779 x_return_status := FND_API.G_RET_STS_SUCCESS;
17780
17781 IF (p_debug_mode = 'Y') THEN
17782 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr end');
17783 END IF;
17784
17785 EXCEPTION
17786 WHEN FND_API.G_EXC_ERROR THEN
17787 IF (p_commit = FND_API.G_TRUE) THEN
17788 ROLLBACK to update_struc_setup_attr_pvt;
17789 END IF;
17790 x_msg_count := FND_MSG_PUB.count_msg;
17791 x_return_status := FND_API.G_RET_STS_ERROR;
17792 WHEN OTHERS THEN
17793 IF (p_commit = FND_API.G_TRUE) THEN
17794 ROLLBACK to update_struc_setup_attr_pvt;
17795 END IF;
17796 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17797 x_msg_count := FND_MSG_PUB.count_msg;
17798 --put message
17799 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
17800 p_procedure_name => 'update_structures_setup_attr',
17801 p_error_text => SUBSTRB(SQLERRM,1,240));
17802 RAISE;
17803 END update_structures_setup_attr;
17804
17805 end PA_PROJECT_STRUCTURE_PVT1;