[Home] [Help]
PACKAGE BODY: APPS.PA_PROJECT_STRUCTURE_PVT1
Source
1 package body PA_PROJECT_STRUCTURE_PVT1 as
2 /*$Header: PAXSTCVB.pls 120.31.12020000.6 2013/03/28 11:13:22 bpottipa 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 -- Bug 10101426: Added following code to handle call from financial breakdown structure update page.
2075 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id, 'FINANCIAL') = 'Y'
2076 AND PA_PROJECT_STRUCTURE_UTILS.check_edit_fin_ok(l_project_id,l_structure_version_id) = 'Y') THEN
2077 --Check if structure version name is unique if modified
2078 IF (p_structure_version_name <> l_name) THEN
2079 IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(p_structure_version_name,
2080 p_pev_structure_id,
2081 l_project_id,
2082 l_proj_element_id)) THEN
2083 PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
2084 x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
2085 RAISE FND_API.G_EXC_ERROR;
2086 ELSE
2087 l_name := p_structure_version_name;
2088 END IF;
2089 END IF;
2090 END IF;
2091 -- Bug 10101426: End
2092
2093 --other attributes
2094 If (p_struct_version_status_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2095 p_struct_version_status_code IS NULL) THEN
2096 l_status_code := p_struct_version_status_code;
2097 END IF;
2098 IF (p_structure_version_desc <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2099 p_structure_version_desc IS NULL) THEN
2100 l_description := p_structure_version_desc;
2101 END IF;
2102
2103 IF (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2104 p_change_reason_code IS NULL) THEN
2105 l_change_reason_code := p_change_reason_code;
2106 END IF;
2107
2108 --FPM bug 3301192
2109 IF (p_current_working_ver_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2110 p_current_working_ver_flag IS NULL) THEN
2111 NULL;
2112 ELSE
2113 l_current_working_ver_flag := p_current_working_ver_flag;
2114 END IF;
2115 --end FPM bug 3301192
2116
2117 --Check if there is any error.
2118 l_msg_count := FND_MSG_PUB.count_msg;
2119 -- IF p_calling_module = 'PA_UPD_WBS_ATTR_UN' THEN Commented for Bug 6372780
2120 IF l_msg_count > l_msg_count_int THEN
2121 x_msg_count := l_msg_count;
2122 IF x_msg_count = 1 THEN
2123 x_msg_data := l_msg_data;
2124 END IF;
2125 RAISE FND_API.G_EXC_ERROR;
2126 END IF;/*Bug# 6414944*/
2127 /* Commented for Bug 6372780
2128 ELSIF l_msg_count > 0 THEN
2129 x_msg_count := l_msg_count;
2130 IF x_msg_count = 1 THEN
2131 x_msg_data := l_msg_data;
2132 END IF;
2133 RAISE FND_API.G_EXC_ERROR;
2134 END IF;
2135 */
2136
2137 PA_PROJ_ELEM_VER_STRUCTURE_PKG.update_row(
2138 X_ROWID => l_rowid
2139 , X_PEV_STRUCTURE_ID => p_pev_structure_id
2140 , X_ELEMENT_VERSION_ID => l_structure_version_id
2141 , X_VERSION_NUMBER => l_version_number
2142 , X_NAME => l_name
2143 , X_PROJECT_ID => l_project_id
2144 , X_PROJ_ELEMENT_ID => l_proj_element_id
2145 , X_DESCRIPTION => l_description
2146 , X_EFFECTIVE_DATE => l_effective_date
2147 , X_PUBLISHED_DATE => l_published_date
2148 , X_PUBLISHED_BY => l_published_by_person_id
2149 , X_CURRENT_BASELINE_DATE => l_current_baseline_date
2150 , X_CURRENT_BASELINE_FLAG => l_current_flag
2151 , X_CURRENT_BASELINE_BY => l_current_baseline_person_id
2152 , X_ORIGINAL_BASELINE_DATE => l_original_baseline_date
2153 , X_ORIGINAL_BASELINE_FLAG => l_original_flag
2154 , X_ORIGINAL_BASELINE_BY => l_original_baseline_person_id
2155 , X_LOCK_STATUS_CODE => l_lock_status_code
2156 , X_LOCKED_BY => l_locked_by_person_id
2157 , X_LOCKED_DATE => l_locked_date
2158 , X_STATUS_CODE => l_status_code
2159 , X_WF_STATUS_CODE => l_wf_status_code
2160 , X_LATEST_EFF_PUBLISHED_FLAG => l_latest_eff_published_flag
2161 , X_CHANGE_REASON_CODE => l_change_reason_code
2162 , X_RECORD_VERSION_NUMBER => p_record_version_number
2163 , X_CURRENT_WORKING_FLAG => l_current_working_ver_flag --FPM bug 3301192
2164 );
2165
2166
2167 --FPM bug 3301192
2168 --now set the current working flag for the other working versions to 'N'
2169 IF l_current_working_ver_flag = 'Y'
2170 THEN
2171 UPDATE pa_proj_elem_ver_structure
2172 SET current_working_flag = 'N'
2173 where project_id = l_project_id
2174 and proj_element_id = l_proj_element_id
2175 and pev_structure_id <> p_pev_structure_id
2176 and current_working_flag = 'Y';
2177
2178 -- Begin Fix For Bug # 4297556.
2179
2180 -- For a split structure, we delete all subproject relationships where any of the other working
2181 -- workplan versions is the child entity.
2182
2183 for l_cur_rel_ids_rec in cur_relationship_ids(l_structure_version_id, l_project_id)
2184
2185 loop
2186
2187 PA_RELATIONSHIP_PVT.Delete_SubProject_Association(
2188 p_commit => p_commit
2189 ,p_validate_only => p_validate_only
2190 ,p_debug_mode => p_debug_mode
2191 ,p_object_relationships_id => l_cur_rel_ids_rec.object_relationship_id
2192 ,p_record_version_number => l_cur_rel_ids_rec.record_version_number
2193 ,x_return_status => x_return_status
2194 ,x_msg_count => x_msg_count
2195 ,x_msg_data => x_msg_data);
2196
2197 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2198
2199 raise FND_API.G_EXC_ERROR;
2200
2201 end if;
2202
2203 -- Begin Bug # 4556844.
2204
2205 PA_RELATIONSHIP_PVT.Create_SubProject_Association(
2206 p_commit => p_commit
2207 ,p_validate_only => p_validate_only
2208 ,p_debug_mode => p_debug_mode
2209 ,p_src_proj_id => l_cur_rel_ids_rec.object_id_from2
2210 ,p_task_ver_id => l_cur_rel_ids_rec.object_id_from1
2211 ,p_dest_proj_id => l_project_id
2212 ,p_dest_proj_name => l_cur_rel_ids_rec.name
2213 ,p_comment => l_cur_rel_ids_rec.comments
2214 ,x_return_status => x_return_status
2215 ,x_msg_count => x_msg_count
2216 ,x_msg_data => x_msg_data);
2217
2218 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2219
2220 raise FND_API.G_EXC_ERROR;
2221
2222 end if;
2223
2224 -- End Bug # 4556844.
2225
2226 end loop;
2227
2228 -- End Fix For Bug # 4297556.
2229
2230 END IF;
2231 --end FPM bug 3301192
2232
2233 x_return_status := FND_API.G_RET_STS_SUCCESS;
2234
2235 IF (p_debug_mode = 'Y') THEN
2236 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE_VERSION_ATTR end');
2237 END IF;
2238
2239 EXCEPTION
2240 WHEN NO_DATA_FOUND THEN
2241 if p_commit = FND_API.G_TRUE THEN
2242 rollback to UPDATE_STRUC_VER_ATTR_PVT;
2243 end if;
2244 x_return_status := FND_API.G_RET_STS_ERROR;
2245 WHEN FND_API.G_EXC_ERROR THEN
2246 IF (p_commit = FND_API.G_TRUE) THEN
2247 ROLLBACK to UPDATE_STRUC_VER_ATTR_PVT;
2248 END IF;
2249 x_msg_count := FND_MSG_PUB.count_msg;
2250 x_return_status := FND_API.G_RET_STS_ERROR;
2251 WHEN OTHERS THEN
2252 IF (p_commit = FND_API.G_TRUE) THEN
2253 ROLLBACK to UPDATE_STRUC_VER_ATTR_PVT;
2254 END IF;
2255 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2256 x_msg_count := FND_MSG_PUB.count_msg;
2257 --put message
2258 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2259 p_procedure_name => 'Update_Structure_Version_Attr',
2260 p_error_text => SUBSTRB(SQLERRM,1,240));
2261 RAISE;
2262 END Update_Structure_Version_Attr;
2263
2264
2265
2266 -- API name : Delete_Structure
2267 -- Type : Private Procedure
2268 -- Pre-reqs : None
2269 -- Return Value : N/A
2270 -- Parameters
2271 -- p_api_version IN NUMBER := 1.0
2272 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2273 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
2274 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2275 -- p_validation_level IN VARCHAR2 := 100
2276 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2277 -- p_debug_mode IN VARCHAR2 := 'N'
2278 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2279 -- p_structure_id IN NUMBER
2280 -- p_record_version_number IN NUMBER
2281 -- x_return_status OUT VARCHAR2
2282 -- x_msg_count OUT NUMBER
2283 -- x_msg_data OUT VARCHAR2
2284 --
2285 -- History
2286 --
2287 -- 25-JUN-01 HSIU -Created
2288 --
2289 --
2290
2291
2292 procedure Delete_Structure
2293 (
2294 p_api_version IN NUMBER := 1.0
2295 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2296 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2297 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2298 ,p_validation_level IN VARCHAR2 := 100
2299 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2300 ,p_debug_mode IN VARCHAR2 := 'N'
2301 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2302 ,p_structure_id IN NUMBER
2303 ,p_record_version_number IN NUMBER
2304 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2305 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2306 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2307 )
2308 IS
2309 l_rowid VARCHAR2(255);
2310
2311 l_return_status VARCHAR2(1);
2312 l_msg_count NUMBER;
2313 l_msg_data VARCHAR2(250);
2314
2315 cursor sel_struct_type IS
2316 select rowid
2317 from pa_proj_structure_types
2318 where proj_element_id = p_structure_id;
2319
2320 -- Begin fix for Bug # 4506308.
2321
2322 cursor l_cur_projects_all(c_structure_id NUMBER) is
2323 select ppa.project_id, ppa.record_version_number
2324 from pa_projects_all ppa, pa_proj_elements ppe
2325 where ppa.project_id = ppe.project_id
2326 and ppe.proj_element_id = c_structure_id;
2327
2328 l_project_id NUMBER;
2329 l_rec_ver_number NUMBER;
2330 l_is_wp_str VARCHAR2(1);
2331
2332 -- End fix for Bug # 4506308.
2333
2334 BEGIN
2335 IF (p_debug_mode = 'Y') THEN
2336 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE begin');
2337 END IF;
2338
2339 if p_commit = FND_API.G_TRUE then
2340 savepoint delete_structure_pvt;
2341 end if;
2342
2343 -- Begin fix for Bug # 4506308.
2344
2345 l_is_wp_str := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(p_structure_id, 'WORKPLAN');
2346
2347 if (l_is_wp_str = 'Y') then
2348
2349 open l_cur_projects_all(p_structure_id);
2350 fetch l_cur_projects_all into l_project_id, l_rec_ver_number;
2351 close l_cur_projects_all;
2352
2353 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
2354 p_validate_only => FND_API.G_FALSE
2355 ,p_project_id => l_project_id
2356 ,p_date_type => 'SCHEDULED'
2357 ,p_start_date => null
2358 ,p_finish_date => null
2359 ,p_record_version_number => l_rec_ver_number
2360 ,x_return_status => x_return_status
2361 ,x_msg_count => x_msg_count
2362 ,x_msg_data => x_msg_data );
2363
2364 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2365 RAISE FND_API.G_EXC_ERROR;
2366 END IF;
2367
2368 end if;
2369
2370 -- End fix for Bug # 4506308.
2371
2372 --Delete detail rows (structure types)
2373 OPEN sel_struct_type;
2374 LOOP
2375 FETCH sel_struct_type into l_rowid;
2376 EXIT WHEN sel_struct_type%NOTFOUND;
2377 PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
2378 END LOOP;
2379 CLOSE sel_struct_type;
2380
2381 --Lock record
2382 IF (p_validate_only <> FND_API.G_TRUE) THEN
2383 BEGIN
2384 --lock
2385 select rowid into l_rowid
2386 from pa_proj_elements
2387 where proj_element_id = p_structure_id
2388 and record_version_number = p_record_version_number
2389 for update of record_version_number NOWAIT;
2390 EXCEPTION
2391 when TIMEOUT_ON_RESOURCE then
2392 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2393 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2394 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2395 when NO_DATA_FOUND then
2396 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2397 p_msg_name => 'PA_XC_RECORD_CHANGED');
2398 l_msg_data := 'PA_XC_RECORD_CHANGED';
2399 when OTHERS then
2400 if SQLCODE = -54 then
2401 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2402 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2403 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2404 else
2405 raise;
2406 end if;
2407 END;
2408 ELSE
2409 BEGIN
2410 select rowid into l_rowid
2411 from pa_proj_elements
2412 where proj_element_id = p_structure_id
2413 and record_version_number = p_record_version_number;
2414 EXCEPTION
2415 when NO_DATA_FOUND then
2416 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2417 p_msg_name => 'PA_XC_RECORD_CHANGED');
2418 l_msg_data := 'PA_XC_RECORD_CHANGED';
2419 when OTHERS then
2420 raise;
2421 END;
2422 END IF;
2423
2424 l_msg_count := FND_MSG_PUB.count_msg;
2425 if l_msg_count > 0 then
2426 x_msg_count := l_msg_count;
2427 if x_msg_count = 1 then
2428 x_msg_data := l_msg_data;
2429 end if;
2430 raise FND_API.G_EXC_ERROR;
2431 end if;
2432
2433
2434 PA_PROJ_ELEMENTS_PKG.DELETE_ROW(
2435 X_ROW_ID => l_rowid
2436 );
2437
2438 x_return_status := FND_API.G_RET_STS_SUCCESS;
2439
2440 IF (p_debug_mode = 'Y') THEN
2441 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE end');
2442 END IF;
2443
2444 EXCEPTION
2445 when FND_API.G_EXC_ERROR then
2446 if p_commit = FND_API.G_TRUE then
2447 rollback to delete_structure_pvt;
2448 end if;
2449 x_return_status := FND_API.G_RET_STS_ERROR;
2450 when others then
2451 if p_commit = FND_API.G_TRUE then
2452 rollback to delete_structure_pvt;
2453 end if;
2454 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2455 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2456 p_procedure_name => 'Delete_Structure',
2457 p_error_text => SUBSTRB(SQLERRM,1,240));
2458 raise;
2459 END Delete_Structure;
2460
2461
2462 -- API name : Delete_Structure_Version
2463 -- Type : Private Procedure
2464 -- Pre-reqs : None
2465 -- Return Value : N/A
2466 -- Parameters
2467 -- p_api_version IN NUMBER := 1.0
2468 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2469 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
2470 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2471 -- p_validation_level IN VARCHAR2 := 100
2472 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2473 -- p_debug_mode IN VARCHAR2 := 'N'
2474 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2475 -- p_structure_version_id IN NUMBER
2476 -- p_record_version_number IN NUMBER
2477 -- x_return_status OUT VARCHAR2
2478 -- x_msg_count OUT NUMBER
2479 -- x_msg_data OUT VARCHAR2
2480 --
2481 -- History
2482 --
2483 -- 25-JUN-01 HSIU -Created
2484 --
2485 --
2486
2487
2488 procedure Delete_Structure_Version
2489 (
2490 p_api_version IN NUMBER := 1.0
2491 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2492 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2493 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2494 ,p_validation_level IN VARCHAR2 := 100
2495 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2496 ,p_debug_mode IN VARCHAR2 := 'N'
2497 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2498 ,p_structure_version_id IN NUMBER
2499 ,p_record_version_number IN NUMBER
2500 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2501 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2502 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2503 )
2504 IS
2505 l_rowid VARCHAR2(255);
2506
2507 l_Project_ID NUMBER;
2508
2509 l_return_status VARCHAR2(1);
2510 l_msg_count NUMBER;
2511 l_msg_data VARCHAR2(250);
2512
2513 -- Begin fix for Bug # 4483222.
2514
2515 cursor l_cur_rel_id(p_str_ver_id NUMBER) is
2516 select por.object_relationship_id, por.record_version_number
2517 from pa_object_relationships por
2518 where por.object_id_to1 = p_str_ver_id
2519 and por.relationship_type in ('LW', 'LF');
2520
2521 l_rec_rel_id l_cur_rel_id%ROWTYPE;
2522
2523 -- End fix for Bug # 4483222.
2524
2525 BEGIN
2526 IF (p_debug_mode = 'Y') THEN
2527 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION begin');
2528 END IF;
2529
2530 if p_commit = FND_API.G_TRUE then
2531 savepoint delete_structure_version_pvt;
2532 end if;
2533
2534 --Lock record
2535 IF (p_debug_mode = 'Y') THEN
2536 pa_debug.debug('locking record '||p_structure_version_id||', '||p_record_Version_number);
2537 END IF;
2538 IF (p_validate_only <> FND_API.G_TRUE) THEN
2539 BEGIN
2540 --lock
2541 select rowid into l_rowid
2542 from pa_proj_element_versions
2543 where element_version_id = p_structure_version_id
2544 and record_version_number = p_record_version_number
2545 for update of record_version_number NOWAIT;
2546 EXCEPTION
2547 when TIMEOUT_ON_RESOURCE then
2548 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2549 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2550 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2551 when NO_DATA_FOUND then
2552 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2553 p_msg_name => 'PA_XC_RECORD_CHANGED');
2554 l_msg_data := 'PA_XC_RECORD_CHANGED';
2555 when OTHERS then
2556 if SQLCODE = -54 then
2557 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2558 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2559 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2560 else
2561 raise;
2562 end if;
2563 END;
2564 ELSE
2565 BEGIN
2566 select rowid into l_rowid
2567 from pa_proj_element_versions
2568 where element_version_id = p_structure_version_id
2569 and record_version_number = p_record_version_number;
2570 EXCEPTION
2571 when NO_DATA_FOUND then
2572 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2573 p_msg_name => 'PA_XC_RECORD_CHANGED');
2574 l_msg_data := 'PA_XC_RECORD_CHANGED';
2575 when OTHERS then
2576 raise;
2577 END;
2578 END IF;
2579
2580
2581 l_msg_count := FND_MSG_PUB.count_msg;
2582 if l_msg_count > 0 then
2583 x_msg_count := l_msg_count;
2584 if x_msg_count = 1 then
2585 x_msg_data := l_msg_data;
2586 end if;
2587 raise FND_API.G_EXC_ERROR;
2588 end if;
2589
2590 IF (p_debug_mode = 'Y') THEN
2591 pa_debug.debug('deleting structure versionn');
2592 END IF;
2593
2594
2595 -- Added by skannoji
2596 -- Added for doosan customer to delete structure version id for workplan
2597 DECLARE
2598 /* Bug #: 3305199 SMukka */
2599 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
2600 /* l_struct_version_id_tbl PA_PLSQL_DATATYPES.IdTabTyp; */
2601 l_struct_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
2602 BEGIN
2603 IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
2604 l_struct_version_id_tbl.extend(1); /* Venky */
2605 l_struct_version_id_tbl(1) := p_structure_version_id;
2606 /*Smukka Bug No. 3474141 Date 03/01/2004 */
2607 /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block */
2608 BEGIN
2609 PA_FIN_PLAN_PVT.delete_wp_budget_versions
2610 (
2611 p_struct_elem_version_id_tbl => l_struct_version_id_tbl
2612 ,x_return_status => x_return_status
2613 ,x_msg_count => x_msg_count
2614 ,x_Msg_data => x_msg_data
2615 );
2616 EXCEPTION
2617 WHEN OTHERS THEN
2618 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2619 p_procedure_name => 'Delete_Structure_Version',
2620 p_error_text => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_budget_versions:'||SQLERRM,1,240));
2621 RAISE FND_API.G_EXC_ERROR;
2622 END;
2623 -- Added for FP_M Changes -- Bhumesh
2624 BEGIN
2625 SELECT project_id INTO l_Project_ID
2626 FROM pa_proj_element_versions
2627 WHERE element_version_id = p_structure_version_id and rownum < 2;
2628
2629 PA_PROGRESS_PUB.delete_working_wp_progress (
2630 P_Project_ID => l_Project_ID
2631 ,P_Structure_Version_ID => P_Structure_Version_ID
2632 ,x_return_status => x_return_status
2633 ,x_msg_count => x_msg_count
2634 ,x_Msg_data => x_msg_data
2635 );
2636 EXCEPTION
2637 WHEN OTHERS THEN
2638 fnd_msg_pub.add_exc_msg(
2639 p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2640 p_procedure_name => 'Delete_Structure_Version',
2641 p_error_text => SUBSTRB('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
2642 RAISE FND_API.G_EXC_ERROR;
2643 END;
2644 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2645 RAISE FND_API.G_EXC_ERROR;
2646 END IF;
2647 END IF;
2648 END;
2649 -- till here by skannoji
2650
2651 -- Begin fix for Bug # 4483222.
2652
2653 -- delete all sub-project relationships where this structure is the child of another structure.
2654
2655 for l_rec_rel_id in l_cur_rel_id(p_structure_version_id)
2656 loop
2657
2658 /*
2659
2660 pa_relationship_pub.delete_relationship
2661 (p_api_version => p_api_version
2662 ,p_init_msg_list => p_init_msg_list
2663 ,p_commit => p_commit
2664 ,p_validate_only => p_validate_only
2665 ,p_validation_level => p_validation_level
2666 ,p_calling_module => p_calling_module
2667 ,p_debug_mode => p_debug_mode
2668 ,p_max_msg_count => p_max_msg_count
2669 ,p_object_relationship_id => l_rec_rel_id.object_relationship_id
2670 ,p_record_version_number => l_rec_rel_id.record_version_number
2671 ,x_return_status => x_return_status
2672 ,x_msg_count => x_msg_count
2673 ,x_msg_data => x_msg_data);
2674
2675 */
2676
2677 pa_relationship_pvt.delete_subproject_association
2678 (p_commit => p_commit
2679 ,p_validate_only => p_validate_only
2680 ,p_debug_mode => p_debug_mode
2681 ,p_object_relationships_id => l_rec_rel_id.object_relationship_id
2682 ,p_record_version_number => l_rec_rel_id.record_version_number
2683 ,x_return_status => x_return_status
2684 ,x_msg_count => x_msg_count
2685 ,x_msg_data => x_msg_data);
2686
2687 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2688
2689 raise FND_API.G_EXC_ERROR;
2690
2691 end if;
2692
2693 end loop;
2694
2695 -- End fix for Bug # 4483222.
2696
2697 PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW(
2698 X_ROW_ID => l_rowid
2699 );
2700
2701 x_return_status := FND_API.G_RET_STS_SUCCESS;
2702
2703 IF (p_debug_mode = 'Y') THEN
2704 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION end');
2705 END IF;
2706
2707 EXCEPTION
2708 when FND_API.G_EXC_ERROR then
2709 if p_commit = FND_API.G_TRUE then
2710 rollback to delete_structure_version_pvt;
2711 end if;
2712 x_return_status := FND_API.G_RET_STS_ERROR;
2713 when others then
2714 if p_commit = FND_API.G_TRUE then
2715 rollback to delete_structure_version_pvt;
2716 end if;
2717 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2718 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2719 p_procedure_name => 'Delete_Structure_Version',
2720 p_error_text => SUBSTRB(SQLERRM,1,240));
2721 raise;
2722 END DELETE_STRUCTURE_VERSION;
2723
2724
2725 -- API name : Delete_Structure_Version_Attr
2726 -- Type : Private Procedure
2727 -- Pre-reqs : None
2728 -- Return Value : N/A
2729 -- Parameters
2730 -- p_api_version IN NUMBER := 1.0
2731 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2732 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
2733 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2734 -- p_validation_level IN VARCHAR2 := 100
2735 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2736 -- p_debug_mode IN VARCHAR2 := 'N'
2737 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2738 -- p_pev_structure_id IN NUMBER
2739 -- p_record_version_number IN NUMBER
2740 -- x_return_status OUT VARCHAR2
2741 -- x_msg_count OUT NUMBER
2742 -- x_msg_data OUT VARCHAR2
2743 --
2744 -- History
2745 --
2746 -- 25-JUN-01 HSIU -Created
2747 --
2748 --
2749
2750
2751 procedure Delete_Structure_Version_Attr
2752 (
2753 p_api_version IN NUMBER := 1.0
2754 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2755 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2756 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2757 ,p_validation_level IN VARCHAR2 := 100
2758 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2759 ,p_debug_mode IN VARCHAR2 := 'N'
2760 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2761 ,p_pev_structure_id IN NUMBER
2762 ,p_record_version_number IN NUMBER
2763 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2764 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2765 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2766 )
2767 IS
2768 l_rowid VARCHAR2(255);
2769
2770 l_return_status VARCHAR2(1);
2771 l_msg_count NUMBER;
2772 l_msg_data VARCHAR2(250);
2773
2774 --FP M bug 3301192
2775 CURSOR cur_proj_str
2776 IS
2777 SELECT proj_element_id, project_id
2778 FROM pa_proj_elem_ver_structure
2779 WHERE pev_structure_id = p_pev_structure_id;
2780
2781 l_structure_id NUMBER;
2782 l_project_id NUMBER;
2783 l_current_working_ver_id NUMBER;
2784
2785 --end FPM bug 3301192
2786
2787 -- 3804437 Added below cursor to retrieve last updated working version
2788 CURSOR cur_last_working_ver( p_structure_id NUMBER )
2789 IS
2790 select str.element_version_id
2791 from pa_proj_elem_ver_structure str,
2792 pa_proj_elements ppe
2793 where ppe.proj_element_id = p_structure_id
2794 and ppe.project_id = str.project_id
2795 and ppe.proj_element_id = str.proj_element_id
2796 and str.status_code = 'STRUCTURE_WORKING'
2797 and str.current_working_flag = 'N'
2798 order by str.last_update_date desc;
2799 -- 3804437
2800
2801 BEGIN
2802 IF (p_debug_mode = 'Y') THEN
2803 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION_ATTR begin');
2804 END IF;
2805
2806 if p_commit = FND_API.G_TRUE then
2807 savepoint delete_structure_ver_attr_pvt;
2808 end if;
2809
2810 --Lock record
2811 IF (p_validate_only <> FND_API.G_TRUE) THEN
2812 BEGIN
2813 --lock
2814 select rowid into l_rowid
2815 from pa_proj_elem_ver_structure
2816 where pev_structure_id = p_pev_structure_id
2817 and record_version_number = p_record_version_number
2818 for update of record_version_number NOWAIT;
2819 EXCEPTION
2820 when TIMEOUT_ON_RESOURCE then
2821 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2822 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2823 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2824 when NO_DATA_FOUND then
2825 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2826 p_msg_name => 'PA_XC_RECORD_CHANGED');
2827 l_msg_data := 'PA_XC_RECORD_CHANGED';
2828 when OTHERS then
2829 if SQLCODE = -54 then
2830 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2831 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
2832 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2833 else
2834 raise;
2835 end if;
2836 END;
2837 ELSE
2838 BEGIN
2839 select rowid into l_rowid
2840 from pa_proj_elem_ver_structure
2841 where pev_structure_id = p_pev_structure_id
2842 and record_version_number = p_record_version_number;
2843 EXCEPTION
2844 when NO_DATA_FOUND then
2845 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2846 p_msg_name => 'PA_XC_RECORD_CHANGED');
2847 l_msg_data := 'PA_XC_RECORD_CHANGED';
2848 when OTHERS then
2849 raise;
2850 END;
2851 END IF;
2852
2853 l_msg_count := FND_MSG_PUB.count_msg;
2854 if l_msg_count > 0 then
2855 x_msg_count := l_msg_count;
2856 if x_msg_count = 1 then
2857 x_msg_data := l_msg_data;
2858 end if;
2859 raise FND_API.G_EXC_ERROR;
2860 end if;
2861
2862 --FPM bug 3301192
2863 OPEN cur_proj_str;
2864 FETCH cur_proj_str INTO l_structure_id, l_project_id;
2865 CLOSE cur_proj_str;
2866
2867 -- 3804437 Commented below code to retrieve last updated working version
2868 -- because below code is retrieving the current working version only
2869
2870 --l_current_working_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
2871
2872 -- Added code to retrieve last updated working version
2873
2874 OPEN cur_last_working_ver(l_structure_id);
2875 FETCH cur_last_working_ver INTO l_current_working_ver_id;
2876 CLOSE cur_last_working_ver;
2877
2878 -- 3804437 end
2879
2880 --update the latest updated working version as current working version.
2881 UPDATE pa_proj_elem_ver_structure
2882 SET current_working_flag = 'Y'
2883 WHERE element_version_id = l_current_working_ver_id
2884 AND project_id = l_project_id;
2885
2886 --end FPM bug 3301192
2887
2888 /* Added for bug 8708651 */
2889 if PJI_PA_DEL_MAIN.g_from_conc is null then
2890 PA_PROJ_ELEM_VER_STRUCTURE_PKG.delete_row(
2891 X_ROWID => l_rowid
2892 );
2893 else
2894 update PA_PROJ_ELEM_VER_STRUCTURE
2895 set PURGED_FLAG = 'Y',
2896 last_update_date = sysdate,
2897 last_updated_by = FND_GLOBAL.USER_ID,
2898 conc_request_id = FND_GLOBAL.CONC_REQUEST_ID /* Added for bug 9049425 */
2899 WHERE ROWID = l_rowid;
2900 end if;
2901 /* Added for bug 8708651 */
2902
2903 IF (p_debug_mode = 'Y') THEN
2904 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION_ATTR end');
2905 END IF;
2906
2907 x_return_status := FND_API.G_RET_STS_SUCCESS;
2908
2909 EXCEPTION
2910 when FND_API.G_EXC_ERROR then
2911 if p_commit = FND_API.G_TRUE then
2912 rollback to delete_structure_ver_attr_pvt;
2913 end if;
2914 x_return_status := FND_API.G_RET_STS_ERROR;
2915 when others then
2916 if p_commit = FND_API.G_TRUE then
2917 rollback to delete_structure_ver_attr_pvt;
2918 end if;
2919 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2920 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
2921 p_procedure_name => 'Delete_Structure',
2922 p_error_text => SUBSTRB(SQLERRM,1,240));
2923 raise;
2924 END Delete_Structure_Version_Attr;
2925
2926
2927 -- API name : Publish_Structure
2928 -- Type : Private Procedure
2929 -- Pre-reqs : None
2930 -- Return Value : N/A
2931 -- Parameters
2932 -- p_api_version IN NUMBER := 1.0
2933 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2934 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
2935 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2936 -- p_validation_level IN VARCHAR2 := 100
2937 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2938 -- p_debug_mode IN VARCHAR2 := 'N'
2939 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2940 -- p_responsibility_id IN NUMBER := 0
2941 -- p_structure_version_id IN NUMBER
2942 -- p_publish_structure_ver_name IN VARCHAR2
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 -- x_published_struct_ver_id OUT NUMBER
2948 -- x_return_status OUT VARCHAR2
2949 -- x_msg_count OUT NUMBER
2950 -- x_msg_data OUT VARCHAR2
2951 --
2952 -- History
2953 --
2954 -- 25-JUN-01 HSIU -Created
2955 --
2956
2957
2958
2959 procedure Publish_Structure
2960 (
2961 p_api_version IN NUMBER := 1.0
2962 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
2963 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2964 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2965 ,p_validation_level IN VARCHAR2 := 100
2966 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
2967 ,p_debug_mode IN VARCHAR2 := 'N'
2968 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2969 ,p_responsibility_id IN NUMBER := 0
2970 ,p_user_id IN NUMBER := NULL
2971 ,p_structure_version_id IN NUMBER
2972 ,p_publish_structure_ver_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2973 ,p_structure_ver_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2974 ,p_effective_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2975 ,p_original_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2976 ,p_current_baseline_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2977 ,p_pub_prog_flag IN VARCHAR2 DEFAULT 'Y' -- FP_M changes
2978 ,x_published_struct_ver_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2979 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2980 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2981 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2982 )
2983 IS
2984 l_api_name CONSTANT VARCHAR(30) := 'Publish_Structure';
2985 l_api_version CONSTANT NUMBER := 1.0;
2986
2987 l_return_status VARCHAR2(1);
2988 l_msg_count NUMBER;
2989 l_msg_data VARCHAR2(250);
2990 l_data VARCHAR2(250);
2991 l_msg_index_out NUMBER;
2992 l_apps_name VARCHAR2(2000) := 'PA';
2993
2994 l_dummy VARCHAR2(1);
2995 l_dummy_name PA_PROJ_ELEM_VER_STRUCTURE.NAME%TYPE;
2996
2997 l_project_id PA_PROJ_ELEM_VER_STRUCTURE.PROJECT_ID%TYPE;
2998 l_proj_element_id PA_PROJ_ELEM_VER_STRUCTURE.PROJ_ELEMENT_ID%TYPE;
2999 l_element_version_id PA_PROJ_ELEM_VER_STRUCTURE.ELEMENT_VERSION_ID%TYPE;
3000 l_pev_structure_id PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
3001
3002
3003 l_new_struct_ver_id NUMBER;
3004 -- added for Bug Fix: 4537865
3005 l_tmp_struct_ver_id NUMBER;
3006 -- added for Bug fix: 4537865
3007 l_new_pev_structure_id PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
3008 l_new_pev_schedule_id PA_PROJ_ELEM_VER_SCHEDULE.PEV_SCHEDULE_ID%TYPE;
3009 l_new_obj_rel_id PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
3010
3011 l_original_baseline_flag VARCHAR2(1);
3012 l_current_baseline_flag VARCHAR2(1);
3013
3014 l_new_struct_ver_name PA_PROJ_ELEM_VER_STRUCTURE.name%TYPE;
3015 l_new_struct_ver_desc PA_PROJ_ELEM_VER_STRUCTURE.description%TYPE;
3016
3017 -- anlee
3018 -- Dates changes
3019 l_scheduled_start_date DATE;
3020 l_scheduled_finish_date DATE;
3021 l_proj_record_ver_number NUMBER;
3022
3023 l_user_id NUMBER;
3024
3025 ----------------------------------- FP_M changes : Begin
3026 -- Refer to tracking bug 3305199
3027 /* Bug #: 3305199 SMukka */
3028 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3029 /* l_Old_Task_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
3030 /* l_New_Task_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
3031 l_Old_Task_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3032 l_New_Task_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3033 ----------------------------------- FP_M changes : End
3034
3035 CURSOR get_scheduled_dates(c_project_id NUMBER, c_structure_version_id NUMBER)
3036 IS
3037 SELECT scheduled_start_date, scheduled_finish_date
3038 FROM pa_proj_elem_ver_schedule
3039 WHERE project_id = c_project_id
3040 AND element_version_id = c_structure_version_id;
3041
3042 CURSOR get_proj_rec_ver_number(c_project_id NUMBER)
3043 IS
3044 SELECT record_version_number
3045 FROM pa_projects_all
3046 WHERE project_id = c_project_id;
3047 -- End of changes
3048
3049
3050 --Bug 2189657
3051 --Added for linking tasks with no display sequence.
3052 Type T_EquivElemVerTable IS TABLE OF NUMBER
3053 Index by BINARY_INTEGER;
3054 t_equiv_elem_ver_id T_EquivElemVerTable;
3055 --Bug 2189657 end;
3056
3057 cursor get_from_id(c_element_version_id NUMBER) IS
3058 select object_relationship_id, object_id_from1 object_id_from,
3059 object_type_from, record_version_number
3060 from pa_object_relationships
3061 where relationship_type = 'L'
3062 and object_id_to1 = c_element_version_id
3063 and object_type_to IN ('PA_TASKS','PA_STRUCTURES');
3064 l_from_object_info get_from_id%ROWTYPE;
3065
3066 cursor get_to_id(c_element_version_id NUMBER) IS
3067 select object_relationship_id, object_id_to1 object_id_to, object_id_to2,
3068 object_type_to, record_version_number
3069 from pa_object_relationships
3070 where relationship_type IN ('LW', 'LF')
3071 and object_id_from1 = c_element_version_id
3072 and object_type_from IN ('PA_TASKS','PA_STRUCTURES');
3073 l_to_object_info get_to_id%ROWTYPE;
3074 l_working_ver_fg VARCHAR2(1);
3075
3076 cursor get_task_version_info(c_task_version_id NUMBER) IS
3077 select v1.project_id project_id, v2.proj_element_id structure_id,
3078 v1.parent_structure_version_id structure_version_id,
3079 v1.element_version_id task_version_id
3080 from pa_proj_element_versions v1,
3081 pa_proj_element_versions v2
3082 where v1.element_version_id = c_task_version_id
3083 and v1.parent_structure_version_id = v2.element_version_id;
3084 l_info_task_ver_rec get_task_version_info%ROWTYPE;
3085
3086 cursor get_structure_version_info(c_structure_version_id NUMBER) IS
3087 select v1.project_id project_id, v1.proj_element_id structure_id,
3088 v1.element_version_id structure_version_id
3089 from pa_proj_element_versions v1
3090 where v1.element_version_id = c_structure_version_id;
3091 l_info_struc_ver_rec get_structure_version_info%ROWTYPE;
3092
3093
3094 cursor get_struc_ver_name IS
3095 select pevs.name, pevs.project_id, pevs.proj_element_id,
3096 pevs.element_version_id, pevs.pev_structure_id
3097 from pa_proj_elem_ver_structure pevs,
3098 pa_proj_element_versions pev
3099 where pev.element_version_id = p_structure_version_id
3100 and pevs.project_id = pev.project_id
3101 and pevs.element_version_id = pev.element_version_id;
3102
3103 CURSOR get_structure_ver_csr(c_structure_version_id NUMBER) IS
3104 SELECT *
3105 FROM PA_PROJ_ELEMENT_VERSIONS
3106 WHERE element_version_id = c_structure_version_id;
3107 l_struc_ver_rec get_structure_ver_csr%ROWTYPE;
3108
3109 CURSOR get_structure_ver_attr_csr(c_structure_version_id NUMBER, c_project_id NUMBER) IS
3110 SELECT *
3111 FROM PA_PROJ_ELEM_VER_STRUCTURE
3112 WHERE ELEMENT_VERSION_ID = c_structure_version_id
3113 AND project_id = c_project_id;
3114 l_struc_ver_attr_rec get_structure_ver_attr_csr%ROWTYPE;
3115
3116 CURSOR get_ver_schedule_attr_csr(c_element_version_id NUMBER, c_project_id NUMBER) IS
3117 SELECT *
3118 FROM PA_PROJ_ELEM_VER_SCHEDULE
3119 WHERE element_version_id = c_element_version_id
3120 AND project_id = c_project_id;
3121 l_ver_sch_attr_rec get_ver_schedule_attr_csr%ROWTYPE;
3122
3123 --hsiu: task version status change. Added task version status.
3124 CURSOR get_task_versions_csr(c_structure_version_id NUMBER) IS
3125 SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
3126 a.project_id, b.object_id_from1 parent_element_version_id,
3127 a.TASK_UNPUB_VER_STATUS_CODE, a.parent_structure_version_id
3128 FROM PA_PROJ_ELEMENT_VERSIONS a,
3129 PA_OBJECT_RELATIONSHIPS b
3130 WHERE a.object_type = 'PA_TASKS'
3131 AND a.parent_structure_version_id = c_structure_version_id
3132 AND a.element_version_id = b.object_id_to1
3133 AND b.relationship_type = 'S'
3134 ORDER BY a.display_sequence;
3135
3136 l_task_versions_rec get_task_versions_csr%ROWTYPE;
3137
3138 Cursor get_linking_tasks IS
3139 select a.element_version_id
3140 from pa_proj_element_versions a,
3141 pa_proj_elements b
3142 where a.proj_element_id = b.proj_element_id
3143 and a.parent_structure_version_id = p_structure_version_id
3144 and b.link_task_flag = 'Y';
3145 l_linking_task_rec get_linking_tasks%ROWTYPE;
3146
3147 l_ref_task_ver_id NUMBER;
3148 l_peer_or_sub VARCHAR2(10);
3149 l_last_wbs_level NUMBER;
3150 l_task_version_id NUMBER;
3151 l_pev_schedule_id NUMBER;
3152
3153 l_i_msg_count NUMBER;
3154 l_i_msg_data PA_VC_1000_2000:= PA_VC_1000_2000(1);
3155 l_i_return_status VARCHAR2(1);
3156
3157 TYPE reference_tasks IS TABLE OF NUMBER
3158 INDEX BY BINARY_INTEGER;
3159 l_outline_task_ref reference_tasks;
3160
3161 l_proj_start_date DATE;
3162 l_proj_completion_date DATE;
3163 l_prefix VARCHAR2(80);
3164
3165 --Hsiu added for date rollup
3166 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3167
3168 --hsiu added for advanced structure changes
3169 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
3170 select b.element_version_id, b.record_version_number
3171 from pa_proj_element_versions a,
3172 pa_proj_element_versions b,
3173 pa_proj_elem_ver_structure c
3174 where a.element_version_id = c_keep_struc_ver_id
3175 and a.project_id = b.project_id
3176 and a.proj_element_id = b.proj_element_id
3177 and b.element_version_id <> c_keep_struc_ver_id
3178 and b.object_type = 'PA_STRUCTURES'
3179 and b.project_id = c.project_id
3180 and b.element_version_id = c.element_version_id
3181 and c.status_code <> 'STRUCTURE_PUBLISHED';
3182 l_del_struc_ver_id NUMBER;
3183 l_del_struc_ver_rvn NUMBER;
3184
3185 CURSOR get_task_ver_weighting(p_task_ver_id NUMBER)
3186 IS
3187 select weighting_percentage
3188 from pa_object_relationships
3189 where object_id_to1 = p_task_ver_id
3190 and object_type_to = 'PA_TASKS'
3191 and object_type_from in ('PA_STRUCTURES','PA_TASKS')
3192 and object_type_to = 'PA_TASKS' -- Bug 6429275
3193 and relationship_type = 'S';
3194 l_weighting_percentage NUMBER;
3195
3196 --hsiu added for task status
3197 l_error_message_code VARCHAR2(250);
3198 l_create_task_ver_flag varchar2(1);
3199
3200 -- Bug # 4691749.
3201 -- Replacing this varray PA_NUM_1000_NUM with t_TBDtasksTable index table.
3202 TYPE t_TBD_tasksTable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3203 --l_tbd_task_ver_id PA_NUM_1000_NUM := PA_NUM_1000_NUM(); --replacing this varray with t_TBDtasksTable index table.
3204 l_tbd_task_ver_id t_TBD_tasksTable;
3205 l_tbd_index NUMBER := 0;
3206 -- Bug # 4691749.
3207
3208 -- Added for 4096218
3209 -- This VARRAY will hold the list of to_be_deleted tasks' proj_element_ids
3210 l_tbd_task_id PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3211
3212 l_del_task_cnt NUMBER;
3213
3214 CURSOR get_tbd_tasks_info(c_task_ver_id NUMBER) IS
3215 select parent_structure_version_id, element_version_id,
3216 record_version_number
3217 from pa_proj_element_versions
3218 where element_version_id = c_task_ver_id;
3219 l_tbd_tasks_info_rec get_tbd_tasks_info%ROWTYPE;
3220
3221 CURSOR get_parent_id(c_task_ver_id NUMBER) IS
3222 select object_id_from1
3223 from pa_object_relationships
3224 where object_id_to1 = c_task_ver_id
3225 and object_type_to = 'PA_TASKS'
3226 and relationship_type = 'S';
3227 l_parent_id NUMBER;
3228 l_parent_ver_id NUMBER;
3229 TYPE t_parentTable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3230 l_parent_tbl t_parentTable;
3231
3232 --bug 2662139
3233 CURSOR is_summary_elem(c_elem_ver_id NUMBER) IS
3234 SELECT '1'
3235 from pa_object_relationships
3236 where object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
3237 and object_id_from1 = c_elem_ver_id
3238 and relationship_type = 'S';
3239
3240 --bug
3241 l_err_code NUMBER:= 0;
3242 l_err_stack VARCHAR2(630);
3243 l_err_stage VARCHAR2(80);
3244
3245 l_messages PA_PROJECT_STRUCTURE_PVT1.PA_PUBLISH_ERR_TBL_TYPE;
3246 l_page_content_id NUMBER;
3247 l_item_key VARCHAR2(240);
3248
3249 --added for performace improvement
3250 X_Row_id VARCHAR2(255);
3251
3252 --added for performance improvement
3253 l_workplan_type VARCHAR2(1);
3254 l_financial_type VARCHAR2(1);
3255
3256 --maansari
3257 i NUMBER := 1;
3258 -- l_user_id NUMBER := FND_GLOBAL.USER_ID;
3259 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
3260 --maansari
3261
3262 --bug 3047602
3263 l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
3264 cursor get_all_new_childs(c_new_struc_ver_id NUMBER) IS
3265 select element_version_id
3266 from pa_proj_element_versions
3267 where parent_structure_version_id = c_new_struc_ver_id
3268 and object_type = 'PA_TASKS';
3269 --end bug 3047602
3270
3271 l_rowid VARCHAR2(255);
3272 CURSOR cur_elem_ver_seq IS
3273 SELECT pa_proj_element_versions_s.nextval
3274 FROM sys.dual;
3275
3276 l_last_pub_str_ver_id NUMBER; --Bug No. 3450684 Smukka 01/03/2004
3277 l_chk_deliverable VARCHAR2(80); --Summuka For checking deliverables
3278
3279 --bug 3822112
3280 l_share_flag VARCHAR2(1) := 'N';
3281 l_copy_actuals_flag VARCHAR2(1) := 'Y';
3282 -- Bug 3839288 Begin
3283 l_task_weight_basis_code pa_proj_progress_attr.task_weight_basis_code%TYPE;
3284 l_as_of_date DATE;
3285 -- Bug 3839288 End
3286 l_upd_new_elem_ver_id_flag VARCHAR2(1) := 'Y'; --rtarway, 3951024
3287
3288 l_debug_mode VARCHAR2(1);
3289
3290 -- 9072357
3291 l_structure_id pa_proj_elem_ver_structure.proj_element_id%TYPE;
3292
3293 CURSOR get_structure_id(c_structure_version_id pa_proj_elem_ver_structure.element_version_id%TYPE)
3294 IS
3295 SELECT proj_element_id
3296 FROM pa_proj_elem_ver_structure
3297 WHERE element_version_id = c_structure_version_id;
3298
3299 BEGIN
3300
3301 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
3302
3303 IF (p_debug_mode = 'Y') THEN
3304 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE begin');
3305 END IF;
3306
3307 IF (p_commit = FND_API.G_TRUE) THEN
3308 savepoint publish_structure_pvt;
3309 END IF;
3310
3311 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
3312
3313 ----------
3314 -- code --
3315 IF p_user_id IS NULL THEN
3316 l_user_id := FND_GLOBAL.USER_ID;
3317 ELSE
3318 l_user_id := p_user_id;
3319 END IF;
3320
3321 l_workplan_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
3322 l_financial_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
3323
3324 select project_id
3325 into l_project_id
3326 from pa_proj_element_versions
3327 where element_version_id = p_structure_version_id;
3328
3329 --bug 3840509
3330 IF 'Y' = nvl(PA_PROJECT_STRUCTURE_UTILS.Get_Sch_Dirty_fl(l_project_id,
3331 p_structure_version_id), 'N') THEN
3332 --need to reschedule
3333 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NEED_THIRD_PT_SCH');
3334 x_msg_data := 'PA_PS_NEED_THIRD_PT_SCH';
3335 RAISE FND_API.G_EXC_ERROR;
3336 END IF;
3337 --end bug 3840509
3338
3339 l_share_flag := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id); --bug 3822112
3340
3341 --Set the baseline flags
3342 l_original_baseline_flag := p_original_baseline_flag;
3343 l_current_baseline_flag := p_current_baseline_flag;
3344
3345 /* Smukka 01/03/2004 Bug No. 3450684 */
3346 /* Added the following if block for getting the lastest published structure version id */
3347 IF l_workplan_type = 'Y' THEN
3348 l_last_pub_str_ver_id:=PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(l_project_id);
3349 ELSIF l_financial_type = 'Y' THEN
3350 l_last_pub_str_ver_id:=PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_FIN_STRUC_VER_ID(l_project_id);
3351 END IF;
3352
3353 --hsiu: changes for checking transaction currency difference
3354 --for bug 3786612
3355 PA_PROGRESS_UTILS.check_txn_currency_diff
3356 (
3357 p_structure_version_id => p_structure_version_id,
3358 p_context => 'PUBLISH_STRUCTURE',
3359 x_return_status => l_return_status
3360 );
3361
3362 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3363 RAISE FND_API.G_EXC_ERROR;
3364 END IF;
3365 --end changes for bug 3786612
3366
3367 --hsiu: bug 2684465
3368 --Check if this structure missing tasks with transactions
3369 -- IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
3370 -- PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
3371 -- x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
3372 -- RAISE FND_API.G_EXC_ERROR;
3373 -- END IF;
3374 PA_PROJECT_STRUCTURE_UTILS.CHECK_MISS_TRANSACTION_TASKS(p_structure_version_id,
3375 l_return_status,
3376 l_msg_count,
3377 l_msg_data);
3378 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3379 RAISE FND_API.G_EXC_ERROR;
3380 END IF;
3381
3382 --Check if task statuses are consistent
3383 PA_PROJECT_STRUCTURE_UTILS.check_tasks_statuses_valid(
3384 p_structure_version_id
3385 ,l_return_status
3386 ,l_msg_count
3387 ,l_msg_data
3388 );
3389 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3390 RAISE FND_API.G_EXC_ERROR;
3391 END IF;
3392
3393 --Check if any new summary task has transactions
3394 PA_PROJECT_STRUCTURE_UTILS.Check_txn_on_summary_tasks(
3395 p_structure_version_id
3396 ,l_return_status
3397 ,l_msg_count
3398 ,l_msg_data
3399 );
3400 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3401 PA_UTILS.ADD_MESSAGE('PA',l_error_message_code);
3402 x_msg_data := l_error_message_code;
3403 RAISE FND_API.G_EXC_ERROR;
3404 END IF;
3405 --end bug 2684465
3406
3407 -- 9072357
3408 OPEN get_structure_id(p_structure_version_id);
3409 FETCH get_structure_id INTO l_structure_id;
3410 CLOSE get_structure_id;
3411
3412 IF ((PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_structure_id) = 'Y') AND
3413 (PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_project_id) = 'Y')) THEN
3414
3415 PA_PROJECT_STRUCTURE_UTILS.check_exp_item_dates(
3416 p_project_id => l_project_id,
3417 p_structure_version_id => p_structure_version_id,
3418 x_return_status => l_return_status,
3419 x_msg_count => l_msg_count,
3420 x_msg_data => l_msg_data
3421 );
3422
3423 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3424 RAISE FND_API.G_EXC_ERROR;
3425 END IF;
3426 END IF;
3427
3428 --Check if this structure can be published (ie, if linked structures are published)
3429 -- IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Publish_Struc_Ver_Ok(p_structure_version_id)) THEN
3430 -- PA_UTILS.ADD_MESSAGE('PA','PA_PS_LINK_STRUC_NOT_PUB');
3431 -- x_msg_data := 'PA_PS_LINK_STRUC_NOT_PUB';
3432 -- RAISE FND_API.G_EXC_ERROR;
3433 -- END IF;
3434
3435 --Check if this structure missing tasks with transactions
3436 -- IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
3437 -- PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
3438 -- x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
3439 -- RAISE FND_API.G_EXC_ERROR;
3440 -- END IF;
3441
3442 --For rollups
3443 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
3444 -- OPEN get_linking_tasks;
3445 -- LOOP
3446 -- FETCH get_linking_tasks INTO l_linking_task_rec;
3447 -- EXIT WHEN get_linking_tasks%NOTFOUND;
3448 -- l_tasks_ver_ids.extend;
3449 -- l_tasks_ver_ids(l_tasks_ver_ids.count) := l_linking_task_rec.element_version_id;
3450 -- END LOOP;
3451 -- CLOSE get_linking_tasks;
3452 --
3453 -- IF (l_tasks_ver_ids.count > 0) THEN
3454 -- PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
3455 -- p_commit => FND_API.G_FALSE,
3456 -- p_element_versions => l_tasks_ver_ids,
3457 -- x_return_status => l_return_status,
3458 -- x_msg_count => l_msg_count,
3459 -- x_msg_data => l_msg_data);
3460 --
3461 -- if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
3462 -- x_msg_count := FND_MSG_PUB.count_msg;
3463 -- if x_msg_count = 1 then
3464 -- x_msg_data := l_msg_data;
3465 -- end if;
3466 -- raise FND_API.G_EXC_ERROR;
3467 -- end if;
3468 --
3469 -- END IF;
3470 -- END IF;
3471
3472 --Check if any linked structure is workplan type and if publishing structure is
3473 -- financial only
3474
3475 --dbms_output.put_line('1');
3476 OPEN get_struc_ver_name;
3477 --dbms_output.put_line('open get_struc_ver_name');
3478 FETCH get_struc_ver_name into l_dummy_name, l_project_id,
3479 l_proj_element_id, l_element_version_id,
3480 l_pev_structure_id;
3481 IF get_struc_ver_name%NOTFOUND THEN
3482 --dbms_output.put_line('close get_struc_ver_name');
3483 CLOSE get_struc_ver_name;
3484 RAISE NO_DATA_FOUND;
3485 END IF;
3486 --dbms_output.put_line('close get_struc_ver_name');
3487 CLOSE get_struc_ver_name;
3488 --dbms_output.put_line('1b');
3489
3490 --Set baseline flags if this is the first published version
3491 IF ('N' = PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(l_project_id, l_proj_element_id)) THEN
3492 l_current_baseline_flag := 'Y';
3493 l_original_baseline_flag := 'Y';
3494 END IF;
3495
3496 --Get Structure Version Attribute Info
3497 --dbms_output.put_line('open get_structure_ver_attr_csr');
3498 OPEN get_structure_ver_attr_csr(p_structure_version_id, l_project_id);
3499 FETCH get_structure_ver_attr_csr INTO l_struc_ver_attr_rec;
3500 --dbms_output.put_line('close get_structure_ver_attr_csr');
3501 CLOSE get_structure_ver_attr_csr;
3502
3503 --Copy structure version name and description
3504 IF (p_publish_structure_ver_name IS NULL) OR (p_publish_structure_ver_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3505 l_new_struct_ver_name := l_struc_ver_attr_rec.name;
3506 ELSE
3507 l_new_struct_ver_name := p_publish_structure_ver_name;
3508 END IF;
3509
3510 IF (p_structure_ver_desc IS NULL) or (p_structure_ver_desc = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3511 l_new_struct_ver_desc := l_struc_ver_attr_rec.description;
3512 ELSE
3513 l_new_struct_ver_desc := p_structure_ver_desc;
3514 END IF;
3515
3516 --l_dummy_name for current structure
3517 --p_publish_structure_ver_name for new publishing structure
3518 --Check if names are the same
3519 IF (l_dummy_name = l_new_struct_ver_name) THEN
3520 -- If same, add Time-Stamp to working version.
3521 -- error_msg('dummyname before '||l_dummy_name);
3522 -- l_dummy_name := substr(fnd_date.date_to_canonical(sysdate)||' - '||
3523 -- l_dummy_name,0,240);
3524 --select prefix from pa_lookups
3525 select meaning
3526 into l_prefix
3527 from pa_lookups
3528 where lookup_type = 'PA_STRUCTURES_PREFIX'
3529 and lookup_code = 'PA_PREFIX_COPY';
3530
3531 l_dummy_name := substrb(l_prefix||' '||l_dummy_name,0,240);
3532
3533 -- Bug Fix 4727737
3534 -- We need to make sure that the name of the newly created working version is unique
3535 -- and not getting collided with the published versions name.
3536 -- Users can create data in such a way that the version name when prefixed with Copy To:
3537 -- will result into an existing published version name.
3538
3539 -- So adding the following call to avoid the U2 violation due to the following update statement.
3540
3541 IF (pa_project_structure_utils.check_struc_ver_name_unique(l_dummy_name,
3542 null,
3543 l_project_id,
3544 l_proj_element_id) <> 'Y') THEN
3545
3546 --Not unique; error.
3547 pa_utils.add_message('PA','PA_PS_NEW_STRUC_VER_NAM_UNIQUE');
3548 x_msg_data := 'PA_PS_NEW_STRUC_VER_NAM_UNIQUE';
3549 RAISE FND_API.G_EXC_ERROR;
3550 END IF;
3551
3552 -- End of Bug Fix 4727737
3553
3554 -- error_msg('dummy_name after'||l_dummy_name);
3555 -- update_name
3556 update PA_PROJ_ELEM_VER_STRUCTURE
3557 set name = l_dummy_name,
3558 current_working_flag = 'Y'
3559 where pev_structure_id = l_pev_structure_id;
3560
3561 END IF;
3562
3563 --Check if structure version name is unique
3564 If (PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(l_new_struct_ver_name,
3565 null,
3566 l_project_id,
3567 l_proj_element_id) <> 'Y') THEN
3568 --Not unique; error.
3569 PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
3570 x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
3571 RAISE FND_API.G_EXC_ERROR;
3572 END IF;
3573 --Bug No 3450684 Smukka Checking for deliverable type
3574 IF PA_PROJ_ELEMENTS_UTILS.check_sharedstruct_deliv(p_structure_version_id) = 'Y' THEN
3575 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3576 p_msg_name => 'PA_PS_CHK_DEL_FAIL_PUB_STR');
3577 RAISE FND_API.G_EXC_ERROR;
3578 END IF;
3579
3580 --Get Structure Version Info
3581 --dbms_output.put_line('2');
3582 --dbms_output.put_line('open get_structure_ver_csr');
3583 OPEN get_structure_ver_csr(p_structure_version_id);
3584 FETCH get_structure_ver_csr INTO l_struc_ver_rec;
3585 --dbms_output.put_line('close get_structure_ver_csr');
3586 CLOSE get_structure_ver_csr;
3587 --dbms_output.put_line('2b');
3588
3589 OPEN cur_elem_ver_seq;
3590 FETCH cur_elem_ver_seq into l_new_struct_ver_id;
3591 CLOSE cur_elem_ver_seq;
3592
3593 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
3594 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_tmp_struct_ver_id
3595 -- to l_new_struct_ver_id
3596
3597 l_tmp_struct_ver_id := l_new_struct_ver_id ;
3598
3599 -- End 4657794
3600
3601 PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
3602 X_ROW_ID => l_rowid
3603 --,X_ELEMENT_VERSION_ID => l_new_struct_ver_id * commented for Bug Fix: 4537865
3604 ,X_ELEMENT_VERSION_ID => l_tmp_struct_ver_id -- added for Bug fix: 4537865
3605 ,X_PROJ_ELEMENT_ID => l_struc_ver_rec.proj_element_id
3606 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
3607 ,X_PROJECT_ID => l_struc_ver_rec.project_id
3608 ,X_PARENT_STRUCTURE_VERSION_ID => l_new_struct_ver_id
3609 ,X_DISPLAY_SEQUENCE => NULL
3610 ,X_WBS_LEVEL => NULL
3611 ,X_WBS_NUMBER => '0'
3612 ,X_ATTRIBUTE_CATEGORY => l_struc_ver_rec.attribute_category
3613 ,X_ATTRIBUTE1 => l_struc_ver_rec.attribute1
3614 ,X_ATTRIBUTE2 => l_struc_ver_rec.attribute2
3615 ,X_ATTRIBUTE3 => l_struc_ver_rec.attribute3
3616 ,X_ATTRIBUTE4 => l_struc_ver_rec.attribute4
3617 ,X_ATTRIBUTE5 => l_struc_ver_rec.attribute5
3618 ,X_ATTRIBUTE6 => l_struc_ver_rec.attribute6
3619 ,X_ATTRIBUTE7 => l_struc_ver_rec.attribute7
3620 ,X_ATTRIBUTE8 => l_struc_ver_rec.attribute8
3621 ,X_ATTRIBUTE9 => l_struc_ver_rec.attribute9
3622 ,X_ATTRIBUTE10 => l_struc_ver_rec.attribute10
3623 ,X_ATTRIBUTE11 => l_struc_ver_rec.attribute11
3624 ,X_ATTRIBUTE12 => l_struc_ver_rec.attribute12
3625 ,X_ATTRIBUTE13 => l_struc_ver_rec.attribute13
3626 ,X_ATTRIBUTE14 => l_struc_ver_rec.attribute14
3627 ,X_ATTRIBUTE15 => l_struc_ver_rec.element_version_id
3628 ,X_TASK_UNPUB_VER_STATUS_CODE => NULL
3629 ,X_SOURCE_OBJECT_ID => l_struc_ver_rec.project_id
3630 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
3631 );
3632 -- added for Bug fix: 4537865
3633 l_new_struct_ver_id := l_tmp_struct_ver_id;
3634 -- added for Bug fix: 4537865
3635
3636 /* This API insert into planning txn table if wp. Call table hander instead
3637 --Call Create Structure Version
3638 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
3639 ( p_validate_only => p_validate_only
3640 ,p_structure_id => l_struc_ver_rec.proj_element_id
3641 ,p_attribute_category => l_struc_ver_rec.attribute_category
3642 ,p_attribute1 => l_struc_ver_rec.attribute1
3643 ,p_attribute2 => l_struc_ver_rec.attribute2
3644 ,p_attribute3 => l_struc_ver_rec.attribute3
3645 ,p_attribute4 => l_struc_ver_rec.attribute4
3646 ,p_attribute5 => l_struc_ver_rec.attribute5
3647 ,p_attribute6 => l_struc_ver_rec.attribute6
3648 ,p_attribute7 => l_struc_ver_rec.attribute7
3649 ,p_attribute8 => l_struc_ver_rec.attribute8
3650 ,p_attribute9 => l_struc_ver_rec.attribute9
3651 ,p_attribute10 => l_struc_ver_rec.attribute10
3652 ,p_attribute11 => l_struc_ver_rec.attribute11
3653 ,p_attribute12 => l_struc_ver_rec.attribute12
3654 ,p_attribute13 => l_struc_ver_rec.attribute13
3655 ,p_attribute14 => l_struc_ver_rec.attribute14
3656 ,p_attribute15 => l_struc_ver_rec.element_version_id --for performacnce to be used later by new structure version
3657 ,x_structure_version_id => l_new_struct_ver_id
3658 ,x_return_status => l_return_status
3659 ,x_msg_count => l_msg_count
3660 ,x_msg_data => l_msg_data );
3661 --dbms_output.put_line('new struct version id = '||l_new_struct_ver_id);
3662 */
3663
3664 IF (p_debug_mode = 'Y') THEN
3665 pa_debug.debug('create structure version =>'||l_new_struct_ver_id);
3666 END IF;
3667
3668 l_msg_count := FND_MSG_PUB.count_msg;
3669 if l_msg_count > 0 then
3670 x_msg_count := l_msg_count;
3671 if x_msg_count = 1 then
3672 x_msg_data := l_msg_data;
3673 end if;
3674 raise FND_API.G_EXC_ERROR;
3675 end if;
3676
3677 --update links linking from working version to current published version
3678 -- PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS
3679 -- (
3680 -- p_init_msg_list => FND_API.G_FALSE
3681 -- ,p_commit => FND_API.G_FALSE
3682 -- ,p_debug_mode => p_debug_mode
3683 -- ,p_orig_project_id => l_project_id
3684 -- ,p_orig_structure_id => l_proj_element_id
3685 -- ,p_orig_struc_ver_id => p_structure_version_id
3686 -- ,p_orig_task_ver_id => NULL
3687 -- ,p_new_project_id => l_project_id
3688 -- ,p_new_structure_id => l_struc_ver_rec.proj_element_id
3689 -- ,p_new_struc_ver_id => l_new_struct_ver_id
3690 -- ,p_new_task_ver_id => NULL
3691 -- ,x_return_status => l_return_status
3692 -- ,x_msg_count => l_msg_count
3693 -- ,x_msg_data => l_msg_data
3694 -- );
3695 --
3696 -- l_msg_count := FND_MSG_PUB.count_msg;
3697 -- if l_msg_count > 0 then
3698 -- x_msg_count := l_msg_count;
3699 -- if x_msg_count = 1 then
3700 -- x_msg_data := l_msg_data;
3701 -- end if;
3702 -- raise FND_API.G_EXC_ERROR;
3703 -- end if;
3704
3705 --Search for incoming links; update existing links
3706 --dbms_output.put_line('3');
3707 --dbms_output.put_line('open p_structure_version_id');
3708 -- OPEN get_from_id(p_structure_version_id);
3709 -- LOOP
3710 -- IF (p_debug_mode = 'Y') THEN
3711 -- pa_debug.debug('check incoming links for struct');
3712 -- END IF;
3713 -- FETCH get_from_id INTO l_from_object_info;
3714 -- EXIT WHEN get_from_id%NOTFOUND;
3715 --
3716 -- If (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
3717 -- --get element information, then update
3718 -- --dbms_output.put_line('4');
3719 --dbms_output.put_line('open get_structure_version_info');
3720 -- OPEN get_structure_version_info(l_from_object_info.object_id_from);
3721 -- FETCH get_structure_version_info INTO l_info_struc_ver_rec;
3722 -- PA_RELATIONSHIP_PVT.Update_Relationship(
3723 -- p_init_msg_list => FND_API.G_FALSE
3724 -- ,p_commit => FND_API.G_FALSE
3725 -- ,p_debug_mode => p_debug_mode
3726 -- ,p_object_relationship_id => l_from_object_info.object_relationship_id
3727 -- ,p_project_id_from => l_info_struc_ver_rec.project_id
3728 -- ,p_structure_id_from => l_info_struc_ver_rec.structure_id
3729 -- ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
3730 -- ,p_task_version_id_from => NULL
3731 -- ,p_project_id_to => l_project_id
3732 -- ,p_structure_id_to => l_struc_ver_rec.proj_element_id
3733 -- ,p_structure_version_id_to => l_new_struct_ver_id
3734 -- ,p_task_version_id_to => NULL
3735 -- ,p_relationship_type => 'L'
3736 -- ,p_relationship_subtype => 'READ_WRITE'
3737 -- ,p_record_version_number => l_from_object_info.record_version_number
3738 -- ,x_return_status => l_return_status
3739 -- ,x_msg_count => l_msg_count
3740 -- ,x_msg_data => l_msg_data
3741 -- );
3742 --dbms_output.put_line('close get_structure_version_info');
3743 -- CLOSE get_structure_version_info;
3744 -- --dbms_output.put_line('4b');
3745 --
3746 --
3747 -- ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
3748 -- --get element information, then update
3749 -- --dbms_output.put_line('5');
3750 --dbms_output.put_line('open get_task_version_info');
3751 -- OPEN get_task_version_info(l_from_object_info.object_id_from);
3752 -- FETCH get_task_version_info INTO l_info_task_ver_rec;
3753 -- PA_RELATIONSHIP_PVT.Update_Relationship(
3754 -- p_init_msg_list => FND_API.G_FALSE
3755 -- ,p_commit => FND_API.G_FALSE
3756 -- ,p_debug_mode => p_debug_mode
3757 -- ,p_object_relationship_id => l_from_object_info.object_relationship_id
3758 -- ,p_project_id_from => l_info_task_ver_rec.project_id
3759 -- ,p_structure_id_from => l_info_task_ver_rec.structure_id
3760 -- ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
3761 -- ,p_task_version_id_from => l_info_task_ver_rec.task_version_id
3762 -- ,p_project_id_to => l_project_id
3763 -- ,p_structure_id_to => l_struc_ver_rec.proj_element_id
3764 -- ,p_structure_version_id_to => l_new_struct_ver_id
3765 -- ,p_task_version_id_to => NULL
3766 -- ,p_relationship_type => 'L'
3767 -- ,p_relationship_subtype => 'READ_WRITE'
3768 -- ,p_record_version_number => l_from_object_info.record_version_number
3769 -- ,x_return_status => l_return_status
3770 -- ,x_msg_count => l_msg_count
3771 -- ,x_msg_data => l_msg_data
3772 -- );
3773 --dbms_output.put_line('close get_task_version_info');
3774 -- CLOSE get_task_version_info;
3775 -- --dbms_output.put_line('5b');
3776 --
3777 -- END IF;
3778 -- If (p_debug_mode = 'Y') THEN
3779 -- pa_debug.debug('update incoming links for struct =>'||l_return_status);
3780 -- END IF;
3781 --
3782 -- --Check error
3783 -- l_msg_count := FND_MSG_PUB.count_msg;
3784 -- if (l_msg_count > 0) then
3785 -- x_msg_count := l_msg_count;
3786 -- if x_msg_count = 1 then
3787 -- x_msg_data := l_msg_data;
3788 -- end if;
3789 --dbms_output.put_line('close get_from_id');
3790 -- CLOSE get_from_id;
3791 -- raise FND_API.G_EXC_ERROR;
3792 -- end if;
3793 --
3794 --
3795 -- END LOOP;
3796 --dbms_output.put_line('close get_from_id');
3797 -- CLOSE get_from_id;
3798 --dbms_output.put_line('5b');
3799
3800 -----------------------------------------------
3801 --Search for outgoing links; create new Links--
3802 --dbms_output.put_line('6');
3803 --dbms_output.put_line('open get_to_id');
3804 -- OPEN get_to_id(p_structure_version_id);
3805 -- LOOP
3806 -- IF (p_debug_mode = 'Y') THEN
3807 -- pa_debug.debug('check outgoing links for struct');
3808 -- END IF;
3809 -- FETCH get_to_id INTO l_to_object_info;
3810 -- EXIT WHEN get_to_id%NOTFOUND;
3811 -- If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
3812 -- --dbms_output.put_line('7');
3813 --dbms_output.put_line('open get_structure_version_info');
3814 -- OPEN get_structure_version_info(l_to_object_info.object_id_to);
3815 -- FETCH get_structure_version_info INTO l_info_struc_ver_rec;
3816 /*****************************/
3817 --dbms_output.put_line('creating rel: structure out going links for structures');
3818 -- PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
3819 -- p_user_id => FND_GLOBAL.USER_ID
3820 -- ,p_object_type_from => 'PA_STRUCTURES'
3821 -- ,p_object_id_from1 => l_new_struct_ver_id
3822 -- ,p_object_id_from2 => NULL
3823 -- ,p_object_id_from3 => NULL
3824 -- ,p_object_id_from4 => NULL
3825 -- ,p_object_id_from5 => NULL
3826 -- ,p_object_type_to => 'PA_STRUCTURES'
3827 -- ,p_object_id_to1 => l_info_struc_ver_rec.structure_version_id
3828 -- ,p_object_id_to2 => NULL
3829 -- ,p_object_id_to3 => NULL
3830 -- ,p_object_id_to4 => NULL
3831 -- ,p_object_id_to5 => NULL
3832 -- ,p_relationship_type => 'L'
3833 -- ,p_relationship_subtype => 'READ_WRITE'
3834 -- ,p_lag_day => NULL
3835 -- ,p_imported_lag => NULL
3836 -- ,p_priority => NULL
3837 -- ,p_pm_product_code => NULL
3838 -- ,x_object_relationship_id => l_new_obj_rel_id
3839 -- ,x_return_status => l_return_status
3840 -- );
3841 --
3842 /*****************************/
3843 --dbms_output.put_line('close get_structure_version_info');
3844 -- CLOSE get_structure_version_info;
3845 -- --dbms_output.put_line('7b');
3846 --
3847 -- ELSIF(l_to_object_info.object_type_to = 'PA_TASKS') THEN
3848 -- --dbms_output.put_line('8');
3849 --dbms_output.put_line('open get_task_version_info');
3850 -- OPEN get_task_version_info(l_to_object_info.object_id_to);
3851 -- FETCH get_task_version_info INTO l_info_task_ver_rec;
3852 /*****************************/
3853 --dbms_output.put_line('creating rel: structure out going links for tasks');
3854 -- PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
3855 -- p_user_id => FND_GLOBAL.USER_ID
3856 -- ,p_object_type_from => 'PA_STRUCTURES'
3857 -- ,p_object_id_from1 => l_new_struct_ver_id
3858 -- ,p_object_id_from2 => NULL
3859 -- ,p_object_id_from3 => NULL
3860 -- ,p_object_id_from4 => NULL
3861 -- ,p_object_id_from5 => NULL
3862 -- ,p_object_type_to => 'PA_TASKS'
3863 -- ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
3864 -- ,p_object_id_to2 => NULL
3865 -- ,p_object_id_to3 => NULL
3866 -- ,p_object_id_to4 => NULL
3867 -- ,p_object_id_to5 => NULL
3868 -- ,p_relationship_type => 'L'
3869 -- ,p_relationship_subtype => 'READ_WRITE'
3870 -- ,p_lag_day => NULL
3871 -- ,p_imported_lag => NULL
3872 -- ,p_priority => NULL
3873 -- ,p_pm_product_code => NULL
3874 -- ,x_object_relationship_id => l_new_obj_rel_id
3875 -- ,x_return_status => l_return_status
3876 -- );
3877 --
3878 /*****************************/
3879 --dbms_output.put_line('close get_task_version_info');
3880 -- CLOSE get_task_version_info;
3881 -- --dbms_output.put_line('8b');
3882 --
3883 -- If (p_debug_mode = 'Y') THEN
3884 -- pa_debug.debug('update outgoing links for struct =>'||l_return_status);
3885 -- END IF;
3886 -- END IF;
3887 -- --Check error
3888 -- l_msg_count := FND_MSG_PUB.count_msg;
3889 -- if (l_msg_count > 0) then
3890 -- x_msg_count := l_msg_count;
3891 -- if x_msg_count = 1 then
3892 -- x_msg_data := l_msg_data;
3893 -- end if;
3894 --dbms_output.put_line('close get_to_id');
3895 -- CLOSE get_to_id;
3896 -- raise FND_API.G_EXC_ERROR;
3897 -- end if;
3898
3899 -- END LOOP;
3900 --dbms_output.put_line('close get_to_id');
3901 -- CLOSE get_to_id;
3902 --dbms_output.put_line('6b');
3903
3904
3905 --maansari
3906 --initialized the pl/sql table
3907 l_src_tasks_versions_tbl.delete;
3908 --maansari
3909
3910 --Create the task versions
3911 --Fetch all task versions
3912 -- error_msg('create tasks');
3913 --dbms_output.put_line('open get_Task_versions_csr');
3914 OPEN get_task_versions_csr(p_structure_version_id);
3915 l_last_wbs_level := NULL;
3916 LOOP
3917 IF (p_debug_mode = 'Y') THEN
3918 pa_debug.debug('create task version for published structure');
3919 END IF;
3920
3921 FETCH get_task_versions_csr INTO l_task_versions_rec;
3922 EXIT WHEN get_task_versions_csr%NOTFOUND;
3923
3924 --hsiu added for task version status
3925 --Check if this task can be deleted.
3926 --Call PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok
3927 --If ok to be deleted, move on to the next task and don't add this task
3928 -- (goto l_endofloop);
3929 --otherwise add this task and set status to 'CANCELLED'
3930 l_create_task_ver_flag := 'Y';
3931
3932 --Removing due to changes in publishing
3933 select a.proj_element_id, b.object_id_from1
3934 into l_parent_id, l_parent_ver_id
3935 from pa_proj_element_versions a,
3936 pa_object_relationships b
3937 where a.element_version_id = b.object_id_from1
3938 and a.object_type = b.object_type_from
3939 and relationship_type = 'S'
3940 and object_id_to1 = l_task_versions_rec.element_version_id
3941 and object_type_to = 'PA_TASKS';
3942
3943 --If it is financial task, check if this task should be created
3944
3945 -- PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
3946 -- p_parent_task_ver_id => l_parent_ver_id
3947 -- ,x_return_status => l_return_status
3948 -- ,x_error_message_code => l_error_message_code);
3949
3950 --bug: 2805602
3951 --hsiu: commented because this has been done in check_txn_on_summary_tasks
3952 -- If (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_parent_id) = 'Y') THEN
3953 -- PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK(x_task_id => l_parent_id,
3954 -- x_err_code => l_err_code,
3955 -- x_err_stack => l_err_stack,
3956 -- x_err_stage => l_err_stage
3957 -- );
3958 -- IF (l_err_code <> 0) THEN
3959 -- l_create_task_ver_flag := 'N';
3960 -- END IF;
3961 -- END IF;
3962
3963 -- IF (l_return_status <> 'Y') THEN
3964 -- l_create_task_ver_flag := 'N';
3965 -- END IF;
3966
3967 IF (l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE = 'TO_BE_DELETED') THEN
3968
3969 PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok(
3970 p_project_id => l_task_versions_rec.project_id
3971 ,p_task_version_id => l_task_versions_rec.element_version_id
3972 ,p_parent_structure_ver_id=> l_task_versions_rec.parent_structure_version_id
3973 ,x_return_status => l_return_status
3974 ,x_error_message_code => l_error_message_code );
3975 IF l_return_status <> 'S' THEN
3976 --Cannot delete this version. Create and set as cancelled
3977 l_create_task_ver_flag := 'Y';
3978 ELSE
3979 --This task version should not be created
3980 l_create_task_ver_flag := 'N';
3981 --delete from working if found
3982
3983 -- Bug # 4691749.
3984 -- l_tbd_task_ver_id.extend;
3985 -- l_tbd_task_ver_id(l_tbd_task_ver_id.count) := l_task_versions_rec.element_version_id;
3986 l_tbd_index := l_tbd_index + 1;
3987 l_tbd_task_ver_id(l_tbd_index) := l_task_versions_rec.element_version_id;
3988 -- Bug # 4691749.
3989
3990 -- Start : 4096218
3991 if (l_tbd_task_id.count < 1000) then -- Bug # 4691749.
3992 l_tbd_task_id.extend;
3993 l_tbd_task_id(l_tbd_task_id.count) := l_task_versions_rec.proj_element_id;
3994 end if; -- Bug # 4691749.
3995 -- End : 4096218
3996
3997 --prorate this branch; find parent
3998 IF (l_last_wbs_level is NULL) THEN
3999 l_parent_tbl(l_new_struct_ver_id) := l_new_struct_ver_id;
4000 --l_parent_ver_id := l_new_struct_ver_id;
4001 ELSE
4002 IF (l_task_versions_rec.wbs_level > l_last_wbs_level) THEN
4003 l_parent_tbl(l_outline_task_ref(l_last_wbs_level)) := l_outline_task_ref(l_last_wbs_level);
4004 --l_parent_ver_id := l_outline_task_ref(l_last_wbs_level);
4005 ELSE
4006 OPEN get_parent_id(l_outline_task_ref(l_task_versions_rec.wbs_level));
4007 FETCH get_parent_id into l_parent_ver_id;
4008 CLOSE get_parent_id;
4009 l_parent_tbl(l_parent_ver_id) := l_parent_ver_id;
4010 END IF;
4011 END IF;
4012 END IF;
4013 --set task status to cancelled.
4014 UPDATE pa_proj_elements
4015 set status_code = '128',
4016 RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,1)+1,
4017 LAST_UPDATE_DATE = SYSDATE,
4018 LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
4019 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
4020 where proj_element_id = l_task_versions_rec.proj_element_id;
4021
4022 update pa_proj_element_versions
4023 set TASK_UNPUB_VER_STATUS_CODE = 'PUBLISHED'
4024 where element_version_id = l_task_versions_rec.element_version_id;
4025
4026 -- 3955848 Added code to delete task to dlvr association in publishing flow , version enabled case
4027 -- p_delete_or_validate is passed as 'D' because only deletion should be done
4028
4029 PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
4030 (
4031 p_task_element_id => l_task_versions_rec.proj_element_id
4032 ,p_project_id => l_task_versions_rec.project_id
4033 ,p_task_version_id => l_task_versions_rec.element_version_id
4034 ,p_delete_or_validate => 'D'
4035 ,x_return_status => x_return_status
4036 ,x_msg_count => x_msg_count
4037 ,x_msg_data => x_msg_data
4038 );
4039
4040 IF x_return_status = FND_API.G_RET_STS_ERROR then
4041 RAISE FND_API.G_EXC_ERROR;
4042 End If;
4043
4044 -- 3955848 end
4045
4046 ELSE
4047 --if this task is linking to a working structure version
4048 --then do not copy
4049
4050 --Added by rtarway for bug 4193990
4051 l_working_ver_fg := 'N';
4052
4053 OPEN get_to_id(l_task_versions_rec.element_version_id);
4054 FETCH get_to_id INTO l_to_object_info;
4055 IF get_to_id%FOUND THEN
4056 --check if this is working version
4057 IF (pa_project_structure_utils.check_struc_ver_published(l_to_object_info.object_id_to2 ,l_to_object_info.object_id_to)
4058 = 'N') THEN
4059 l_working_ver_fg := 'Y';
4060 ELSE
4061 l_working_ver_fg := 'N';
4062 END IF;
4063 --Added by rtarway for bug 4193990
4064 ELSE
4065 l_working_ver_fg := 'N';
4066 --End Added by rtarway for bug 4193990
4067 END IF;
4068 CLOSE get_to_id;
4069
4070 IF (l_working_ver_fg = 'Y') THEN
4071 l_create_task_ver_flag := 'N';
4072 IF (l_last_wbs_level is NULL) THEN
4073 l_parent_tbl(l_new_struct_ver_id) := l_new_struct_ver_id;
4074 --l_parent_ver_id := l_new_struct_ver_id;
4075 ELSE
4076 IF (l_task_versions_rec.wbs_level > l_last_wbs_level) THEN
4077 l_parent_tbl(l_outline_task_ref(l_last_wbs_level)) := l_outline_task_ref(l_last_wbs_level);
4078 --l_parent_ver_id := l_outline_task_ref(l_last_wbs_level);
4079 ELSE
4080 OPEN get_parent_id(l_outline_task_ref(l_task_versions_rec.wbs_level));
4081 FETCH get_parent_id into l_parent_ver_id;
4082 CLOSE get_parent_id;
4083 l_parent_tbl(l_parent_ver_id) := l_parent_ver_id;
4084 END IF;
4085 END IF;
4086 ELSE --copy
4087 update pa_proj_element_versions
4088 set TASK_UNPUB_VER_STATUS_CODE = 'PUBLISHED'
4089 where element_version_id = l_task_versions_rec.element_version_id;
4090 END IF;
4091 END IF;
4092
4093 --maansari
4094 l_src_tasks_versions_tbl(i).src_task_version_id := l_task_versions_rec.element_version_id;
4095 l_src_tasks_versions_tbl(i).src_version_status := l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE;
4096 l_src_tasks_versions_tbl(i).src_parent_task_version_id := l_parent_ver_id;
4097 l_src_tasks_versions_tbl(i).copy_flag := l_create_task_ver_flag;
4098 i := i + 1;
4099 --maansari
4100
4101 /*--maansari --commenting out the following code and replacing it with bulk insert
4102 IF (l_create_task_ver_flag = 'Y') THEN
4103 --dbms_output.put_line('creating task '||l_task_versions_rec.proj_element_id||', '||l_task_versions_rec.element_version_id);
4104 if l_last_wbs_level is null then
4105 -- first task version being created
4106 -- This task should have wbs level = 1
4107 l_ref_task_ver_id := l_new_struct_ver_id;
4108 l_peer_or_sub := 'SUB';
4109 else
4110 if l_task_versions_rec.wbs_level > l_last_wbs_level then
4111 l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
4112 l_peer_or_sub := 'SUB';
4113 else
4114 l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
4115 l_peer_or_sub := 'PEER';
4116 end if;
4117 end if;
4118 --dbms_output.put_line('l_ref_task_ver_id = '||l_ref_task_ver_id);
4119 --dbms_output.put_line('l_peer_or_sub = '||l_peer_or_sub);
4120 --dbms_output.put_line('parent_element_version_id = '||l_task_versions_rec.parent_element_version_id);
4121 --Bug 2189657
4122 --Added for linking tasks with no display sequence.
4123 --Set correct reference and parent element version id
4124 If (l_task_versions_rec.display_sequence IS NULL) THEN
4125 IF (l_ref_task_ver_id <> l_new_struct_ver_id) THEN
4126 --A task has already been created. Reference task must be a task
4127 IF (l_task_versions_rec.parent_element_version_id = p_structure_version_id) THEN
4128 --this is a link to the structure version. A task has already been created.
4129 --need to use a top level task as peer reference task
4130 l_peer_or_sub := 'PEER';
4131 l_ref_task_ver_id := l_outline_task_ref(1);
4132 ELSE
4133 --this is a link to a task.
4134 l_peer_or_sub := 'SUB';
4135 l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
4136 END IF;
4137 ELSE
4138 --No task has been created. Reference task is structure
4139 l_peer_or_sub := 'SUB';
4140 l_ref_task_ver_id := l_new_struct_ver_id;
4141 -- l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
4142 END IF;
4143 END IF;
4144 --dbms_output.put_line('l_ref_task_ver_id = '||l_ref_task_ver_id);
4145 --dbms_output.put_line('l_peer_or_sub = '||l_peer_or_sub);
4146
4147 OPEN get_task_ver_weighting(l_task_versions_rec.element_version_id);
4148 FETCH get_task_ver_weighting into l_weighting_percentage;
4149 CLOSE get_task_ver_weighting;
4150
4151 --Bug 2189657 end;
4152 PA_TASK_PVT1.CREATE_TASK_VERSION
4153 ( p_validate_only => FND_API.G_FALSE
4154 ,p_validation_level => 0
4155 ,p_ref_task_version_id => l_ref_task_ver_id
4156 ,p_peer_or_sub => l_peer_or_sub
4157 ,p_task_id => l_task_versions_rec.proj_element_id
4158 ,p_WEIGHTING_PERCENTAGE => l_weighting_percentage
4159 ,p_TASK_UNPUB_VER_STATUS_CODE => 'PUBLISHED'
4160 ,x_task_version_id => l_task_version_id
4161 ,x_return_status => l_return_status
4162 ,x_msg_count => l_msg_count
4163 ,x_msg_data => l_msg_data);
4164
4165 t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
4166 --dbms_output.put_line('elem_ver_id = '||l_task_versions_rec.element_version_id||', new elem_ver_id = '||l_task_version_id);
4167
4168 --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);
4169
4170 --dbms_output.put_line('new task version id = '||l_task_version_id);
4171
4172 -- error_msg('done create_task_version '||l_msg_count||', '||l_msg_data);
4173 --Check if there is any error.
4174 l_msg_count := FND_MSG_PUB.count_msg;
4175 IF l_msg_count > 0 THEN
4176 x_msg_count := l_msg_count;
4177 IF x_msg_count = 1 THEN
4178 x_msg_data := l_msg_data;
4179 END IF;
4180 --dbms_output.put_line('close get_task_versions_csr');
4181 CLOSE get_task_versions_csr;
4182 RAISE FND_API.G_EXC_ERROR;
4183 END IF;
4184 */ --maansari
4185
4186
4187 -- error_msg('before update published links');
4188 --update links linking from working version to current published version
4189 -- IF (p_debug_mode = 'Y') THEN
4190 -- pa_debug.debug('updating links');
4191 -- END IF;
4192 -- PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS
4193 -- (
4194 -- p_init_msg_list => FND_API.G_FALSE
4195 -- ,p_commit => FND_API.G_FALSE
4196 -- ,p_debug_mode => p_debug_mode
4197 -- ,p_orig_project_id => l_project_id
4198 -- ,p_orig_structure_id => l_proj_element_id
4199 -- ,p_orig_struc_ver_id => p_structure_version_id
4200 -- ,p_orig_task_ver_id => l_task_versions_rec.element_version_id
4201 -- ,p_new_project_id => l_project_id
4202 -- ,p_new_structure_id => l_struc_ver_rec.proj_element_id
4203 -- ,p_new_struc_ver_id => l_new_struct_ver_id
4204 -- ,p_new_task_ver_id => l_task_version_id
4205 -- ,x_return_status => l_return_status
4206 -- ,x_msg_count => l_msg_count
4207 -- ,x_msg_data => l_msg_data
4208 -- );
4209 -- error_msg('update latest published links');
4210
4211 --Check if there is any error.
4212 -- l_msg_count := FND_MSG_PUB.count_msg;
4213 -- IF l_msg_count > 0 THEN
4214 -- x_msg_count := l_msg_count;
4215 -- IF x_msg_count = 1 THEN
4216 -- x_msg_data := l_msg_data;
4217 -- END IF;
4218 --dbms_output.put_line('close get_task_versions_csr');
4219 -- CLOSE get_task_versions_csr;
4220 -- RAISE FND_API.G_EXC_ERROR;
4221 -- END IF;
4222
4223
4224 --Search for incoming links; update existing links
4225 --dbms_output.put_line('open get_from_id');
4226 -- OPEN get_from_id(l_task_versions_rec.element_version_id);
4227 -- LOOP
4228 -- FETCH get_from_id INTO l_from_object_info;
4229 -- EXIT WHEN get_from_id%NOTFOUND;
4230 -- IF (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
4231 --dbms_output.put_line('open get_structure_version_info');
4232 -- OPEN get_structure_version_info(l_from_object_info.object_id_from);
4233 -- FETCH get_structure_version_info INTO l_info_struc_ver_rec;
4234 -- PA_RELATIONSHIP_PVT.Update_Relationship(
4235 -- p_init_msg_list => FND_API.G_FALSE
4236 -- ,p_commit => FND_API.G_FALSE
4237 -- ,p_debug_mode => p_debug_mode
4238 -- ,p_object_relationship_id => l_from_object_info.object_relationship_id
4239 -- ,p_project_id_from => l_info_struc_ver_rec.project_id
4240 -- ,p_structure_id_from => l_info_struc_ver_rec.structure_id
4241 -- ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
4242 -- ,p_task_version_id_from => NULL
4243 -- ,p_project_id_to => l_project_id
4244 -- ,p_structure_id_to => l_struc_ver_rec.proj_element_id
4245 -- ,p_structure_version_id_to => l_new_struct_ver_id
4246 -- ,p_task_version_id_to => l_task_version_id
4247 -- ,p_relationship_type => 'L'
4248 -- ,p_relationship_subtype => 'READ_WRITE'
4249 -- ,p_record_version_number => l_from_object_info.record_version_number
4250 -- ,x_return_status => l_return_status
4251 -- ,x_msg_count => l_msg_count
4252 -- ,x_msg_data => l_msg_data
4253 -- );
4254 --dbms_output.put_line('Incoming: From '||l_info_struc_ver_rec.structure_version_id||' To '||l_task_version_id);
4255 --dbms_output.put_line('close get_structure_version_info');
4256 -- CLOSE get_structure_version_info;
4257 --
4258 -- ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
4259 --dbms_output.put_line('get_task_version_info');
4260 -- OPEN get_task_version_info(l_from_object_info.object_id_from);
4261 -- FETCH get_task_version_info INTO l_info_task_ver_rec;
4262 -- PA_RELATIONSHIP_PVT.Update_Relationship(
4263 -- p_init_msg_list => FND_API.G_FALSE
4264 -- ,p_commit => FND_API.G_FALSE
4265 -- ,p_debug_mode => p_debug_mode
4266 -- ,p_object_relationship_id => l_from_object_info.object_relationship_id
4267 -- ,p_project_id_from => l_info_task_ver_rec.project_id
4268 -- ,p_structure_id_from => l_info_task_ver_rec.structure_id
4269 -- ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
4270 -- ,p_task_version_id_from => l_info_task_ver_rec.task_version_id
4271 -- ,p_project_id_to => l_project_id
4272 -- ,p_structure_id_to => l_struc_ver_rec.proj_element_id
4273 -- ,p_structure_version_id_to => l_new_struct_ver_id
4274 -- ,p_task_version_id_to => l_task_version_id
4275 -- ,p_relationship_type => 'L'
4276 -- ,p_relationship_subtype => 'READ_WRITE'
4277 -- ,p_record_version_number => l_from_object_info.record_version_number
4278 -- ,x_return_status => l_return_status
4279 -- ,x_msg_count => l_msg_count
4280 -- ,x_msg_data => l_msg_data
4281 -- );
4282 --dbms_output.put_line('Incoming: From '||l_info_task_ver_rec.task_version_id||' To '||l_task_version_id);
4283 --dbms_output.put_line('close get_task_version_info');
4284 -- CLOSE get_task_version_info;
4285 -- END IF;
4286 --
4287 -- --Check error
4288 -- l_msg_count := FND_MSG_PUB.count_msg;
4289 -- if (l_msg_count > 0) then
4290 -- x_msg_count := l_msg_count;
4291 -- if x_msg_count = 1 then
4292 -- x_msg_data := l_msg_data;
4293 -- end if;
4294 --dbms_output.put_line('close get_task_versions_csr');
4295 -- CLOSE get_task_versions_csr;
4296 --dbms_output.put_line('close get_from_id');
4297 -- CLOSE get_from_id;
4298 -- raise FND_API.G_EXC_ERROR;
4299 -- end if;
4300
4301 -- END LOOP;
4302 --dbms_output.put_line('close get_from_id');
4303 -- CLOSE get_from_id;
4304
4305 --Search for outgoing links; create new Links
4306 --dbms_output.put_line('get_to_id');
4307 -- OPEN get_to_id(l_task_versions_rec.element_version_id);
4308 -- LOOP
4309 -- FETCH get_to_id INTO l_to_object_info;
4310 -- EXIT WHEN get_to_id%NOTFOUND;
4311 -- If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
4312 --dbms_output.put_line('get_structure_version_info');
4313 -- OPEN get_structure_version_info(l_to_object_info.object_id_to);
4314 -- FETCH get_structure_version_info INTO l_info_struc_ver_rec;
4315 /*****************************/
4316 --dbms_output.put_line('creating rel: task out going links for structures');
4317 --dbms_output.put_line(l_project_id||','||l_struc_ver_rec.proj_element_id||','||l_new_struct_ver_id||','||','||l_task_version_id||', TO: '
4318 --||l_info_struc_ver_rec.project_id||','||l_info_struc_ver_rec.structure_id||','||l_info_struc_ver_rec.structure_version_id);
4319 -- PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
4320 -- p_user_id => FND_GLOBAL.USER_ID
4321 -- ,p_object_type_from => 'PA_TASKS'
4322 -- ,p_object_id_from1 => l_task_version_id
4323 -- ,p_object_id_from2 => NULL
4324 -- ,p_object_id_from3 => NULL
4325 -- ,p_object_id_from4 => NULL
4326 -- ,p_object_id_from5 => NULL
4327 -- ,p_object_type_to => 'PA_STRUCTURES'
4328 -- ,p_object_id_to1 => l_info_struc_ver_rec.structure_version_id
4329 -- ,p_object_id_to2 => NULL
4330 -- ,p_object_id_to3 => NULL
4331 -- ,p_object_id_to4 => NULL
4332 -- ,p_object_id_to5 => NULL
4333 -- ,p_relationship_type => 'L'
4334 -- ,p_relationship_subtype => 'READ_WRITE'
4335 -- ,p_lag_day => NULL
4336 -- ,p_imported_lag => NULL
4337 -- ,p_priority => NULL
4338 -- ,p_pm_product_code => NULL
4339 -- ,x_object_relationship_id => l_new_obj_rel_id
4340 -- ,x_return_status => l_return_status
4341 -- );
4342 --dbms_output.put_line('Outgoing: From '||l_task_version_id||' To '||l_info_struc_ver_rec.structure_version_id);
4343
4344 /*****************************/
4345 --dbms_output.put_line('close get_structure_version_info');
4346 -- CLOSE get_structure_version_info;
4347
4348 -- ELSIF (l_to_object_info.object_type_to = 'PA_TASKS') THEN
4349 --dbms_output.put_line('open get_task_version_info');
4350 -- OPEN get_task_version_info(l_to_object_info.object_id_to);
4351 -- FETCH get_task_version_info INTO l_info_task_ver_rec;
4352 /*****************************/
4353 --dbms_output.put_line('creating rel: task out going links for tasks');
4354 -- PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
4355 -- p_user_id => FND_GLOBAL.USER_ID
4356 -- ,p_object_type_from => 'PA_TASKS'
4357 -- ,p_object_id_from1 => l_task_version_id
4358 -- ,p_object_id_from2 => NULL
4359 -- ,p_object_id_from3 => NULL
4360 -- ,p_object_id_from4 => NULL
4361 -- ,p_object_id_from5 => NULL
4362 -- ,p_object_type_to => 'PA_TASKS'
4363 -- ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
4364 -- ,p_object_id_to2 => NULL
4365 -- ,p_object_id_to3 => NULL
4366 -- ,p_object_id_to4 => NULL
4367 -- ,p_object_id_to5 => NULL
4368 -- ,p_relationship_type => 'L'
4369 -- ,p_relationship_subtype => 'READ_WRITE'
4370 -- ,p_lag_day => NULL
4371 -- ,p_imported_lag => NULL
4372 -- ,p_priority => NULL
4373 -- ,p_pm_product_code => NULL
4374 -- ,x_object_relationship_id => l_new_obj_rel_id
4375 -- ,x_return_status => l_return_status
4376 -- );
4377 --dbms_output.put_line('Outgoing: From '||l_task_version_id||' To '||l_info_task_ver_rec.task_version_id);
4378
4379 /*****************************/
4380 --dbms_output.put_line('close get_task_version_info');
4381 -- CLOSE get_task_version_info;
4382 --
4383 -- END IF;
4384 --
4385 --Check error
4386 -- l_msg_count := FND_MSG_PUB.count_msg;
4387 -- if (l_msg_count > 0) then
4388 -- x_msg_count := l_msg_count;
4389 -- if x_msg_count = 1 then
4390 -- x_msg_data := l_msg_data;
4391 -- end if;
4392 --dbms_output.put_line('close get_task_versions_csr');
4393 -- CLOSE get_task_versions_csr;
4394 --dbms_output.put_line('close get_to_id');
4395 -- CLOSE get_to_id;
4396 -- raise FND_API.G_EXC_ERROR;
4397 -- end if;
4398 --
4399 -- END LOOP;
4400 --dbms_output.put_line('close get_to_id');
4401 -- CLOSE get_to_id;
4402
4403
4404 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
4405 /* maansari
4406 IF (l_workplan_type = 'Y') THEN
4407 --dbms_output.put_line('open get_ver_schedule_attr_csr');
4408 OPEN get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id,
4409 l_task_versions_rec.project_id);
4410 FETCH get_ver_schedule_attr_csr INTO l_ver_sch_attr_rec;
4411 --dbms_output.put_line('close get_ver_schedule_attr_csr');
4412 CLOSE get_ver_schedule_attr_csr;
4413 */ --maansari
4414
4415
4416 /* hsiu: bug 2800553: commented for performance improvement
4417 -- xxlu added DFF attributes
4418 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
4419 (p_validate_only => FND_API.G_FALSE
4420 ,p_element_version_id => l_task_version_id
4421 ,p_calendar_id => l_ver_sch_attr_rec.calendar_id
4422 ,p_scheduled_start_date => l_ver_sch_attr_rec.scheduled_start_date
4423 ,p_scheduled_end_date => l_ver_sch_attr_rec.scheduled_finish_date
4424 ,p_obligation_start_date => l_ver_sch_attr_rec.obligation_start_date
4425 ,p_obligation_end_date => l_ver_sch_attr_rec.obligation_finish_date
4426 ,p_actual_start_date => l_ver_sch_attr_rec.actual_start_date
4427 ,p_actual_finish_date => l_ver_sch_attr_rec.actual_finish_date
4428 ,p_estimate_start_date => l_ver_sch_attr_rec.estimated_start_date
4429 ,p_estimate_finish_date => l_ver_sch_attr_rec.estimated_finish_date
4430 ,p_duration => l_ver_sch_attr_rec.duration
4431 ,p_early_start_date => l_ver_sch_attr_rec.early_start_date
4432 ,p_early_end_date => l_ver_sch_attr_rec.early_finish_date
4433 ,p_late_start_date => l_ver_sch_attr_rec.late_start_date
4434 ,p_late_end_date => l_ver_sch_attr_rec.late_finish_date
4435 ,p_milestone_flag => l_ver_sch_attr_rec.milestone_flag
4436 ,p_critical_flag => l_ver_sch_attr_rec.critical_flag
4437 ,p_WQ_PLANNED_QUANTITY => l_ver_sch_attr_rec.WQ_PLANNED_QUANTITY
4438 ,p_PLANNED_EFFORT => l_ver_sch_attr_rec.PLANNED_EFFORT
4439 ,p_attribute_category => l_ver_sch_attr_rec.attribute_category
4440 ,p_attribute1 => l_ver_sch_attr_rec.attribute1
4441 ,p_attribute2 => l_ver_sch_attr_rec.attribute2
4442 ,p_attribute3 => l_ver_sch_attr_rec.attribute3
4443 ,p_attribute4 => l_ver_sch_attr_rec.attribute4
4444 ,p_attribute5 => l_ver_sch_attr_rec.attribute5
4445 ,p_attribute6 => l_ver_sch_attr_rec.attribute6
4446 ,p_attribute7 => l_ver_sch_attr_rec.attribute7
4447 ,p_attribute8 => l_ver_sch_attr_rec.attribute8
4448 ,p_attribute9 => l_ver_sch_attr_rec.attribute9
4449 ,p_attribute10 => l_ver_sch_attr_rec.attribute10
4450 ,p_attribute11 => l_ver_sch_attr_rec.attribute11
4451 ,p_attribute12 => l_ver_sch_attr_rec.attribute12
4452 ,p_attribute13 => l_ver_sch_attr_rec.attribute13
4453 ,p_attribute14 => l_ver_sch_attr_rec.attribute14
4454 ,p_attribute15 => l_ver_sch_attr_rec.attribute15
4455 ,x_pev_schedule_id => l_pev_schedule_id
4456 ,x_return_status => l_return_status
4457 ,x_msg_count => l_msg_count
4458 ,x_msg_data => l_msg_data );
4459 -- end xxlu changes
4460 */
4461 --hsiu: bug 2800553: added for performance improvement
4462 /* maansari commenting the following code and replacing it with bulk insert
4463 l_new_pev_schedule_id := NULL;
4464 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
4465 X_ROW_ID => X_Row_Id
4466 ,X_PEV_SCHEDULE_ID => l_new_pev_schedule_id
4467 ,X_ELEMENT_VERSION_ID => l_task_version_id
4468 ,X_PROJECT_ID => l_ver_sch_attr_rec.PROJECT_ID
4469 ,X_PROJ_ELEMENT_ID => l_ver_sch_attr_rec.PROJ_ELEMENT_ID
4470 ,X_SCHEDULED_START_DATE => l_ver_sch_attr_rec.SCHEDULED_START_DATE
4471 ,X_SCHEDULED_FINISH_DATE => l_ver_sch_attr_rec.SCHEDULED_FINISH_DATE
4472 ,X_OBLIGATION_START_DATE => l_ver_sch_attr_rec.OBLIGATION_START_DATE
4473 ,X_OBLIGATION_FINISH_DATE => l_ver_sch_attr_rec.OBLIGATION_FINISH_DATE
4474 ,X_ACTUAL_START_DATE => l_ver_sch_attr_rec.ACTUAL_START_DATE
4475 ,X_ACTUAL_FINISH_DATE => l_ver_sch_attr_rec.ACTUAL_FINISH_DATE
4476 ,X_ESTIMATED_START_DATE => l_ver_sch_attr_rec.ESTIMATED_START_DATE
4477 ,X_ESTIMATED_FINISH_DATE => l_ver_sch_attr_rec.ESTIMATED_FINISH_DATE
4478 ,X_DURATION => l_ver_sch_attr_rec.DURATION
4479 ,X_EARLY_START_DATE => l_ver_sch_attr_rec.EARLY_START_DATE
4480 ,X_EARLY_FINISH_DATE => l_ver_sch_attr_rec.EARLY_FINISH_DATE
4481 ,X_LATE_START_DATE => l_ver_sch_attr_rec.LATE_START_DATE
4482 ,X_LATE_FINISH_DATE => l_ver_sch_attr_rec.LATE_FINISH_DATE
4483 ,X_CALENDAR_ID => l_ver_sch_attr_rec.CALENDAR_ID
4484 ,X_MILESTONE_FLAG => l_ver_sch_attr_rec.MILESTONE_FLAG
4485 ,X_CRITICAL_FLAG => l_ver_sch_attr_rec.CRITICAL_FLAG
4486 ,X_WQ_PLANNED_QUANTITY => l_ver_sch_attr_rec.wq_planned_quantity
4487 ,X_PLANNED_EFFORT => l_ver_sch_attr_rec.planned_effort
4488 ,X_ACTUAL_DURATION => l_ver_sch_attr_rec.actual_duration
4489 ,X_ESTIMATED_DURATION => l_ver_sch_attr_rec.estimated_duration
4490 ,X_ATTRIBUTE_CATEGORY => l_ver_sch_attr_rec.ATTRIBUTE_CATEGORY
4491 ,X_ATTRIBUTE1 => l_ver_sch_attr_rec.ATTRIBUTE1
4492 ,X_ATTRIBUTE2 => l_ver_sch_attr_rec.ATTRIBUTE2
4493 ,X_ATTRIBUTE3 => l_ver_sch_attr_rec.ATTRIBUTE3
4494 ,X_ATTRIBUTE4 => l_ver_sch_attr_rec.ATTRIBUTE4
4495 ,X_ATTRIBUTE5 => l_ver_sch_attr_rec.ATTRIBUTE5
4496 ,X_ATTRIBUTE6 => l_ver_sch_attr_rec.ATTRIBUTE6
4497 ,X_ATTRIBUTE7 => l_ver_sch_attr_rec.ATTRIBUTE7
4498 ,X_ATTRIBUTE8 => l_ver_sch_attr_rec.ATTRIBUTE8
4499 ,X_ATTRIBUTE9 => l_ver_sch_attr_rec.ATTRIBUTE9
4500 ,X_ATTRIBUTE10 => l_ver_sch_attr_rec.ATTRIBUTE10
4501 ,X_ATTRIBUTE11 => l_ver_sch_attr_rec.ATTRIBUTE11
4502 ,X_ATTRIBUTE12 => l_ver_sch_attr_rec.ATTRIBUTE12
4503 ,X_ATTRIBUTE13 => l_ver_sch_attr_rec.ATTRIBUTE13
4504 ,X_ATTRIBUTE14 => l_ver_sch_attr_rec.ATTRIBUTE14
4505 ,X_ATTRIBUTE15 => l_ver_sch_attr_rec.ATTRIBUTE15
4506 ,X_SOURCE_OBJECT_ID => l_ver_sch_attr_rec.PROJECT_ID
4507 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
4508 );
4509
4510 --Check if there is any error.
4511 l_msg_count := FND_MSG_PUB.count_msg;
4512 IF l_msg_count > 0 THEN
4513 x_msg_count := l_msg_count;
4514 IF x_msg_count = 1 THEN
4515 x_msg_data := l_msg_data;
4516 END IF;
4517 --dbms_output.put_line('close get_task_versions_csr');
4518 CLOSE get_task_versions_csr;
4519 RAISE FND_API.G_EXC_ERROR;
4520 END IF;
4521 END IF;
4522
4523 l_last_wbs_level := l_task_versions_rec.wbs_level;
4524 l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;
4525
4526 --hsiu added for task version status
4527 --label for not adding the task version in the published structure version.
4528 END IF; --for l_create_task_ver_flag
4529 */ --maansari
4530
4531 END LOOP;
4532 --dbms_output.put_line('close get_task_versions_csr');
4533 CLOSE get_task_versions_csr;
4534
4535 --hsiu
4536 --changes for task status
4537 --tasks might be deleted because childs are also deleted when deleting
4538 -- a task
4539 l_del_task_cnt := 0;
4540 LOOP
4541
4542 -- Bug # 4691749.
4543 -- EXIT when l_del_task_cnt = l_tbd_task_ver_id.count;
4544 EXIT when l_del_task_cnt = l_tbd_index;
4545 -- Bug # 4691749.
4546
4547 l_del_task_cnt := l_del_task_cnt + 1;
4548
4549 OPEN get_tbd_tasks_info(l_tbd_task_ver_id(l_del_task_cnt));
4550 FETCH get_tbd_tasks_info into l_tbd_tasks_info_rec;
4551 IF get_tbd_tasks_info%FOUND THEN
4552 PA_TASK_PVT1.Delete_Task_Ver_wo_val(
4553 p_structure_version_id => l_tbd_tasks_info_rec.parent_structure_version_id
4554 ,p_task_version_id => l_tbd_tasks_info_rec.element_version_id
4555 ,p_record_version_number => l_tbd_tasks_info_rec.record_version_number
4556 ,x_return_status => l_return_status
4557 ,x_msg_count => l_msg_count
4558 ,x_msg_data => l_msg_data
4559 );
4560
4561 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4562 x_msg_count := FND_MSG_PUB.count_msg;
4563 if x_msg_count = 1 then
4564 x_msg_data := l_msg_data;
4565 end if;
4566 raise FND_API.G_EXC_ERROR;
4567 end if;
4568
4569 END IF;
4570 CLOSE get_tbd_tasks_info;
4571 END LOOP;
4572 --end changes for task status
4573
4574
4575 --hsiu: create schedule row for structure version after delete so that dates are rolledup properly.
4576 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
4577 IF (l_workplan_type = 'Y') THEN
4578 --Get Schedule Version Info, if workplan type
4579 --dbms_output.put_line('9');
4580 --dbms_output.put_line('open get_ver_schedule_attr_csr');
4581 OPEN get_ver_schedule_attr_csr(p_structure_version_id, l_project_id);
4582 FETCH get_ver_schedule_attr_csr INTO l_ver_sch_attr_rec;
4583 --dbms_output.put_line('close get_ver_schedule_attr_csr');
4584 CLOSE get_ver_schedule_attr_csr;
4585 --dbms_output.put_line('10b');
4586
4587 IF (p_debug_mode = 'Y') THEN
4588 pa_debug.debug('create schedule version for struct');
4589 END IF;
4590 --Call Create_Schedule_Version if workplan type
4591 /* hsiu: bug 2800553: commented for performance improvement
4592 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
4593 ( p_validate_only => FND_API.G_FALSE
4594 ,p_element_version_id => l_new_struct_ver_id
4595 ,p_calendar_id => l_ver_sch_attr_rec.calendar_id
4596 ,p_scheduled_start_date => l_ver_sch_attr_rec.scheduled_start_date
4597 ,p_scheduled_end_date => l_ver_sch_attr_rec.scheduled_finish_date
4598 ,p_obligation_start_date => l_ver_sch_attr_rec.obligation_start_date
4599 ,p_obligation_end_date => l_ver_sch_attr_rec.obligation_finish_date
4600 ,p_actual_start_date => l_ver_sch_attr_rec.actual_start_date
4601 ,p_actual_finish_date => l_ver_sch_attr_rec.actual_finish_date
4602 ,p_estimate_start_date => l_ver_sch_attr_rec.estimated_start_date
4603 ,p_estimate_finish_date => l_ver_sch_attr_rec.estimated_finish_date
4604 ,p_duration => l_ver_sch_attr_rec.duration
4605 ,p_early_start_date => l_ver_sch_attr_rec.early_start_date
4606 ,p_early_end_date => l_ver_sch_attr_rec.early_finish_date
4607 ,p_late_start_date => l_ver_sch_attr_rec.late_start_date
4608 ,p_late_end_date => l_ver_sch_attr_rec.late_finish_date
4609 ,p_milestone_flag => l_ver_sch_attr_rec.milestone_flag
4610 ,p_critical_flag => l_ver_sch_attr_rec.critical_flag
4611 ,p_WQ_PLANNED_QUANTITY => l_ver_sch_attr_rec.WQ_PLANNED_QUANTITY
4612 ,p_PLANNED_EFFORT => l_ver_sch_attr_rec.PLANNED_EFFORT
4613 ,x_pev_schedule_id => l_new_pev_schedule_id
4614 ,x_return_status => l_return_status
4615 ,x_msg_count => l_msg_count
4616 ,x_msg_data => l_msg_data );
4617 */
4618 --hsiu: bug 2800553: added for performance improvement
4619 l_new_pev_schedule_id := NULL;
4620 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
4621 X_ROW_ID => X_Row_Id
4622 ,X_PEV_SCHEDULE_ID => l_new_pev_schedule_id
4623 ,X_ELEMENT_VERSION_ID => l_new_struct_ver_id
4624 ,X_PROJECT_ID => l_ver_sch_attr_rec.PROJECT_ID
4625 ,X_PROJ_ELEMENT_ID => l_ver_sch_attr_rec.PROJ_ELEMENT_ID
4626 ,X_SCHEDULED_START_DATE => l_ver_sch_attr_rec.SCHEDULED_START_DATE
4627 ,X_SCHEDULED_FINISH_DATE => l_ver_sch_attr_rec.SCHEDULED_FINISH_DATE
4628 ,X_OBLIGATION_START_DATE => l_ver_sch_attr_rec.OBLIGATION_START_DATE
4629 ,X_OBLIGATION_FINISH_DATE => l_ver_sch_attr_rec.OBLIGATION_FINISH_DATE
4630 ,X_ACTUAL_START_DATE => l_ver_sch_attr_rec.ACTUAL_START_DATE
4631 ,X_ACTUAL_FINISH_DATE => l_ver_sch_attr_rec.ACTUAL_FINISH_DATE
4632 ,X_ESTIMATED_START_DATE => l_ver_sch_attr_rec.ESTIMATED_START_DATE
4633 ,X_ESTIMATED_FINISH_DATE => l_ver_sch_attr_rec.ESTIMATED_FINISH_DATE
4634 ,X_DURATION => l_ver_sch_attr_rec.DURATION
4635 ,X_EARLY_START_DATE => l_ver_sch_attr_rec.EARLY_START_DATE
4636 ,X_EARLY_FINISH_DATE => l_ver_sch_attr_rec.EARLY_FINISH_DATE
4637 ,X_LATE_START_DATE => l_ver_sch_attr_rec.LATE_START_DATE
4638 ,X_LATE_FINISH_DATE => l_ver_sch_attr_rec.LATE_FINISH_DATE
4639 ,X_CALENDAR_ID => l_ver_sch_attr_rec.CALENDAR_ID
4640 ,X_MILESTONE_FLAG => l_ver_sch_attr_rec.MILESTONE_FLAG
4641 ,X_CRITICAL_FLAG => l_ver_sch_attr_rec.CRITICAL_FLAG
4642 ,X_WQ_PLANNED_QUANTITY => l_ver_sch_attr_rec.wq_planned_quantity
4643 ,X_PLANNED_EFFORT => l_ver_sch_attr_rec.planned_effort
4644 ,X_ACTUAL_DURATION => l_ver_sch_attr_rec.actual_duration
4645 ,X_ESTIMATED_DURATION => l_ver_sch_attr_rec.estimated_duration
4646 ,X_ATTRIBUTE_CATEGORY => l_ver_sch_attr_rec.ATTRIBUTE_CATEGORY
4647 ,X_ATTRIBUTE1 => l_ver_sch_attr_rec.ATTRIBUTE1
4648 ,X_ATTRIBUTE2 => l_ver_sch_attr_rec.ATTRIBUTE2
4649 ,X_ATTRIBUTE3 => l_ver_sch_attr_rec.ATTRIBUTE3
4650 ,X_ATTRIBUTE4 => l_ver_sch_attr_rec.ATTRIBUTE4
4651 ,X_ATTRIBUTE5 => l_ver_sch_attr_rec.ATTRIBUTE5
4652 ,X_ATTRIBUTE6 => l_ver_sch_attr_rec.ATTRIBUTE6
4653 ,X_ATTRIBUTE7 => l_ver_sch_attr_rec.ATTRIBUTE7
4654 ,X_ATTRIBUTE8 => l_ver_sch_attr_rec.ATTRIBUTE8
4655 ,X_ATTRIBUTE9 => l_ver_sch_attr_rec.ATTRIBUTE9
4656 ,X_ATTRIBUTE10 => l_ver_sch_attr_rec.ATTRIBUTE10
4657 ,X_ATTRIBUTE11 => l_ver_sch_attr_rec.ATTRIBUTE11
4658 ,X_ATTRIBUTE12 => l_ver_sch_attr_rec.ATTRIBUTE12
4659 ,X_ATTRIBUTE13 => l_ver_sch_attr_rec.ATTRIBUTE13
4660 ,X_ATTRIBUTE14 => l_ver_sch_attr_rec.ATTRIBUTE14
4661 ,X_ATTRIBUTE15 => l_ver_sch_attr_rec.ATTRIBUTE15
4662 ,X_SOURCE_OBJECT_ID => l_ver_sch_attr_rec.PROJECT_ID
4663 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
4664 );
4665
4666
4667 --Check if there is any error.
4668 l_msg_count := FND_MSG_PUB.count_msg;
4669 IF l_msg_count > 0 THEN
4670 x_msg_count := l_msg_count;
4671 IF x_msg_count = 1 THEN
4672 x_msg_data := l_msg_data;
4673 END IF;
4674 RAISE FND_API.G_EXC_ERROR;
4675 END IF;
4676
4677 END IF;
4678
4679
4680 --maansari
4681 --clear up global array
4682 PA_STRUCT_UPGR_PUB.clear_globals;
4683
4684 INSERT INTO pa_proj_element_versions(
4685 ELEMENT_VERSION_ID
4686 ,PROJ_ELEMENT_ID
4687 ,OBJECT_TYPE
4688 ,PROJECT_ID
4689 ,PARENT_STRUCTURE_VERSION_ID
4690 ,DISPLAY_SEQUENCE
4691 ,WBS_LEVEL
4692 ,WBS_NUMBER
4693 ,CREATION_DATE
4694 ,CREATED_BY
4695 ,LAST_UPDATE_DATE
4696 ,LAST_UPDATED_BY
4697 ,LAST_UPDATE_LOGIN
4698 ,RECORD_VERSION_NUMBER
4699 ,ATTRIBUTE_CATEGORY
4700 ,ATTRIBUTE1
4701 ,ATTRIBUTE2
4702 ,ATTRIBUTE3
4703 ,ATTRIBUTE4
4704 ,ATTRIBUTE5
4705 ,ATTRIBUTE6
4706 ,ATTRIBUTE7
4707 ,ATTRIBUTE8
4708 ,ATTRIBUTE9
4709 ,ATTRIBUTE10
4710 ,ATTRIBUTE11
4711 ,ATTRIBUTE12
4712 ,ATTRIBUTE13
4713 ,ATTRIBUTE14
4714 ,TASK_UNPUB_VER_STATUS_CODE
4715 ,attribute15 --this column is used to store structure ver id of the source str to be used to created relationships.
4716 ,source_object_id
4717 ,source_object_type
4718 ,financial_task_flag
4719 )
4720 SELECT
4721 pa_proj_element_versions_s.nextval
4722 ,ppev.proj_element_id
4723 ,ppev.object_type
4724 ,l_project_id
4725 ,l_new_struct_ver_id
4726 ,PA_STRUCT_UPGR_PUB.get_disp_sequence(ppev.display_sequence)
4727 ,ppev.WBS_LEVEL
4728 ,PA_STRUCT_UPGR_PUB.get_wbs_number(ppev.WBS_LEVEL, NULL) -- Bug No. 4049574
4729 ,SYSDATE
4730 ,l_user_id
4731 ,SYSDATE
4732 ,l_user_id
4733 ,l_login_id
4734 ,ppev.RECORD_VERSION_NUMBER
4735 ,ppev.ATTRIBUTE_CATEGORY
4736 ,ppev.ATTRIBUTE1
4737 ,ppev.ATTRIBUTE2
4738 ,ppev.ATTRIBUTE3
4739 ,ppev.ATTRIBUTE4
4740 ,ppev.ATTRIBUTE5
4741 ,ppev.ATTRIBUTE6
4742 ,ppev.ATTRIBUTE7
4743 ,ppev.ATTRIBUTE8
4744 ,ppev.ATTRIBUTE9
4745 ,ppev.ATTRIBUTE10
4746 ,ppev.ATTRIBUTE11
4747 ,ppev.ATTRIBUTE12
4748 ,ppev.ATTRIBUTE13
4749 ,ppev.ATTRIBUTE14
4750 ,ppev.TASK_UNPUB_VER_STATUS_CODE
4751 ,ppev.element_version_id
4752 ,l_project_id
4753 ,'PA_PROJECTS'
4754 ,ppev.financial_task_flag
4755 FROM ( SELECT * from pa_proj_element_versions ppev2
4756 --,pa_proj_elements ppe --bug 4573340 commenting out this for bug 4578813
4757 WHERE --bug#3094283 ppev2.project_id = l_project_id
4758 ppev2.parent_structure_version_id = p_structure_version_id
4759 and ppev2.object_type = 'PA_TASKS'
4760 /*
4761 --bug 4573340
4762 and ppe.project_id = ppev2.project_id
4763 and ppe.proj_element_id = ppev2.proj_element_id
4764 and ppe.link_task_flag = 'N'
4765 --bug 4573340
4766 */
4767 and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( p_structure_version_id,
4768 ppev2.element_version_id ) = 'Y'
4769 order by ppev2.display_sequence ) ppev
4770 ;
4771
4772 /* --cant write order by directly.
4773 FROM pa_proj_element_versions ppev
4774 WHERE ppev.project_id = l_project_id
4775 and ppev.parent_structure_version_id = p_structure_version_id
4776 and ppev.object_type = 'PA_TASKS'
4777 and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( p_structure_version_id,
4778 ppev.element_version_id ) = 'Y'
4779 order by ppev.display_sequence
4780 ;
4781 */
4782
4783 -- Bug 4205167 : Added hint to use Hash Join
4784 INSERT INTO PA_OBJECT_RELATIONSHIPS (
4785 object_relationship_id,
4786 object_type_from,
4787 object_id_from1,
4788 object_type_to,
4789 object_id_to1,
4790 relationship_type,
4791 relationship_subtype,
4792 Record_Version_Number,
4793 CREATED_BY,
4794 CREATION_DATE,
4795 LAST_UPDATED_BY,
4796 LAST_UPDATE_DATE,
4797 LAST_UPDATE_LOGIN,
4798 weighting_percentage
4799 )
4800 SELECT /*+ USE_HASH(ppev2 ppev1)*/
4801 pa_object_relationships_s.nextval,
4802 pobj.object_type_from,
4803 ppev1.element_version_id,
4804 pobj.object_type_to,
4805 ppev2.element_version_id,
4806 pobj.relationship_type,
4807 pobj.relationship_subtype,
4808 pobj.Record_Version_Number,
4809 l_user_id,
4810 SYSDATE,
4811 l_user_id,
4812 SYSDATE,
4813 l_login_id,
4814 pobj.weighting_percentage
4815 FROM ( SELECT object_type_from, object_id_from1,
4816 object_type_to, object_id_to1,
4817 relationship_type, relationship_subtype,
4818 Record_Version_Number, weighting_percentage
4819 FROM pa_object_relationships
4820 --bug#3094283 WHERE RELATIONSHIP_TYPE = 'S'
4821 start with object_id_from1 = p_structure_version_id
4822 and RELATIONSHIP_TYPE = 'S' /* Bug 2881667 - Added this condition */
4823 connect by object_id_from1 = prior object_id_to1
4824 and RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 - Added this condition */
4825 pa_proj_element_versions ppev1,
4826 pa_proj_element_versions ppev2
4827 WHERE
4828 --bug#3094283 ppev1.project_id = l_project_id
4829 ppev1.attribute15 = pobj.object_id_from1
4830 --bug#3094283 AND ppev2.project_id = l_project_id
4831 AND ppev2.attribute15 = pobj.object_id_to1
4832 and ppev1.parent_structure_version_id = l_new_struct_ver_id
4833 and ppev2.parent_structure_version_id = l_new_struct_ver_id
4834 ;
4835
4836
4837 INSERT INTO pa_proj_elem_ver_schedule(
4838 PEV_SCHEDULE_ID
4839 ,ELEMENT_VERSION_ID
4840 ,PROJECT_ID
4841 ,PROJ_ELEMENT_ID
4842 ,CREATION_DATE
4843 ,CREATED_BY
4844 ,LAST_UPDATE_DATE
4845 ,LAST_UPDATED_BY
4846 ,SCHEDULED_START_DATE
4847 ,SCHEDULED_FINISH_DATE
4848 ,OBLIGATION_START_DATE
4849 ,OBLIGATION_FINISH_DATE
4850 ,ACTUAL_START_DATE
4851 ,ACTUAL_FINISH_DATE
4852 ,ESTIMATED_START_DATE
4853 ,ESTIMATED_FINISH_DATE
4854 ,DURATION
4855 ,EARLY_START_DATE
4856 ,EARLY_FINISH_DATE
4857 ,LATE_START_DATE
4858 ,LATE_FINISH_DATE
4859 ,CALENDAR_ID
4860 ,MILESTONE_FLAG
4861 ,CRITICAL_FLAG
4862 ,RECORD_VERSION_NUMBER
4863 ,LAST_UPDATE_LOGIN
4864 ,WQ_PLANNED_QUANTITY
4865 ,PLANNED_EFFORT
4866 ,ACTUAL_DURATION
4867 ,ESTIMATED_DURATION
4868 ,ATTRIBUTE_CATEGORY
4869 ,ATTRIBUTE1
4870 ,ATTRIBUTE2
4871 ,ATTRIBUTE3
4872 ,ATTRIBUTE4
4873 ,ATTRIBUTE5
4874 ,ATTRIBUTE6
4875 ,ATTRIBUTE7
4876 ,ATTRIBUTE8
4877 ,ATTRIBUTE9
4878 ,ATTRIBUTE10
4879 ,ATTRIBUTE11
4880 ,ATTRIBUTE12
4881 ,ATTRIBUTE13
4882 ,ATTRIBUTE14
4883 ,ATTRIBUTE15
4884 ,source_object_id
4885 ,source_object_type
4886 ,CONSTRAINT_TYPE_CODE
4887 ,CONSTRAINT_DATE
4888 ,FREE_SLACK
4889 ,TOTAL_SLACK
4890 ,EFFORT_DRIVEN_FLAG
4891 ,LEVEL_ASSIGNMENTS_FLAG
4892 ,EXT_ACT_DURATION
4893 ,EXT_REMAIN_DURATION
4894 ,EXT_SCH_DURATION
4895 ,DEF_SCH_TOOL_TSK_TYPE_CODE -- 4295770 Added
4896 )
4897 SELECT
4898 pa_proj_elem_ver_schedule_s.nextval
4899 ,ppev1.ELEMENT_VERSION_ID
4900 ,l_PROJECT_ID
4901 ,ppev1.PROJ_ELEMENT_ID
4902 ,SYSDATE
4903 ,l_user_id
4904 ,SYSDATE
4905 ,l_user_id
4906 ,ppevs.SCHEDULED_START_DATE
4907 ,ppevs.SCHEDULED_FINISH_DATE
4908 ,ppevs.OBLIGATION_START_DATE
4909 ,ppevs.OBLIGATION_FINISH_DATE
4910 ,ppevs.ACTUAL_START_DATE
4911 ,ppevs.ACTUAL_FINISH_DATE
4912 ,ppevs.ESTIMATED_START_DATE
4913 ,ppevs.ESTIMATED_FINISH_DATE
4914 ,ppevs.DURATION
4915 ,ppevs.EARLY_START_DATE
4916 ,ppevs.EARLY_FINISH_DATE
4917 ,ppevs.LATE_START_DATE
4918 ,ppevs.LATE_FINISH_DATE
4919 ,ppevs.CALENDAR_ID
4920 ,ppevs.MILESTONE_FLAG
4921 ,ppevs.CRITICAL_FLAG
4922 ,ppevs.RECORD_VERSION_NUMBER
4923 ,l_login_id
4924 ,ppevs.WQ_PLANNED_QUANTITY
4925 ,ppevs.PLANNED_EFFORT
4926 ,ppevs.ACTUAL_DURATION
4927 ,ppevs.ESTIMATED_DURATION
4928 ,ppevs.ATTRIBUTE_CATEGORY
4929 ,ppevs.ATTRIBUTE1
4930 ,ppevs.ATTRIBUTE2
4931 ,ppevs.ATTRIBUTE3
4932 ,ppevs.ATTRIBUTE4
4933 ,ppevs.ATTRIBUTE5
4934 ,ppevs.ATTRIBUTE6
4935 ,ppevs.ATTRIBUTE7
4936 ,ppevs.ATTRIBUTE8
4937 ,ppevs.ATTRIBUTE9
4938 ,ppevs.ATTRIBUTE10
4939 ,ppevs.ATTRIBUTE11
4940 ,ppevs.ATTRIBUTE12
4941 ,ppevs.ATTRIBUTE13
4942 ,ppevs.ATTRIBUTE14
4943 ,ppevs.ATTRIBUTE15
4944 ,l_PROJECT_ID
4945 ,'PA_PROJECTS'
4946 ,ppevs.CONSTRAINT_TYPE_CODE
4947 ,ppevs.CONSTRAINT_DATE
4948 ,ppevs.FREE_SLACK
4949 ,ppevs.TOTAL_SLACK
4950 ,ppevs.EFFORT_DRIVEN_FLAG
4951 ,ppevs.LEVEL_ASSIGNMENTS_FLAG
4952 ,ppevs.EXT_ACT_DURATION
4953 ,ppevs.EXT_REMAIN_DURATION
4954 ,ppevs.EXT_SCH_DURATION
4955 ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE -- 4295770 Added
4956 FROM pa_proj_elem_ver_schedule ppevs,
4957 pa_proj_element_versions ppev1
4958 where ppev1.attribute15 = ppevs.element_version_id
4959 and ppevs.project_id = l_project_id
4960 and ppev1.project_id = l_project_id
4961 and ppev1.parent_structure_version_id = l_new_struct_ver_id
4962 and ppev1.object_type = 'PA_TASKS';
4963
4964 ---------------------------------------------- FP_M changes: Begin
4965 -- Refer to tracking bug 3305199
4966 -- Populate the old and new task version ID in PL/SQL tables
4967
4968 Select Element_Version_ID, ATTRIBUTE15 Bulk Collect
4969 INTO l_New_Task_Versions_Tab, l_Old_Task_Versions_Tab
4970 From pa_proj_element_versions
4971 Where parent_structure_version_id = l_new_struct_ver_id
4972 and object_type = 'PA_TASKS'
4973 and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( l_new_struct_ver_id, element_version_id ) = 'Y'
4974 order by display_sequence;
4975
4976 --bug 4019845
4977 --comment starts here
4978 /*
4979 PA_Relationship_Pvt.Copy_Intra_Dependency (
4980 P_Source_Ver_Tbl => l_Old_Task_Versions_Tab,
4981 P_Destin_Ver_Tbl => l_New_Task_Versions_Tab,
4982 X_Return_Status => X_Return_Status,
4983 X_Msg_Count => X_Msg_Count,
4984 X_Msg_Data => X_Msg_Data
4985 );
4986
4987 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4988 RAISE FND_API.G_EXC_ERROR;
4989 END IF;
4990
4991 PA_RELATIONSHIP_PVT.Publish_Inter_Proj_Dep ( -- This API needs to be called
4992 p_publishing_struc_ver_id => p_structure_version_id,
4993 p_previous_pub_struc_ver_id => l_last_pub_str_ver_id,
4994 p_published_struc_ver_id => l_new_struct_ver_id,
4995 X_Return_Status => X_Return_Status,
4996 X_Msg_Count => X_Msg_Count,
4997 X_Msg_Data => X_Msg_Data
4998 );
4999 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5000 RAISE FND_API.G_EXC_ERROR;
5001 END IF;
5002 */
5003
5004 /* Smukka 01/03/2004 Bug No.3450684 */
5005 /* Added call to PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass */
5006 /* And PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1 API calls to */
5007 /* copy all the out going and coming in sub project assoications */
5008 /*
5009 PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
5010 p_validate_only => p_validate_only,
5011 p_validation_level => p_validation_level,
5012 p_calling_module => p_calling_module,
5013 p_debug_mode => p_debug_mode,
5014 p_max_msg_count => p_max_msg_count,
5015 p_commit => p_commit,
5016 p_src_str_version_id => p_structure_version_id,
5017 p_dest_str_version_id => l_new_struct_ver_id, -- Destination Str version id can be of published str also
5018 x_return_status => X_Return_Status,
5019 x_msg_count => X_Msg_Count,
5020 x_msg_data => X_Msg_Data);
5021 IF (X_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5022 x_msg_count := FND_MSG_PUB.count_msg;
5023 IF x_msg_count = 1 then
5024 pa_interface_utils_pub.get_messages
5025 (p_encoded => FND_API.G_TRUE,
5026 p_msg_index => 1,
5027 p_msg_count => l_msg_count,
5028 p_msg_data => l_msg_data,
5029 p_data => l_data,
5030 p_msg_index_out => l_msg_index_out);
5031 x_msg_data := l_data;
5032 END IF;
5033 raise FND_API.G_EXC_ERROR;
5034 END IF;
5035 PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1(
5036 p_api_version => p_api_version,
5037 p_init_msg_list => p_init_msg_list,
5038 p_validate_only => p_validate_only,
5039 p_validation_level => p_validation_level,
5040 p_calling_module => p_calling_module,
5041 p_commit => p_commit,
5042 p_debug_mode => p_debug_mode,
5043 p_max_msg_count => p_max_msg_count,
5044 p_src_str_version_id => p_structure_version_id,
5045 p_pub_str_version_id => l_new_struct_ver_id,
5046 p_last_pub_str_version_id => l_last_pub_str_ver_id,
5047 x_return_status => x_return_status,
5048 x_msg_count => x_msg_count,
5049 x_msg_data => x_msg_data);
5050
5051 --------------------------------------------- FP_M changes: End
5052 */
5053 --end bug 4019845
5054
5055 update pa_proj_element_versions ppevs1
5056 set attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
5057 where ppevs2.project_id = l_project_id
5058 and parent_structure_version_id = p_structure_version_id
5059 and ppevs2.element_version_id = ppevs1.attribute15
5060 )
5061 where project_id = l_project_id
5062 and parent_structure_version_id = l_new_struct_ver_id;
5063
5064 --maansari
5065
5066 --This has to be done at the end because creating latest version before
5067 -- updating links will break the logic for updating to latest published
5068 -- version.
5069
5070 --Call Create Structure Version Attr
5071 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
5072 ( p_validate_only => FND_API.G_FALSE
5073 ,p_structure_version_id => l_new_struct_ver_id
5074 ,p_structure_version_name => l_new_struct_ver_name
5075 ,p_structure_version_desc => l_new_struct_ver_desc
5076 ,p_effective_date => l_struc_ver_attr_rec.effective_date
5077 ,p_latest_eff_published_flag => 'Y'
5078 ,p_published_flag => 'Y'
5079 ,p_locked_status_code => 'UNLOCK'
5080 ,p_struct_version_status_code => 'STRUCTURE_PUBLISHED'
5081 ,p_baseline_current_flag => l_current_baseline_flag
5082 ,p_baseline_original_flag => l_original_baseline_flag
5083 ,p_change_reason_code => l_struc_ver_attr_rec.change_reason_code
5084 ,x_pev_structure_id => l_new_pev_structure_id
5085 ,x_return_status => l_return_status
5086 ,x_msg_count => l_msg_count
5087 ,x_msg_data => l_msg_data );
5088
5089
5090 l_msg_count := FND_MSG_PUB.count_msg;
5091 if (l_msg_count > 0) then
5092 x_msg_count := l_msg_count;
5093 if x_msg_count = 1 then
5094 x_msg_data := l_msg_data;
5095 end if;
5096 raise FND_API.G_EXC_ERROR;
5097 end if;
5098
5099 --bug 4019845
5100 /*
5101 --bug 3047602: rollup dates
5102 OPEN get_all_new_childs(l_new_struct_ver_id);
5103 FETCH get_all_new_childs bulk collect into l_task_ver_ids_tbl;
5104 CLOSE get_all_new_childs;
5105
5106 update pa_proj_elem_ver_structure
5107 set status_code = 'STRUCTURE_WORKING',
5108 LOCKED_BY_PERSON_ID = (select locked_by_person_id
5109 from pa_proj_elem_ver_structure
5110 where project_id = l_project_id
5111 and element_version_id = p_structure_version_id),
5112 LOCK_STATUS_CODE = 'LOCKED'
5113 where project_id = l_project_id and element_version_id = l_new_struct_ver_id;
5114
5115 --3755117 for copying mapping
5116 BEGIN
5117 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
5118 p_context => 'PUBLISH_VERSION'
5119 ,p_src_project_id => l_project_id
5120 ,p_dest_project_id => l_project_id
5121 ,p_src_str_version_id => p_structure_version_id
5122 ,p_dest_str_version_id => l_new_struct_ver_id
5123 ,x_return_status => x_return_status
5124 ,x_msg_count => x_msg_count
5125 ,x_msg_data => x_msg_data
5126 );
5127
5128 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5129 RAISE FND_API.G_EXC_ERROR;
5130 END IF;
5131 EXCEPTION
5132 WHEN OTHERS THEN
5133 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5134 p_procedure_name => 'PUBLISH_STRUCTURE',
5135 p_error_text => SUBSTRB('PA_PROJ_STRUC_MAPPING_PUB.COPY_MAPPING:'||SQLERRM,1,240));
5136 RAISE FND_API.G_EXC_ERROR;
5137 END;
5138 */
5139 --end bug 4019845
5140
5141 -- Changes added by skannoji
5142 -- Added code for doosan customer
5143 /* Bug #: 3305199 SMukka */
5144 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
5145 /* src_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
5146 /* dest_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
5147 --bug 4019845
5148 /*
5149 Declare
5150 src_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5151 dest_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5152 prev_pub_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --bug 3847386
5153 Begin
5154 src_versions_tab.extend(1);
5155 dest_versions_tab.extend(1);
5156 src_versions_tab(1) := p_structure_version_id;
5157 dest_versions_tab(1) := l_new_struct_ver_id;
5158 prev_pub_tab.extend(1); --bug 3847386
5159 prev_pub_tab(1) := l_last_pub_str_ver_id; --bug 3847386
5160 -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
5161 --Smukka Bug No. 3474141 Date 03/01/2004
5162 --moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block
5163 BEGIN
5164 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
5165 (
5166 p_source_project_id => l_project_id
5167 ,p_target_project_id => l_project_id
5168 ,p_src_sv_ids_tbl => src_Versions_Tab
5169 ,p_target_sv_ids_tbl => dest_Versions_Tab
5170 ,p_copy_act_from_str_ids_tbl => prev_pub_tab --bug 3847386
5171 ,x_return_status => x_return_status
5172 ,x_msg_count => x_msg_count
5173 ,x_Msg_data => x_msg_data
5174 );
5175 EXCEPTION
5176 WHEN OTHERS THEN
5177 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5178 p_procedure_name => 'PUBLISH_STRUCTURE',
5179 p_error_text => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
5180 RAISE FND_API.G_EXC_ERROR;
5181 END;
5182 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5183 RAISE FND_API.G_EXC_ERROR;
5184 END IF;
5185 End;
5186 -- till here by skannoji
5187 */
5188 --end bug 4019845
5189
5190
5191 /* Removed for bug 3850488.
5192 BEGIN
5193 PA_TASK_ASSIGNMENTS_PVT.Copy_Missing_Unplanned_Asgmts(
5194 p_project_id => l_project_id
5195 ,p_old_structure_version_id => l_last_pub_str_ver_id
5196 ,p_new_structure_version_id => l_new_struct_ver_id
5197 ,x_msg_count => x_msg_count
5198 ,x_msg_data => x_msg_data
5199 ,x_return_status => x_return_status
5200 );
5201 EXCEPTION
5202 WHEN OTHERS THEN
5203 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5204 p_procedure_name => 'PUBLISH_STRUCTURE',
5205 p_error_text => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_missing_unplanned_asgmts:'||SQLERRM,1,240));
5206 RAISE FND_API.G_EXC_ERROR;
5207 END;
5208 If (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5209 RAISE FND_API.G_EXC_ERROR;
5210 END IF;
5211 */
5212
5213 /* --hsiu: no need to rollup since the copied structure version is already rolled-up
5214 IF l_task_ver_ids_tbl.count > 0 THEN
5215 --rollup dates for new published version
5216
5217 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
5218 p_commit => FND_API.G_FALSE,
5219 p_element_versions => l_task_ver_ids_tbl,
5220 x_return_status => l_return_status,
5221 x_msg_count => l_msg_count,
5222 x_msg_data => l_msg_data);
5223
5224 l_msg_count := FND_MSG_PUB.count_msg;
5225 if (l_msg_count > 0) then
5226 x_msg_count := l_msg_count;
5227 if x_msg_count = 1 then
5228 x_msg_data := l_msg_data;
5229 end if;
5230 raise FND_API.G_EXC_ERROR;
5231 end if;
5232 END IF;
5233 --end bug 3047602
5234 */
5235 -- error_msg('before progress report');
5236
5237
5238 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'FINANCIAL') = 'Y') THEN
5239
5240 --bug 4019845
5241 /*
5242 IF (l_financial_type = 'Y') THEN
5243
5244 select start_date, completion_date
5245 into l_proj_start_date, l_proj_completion_date
5246 from pa_projects_all
5247 where project_id = l_project_id;
5248
5249 --dbms_output.put_line('sycn up api');
5250 --Call sync-up API
5251 -- error_msg('import task');
5252
5253 PA_XC_PROJECT_PUB.import_task
5254 ( p_project_id => l_project_id
5255 ,p_task_reference => NULL
5256 ,p_task_name => NULL
5257 ,p_task_start_date => NULL
5258 ,p_task_end_date => NULL
5259 ,p_parent_task_reference => NULL
5260 ,p_task_number => NULL
5261 ,p_wbs_level => NULL
5262 ,p_milestone => NULL
5263 ,p_duration => NULL
5264 ,p_duration_unit => NULL
5265 ,p_early_start_date => NULL
5266 ,p_early_finish_date => NULL
5267 ,p_late_start_date => NULL
5268 ,p_late_finish_date => NULL
5269 ,p_display_seq => NULL
5270 ,p_login_user_name => NULL
5271 ,p_critical_path => NULL
5272 ,p_sub_project_id => NULL
5273 ,p_attribute7 => NULL
5274 ,p_attribute8 => NULL
5275 ,p_attribute9 => NULL
5276 ,p_attribute10 => NULL
5277 ,p_progress_report => NULL
5278 ,p_progress_status => NULL
5279 ,p_progress_comments => NULL
5280 ,p_progress_asof_date => NULL
5281 ,p_predecessors => NULL
5282 ,p_structure_version_id => l_new_struct_ver_id
5283 ,p_calling_mode => 'PUBLISH' );
5284
5285 l_i_msg_count := 0;
5286 -- error_msg('import project');
5287 PA_XC_PROJECT_PUB.import_project
5288 (p_user_id => l_user_id
5289 ,p_commit => 'N'
5290 ,p_debug_mode => p_debug_mode
5291 ,p_project_id => l_project_id
5292 ,p_project_mpx_start_date => fnd_date.date_to_canonical(l_proj_start_date)
5293 ,p_project_mpx_end_date => fnd_date.date_to_canonical(l_proj_completion_date)
5294 ,p_task_mgr_override => NULL
5295 ,p_task_pgs_override => NULL
5296 ,p_process_id => NULL
5297 ,p_language => NULL
5298 ,p_delimiter => NULL
5299 ,p_responsibility_id => p_responsibility_id
5300 ,p_structure_id => NULL
5301 ,p_structure_version_id => l_new_struct_ver_id
5302 ,p_calling_mode => 'PUBLISH'
5303 ,x_msg_count => l_i_msg_count
5304 ,x_msg_data => l_i_msg_data
5305 ,x_return_status => l_i_return_status);
5306
5307
5308 --dbms_output.put_line('import proj: '||l_i_return_status);
5309 --Check for error
5310 -- IF (x_msg_count > 0) THEN
5311 -- FOR i IN 1..x_msg_count LOOP
5312 -- PA_UTILS.ADD_MESSAGE('PA',l_i_msg_data(i));
5313 -- END LOOP;
5314 -- END IF;
5315
5316 l_msg_count := FND_MSG_PUB.count_msg;
5317 if l_msg_count > 0 then
5318 x_msg_count := l_msg_count;
5319 if x_msg_count = 1 then
5320 -- x_msg_data := l_msg_data;
5321 pa_interface_utils_pub.get_messages
5322 (p_encoded => FND_API.G_TRUE,
5323 p_msg_index => 1,
5324 p_msg_count => l_msg_count,
5325 p_msg_data => l_msg_data,
5326 p_data => l_data,
5327 p_msg_index_out => l_msg_index_out);
5328 x_msg_data := l_data;
5329 end if;
5330 raise FND_API.G_EXC_ERROR;
5331 end if;
5332
5333 END IF; --for checking structure type
5334 */
5335 --bug 4019845
5336
5337
5338 /* removed
5339 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'WORKPLAN') = 'Y') THEN
5340 --API for progress report.
5341 */
5342 /* removed
5343 PA_PROGRESS_PUB.CREATE_PROGRESS_FOR_WBS(
5344 p_commit => FND_API.G_FALSE
5345 ,p_project_id => l_project_id
5346 ,p_structure_version_id => l_new_struct_ver_id
5347 ,x_return_status => l_return_status
5348 ,x_msg_count => l_msg_count
5349 ,x_msg_data => l_msg_data
5350 );
5351 */
5352 /* removed
5353 IF (p_debug_mode = 'Y') THEN
5354 pa_debug.debug('progress report api');
5355 END IF;
5356
5357
5358 --Check if there is any error.
5359 l_msg_count := FND_MSG_PUB.count_msg;
5360 IF l_msg_count > 0 THEN
5361 x_msg_count := l_msg_count;
5362 IF x_msg_count = 1 THEN
5363 x_msg_data := l_msg_data;
5364 END IF;
5365 RAISE FND_API.G_EXC_ERROR;
5366 END IF;
5367
5368 END IF;
5369 */
5370
5371 --bug 4019845
5372 /*
5373 --bug 3830932
5374 --moving before copy project dates so that latest structure version will be selected in the API
5375 update pa_proj_elem_ver_structure
5376 set status_code = 'STRUCTURE_PUBLISHED',
5377 LOCKED_BY_PERSON_ID = NULL,
5378 LOCK_STATUS_CODE = 'UNLOCKED'
5379 where project_id = l_project_id and element_version_id = l_new_struct_ver_id;
5380 --end bug 3830932
5381
5382 -- anlee
5383 -- Dates changes
5384 -- IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'WORKPLAN') = 'Y') THEN
5385 IF (l_workplan_type = 'Y') THEN
5386 OPEN get_scheduled_dates(l_project_id, l_new_struct_ver_id);
5387 FETCH get_scheduled_dates INTO l_scheduled_start_date, l_scheduled_finish_date;
5388 CLOSE get_scheduled_dates;
5389
5390 OPEN get_proj_rec_ver_number(l_project_id);
5391 FETCH get_proj_rec_ver_number INTO l_proj_record_ver_number;
5392 CLOSE get_proj_rec_ver_number;
5393
5394 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
5395 p_validate_only => FND_API.G_FALSE
5396 ,p_project_id => l_project_id
5397 ,p_date_type => 'SCHEDULED'
5398 ,p_start_date => l_scheduled_start_date
5399 ,p_finish_date => l_scheduled_finish_date
5400 ,p_record_version_number => l_proj_record_ver_number
5401 ,x_return_status => l_return_status
5402 ,x_msg_count => l_msg_count
5403 ,x_msg_data => l_msg_data );
5404
5405 --Check if there is any error.
5406 l_msg_count := FND_MSG_PUB.count_msg;
5407 IF l_msg_count > 0 THEN
5408 x_msg_count := l_msg_count;
5409 IF x_msg_count = 1 THEN
5410 x_msg_data := l_msg_data;
5411 END IF;
5412 RAISE FND_API.G_EXC_ERROR;
5413 END IF;
5414 END IF;
5415 -- End of changes
5416
5417 -- hsiu
5418 -- project dates changes
5419 -- copy dates to transaction dates if 1, share structure
5420 -- 2, auto task update is enabled
5421 -- IF ((PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'WORKPLAN') = 'Y') AND
5422 -- (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'FINANCIAL') = 'Y')) THEN
5423 IF ((l_workplan_type = 'Y') AND
5424 (l_financial_type = 'Y')) THEN
5425 --select workplan attr
5426 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_proj_element_id) = 'Y') THEN
5427 --Copy to transaction date
5428 PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
5429 p_project_id => l_project_id,
5430 x_return_status => l_return_status,
5431 x_msg_count => l_msg_count,
5432 x_msg_data => l_msg_data
5433 );
5434
5435 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5436 x_msg_count := FND_MSG_PUB.count_msg;
5437 if x_msg_count = 1 then
5438 x_msg_data := l_msg_data;
5439 end if;
5440 raise FND_API.G_EXC_ERROR;
5441 end if;
5442
5443 END IF;
5444 END IF;
5445 -- end of changes
5446 */
5447 --end bug 4019845
5448
5449 --bug 4019845
5450 /*
5451 --hsiu: task status
5452 --push down and rollup
5453 PA_STRUCT_TASK_ROLLUP_PUB.Task_Stat_Pushdown_Rollup(
5454 p_structure_version_id => l_new_struct_ver_id
5455 ,x_return_status => x_return_status
5456 ,x_msg_count => x_msg_count
5457 ,x_msg_data => x_msg_data
5458 );
5459 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5460 RAISE FND_API.G_EXC_ERROR;
5461 END IF;
5462 --end task status changes
5463 */
5464 --end bug 4019845
5465
5466 /* remove
5467 --hsiu: prorate tasks for tasks that have to be deleted peer tasks
5468 l_parent_ver_id := l_parent_tbl.FIRST;
5469 FOR i IN 1..l_parent_tbl.COUNT LOOP
5470 --if it has child then prorate
5471 -- IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_parent_ver_id) = 'N') THEN
5472 OPEN is_summary_elem(l_parent_ver_id);
5473 FETCH is_summary_elem INTO l_dummy;
5474 IF is_summary_elem%FOUND THEN
5475 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
5476 p_task_version_id => l_parent_ver_id
5477 ,x_return_status => x_return_status
5478 ,x_msg_count => x_msg_count
5479 ,x_msg_data => x_msg_data);
5480 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5481 CLOSE is_summary_elem;
5482 RAISE FND_API.G_EXC_ERROR;
5483 END IF;
5484 END IF;
5485 CLOSE is_summary_elem;
5486 -- END IF;
5487 l_parent_ver_id := l_parent_tbl.NEXT(l_parent_ver_id);
5488 END LOOP;
5489 */
5490
5491 /* --moved before copying tasks
5492 --hsiu
5493 --changes for task status
5494 --tasks might be deleted because childs are also deleted when deleting
5495 -- a task
5496 l_del_task_cnt := 0;
5497 LOOP
5498 EXIT when l_del_task_cnt = l_tbd_task_ver_id.count;
5499 l_del_task_cnt := l_del_task_cnt + 1;
5500
5501 OPEN get_tbd_tasks_info(l_tbd_task_ver_id(l_del_task_cnt));
5502 FETCH get_tbd_tasks_info into l_tbd_tasks_info_rec;
5503 IF get_tbd_tasks_info%FOUND THEN
5504 PA_TASK_PVT1.Delete_Task_Ver_wo_val(
5505 p_structure_version_id => l_tbd_tasks_info_rec.parent_structure_version_id
5506 ,p_task_version_id => l_tbd_tasks_info_rec.element_version_id
5507 ,p_record_version_number => l_tbd_tasks_info_rec.record_version_number
5508 ,x_return_status => l_return_status
5509 ,x_msg_count => l_msg_count
5510 ,x_msg_data => l_msg_data
5511 );
5512
5513 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5514 x_msg_count := FND_MSG_PUB.count_msg;
5515 if x_msg_count = 1 then
5516 x_msg_data := l_msg_data;
5517 end if;
5518 raise FND_API.G_EXC_ERROR;
5519 end if;
5520
5521 END IF;
5522 CLOSE get_tbd_tasks_info;
5523 END LOOP;
5524 --end changes for task status
5525 */
5526
5527 --Change the status of the working version to 'STRUCTURE_WORKING'
5528 update PA_PROJ_ELEM_VER_STRUCTURE
5529 set status_code = 'STRUCTURE_WORKING',
5530 record_version_number = nvl(record_version_number,0)+1
5531 where pev_structure_id = l_pev_structure_id;
5532
5533
5534 --bug 4479392
5535 --Update the wbs_flag for the working version as well.
5536 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
5537 p_project_id => l_project_id,
5538 p_structure_version_id => p_structure_version_id,
5539 p_update_wbs_flag => 'Y',
5540 x_return_status => l_return_status,
5541 x_msg_count => l_msg_count,
5542 x_msg_data => l_msg_data
5543 );
5544 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5545 x_msg_count := FND_MSG_PUB.count_msg;
5546 if x_msg_count = 1 then
5547 x_msg_data := l_msg_data;
5548 end if;
5549 raise FND_API.G_EXC_ERROR;
5550 end if;
5551
5552 --end bug 4479392
5553
5554 --bug 3035902
5555 --Change the process flag of the published structure version to Y if
5556 --the working version is set to Y
5557 --Bug No 3450684 SMukka Commented if condition
5558 --IF (PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(l_project_id,
5559 -- p_structure_version_id) = 'Y') THEN
5560 --set the flag for the published version
5561 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
5562 p_project_id => l_project_id,
5563 p_structure_version_id => l_new_struct_ver_id,
5564 p_update_wbs_flag => 'Y',
5565 x_return_status => l_return_status,
5566 x_msg_count => l_msg_count,
5567 x_msg_data => l_msg_data
5568 );
5569 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5570 x_msg_count := FND_MSG_PUB.count_msg;
5571 if x_msg_count = 1 then
5572 x_msg_data := l_msg_data;
5573 end if;
5574 raise FND_API.G_EXC_ERROR;
5575 end if;
5576 --END IF;
5577 --end bug 3035902
5578
5579 --bug 4019845
5580 /*
5581 -- Added this for FP_M changes -- Bhumesh
5582 PA_PROGRESS_PUB.Pull_Summarized_Actuals (
5583 P_Project_ID => l_Project_ID
5584 ,p_Calling_Mode => 'PUBLISH'
5585 ,x_return_status => x_return_status
5586 ,x_msg_count => x_msg_count
5587 ,x_msg_data => x_msg_data
5588 );
5589
5590 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
5591 x_msg_count := FND_MSG_PUB.count_msg;
5592 if x_msg_count = 1 then
5593 x_msg_data := l_msg_data;
5594 end if;
5595 raise FND_API.G_EXC_ERROR;
5596 end if;
5597
5598 IF p_pub_prog_flag = 'Y' THEN
5599 PA_PROGRESS_PUB.Publish_Progress(
5600 p_project_id => l_Project_ID
5601 --,p_structure_version_id => p_structure_version_id -- Bug 3839288
5602 ,p_pub_structure_version_id => l_new_struct_ver_id -- Bug 3839288
5603 ,x_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag -- added by rtarway for BUG 3951024
5604 ,x_as_of_date => l_as_of_date -- Bug 3839288
5605 ,x_task_weight_basis_code => l_task_weight_basis_code -- Bug 3839288
5606 ,x_return_status => x_return_status
5607 ,x_msg_count => x_msg_count
5608 ,x_msg_data => x_msg_data
5609 );
5610
5611 if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
5612 x_msg_count := FND_MSG_PUB.count_msg;
5613 if x_msg_count = 1 then
5614 x_msg_data := l_msg_data;
5615 end if;
5616 raise FND_API.G_EXC_ERROR;
5617 end if;
5618
5619 END IF;
5620 */
5621 --end bug 4019845
5622
5623 -- End
5624
5625 IF l_debug_mode = 'Y' THEN
5626 pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'Before opening sel_other_structure_ver p_structure_version_id='||p_structure_version_id, 3);
5627 END IF;
5628
5629 --hsiu
5630 --changes for advanced structure
5631 --Delete other working structures after publishing
5632 OPEN sel_other_structure_ver(p_structure_version_id);
5633 LOOP
5634 FETCH sel_other_structure_ver into l_del_struc_ver_id, l_del_struc_ver_rvn;
5635 EXIT WHEN sel_other_structure_ver%NOTFOUND;
5636
5637 IF l_debug_mode = 'Y' THEN
5638 pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'Before calling PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val', 3);
5639 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);
5640 END IF;
5641
5642 PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val(
5643 p_structure_version_id => l_del_struc_ver_id
5644 ,p_record_version_number => l_del_struc_ver_rvn
5645 ,x_return_status => l_return_status
5646 ,x_msg_count => l_msg_count
5647 ,x_msg_data => l_msg_data
5648 );
5649
5650 --Check if there is any error.
5651 l_msg_count := FND_MSG_PUB.count_msg;
5652
5653 IF l_debug_mode = 'Y' THEN
5654 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);
5655 END IF;
5656
5657 IF l_msg_count > 0 OR l_return_status ='E' THEN
5658 x_msg_count := l_msg_count;
5659 IF x_msg_count = 1 THEN
5660 x_msg_data := l_msg_data;
5661 END IF;
5662 CLOSE sel_other_structure_ver;
5663 RAISE FND_API.G_EXC_ERROR;
5664 END IF;
5665
5666 END LOOP;
5667 CLOSE sel_other_structure_ver;
5668 --end changes
5669
5670
5671 x_published_struct_ver_id := l_new_struct_ver_id;
5672
5673 --bug 3010538
5674 IF (p_calling_module = 'SELF_SERVICE') THEN
5675 --called separately if calling from AMG
5676 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP(
5677 p_calling_context => 'PUBLISH',
5678 p_project_id => l_project_id,
5679 -- p_structure_version_id => l_last_pub_str_ver_id, --SMukka Commented
5680 p_structure_version_id => p_structure_version_id, --Smukka Added line
5681 p_pub_struc_ver_id => l_new_struct_ver_id,
5682 p_pub_prog_flag => p_pub_prog_flag,
5683 x_return_status => l_return_status,
5684 x_msg_count => l_msg_count,
5685 x_msg_data => l_msg_data
5686 );
5687
5688 --Check if there is any error.
5689 l_msg_count := FND_MSG_PUB.count_msg;
5690 IF l_msg_count > 0 THEN
5691 x_msg_count := l_msg_count;
5692 IF x_msg_count = 1 THEN
5693 x_msg_data := l_msg_data;
5694 END IF;
5695 RAISE FND_API.G_EXC_ERROR;
5696 END IF;
5697 END IF;
5698 --end bug 3010538
5699
5700 --bug 4019845
5701 /*
5702 -- BUg 3627315 Issue 8 : Added following call
5703 --The follwoing api is called to push progress data to PJI for the new
5704 --structure version.
5705 BEGIN
5706 --bug 3822112
5707 if l_share_flag = 'Y'
5708 then
5709 l_copy_actuals_flag := 'N';
5710 end if;
5711 PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC(
5712 p_project_id => l_Project_ID
5713 ,p_src_str_ver_id => p_structure_version_id
5714 ,p_dst_str_ver_id => l_new_struct_ver_id
5715 ,p_pub_wp_with_prog_flag => p_pub_prog_flag
5716 ,p_calling_context => 'PUBLISH'
5717 ,p_copy_actuals_flag => l_copy_actuals_flag --bug 3822112
5718 ,p_last_pub_str_version_id => l_last_pub_str_ver_id -- Modified rakragha 28-JUL-2004
5719 ,x_return_status => x_return_status
5720 ,x_msg_count => x_msg_count
5721 ,x_msg_data => x_msg_data
5722 );
5723 EXCEPTION
5724 WHEN OTHERS THEN
5725 fnd_msg_pub.add_exc_msg(p_pkg_name =>
5726 'PA_PROJECT_STRUCTURE_PVT1',
5727 p_procedure_name => 'publish_structure',
5728 p_error_text => SUBSTRB('Call PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC:'||SQLERRM,1,120));
5729 RAISE FND_API.G_EXC_ERROR;
5730 END;
5731
5732 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5733 x_msg_count := FND_MSG_PUB.count_msg;
5734 IF x_msg_count = 1 THEN
5735 x_msg_data := l_msg_data;
5736 END IF;
5737 raise FND_API.G_EXC_ERROR;
5738 END IF;
5739 */
5740 --bug 4019845
5741
5742
5743 --bug 4019845
5744 /*
5745 -- Bug 3839288 Begin
5746 IF p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL
5747 THEN
5748 BEGIN
5749
5750 pa_progress_pub.populate_pji_tab_for_plan(
5751 p_init_msg_list => FND_API.G_FALSE
5752 ,p_commit => FND_API.G_FALSE
5753 --,p_calling_module => p_calling_module
5754 ,p_project_id => l_Project_ID
5755 ,p_structure_version_id => l_new_struct_ver_id
5756 ,p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(l_Project_ID)
5757 ,p_structure_type => 'WORKPLAN'
5758 ,x_return_status => x_return_status
5759 ,x_msg_count => x_msg_count
5760 ,x_msg_data => x_msg_data
5761 );
5762 EXCEPTION
5763 WHEN OTHERS THEN
5764 fnd_msg_pub.add_exc_msg(p_pkg_name =>
5765 'PA_PROJECT_STRUCTURE_PVT1',
5766 p_procedure_name => 'publish_structure',
5767 p_error_text => SUBSTRB('Call pa_progress_pub.populate_pji_tab_for_plan:'||SQLERRM,1,120));
5768 RAISE FND_API.G_EXC_ERROR;
5769 END;
5770
5771 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5772 x_msg_count := FND_MSG_PUB.count_msg;
5773 IF x_msg_count = 1 THEN
5774 x_msg_data := l_msg_data;
5775 END IF;
5776 raise FND_API.G_EXC_ERROR;
5777 END IF;
5778
5779 BEGIN
5780 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
5781 p_init_msg_list => FND_API.G_FALSE
5782 --,p_calling_module => p_calling_module
5783 ,p_commit => FND_API.G_FALSE
5784 --,p_validate_only => p_validate_only
5785 ,p_project_id => l_Project_ID
5786 ,p_structure_version_id => l_new_struct_ver_id
5787 ,p_as_of_date => l_as_of_date
5788 ,p_wp_rollup_method => l_task_weight_basis_code
5789 ,p_rollup_entire_wbs => 'Y'
5790 ,p_working_wp_prog_flag => 'N'
5791 ,p_upd_new_elem_ver_id_flag => l_upd_new_elem_ver_id_flag --rtarway, 3951024
5792 ,x_return_status => x_return_status
5793 ,x_msg_count => x_msg_count
5794 ,x_msg_data => x_msg_data);
5795 EXCEPTION
5796 WHEN OTHERS THEN
5797 fnd_msg_pub.add_exc_msg(p_pkg_name =>
5798 'PA_PROJECT_STRUCTURE_PVT1',
5799 p_procedure_name => 'publish_structure',
5800 p_error_text => SUBSTRB('Call PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT:'||SQLERRM,1,120));
5801 RAISE FND_API.G_EXC_ERROR;
5802 END;
5803
5804
5805 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5806 x_msg_count := FND_MSG_PUB.count_msg;
5807 IF x_msg_count = 1 THEN
5808 x_msg_data := l_msg_data;
5809 END IF;
5810 raise FND_API.G_EXC_ERROR;
5811 END IF;
5812
5813 END IF;
5814 -- Bug 3839288 End
5815 */
5816 --end bug 4019845
5817
5818 --bug 4019845
5819 /*
5820 IF p_pub_prog_flag = 'Y'
5821 THEN
5822 --bug 3851528
5823 BEGIN
5824 PA_PROGRESS_UTILS.clear_prog_outdated_flag(
5825 p_project_id => l_Project_ID
5826 ,p_structure_version_id => l_new_struct_ver_id
5827 ,p_object_id => null
5828 ,p_object_type => null
5829 ,x_return_status => x_return_status
5830 ,x_msg_count => x_msg_count
5831 ,x_msg_data => x_msg_data);
5832 EXCEPTION
5833 WHEN OTHERS THEN
5834 fnd_msg_pub.add_exc_msg(p_pkg_name =>
5835 'PA_PROJECT_STRUCTURE_PVT1',
5836 p_procedure_name => 'publish_structure',
5837 p_error_text => SUBSTRB('Call PA_PROGRESS_UTILS.clear_prog_outdated_flag:'||SQLERRM,1,120));
5838 RAISE FND_API.G_EXC_ERROR;
5839 END;
5840
5841
5842 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5843 x_msg_count := FND_MSG_PUB.count_msg;
5844 IF x_msg_count = 1 THEN
5845 x_msg_data := l_msg_data;
5846 END IF;
5847 raise FND_API.G_EXC_ERROR;
5848 END IF;
5849 --bug 3851528
5850
5851 END IF; -- p_pub_prog_flag = 'Y' THEN
5852 */
5853 --end bug 4019845
5854
5855 -- Start Bug : 4096218
5856 IF p_calling_module = 'AMG' THEN
5857 /* 4096218 Commenting , as we have changed the global varray name to G_DELETED_TASK_IDS_FROM_OP
5858 and now we are expected to pass the varray of 'to be deleted' task projelementids ,
5859 not version ids.
5860 PA_PROJECT_PUB.G_DELETED_TASK_VER_IDS_FROM_OP := l_tbd_task_ver_id;
5861 */
5862 PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP := l_tbd_task_id;
5863 END IF;
5864 -- End Bug : 4096218
5865
5866 x_return_status := FND_API.G_RET_STS_SUCCESS;
5867
5868 if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5869 x_msg_count := FND_MSG_PUB.count_msg;
5870 if x_msg_count = 1 then
5871 x_msg_data := l_msg_data;
5872 end if;
5873 raise FND_API.G_EXC_ERROR;
5874 end if;
5875
5876 IF (p_debug_mode = 'Y') THEN
5877 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE end');
5878 END IF;
5879
5880 EXCEPTION
5881 when FND_API.G_EXC_ERROR then
5882 if p_commit = FND_API.G_TRUE then
5883 rollback to publish_structure_pvt;
5884 else
5885 --need to rollback because generate error page performs a commit
5886 rollback;
5887 end if;
5888 --get errors
5889 FOR i IN 1..FND_MSG_PUB.COUNT_MSG LOOP
5890 FND_MSG_PUB.GET(p_encoded=>'F',
5891 p_data=>l_messages(i),
5892 p_msg_index_out => l_msg_index_out);
5893 END LOOP;
5894
5895 --create error clob
5896 PA_PROJECT_STRUCTURE_PVT1.Generate_Error_Page(
5897 p_structure_version_id => p_structure_version_id,
5898 p_error_tbl => l_messages,
5899 x_page_content_id => l_page_content_id,
5900 x_return_status => l_return_status,
5901 x_msg_count => l_msg_count,
5902 x_msg_data => l_msg_data
5903 );
5904
5905 x_msg_count := FND_MSG_PUB.count_msg;
5906 x_return_status := FND_API.G_RET_STS_ERROR;
5907 when FND_API.G_EXC_UNEXPECTED_ERROR then
5908 if p_commit = FND_API.G_TRUE then
5909 rollback to publish_structure_pvt;
5910 end if;
5911 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5912 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5913 p_procedure_name => 'PUBLISH_STRUCTURE',
5914 p_error_text => SUBSTRB(SQLERRM,1,240));
5915 when OTHERS then
5916 if p_commit = FND_API.G_TRUE then
5917 rollback to publish_structure_pvt;
5918 end if;
5919 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5920 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
5921 p_procedure_name => 'PUBLISH_STRUCTURE',
5922 p_error_text => SUBSTRB(SQLERRM,1,240));
5923 raise;
5924 END Publish_Structure;
5925
5926
5927 -- API name : UPDATE_LATEST_PUB_LINKS
5928 -- Type : Private Procedure
5929 -- Pre-reqs : None
5930 -- Return Value : N/A
5931 -- Parameters
5932 -- p_api_version IN NUMBER := 1.0
5933 -- p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
5934 -- p_commit IN VARCHAR2 := FND_API.G_FALSE
5935 -- p_validate_only IN VARCHAR2 := FND_API.G_TRUE
5936 -- p_validation_level IN VARCHAR2 := 100
5937 -- p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
5938 -- p_debug_mode IN VARCHAR2 := 'N'
5939 -- p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5940 -- p_orig_project_id IN NUMBER
5941 -- p_orig_structure_id IN NUMBER
5942 -- p_orig_struc_ver_id IN NUMBER
5943 -- p_orig_task_ver_id IN NUMBER
5944 -- p_new_project_id IN NUMBER
5945 -- p_new_structure_id IN NUMBER
5946 -- p_new_struc_ver_id IN NUMBER
5947 -- p_new_task_ver_id IN NUMBER
5948 -- x_return_status OUT VARCHAR2
5949 -- x_msg_count OUT NUMBER
5950 -- x_msg_data OUT VARCHAR2
5951 --
5952 -- History
5953 --
5954 -- 25-JUN-01 HSIU -Created
5955 --
5956 --
5957
5958
5959 procedure UPDATE_LATEST_PUB_LINKS
5960 (
5961 p_api_version IN NUMBER := 1.0
5962 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
5963 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
5964 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
5965 ,p_validation_level IN VARCHAR2 := 100
5966 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
5967 ,p_debug_mode IN VARCHAR2 := 'N'
5968 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5969 ,p_orig_project_id IN NUMBER
5970 ,p_orig_structure_id IN NUMBER
5971 ,p_orig_struc_ver_id IN NUMBER
5972 ,p_orig_task_ver_id IN NUMBER
5973 ,p_new_project_id IN NUMBER
5974 ,p_new_structure_id IN NUMBER
5975 ,p_new_struc_ver_id IN NUMBER
5976 ,p_new_task_ver_id IN NUMBER
5977 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5978 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5979 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5980 )
5981 IS
5982 cursor get_from_id(c_element_version_id NUMBER) IS
5983 select object_relationship_id, object_id_from1 object_id_from,
5984 object_type_from, record_version_number
5985 from pa_object_relationships
5986 where relationship_type = 'L'
5987 and object_id_to1 = c_element_version_id
5988 and object_type_to IN ('PA_TASKS','PA_STRUCTURES');
5989 l_from_object_info get_from_id%ROWTYPE;
5990
5991 cursor get_task_version_info(c_task_version_id NUMBER) IS
5992 select v1.project_id project_id, v2.proj_element_id structure_id,
5993 v1.parent_structure_version_id structure_version_id,
5994 v1.element_version_id task_version_id
5995 from pa_proj_element_versions v1,
5996 pa_proj_element_versions v2
5997 where v1.element_version_id = c_task_version_id
5998 and v1.parent_structure_version_id = v2.element_version_id;
5999 l_info_task_ver_rec get_task_version_info%ROWTYPE;
6000
6001 cursor get_structure_version_info(c_structure_version_id NUMBER) IS
6002 select v1.project_id project_id, v1.proj_element_id structure_id,
6003 v1.element_version_id structure_version_id
6004 from pa_proj_element_versions v1
6005 where v1.element_version_id = c_structure_version_id;
6006 l_info_struc_ver_rec get_structure_version_info%ROWTYPE;
6007
6008 l_return_status VARCHAR2(1);
6009 l_msg_count NUMBER;
6010 l_msg_data VARCHAR2(250);
6011 l_data VARCHAR2(250);
6012 l_msg_index_out NUMBER;
6013 l_orig_element_version_id NUMBER;
6014
6015 l_object_type VARCHAR2(30);
6016
6017 cursor get_latest_struc_ver(c_struc_ver_id NUMBER) IS
6018 select pevs.element_version_id
6019 from pa_proj_element_versions pev,
6020 pa_proj_elem_ver_structure pevs
6021 where pev.element_version_id = c_struc_ver_id
6022 and pev.project_id = pevs.project_id
6023 and pev.proj_element_id = pevs.proj_element_id
6024 and pevs.latest_eff_published_flag = 'Y';
6025
6026 cursor get_latest_task_ver(c_task_ver_id NUMBER) IS
6027 select pev2.element_version_id task_version_id,
6028 pev2.parent_structure_version_id parent_structure_version_id
6029 from pa_proj_element_versions pev,
6030 pa_proj_element_versions pev1,
6031 pa_proj_elem_ver_structure pevs,
6032 pa_proj_element_versions pev2
6033 where pev.element_version_id = c_task_ver_id
6034 and pev.parent_structure_version_id = pev1.element_version_id
6035 and pev1.project_id = pevs.project_id
6036 and pev1.proj_element_id = pevs.proj_element_id
6037 and pevs.latest_eff_published_flag = 'Y'
6038 and pev.proj_element_id = pev2.proj_element_id
6039 and pev.project_id = pev2.project_id
6040 and pev2.parent_structure_version_id = pevs.element_version_id;
6041
6042 cursor can_update(c_element_version_id NUMBER) IS
6043 select '1'
6044 from pa_proj_elem_ver_structure pevs,
6045 pa_proj_element_versions pev
6046 where pev.element_version_id = c_element_version_id
6047 and pev.parent_structure_version_id = pevs.element_version_id
6048 and pev.project_id = pevs.project_id
6049 and pevs.status_code IN ('STRUCTURE_WORKING', 'STRUCTURE_REJECTED');
6050 l_dummy VARCHAR2(1);
6051
6052 l_latest_elem_ver NUMBER;
6053 l_latest_parent_struc_ver NUMBER;
6054
6055 BEGIN
6056 IF (p_debug_mode = 'Y') THEN
6057 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS begin');
6058 END IF;
6059
6060 IF (p_commit = FND_API.G_TRUE) THEN
6061 savepoint update_latest_pub_links_pvt;
6062 END IF;
6063
6064 IF p_orig_task_ver_id IS NULL THEN
6065 l_object_type := 'PA_STRUCTURES';
6066 l_orig_element_version_id := p_orig_struc_ver_id;
6067 ELSE
6068 l_object_type := 'PA_TASKS';
6069 l_orig_element_version_id := p_orig_task_ver_id;
6070 END IF;
6071
6072 -- error_msg('in update latest pub links');
6073 --Search for the element version in the latest published version
6074 -- that has a link point to it, and corresponds to the original
6075 -- element.
6076 IF (l_object_type = 'PA_STRUCTURES') THEN
6077 --Get the published element
6078 --dbms_output.put_line('b, Open get_latest_struc_ver');
6079 OPEN get_latest_struc_ver(l_orig_element_version_id);
6080 FETCH get_latest_struc_ver INTO l_latest_elem_ver;
6081 IF get_latest_struc_ver%NOTFOUND THEN
6082 --no publish version. exit;
6083 IF (p_debug_mode = 'Y') THEN
6084 pa_debug.debug('No latest published version found');
6085 END IF;
6086 --dbms_output.put_line('b, Close get_latest_struc_ver');
6087 CLOSE get_latest_struc_ver;
6088 x_return_status := FND_API.G_RET_STS_SUCCESS;
6089 return;
6090 END IF;
6091 l_latest_parent_struc_ver := l_latest_elem_ver;
6092 --dbms_output.put_line('b, Close get_latest_struc_ver');
6093 CLOSE get_latest_struc_ver;
6094 ELSIF (l_object_type = 'PA_TASKS') THEN
6095 --dbms_output.put_line('b, Open get_latest_task_ver');
6096 OPEN get_latest_task_ver(l_orig_element_version_id);
6097 FETCH get_latest_task_ver INTO l_latest_elem_ver,
6098 l_latest_parent_struc_ver;
6099 IF get_latest_task_ver%NOTFOUND THEN
6100 --no publish version. exit;
6101 IF (p_debug_mode = 'Y') THEN
6102 pa_debug.debug('No latest published version found');
6103 END IF;
6104 --dbms_output.put_line('b, Close get_latest_task_ver');
6105 CLOSE get_latest_task_ver;
6106 x_return_status := FND_API.G_RET_STS_SUCCESS;
6107 return;
6108 END IF;
6109 --dbms_output.put_line('b, Close get_latest_task_ver');
6110 CLOSE get_latest_task_ver;
6111 END IF;
6112
6113 --For the element, find all the element versions that links to
6114 -- the publish version which belongs to a working version.
6115
6116 --Search for incoming links for the latest pub element
6117 --dbms_output.put_line('b, Open get_from_id');
6118 OPEN get_from_id(l_latest_elem_ver);
6119 LOOP
6120 IF (p_debug_mode = 'Y') THEN
6121 pa_debug.debug('getting incoming links');
6122 END IF;
6123 FETCH get_from_id INTO l_from_object_info;
6124 EXIT WHEN get_from_id%NOTFOUND;
6125
6126 --dbms_output.put_line('b, Open can_update');
6127 OPEN can_update(l_from_object_info.object_id_from);
6128 FETCH can_update INTO l_dummy;
6129 IF (can_update%FOUND) THEN
6130 --dbms_output.put_line('can update found');
6131 --the from object is a working/rejected version. Need to update
6132 IF (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
6133
6134 --dbms_output.put_line('b, Open get_structure_version_info');
6135 OPEN get_structure_version_info(l_from_object_info.object_id_from);
6136 FETCH get_structure_version_info INTO l_info_struc_ver_rec;
6137 PA_RELATIONSHIP_PVT.Update_Relationship(
6138 p_init_msg_list => FND_API.G_FALSE
6139 ,p_commit => FND_API.G_FALSE
6140 ,p_debug_mode => p_debug_mode
6141 ,p_object_relationship_id => l_from_object_info.object_relationship_id
6142 ,p_project_id_from => l_info_struc_ver_rec.project_id
6143 ,p_structure_id_from => l_info_struc_ver_rec.structure_id
6144 ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
6145 ,p_task_version_id_from => NULL
6146 ,p_project_id_to => p_new_project_id
6147 ,p_structure_id_to => p_new_structure_id
6148 ,p_structure_version_id_to => p_new_struc_ver_id
6149 ,p_task_version_id_to => p_new_task_ver_id
6150 ,p_relationship_type => 'L'
6151 ,p_relationship_subtype => 'READ_WRITE'
6152 ,p_record_version_number => l_from_object_info.record_version_number
6153 ,x_return_status => l_return_status
6154 ,x_msg_count => l_msg_count
6155 ,x_msg_data => l_msg_data
6156 );
6157 --dbms_output.put_line('b, Close get_structure_version_info');
6158 CLOSE get_structure_version_info;
6159
6160 ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
6161 --dbms_output.put_line('b, Open get_task_version_info');
6162 OPEN get_task_version_info(l_from_object_info.object_id_from);
6163 FETCH get_task_version_info INTO l_info_task_ver_rec;
6164 PA_RELATIONSHIP_PVT.Update_Relationship(
6165 p_init_msg_list => FND_API.G_FALSE
6166 ,p_commit => FND_API.G_FALSE
6167 ,p_debug_mode => p_debug_mode
6168 ,p_object_relationship_id => l_from_object_info.object_relationship_id
6169 ,p_project_id_from => l_info_task_ver_rec.project_id
6170 ,p_structure_id_from => l_info_task_ver_rec.structure_id
6171 ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
6172 ,p_task_version_id_from => l_info_task_ver_rec.task_version_id
6173 ,p_project_id_to => p_new_project_id
6174 ,p_structure_id_to => p_new_structure_id
6175 ,p_structure_version_id_to => p_new_struc_ver_id
6176 ,p_task_version_id_to => p_new_task_ver_id
6177 ,p_relationship_type => 'L'
6178 ,p_relationship_subtype => 'READ_WRITE'
6179 ,p_record_version_number => l_from_object_info.record_version_number
6180 ,x_return_status => l_return_status
6181 ,x_msg_count => l_msg_count
6182 ,x_msg_data => l_msg_data
6183 );
6184 --dbms_output.put_line('b, Close get_task_version_info');
6185 CLOSE get_task_version_info;
6186
6187 END IF;
6188 END IF;
6189 --dbms_output.put_line('b, Close can_update');
6190 CLOSE can_update;
6191 END LOOP;
6192 --dbms_output.put_line('b, Close get_from_id');
6193 CLOSE get_from_id;
6194
6195
6196 l_msg_count := FND_MSG_PUB.count_msg;
6197 if (l_msg_count > 0) then
6198 x_msg_count := l_msg_count;
6199 if x_msg_count = 1 then
6200 x_msg_data := l_msg_data;
6201 end if;
6202 raise FND_API.G_EXC_ERROR;
6203 end if;
6204
6205 EXCEPTION
6206 when FND_API.G_EXC_ERROR then
6207 if p_commit = FND_API.G_TRUE then
6208 rollback to update_latest_pub_links_pvt;
6209 end if;
6210 x_msg_count := FND_MSG_PUB.count_msg;
6211 x_return_status := FND_API.G_RET_STS_ERROR;
6212 when FND_API.G_EXC_UNEXPECTED_ERROR then
6213 if p_commit = FND_API.G_TRUE then
6214 rollback to update_latest_pub_links_pvt;
6215 end if;
6216 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6217 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
6218 p_procedure_name => 'UPDATE_LATEST_PUB_LINKS',
6219 p_error_text => SUBSTRB(SQLERRM,1,240));
6220 when OTHERS then
6221 if p_commit = FND_API.G_TRUE then
6222 rollback to update_latest_pub_links_pvt;
6223 end if;
6224 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6225 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
6226 p_procedure_name => 'UPDATE_LATEST_PUB_LINKS',
6227 p_error_text => SUBSTRB(SQLERRM,1,240));
6228 raise;
6229 END UPDATE_LATEST_PUB_LINKS;
6230
6231
6232 PROCEDURE COPY_STRUCTURE_VERSION
6233 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
6234 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
6235 ,p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL
6236 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
6237 ,p_debug_mode IN VARCHAR2 := 'N'
6238 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
6239 ,p_structure_version_id IN NUMBER
6240 ,p_new_struct_ver_name IN VARCHAR2
6241 ,p_new_struct_ver_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6242 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6243 ,x_new_struct_ver_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6244 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6245 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6246 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
6247 IS
6248 l_new_struct_ver_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
6249 l_return_status VARCHAR2(1);
6250 l_msg_count NUMBER;
6251 l_msg_data VARCHAR2(250);
6252 l_pev_structure_id NUMBER;
6253
6254 CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
6255 IS
6256 SELECT *
6257 FROM PA_PROJ_ELEMENT_VERSIONS
6258 WHERE element_version_id = c_structure_version_id;
6259
6260 l_structure_ver_rec l_get_structure_ver_csr%ROWTYPE;
6261 l_structure_ver_to_rec l_get_structure_ver_csr%ROWTYPE;
6262
6263 CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
6264 IS
6265 SELECT a.*
6266 FROM PA_PROJ_ELEM_VER_STRUCTURE a,
6267 PA_PROJ_ELEMENT_VERSIONS b
6268 WHERE b.element_version_id = c_structure_version_id
6269 AND b.project_id = a.project_id
6270 AND b.element_version_id = a.project_id;
6271
6272 l_structure_ver_attr_rec l_get_structure_ver_attr_csr%ROWTYPE;
6273
6274 CURSOR l_get_task_versions_csr(c_structure_version_id NUMBER)
6275 IS
6276 SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
6277 b.object_id_from1 parent_element_version_id,
6278 a.TASK_UNPUB_VER_STATUS_CODE
6279 FROM PA_PROJ_ELEMENT_VERSIONS a,
6280 PA_OBJECT_RELATIONSHIPS b
6281 WHERE a.object_type = 'PA_TASKS'
6282 AND a.parent_structure_version_id = c_structure_version_id
6283 AND a.element_version_id = b.object_id_to1
6284 AND b.relationship_type = 'S'
6285 AND b.object_type_from in ('PA_STRUCTURES','PA_TASKS') -- Bug 6429275
6286 AND b.object_type_to = 'PA_TASKS'
6287 ORDER BY a.display_sequence;
6288
6289 l_task_versions_rec l_get_task_versions_csr%ROWTYPE;
6290 l_ref_task_ver_id NUMBER;
6291 l_peer_or_sub VARCHAR2(10);
6292
6293 CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
6294 IS
6295 SELECT a.*
6296 FROM PA_PROJ_ELEM_VER_SCHEDULE a,
6297 PA_PROJ_ELEMENT_VERSIONS b
6298 WHERE b.element_version_id = c_element_version_id
6299 AND b.project_id = a.project_id
6300 AND b.element_version_id = a.element_version_id;
6301
6302 l_ver_schedule_attr_rec l_get_ver_schedule_attr_csr%ROWTYPE;
6303
6304 TYPE reference_tasks IS TABLE OF NUMBER
6305 INDEX BY BINARY_INTEGER;
6306
6307 --Bug 2189657
6308 --Added for linking tasks with no display sequence.
6309 Type T_EquivElemVerTable IS TABLE OF NUMBER
6310 Index by BINARY_INTEGER;
6311 t_equiv_elem_ver_id T_EquivElemVerTable;
6312 --Bug 2189657 end;
6313
6314
6315 -- This table stores reference task version IDs for a particular wbs
6316 -- level. This provides a lookup to find the last task version
6317 -- at that level.
6318 l_outline_task_ref reference_tasks;
6319
6320 l_last_wbs_level NUMBER;
6321 l_task_version_id NUMBER;
6322 l_pev_schedule_id NUMBER;
6323
6324 CURSOR l_get_structure_type_csr(c_structure_version_id NUMBER)
6325 IS
6326 SELECT pst.structure_type_class_code
6327 FROM PA_STRUCTURE_TYPES pst,
6328 PA_PROJ_ELEMENT_VERSIONS ppev,
6329 PA_PROJ_STRUCTURE_TYPES ppst
6330 WHERE ppev.element_version_id = c_structure_version_id
6331 AND ppev.proj_element_id = ppst.proj_element_id
6332 AND ppst.structure_type_id = pst.structure_type_id;
6333
6334 l_structure_type PA_STRUCTURE_TYPES.structure_type%TYPE;
6335
6336 CURSOR l_check_working_versions_csr(c_structure_version_id NUMBER)
6337 IS
6338 SELECT 'Y'
6339 FROM PA_PROJ_ELEMENT_VERSIONS ppev
6340 WHERE ppev.element_version_id = c_structure_version_id
6341 AND EXISTS
6342 (SELECT 'Y'
6343 FROM PA_PROJ_ELEMENT_VERSIONS ppev2,
6344 PA_PROJ_ELEM_VER_STRUCTURE ppevs
6345 WHERE ppev2.proj_element_id = ppev.proj_element_id
6346 AND ppev2.project_id = ppev.project_id
6347 AND ppevs.project_id = ppev2.project_id
6348 AND ppevs.element_version_id = ppev2.element_version_id
6349 AND ppevs.status_code <> 'STRUCTURE_PUBLISHED');
6350
6351 l_dummy VARCHAR2(1);
6352
6353 cursor get_to_id(c_element_version_id NUMBER) IS
6354 select object_relationship_id, object_id_to1 object_id_to,
6355 object_type_to, record_version_number
6356 from pa_object_relationships
6357 where relationship_type = 'L'
6358 and object_id_from1 = c_element_version_id
6359 and object_type_from IN ('PA_TASKS','PA_STRUCTURES');
6360 l_to_object_info get_to_id%ROWTYPE;
6361
6362 cursor get_task_version_info(c_task_version_id NUMBER) IS
6363 select v1.project_id project_id, v2.proj_element_id structure_id,
6364 v1.parent_structure_version_id structure_version_id,
6365 v1.element_version_id task_version_id
6366 from pa_proj_element_versions v1,
6367 pa_proj_element_versions v2
6368 where v1.element_version_id = c_task_version_id
6369 and v1.parent_structure_version_id = v2.element_version_id;
6370 l_info_task_ver_rec get_task_version_info%ROWTYPE;
6371
6372 l_new_obj_rel_id PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
6373 l_structure_type1 PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
6374
6375 --hsiu
6376 --added for task weighting
6377 CURSOR get_cur_task_ver_weighting(c_ver_id NUMBER) IS
6378 select WEIGHTING_PERCENTAGE
6379 from pa_object_relationships
6380 where object_id_to1 = c_ver_id
6381 and object_type_to = 'PA_TASKS'
6382 and relationship_type = 'S';
6383 l_weighting NUMBER(17,2);
6384
6385 --end task weighting changes
6386
6387 X_Row_id VARCHAR2(255);
6388 BEGIN
6389
6390 pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION');
6391
6392 IF (p_debug_mode = 'Y') THEN
6393 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION begin');
6394 END IF;
6395
6396 IF (p_commit = FND_API.G_TRUE) THEN
6397 savepoint copy_structure_version_pvt;
6398 END IF;
6399
6400 -- Get structure version info
6401 OPEN l_get_structure_ver_csr(p_structure_version_id);
6402 FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
6403 CLOSE l_get_structure_ver_csr;
6404
6405 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
6406 ( p_validate_only => p_validate_only
6407 ,p_structure_id => l_structure_ver_rec.proj_element_id
6408 ,p_attribute_category => l_structure_ver_rec.attribute_category
6409 ,p_attribute1 => l_structure_ver_rec.attribute1
6410 ,p_attribute2 => l_structure_ver_rec.attribute2
6411 ,p_attribute3 => l_structure_ver_rec.attribute3
6412 ,p_attribute4 => l_structure_ver_rec.attribute4
6413 ,p_attribute5 => l_structure_ver_rec.attribute5
6414 ,p_attribute6 => l_structure_ver_rec.attribute6
6415 ,p_attribute7 => l_structure_ver_rec.attribute7
6416 ,p_attribute8 => l_structure_ver_rec.attribute8
6417 ,p_attribute9 => l_structure_ver_rec.attribute9
6418 ,p_attribute10 => l_structure_ver_rec.attribute10
6419 ,p_attribute11 => l_structure_ver_rec.attribute11
6420 ,p_attribute12 => l_structure_ver_rec.attribute12
6421 ,p_attribute13 => l_structure_ver_rec.attribute13
6422 ,p_attribute14 => l_structure_ver_rec.attribute14
6423 ,p_attribute15 => l_structure_ver_rec.attribute15
6424 ,x_structure_version_id => l_new_struct_ver_id
6425 ,x_return_status => l_return_status
6426 ,x_msg_count => l_msg_count
6427 ,x_msg_data => l_msg_data );
6428
6429 If (p_debug_mode = 'Y') THEN
6430 pa_debug.debug('Create Structure Version return status: ' || l_return_status);
6431 pa_debug.debug('l_new_struct_ver_id: ' || l_new_struct_ver_id);
6432 END IF;
6433
6434
6435 --Check if there is any error.
6436 l_msg_count := FND_MSG_PUB.count_msg;
6437 IF l_msg_count > 0 THEN
6438 x_msg_count := l_msg_count;
6439 IF x_msg_count = 1 THEN
6440 x_msg_data := l_msg_data;
6441 END IF;
6442 RAISE FND_API.G_EXC_ERROR;
6443 END IF;
6444
6445 -- Get structure version attributes
6446 OPEN l_get_structure_ver_attr_csr(p_structure_version_id);
6447 FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
6448 CLOSE l_get_structure_ver_attr_csr;
6449
6450 If (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
6451 l_structure_ver_attr_rec.change_reason_code := p_change_reason_code;
6452 END IF;
6453
6454 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
6455 ( p_validate_only => FND_API.G_FALSE
6456 ,p_structure_version_id => l_new_struct_ver_id
6457 ,p_structure_version_name => p_new_struct_ver_name
6458 ,p_structure_version_desc => p_new_struct_ver_desc
6459 ,p_effective_date => l_structure_ver_attr_rec.effective_date
6460 ,p_latest_eff_published_flag => l_structure_ver_attr_rec.latest_eff_published_flag
6461 ,p_locked_status_code => l_structure_ver_attr_rec.lock_status_code
6462 ,p_struct_version_status_code => l_structure_ver_attr_rec.status_code
6463 ,p_baseline_current_flag => l_structure_ver_attr_rec.current_flag
6464 ,p_baseline_original_flag => l_structure_ver_attr_rec.original_flag
6465 ,p_change_reason_code => l_structure_ver_attr_rec.change_reason_code
6466 ,x_pev_structure_id => l_pev_structure_id
6467 ,x_return_status => l_return_status
6468 ,x_msg_count => l_msg_count
6469 ,x_msg_data => l_msg_data );
6470
6471 IF (p_debug_mode = 'Y') THEN
6472 pa_debug.debug('Create Structure Version Attr return status: ' || l_return_status);
6473 pa_debug.debug('l_pev_structure_id: ' || l_pev_structure_id);
6474 END IF;
6475
6476 --Check if there is any error.
6477 l_msg_count := FND_MSG_PUB.count_msg;
6478 IF l_msg_count > 0 THEN
6479 x_msg_count := l_msg_count;
6480 IF x_msg_count = 1 THEN
6481 x_msg_data := l_msg_data;
6482 END IF;
6483 RAISE FND_API.G_EXC_ERROR;
6484 END IF;
6485
6486 --Search for outgoing links for the structure version; create new Links
6487 /*
6488 OPEN get_to_id(p_structure_version_id);
6489 LOOP
6490 FETCH get_to_id INTO l_to_object_info;
6491 EXIT WHEN get_to_id%NOTFOUND;
6492 If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
6493 OPEN l_get_structure_ver_csr(l_to_object_info.object_id_to);
6494 FETCH l_get_structure_ver_csr INTO l_structure_ver_to_rec;
6495
6496 SELECT pst.structure_type_class_code
6497 INTO l_structure_type1
6498 FROM PA_STRUCTURE_TYPES pst,
6499 PA_PROJ_STRUCTURE_TYPES ppst
6500 WHERE ppst.proj_element_id = l_structure_ver_to_rec.proj_element_id
6501 AND pst.structure_type_id = ppst.structure_type_id;
6502
6503 PA_RELATIONSHIP_PVT.Create_Relationship(
6504 p_init_msg_list => FND_API.G_FALSE
6505 ,p_commit => FND_API.G_FALSE
6506 ,p_debug_mode => p_debug_mode
6507 ,p_project_id_from => l_structure_ver_rec.project_id
6508 ,p_structure_id_from => l_structure_ver_rec.proj_element_id
6509 ,p_structure_version_id_from => l_new_struct_ver_id
6510 ,p_task_version_id_from => NULL
6511 ,p_project_id_to => l_structure_ver_to_rec.project_id
6512 ,p_structure_id_to => l_structure_ver_to_rec.proj_element_id
6513 ,p_structure_version_id_to => l_structure_ver_to_rec.element_version_id
6514 ,p_task_version_id_to => NULL
6515 ,p_structure_type => l_structure_type1
6516 ,p_initiating_element => NULL
6517 ,p_link_to_latest_structure_ver => NULL
6518 ,p_relationship_type => 'L'
6519 ,p_relationship_subtype => 'READ_WRITE'
6520 ,x_object_relationship_id => l_new_obj_rel_id
6521 ,x_return_status => l_return_status
6522 ,x_msg_count => l_msg_count
6523 ,x_msg_data => l_msg_data
6524 );
6525 CLOSE l_get_structure_ver_csr;
6526
6527 IF (p_debug_mode = 'Y') THEN
6528 pa_debug.debug('Create Relationship return status: ' || l_return_status);
6529 pa_debug.debug('l_new_obj_rel_id: ' || l_new_obj_rel_id);
6530 END IF;
6531 ELSIF(l_to_object_info.object_type_to = 'PA_TASKS') THEN
6532 OPEN get_task_version_info(l_to_object_info.object_id_to);
6533 FETCH get_task_version_info INTO l_info_task_ver_rec;
6534
6535 SELECT pst.structure_type_class_code
6536 INTO l_structure_type1
6537 FROM PA_STRUCTURE_TYPES pst,
6538 PA_PROJ_STRUCTURE_TYPES ppst
6539 WHERE ppst.proj_element_id = l_info_task_ver_rec.structure_id
6540 AND pst.structure_type_id = ppst.structure_type_id;
6541
6542 PA_RELATIONSHIP_PVT.Create_Relationship(
6543 p_init_msg_list => FND_API.G_FALSE
6544 ,p_commit => FND_API.G_FALSE
6545 ,p_debug_mode => p_debug_mode
6546 ,p_project_id_from => l_structure_ver_rec.project_id
6547 ,p_structure_id_from => l_structure_ver_rec.proj_element_id
6548 ,p_structure_version_id_from => l_new_struct_ver_id
6549 ,p_task_version_id_from => NULL
6550 ,p_project_id_to => l_info_task_ver_rec.project_id
6551 ,p_structure_id_to => l_info_task_ver_rec.structure_id
6552 ,p_structure_version_id_to => l_info_task_ver_rec.structure_version_id
6553 ,p_task_version_id_to => l_info_task_ver_rec.task_version_id
6554 ,p_structure_type => l_structure_type1
6555 ,p_initiating_element => NULL
6556 ,p_link_to_latest_structure_ver => NULL
6557 ,p_relationship_type => 'L'
6558 ,p_relationship_subtype => 'READ_WRITE'
6559 ,x_object_relationship_id => l_new_obj_rel_id
6560 ,x_return_status => l_return_status
6561 ,x_msg_count => l_msg_count
6562 ,x_msg_data => l_msg_data
6563 );
6564 CLOSE get_task_version_info;
6565 IF (p_debug_mode = 'Y') THEN
6566 pa_debug.debug('Create Relationship return status: ' || l_return_status);
6567 pa_debug.debug('l_new_obj_rel_id: ' || l_new_obj_rel_id);
6568 END IF;
6569 END IF;
6570 --Check error
6571 l_msg_count := FND_MSG_PUB.count_msg;
6572 if (l_msg_count > 0) then
6573 x_msg_count := l_msg_count;
6574 if x_msg_count = 1 then
6575 x_msg_data := l_msg_data;
6576 end if;
6577 CLOSE get_to_id;
6578 raise FND_API.G_EXC_ERROR;
6579 end if;
6580
6581 END LOOP;
6582 CLOSE get_to_id;
6583 */
6584
6585
6586 OPEN l_get_structure_type_csr(p_structure_version_id);
6587 FETCH l_get_structure_type_csr INTO l_structure_type;
6588 CLOSE l_get_structure_type_csr;
6589
6590 -- If structure is workplan type create schedule version record
6591 if l_structure_type = 'WORKPLAN' then
6592
6593 OPEN l_get_ver_schedule_attr_csr(p_structure_version_id);
6594 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
6595 CLOSE l_get_ver_schedule_attr_csr;
6596
6597 /*
6598 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
6599 ( p_validate_only => FND_API.G_FALSE
6600 ,p_element_version_id => l_new_struct_ver_id
6601 ,p_calendar_id => l_ver_schedule_attr_rec.calendar_id
6602 ,p_scheduled_start_date => l_ver_schedule_attr_rec.scheduled_start_date
6603 ,p_scheduled_end_date => l_ver_schedule_attr_rec.scheduled_finish_date
6604 ,p_obligation_start_date => l_ver_schedule_attr_rec.obligation_start_date
6605 ,p_obligation_end_date => l_ver_schedule_attr_rec.obligation_finish_date
6606 ,p_actual_start_date => l_ver_schedule_attr_rec.actual_start_date
6607 ,p_actual_finish_date => l_ver_schedule_attr_rec.actual_finish_date
6608 ,p_estimate_start_date => l_ver_schedule_attr_rec.estimated_start_date
6609 ,p_estimate_finish_date => l_ver_schedule_attr_rec.estimated_finish_date
6610 ,p_duration => l_ver_schedule_attr_rec.duration
6611 ,p_early_start_date => l_ver_schedule_attr_rec.early_start_date
6612 ,p_early_end_date => l_ver_schedule_attr_rec.early_finish_date
6613 ,p_late_start_date => l_ver_schedule_attr_rec.late_start_date
6614 ,p_late_end_date => l_ver_schedule_attr_rec.late_finish_date
6615 ,p_milestone_flag => l_ver_schedule_attr_rec.milestone_flag
6616 ,p_critical_flag => l_ver_schedule_attr_rec.critical_flag
6617 ,p_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
6618 ,p_PLANNED_EFFORT => l_ver_schedule_attr_rec.PLANNED_EFFORT
6619 ,x_pev_schedule_id => l_pev_schedule_id
6620 ,x_return_status => l_return_status
6621 ,x_msg_count => l_msg_count
6622 ,x_msg_data => l_msg_data );
6623 */
6624 l_pev_schedule_id := NULL;
6625 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
6626 X_ROW_ID => X_Row_Id
6627 ,X_PEV_SCHEDULE_ID => l_pev_schedule_id
6628 ,X_ELEMENT_VERSION_ID => l_new_struct_ver_id
6629 ,X_PROJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
6630 ,X_PROJ_ELEMENT_ID => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
6631 ,X_SCHEDULED_START_DATE => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
6632 ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
6633 ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
6634 ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
6635 ,X_ACTUAL_START_DATE => l_ver_schedule_attr_rec.ACTUAL_START_DATE
6636 ,X_ACTUAL_FINISH_DATE => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
6637 ,X_ESTIMATED_START_DATE => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
6638 ,X_ESTIMATED_FINISH_DATE => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
6639 ,X_DURATION => l_ver_schedule_attr_rec.DURATION
6640 ,X_EARLY_START_DATE => l_ver_schedule_attr_rec.EARLY_START_DATE
6641 ,X_EARLY_FINISH_DATE => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
6642 ,X_LATE_START_DATE => l_ver_schedule_attr_rec.LATE_START_DATE
6643 ,X_LATE_FINISH_DATE => l_ver_schedule_attr_rec.LATE_FINISH_DATE
6644 ,X_CALENDAR_ID => l_ver_schedule_attr_rec.CALENDAR_ID
6645 ,X_MILESTONE_FLAG => l_ver_schedule_attr_rec.MILESTONE_FLAG
6646 ,X_CRITICAL_FLAG => l_ver_schedule_attr_rec.CRITICAL_FLAG
6647 ,X_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.wq_planned_quantity
6648 ,X_PLANNED_EFFORT => l_ver_schedule_attr_rec.planned_effort
6649 ,X_ACTUAL_DURATION => l_ver_schedule_attr_rec.actual_duration
6650 ,X_ESTIMATED_DURATION => l_ver_schedule_attr_rec.estimated_duration
6651 ,X_ATTRIBUTE_CATEGORY => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
6652 ,X_ATTRIBUTE1 => l_ver_schedule_attr_rec.ATTRIBUTE1
6653 ,X_ATTRIBUTE2 => l_ver_schedule_attr_rec.ATTRIBUTE2
6654 ,X_ATTRIBUTE3 => l_ver_schedule_attr_rec.ATTRIBUTE3
6655 ,X_ATTRIBUTE4 => l_ver_schedule_attr_rec.ATTRIBUTE4
6656 ,X_ATTRIBUTE5 => l_ver_schedule_attr_rec.ATTRIBUTE5
6657 ,X_ATTRIBUTE6 => l_ver_schedule_attr_rec.ATTRIBUTE6
6658 ,X_ATTRIBUTE7 => l_ver_schedule_attr_rec.ATTRIBUTE7
6659 ,X_ATTRIBUTE8 => l_ver_schedule_attr_rec.ATTRIBUTE8
6660 ,X_ATTRIBUTE9 => l_ver_schedule_attr_rec.ATTRIBUTE9
6661 ,X_ATTRIBUTE10 => l_ver_schedule_attr_rec.ATTRIBUTE10
6662 ,X_ATTRIBUTE11 => l_ver_schedule_attr_rec.ATTRIBUTE11
6663 ,X_ATTRIBUTE12 => l_ver_schedule_attr_rec.ATTRIBUTE12
6664 ,X_ATTRIBUTE13 => l_ver_schedule_attr_rec.ATTRIBUTE13
6665 ,X_ATTRIBUTE14 => l_ver_schedule_attr_rec.ATTRIBUTE14
6666 ,X_ATTRIBUTE15 => l_ver_schedule_attr_rec.ATTRIBUTE15
6667 ,X_SOURCE_OBJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
6668 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
6669 );
6670
6671
6672 IF (p_debug_mode = 'Y') THEN
6673 pa_debug.debug('Create Schedule Version return status: ' || l_return_status);
6674 pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
6675 END IF;
6676
6677 --Check if there is any error.
6678 l_msg_count := FND_MSG_PUB.count_msg;
6679 IF l_msg_count > 0 THEN
6680 x_msg_count := l_msg_count;
6681 IF x_msg_count = 1 THEN
6682 x_msg_data := l_msg_data;
6683 END IF;
6684 RAISE FND_API.G_EXC_ERROR;
6685 END IF;
6686
6687 ELSIF l_structure_type in ('FINANCIAL') then
6688 -- There can only be one working version any any time for a financial structure
6689 OPEN l_check_working_versions_csr(p_structure_version_id);
6690 FETCH l_check_working_versions_csr INTO l_dummy;
6691 if l_check_working_versions_csr%FOUND then
6692 CLOSE l_check_working_versions_csr;
6693 PA_UTILS.ADD_MESSAGE('PA','PA_PS_WORKING_VER_EXISTS');
6694 x_msg_data := 'PA_PS_WORKING_VER_EXISTS';
6695 RAISE FND_API.G_EXC_ERROR;
6696 end if;
6697 CLOSE l_check_working_versions_csr;
6698 end if;
6699
6700 -- Fetch all task versions for this structure version
6701 OPEN l_get_task_versions_csr(p_structure_version_id);
6702
6703 l_last_wbs_level := null;
6704
6705 LOOP
6706 FETCH l_get_task_versions_csr INTO l_task_versions_rec;
6707 EXIT WHEN l_get_task_versions_csr%NOTFOUND;
6708
6709 if l_last_wbs_level is null then
6710 -- first task version being created
6711 -- This task should have wbs level = 1
6712 l_ref_task_ver_id := l_new_struct_ver_id; --p_structure_version_id;
6713 l_peer_or_sub := 'SUB';
6714 else
6715 if l_task_versions_rec.wbs_level > l_last_wbs_level then
6716 l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
6717 l_peer_or_sub := 'SUB';
6718 else
6719 l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
6720 l_peer_or_sub := 'PEER';
6721 end if;
6722 end if;
6723
6724 --Bug 2189657
6725 --Added for linking tasks with no display sequence.
6726 --Set correct reference and parent element version id
6727 If (l_task_versions_rec.display_sequence IS NULL) THEN
6728 IF (l_ref_task_ver_id <> l_new_struct_ver_id) THEN
6729 --A task has already been created. Reference task must be a task
6730 IF (l_task_versions_rec.parent_element_version_id = p_structure_version_id) THEN
6731 --this is a link to the structure version. A task has already been created.
6732 --need to use a top level task as peer reference task
6733 l_peer_or_sub := 'PEER';
6734 l_ref_task_ver_id := l_outline_task_ref(1);
6735 ELSE
6736 --this is a link to a task.
6737 l_peer_or_sub := 'SUB';
6738 l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
6739 END IF;
6740 ELSE
6741 --No task has been created. Reference task is structure
6742 l_peer_or_sub := 'SUB';
6743 l_ref_task_ver_id := l_new_struct_ver_id;
6744 -- l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
6745 END IF;
6746 END IF;
6747 --Bug 2189657 end;
6748 OPEN get_cur_task_ver_weighting(l_task_versions_rec.element_version_id);
6749 FETCH get_cur_task_ver_weighting INTO l_weighting;
6750 CLOSE get_cur_task_ver_weighting;
6751
6752 PA_TASK_PVT1.CREATE_TASK_VERSION
6753 ( p_validate_only => FND_API.G_FALSE
6754 ,p_validation_level => 0
6755 ,p_ref_task_version_id => l_ref_task_ver_id
6756 ,p_peer_or_sub => l_peer_or_sub
6757 ,p_task_id => l_task_versions_rec.proj_element_id
6758 ,p_WEIGHTING_PERCENTAGE => l_weighting
6759 ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE
6760 ,x_task_version_id => l_task_version_id
6761 ,x_return_status => l_return_status
6762 ,x_msg_count => l_msg_count
6763 ,x_msg_data => l_msg_data);
6764
6765 t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
6766
6767 IF (p_debug_mode = 'Y') THEN
6768 pa_debug.debug('Create Task Version return status: ' || l_return_status);
6769 pa_debug.debug('l_task_version_id: ' || l_task_version_id);
6770 pa_debug.debug('l_msg_count: ' || l_msg_count);
6771 END IF;
6772
6773 --Check if there is any error.
6774 l_msg_count := FND_MSG_PUB.count_msg;
6775 IF l_msg_count > 0 THEN
6776 x_msg_count := l_msg_count;
6777 IF x_msg_count = 1 THEN
6778 x_msg_data := l_msg_data;
6779 END IF;
6780 RAISE FND_API.G_EXC_ERROR;
6781 END IF;
6782
6783 if l_structure_type = 'WORKPLAN' then
6784 -- Get task version schedule attributes
6785 OPEN l_get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id);
6786 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
6787 CLOSE l_get_ver_schedule_attr_csr;
6788
6789 IF (p_debug_mode = 'Y') THEN
6790 pa_debug.debug('Before Create Schedule Version');
6791 END IF;
6792 -- xxlu added DFF attributes
6793 /* PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
6794 ( p_validate_only => FND_API.G_FALSE
6795 ,p_element_version_id => l_task_version_id
6796 ,p_calendar_id => l_ver_schedule_attr_rec.calendar_id
6797 ,p_scheduled_start_date => l_ver_schedule_attr_rec.scheduled_start_date
6798 ,p_scheduled_end_date => l_ver_schedule_attr_rec.scheduled_finish_date
6799 ,p_obligation_start_date => l_ver_schedule_attr_rec.obligation_start_date
6800 ,p_obligation_end_date => l_ver_schedule_attr_rec.obligation_finish_date
6801 ,p_actual_start_date => l_ver_schedule_attr_rec.actual_start_date
6802 ,p_actual_finish_date => l_ver_schedule_attr_rec.actual_finish_date
6803 ,p_estimate_start_date => l_ver_schedule_attr_rec.estimated_start_date
6804 ,p_estimate_finish_date => l_ver_schedule_attr_rec.estimated_finish_date
6805 ,p_duration => l_ver_schedule_attr_rec.duration
6806 ,p_early_start_date => l_ver_schedule_attr_rec.early_start_date
6807 ,p_early_end_date => l_ver_schedule_attr_rec.early_finish_date
6808 ,p_late_start_date => l_ver_schedule_attr_rec.late_start_date
6809 ,p_late_end_date => l_ver_schedule_attr_rec.late_finish_date
6810 ,p_milestone_flag => l_ver_schedule_attr_rec.milestone_flag
6811 ,p_critical_flag => l_ver_schedule_attr_rec.critical_flag
6812 ,p_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
6813 ,p_PLANNED_EFFORT => l_ver_schedule_attr_rec.PLANNED_EFFORT
6814 ,p_attribute_category => l_ver_schedule_attr_rec.attribute_category
6815 ,p_attribute1 => l_ver_schedule_attr_rec.attribute1
6816 ,p_attribute2 => l_ver_schedule_attr_rec.attribute2
6817 ,p_attribute3 => l_ver_schedule_attr_rec.attribute3
6818 ,p_attribute4 => l_ver_schedule_attr_rec.attribute4
6819 ,p_attribute5 => l_ver_schedule_attr_rec.attribute5
6820 ,p_attribute6 => l_ver_schedule_attr_rec.attribute6
6821 ,p_attribute7 => l_ver_schedule_attr_rec.attribute7
6822 ,p_attribute8 => l_ver_schedule_attr_rec.attribute8
6823 ,p_attribute9 => l_ver_schedule_attr_rec.attribute9
6824 ,p_attribute10 => l_ver_schedule_attr_rec.attribute10
6825 ,p_attribute11 => l_ver_schedule_attr_rec.attribute11
6826 ,p_attribute12 => l_ver_schedule_attr_rec.attribute12
6827 ,p_attribute13 => l_ver_schedule_attr_rec.attribute13
6828 ,p_attribute14 => l_ver_schedule_attr_rec.attribute14
6829 ,p_attribute15 => l_ver_schedule_attr_rec.attribute15
6830 ,x_pev_schedule_id => l_pev_schedule_id
6831 ,x_return_status => l_return_status
6832 ,x_msg_count => l_msg_count
6833 ,x_msg_data => l_msg_data );
6834 -- end xxlu changes
6835 */
6836 l_pev_schedule_id := NULL;
6837 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
6838 X_ROW_ID => X_Row_Id
6839 ,X_PEV_SCHEDULE_ID => l_pev_schedule_id
6840 ,X_ELEMENT_VERSION_ID => l_task_version_id
6841 ,X_PROJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
6842 ,X_PROJ_ELEMENT_ID => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
6843 ,X_SCHEDULED_START_DATE => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
6844 ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
6845 ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
6846 ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
6847 ,X_ACTUAL_START_DATE => l_ver_schedule_attr_rec.ACTUAL_START_DATE
6848 ,X_ACTUAL_FINISH_DATE => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
6849 ,X_ESTIMATED_START_DATE => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
6850 ,X_ESTIMATED_FINISH_DATE => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
6851 ,X_DURATION => l_ver_schedule_attr_rec.DURATION
6852 ,X_EARLY_START_DATE => l_ver_schedule_attr_rec.EARLY_START_DATE
6853 ,X_EARLY_FINISH_DATE => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
6854 ,X_LATE_START_DATE => l_ver_schedule_attr_rec.LATE_START_DATE
6855 ,X_LATE_FINISH_DATE => l_ver_schedule_attr_rec.LATE_FINISH_DATE
6856 ,X_CALENDAR_ID => l_ver_schedule_attr_rec.CALENDAR_ID
6857 ,X_MILESTONE_FLAG => l_ver_schedule_attr_rec.MILESTONE_FLAG
6858 ,X_CRITICAL_FLAG => l_ver_schedule_attr_rec.CRITICAL_FLAG
6859 ,X_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.wq_planned_quantity
6860 ,X_PLANNED_EFFORT => l_ver_schedule_attr_rec.planned_effort
6861 ,X_ACTUAL_DURATION => l_ver_schedule_attr_rec.actual_duration
6862 ,X_ESTIMATED_DURATION => l_ver_schedule_attr_rec.estimated_duration
6863 ,X_ATTRIBUTE_CATEGORY => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
6864 ,X_ATTRIBUTE1 => l_ver_schedule_attr_rec.ATTRIBUTE1
6865 ,X_ATTRIBUTE2 => l_ver_schedule_attr_rec.ATTRIBUTE2
6866 ,X_ATTRIBUTE3 => l_ver_schedule_attr_rec.ATTRIBUTE3
6867 ,X_ATTRIBUTE4 => l_ver_schedule_attr_rec.ATTRIBUTE4
6868 ,X_ATTRIBUTE5 => l_ver_schedule_attr_rec.ATTRIBUTE5
6869 ,X_ATTRIBUTE6 => l_ver_schedule_attr_rec.ATTRIBUTE6
6870 ,X_ATTRIBUTE7 => l_ver_schedule_attr_rec.ATTRIBUTE7
6871 ,X_ATTRIBUTE8 => l_ver_schedule_attr_rec.ATTRIBUTE8
6872 ,X_ATTRIBUTE9 => l_ver_schedule_attr_rec.ATTRIBUTE9
6873 ,X_ATTRIBUTE10 => l_ver_schedule_attr_rec.ATTRIBUTE10
6874 ,X_ATTRIBUTE11 => l_ver_schedule_attr_rec.ATTRIBUTE11
6875 ,X_ATTRIBUTE12 => l_ver_schedule_attr_rec.ATTRIBUTE12
6876 ,X_ATTRIBUTE13 => l_ver_schedule_attr_rec.ATTRIBUTE13
6877 ,X_ATTRIBUTE14 => l_ver_schedule_attr_rec.ATTRIBUTE14
6878 ,X_ATTRIBUTE15 => l_ver_schedule_attr_rec.ATTRIBUTE15
6879 ,X_SOURCE_OBJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
6880 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
6881 );
6882
6883 IF (p_debug_mode = 'Y') THEN
6884 pa_debug.debug('Create Schedule Version return status: ' || l_return_status);
6885 pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
6886 END IF;
6887
6888 --Check if there is any error.
6889 l_msg_count := FND_MSG_PUB.count_msg;
6890 IF l_msg_count > 0 THEN
6891 x_msg_count := l_msg_count;
6892 IF x_msg_count = 1 THEN
6893 x_msg_data := l_msg_data;
6894 END IF;
6895 RAISE FND_API.G_EXC_ERROR;
6896 END IF;
6897 end if;
6898
6899 /* hsiu: bug 2800553: commented for performance improvement
6900 --Search for outgoing links; create new Links
6901 OPEN get_to_id(l_task_versions_rec.element_version_id);
6902 LOOP
6903 FETCH get_to_id INTO l_to_object_info;
6904 EXIT WHEN get_to_id%NOTFOUND;
6905 If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
6906 OPEN l_get_structure_ver_csr(l_to_object_info.object_id_to);
6907 FETCH l_get_structure_ver_csr INTO l_structure_ver_to_rec;
6908
6909 PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
6910 p_user_id => FND_GLOBAL.USER_ID
6911 ,p_object_type_from => 'PA_TASKS'
6912 ,p_object_id_from1 => l_task_version_id
6913 ,p_object_id_from2 => NULL
6914 ,p_object_id_from3 => NULL
6915 ,p_object_id_from4 => NULL
6916 ,p_object_id_from5 => NULL
6917 ,p_object_type_to => 'PA_STRUCTURES'
6918 ,p_object_id_to1 => l_structure_ver_to_rec.element_version_id
6919 ,p_object_id_to2 => NULL
6920 ,p_object_id_to3 => NULL
6921 ,p_object_id_to4 => NULL
6922 ,p_object_id_to5 => NULL
6923 ,p_relationship_type => 'L'
6924 ,p_relationship_subtype => 'READ_WRITE'
6925 ,p_lag_day => NULL
6926 ,p_imported_lag => NULL
6927 ,p_priority => NULL
6928 ,p_pm_product_code => NULL
6929 ,x_object_relationship_id => l_new_obj_rel_id
6930 ,x_return_status => l_return_status
6931 );
6932 */
6933 /*
6934 OPEN l_get_structure_type_csr(l_structure_ver_to_rec.element_version_id);
6935 FETCH l_get_structure_type_csr INTO l_structure_type1;
6936 CLOSE l_get_structure_type_csr;
6937
6938 PA_RELATIONSHIP_PVT.Create_Relationship(
6939 p_init_msg_list => FND_API.G_FALSE
6940 ,p_commit => FND_API.G_FALSE
6941 ,p_debug_mode => p_debug_mode
6942 ,p_project_id_from => l_structure_ver_rec.project_id
6943 ,p_structure_id_from => l_structure_ver_rec.proj_element_id
6944 ,p_structure_version_id_from => l_new_struct_ver_id
6945 ,p_task_version_id_from => l_task_version_id
6946 ,p_project_id_to => l_structure_ver_to_rec.project_id
6947 ,p_structure_id_to => l_structure_ver_to_rec.proj_element_id
6948 ,p_structure_version_id_to => l_structure_ver_to_rec.element_version_id
6949 ,p_task_version_id_to => NULL
6950 ,p_structure_type => l_structure_type1
6951 ,p_initiating_element => NULL
6952 ,p_link_to_latest_structure_ver => NULL
6953 ,p_relationship_type => 'L'
6954 ,p_relationship_subtype => 'READ_WRITE'
6955 ,x_object_relationship_id => l_new_obj_rel_id
6956 ,x_return_status => l_return_status
6957 ,x_msg_count => l_msg_count
6958 ,x_msg_data => l_msg_data
6959 );
6960 */
6961 /* hsiu: bug 2800553: commented for performance improvement
6962 CLOSE l_get_structure_ver_csr;
6963
6964 ELSIF (l_to_object_info.object_type_to = 'PA_TASKS') THEN
6965 OPEN get_task_version_info(l_to_object_info.object_id_to);
6966 FETCH get_task_version_info INTO l_info_task_ver_rec;
6967
6968 PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
6969 p_user_id => FND_GLOBAL.USER_ID
6970 ,p_object_type_from => 'PA_TASKS'
6971 ,p_object_id_from1 => l_task_version_id
6972 ,p_object_id_from2 => NULL
6973 ,p_object_id_from3 => NULL
6974 ,p_object_id_from4 => NULL
6975 ,p_object_id_from5 => NULL
6976 ,p_object_type_to => 'PA_TASKS'
6977 ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
6978 ,p_object_id_to2 => NULL
6979 ,p_object_id_to3 => NULL
6980 ,p_object_id_to4 => NULL
6981 ,p_object_id_to5 => NULL
6982 ,p_relationship_type => 'L'
6983 ,p_relationship_subtype => 'READ_WRITE'
6984 ,p_lag_day => NULL
6985 ,p_imported_lag => NULL
6986 ,p_priority => NULL
6987 ,p_pm_product_code => NULL
6988 ,x_object_relationship_id => l_new_obj_rel_id
6989 ,x_return_status => l_return_status
6990 );
6991 */
6992 /*
6993 OPEN l_get_structure_type_csr(l_info_task_ver_rec.structure_version_id);
6994 FETCH l_get_structure_type_csr INTO l_structure_type1;
6995 CLOSE l_get_structure_type_csr;
6996
6997 PA_RELATIONSHIP_PVT.Create_Relationship(
6998 p_init_msg_list => FND_API.G_FALSE
6999 ,p_commit => FND_API.G_FALSE
7000 ,p_debug_mode => p_debug_mode
7001 ,p_project_id_from => l_structure_ver_rec.project_id
7002 ,p_structure_id_from => l_structure_ver_rec.proj_element_id
7003 ,p_structure_version_id_from => l_new_struct_ver_id
7004 ,p_task_version_id_from => l_task_version_id
7005 ,p_project_id_to => l_info_task_ver_rec.project_id
7006 ,p_structure_id_to => l_info_task_ver_rec.structure_id
7007 ,p_structure_version_id_to => l_info_task_ver_rec.structure_version_id
7008 ,p_task_version_id_to => l_info_task_ver_rec.task_version_id
7009 ,p_structure_type => l_structure_type1
7010 ,p_initiating_element => NULL
7011 ,p_link_to_latest_structure_ver => NULL
7012 ,p_relationship_type => 'L'
7013 ,p_relationship_subtype => 'READ_WRITE'
7014 ,x_object_relationship_id => l_new_obj_rel_id
7015 ,x_return_status => l_return_status
7016 ,x_msg_count => l_msg_count
7017 ,x_msg_data => l_msg_data
7018 );
7019 */
7020 /* hsiu: bug 2800553: commented for performance improvement
7021 CLOSE get_task_version_info;
7022
7023 END IF;
7024
7025 --Check error
7026 l_msg_count := FND_MSG_PUB.count_msg;
7027 if (l_msg_count > 0) then
7028 x_msg_count := l_msg_count;
7029 if x_msg_count = 1 then
7030 x_msg_data := l_msg_data;
7031 end if;
7032 CLOSE get_to_id;
7033 raise FND_API.G_EXC_ERROR;
7034 end if;
7035 END LOOP;
7036 CLOSE get_to_id;
7037 */
7038 l_last_wbs_level := l_task_versions_rec.wbs_level;
7039 l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;
7040
7041 END LOOP;
7042
7043 CLOSE l_get_task_versions_csr;
7044
7045 x_new_struct_ver_id := l_new_struct_ver_id;
7046 x_return_status := FND_API.G_RET_STS_SUCCESS;
7047
7048 IF (p_commit = FND_API.G_TRUE) THEN
7049 COMMIT;
7050 END IF;
7051
7052 IF (p_debug_mode = 'Y') THEN
7053 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION END');
7054 END IF;
7055
7056 EXCEPTION
7057 when FND_API.G_EXC_ERROR then
7058 if p_commit = FND_API.G_TRUE then
7059 rollback to copy_structure_version_pvt;
7060 end if;
7061 x_return_status := FND_API.G_RET_STS_ERROR;
7062 when FND_API.G_EXC_UNEXPECTED_ERROR then
7063 if p_commit = FND_API.G_TRUE then
7064 rollback to copy_structure_version_pvt;
7065 end if;
7066 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7067 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
7068 p_procedure_name => 'COPY_STRUCTURE_VERSION',
7069 p_error_text => SUBSTRB(SQLERRM,1,240));
7070 when OTHERS then
7071 if p_commit = FND_API.G_TRUE then
7072 rollback to copy_structure_version_pvt;
7073 end if;
7074 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7075 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
7076 p_procedure_name => 'COPY_STRUCTURE_VERSION',
7077 p_error_text => SUBSTRB(SQLERRM,1,240));
7078 raise;
7079 END COPY_STRUCTURE_VERSION;
7080
7081
7082 PROCEDURE COPY_STRUCTURE
7083 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
7084 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
7085 ,p_validation_level IN VARCHAR2 := 100
7086 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
7087 ,p_debug_mode IN VARCHAR2 := 'N'
7088 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7089 ,p_src_project_id IN NUMBER
7090 ,p_dest_project_id IN NUMBER
7091 -- anlee
7092 -- Dates changes
7093 ,p_delta IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7094 -- End of changes
7095 ,p_copy_task_flag IN VARCHAR2 := 'Y'
7096 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7097 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7098 ,x_msg_data OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
7099 IS
7100 l_return_status VARCHAR2(1);
7101 l_msg_count NUMBER;
7102 l_msg_data VARCHAR2(250);
7103 l_split_cost_workplan_flag VARCHAR2(1);
7104 l_structure_id NUMBER;
7105 l_structure_type PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
7106
7107 --Bug 2189657
7108 --Added for linking tasks with no display sequence.
7109 Type T_EquivElemVerTable IS TABLE OF NUMBER
7110 Index by BINARY_INTEGER;
7111 t_equiv_elem_ver_id T_EquivElemVerTable;
7112 --Bug 2189657 end;
7113
7114 CURSOR l_get_structure_type_csr(c_proj_element_id NUMBER)
7115 IS
7116 SELECT structure_type_class_code
7117 FROM PA_STRUCTURE_TYPES pst,
7118 PA_PROJ_STRUCTURE_TYPES ppst
7119 WHERE ppst.proj_element_id = c_proj_element_id
7120 AND pst.structure_type_id = ppst.structure_type_id;
7121
7122 CURSOR l_get_structure_csr(c_project_id NUMBER)
7123 IS
7124 SELECT *
7125 FROM PA_PROJ_ELEMENTS
7126 WHERE project_id = c_project_id
7127 AND object_type = 'PA_STRUCTURES';
7128
7129 l_structure_rec l_get_structure_csr%ROWTYPE;
7130
7131 --This cursor will either get all the working versions or the latest published version
7132 -- CURSOR l_get_structure_versions_csr(c_project_id NUMBER, c_structure_id NUMBER, c_pub_status VARCHAR2)
7133 -- IS
7134 -- SELECT b.element_version_id
7135 -- FROM PA_PROJ_ELEM_VER_STRUCTURE b
7136 -- WHERE b.proj_element_id = c_structure_id
7137 -- AND b.project_id = c_project_id
7138 -- AND (b.STATUS_CODE = 'STRUCTURE_PUBLISHED' AND b.LATEST_EFF_PUBLISHED_FLAG = 'Y' AND c_pub_status = 'Y')
7139 -- UNION
7140 -- SELECT b.element_version_id
7141 -- FROM PA_PROJ_ELEM_VER_STRUCTURE b
7142 -- WHERE b.proj_element_id = c_structure_id
7143 -- AND b.project_id = c_project_id
7144 -- AND (b.STATUS_CODE <> 'STRUCTURE_PUBLISHED' AND c_pub_status = 'N');
7145
7146
7147 l_structure_version_id NUMBER;
7148 l_new_structure_version_id NUMBER;
7149
7150 CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
7151 IS
7152 SELECT *
7153 FROM PA_PROJ_ELEMENT_VERSIONS
7154 WHERE element_version_id = c_structure_version_id;
7155
7156 l_structure_ver_rec l_get_structure_ver_csr%ROWTYPE;
7157
7158 --commented by hsiu for advanced structure changes
7159 -- CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER, c_pub_status VARCHAR2)
7160 -- IS
7161 -- SELECT a.*
7162 -- FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7163 -- PA_PROJ_ELEMENT_VERSIONS b
7164 -- WHERE b.element_version_id = c_structure_version_id
7165 -- AND b.element_version_id = a.element_version_id
7166 -- AND b.project_id = a.project_id
7167 -- AND (a.STATUS_CODE <> 'STRUCTURE_PUBLISHED' AND c_pub_status = 'N')
7168 -- UNION
7169 -- SELECT a.*
7170 -- FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7171 -- PA_PROJ_ELEMENT_VERSIONS b
7172 -- WHERE b.element_version_id = c_structure_version_id
7173 -- AND b.element_version_id = a.element_version_id
7174 -- AND b.project_id = a.project_id
7175 -- AND (a.STATUS_CODE = 'STRUCTURE_PUBLISHED' AND c_pub_status = 'Y' and a.LATEST_EFF_PUBLISHED_FLAG='Y');
7176
7177 CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
7178 IS
7179 SELECT a.*
7180 FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7181 PA_PROJ_ELEMENT_VERSIONS b
7182 WHERE b.element_version_id = c_structure_version_id
7183 AND b.element_version_id = a.element_version_id
7184 AND b.proj_element_id = a.proj_element_id
7185 AND b.project_id = a.project_id;
7186 l_structure_ver_attr_rec l_get_structure_ver_attr_csr%ROWTYPE;
7187
7188 CURSOR l_get_task_versions_csr(c_structure_version_id NUMBER)
7189 IS
7190 SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
7191 b.object_id_from1 parent_element_version_id
7192 FROM PA_PROJ_ELEMENT_VERSIONS a,
7193 PA_OBJECT_RELATIONSHIPS b,
7194 pa_proj_elements c
7195 WHERE a.object_type = 'PA_TASKS'
7196 AND a.parent_structure_version_id = c_structure_version_id
7197 AND a.element_version_id = b.object_id_to1
7198 AND b.relationship_type = 'S'
7199 and c.link_task_flag <> 'Y'
7200 and c.proj_element_id = a.proj_element_id
7201 ORDER BY a.display_sequence;
7202
7203 l_task_versions_rec l_get_task_versions_csr%ROWTYPE;
7204
7205 CURSOR get_task_ver_weighting(p_task_ver_id NUMBER)
7206 IS
7207 select weighting_percentage
7208 from pa_object_relationships
7209 where object_id_to1 = p_task_ver_id
7210 and object_type_to = 'PA_TASKS'
7211 and relationship_type = 'S';
7212 l_weighting_percentage NUMBER;
7213
7214 l_ref_task_ver_id NUMBER;
7215 l_peer_or_sub VARCHAR2(10);
7216
7217 CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
7218 IS
7219 SELECT a.*
7220 FROM PA_PROJ_ELEM_VER_SCHEDULE a,
7221 PA_PROJ_ELEMENT_VERSIONS b
7222 WHERE b.element_version_id = c_element_version_id
7223 AND b.element_version_id = a.element_version_id
7224 AND b.project_id = a.project_id;
7225
7226 l_ver_schedule_attr_rec l_get_ver_schedule_attr_csr%ROWTYPE;
7227
7228 TYPE reference_tasks IS TABLE OF NUMBER
7229 INDEX BY BINARY_INTEGER;
7230
7231 -- This table stores reference task version IDs for a particular wbs
7232 -- level. This provides a lookup to find the last task version
7233 -- at that level.
7234 l_outline_task_ref reference_tasks;
7235
7236 l_last_wbs_level NUMBER;
7237 l_task_version_id NUMBER;
7238 l_pev_schedule_id NUMBER;
7239
7240 CURSOR l_get_tasks_csr(c_project_id NUMBER, c_proj_element_id NUMBER)
7241 IS
7242 SELECT a.*, b.task_number PA_TASK_NUMBER
7243 FROM PA_PROJ_ELEMENTS a,
7244 PA_TASKS b
7245 WHERE a.object_type = 'PA_TASKS'
7246 AND a.project_id = c_project_id
7247 AND a.proj_element_id = c_proj_element_id
7248 AND a.LINK_TASK_FLAG <> 'Y'
7249 AND a.proj_element_id = b.task_id(+);
7250
7251 CURSOR l_get_pa_tasks_csr(c_project_id NUMBER, c_task_number VARCHAR2)
7252 IS
7253 SELECT task_id
7254 FROM PA_TASKS
7255 WHERE project_id = c_project_id
7256 AND task_number = c_task_number;
7257
7258 l_tasks_rec l_get_tasks_csr%ROWTYPE;
7259 l_task_id NUMBER;
7260 l_task_id_ref reference_tasks;
7261 l_pev_structure_id NUMBER;
7262
7263 --Bug No 3634334 Commented for performance reasons and rewritten the query.
7264 /*CURSOR l_linking_tasks_csr(c_src_project_id NUMBER, c_dest_project_id NUMBER)
7265 IS
7266 select a.task_id
7267 from pa_tasks a, pa_tasks b, pa_proj_elements c
7268 where a.project_id = c_dest_project_id
7269 and b.project_id = c_src_project_id
7270 and a.task_number = b.task_number
7271 and b.task_id = c.proj_element_id
7272 and c.link_task_flag = 'Y';*/
7273
7274 CURSOR l_linking_tasks_csr(c_src_project_id NUMBER, c_dest_project_id NUMBER)
7275 IS
7276 select /*+ INDEX(a PA_TASKS_U2) */ a.task_id --Bug No 3634334
7277 from pa_tasks a, pa_tasks b, pa_proj_elements c
7278 where a.project_id = c_dest_project_id
7279 and b.project_id = c_src_project_id
7280 and a.task_number = b.task_number
7281 and c.project_id = c_src_project_id --Bug No 3634334
7282 and b.task_id = c.proj_element_id
7283 and c.object_type = 'PA_TASKS' -- Bug No. 3968095
7284 and c.link_task_flag = 'Y';
7285
7286 l_task_delete NUMBER;
7287 l_task_delete_rvn NUMBER;
7288 l_task_delete_wbs_rvn NUMBER;
7289
7290 Type task_match_tbl is Table of NUMBER
7291 INDEX BY BINARY_INTEGER;
7292 l_task_match_tbl task_match_tbl;
7293
7294 CURSOR l_is_template (c_project_id NUMBER)
7295 IS
7296 SELECT 1 FROM PA_PROJECTS_ALL
7297 WHERE TEMPLATE_FLAG = 'Y'
7298 AND project_id = c_project_id;
7299 l_dummy NUMBER;
7300
7301 -- l_is_workplan VARCHAR2(1);
7302 -- l_is_billing VARCHAR2(1);
7303 -- l_is_costing VARCHAR2(1);
7304 l_structure_pub_status VARCHAR2(1);
7305 l_rowid VARCHAR2(255);
7306 l_name VARCHAR2(240);
7307 l_project_name VARCHAR2(30);
7308 l_append VARCHAR2(10) := ': ';
7309 l_suffix VARCHAR2(80);
7310 -- anlee
7311 -- Dates changes
7312 l_delta NUMBER;
7313 -- End of changes
7314
7315 --HSIU
7316 --Added for calculating delta using target date
7317 CURSOR get_target_dates
7318 IS
7319 SELECT target_start_date, target_finish_date
7320 FROM PA_PROJECTS_ALL
7321 WHERE PROJECT_ID = p_dest_project_id;
7322 l_target_start_date DATE;
7323 l_target_finish_date DATE;
7324 l_scheduled_start_date DATE;
7325 l_scheduled_finish_date DATE;
7326 -- hsiu
7327 -- Added for advanced structure
7328 l_src_template_flag VARCHAR2(1);
7329 l_dest_template_flag VARCHAR2(1);
7330 l_select NUMBER; -- For selecting structure versions:
7331 -- 1 for last updated working
7332 -- 2 for all working, baselined and latest published
7333 -- 3 for latest published only
7334 l_copy NUMBER; -- For status of copied structure version
7335 -- 1 for Working
7336 -- 2 for Published and Baselined
7337 -- 3 for same as original
7338 -- 4 for Published only
7339 l_status_code VARCHAR2(30);
7340 l_baseline_flag VARCHAR2(1);
7341 l_latest_flag VARCHAR2(1);
7342
7343 CURSOR l_get_structure_versions_csr(c_project_id NUMBER, c_structure_id NUMBER,
7344 c_option NUMBER)
7345 IS
7346 SELECT distinct(b.element_version_id)
7347 FROM pa_proj_elements a, pa_proj_elem_ver_structure b
7348 WHERE a.project_id = c_project_id
7349 AND a.proj_element_id = c_structure_id
7350 AND a.project_id = b.project_id
7351 AND a.proj_element_id = b.proj_element_id
7352 AND b.status_code <> 'STRUCTURE_PUBLISHED'
7353 --Bug 2643432
7354 --This is a temporary fix. The API returns the first row, but since date
7355 --comparison only compares up to the day, not the second, we can only
7356 --return the first selected row in this API.
7357 AND b.element_version_id = PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(c_structure_id)
7358 -- AND b.last_update_date = (
7359 -- SELECT MAX(c.last_update_date)
7360 -- FROM pa_proj_elem_ver_structure c
7361 -- WHERE c.project_id = a.project_id
7362 -- AND c.proj_element_id = a.proj_element_id
7363 -- AND c.status_code <> 'STRUCTURE_PUBLISHED')
7364 AND 1 = (c_option)
7365 UNION
7366 SELECT distinct(b.element_version_id)
7367 FROM pa_proj_elements a, pa_proj_elem_ver_structure b
7368 WHERE a.project_id = c_project_id
7369 AND a.proj_element_id = c_structure_id
7370 AND a.project_id = b.project_id
7371 AND a.proj_element_id = b.proj_element_id
7372 AND ((b.status_code = 'STRUCTURE_PUBLISHED' AND
7373 b.latest_eff_published_flag = 'Y')
7374 OR
7375 (b.status_code = 'STRUCTURE_PUBLISHED' AND
7376 b.current_flag = 'Y')
7377 OR
7378 (b.status_code <> 'STRUCTURE_PUBLISHED'))
7379 AND 2 = (c_option)
7380 UNION
7381 SELECT distinct(b.element_version_id)
7382 FROM pa_proj_elements a, pa_proj_elem_ver_structure b
7383 WHERE a.project_id = c_project_id
7384 AND a.proj_element_id = c_structure_id
7385 AND a.project_id = b.project_id
7386 AND a.proj_element_id = b.proj_element_id
7387 AND b.status_code = 'STRUCTURE_PUBLISHED'
7388 AND b.latest_eff_published_flag = 'Y'
7389 AND 3 = (c_option);
7390
7391
7392 CURSOR get_wp_attr(c_proj_element_id NUMBER) IS
7393 select *
7394 from pa_proj_workplan_attr
7395 where proj_element_id = c_proj_element_id;
7396 l_wp_attr_rec get_wp_attr%ROWTYPE;
7397
7398 CURSOR get_progress_attr(c_proj_element_id NUMBER, c_project_id NUMBER) IS -- For Bug 3968095
7399 select *
7400 from pa_proj_progress_attr
7401 where object_type = 'PA_STRUCTURES'
7402 and object_id = c_proj_element_id
7403 and project_id = c_project_id; -- For Bug 3968095
7404 l_progress_attr_rec get_progress_attr%ROWTYPE;
7405
7406 CURSOR get_proj_rec_ver_number(c_project_id NUMBER) IS
7407 select record_version_number
7408 from pa_projects_all
7409 where project_id = c_project_id;
7410 l_proj_record_ver_number NUMBER;
7411 l_struc_scheduled_start_date DATE;
7412 l_struc_scheduled_finish_date DATE;
7413 --hsiu added for task version status
7414 l_task_unpub_ver_status_code pa_proj_element_versions.TASK_UNPUB_VER_STATUS_CODE%TYPE;
7415 --end task version status changes
7416
7417 --hsiu: bug 2667527
7418 CURSOR get_init_task_stat(c_task_type_id NUMBER) IS
7419 select INITIAL_STATUS_CODE
7420 from pa_task_types
7421 where task_type_id = c_task_type_id;
7422 l_init_status_code PA_TASK_TYPES.INITIAL_STATUS_CODE%TYPE;
7423 --end bug 2667527
7424 BEGIN
7425 pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE');
7426
7427 IF (p_debug_mode = 'Y') THEN
7428 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE begin');
7429 END IF;
7430
7431 IF (p_commit = FND_API.G_TRUE) THEN
7432 savepoint copy_structure_pvt;
7433 END IF;
7434
7435 -- Check if source and destination project are the same
7436 if p_src_project_id = p_dest_project_id then
7437 x_return_status := FND_API.G_RET_STS_SUCCESS;
7438 return;
7439 end if;
7440
7441 --Check if the destination project is a template
7442 OPEN l_is_template(p_dest_project_id);
7443 FETCH l_is_template INTO l_dummy;
7444 IF l_is_template%NOTFOUND THEN
7445 l_dest_template_flag := 'N';
7446 ELSE
7447 l_dest_template_flag := 'Y';
7448 END IF;
7449 CLOSE l_is_template;
7450
7451 --Check if the source project is a template
7452 OPEN l_is_template(p_src_project_id);
7453 FETCH l_is_template INTO l_dummy;
7454 IF l_is_template%NOTFOUND THEN
7455 l_src_template_flag := 'N';
7456 ELSE
7457 l_src_template_flag := 'Y';
7458 END IF;
7459 CLOSE l_is_template;
7460
7461 /* commented by Hsiu
7462 -- delta is now calculated for each version
7463
7464 -- anlee
7465 -- Dates changes
7466 if (p_delta = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR (p_delta is NULL) then
7467 l_delta := 0;
7468 else
7469 l_delta := p_delta;
7470 end if;
7471 -- End of changes
7472 */
7473
7474 /* commented by Hsiu
7475
7476 -- Check split_cost_from_workplan_flag for source project
7477 SELECT split_cost_from_workplan_flag
7478 INTO l_split_cost_workplan_flag
7479 FROM PA_PROJECTS_ALL
7480 WHERE project_id = p_src_project_id;
7481
7482 if l_split_cost_workplan_flag = 'N' then
7483 OPEN l_get_structure_csr(p_src_project_id);
7484 FETCH l_get_structure_csr INTO l_structure_rec;
7485 if l_get_structure_csr%NOTFOUND then
7486 CLOSE l_get_structure_csr;
7487 PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_NOT_EXIST');
7488 l_msg_data := 'PA_PS_STRUC_NOT_EXIST';
7489 RAISE FND_API.G_EXC_ERROR;
7490 end if;
7491
7492 CLOSE l_get_structure_csr;
7493 */
7494
7495 select name into l_project_name
7496 from pa_projects_all
7497 where project_id = p_dest_project_id;
7498
7499 select meaning
7500 into l_suffix
7501 from pa_lookups
7502 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
7503 and lookup_code = 'WORKPLAN';
7504
7505 --Hsiu start modification
7506 --Get target dates
7507 l_delta := 0;
7508 OPEN get_target_dates;
7509 FETCH get_target_dates into l_target_start_date, l_target_finish_date;
7510 CLOSE get_target_dates;
7511 --end modification
7512
7513 OPEN l_get_structure_csr(p_src_project_id);
7514 LOOP
7515 FETCH l_get_structure_csr INTO l_structure_rec;
7516 EXIT WHEN l_get_structure_csr%NOTFOUND;
7517
7518 --check if this is a split project
7519 -- SELECT split_cost_from_workplan_flag
7520 -- INTO l_split_cost_workplan_flag
7521 -- FROM PA_PROJECTS_ALL
7522 -- WHERE project_id = p_src_project_id;
7523
7524 -- OPEN l_get_structure_type_csr(l_structure_rec.proj_element_id);
7525 -- FETCH l_get_structure_type_csr INTO l_structure_type;
7526 -- CLOSE l_get_structure_type_csr;
7527
7528 -- IF l_split_cost_workplan_flag = 'N' THEN
7529 -- --there should not be a second structure
7530 -- l_structure_type := NULL;
7531 -- END IF;
7532
7533 -- Hsiu added
7534 -- For advanced structure
7535
7536 l_name := substrb(l_project_name, 1, 240);
7537 IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id)
7538 = 'N') THEN
7539 --Workplan and financial are separate structures
7540 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
7541 l_structure_rec.proj_element_id, 'WORKPLAN')
7542 = 'Y') THEN
7543
7544 --Workplan structure
7545 l_structure_type := 'WORKPLAN';
7546
7547 --Get workplan attributes
7548 OPEN get_wp_attr(l_structure_rec.proj_element_id);
7549 FETCH get_wp_attr into l_wp_attr_rec;
7550 CLOSE get_wp_attr;
7551
7552 OPEN get_progress_attr(l_structure_rec.proj_element_id, l_structure_rec.project_id); -- For Bug 3968095
7553 FETCH get_progress_attr into l_progress_attr_rec;
7554 CLOSE get_progress_attr;
7555
7556 --Modify name; add suffix
7557 l_name := substrb(l_project_name||l_append||l_suffix, 1, 240);
7558
7559 IF (l_src_template_flag = 'Y') AND
7560 (l_dest_template_flag = 'Y') THEN
7561 l_select := 1;
7562 l_copy := 1;
7563 ELSIF (l_src_template_flag = 'Y') AND
7564 (l_dest_template_flag = 'N') THEN
7565 l_select := 1;
7566 IF (l_wp_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y' AND
7567 l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N') THEN
7568 l_copy := 1;
7569 ELSE
7570 l_copy := 2;
7571 END IF;
7572 ELSIF (l_src_template_flag = 'N') AND
7573 (l_dest_template_flag = 'N') THEN
7574 l_select := 2;
7575 l_copy := 3;
7576 ELSIF (l_src_template_flag = 'N') AND
7577 (l_dest_template_flag = 'Y') THEN
7578 IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7579 l_structure_rec.proj_element_id) = 'Y') THEN
7580 l_select := 3;
7581 ELSE
7582 l_select := 1;
7583 END IF;
7584 l_copy := 1;
7585 END IF;
7586 END IF;
7587 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
7588 l_structure_rec.proj_element_id, 'FINANCIAL')
7589 = 'Y') THEN
7590
7591 --Financial structure
7592 l_structure_type := 'FINANCIAL';
7593
7594 IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7595 l_structure_rec.proj_element_id) = 'Y') THEN
7596 l_select := 3;
7597 ELSE
7598 l_select := 1;
7599 END IF;
7600 IF (l_dest_template_flag = 'Y') THEN
7601 l_copy := 1;
7602 ELSE
7603 l_copy := 4;
7604 END IF;
7605
7606 END IF;
7607 ELSE--share flag is 'Y' for source project
7608
7609 --Workplan and financial as 1 structure
7610 l_structure_type := NULL; --for share structure
7611
7612 --Get workplan attributes
7613 OPEN get_wp_attr(l_structure_rec.proj_element_id);
7614 FETCH get_wp_attr into l_wp_attr_rec;
7615 CLOSE get_wp_attr;
7616
7617 OPEN get_progress_attr(l_structure_rec.proj_element_id, l_structure_rec.project_id); -- For Bug 3968095
7618 FETCH get_progress_attr into l_progress_attr_rec;
7619 CLOSE get_progress_attr;
7620
7621 IF (l_src_template_flag = 'Y') AND
7622 (l_dest_template_flag = 'Y') THEN
7623 l_select := 1;
7624 l_copy := 1;
7625 ELSIF (l_src_template_flag = 'Y') AND
7626 (l_dest_template_flag = 'N') THEN
7627 l_select := 1;
7628 IF (l_wp_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y' AND
7629 l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N') THEN
7630 l_copy := 1;
7631 ELSE
7632 l_copy := 2;
7633 END IF;
7634 ELSIF (l_src_template_flag = 'N') AND
7635 (l_dest_template_flag = 'N') THEN
7636 l_select := 2;
7637 l_copy := 3;
7638 ELSIF (l_src_template_flag = 'N') AND
7639 (l_dest_template_flag = 'Y') THEN
7640 IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7641 l_structure_rec.proj_element_id) = 'Y') THEN
7642 l_select := 3;
7643 ELSE
7644 l_select := 1;
7645 END IF;
7646 l_copy := 1;
7647 END IF;
7648 END IF;
7649 -- end advanced structure changes
7650
7651 /*
7652 IF (l_structure_type = 'WORKPLAN') THEN
7653 l_name := substr(l_project_name||l_append||l_suffix, 1, 240);
7654 ELSE
7655 l_name := substr(l_project_name, 1, 240);
7656 END IF;
7657 */
7658 IF (p_debug_mode = 'Y') THEN
7659 pa_debug.debug('create structure');
7660 END IF;
7661
7662 --Commented by hsiu
7663 -- IF (l_dest_template_flag = 'Y' AND l_structure_type = 'WORKPLAN') THEN
7664 --Create new structure
7665 -- PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
7666 -- ( p_validate_only => FND_API.G_FALSE
7667 -- ,p_project_id => p_dest_project_id
7668 -- ,p_structure_number => l_name
7669 -- ,p_structure_name => l_name
7670 -- ,p_calling_flag => l_structure_type
7671 -- ,x_structure_id => l_structure_id
7672 -- ,x_return_status => l_return_status
7673 -- ,x_msg_count => l_msg_count
7674 -- ,x_msg_data => l_msg_data );
7675
7676 -- --Check if there is any error.
7677 -- l_msg_count := FND_MSG_PUB.count_msg;
7678 -- IF l_msg_count > 0 THEN
7679 -- x_msg_count := l_msg_count;
7680 -- IF x_msg_count = 1 THEN
7681 -- x_msg_data := l_msg_data;
7682 -- END IF;
7683 -- RAISE FND_API.G_EXC_ERROR;
7684 -- END IF;
7685
7686 -- IF (p_debug_mode = 'Y') THEN
7687 -- pa_debug.debug('create structure version');
7688 -- END IF;
7689 -- PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
7690 -- ( p_validate_only => FND_API.G_FALSE
7691 -- ,p_structure_id => l_structure_id
7692 -- ,x_structure_version_id => l_new_structure_version_id
7693 -- ,x_return_status => l_return_status
7694 -- ,x_msg_count => l_msg_count
7695 -- ,x_msg_data => l_msg_data );
7696
7697 -- --Check if there is any error.
7698 -- l_msg_count := FND_MSG_PUB.count_msg;
7699 -- IF l_msg_count > 0 THEN
7700 -- x_msg_count := l_msg_count;
7701 -- IF x_msg_count = 1 THEN
7702 -- x_msg_data := l_msg_data;
7703 -- END IF;
7704 -- RAISE FND_API.G_EXC_ERROR;
7705 -- END IF;
7706
7707 -- IF (p_debug_mode = 'Y') THEN
7708 -- pa_debug.debug('create structure version attr');
7709 -- END IF;
7710 -- PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
7711 -- ( p_validate_only => FND_API.G_FALSE
7712 -- ,p_structure_version_id => l_new_structure_version_id
7713 -- ,p_structure_version_name => l_name
7714 -- ,p_structure_version_desc => NULL
7715 -- ,p_effective_date => NULL
7716 -- ,p_latest_eff_published_flag => 'N'
7717 -- ,p_locked_status_code => 'UNLOCKED'
7718 -- ,p_struct_version_status_code => 'STRUCTURE_WORKING'
7719 -- ,p_baseline_current_flag => 'N'
7720 -- ,p_baseline_original_flag => 'N'
7721 -- ,x_pev_structure_id => l_pev_structure_id
7722 -- ,x_return_status => l_return_status
7723 -- ,x_msg_count => l_msg_count
7724 -- ,x_msg_data => l_msg_data );
7725
7726 -- --Check if there is any error.
7727 -- l_msg_count := FND_MSG_PUB.count_msg;
7728 -- IF l_msg_count > 0 THEN
7729 -- x_msg_count := l_msg_count;
7730 -- IF x_msg_count = 1 THEN
7731 -- x_msg_data := l_msg_data;
7732 -- END IF;
7733 -- RAISE FND_API.G_EXC_ERROR;
7734 -- END IF;
7735
7736 -- IF (p_debug_mode = 'Y') THEN
7737 -- pa_debug.debug('create schedule version');
7738 -- END IF;
7739 -- PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
7740 -- ( p_validate_only => FND_API.G_FALSE
7741 -- ,p_element_version_id => l_new_structure_version_id
7742 -- ,p_scheduled_start_date => SYSDATE
7743 -- ,p_scheduled_end_date => SYSDATE
7744 -- ,x_pev_schedule_id => l_pev_schedule_id
7745 -- ,x_return_status => l_return_status
7746 -- ,x_msg_count => l_msg_count
7747 -- ,x_msg_data => l_msg_data );
7748
7749 -- --Check if there is any error.
7750 -- l_msg_count := FND_MSG_PUB.count_msg;
7751 -- IF l_msg_count > 0 THEN
7752 -- x_msg_count := l_msg_count;
7753 -- IF x_msg_count = 1 THEN
7754 -- x_msg_data := l_msg_data;
7755 -- END IF;
7756 -- RAISE FND_API.G_EXC_ERROR;
7757 -- END IF;
7758
7759 -- ELSE
7760 --copy from
7761 --end commented code by hsiu
7762
7763 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
7764 ( p_validate_only => FND_API.G_FALSE
7765 ,p_project_id => p_dest_project_id
7766 ,p_structure_number => l_name
7767 ,p_structure_name => l_name
7768 ,p_calling_flag => l_structure_type
7769 ,p_structure_description => l_structure_rec.description
7770 ,p_attribute_category => l_structure_rec.attribute_category
7771 ,p_attribute1 => l_structure_rec.attribute1
7772 ,p_attribute2 => l_structure_rec.attribute2
7773 ,p_attribute3 => l_structure_rec.attribute3
7774 ,p_attribute4 => l_structure_rec.attribute4
7775 ,p_attribute5 => l_structure_rec.attribute5
7776 ,p_attribute6 => l_structure_rec.attribute6
7777 ,p_attribute7 => l_structure_rec.attribute7
7778 ,p_attribute8 => l_structure_rec.attribute8
7779 ,p_attribute9 => l_structure_rec.attribute9
7780 ,p_attribute10 => l_structure_rec.attribute10
7781 ,p_attribute11 => l_structure_rec.attribute11
7782 ,p_attribute12 => l_structure_rec.attribute12
7783 ,p_attribute13 => l_structure_rec.attribute13
7784 ,p_attribute14 => l_structure_rec.attribute14
7785 ,p_attribute15 => l_structure_rec.attribute15
7786 ,p_approval_reqd_flag =>l_wp_attr_rec.WP_APPROVAL_REQD_FLAG
7787 ,p_auto_publish_flag =>l_wp_attr_rec.WP_AUTO_PUBLISH_FLAG
7788 ,p_approver_source_id =>l_wp_attr_rec.WP_APPROVER_SOURCE_ID
7789 ,p_approver_source_type =>l_wp_attr_rec.WP_APPROVER_SOURCE_TYPE
7790 ,p_default_display_lvl =>l_wp_attr_rec.WP_DEFAULT_DISPLAY_LVL
7791 ,p_enable_wp_version_flag =>l_wp_attr_rec.WP_ENABLE_VERSION_FLAG
7792 ,p_auto_pub_upon_creation_flag =>l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
7793 ,p_auto_sync_txn_date_flag =>l_wp_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
7794 ,p_txn_date_sync_buf_days =>l_wp_attr_rec.TXN_DATE_SYNC_BUF_DAYS
7795 --LDENG
7796 ,p_lifecycle_version_id => l_wp_attr_rec.LIFECYCLE_VERSION_ID
7797 ,p_current_phase_version_id => l_wp_attr_rec.CURRENT_PHASE_VERSION_ID
7798 --END LDENG
7799 ,p_PROGRESS_CYCLE_ID =>l_progress_attr_rec.PROGRESS_CYCLE_ID
7800 ,p_wq_enable_flag =>l_progress_attr_rec.WQ_ENABLE_FLAG
7801 ,p_remain_effort_enable_flag =>l_progress_attr_rec.REMAIN_EFFORT_ENABLE_FLAG
7802 ,p_percent_comp_enable_flag =>l_progress_attr_rec.PERCENT_COMP_ENABLE_FLAG
7803 ,p_next_progress_update_date =>l_progress_attr_rec.NEXT_PROGRESS_UPDATE_DATE
7804 ,x_structure_id => l_structure_id
7805 ,x_return_status => l_return_status
7806 ,x_msg_count => l_msg_count
7807 ,x_msg_data => l_msg_data );
7808
7809 IF (p_debug_mode = 'Y') THEN
7810 pa_debug.debug('done: '||l_return_status);
7811 END IF;
7812
7813 --Check if there is any error.
7814 l_msg_count := FND_MSG_PUB.count_msg;
7815 IF l_msg_count > 0 THEN
7816 x_msg_count := l_msg_count;
7817 IF x_msg_count = 1 THEN
7818 x_msg_data := l_msg_data;
7819 END IF;
7820 RAISE FND_API.G_EXC_ERROR;
7821 END IF;
7822
7823
7824 /*
7825 -- Get all of the tasks for the source project
7826 OPEN l_get_tasks_csr(p_src_project_id);
7827 LOOP
7828 FETCH l_get_tasks_csr INTO l_tasks_rec;
7829 EXIT WHEN l_get_tasks_csr%NOTFOUND;
7830
7831 -- CREATE_TASK
7832 PA_TASK_PUB1.CREATE_TASK
7833 ( p_validate_only => FND_API.G_FALSE
7834 ,p_object_type => 'PA_TASKS'
7835 ,p_project_id => p_dest_project_id
7836 ,p_structure_id => l_structure_id
7837 ,p_task_number => l_tasks_rec.element_number
7838 ,p_task_name => l_tasks_rec.name
7839 ,p_task_manager_id => l_tasks_rec.manager_person_id
7840 ,p_scheduled_start_date => sysdate
7841 ,p_scheduled_finish_date => sysdate
7842 ,x_task_id => l_task_id
7843 ,x_return_status => l_return_status
7844 ,x_msg_count => l_msg_count
7845 ,x_msg_data => l_msg_data);
7846
7847 --Check if there is any error.
7848 l_msg_count := FND_MSG_PUB.count_msg;
7849 IF l_msg_count > 0 THEN
7850 x_msg_count := l_msg_count;
7851 IF x_msg_count = 1 THEN
7852 x_msg_data := l_msg_data;
7853 END IF;
7854 RAISE FND_API.G_EXC_ERROR;
7855 END IF;
7856
7857 -- Store the newly created task ID
7858 l_task_id_ref(l_tasks_rec.proj_element_id) := l_task_id;
7859 END LOOP;
7860 CLOSE l_get_tasks_csr;
7861 */
7862
7863 --commented by hsiu
7864 --Get structure type
7865 -- l_is_workplan := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'WORKPLAN');
7866 -- l_is_billing := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'BILLING');
7867 -- l_is_costing := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'COSTING');
7868
7869 -- IF (l_is_billing = 'Y') OR (l_is_costing = 'Y') THEN
7870 -- --Check if it has any published version.
7871 -- If (pa_project_structure_utils.CHECK_PUBLISHED_VER_EXISTS(
7872 -- p_src_project_id, l_structure_rec.proj_element_id) = 'Y') THEN
7873 -- l_structure_pub_status := 'Y';
7874 -- ELSE
7875 -- l_structure_pub_status := 'N';
7876 -- END IF;
7877 -- ELSE
7878 -- l_structure_pub_status := 'N';
7879 -- END IF;
7880 --end commented code by hsiu
7881
7882 -- Copy all of the structure versions, either published or unpublished from the source structure
7883 -- depending on the flag
7884 OPEN l_get_structure_versions_csr(p_src_project_id,
7885 l_structure_rec.proj_element_id,
7886 l_select);
7887 LOOP
7888 FETCH l_get_structure_versions_csr INTO l_structure_version_id;
7889 EXIT WHEN l_get_structure_versions_csr%NOTFOUND;
7890
7891 -- Get structure version info
7892 OPEN l_get_structure_ver_csr(l_structure_version_id);
7893 FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
7894 CLOSE l_get_structure_ver_csr;
7895
7896
7897 IF (p_debug_mode = 'Y') THEN
7898 pa_debug.debug('create structure version');
7899 END IF;
7900 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
7901 ( p_validate_only => p_validate_only
7902 ,p_structure_id => l_structure_id
7903 ,p_attribute_category => l_structure_ver_rec.attribute_category
7904 ,p_attribute1 => l_structure_ver_rec.attribute1
7905 ,p_attribute2 => l_structure_ver_rec.attribute2
7906 ,p_attribute3 => l_structure_ver_rec.attribute3
7907 ,p_attribute4 => l_structure_ver_rec.attribute4
7908 ,p_attribute5 => l_structure_ver_rec.attribute5
7909 ,p_attribute6 => l_structure_ver_rec.attribute6
7910 ,p_attribute7 => l_structure_ver_rec.attribute7
7911 ,p_attribute8 => l_structure_ver_rec.attribute8
7912 ,p_attribute9 => l_structure_ver_rec.attribute9
7913 ,p_attribute10 => l_structure_ver_rec.attribute10
7914 ,p_attribute11 => l_structure_ver_rec.attribute11
7915 ,p_attribute12 => l_structure_ver_rec.attribute12
7916 ,p_attribute13 => l_structure_ver_rec.attribute13
7917 ,p_attribute14 => l_structure_ver_rec.attribute14
7918 ,p_attribute15 => l_structure_ver_rec.attribute15
7919 ,x_structure_version_id => l_new_structure_version_id
7920 ,x_return_status => l_return_status
7921 ,x_msg_count => l_msg_count
7922 ,x_msg_data => l_msg_data );
7923
7924 --Check if there is any error.
7925 l_msg_count := FND_MSG_PUB.count_msg;
7926 IF l_msg_count > 0 THEN
7927 x_msg_count := l_msg_count;
7928 IF x_msg_count = 1 THEN
7929 x_msg_data := l_msg_data;
7930 END IF;
7931 RAISE FND_API.G_EXC_ERROR;
7932 END IF;
7933
7934 --Structure version attributes creates after tasks are created
7935
7936 -- If structure is workplan type create schedule version record
7937 if (l_structure_type = 'WORKPLAN') OR (l_structure_type IS NULL) THEN
7938
7939 OPEN l_get_ver_schedule_attr_csr(l_structure_version_id);
7940 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
7941 CLOSE l_get_ver_schedule_attr_csr;
7942
7943 --Hsiu added
7944 --Project Dates changes: Calculate delta
7945 IF (l_target_start_date IS NULL) THEN
7946 l_delta := 0;
7947 ELSE
7948 l_delta := l_target_start_date - l_ver_schedule_attr_rec.scheduled_start_date;
7949 END IF;
7950
7951 --calcuate scheduled start and finish dates
7952 IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_start_date + l_delta) THEN
7953 l_scheduled_start_date := l_target_finish_date;
7954 ELSE
7955 l_scheduled_start_date := l_ver_schedule_attr_rec.scheduled_start_date + l_delta;
7956 END IF;
7957
7958 IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_finish_date + l_delta) THEN
7959 l_scheduled_finish_date := l_target_finish_date;
7960 ELSE
7961 l_scheduled_finish_date := l_ver_schedule_attr_rec.scheduled_finish_date + l_delta;
7962 END IF;
7963 -- end calculate scheduled start and finish dates
7964
7965
7966 IF (p_debug_mode = 'Y') THEN
7967 pa_debug.debug('create schedule version for structure');
7968 END IF;
7969
7970 l_struc_scheduled_start_date := l_scheduled_start_date;
7971 l_struc_scheduled_finish_date := l_scheduled_finish_date;
7972
7973 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
7974 ( p_validate_only => FND_API.G_FALSE
7975 ,p_element_version_id => l_new_structure_version_id
7976 ,p_calendar_id => l_ver_schedule_attr_rec.calendar_id
7977 ,p_scheduled_start_date => l_scheduled_start_date
7978 ,p_scheduled_end_date => l_scheduled_finish_date
7979 ,p_obligation_start_date => l_ver_schedule_attr_rec.obligation_start_date
7980 ,p_obligation_end_date => l_ver_schedule_attr_rec.obligation_finish_date
7981 ,p_actual_start_date => l_ver_schedule_attr_rec.actual_start_date
7982 ,p_actual_finish_date => l_ver_schedule_attr_rec.actual_finish_date
7983 ,p_estimate_start_date => l_ver_schedule_attr_rec.estimated_start_date
7984 ,p_estimate_finish_date => l_ver_schedule_attr_rec.estimated_finish_date
7985 ,p_duration => l_ver_schedule_attr_rec.duration
7986 ,p_early_start_date => l_ver_schedule_attr_rec.early_start_date
7987 ,p_early_end_date => l_ver_schedule_attr_rec.early_finish_date
7988 ,p_late_start_date => l_ver_schedule_attr_rec.late_start_date
7989 ,p_late_end_date => l_ver_schedule_attr_rec.late_finish_date
7990 ,p_milestone_flag => l_ver_schedule_attr_rec.milestone_flag
7991 ,p_critical_flag => l_ver_schedule_attr_rec.critical_flag
7992 ,p_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
7993 ,p_PLANNED_EFFORT => l_ver_schedule_attr_rec.PLANNED_EFFORT
7994 ,x_pev_schedule_id => l_pev_schedule_id
7995 ,x_return_status => l_return_status
7996 ,x_msg_count => l_msg_count
7997 ,x_msg_data => l_msg_data );
7998
7999 --Check if there is any error.
8000 l_msg_count := FND_MSG_PUB.count_msg;
8001 IF l_msg_count > 0 THEN
8002 x_msg_count := l_msg_count;
8003 IF x_msg_count = 1 THEN
8004 x_msg_data := l_msg_data;
8005 END IF;
8006 RAISE FND_API.G_EXC_ERROR;
8007 END IF;
8008
8009 end if;
8010
8011
8012 -- Fetch all task versions for this structure version
8013 OPEN l_get_task_versions_csr(l_structure_version_id);
8014
8015 l_last_wbs_level := null;
8016
8017 LOOP
8018 FETCH l_get_task_versions_csr INTO l_task_versions_rec;
8019 EXIT WHEN l_get_task_versions_csr%NOTFOUND or p_copy_task_flag = 'N';
8020
8021 if l_last_wbs_level is null then
8022 -- first task version being created
8023 -- This task should have wbs level = 1
8024 l_ref_task_ver_id := l_new_structure_version_id;
8025 l_peer_or_sub := 'SUB';
8026 else
8027 if l_task_versions_rec.wbs_level > l_last_wbs_level then
8028 l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
8029 l_peer_or_sub := 'SUB';
8030 else
8031 l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
8032 l_peer_or_sub := 'PEER';
8033 end if;
8034 end if;
8035
8036
8037 --check if task already exist; if it does, then skip
8038 -- CREATE_TASK
8039 IF (p_debug_mode = 'Y') THEN
8040 pa_debug.debug('l_task_versions_rec.proj_elemnet_id = '||l_task_versions_rec.proj_element_id);
8041 END IF;
8042
8043 If (NOT (l_task_match_tbl.exists(l_task_versions_rec.proj_element_id))) THEN
8044
8045 OPEN l_get_tasks_csr(p_src_project_id, l_task_versions_rec.proj_element_id);
8046 FETCH l_get_tasks_csr INTO l_tasks_rec;
8047 CLOSE l_get_tasks_csr;
8048
8049 --commented by hsiu
8050 -- If (l_is_workplan = 'Y') AND (l_is_billing = 'N') AND (l_is_costing = 'N') THEN
8051 l_task_id := NULL;
8052 IF (l_structure_type = 'WORKPLAN') THEN
8053 --get new id
8054 select PA_TASKS_S.NEXTVAL into l_task_id from sys.dual;
8055 ELSE
8056 --id exists in pa_tasks. Need to find matching id by using task_number
8057 OPEN l_get_pa_tasks_csr(p_dest_project_id, l_tasks_rec.PA_TASK_NUMBER);
8058 FETCH l_get_pa_tasks_csr into l_task_id;
8059 CLOSE l_get_pa_tasks_csr;
8060 END IF;
8061
8062 IF (p_debug_mode = 'Y') THEN
8063 pa_debug.debug('inserting into task with id'||l_task_id);
8064 END IF;
8065
8066 OPEN get_init_task_stat(l_tasks_rec.TYPE_ID);
8067 FETCH get_init_task_stat into l_init_status_code;
8068 CLOSE get_init_task_stat;
8069
8070 PA_PROJ_ELEMENTS_PKG.Insert_Row(
8071 X_ROW_ID => l_rowid
8072 ,X_PROJ_ELEMENT_ID => l_task_id
8073 ,X_PROJECT_ID => p_dest_project_id
8074 ,X_OBJECT_TYPE => 'PA_TASKS'
8075 ,X_ELEMENT_NUMBER => l_tasks_rec.ELEMENT_NUMBER
8076 ,X_NAME => l_tasks_rec.NAME
8077 ,X_DESCRIPTION => l_tasks_rec.DESCRIPTION
8078 ,X_STATUS_CODE => l_init_status_code
8079 ,X_WF_STATUS_CODE => l_tasks_rec.WF_STATUS_CODE
8080 ,X_PM_PRODUCT_CODE => l_tasks_rec.PM_SOURCE_CODE
8081 ,X_PM_TASK_REFERENCE => l_tasks_rec.PM_SOURCE_REFERENCE
8082 ,X_CLOSED_DATE => l_tasks_rec.CLOSED_DATE
8083 ,X_LOCATION_ID => l_tasks_rec.LOCATION_ID
8084 ,X_MANAGER_PERSON_ID => l_tasks_rec.MANAGER_PERSON_ID
8085 ,X_CARRYING_OUT_ORGANIZATION_ID => l_tasks_rec.CARRYING_OUT_ORGANIZATION_ID
8086 ,X_TYPE_ID => l_tasks_rec.TYPE_ID
8087 ,X_PRIORITY_CODE => l_tasks_rec.PRIORITY_CODE
8088 ,X_INC_PROJ_PROGRESS_FLAG => l_tasks_rec.INC_PROJ_PROGRESS_FLAG
8089 ,X_REQUEST_ID => l_tasks_rec.REQUEST_ID
8090 ,X_PROGRAM_APPLICATION_ID => l_tasks_rec.PROGRAM_APPLICATION_ID
8091 ,X_PROGRAM_ID => l_tasks_rec.PROGRAM_ID
8092 ,X_PROGRAM_UPDATE_DATE => l_tasks_rec.PROGRAM_UPDATE_DATE
8093 ,X_LINK_TASK_FLAG => l_tasks_rec.LINK_TASK_FLAG
8094 ,X_ATTRIBUTE_CATEGORY => l_tasks_rec.ATTRIBUTE_CATEGORY
8095 ,X_ATTRIBUTE1 => l_tasks_rec.ATTRIBUTE1
8096 ,X_ATTRIBUTE2 => l_tasks_rec.ATTRIBUTE2
8097 ,X_ATTRIBUTE3 => l_tasks_rec.ATTRIBUTE3
8098 ,X_ATTRIBUTE4 => l_tasks_rec.ATTRIBUTE4
8099 ,X_ATTRIBUTE5 => l_tasks_rec.ATTRIBUTE5
8100 ,X_ATTRIBUTE6 => l_tasks_rec.ATTRIBUTE6
8101 ,X_ATTRIBUTE7 => l_tasks_rec.ATTRIBUTE7
8102 ,X_ATTRIBUTE8 => l_tasks_rec.ATTRIBUTE8
8103 ,X_ATTRIBUTE9 => l_tasks_rec.ATTRIBUTE9
8104 ,X_ATTRIBUTE10 => l_tasks_rec.ATTRIBUTE10
8105 ,X_ATTRIBUTE11 => l_tasks_rec.ATTRIBUTE11
8106 ,X_ATTRIBUTE12 => l_tasks_rec.ATTRIBUTE12
8107 ,X_ATTRIBUTE13 => l_tasks_rec.ATTRIBUTE13
8108 ,X_ATTRIBUTE14 => l_tasks_rec.ATTRIBUTE14
8109 ,X_ATTRIBUTE15 => l_tasks_rec.ATTRIBUTE15
8110 ,X_TASK_WEIGHTING_DERIV_CODE => NULL
8111 ,X_WORK_ITEM_CODE => l_tasks_rec.WQ_ITEM_CODE
8112 ,X_UOM_CODE => l_tasks_rec.WQ_UOM_CODE
8113 ,X_WQ_ACTUAL_ENTRY_CODE => l_tasks_rec.WQ_ACTUAL_ENTRY_CODE
8114 ,X_TASK_PROGRESS_ENTRY_PAGE_ID =>l_tasks_rec.TASK_PROGRESS_ENTRY_PAGE_ID
8115 ,X_PARENT_STRUCTURE_ID => l_structure_id
8116 ,X_PHASE_CODE => l_tasks_rec.PHASE_CODE
8117 ,X_PHASE_VERSION_ID => l_tasks_rec.PHASE_VERSION_ID
8118 ,X_SOURCE_OBJECT_ID => p_dest_project_id
8119 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
8120 );
8121
8122 -- insert task id into table so task will not be duplicated.
8123 l_task_match_tbl(l_tasks_rec.proj_element_id) := l_task_id;
8124
8125 ELSE
8126 --copy the id into l_task_id;
8127 l_task_id := l_task_match_tbl(l_task_versions_rec.proj_element_id);
8128 END IF;
8129
8130 IF (p_debug_mode = 'Y') THEN
8131 pa_debug.debug('l_task_id = '||l_task_id);
8132 END IF;
8133
8134
8135 IF (p_debug_mode = 'Y') THEN
8136 pa_debug.debug('before creating version:'||l_ref_task_ver_id||','||l_peer_or_sub);
8137 END IF;
8138
8139 OPEN get_task_ver_weighting(l_task_versions_rec.element_version_id);
8140 FETCH get_task_ver_weighting into l_weighting_percentage;
8141 CLOSE get_task_ver_weighting;
8142
8143 --hsiu: task version status changes
8144 IF (l_dest_template_flag = 'N') THEN
8145 --check if structure is shared
8146 -- if shared, check if versioned
8147 -- 'WORKING' if versioned; 'PUBLISHED' if not
8148 -- if split, check if 'FINANCIAL'
8149 -- 'PUBLISHED' if financial
8150 -- check if versioned
8151 -- 'WORKING' if versioend; 'PUBLISHED' if not
8152 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_dest_project_id)) THEN
8153 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
8154 l_task_unpub_ver_status_code := 'WORKING';
8155 ELSE
8156 l_task_unpub_ver_status_code := 'PUBLISHED';
8157 END IF;
8158 ELSE --split
8159 IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL') AND
8160 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
8161 l_task_unpub_ver_status_code := 'PUBLISHED';
8162 ELSE --workplan only
8163 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
8164 l_task_unpub_ver_status_code := 'WORKING';
8165 ELSE
8166 l_task_unpub_ver_status_code := 'PUBLISHED';
8167 END IF;
8168 END IF;
8169 END IF;
8170 ELSE
8171 l_task_unpub_ver_status_code := 'WORKING';
8172 END IF;
8173 --end task version status changes
8174
8175 PA_TASK_PUB1.CREATE_TASK_VERSION
8176 ( p_validate_only => FND_API.G_FALSE
8177 ,p_ref_task_version_id => l_ref_task_ver_id
8178 ,p_peer_or_sub => l_peer_or_sub
8179 ,p_task_id => l_task_id--l_task_id_ref(l_task_versions_rec.proj_element_id)
8180 ,p_WEIGHTING_PERCENTAGE => l_weighting_percentage
8181 ,p_TASK_UNPUB_VER_STATUS_CODE => l_TASK_UNPUB_VER_STATUS_CODE
8182 ,x_task_version_id => l_task_version_id
8183 ,x_return_status => l_return_status
8184 ,x_msg_count => l_msg_count
8185 ,x_msg_data => l_msg_data);
8186
8187 t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
8188
8189 --Check if there is any error.
8190 l_msg_count := FND_MSG_PUB.count_msg;
8191 IF l_msg_count > 0 THEN
8192 x_msg_count := l_msg_count;
8193 IF x_msg_count = 1 THEN
8194 x_msg_data := l_msg_data;
8195 END IF;
8196 RAISE FND_API.G_EXC_ERROR;
8197 END IF;
8198
8199 if (l_structure_type = 'WORKPLAN') or (l_structure_type IS NULL) THEN
8200 -- Get task version schedule attributes
8201 OPEN l_get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id);
8202 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
8203 CLOSE l_get_ver_schedule_attr_csr;
8204
8205 --calcuate scheduled start and finish dates
8206 IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_start_date + l_delta) THEN
8207 l_scheduled_start_date := l_target_finish_date;
8208 ELSE
8209 l_scheduled_start_date := l_ver_schedule_attr_rec.scheduled_start_date + l_delta;
8210 END IF;
8211
8212 IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_finish_date + l_delta) THEN
8213 l_scheduled_finish_date := l_target_finish_date;
8214 ELSE
8215 l_scheduled_finish_date := l_ver_schedule_attr_rec.scheduled_finish_date + l_delta;
8216 END IF;
8217 -- end calculate scheduled start and finish dates
8218
8219 -- xxlu added DFF attributes
8220 PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
8221 ( p_validate_only => FND_API.G_FALSE
8222 ,p_element_version_id => l_task_version_id
8223 ,p_calendar_id => l_ver_schedule_attr_rec.calendar_id
8224 -- anlee
8225 -- Dates changes
8226 ,p_scheduled_start_date => l_scheduled_start_date
8227 ,p_scheduled_end_date => l_scheduled_finish_date
8228 -- End of changes
8229 ,p_obligation_start_date => l_ver_schedule_attr_rec.obligation_start_date
8230 ,p_obligation_end_date => l_ver_schedule_attr_rec.obligation_finish_date
8231 ,p_actual_start_date => l_ver_schedule_attr_rec.actual_start_date
8232 ,p_actual_finish_date => l_ver_schedule_attr_rec.actual_finish_date
8233 ,p_estimate_start_date => l_ver_schedule_attr_rec.estimated_start_date
8234 ,p_estimate_finish_date => l_ver_schedule_attr_rec.estimated_finish_date
8235 ,p_duration => l_ver_schedule_attr_rec.duration
8236 ,p_early_start_date => l_ver_schedule_attr_rec.early_start_date
8237 ,p_early_end_date => l_ver_schedule_attr_rec.early_finish_date
8238 ,p_late_start_date => l_ver_schedule_attr_rec.late_start_date
8239 ,p_late_end_date => l_ver_schedule_attr_rec.late_finish_date
8240 ,p_milestone_flag => l_ver_schedule_attr_rec.milestone_flag
8241 ,p_critical_flag => l_ver_schedule_attr_rec.critical_flag
8242 ,p_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
8243 ,p_PLANNED_EFFORT => l_ver_schedule_attr_rec.PLANNED_EFFORT
8244 ,p_attribute_category => l_ver_schedule_attr_rec.attribute_category
8245 ,p_attribute1 => l_ver_schedule_attr_rec.attribute1
8246 ,p_attribute2 => l_ver_schedule_attr_rec.attribute2
8247 ,p_attribute3 => l_ver_schedule_attr_rec.attribute3
8248 ,p_attribute4 => l_ver_schedule_attr_rec.attribute4
8249 ,p_attribute5 => l_ver_schedule_attr_rec.attribute5
8250 ,p_attribute6 => l_ver_schedule_attr_rec.attribute6
8251 ,p_attribute7 => l_ver_schedule_attr_rec.attribute7
8252 ,p_attribute8 => l_ver_schedule_attr_rec.attribute8
8253 ,p_attribute9 => l_ver_schedule_attr_rec.attribute9
8254 ,p_attribute10 => l_ver_schedule_attr_rec.attribute10
8255 ,p_attribute11 => l_ver_schedule_attr_rec.attribute11
8256 ,p_attribute12 => l_ver_schedule_attr_rec.attribute12
8257 ,p_attribute13 => l_ver_schedule_attr_rec.attribute13
8258 ,p_attribute14 => l_ver_schedule_attr_rec.attribute14
8259 ,p_attribute15 => l_ver_schedule_attr_rec.attribute15
8260 ,x_pev_schedule_id => l_pev_schedule_id
8261 ,x_return_status => l_return_status
8262 ,x_msg_count => l_msg_count
8263 ,x_msg_data => l_msg_data );
8264 -- end xxlu changes
8265
8266 --Check if there is any error.
8267 l_msg_count := FND_MSG_PUB.count_msg;
8268 IF l_msg_count > 0 THEN
8269 x_msg_count := l_msg_count;
8270 IF x_msg_count = 1 THEN
8271 x_msg_data := l_msg_data;
8272 END IF;
8273 RAISE FND_API.G_EXC_ERROR;
8274 END IF;
8275 end if;
8276
8277 l_last_wbs_level := l_task_versions_rec.wbs_level;
8278 l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;--l_task_versions_rec.element_version_id;
8279
8280 END LOOP;
8281 CLOSE l_get_task_versions_csr;
8282
8283 --Delete linking tasks in PA_TASKS if this is a financial structure
8284 IF (l_structure_type = 'FINANCIAL' or l_structure_type IS NULL) THEN
8285 OPEN l_linking_tasks_csr(p_src_project_id, p_dest_project_id);
8286 LOOP
8287 FETCH l_linking_tasks_csr into l_task_delete;
8288 EXIT WHEN l_linking_tasks_csr%NOTFOUND;
8289
8290 select a.record_version_number, 0
8291 INTO l_task_delete_rvn, l_task_delete_wbs_rvn
8292 from pa_tasks a
8293 where a.task_id = l_task_delete;
8294
8295 PA_TASKS_MAINT_PUB.DELETE_TASK(
8296 p_init_msg_list => FND_API.G_FALSE
8297 ,p_commit => FND_API.G_FALSE
8298 ,p_project_id => p_dest_project_id
8299 ,p_task_id => l_task_delete
8300 ,p_record_version_number => l_task_delete_rvn
8301 ,p_wbs_record_version_number => l_task_delete_wbs_rvn
8302 ,x_return_status => l_return_status
8303 ,x_msg_count => l_msg_count
8304 ,x_msg_data => l_msg_data
8305 );
8306 l_msg_count := FND_MSG_PUB.count_msg;
8307 IF l_msg_count > 0 THEN
8308 x_msg_count := l_msg_count;
8309 IF x_msg_count = 1 THEN
8310 x_msg_data := l_msg_data;
8311 END IF;
8312 RAISE FND_API.G_EXC_ERROR;
8313 END IF;
8314
8315 END LOOP;
8316 CLOSE l_linking_tasks_csr;
8317 END IF;
8318
8319 -- Get structure version attributes
8320 OPEN l_get_structure_ver_attr_csr(l_structure_version_id);
8321 FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
8322 CLOSE l_get_structure_ver_attr_csr;
8323
8324 IF (p_debug_mode = 'Y') THEN
8325 pa_debug.debug('create structure version attribute');
8326 END IF;
8327
8328 IF (l_copy = 1) THEN
8329 l_status_code := 'STRUCTURE_WORKING';
8330 l_baseline_flag := 'N';
8331 l_latest_flag := 'N';
8332 ELSIF (l_copy = 2) THEN
8333 l_status_code := 'STRUCTURE_PUBLISHED';
8334 l_baseline_flag := 'Y';
8335 l_latest_flag := 'Y';
8336 ELSIF (l_copy = 3) THEN
8337 l_status_code := l_structure_ver_attr_rec.status_code;
8338 l_baseline_flag := l_structure_ver_attr_rec.current_flag;
8339 l_latest_flag := l_structure_ver_attr_rec.LATEST_EFF_PUBLISHED_FLAG;
8340 ELSIF (l_copy = 4) THEN
8341 l_status_code := 'STRUCTURE_PUBLISHED';
8342 l_baseline_flag := 'N';
8343 l_latest_flag := 'Y';
8344 END IF;
8345
8346 --moved here for baseline purpose
8347 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
8348 ( p_validate_only => FND_API.G_FALSE
8349 ,p_structure_version_id => l_new_structure_version_id
8350 -- ,p_structure_version_name => l_name
8351 --hsiu
8352 --fix bug 2640307
8353 --structure version name needs to be unique; copy from source.
8354 ,p_structure_version_name => l_structure_ver_attr_rec.name
8355 --end bug 2640307 fix
8356 ,p_structure_version_desc => l_structure_ver_attr_rec.description
8357 ,p_effective_date => l_structure_ver_attr_rec.effective_date
8358 ,p_latest_eff_published_flag => l_latest_flag
8359 ,p_locked_status_code => 'UNLOCKED'
8360 ,p_struct_version_status_code => l_status_code
8361 ,p_baseline_current_flag => l_baseline_flag
8362 ,p_baseline_original_flag => 'N'
8363 ,x_pev_structure_id => l_pev_structure_id
8364 ,x_return_status => l_return_status
8365 ,x_msg_count => l_msg_count
8366 ,x_msg_data => l_msg_data );
8367
8368 --Check if there is any error.
8369 l_msg_count := FND_MSG_PUB.count_msg;
8370 IF l_msg_count > 0 THEN
8371 x_msg_count := l_msg_count;
8372 IF x_msg_count = 1 THEN
8373 x_msg_data := l_msg_data;
8374 END IF;
8375 RAISE FND_API.G_EXC_ERROR;
8376 END IF;
8377
8378 --If status is published and latest version, or template
8379 --update project level schedule dates
8380 IF ((l_status_code = 'STRUCTURE_PUBLISHED') and (l_latest_flag = 'Y')) OR (l_dest_template_flag = 'Y') THEN
8381 OPEN get_proj_rec_ver_number(p_dest_project_id);
8382 FETCH get_proj_rec_ver_number into l_proj_record_ver_number;
8383 CLOSE get_proj_rec_ver_number;
8384
8385 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES(
8386 p_validate_only => FND_API.G_FALSE
8387 ,p_project_id => p_dest_project_id
8388 ,p_date_type => 'SCHEDULED'
8389 ,p_start_date => l_struc_scheduled_start_date
8390 ,p_finish_date => l_struc_scheduled_finish_date
8391 ,p_record_version_number => l_proj_record_ver_number
8392 ,x_return_status => l_return_status
8393 ,x_msg_count => l_msg_count
8394 ,x_msg_data => l_msg_data
8395 );
8396
8397 IF l_msg_count > 0 THEN
8398 x_msg_count := l_msg_count;
8399 IF x_msg_count = 1 THEN
8400 x_msg_data := l_msg_data;
8401 END IF;
8402 RAISE FND_API.G_EXC_ERROR;
8403 END IF;
8404 END IF;
8405
8406 END LOOP;
8407 CLOSE l_get_structure_versions_csr;
8408
8409 --Commented by hsiu
8410 --END IF;
8411 --END IF for check if project is template and if type = WORKPLAN
8412 END LOOP;
8413 CLOSE l_get_structure_csr;
8414 -- HSiu: commented old code
8415 -- end if;
8416
8417
8418 x_return_status := FND_API.G_RET_STS_SUCCESS;
8419
8420 IF (p_commit = FND_API.G_TRUE) THEN
8421 COMMIT;
8422 END IF;
8423
8424 IF (p_debug_mode = 'Y') THEN
8425 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE END');
8426 END IF;
8427
8428 EXCEPTION
8429 when FND_API.G_EXC_ERROR then
8430 if p_commit = FND_API.G_TRUE then
8431 rollback to copy_structure_pvt;
8432 end if;
8433 x_return_status := FND_API.G_RET_STS_ERROR;
8434 when FND_API.G_EXC_UNEXPECTED_ERROR then
8435 if p_commit = FND_API.G_TRUE then
8436 rollback to copy_structure_pvt;
8437 end if;
8438 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8439 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8440 p_procedure_name => 'COPY_STRUCTURE',
8441 p_error_text => SUBSTRB(SQLERRM,1,240));
8442 when OTHERS then
8443 if p_commit = FND_API.G_TRUE then
8444 rollback to copy_structure_pvt;
8445 end if;
8446 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8447 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8448 p_procedure_name => 'COPY_STRUCTURE',
8449 p_error_text => SUBSTRB(SQLERRM,1,240));
8450 raise;
8451 END COPY_STRUCTURE;
8452
8453 -- Added new api below to re-order the display sequence and wbs numbering
8454 -- Added for Huawei enhancement - bug 13923366 by skkoppul
8455 PROCEDURE REFRESH_STRUCTURE_VERSION
8456 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
8457 ,p_project_id IN NUMBER
8458 ,p_structure_version_id IN NUMBER
8459 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8460 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8461 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8462 )
8463 IS
8464
8465 -- Sridhar Huawei 18-Sept Commented this cursor by changing the cursor name to c0
8466
8467 CURSOR c0( c_project_id NUMBER ) IS
8468 SELECT b.proj_element_id, b.scheduled_start_date,
8469 b.scheduled_finish_date, a.element_version_id, duration,
8470 a.wbs_number, a.wbs_level, a.display_sequence
8471 FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B
8472 WHERE a.parent_structure_version_id = p_structure_version_id
8473 AND a.element_version_id = b.element_version_id
8474 AND a.project_id = b.project_id
8475 AND a.project_id = c_project_id
8476 ORDER BY a.display_sequence asc , abs(a.last_updated_by) asc , a.wbs_level asc; -- Huawei changes 14556729
8477
8478 -- Sridhar Huawei 18-Sept , replace the C1 cursor with this new code.
8479 /*
8480 CURSOR c1( c_project_id NUMBER ) IS
8481 SELECT PROJ_ELEMENT_ID, SCHEDULED_START_DATE,
8482 SCHEDULED_FINISH_DATE, ELEMENT_VERSION_ID, DURATION, WBS_NUMBER,
8483 OLD_LEVEL , DISPLAY_SEQUENCE, LEVEL WBS_LEVEL
8484 FROM
8485 (
8486 select /*+ ordered use_nl(b a t) index(t pa_tasks_n8) index(a PA_PROJ_ELEMENT_VERSIONS_N1) index(t PA_PROJ_ELEM_VER_SCHEDULE_U2) */
8487 /* t.project_id , t.task_id , t.parent_task_id , a.display_sequence ,
8488 a.level_sequence, a.parent_structure_version_id , B.PROJ_ELEMENT_ID,
8489 B.SCHEDULED_START_DATE, B.SCHEDULED_FINISH_DATE, A.ELEMENT_VERSION_ID, DURATION,
8490 A.WBS_NUMBER, A.WBS_LEVEL OLD_LEVEL
8491 from
8492 PA_TASKS T, PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B
8493 where
8494 T.PROJECT_ID = p_project_id AND A.PROJ_ELEMENT_ID = T.TASK_ID
8495 AND A.PROJECT_ID = T.PROJECT_ID --AND A.PARENT_STRUCTURE_VERSION_ID = :B1
8496 AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8497 ) r
8498 START WITH r.PARENT_TASK_ID IS NULL CONNECT BY
8499 PRIOR r.TASK_ID = r.PARENT_TASK_ID ORDER SIBLINGS BY DISPLAY_SEQUENCE ,
8500 LEVEL_SEQUENCE; */
8501
8502 CURSOR c1
8503 IS
8504 SELECT PROJ_ELEMENT_ID, SCHEDULED_START_DATE,
8505 SCHEDULED_FINISH_DATE, ELEMENT_VERSION_ID, DURATION, WBS_NUMBER,
8506 OLD_LEVEL , DISPLAY_SEQUENCE, LEVEL WBS_LEVEL ,
8507 SYS_CONNECT_BY_PATH(task_id, '/') connect_path,
8508 connect_by_isleaf leaf_node
8509 FROM PA_PROJ_ELEMENTS_TMP r
8510 START WITH r.PARENT_TASK_ID IS NULL CONNECT BY
8511 PRIOR r.TASK_ID = r.PARENT_TASK_ID ORDER SIBLINGS BY DISPLAY_SEQUENCE , LEVEL_SEQUENCE;
8512
8513
8514 /* commented for bug#14765516 */
8515 /*TYPE c_array IS TABLE OF c1%ROWTYPE;
8516 l_data c_array;*/
8517 /* Code change for bug#14765516 - Starts */
8518 l_plsql_max_array_size CONSTANT NUMBER := 100;
8519
8520 TYPE PROJ_ELEMENT_ID_t IS TABLE OF
8521 PA_PROJ_ELEMENTS_TMP.PROJ_ELEMENT_ID%TYPE;
8522 TYPE SCHEDULED_START_DATE_t IS TABLE OF
8523 PA_PROJ_ELEMENTS_TMP.SCHEDULED_START_DATE%TYPE;
8524 TYPE SCHEDULED_FINISH_DATE_t IS TABLE OF
8525 PA_PROJ_ELEMENTS_TMP.SCHEDULED_FINISH_DATE%TYPE;
8526 TYPE ELEMENT_VERSION_ID_t IS TABLE OF
8527 PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
8528 TYPE duration_t IS TABLE OF PA_PROJ_ELEMENTS_TMP.duration%TYPE;
8529
8530 TYPE WBS_NUMBER_T IS TABLE OF PA_PROJ_ELEMENTS_TMP.WBS_NUMBER%TYPE;
8531 TYPE OLD_LEVEL_T IS TABLE OF PA_PROJ_ELEMENTS_TMP.OLD_LEVEL%TYPE;
8532 TYPE DISPLAY_SEQUENCE_T IS TABLE OF PA_PROJ_ELEMENTS_TMP.DISPLAY_SEQUENCE%TYPE;
8533 TYPE WBS_LEVEL_T IS TABLE OF PA_PROJ_ELEMENT_VERSIONS.WBS_LEVEL%TYPE;
8534
8535 TYPE connect_path_t IS TABLE OF VARCHAR2(4000);
8536 TYPE leaf_node_t IS TABLE OF NUMBER;
8537
8538 v_PROJ_ELEMENT_ID PROJ_ELEMENT_ID_t;
8539 v_SCHEDULED_START_DATE SCHEDULED_START_DATE_t;
8540 v_SCHEDULED_FINISH_DATE SCHEDULED_FINISH_DATE_t;
8541 v_ELEMENT_VERSION_ID ELEMENT_VERSION_ID_t;
8542 v_duration duration_t;
8543 v_WBS_NUMBER WBS_NUMBER_T;
8544 v_OLD_LEVEL OLD_LEVEL_T;
8545 v_DISPLAY_SEQUENCE DISPLAY_SEQUENCE_T;
8546 v_WBS_LEVEL WBS_LEVEL_T;
8547 v_connect_path connect_path_t;
8548 v_leaf_node leaf_node_t;
8549 /* Code change for bug#14765516 - Ends */
8550
8551 l_project_id NUMBER;
8552
8553 cnt1 NUMBER := 0;
8554 l_wbs_num VARCHAR2(60);
8555 l_prev_level NUMBER := 0 ;
8556 l_first NUMBER := 1 ;
8557
8558 l_return_status VARCHAR2(1);
8559 l_msg_count NUMBER;
8560 l_msg_data VARCHAR2(2000);
8561 BEGIN
8562
8563 IF (p_commit = FND_API.G_TRUE) THEN
8564 savepoint refresh_structure_ver;
8565 END IF;
8566
8567 IF p_project_id IS NULL AND p_structure_version_id IS NOT NULL THEN
8568 SELECT PROJECT_ID
8569 INTO l_project_id
8570 FROM PA_PROJ_ELEMENT_VERSIONS
8571 WHERE ELEMENT_VERSION_ID = p_structure_version_id;
8572 ELSIF p_project_id IS NOT NULL THEN
8573 l_project_id := p_project_id;
8574 ELSE
8575 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8576 p_msg_name => 'PA_INVALID_STR_VERSION_ID');
8577 RAISE FND_API.G_EXC_ERROR;
8578 END IF;
8579 /* Added below code to improve performance */
8580 delete PA_PROJ_ELEMENTS_TMP;
8581
8582 INSERT INTO PA_PROJ_ELEMENTS_TMP(PROJECT_ID, TASK_ID, PARENT_TASK_ID, DISPLAY_SEQUENCE, LEVEL_SEQUENCE, PARENT_STRUCTURE_VERSION_ID,
8583 PROJ_ELEMENT_ID, SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE, ELEMENT_VERSION_ID, DURATION, WBS_NUMBER, OLD_LEVEL, DEFER_CODE, TOP_TASK_ID) /* Modified insert statement for bug#14765516 */
8584 SELECT /*+ ordered use_nl(b a t) index(t pa_tasks_n8) index(a PA_PROJ_ELEMENT_VERSIONS_N1) index(t PA_PROJ_ELEM_VER_SCHEDULE_U2) */
8585 t.project_id , t.task_id , t.parent_task_id , a.display_sequence ,
8586 a.level_sequence, a.parent_structure_version_id , B.PROJ_ELEMENT_ID,
8587 B.SCHEDULED_START_DATE, B.SCHEDULED_FINISH_DATE, A.ELEMENT_VERSION_ID, DURATION,
8588 A.WBS_NUMBER, A.WBS_LEVEL OLD_LEVEL,a.defer_code, t.top_task_id
8589 from
8590 PA_TASKS T, PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B
8591 where
8592 T.PROJECT_ID = p_project_id AND A.PROJ_ELEMENT_ID = T.TASK_ID
8593 AND A.PROJECT_ID = T.PROJECT_ID --AND A.PARENT_STRUCTURE_VERSION_ID = :B1
8594 AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID;
8595
8596 OPEN c1;
8597 LOOP /* Code change for bug#14765516 - Starts */
8598 FETCH c1 BULK COLLECT INTO v_PROJ_ELEMENT_ID,v_SCHEDULED_START_DATE,v_SCHEDULED_FINISH_DATE,v_ELEMENT_VERSION_ID,v_duration,v_WBS_NUMBER,v_OLD_LEVEL,v_DISPLAY_SEQUENCE,v_WBS_LEVEL,v_connect_path,v_leaf_node LIMIT l_plsql_max_array_size;
8599
8600 FORALL i in v_PROJ_ELEMENT_ID.first..v_PROJ_ELEMENT_ID.last
8601 UPDATE PA_PROJ_ELEMENTS
8602 SET BASELINE_START_DATE=v_SCHEDULED_START_DATE(i),
8603 BASELINE_FINISH_DATE=v_SCHEDULED_FINISH_DATE(i),
8604 BASELINE_DURATION=v_duration(i),
8605 RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,0) + 1
8606 WHERE PROJ_ELEMENT_ID = v_PROJ_ELEMENT_ID(i);
8607
8608 FOR i IN v_PROJ_ELEMENT_ID.first..v_PROJ_ELEMENT_ID.last
8609 LOOP
8610 IF ( l_first = 1 ) THEN
8611 l_first := 0;
8612 l_wbs_num := '1';
8613 l_prev_level := 1;
8614 elsif l_prev_level = v_WBS_LEVEL(i) THEN
8615 IF ( instr(l_wbs_num,'.') <> 0 ) THEN
8616 l_wbs_num := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i)-1)-1)
8617 ||'.'
8618 ||TO_CHAR(SUBSTR(l_wbs_num,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i)-1)+1,LENGTH(l_wbs_num))+1);
8619 ELSE
8620 l_wbs_num := to_number(l_wbs_num)+1;
8621 END IF;
8622 elsif v_WBS_LEVEL(i) > l_prev_level THEN
8623 l_wbs_num := l_wbs_num ||'.1';
8624 elsif v_WBS_LEVEL(i) < l_prev_level THEN
8625 IF ( v_WBS_LEVEL(i) > 1 ) THEN
8626 l_wbs_num := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i))-1);
8627 IF ( instr(l_wbs_num,'.') <> 0 ) THEN
8628 l_wbs_num := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i)-1)-1)
8629 ||'.'
8630 ||TO_CHAR(SUBSTR(l_wbs_num,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i)-1)+1,LENGTH(l_wbs_num))+1);
8631 ELSE
8632 l_wbs_num := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,1)-1)+1;
8633 END IF;
8634 ELSE
8635 l_wbs_num := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,1)-1)+1;
8636 END IF;
8637 END IF;
8638
8639 cnt1 := cnt1+1;
8640 -- Check if it is structure record and make wbs_number zero and display_sequence null
8641 IF v_ELEMENT_VERSION_ID(i) = p_structure_version_id THEN
8642 v_WBS_NUMBER(i) := '0';
8643 v_DISPLAY_SEQUENCE(i) := NULL;
8644 ELSE
8645 v_WBS_NUMBER(i) := l_wbs_num;
8646 v_DISPLAY_SEQUENCE(i) := cnt1;
8647 END IF;
8648 l_prev_level := v_WBS_LEVEL(i);
8649 END LOOP ;
8650
8651 FORALL i in v_PROJ_ELEMENT_ID.first..v_PROJ_ELEMENT_ID.last
8652 UPDATE PA_PROJ_ELEMENT_VERSIONS
8653 SET DISPLAY_SEQUENCE = v_DISPLAY_SEQUENCE(i),
8654 WBS_NUMBER = v_WBS_NUMBER(i),
8655 WBS_LEVEL = v_WBS_LEVEL(i), -- Sridhar Huawei 18-Sept , Add update of wbs_level
8656 last_updated_by = 100
8657 WHERE ELEMENT_VERSION_ID = v_ELEMENT_VERSION_ID(i); /* Code change for bug#14765516 - Ends */
8658
8659 EXIT WHEN c1%NOTFOUND;
8660 END LOOP;
8661 CLOSE c1;
8662
8663 x_return_status := FND_API.G_RET_STS_SUCCESS;
8664
8665 EXCEPTION
8666 WHEN FND_API.G_EXC_ERROR THEN
8667 x_return_status := FND_API.G_RET_STS_ERROR ;
8668 if p_commit = FND_API.G_TRUE then
8669 ROLLBACK TO refresh_structure_ver;
8670 end if;
8671
8672 FND_MSG_PUB.Count_And_Get
8673 ( p_count => x_msg_count ,
8674 p_data => x_msg_data );
8675 when OTHERS then
8676 if p_commit = FND_API.G_TRUE then
8677 rollback to refresh_structure_ver;
8678 end if;
8679 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8680 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8681 p_procedure_name => 'REFRESH_STRUCTURE_VERSION',
8682 p_error_text => SUBSTRB(SQLERRM,1,240));
8683 raise;
8684 END REFRESH_STRUCTURE_VERSION;
8685
8686 PROCEDURE BASELINE_STRUCTURE_VERSION
8687 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
8688 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
8689 ,p_validation_level IN VARCHAR2 := 100
8690 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
8691 ,p_debug_mode IN VARCHAR2 := 'N'
8692 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8693 ,p_structure_version_id IN NUMBER
8694 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8695 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8696 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8697 )
8698 IS
8699 CURSOR c1( c_project_id NUMBER ) IS
8700 SELECT B.PROJ_ELEMENT_ID, B.SCHEDULED_START_DATE,
8701 B.SCHEDULED_FINISH_DATE, A.ELEMENT_VERSION_ID , duration
8702 FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B, PA_PROJ_ELEMENTS C
8703 WHERE A.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
8704 AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8705 AND A.PROJ_ELEMENT_ID = C.proj_element_id
8706 AND A.PROJECT_ID = B.PROJECT_ID
8707 AND A.project_id = c_project_id
8708 AND C.PROJECT_ID = A.project_id
8709 AND (B.SCHEDULED_START_DATE <> C.BASELINE_START_DATE OR
8710 B.SCHEDULED_FINISH_DATE <> C.BASELINE_FINISH_DATE);
8711 /* Commented below cursor and replaced with the one above for Huawei enhancement bug 13923366
8712 * bug 13923366 - testing delete_task sceanrio
8713 SELECT B.PROJ_ELEMENT_ID, B.SCHEDULED_START_DATE,
8714 B.SCHEDULED_FINISH_DATE, A.ELEMENT_VERSION_ID , duration
8715 FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B, PA_PROJ_ELEMENTS C
8716 WHERE A.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
8717 AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8718 AND A.PROJECT_ID = B.PROJECT_ID
8719 AND A.project_id = c_project_id;
8720 */
8721
8722 --Added for Bug 13836957
8723 -- TYPE c_array IS TABLE OF c1%ROWTYPE; /* commented for bug#14765516 */
8724 -- l_data c_array; /* commented for bug#14765516 */
8725 /*bug#14765516 changes starts*/
8726 TYPE PROJ_ELEMENT_ID_t IS TABLE OF
8727 PA_PROJ_ELEM_VER_SCHEDULE.PROJ_ELEMENT_ID%TYPE;
8728 TYPE SCHEDULED_START_DATE_t IS TABLE OF
8729 PA_PROJ_ELEM_VER_SCHEDULE.SCHEDULED_START_DATE%TYPE;
8730 TYPE SCHEDULED_FINISH_DATE_t IS TABLE OF
8731 PA_PROJ_ELEM_VER_SCHEDULE.SCHEDULED_FINISH_DATE%TYPE;
8732 TYPE ELEMENT_VERSION_ID_t IS TABLE OF
8733 PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
8734 TYPE duration_t IS TABLE OF PA_PROJ_ELEM_VER_SCHEDULE.duration%TYPE;
8735
8736 v_PROJ_ELEMENT_ID PROJ_ELEMENT_ID_t;
8737 v_SCHEDULED_START_DATE SCHEDULED_START_DATE_t;
8738 v_SCHEDULED_FINISH_DATE SCHEDULED_FINISH_DATE_t;
8739 v_ELEMENT_VERSION_ID ELEMENT_VERSION_ID_t;
8740 v_duration duration_t;
8741 /*bug#14765516 changes ends*/
8742
8743 l_plsql_max_array_size CONSTANT NUMBER := 100;
8744 -- c1_rec c1%ROWTYPE; -- coomented for Bug 13836957
8745 l_project_id NUMBER;
8746
8747 -- anlee
8748 -- Dates changes
8749 -- Modified cursor to below and added local variables for bug 13836957
8750 CURSOR c2 (c_project_id NUMBER)
8751 IS
8752 SELECT B.SCHEDULED_START_DATE,
8753 B.SCHEDULED_FINISH_DATE, C.record_version_number
8754 FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B,
8755 PA_PROJECTS_ALL C
8756 WHERE A.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
8757 AND A.ELEMENT_VERSION_ID = p_structure_version_id
8758 AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8759 AND A.PROJECT_ID = B.PROJECT_ID
8760 AND A.PROJECT_ID = C.PROJECT_ID
8761 AND A.project_id = c_project_id;
8762
8763 l_scheduled_start_date DATE;
8764 l_scheduled_finish_date DATE;
8765 /* Commented for bug 13836957
8766 SELECT record_version_number
8767 FROM pa_projects_all
8768 WHERE project_id = c_project_id; */
8769
8770 l_proj_record_ver_number NUMBER;
8771 l_return_status VARCHAR2(1);
8772 l_msg_count NUMBER;
8773 l_msg_data VARCHAR2(2000);
8774 -- End of changes
8775
8776 l_calendar_id NUMBER;
8777 l_duration NUMBER;
8778 l_duration_days NUMBER;
8779 cursor get_cal_id IS
8780 select a.calendar_id
8781 from pa_projects_all a, pa_proj_element_versions b
8782 where a.project_id = b.project_id
8783 and b.element_version_id = p_structure_version_id;
8784 BEGIN
8785 IF (p_debug_mode = 'Y') THEN
8786 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION BEGIN');
8787 END IF;
8788
8789 IF (p_commit = FND_API.G_TRUE) THEN
8790 savepoint baseline_structure_pvt;
8791 END IF;
8792
8793 SELECT PROJECT_ID
8794 INTO l_project_id
8795 FROM PA_PROJ_ELEMENT_VERSIONS
8796 WHERE ELEMENT_VERSION_ID = p_structure_version_id;
8797
8798 /* Commented for bug 13836957
8799 UPDATE PA_PROJ_ELEMENTS
8800 SET BASELINE_START_DATE= NULL ,
8801 BASELINE_FINISH_DATE= NULL ,
8802 RECORD_VERSION_NUMBER=NVL(RECORD_VERSION_NUMBER,0) + 1
8803 WHERE PROJECT_ID = l_project_id; */
8804 -- Added IF condition for bulk add or delete tasks as we are defering updating dates
8805 -- to the end after processing all tasks - Huawei enhancement bug 13923366
8806 IF (NVL(PA_PROJECT_PUB.G_MASS_ADD_TASKS,'N') = 'N' AND NVL(PA_PROJECT_PUB.G_MASS_DELETE_TASKS,'N') = 'N') THEN
8807
8808 OPEN c1( l_project_id );
8809 LOOP
8810 /* Commented for bug 13836957
8811 FETCH c1 into c1_rec;
8812 EXIT WHEN c1%NOTFOUND; */
8813 /* commented below line for bug#14765516
8814 FETCH c1 BULK COLLECT INTO l_data LIMIT l_plsql_max_array_size; --Added for Bug 13836957
8815 */
8816 FETCH c1 BULK COLLECT INTO v_PROJ_ELEMENT_ID, v_SCHEDULED_START_DATE, v_SCHEDULED_FINISH_DATE, v_ELEMENT_VERSION_ID, v_duration LIMIT l_plsql_max_array_size; --bug#14765516
8817
8818
8819 /* -- Calc duration
8820 OPEN get_cal_id;
8821 FETCH get_cal_id INTO l_calendar_id;
8822 CLOSE get_cal_id;
8823
8824 PA_DURATION_UTILS.GET_DURATION(
8825 p_calendar_id => l_calendar_id
8826 ,p_start_date => c1_rec.scheduled_start_date
8827 ,p_end_date => c1_rec.scheduled_finish_date
8828 ,x_duration_days => l_duration_days
8829 ,x_duration_hours => l_duration
8830 ,x_return_status => l_return_status
8831 ,x_msg_count => l_msg_count
8832 ,x_msg_data => l_msg_data );
8833
8834 --Check if there is any error.
8835 l_msg_count := FND_MSG_PUB.count_msg;
8836 IF l_msg_count > 0 THEN
8837 x_msg_count := l_msg_count;
8838 IF x_msg_count = 1 THEN
8839 x_msg_data := l_msg_data;
8840 END IF;
8841 RAISE FND_API.G_EXC_ERROR;
8842 END IF;
8843 */
8844 /* Commented for bug 13836957
8845 UPDATE PA_PROJ_ELEMENTS
8846 SET BASELINE_START_DATE=c1_rec.scheduled_start_date,
8847 BASELINE_FINISH_DATE=c1_rec.scheduled_finish_date, -- pa
8848 BASELINE_DURATION=c1_rec.duration,
8849 RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,0) + 1
8850 WHERE PROJ_ELEMENT_ID = c1_rec.proj_element_id;
8851 */
8852 /* commented FORALL code for bug 14765516
8853 --Added for Bug13836957
8854 FORALL i in l_data.first..l_data.last
8855 UPDATE PA_PROJ_ELEMENTS
8856 SET BASELINE_START_DATE=l_data(i).SCHEDULED_START_DATE,
8857 BASELINE_FINISH_DATE=l_data(i).SCHEDULED_FINISH_DATE, -- pa
8858 BASELINE_DURATION=l_data(i).duration,
8859 RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,0) + 1
8860 WHERE PROJ_ELEMENT_ID = l_data(i).PROJ_ELEMENT_ID;
8861 */
8862 /*Added below FORALL code for bug#14765516*/
8863 FORALL i in v_PROJ_ELEMENT_ID.first..v_PROJ_ELEMENT_ID.last
8864 UPDATE PA_PROJ_ELEMENTS
8865 SET BASELINE_START_DATE=v_SCHEDULED_START_DATE(i),
8866 BASELINE_FINISH_DATE=v_SCHEDULED_FINISH_DATE(i), -- pa
8867 BASELINE_DURATION=v_duration(i),
8868 RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,0) + 1
8869 WHERE PROJ_ELEMENT_ID = v_PROJ_ELEMENT_ID(i);
8870
8871 EXIT WHEN c1%NOTFOUND;
8872 END LOOP;
8873 CLOSE c1;
8874 END IF; -- end of changes for bug 13923366
8875 -- anlee
8876 -- Dates changes
8877 -- if c1_rec.element_version_id = p_structure_version_id then -- commented for bug 13836957
8878 OPEN c2(l_project_id);
8879 FETCH c2 INTO l_scheduled_start_date,l_scheduled_finish_date,l_proj_record_ver_number; -- modified for bug 13836957
8880 CLOSE c2;
8881
8882 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
8883 p_validate_only => FND_API.G_FALSE
8884 ,p_project_id => l_project_id
8885 ,p_date_type => 'BASELINE'
8886 ,p_start_date => l_scheduled_start_date
8887 ,p_finish_date => l_scheduled_finish_date
8888 ,p_record_version_number => l_proj_record_ver_number
8889 ,x_return_status => l_return_status
8890 ,x_msg_count => l_msg_count
8891 ,x_msg_data => l_msg_data );
8892
8893 --Check if there is any error.
8894 l_msg_count := FND_MSG_PUB.count_msg;
8895 IF l_msg_count > 0 THEN
8896 x_msg_count := l_msg_count;
8897 IF x_msg_count = 1 THEN
8898 x_msg_data := l_msg_data;
8899 END IF;
8900 RAISE FND_API.G_EXC_ERROR;
8901 END IF;
8902 -- End of changes
8903
8904 IF (p_debug_mode = 'Y') THEN
8905 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION end');
8906 END IF;
8907
8908 x_return_status := FND_API.G_RET_STS_SUCCESS;
8909
8910 EXCEPTION
8911 when FND_API.G_EXC_ERROR then
8912 if p_commit = FND_API.G_TRUE then
8913 rollback to baseline_structure_pvt;
8914 end if;
8915 x_return_status := FND_API.G_RET_STS_ERROR;
8916 when FND_API.G_EXC_UNEXPECTED_ERROR then
8917 if p_commit = FND_API.G_TRUE then
8918 rollback to baseline_structure_pvt;
8919 end if;
8920 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8921 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8922 p_procedure_name => 'BASELINE_STRUCTURE_VERSION',
8923 p_error_text => SUBSTRB(SQLERRM,1,240));
8924 when OTHERS then
8925 if p_commit = FND_API.G_TRUE then
8926 rollback to baseline_structure_pvt;
8927 end if;
8928 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8929 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
8930 p_procedure_name => 'BASELINE_STRUCTURE_VERSION',
8931 p_error_text => SUBSTRB(SQLERRM,1,240));
8932 raise;
8933 END BASELINE_STRUCTURE_VERSION;
8934
8935
8936 PROCEDURE SPLIT_WORKPLAN
8937 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
8938 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
8939 ,p_validation_level IN VARCHAR2 := 100
8940 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
8941 ,p_debug_mode IN VARCHAR2 := 'N'
8942 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8943 ,p_project_id IN NUMBER
8944 ,p_structure_name IN VARCHAR2
8945 ,p_structure_number IN VARCHAR2
8946 ,p_description IN VARCHAR2
8947 ,x_structure_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8948 ,x_structure_version_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8949 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8950 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8951 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8952 )
8953 IS
8954 cursor c1 IS
8955 select a.proj_element_id
8956 from pa_proj_elements a,
8957 pa_proj_structure_types b,
8958 pa_structure_types c
8959 where a.project_id = p_project_id
8960 and a.object_type = 'PA_STRUCTURES'
8961 and a.proj_element_id = b.proj_element_id
8962 and b.structure_type_id = c.structure_type_id
8963 and c.structure_type_class_code IN ('FINANCIAL');
8964
8965 cursor sel_struct_type(c_structure_id NUMBER) IS
8966 select a.rowid
8967 from pa_proj_structure_types a, pa_structure_types b
8968 where a.proj_element_id = c_structure_id
8969 and a.structure_type_id = b.structure_type_id
8970 and b.structure_type_class_code = 'WORKPLAN';
8971
8972
8973 l_structure_id NUMBER;
8974 l_rowid VARCHAR2(255);
8975
8976 l_ret_stat VARCHAR2(1);
8977 l_msg_count NUMBER;
8978 l_msg_data VARCHAR2(250);
8979
8980 l_struc_id NUMBER;
8981 l_struc_ver_attr_id NUMBER;
8982 l_struc_ver_id NUMBER;
8983 l_pev_schedule_id NUMBER;
8984
8985 BEGIN
8986 IF (p_debug_mode = 'Y') THEN
8987 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN BEGIN');
8988 END IF;
8989
8990 IF (p_commit = FND_API.G_TRUE) THEN
8991 savepoint split_workplan;
8992 END IF;
8993
8994 IF (p_debug_mode = 'Y') THEN
8995 pa_debug.debug('Find existing structure');
8996 END IF;
8997
8998 --get current costing/billing structure id
8999 OPEN c1;
9000 FETCH c1 INTO l_structure_id;
9001 CLOSE c1;
9002
9003 --check if there is a published workplan version
9004 IF PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_project_id, l_structure_id) = 'Y' THEN
9005 --cannot split if publish version exists.
9006 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_CANNOT_SPLIT_STRUCT');
9007 x_msg_data := 'PA_PS_CANNOT_SPLIT_STRUCT';
9008 RAISE FND_API.G_EXC_ERROR;
9009 END IF;
9010
9011 --delete workplan structure type
9012 OPEN sel_struct_type(l_structure_id);
9013 FETCH sel_struct_type INTO l_rowid;
9014 IF sel_struct_type%FOUND THEN
9015 IF (p_debug_mode = 'Y') THEN
9016 pa_debug.debug('Deleting type structure type');
9017 END IF;
9018 PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
9019 END IF;
9020 CLOSE sel_struct_type;
9021
9022 --create_structure
9023 PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
9024 p_project_id => p_project_id
9025 ,p_structure_number => p_structure_number
9026 ,p_structure_name => p_structure_name
9027 ,p_structure_description => p_description
9028 ,p_calling_flag => 'WORKPLAN'
9029 ,x_structure_id => l_struc_id
9030 ,x_return_status => l_ret_stat
9031 ,x_msg_count => l_msg_count
9032 ,x_msg_data => l_msg_data
9033 );
9034
9035 x_structure_id := l_struc_id;
9036
9037 --Check if there is any error.
9038 l_msg_count := FND_MSG_PUB.count_msg;
9039 IF l_msg_count > 0 THEN
9040 x_msg_count := l_msg_count;
9041 IF x_msg_count = 1 THEN
9042 x_msg_data := l_msg_data;
9043 END IF;
9044 RAISE FND_API.G_EXC_ERROR;
9045 END IF;
9046
9047 --delete schedule info for structure versions and tasks
9048 delete from pa_proj_elem_ver_schedule
9049 where project_id = p_project_id;
9050
9051 --create_structure_version
9052 PA_PROJECT_STRUCTURE_PUB1.create_structure_Version(
9053 p_structure_id => l_struc_id,
9054 x_structure_version_id => l_struc_ver_id,
9055 x_return_status => l_ret_stat,
9056 x_msg_count => l_msg_count,
9057 x_msg_data => l_msg_data
9058 );
9059
9060 x_structure_version_id := l_struc_ver_id;
9061
9062 --Check if there is any error.
9063 l_msg_count := FND_MSG_PUB.count_msg;
9064 IF l_msg_count > 0 THEN
9065 x_msg_count := l_msg_count;
9066 IF x_msg_count = 1 THEN
9067 x_msg_data := l_msg_data;
9068 END IF;
9069 RAISE FND_API.G_EXC_ERROR;
9070 END IF;
9071
9072 --create_structure_version_attr
9073 PA_PROJECT_STRUCTURE_PUB1.create_structure_version_attr(
9074 p_structure_version_id => l_struc_ver_id,
9075 p_structure_version_name => p_structure_name,
9076 p_structure_version_desc => p_description,
9077 x_return_status => l_ret_stat,
9078 x_msg_count => l_msg_count,
9079 x_msg_data => l_msg_data,
9080 x_pev_structure_id => l_struc_ver_attr_id
9081 );
9082
9083 --Check if there is any error.
9084 l_msg_count := FND_MSG_PUB.count_msg;
9085 IF l_msg_count > 0 THEN
9086 x_msg_count := l_msg_count;
9087 IF x_msg_count = 1 THEN
9088 x_msg_data := l_msg_data;
9089 END IF;
9090 RAISE FND_API.G_EXC_ERROR;
9091 END IF;
9092
9093 --create_schedule_version
9094 PA_TASK_PUB1.Create_Schedule_Version(
9095 p_element_version_id => l_struc_ver_id
9096 ,p_scheduled_start_date => SYSDATE
9097 ,p_scheduled_end_date => SYSDATE
9098 ,x_pev_schedule_id => l_pev_schedule_id
9099 ,x_return_status => l_ret_stat
9100 ,x_msg_count => l_msg_count
9101 ,x_msg_data => l_msg_data
9102 );
9103
9104 --Check if there is any error.
9105 l_msg_count := FND_MSG_PUB.count_msg;
9106 IF l_msg_count > 0 THEN
9107 x_msg_count := l_msg_count;
9108 IF x_msg_count = 1 THEN
9109 x_msg_data := l_msg_data;
9110 END IF;
9111 RAISE FND_API.G_EXC_ERROR;
9112 END IF;
9113
9114 x_return_status := FND_API.G_RET_STS_SUCCESS;
9115
9116 IF (p_debug_mode = 'Y') THEN
9117 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN end');
9118 END IF;
9119
9120 EXCEPTION
9121 when FND_API.G_EXC_ERROR then
9122 if p_commit = FND_API.G_TRUE then
9123 rollback to split_workplan;
9124 end if;
9125 x_return_status := FND_API.G_RET_STS_ERROR;
9126 when FND_API.G_EXC_UNEXPECTED_ERROR then
9127 if p_commit = FND_API.G_TRUE then
9128 rollback to split_workplan;
9129 end if;
9130 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9131 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
9132 p_procedure_name => 'SPLIT_WORKPLAN',
9133 p_error_text => SUBSTRB(SQLERRM,1,240));
9134 when OTHERS then
9135 if p_commit = FND_API.G_TRUE then
9136 rollback to split_workplan;
9137 end if;
9138 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9139 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
9140 p_procedure_name => 'SPLIT_WORKPLAN',
9141 p_error_text => SUBSTRB(SQLERRM,1,240));
9142 raise;
9143 END SPLIT_WORKPLAN;
9144
9145
9146 procedure SUBMIT_WORKPLAN
9147 (
9148 p_api_version IN NUMBER := 1.0
9149 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
9150 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9151 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
9152 ,p_validation_level IN VARCHAR2 := 100
9153 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
9154 ,p_debug_mode IN VARCHAR2 := 'N'
9155 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9156 ,p_project_id IN NUMBER
9157 ,p_structure_id IN NUMBER
9158 ,p_structure_version_id IN NUMBER
9159 ,p_responsibility_id IN NUMBER
9160 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9161 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9162 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9163 )
9164 IS
9165 l_structure_version_name VARCHAR2(240);
9166 l_structure_version_desc VARCHAR2(250);
9167 l_auto_pub VARCHAR2(1);
9168 l_published_struc_ver_id NUMBER;
9169 l_dummy VARCHAR2(1);
9170 l_item_key VARCHAR2(240);
9171 l_wf_enable VARCHAR2(1);
9172 l_wf_item_type VARCHAR2(30);
9173 l_wf_process VARCHAR2(30);
9174 l_wf_success_code VARCHAR2(30);
9175 l_wf_failure_code VARCHAR2(30);
9176 l_err_code NUMBER;
9177 l_err_stage VARCHAR2(30);
9178 l_err_stack VARCHAR2(240);
9179 l_return_status VARCHAR2(1);
9180 l_msg_count NUMBER;
9181 l_msg_data VARCHAR2(250);
9182 l_error_msg_code VARCHAR2(250);
9183
9184 CURSOR checkAutoPub IS
9185 select '1' from pa_proj_workplan_attr
9186 where project_id = p_project_id
9187 and wp_auto_publish_flag = 'Y';
9188
9189 CURSOR get_wp_info IS
9190 select name, description
9191 from pa_proj_elem_ver_structure
9192 where project_Id = p_project_id
9193 and element_version_id = p_structure_version_id;
9194
9195 /* Bug 2683138 */
9196 /* CURSOR get_start_wf IS
9197 select 'Y' from dual
9198 where exists (
9199 select 1 from pa_product_installation_v
9200 where product_short_code = 'PJT' AND INSTALLED_FLAG = 'Y'); */
9201
9202 CURSOR get_start_wf IS
9203 select 'Y' from dual;
9204
9205 CURSOR get_wf_info(c_status_code VARCHAR2) IS
9206 select enable_wf_flag, workflow_item_type,
9207 workflow_process, wf_success_status_code,
9208 wf_failure_status_code
9209 from pa_project_statuses
9210 where project_status_code = c_status_code;
9211 --status_code can be STRUCTURE_SUBMITTED, STRUCTURE_REJECTED,
9212 -- STRUCTURE_APPROVED, or STRUCTURE_PUBLISHED
9213
9214 --check if delete unpublished ok
9215 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
9216 select b.element_version_id
9217 from pa_proj_element_versions a,
9218 pa_proj_element_versions b
9219 where a.element_version_id = c_keep_struc_ver_id
9220 and a.project_id = b.project_id
9221 and a.proj_element_id = b.proj_element_id
9222 and b.element_version_id <> c_keep_struc_ver_id
9223 and b.object_type = 'PA_STRUCTURES';
9224 l_del_struc_ver_id NUMBER;
9225
9226 BEGIN
9227 PA_DEBUG.INIT_ERR_STACK('PA_PROJECT_STRUCTURE_PVT1.SUBMIT_WORKPLAN');
9228
9229 x_return_status := FND_API.G_RET_STS_SUCCESS;
9230
9231 IF (p_commit = FND_API.G_TRUE) THEN
9232 savepoint SUBMIT_WP_PRIVATE;
9233 END IF;
9234
9235 OPEN get_wp_info;
9236 FETCH get_wp_info into l_structure_version_name, l_structure_version_desc;
9237 CLOSE get_wp_info;
9238
9239 --Check if ok to publish workplan version
9240 OPEN checkAutoPub;
9241 FETCH checkAutoPub into l_dummy;
9242 IF checkAutoPub%NOTFOUND THEN
9243 l_auto_pub := 'N';
9244 ELSE
9245 l_auto_pub := 'Y';
9246 END IF;
9247 CLOSE checkAutoPub;
9248
9249
9250 --hsiu: bug 2684465
9251 --Check if this structure missing tasks with transactions
9252 -- IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
9253 -- PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
9254 -- x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
9255 -- RAISE FND_API.G_EXC_ERROR;
9256 -- END IF;
9257 PA_PROJECT_STRUCTURE_UTILS.CHECK_MISS_TRANSACTION_TASKS(p_structure_version_id,
9258 l_return_status,
9259 l_msg_count,
9260 l_msg_data);
9261 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9262 RAISE FND_API.G_EXC_ERROR;
9263 END IF;
9264
9265
9266
9267 --Check if task statuses are consistent
9268 PA_PROJECT_STRUCTURE_UTILS.check_tasks_statuses_valid(
9269 p_structure_version_id
9270 ,l_return_status
9271 ,l_msg_count
9272 ,l_msg_data
9273 );
9274 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9275 RAISE FND_API.G_EXC_ERROR;
9276 END IF;
9277
9278
9279 --Check if any new summary task has transactions
9280 PA_PROJECT_STRUCTURE_UTILS.Check_txn_on_summary_tasks(
9281 p_structure_version_id
9282 ,l_return_status
9283 ,l_msg_count
9284 ,l_msg_data
9285 );
9286 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9287 RAISE FND_API.G_EXC_ERROR;
9288 END IF;
9289
9290
9291 --end bug 2684465
9292
9293
9294
9295 IF (l_auto_pub = 'Y') THEN
9296
9297 /*
9298 --Check if this structure can be published (ie, if linked structures are published)
9299 IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Publish_Struc_Ver_Ok(p_structure_version_id)) THEN
9300 PA_UTILS.ADD_MESSAGE('PA','PA_PS_LINK_STRUC_NOT_PUB');
9301 x_msg_data := 'PA_PS_LINK_STRUC_NOT_PUB';
9302 RAISE FND_API.G_EXC_ERROR;
9303 END IF;
9304 */
9305
9306 /*
9307 PA_PROGRESS_PUB.CREATE_PROGRESS_FOR_WBS(
9308 p_validate_only => FND_API.G_TRUE
9309 ,p_commit => FND_API.G_FALSE
9310 ,p_project_id => p_project_id
9311 ,p_structure_version_id => p_structure_version_id
9312 ,x_return_status => l_return_status
9313 ,x_msg_count => l_msg_count
9314 ,x_msg_data => l_msg_data
9315 );
9316 */
9317
9318 --bug 3840509
9319 IF 'Y' = nvl(PA_PROJECT_STRUCTURE_UTILS.Get_Sch_Dirty_fl(p_project_id,
9320 p_structure_version_id), 'N') THEN
9321 --need to reschedule
9322 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NEED_THIRD_PT_SCH');
9323 x_msg_data := 'PA_PS_NEED_THIRD_PT_SCH';
9324 RAISE FND_API.G_EXC_ERROR;
9325 END IF;
9326 --end bug 3840509
9327
9328 --Check if there is any error.
9329 l_msg_count := FND_MSG_PUB.count_msg;
9330 IF l_msg_count > 0 THEN
9331 x_msg_count := l_msg_count;
9332 IF x_msg_count = 1 THEN
9333 x_msg_data := l_msg_data;
9334 END IF;
9335 RAISE FND_API.G_EXC_ERROR;
9336 END IF;
9337
9338 /*
9339 savepoint check_workplan;
9340
9341 PA_PROJECT_STRUCTURE_PVT1.Publish_Structure(
9342 p_responsibility_id => p_responsibility_id
9343 ,p_structure_version_id => p_structure_version_id
9344 ,p_publish_structure_ver_name => l_structure_version_name
9345 ,p_structure_ver_desc => l_structure_version_desc
9346 ,p_effective_date => TRUNC(SYSDATE)
9347 ,p_current_baseline_flag => 'N'
9348 ,x_published_struct_ver_id => l_published_struc_ver_id
9349 ,x_return_status => x_return_status
9350 ,x_msg_count => x_msg_count
9351 ,x_msg_data => x_msg_data
9352 );
9353
9354 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9355 RAISE FND_API.G_EXC_ERROR;
9356 END IF;
9357 rollback to check_workplan;
9358 */
9359 END IF;
9360
9361 -- For bug 3045358 : Functionality presently is that we do not require to check for the locking status of other working versions
9362 -- while submitting a particular version for approval.
9363 -- Hence commenting the below code
9364 /*
9365 OPEN sel_other_structure_ver(p_structure_version_id);
9366 LOOP
9367 FETCH sel_other_structure_ver into l_del_struc_ver_id;
9368 EXIT WHEN sel_other_structure_ver%NOTFOUND;
9369 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
9370 p_project_id => p_project_id
9371 ,p_structure_version_id =>l_del_struc_ver_id
9372 ,x_return_status => l_return_status
9373 ,x_error_message_code => l_msg_data
9374 );
9375
9376 IF (l_return_status <> 'S') THEN
9377 PA_UTILS.ADD_MESSAGE('PA',l_msg_data);
9378 x_msg_data := l_msg_data;
9379 CLOSE sel_other_structure_ver;
9380 RAISE FND_API.G_EXC_ERROR;
9381 END IF;
9382 END LOOP;
9383 CLOSE sel_other_structure_ver;
9384 */
9385 --Update to submit status
9386 UPDATE PA_PROJ_ELEM_VER_STRUCTURE
9387 set status_code = 'STRUCTURE_SUBMITTED',
9388 lock_status_code = 'UNLOCKED',
9389 locked_by_person_id = NULL,
9390 locked_date = NULL
9391 where project_id = p_project_id
9392 and element_version_id = p_structure_version_id;
9393
9394 --Submit for approval
9395 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9396
9397 OPEN get_start_wf;
9398 FETCH get_start_wf into l_dummy;
9399 IF get_start_wf%FOUND THEN
9400
9401 OPEN get_wf_info('STRUCTURE_SUBMITTED');
9402 FETCH get_wf_info into l_wf_enable, l_wf_item_type, l_wf_process,
9403 l_wf_success_code, l_wf_failure_code;
9404 IF (l_wf_enable = 'Y') THEN
9405 PA_WORKPLAN_WORKFLOW.Start_workflow
9406 (
9407 l_wf_item_type
9408 ,l_wf_process
9409 ,p_structure_version_id
9410 ,p_responsibility_id
9411 ,FND_GLOBAL.USER_ID
9412 ,l_item_key
9413 ,x_msg_count
9414 ,x_msg_data
9415 ,x_return_status
9416 );
9417
9418 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9419 --update pa_wf_process_table
9420 PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES
9421 (
9422 p_wf_type_code => 'WORKPLAN'
9423 ,p_item_type => l_wf_item_type
9424 ,p_item_key => l_item_key
9425 ,p_entity_key1 => p_project_id
9426 ,p_entity_key2 => p_structure_version_id
9427 ,p_description => NULL
9428 ,p_err_code => l_err_code
9429 ,p_err_stage => l_err_stage
9430 ,p_err_stack => l_err_stack
9431 );
9432 IF (l_err_code <> 0) THEN
9433 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9434 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9435 x_return_status := FND_API.G_RET_STS_ERROR;
9436 END IF;
9437 ELSE
9438 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9439 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9440 x_return_status := FND_API.G_RET_STS_ERROR;
9441 END IF;
9442 END IF;
9443 CLOSE get_wf_info;
9444 END IF;
9445 CLOSE get_start_wf;
9446
9447 END IF;
9448
9449 EXCEPTION
9450 WHEN FND_API.G_EXC_ERROR THEN
9451 IF (p_commit = FND_API.G_TRUE) THEN
9452 ROLLBACK to SUBMIT_WP_PRIVATE;
9453 END IF;
9454 x_msg_count := FND_MSG_PUB.count_msg;
9455 x_return_status := FND_API.G_RET_STS_ERROR;
9456 WHEN OTHERS THEN
9457 IF (p_commit = FND_API.G_TRUE) THEN
9458 ROLLBACK to SUBMIT_WP_PRIVATE;
9459 END IF;
9460 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9461 x_msg_count := FND_MSG_PUB.count_msg;
9462 --put message
9463 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
9464 p_procedure_name => 'Submit_Workplan',
9465 p_error_text => SUBSTRB(SQLERRM,1,240));
9466 RAISE;
9467 END SUBMIT_WORKPLAN;
9468
9469
9470 procedure CHANGE_WORKPLAN_STATUS
9471 (
9472 p_api_version IN NUMBER := 1.0,
9473 p_init_msg_list IN VARCHAR2 := fnd_api.g_true,
9474 p_commit IN VARCHAR2 := FND_API.g_false,
9475 p_validate_only IN VARCHAR2 := FND_API.g_false,
9476 p_max_msg_count IN NUMBER := FND_API.g_miss_num,
9477 p_project_id IN NUMBER := NULL,
9478 p_structure_version_id IN NUMBER := NULL,
9479 p_status_code IN VARCHAR2 := NULL,
9480 p_record_version_number IN NUMBER := NULL,
9481 x_return_status OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
9482 x_msg_count OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
9483 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9484 )
9485 IS
9486 l_wf_enable VARCHAR2(1);
9487 l_wf_item_type VARCHAR2(30);
9488 l_wf_process VARCHAR2(30);
9489 l_success_code VARCHAR2(30);
9490 l_failure_code VARCHAR2(30);
9491 l_err_code NUMBER;
9492 l_err_stage VARCHAR2(30);
9493 l_err_stack VARCHAR2(240);
9494 l_dummy VARCHAR2(1);
9495 l_item_key NUMBER;
9496 l_pev_struc_id NUMBER;
9497 l_msg_count NUMBER;
9498 l_msg_data VARCHAR2(250);
9499
9500 /* Bug 2683138 */
9501 /* CURSOR get_start_wf IS
9502 select 'Y' from dual
9503 where exists (
9504 select 1 from pa_product_installation_v
9505 where product_short_code = 'PJT' AND INSTALLED_FLAG = 'Y'); */
9506
9507 CURSOR get_start_wf IS
9508 select 'Y' from dual;
9509
9510 CURSOR get_wf_info(c_status_code VARCHAR2) IS
9511 select enable_wf_flag, workflow_item_type,
9512 workflow_process, wf_success_status_code,
9513 wf_failure_status_code
9514 from pa_project_statuses
9515 where project_status_code = c_status_code;
9516
9517 CURSOR get_status_code(c_status_code VARCHAR2) IS
9518 select '1' from pa_project_statuses
9519 where project_status_code = c_status_code
9520 and status_type = 'STRUCTURE';
9521
9522 BEGIN
9523 PA_DEBUG.init_err_stack('PA_PROJECT_STRUCTURE_PVT1.CHANGE_WORKPLAN_STATUS');
9524
9525 -- Initialize the return status to success
9526 x_return_status := FND_API.G_RET_STS_SUCCESS;
9527
9528 --
9529 BEGIN
9530 select pev_structure_id into l_pev_struc_id
9531 from pa_proj_elem_ver_structure
9532 where project_id = p_project_id
9533 and element_version_id = p_structure_version_id
9534 and record_version_number = p_record_version_number
9535 for update of record_version_number NOWAIT;
9536 EXCEPTION
9537 when TIMEOUT_ON_RESOURCE then
9538 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9539 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
9540 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
9541 when NO_DATA_FOUND then
9542 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9543 p_msg_name => 'PA_XC_RECORD_CHANGED');
9544 l_msg_data := 'PA_XC_RECORD_CHANGED';
9545 when OTHERS then
9546 if SQLCODE = -54 then
9547 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9548 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
9549 l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
9550 else
9551 raise;
9552 end if;
9553 END;
9554
9555 l_msg_count := FND_MSG_PUB.count_msg;
9556 if l_msg_count > 0 then
9557 x_msg_count := l_msg_count;
9558 if x_msg_count = 1 then
9559 x_msg_data := l_msg_data;
9560 end if;
9561 raise FND_API.G_EXC_ERROR;
9562 end if;
9563
9564 --check if status if valid
9565 OPEN get_status_code(p_status_code);
9566 FETCH get_status_code INTO l_dummy ;
9567 IF (get_status_code%NOTFOUND) THEN
9568 CLOSE get_status_code;
9569 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9570 p_msg_name => 'PA_PS_STRUC_STAT_INVAL');
9571 x_msg_data := 'PA_PS_STRUC_STAT_INVAL';
9572 RAISE FND_API.G_EXC_ERROR;
9573 END IF;
9574 CLOSE get_status_code;
9575 --end validation
9576
9577 update pa_proj_elem_ver_structure
9578 set status_code = p_status_code,
9579 record_version_number = record_version_number + 1
9580 where pev_structure_id = l_pev_struc_id;
9581
9582 OPEN get_start_wf;
9583 FETCH get_start_wf INTO l_dummy;
9584 IF (get_start_wf%found) THEN
9585 OPEN get_wf_info(p_status_code);
9586 FETCH get_wf_info INTO l_wf_enable, l_wf_item_type, l_wf_process,
9587 l_success_code,l_failure_code;
9588 IF (get_wf_info%found) then
9589 IF (l_wf_enable = 'Y') THEN
9590 PA_WORKPLAN_WORKFLOW.Start_workflow
9591 (
9592 l_wf_item_type
9593 ,l_wf_process
9594 ,p_structure_version_id
9595 ,FND_GLOBAL.RESP_ID -- NULL Added for bug 5372586
9596 ,FND_GLOBAL.USER_ID -- NULL Added for bug 5372586
9597 ,l_item_key
9598 ,x_msg_count
9599 ,x_msg_data
9600 ,x_return_status
9601 );
9602
9603 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9604 --update pa_wf_process_table
9605 PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES
9606 (
9607 p_wf_type_code => 'WORKPLAN'
9608 ,p_item_type => l_wf_item_type
9609 ,p_item_key => l_item_key
9610 ,p_entity_key1 => p_project_id
9611 ,p_entity_key2 => p_structure_version_id
9612 ,p_description => NULL
9613 ,p_err_code => l_err_code
9614 ,p_err_stage => l_err_stage
9615 ,p_err_stack => l_err_stack
9616 );
9617 IF (l_err_code <> 0) THEN
9618 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9619 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9620 x_return_status := FND_API.G_RET_STS_ERROR;
9621 END IF;
9622 ELSE
9623 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9624 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9625 x_return_status := FND_API.G_RET_STS_ERROR;
9626
9627 END IF;
9628 END IF;
9629 END IF;
9630 CLOSE get_wf_info;
9631
9632 END IF;
9633 CLOSE get_start_wf;
9634
9635 EXCEPTION
9636 WHEN FND_API.G_EXC_ERROR THEN
9637 x_msg_count := FND_MSG_PUB.count_msg;
9638 x_return_status := FND_API.G_RET_STS_ERROR;
9639 WHEN OTHERS THEN
9640 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9641 x_msg_count := FND_MSG_PUB.count_msg;
9642 --put message
9643 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
9644 p_procedure_name => 'Change_Workplan_Status',
9645 p_error_text => SUBSTRB(SQLERRM,1,240));
9646 RAISE;
9647 END CHANGE_WORKPLAN_STATUS;
9648
9649
9650 PROCEDURE rework_workplan
9651 (
9652 p_api_version IN NUMBER := 1.0
9653 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
9654 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9655 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
9656 ,p_validation_level IN VARCHAR2 := 100
9657 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
9658 ,p_debug_mode IN VARCHAR2 := 'N'
9659 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9660 ,p_project_id IN NUMBER
9661 ,p_structure_version_id IN NUMBER
9662 ,p_record_version_number IN NUMBER
9663 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9664 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9665 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9666 )
9667 IS
9668 l_item_key VARCHAR2(240);
9669 l_approve_req VARCHAR2(1);
9670 l_item_type VARCHAR2(30);
9671 l_wf_status VARCHAR2(30);
9672 l_msg_count NUMBER;
9673 l_msg_data VARCHAR2(300);
9674
9675 CURSOR check_approve_req IS
9676 select nvl(wp_approval_reqd_flag,'N') from pa_proj_workplan_attr
9677 where project_id = p_project_id;
9678
9679 /* Bug 2680486 -- Performance changes -- Added the join of wf_type_code to avoid full table scan on pa_wf_processes*/
9680
9681 CURSOR get_item_key IS
9682 select MAX(pwp.item_key), max(pwp.item_type)
9683 from pa_wf_processes pwp, pa_project_statuses pps
9684 where pwp.item_type = pps.workflow_item_type
9685 and pps.status_type = 'STRUCTURE'
9686 and pps.project_status_code = 'STRUCTURE_SUBMITTED'
9687 and entity_key2 = p_structure_version_id
9688 and pwp.wf_type_code = 'WORKPLAN';
9689
9690 CURSOR get_wf_status IS
9691 select 'Y'
9692 from wf_item_activity_statuses wias, pa_project_statuses pps
9693 where wias.item_type = pps.WORKFLOW_ITEM_TYPE
9694 and wias.item_key = l_item_key
9695 and wias.activity_status = 'ACTIVE'
9696 and pps.status_type = 'STRUCTURE'
9697 and pps.project_status_code = 'STRUCTURE_SUBMITTED';
9698
9699 BEGIN
9700 PA_DEBUG.init_err_stack('PA_PROJECT_STRUCTURE_PVT1.REWORK_WORKPLAN');
9701 x_return_status := FND_API.G_RET_STS_SUCCESS;
9702
9703 IF (p_commit = FND_API.G_TRUE) THEN
9704 savepoint rework_workplan_pvt;
9705 END IF;
9706
9707 change_workplan_status(
9708 p_project_id => p_project_id
9709 ,p_structure_version_id => p_structure_version_id
9710 ,p_status_code => 'STRUCTURE_WORKING'
9711 ,p_record_version_number => p_record_version_number
9712 ,x_return_status => x_return_status
9713 ,x_msg_count => l_msg_count
9714 ,x_msg_data => l_msg_data
9715 );
9716
9717 --Check if there is any error.
9718 l_msg_count := FND_MSG_PUB.count_msg;
9719 IF l_msg_count > 0 THEN
9720 x_msg_count := l_msg_count;
9721 IF x_msg_count = 1 THEN
9722 x_msg_data := l_msg_data;
9723 END IF;
9724 RAISE FND_API.G_EXC_ERROR;
9725 END IF;
9726
9727 IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9728 OPEN check_approve_req;
9729 FETCH check_approve_req into l_approve_req;
9730 IF check_approve_req%NOTFOUND THEN
9731 l_approve_req := 'N';
9732 END IF;
9733 CLOSE check_approve_req;
9734
9735 OPEN get_item_key;
9736 FETCH get_item_key into l_item_key, l_item_type;
9737 IF (get_item_key%FOUND) THEN
9738
9739 --process exist
9740 OPEN get_wf_status;
9741 FETCH get_wf_status INTO l_wf_status;
9742 IF (get_wf_status%NOTFOUND or l_wf_status <> 'Y') THEN
9743 -- IF (l_approve_req = 'Y') THEN
9744 -- PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
9745 -- ,p_msg_name => 'PA_PR_CANCEL_WORKFLOW_INV');
9746 -- x_return_status := FND_API.G_RET_STS_ERROR;
9747 -- x_msg_count := FND_MSG_PUB.count_msg;
9748 -- if x_msg_count = 1 then
9749 -- x_msg_data := 'PA_PR_CANCEL_WORKFLOW_INV';
9750 -- end if;
9751 -- raise FND_API.G_EXC_ERROR;
9752 -- END IF;
9753 NULL;
9754 ELSE
9755 --cancel process
9756 PA_WORKPLAN_WORKFLOW.cancel_workflow(
9757 l_item_type
9758 ,l_item_key
9759 ,x_msg_count
9760 ,x_msg_data
9761 ,x_return_status
9762 );
9763 END IF;
9764 CLOSE get_wf_status;
9765
9766 ELSE
9767 IF (l_approve_req = 'Y') THEN
9768 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
9769 ,p_msg_name => 'PA_PR_CANCEL_WORKFLOW_INV');
9770 x_return_status := FND_API.G_RET_STS_ERROR;
9771 x_msg_count := FND_MSG_PUB.count_msg;
9772 if x_msg_count = 1 then
9773 x_msg_data := 'PA_PR_CANCEL_WORKFLOW_INV';
9774 end if;
9775 raise FND_API.G_EXC_ERROR;
9776 END IF;
9777 END IF;
9778 CLOSE get_item_key;
9779 END IF;
9780 EXCEPTION
9781 WHEN FND_API.G_EXC_ERROR THEN
9782 IF (p_commit = FND_API.G_TRUE) THEN
9783 ROLLBACK to rework_workplan_pvt;
9784 END IF;
9785 x_msg_count := FND_MSG_PUB.count_msg;
9786 x_return_status := FND_API.G_RET_STS_ERROR;
9787 WHEN OTHERS THEN
9788 IF (p_commit = FND_API.G_TRUE) THEN
9789 ROLLBACK to rework_workplan_pvt;
9790 END IF;
9791 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9792 x_msg_count := FND_MSG_PUB.count_msg;
9793 --put message
9794 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
9795 p_procedure_name => 'rework_Workplan',
9796 p_error_text => SUBSTRB(SQLERRM,1,240));
9797 RAISE;
9798 END rework_workplan;
9799
9800
9801 -- API name : update_structures_setup_attr
9802 -- Type : Update API
9803 -- Pre-reqs : None
9804 -- Return Value : Update_structures_setup_attr
9805 --
9806 -- Parameters
9807 -- p_project_id IN NUMBER
9808 -- p_workplan_enabled_flag IN VARCHAR2
9809 -- p_financial_enabled_flag IN VARCHAR2
9810 -- p_sharing_enabled_flag IN VARCHAR2
9811 -- x_return_status OUT VARCHAR2
9812 -- x_msg_count OUT NUMBER
9813 -- x_msg_data OUT VARCHAR2
9814 --
9815 -- History
9816 --
9817 -- 26-JUL-02 HSIU -Created
9818 -- 15-JAN-04 HSIU -rewrite API with sharing code changes
9819
9820 PROCEDURE update_structures_setup_old
9821 ( p_api_version IN NUMBER := 1.0
9822 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
9823 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9824 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
9825 ,p_validation_level IN VARCHAR2 := 100
9826 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
9827 ,p_debug_mode IN VARCHAR2 := 'N'
9828 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9829 ,p_project_id IN NUMBER
9830 ,p_workplan_enabled_flag IN VARCHAR2
9831 ,p_financial_enabled_flag IN VARCHAR2
9832 ,p_sharing_enabled_flag IN VARCHAR2
9833 --FP M changes bug 3301192
9834 ,p_deliverables_enabled_flag IN VARCHAR2
9835 ,p_sharing_option_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9836 --End FP M changes bug 3301192
9837 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9838 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9839 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9840 )
9841 IS
9842 l_ret_stat VARCHAR2(1);
9843 l_err_msg_code VARCHAR2(30);
9844 l_suffix VARCHAR2(80);
9845 l_name VARCHAR2(240);
9846 l_append VARCHAR2(10) := ': ';
9847 l_return_status VARCHAR2(1);
9848 l_msg_count NUMBER;
9849 l_msg_data VARCHAR2(250);
9850 l_structure_id NUMBER;
9851 l_structure_version_id NUMBER;
9852 l_template_flag VARCHAR2(1);
9853 l_status_code VARCHAR2(30);
9854 l_baseline_flag VARCHAR2(1);
9855 l_latest_eff_pub_flag VARCHAR2(1);
9856 l_effective_date DATE;
9857 l_wp_attr_rvn NUMBER;
9858 l_rowid VARCHAR2(255);
9859 l_keep_structure_ver_id NUMBER;
9860 l_del_struc_ver_id NUMBER;
9861 l_struc_ver_rvn NUMBER;
9862 l_pev_structure_id NUMBER;
9863 l_pev_schedule_id NUMBER;
9864 l_struc_ver_attr_rvn NUMBER;
9865 l_struc_type_id NUMBER;
9866 l_proj_structure_type_id NUMBER;
9867 l_task_id NUMBER;
9868 l_element_version_id NUMBER;
9869 l_start_date DATE;
9870 l_completion_date DATE;
9871 l_object_type VARCHAR2(30);
9872 l_task_ver_id NUMBER;
9873 /* Bug 2790703 Begin */
9874 -- l_task_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
9875 l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
9876 l_index number :=0 ;
9877 /* Bug 2790703 End */
9878
9879 l_proj_start_Date DATE;
9880 l_proj_completion_date DATE;
9881 l_proj_prog_attr_id NUMBER;
9882
9883 CURSOR get_project_info IS
9884 select name, target_start_date, target_finish_date
9885 from pa_projects_all
9886 where project_id = p_project_id;
9887
9888 --bug 2843569: added record_version_number
9889 CURSOR get_template_flag IS
9890 select template_flag, record_version_number
9891 from pa_projects_all
9892 where project_id = p_project_id;
9893
9894 CURSOR get_wp_attr_rvn IS
9895 select b.proj_element_id, a.record_version_number
9896 from pa_proj_workplan_attr a,
9897 pa_proj_elements b,
9898 pa_proj_structure_types c,
9899 pa_structure_types d
9900 where a.project_id = b.project_id
9901 and a.proj_element_id = b.proj_element_id
9902 and b.project_id = p_project_id
9903 and b.proj_element_id = c.proj_element_id
9904 and c.structure_type_id = d.structure_type_id
9905 and d.structure_type_class_code = 'WORKPLAN';
9906
9907 cursor sel_wp_struct_type(c_structure_id NUMBER) IS
9908 select a.rowid
9909 from pa_proj_structure_types a,
9910 pa_structure_types b
9911 where a.proj_element_id = c_structure_id
9912 and a.structure_type_id = b.structure_type_id
9913 and b.structure_type_class_code = 'WORKPLAN';
9914
9915 cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
9916 select element_version_id
9917 from pa_proj_elem_ver_structure
9918 where proj_element_id = c_structure_id
9919 and project_id = p_project_id
9920 and status_code = 'STRUCTURE_PUBLISHED'
9921 and LATEST_EFF_PUBLISHED_FLAG = 'Y';
9922
9923 cursor sel_wp_structure_id IS
9924 select a.proj_element_id
9925 from pa_proj_elements a,
9926 pa_proj_structure_types b,
9927 pa_structure_types c
9928 where a.project_id = p_project_id
9929 and a.object_type = 'PA_STRUCTURES'
9930 and a.proj_element_id = b.proj_element_id
9931 and b.structure_type_id = c.structure_type_id
9932 and c.structure_type_class_code = 'WORKPLAN';
9933
9934 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
9935 select b.element_version_id, b.record_version_number
9936 from pa_proj_element_versions a,
9937 pa_proj_element_versions b
9938 where a.element_version_id = c_keep_struc_ver_id
9939 and a.project_id = b.project_id
9940 and a.proj_element_id = b.proj_element_id
9941 and b.element_version_id <> c_keep_struc_ver_id
9942 and b.object_type = 'PA_STRUCTURES';
9943
9944 cursor sel_all_wp_structure_ver(c_struc_id NUMBER) IS
9945 select a.element_version_id, a.record_version_number
9946 from pa_proj_element_versions a,
9947 pa_proj_elements b
9948 where a.proj_element_id = b.proj_element_id
9949 and a.project_id = b.project_id
9950 and b.proj_element_id = c_struc_id;
9951
9952 cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
9953 select PEV_STRUCTURE_ID, record_version_number
9954 from pa_proj_elem_ver_structure
9955 where project_id = p_project_id
9956 and element_version_id = c_struc_ver_id;
9957
9958 cursor sel_proj_workplan_attr(c_struc_id NUMBER) is
9959 select *
9960 from pa_proj_workplan_attr
9961 where proj_element_id = c_struc_id;
9962 l_proj_workplan_attr_rec sel_proj_workplan_attr%ROWTYPE;
9963
9964 cursor sel_proj_progress_attr(c_struc_id NUMBER) IS
9965 select *
9966 from pa_proj_progress_attr
9967 where project_id = p_project_id
9968 and object_type = 'PA_STRUCTURES'
9969 and object_id = c_struc_id;
9970 l_proj_progress_attr_rec sel_proj_progress_attr%ROWTYPE;
9971
9972 cursor sel_fin_structure_id IS
9973 select a.proj_element_id
9974 from pa_proj_elements a,
9975 pa_proj_structure_types b,
9976 pa_structure_types c
9977 where a.project_id = p_project_id
9978 and a.object_type = 'PA_STRUCTURES'
9979 and a.proj_element_id = b.proj_element_id
9980 and b.structure_type_id = c.structure_type_id
9981 and c.structure_type_class_code = 'FINANCIAL';
9982
9983 CURSOR sel_struc_type_id IS
9984 select structure_type_id
9985 from pa_structure_types
9986 where structure_type_class_code = 'WORKPLAN';
9987
9988 cursor sel_struc_ver(c_structure_id NUMBER) IS
9989 select element_version_id
9990 from pa_proj_element_versions
9991 where project_id = p_project_id
9992 and proj_element_id = c_structure_id
9993 and object_type = 'PA_STRUCTURES';
9994
9995 --hsiu: commented for performance
9996 -- cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
9997 -- select object_type, proj_element_id, element_version_id
9998 -- from pa_proj_element_versions
9999 -- where parent_structure_version_id = c_struc_ver_id;
10000 cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
10001 select pev.object_type, pev.proj_element_id, pev.element_version_id
10002 from pa_proj_element_versions pev, pa_object_relationships rel
10003 where pev.parent_structure_version_id = c_struc_ver_id
10004 and rel.object_id_to1 = pev.element_version_id
10005 and rel.relationship_type = 'S'
10006 and NOT EXISTS (
10007 select 1
10008 from pa_object_Relationships
10009 where object_id_from1 = pev.element_version_id
10010 and relationship_type = 'S'
10011 );
10012
10013
10014 cursor sel_task_dates(c_task_id NUMBER) IS
10015 select start_date, completion_date
10016 from pa_tasks
10017 where task_id = c_task_id;
10018
10019 --hsiu added for bug 2634029
10020 cursor sel_target_dates IS
10021 select target_start_date, target_finish_date, calendar_id
10022 from pa_projects_all
10023 where project_id = p_project_id;
10024
10025 CURSOR get_top_tasks(c_structure_version_id NUMBER) IS
10026 select v.element_version_id
10027 from pa_proj_element_versions v,
10028 pa_object_relationships r
10029 where v.element_version_id = r.object_id_to1
10030 and r.object_id_from1 = c_structure_version_id
10031 and r.object_type_from = 'PA_STRUCTURES';
10032
10033 --bug 2843569
10034 CURSOR get_scheduled_dates(c_project_Id NUMBER,
10035 c_element_version_id NUMBER) IS
10036 select a.scheduled_start_date, a.scheduled_finish_date
10037 from pa_proj_elem_ver_schedule a
10038 where a.project_id = c_project_id
10039 and a.element_version_id = c_element_version_id;
10040 l_get_sch_dates_cur get_scheduled_dates%ROWTYPE;
10041 l_proj_rec_ver_num NUMBER;
10042 --end bug 2843569
10043
10044 l_target_start_date DATE;
10045 l_target_finish_date DATE;
10046 l_calendar_id NUMBER;
10047 --end changes for bug 2634029
10048
10049 --bug 3010538
10050 l_task_weight_basis_code VARCHAR2(30);
10051 l_update_proc_wbs_flag VARCHAR2(1);
10052 --end bug 3010538
10053
10054 l_wp_name VARCHAR2(240);
10055 BEGIN
10056 IF (p_debug_mode = 'Y') THEN
10057 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr');
10058 END IF;
10059
10060 IF (p_commit = FND_API.G_TRUE) THEN
10061 savepoint update_struc_setup_attr_pvt;
10062 END IF;
10063
10064 IF (p_debug_mode = 'Y') THEN
10065 pa_debug.debug('Performing validations');
10066 END IF;
10067
10068 /*
10069 --For enabling workplan
10070 IF (p_workplan_enabled_flag <>
10071 PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id)) THEN
10072 --BEGIN ENABLING WP CODE
10073
10074 IF (p_workplan_enabled_flag = 'Y') THEN
10075 --Validation
10076 PA_PROJECT_STRUCTURE_UTILS.check_enable_wp_ok(p_project_id,
10077 l_ret_stat,
10078 l_err_msg_code);
10079 IF (l_ret_stat = 'N') THEN
10080 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10081 x_msg_data := l_err_msg_code;
10082 RAISE FND_API.G_EXC_ERROR;
10083 END IF;
10084 --enable WP
10085 --get project name
10086 OPEN get_project_info;
10087 FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date;
10088 CLOSE get_project_info;
10089
10090 IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
10091 l_proj_completion_date := l_proj_start_date;
10092 ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
10093 l_proj_completion_date := sysdate;
10094 l_proj_start_date := sysdate;
10095 END IF;
10096
10097 --get suffix
10098 select meaning
10099 into l_suffix
10100 from pa_lookups
10101 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
10102 and lookup_code = 'WORKPLAN';
10103
10104 l_name := substrb(l_name||l_append||l_suffix, 1, 240);
10105 --Create new structure
10106 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
10107 ( p_validate_only => FND_API.G_FALSE
10108 ,p_project_id => p_project_id
10109 ,p_structure_number => l_name
10110 ,p_structure_name => l_name
10111 ,p_calling_flag => 'WORKPLAN'
10112 ,x_structure_id => l_structure_id
10113 ,x_return_status => l_return_status
10114 ,x_msg_count => l_msg_count
10115 ,x_msg_data => l_msg_data );
10116
10117 --Check if there is any error.
10118 l_msg_count := FND_MSG_PUB.count_msg;
10119 IF l_msg_count > 0 THEN
10120 x_msg_count := l_msg_count;
10121 IF x_msg_count = 1 THEN
10122 x_msg_data := l_msg_data;
10123 END IF;
10124 RAISE FND_API.G_EXC_ERROR;
10125 END IF;
10126
10127 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
10128 ( p_validate_only => FND_API.G_FALSE
10129 ,p_structure_id => l_structure_id
10130 ,x_structure_version_id => l_structure_version_id
10131 ,x_return_status => l_return_status
10132 ,x_msg_count => l_msg_count
10133 ,x_msg_data => l_msg_data );
10134
10135 --Check if there is any error.
10136 l_msg_count := FND_MSG_PUB.count_msg;
10137 IF l_msg_count > 0 THEN
10138 x_msg_count := l_msg_count;
10139 IF x_msg_count = 1 THEN
10140 x_msg_data := l_msg_data;
10141 END IF;
10142 RAISE FND_API.G_EXC_ERROR;
10143 END IF;
10144
10145 PA_TASK_PUB1.Create_Schedule_Version(
10146 p_element_version_id => l_structure_version_id
10147 ,p_scheduled_start_date => l_proj_start_date
10148 ,p_scheduled_end_date => l_proj_completion_date
10149 ,x_pev_schedule_id => l_pev_schedule_id
10150 ,x_return_status => l_return_status
10151 ,x_msg_count => l_msg_count
10152 ,x_msg_data => l_msg_data
10153 );
10154
10155 --Check if there is any error.
10156 l_msg_count := FND_MSG_PUB.count_msg;
10157 IF l_msg_count > 0 THEN
10158 x_msg_count := l_msg_count;
10159 IF x_msg_count = 1 THEN
10160 x_msg_data := l_msg_data;
10161 END IF;
10162 RAISE FND_API.G_EXC_ERROR;
10163 END IF;
10164
10165 OPEN get_template_flag;
10166 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10167 CLOSE get_template_flag;
10168
10169 IF (l_template_flag = 'Y') THEN
10170 l_status_code := 'STRUCTURE_WORKING';
10171 l_baseline_flag := 'N';
10172 l_latest_eff_pub_flag := 'N';
10173 l_effective_date := NULL;
10174 ELSE
10175 l_status_code := 'STRUCTURE_PUBLISHED';
10176 l_baseline_flag := 'Y';
10177 l_latest_eff_pub_flag := 'Y';
10178 l_effective_date := sysdate;
10179 END IF;
10180
10181 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
10182 ( p_validate_only => FND_API.G_FALSE
10183 ,p_structure_version_id => l_structure_version_id
10184 ,p_structure_version_name => l_name
10185 ,p_structure_version_desc => NULL
10186 ,p_effective_date => l_effective_date
10187 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
10188 ,p_locked_status_code => 'UNLOCKED'
10189 ,p_struct_version_status_code => l_status_code
10190 ,p_baseline_current_flag => l_baseline_flag
10191 ,p_baseline_original_flag => 'N'
10192 ,x_pev_structure_id => l_pev_structure_id
10193 ,x_return_status => l_return_status
10194 ,x_msg_count => l_msg_count
10195 ,x_msg_data => l_msg_data );
10196
10197 --Check if there is any error.
10198 l_msg_count := FND_MSG_PUB.count_msg;
10199 IF l_msg_count > 0 THEN
10200 x_msg_count := l_msg_count;
10201 IF x_msg_count = 1 THEN
10202 x_msg_data := l_msg_data;
10203 END IF;
10204 RAISE FND_API.G_EXC_ERROR;
10205 END IF;
10206
10207 --end enable WP
10208 ELSE
10209 --Validation
10210 PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
10211 l_ret_stat,
10212 l_err_msg_code);
10213 IF (l_ret_stat = 'N') THEN
10214 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10215 x_msg_data := l_err_msg_code;
10216 RAISE FND_API.G_EXC_ERROR;
10217 END IF;
10218 --disable WP
10219
10220 --get structure_id
10221 OPEN sel_wp_structure_id;
10222 FETCH sel_wp_structure_id INTO l_structure_id;
10223 CLOSE sel_wp_structure_id;
10224
10225 IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id)
10226 = 'Y') THEN
10227 --Shared
10228 --Select version to be kept
10229 OPEN sel_latest_pub_ver(l_structure_id);
10230 FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
10231 IF sel_latest_pub_ver%NOTFOUND THEN
10232 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
10233 END IF;
10234 CLOSE sel_latest_pub_ver;
10235
10236 --Delete all other structure versions
10237 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
10238 LOOP
10239 FETCH sel_other_structure_ver into l_del_struc_ver_id,
10240 l_struc_ver_rvn;
10241 EXIT WHEN sel_other_structure_ver%NOTFOUND;
10242 -----hsiu: bug 2800553: added for sharing/splitting performance
10243 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10244 p_project_id,
10245 l_del_struc_ver_id,
10246 l_return_status,
10247 l_err_msg_code);
10248 IF (l_return_status <> 'S') THEN
10249 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10250 x_msg_data := l_err_msg_code;
10251 RAISE FND_API.G_EXC_ERROR;
10252 END IF;
10253
10254 --get top tasks
10255 OPEN get_top_tasks(l_del_struc_ver_id);
10256 LOOP
10257 FETCH get_top_tasks into l_task_ver_id;
10258 EXIT WHEN get_top_tasks%NOTFOUND;
10259
10260 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10261 p_project_id => p_project_id
10262 ,p_task_version_id => l_task_ver_id
10263 ,p_parent_structure_ver_id => l_del_struc_ver_id
10264 ,x_return_status => l_return_status
10265 ,x_error_message_code => l_err_msg_code );
10266
10267 IF (l_return_status <> 'S') THEN
10268 x_return_status := l_return_status;
10269 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10270 l_msg_data := l_err_msg_code;
10271 CLOSE get_top_tasks;
10272 RAISE FND_API.G_EXC_ERROR;
10273 END IF;
10274 END LOOP;
10275 CLOSE get_top_tasks;
10276
10277 -- PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10278 PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
10279 p_structure_version_id => l_del_struc_ver_id
10280 ,p_record_version_number => l_struc_ver_rvn
10281 ,x_return_status => l_return_status
10282 ,x_msg_count => l_msg_count
10283 ,x_msg_data => l_msg_data
10284 );
10285 ----end changes
10286
10287 --Check if there is any error.
10288 l_msg_count := FND_MSG_PUB.count_msg;
10289 IF l_msg_count > 0 THEN
10290 x_msg_count := l_msg_count;
10291 IF x_msg_count = 1 THEN
10292 x_msg_data := l_msg_data;
10293 END IF;
10294 CLOSE sel_other_structure_ver;
10295 RAISE FND_API.G_EXC_ERROR;
10296 END IF;
10297
10298 END LOOP;
10299 CLOSE sel_other_structure_ver;
10300
10301 --NULL all baseline dates
10302 UPDATE pa_proj_elements
10303 SET baseline_start_date = NULL,
10304 baseline_finish_date = NULL,
10305 record_version_number = record_version_number+1
10306 WHERE project_id = p_project_id;
10307
10308 --Delete all schedule rows
10309 DELETE FROM pa_proj_elem_ver_schedule
10310 WHERE project_id = p_project_id;
10311
10312 --Delete wp attr row
10313 OPEN get_wp_attr_rvn;
10314 FETCH get_wp_attr_rvn into l_structure_id, l_wp_attr_rvn;
10315 CLOSE get_wp_attr_rvn;
10316
10317 PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
10318 p_validate_only => FND_API.G_FALSE
10319 ,p_project_id => p_project_id
10320 ,p_proj_element_id => l_structure_id
10321 ,p_record_version_number => l_wp_attr_rvn
10322 ,x_return_status => l_return_status
10323 ,x_msg_count => l_msg_count
10324 ,x_msg_data => l_msg_data
10325 );
10326
10327 --Check if there is any error.
10328 l_msg_count := FND_MSG_PUB.count_msg;
10329 IF l_msg_count > 0 THEN
10330 x_msg_count := l_msg_count;
10331 IF x_msg_count = 1 THEN
10332 x_msg_data := l_msg_data;
10333 END IF;
10334 RAISE FND_API.G_EXC_ERROR;
10335 END IF;
10336
10337 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
10338 p_validate_only => FND_API.G_FALSE
10339 ,p_project_id => p_project_id
10340 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
10341 ,p_object_id => l_structure_id
10342 ,x_return_status => l_return_status
10343 ,x_msg_count => l_msg_count
10344 ,x_msg_data => l_msg_data
10345 );
10346
10347 --Check if there is any error.
10348 l_msg_count := FND_MSG_PUB.count_msg;
10349 IF l_msg_count > 0 THEN
10350 x_msg_count := l_msg_count;
10351 IF x_msg_count = 1 THEN
10352 x_msg_data := l_msg_data;
10353 END IF;
10354 RAISE FND_API.G_EXC_ERROR;
10355 END IF;
10356
10357 --Delete structure type
10358 OPEN sel_wp_struct_type(l_structure_id);
10359 FETCH sel_wp_struct_type into l_rowid;
10360 PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
10361 CLOSE sel_wp_struct_type;
10362
10363 --Update structure status to published if project;
10364 -- working if template
10365 OPEN get_template_flag;
10366 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10367 CLOSE get_template_flag;
10368
10369 OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
10370 FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
10371 l_struc_ver_attr_rvn;
10372 CLOSE sel_struc_ver_attr_rvn;
10373
10374 IF (l_template_flag = 'Y') THEN
10375 l_status_code := 'STRUCTURE_WORKING';
10376 l_latest_eff_pub_flag := 'N';
10377 l_effective_date := NULL;
10378 ELSE
10379 l_status_code := 'STRUCTURE_PUBLISHED';
10380 l_latest_eff_pub_flag := 'Y';
10381 l_effective_date := sysdate;
10382 END IF;
10383
10384 --Change status
10385 UPDATE pa_proj_elem_ver_structure
10386 set status_code = l_status_code,
10387 current_flag = 'N',
10388 current_baseline_date = NULL,
10389 current_baseline_person_id = NULL,
10390 latest_eff_published_flag = l_latest_eff_pub_flag,
10391 effective_date = l_effective_date,
10392 record_version_number = record_version_number + 1
10393 where pev_structure_id = l_pev_structure_id;
10394
10395 ELSE
10396 --Not Shared
10397 --Delete all structure versions
10398 OPEN sel_all_wp_structure_ver(l_structure_id);
10399 LOOP
10400 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
10401 l_struc_ver_rvn;
10402 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
10403 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10404 p_project_id,
10405 l_del_struc_ver_id,
10406 l_return_status,
10407 l_err_msg_code);
10408 IF (l_return_status <> 'S') THEN
10409 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10410 x_msg_data := l_err_msg_code;
10411 RAISE FND_API.G_EXC_ERROR;
10412 END IF;
10413
10414 --get top tasks
10415 OPEN get_top_tasks(l_del_struc_ver_id);
10416 LOOP
10417 FETCH get_top_tasks into l_task_ver_id;
10418 EXIT WHEN get_top_tasks%NOTFOUND;
10419
10420 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10421 p_project_id => p_project_id
10422 ,p_task_version_id => l_task_ver_id
10423 ,p_parent_structure_ver_id => l_del_struc_ver_id
10424 ,x_return_status => l_return_status
10425 ,x_error_message_code => l_err_msg_code );
10426
10427 IF (l_return_status <> 'S') THEN
10428 x_return_status := l_return_status;
10429 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10430 l_msg_data := l_err_msg_code;
10431 CLOSE get_top_tasks;
10432 RAISE FND_API.G_EXC_ERROR;
10433 END IF;
10434 END LOOP;
10435 CLOSE get_top_tasks;
10436
10437 -- PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10438 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10439 p_structure_version_id => l_del_struc_ver_id
10440 ,p_record_version_number => l_struc_ver_rvn
10441 ,x_return_status => l_return_status
10442 ,x_msg_count => l_msg_count
10443 ,x_msg_data => l_msg_data
10444 );
10445 ----end changes
10446
10447 --Check if there is any error.
10448 l_msg_count := FND_MSG_PUB.count_msg;
10449 IF l_msg_count > 0 THEN
10450 x_msg_count := l_msg_count;
10451 IF x_msg_count = 1 THEN
10452 x_msg_data := l_msg_data;
10453 END IF;
10454 CLOSE sel_all_wp_structure_ver;
10455 RAISE FND_API.G_EXC_ERROR;
10456 END IF;
10457 END LOOP;
10458 CLOSE sel_all_wp_structure_ver;
10459
10460 END IF;
10461 --end disable WP
10462 END IF;
10463 --END ENABLING WP CODE
10464 END IF;
10465
10466 --For sharing workplan
10467 IF (p_sharing_enabled_flag <>
10468 PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(p_project_id)) THEN
10469 --get structure_id
10470 OPEN sel_wp_structure_id;
10471 FETCH sel_wp_structure_id INTO l_structure_id;
10472 CLOSE sel_wp_structure_id;
10473
10474 --select current proj wp attributes
10475 OPEN sel_proj_workplan_attr(l_structure_id);
10476 FETCH sel_proj_workplan_attr INTO l_proj_workplan_attr_rec;
10477 CLOSE sel_proj_workplan_attr;
10478
10479 OPEN sel_proj_progress_attr(l_structure_id);
10480 FETCH sel_proj_progress_attr INTO l_proj_progress_attr_rec;
10481 CLOSE sel_proj_progress_attr;
10482
10483 --BEGIN SHARING CODE
10484 IF (p_sharing_enabled_flag = 'Y' AND
10485 PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id) = 'Y') THEN
10486 --Validation
10487 PA_PROJECT_STRUCTURE_UTILS.check_sharing_on_ok(p_project_id,
10488 l_ret_stat,
10489 l_err_msg_code);
10490 IF (l_ret_stat = 'N') THEN
10491 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10492 x_msg_data := l_err_msg_code;
10493 RAISE FND_API.G_EXC_ERROR;
10494 END IF;
10495
10496 --hsiu: bug 2634029; get target dates
10497 OPEN sel_target_dates;
10498 FETCH sel_target_dates into l_target_start_date, l_target_finish_date, l_calendar_id;
10499 CLOSE sel_target_dates;
10500 IF (l_target_start_date IS NULL or l_target_finish_date IS NULL) THEN
10501 l_target_start_date := sysdate;
10502 l_target_finish_date := sysdate;
10503 END IF;
10504 --end bug 2634029 changes
10505
10506 --sharing on
10507 --loop and delete all workplan versions
10508 OPEN sel_all_wp_structure_ver(l_structure_id);
10509 LOOP
10510 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
10511 l_struc_ver_rvn;
10512 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
10513 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10514 p_project_id,
10515 l_del_struc_ver_id,
10516 l_return_status,
10517 l_err_msg_code);
10518 IF (l_return_status <> 'S') THEN
10519 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10520 x_msg_data := l_err_msg_code;
10521 RAISE FND_API.G_EXC_ERROR;
10522 END IF;
10523
10524 --get top tasks
10525 OPEN get_top_tasks(l_del_struc_ver_id);
10526 LOOP
10527 FETCH get_top_tasks into l_task_ver_id;
10528 EXIT WHEN get_top_tasks%NOTFOUND;
10529
10530 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10531 p_project_id => p_project_id
10532 ,p_task_version_id => l_task_ver_id
10533 ,p_parent_structure_ver_id => l_del_struc_ver_id
10534 ,x_return_status => l_return_status
10535 ,x_error_message_code => l_err_msg_code );
10536
10537
10538 IF (l_return_status <> 'S') THEN
10539 x_return_status := l_return_status;
10540 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10541 l_msg_data := l_err_msg_code;
10542 CLOSE get_top_tasks;
10543 RAISE FND_API.G_EXC_ERROR;
10544 END IF;
10545 END LOOP;
10546 CLOSE get_top_tasks;
10547
10548 -- PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10549 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10550 p_structure_version_id => l_del_struc_ver_id
10551 ,p_record_version_number => l_struc_ver_rvn
10552 ,x_return_status => l_return_status
10553 ,x_msg_count => l_msg_count
10554 ,x_msg_data => l_msg_data
10555 );
10556
10557 ----end changes
10558
10559 --Check if there is any error.
10560 l_msg_count := FND_MSG_PUB.count_msg;
10561 IF l_msg_count > 0 THEN
10562 x_msg_count := l_msg_count;
10563 IF x_msg_count = 1 THEN
10564 x_msg_data := l_msg_data;
10565 END IF;
10566 CLOSE sel_all_wp_structure_ver;
10567 RAISE FND_API.G_EXC_ERROR;
10568 END IF;
10569 END LOOP;
10570 CLOSE sel_all_wp_structure_ver;
10571
10572 --Add structure type to financial
10573 OPEN sel_fin_structure_id;
10574 FETCH sel_fin_structure_id into l_structure_id;
10575 CLOSE sel_fin_structure_id;
10576
10577 OPEN sel_struc_type_id;
10578 FETCH sel_struc_type_id INTO l_struc_type_id;
10579 CLOSE sel_struc_type_id;
10580
10581 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
10582 X_ROWID => l_rowid
10583 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
10584 ,X_PROJ_ELEMENT_ID => l_structure_id
10585 ,X_STRUCTURE_TYPE_ID => l_struc_type_id
10586 ,X_RECORD_VERSION_NUMBER => 1
10587 ,X_ATTRIBUTE_CATEGORY => NULL
10588 ,X_ATTRIBUTE1 => NULL
10589 ,X_ATTRIBUTE2 => NULL
10590 ,X_ATTRIBUTE3 => NULL
10591 ,X_ATTRIBUTE4 => NULL
10592 ,X_ATTRIBUTE5 => NULL
10593 ,X_ATTRIBUTE6 => NULL
10594 ,X_ATTRIBUTE7 => NULL
10595 ,X_ATTRIBUTE8 => NULL
10596 ,X_ATTRIBUTE9 => NULL
10597 ,X_ATTRIBUTE10 => NULL
10598 ,X_ATTRIBUTE11 => NULL
10599 ,X_ATTRIBUTE12 => NULL
10600 ,X_ATTRIBUTE13 => NULL
10601 ,X_ATTRIBUTE14 => NULL
10602 ,X_ATTRIBUTE15 => NULL
10603 );
10604
10605 --add proj_wp attr
10606 PA_WORKPLAN_ATTR_PVT.CREATE_PROJ_WORKPLAN_ATTRS(
10607 p_validate_only => FND_API.G_FALSE
10608 ,p_project_id => p_project_id
10609 ,p_proj_element_id => l_structure_id
10610 ,p_approval_reqd_flag => l_proj_workplan_attr_rec.WP_APPROVAL_REQD_FLAG
10611 ,p_auto_publish_flag => l_proj_workplan_attr_rec.WP_AUTO_PUBLISH_FLAG
10612 ,p_approver_source_id => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_ID
10613 ,p_approver_source_type => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_TYPE
10614 ,p_default_display_lvl => l_proj_workplan_attr_rec.WP_DEFAULT_DISPLAY_LVL
10615 ,p_enable_wp_version_flag => l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG
10616 ,p_auto_pub_upon_creation_flag => l_proj_workplan_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
10617 ,p_auto_sync_txn_date_flag => l_proj_workplan_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
10618 ,p_txn_date_sync_buf_days => l_proj_workplan_attr_rec.TXN_DATE_SYNC_BUF_DAYS
10619 --LDENG
10620 ,p_lifecycle_version_id => l_proj_workplan_attr_rec.LIFECYCLE_VERSION_ID
10621 ,p_current_phase_version_id => l_proj_workplan_attr_rec.CURRENT_PHASE_VERSION_ID
10622 --END LDENG
10623 ,x_return_status => l_return_status
10624 ,x_msg_count => l_msg_count
10625 ,x_msg_data => l_msg_data
10626 );
10627
10628 --Check if there is any error.
10629 l_msg_count := FND_MSG_PUB.count_msg;
10630 IF l_msg_count > 0 THEN
10631 x_msg_count := l_msg_count;
10632 IF x_msg_count = 1 THEN
10633 x_msg_data := l_msg_data;
10634 END IF;
10635 RAISE FND_API.G_EXC_ERROR;
10636 END IF;
10637
10638 --bug 3010538
10639 --copy task weighting basis
10640 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
10641 p_validate_only => FND_API.G_FALSE
10642 ,p_project_id => p_project_id
10643 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
10644 ,P_OBJECT_ID => l_structure_id
10645 ,p_PROGRESS_CYCLE_ID => l_proj_progress_attr_rec.PROGRESS_CYCLE_ID
10646 ,p_wq_enable_flag => l_proj_progress_attr_rec.wq_enable_flag
10647 ,p_remain_effort_enable_flag => l_proj_progress_attr_rec.remain_effort_enable_flag
10648 ,p_percent_comp_enable_flag => l_proj_progress_attr_rec.percent_comp_enable_flag
10649 ,p_next_progress_update_date => l_proj_progress_attr_rec.next_progress_update_date
10650 ,p_action_set_id => NULL
10651 ,p_TASK_WEIGHT_BASIS_CODE => l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE
10652 ,x_proj_progress_attr_id => l_proj_prog_attr_id
10653 ,x_return_status => l_return_status
10654 ,x_msg_count => x_msg_count
10655 ,x_msg_data => x_msg_data
10656 );
10657
10658 --Check if there is any error.
10659 l_msg_count := FND_MSG_PUB.count_msg;
10660 IF l_msg_count > 0 THEN
10661 x_msg_count := l_msg_count;
10662 IF x_msg_count = 1 THEN
10663 x_msg_data := l_msg_data;
10664 END IF;
10665 RAISE FND_API.G_EXC_ERROR;
10666 END IF;
10667
10668 --Loop schedule version to structure version and task versions
10669 OPEN sel_struc_ver(l_structure_id);
10670 FETCH sel_struc_ver into l_structure_version_id;
10671 CLOSE sel_struc_ver;
10672
10673 --3035902: process update flag changes
10674 IF (l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE = 'EFFORT') THEN
10675 --set process flag to Y
10676 --get structure version id
10677 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
10678 p_project_id => p_project_id,
10679 p_structure_version_id => l_structure_version_id,
10680 p_update_wbs_flag => 'Y',
10681 x_return_status => l_return_status,
10682 x_msg_count => l_msg_count,
10683 x_msg_data => l_msg_data
10684 );
10685 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
10686 x_msg_count := FND_MSG_PUB.count_msg;
10687 if x_msg_count = 1 then
10688 x_msg_data := l_msg_data;
10689 end if;
10690 raise FND_API.G_EXC_ERROR;
10691 end if;
10692
10693 END IF;
10694 --3035902: end process update flag changes
10695
10696
10697 OPEN sel_struc_and_task_vers(l_structure_version_id);
10698 LOOP
10699 FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
10700 EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
10701 --hsiu: commented for performance enhancement
10702 -- l_start_date := sysdate;
10703 -- l_completion_date := sysdate;
10704
10705 --If it is lowest task, get dates
10706 --hsiu: commented for performance
10707 -- IF (l_object_type = 'PA_TASKS' AND
10708 -- PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_element_version_id) = 'Y') THEN
10709 -- OPEN sel_task_dates(l_task_id);
10710 -- FETCH sel_task_dates into l_start_date, l_completion_date;
10711 -- CLOSE sel_task_dates;
10712
10713 -- Bug 2790703 Begin
10714 --Add to array for rollup
10715 --l_task_ver_ids.extend;
10716 --l_task_ver_ids(l_task_ver_ids.count) := l_element_version_id;
10717 l_index := l_index + 1;
10718 l_task_ver_ids_tbl(l_index) := l_element_version_id;
10719 -- Bug 2790703 End
10720
10721 --hsiu: commented for performance
10722 -- IF (l_start_date IS NULL) OR (l_completion_date IS NULL) THEN
10723 -- CLOSE sel_struc_and_task_vers;
10724 -- PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_FIN_TK_DATE_MISS');
10725 -- x_msg_data := 'PA_PS_FIN_TK_DATE_MISS';
10726 -- RAISE FND_API.G_EXC_ERROR;
10727 --hsiu: 2634029
10728 -- Default sysdate or project target dates if transaction dates
10729 -- are missing.
10730 -- l_start_date := l_target_start_date;
10731 -- l_completion_date := l_target_finish_date;
10732 -- END IF;
10733 -- END IF;
10734
10735 -- anlee
10736 -- Commented out for performance
10737 -- Will use bulk insert into schedule table instead
10738 -- anlee end of comment
10739
10740 END LOOP;
10741 CLOSE sel_struc_and_task_vers;
10742
10743 INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
10744 pev_schedule_id,
10745 element_version_id,
10746 project_id,
10747 proj_element_id,
10748 creation_date,
10749 created_by,
10750 last_update_date,
10751 last_updated_by,
10752 scheduled_start_date,
10753 scheduled_finish_date,
10754 milestone_flag,
10755 critical_flag,
10756 calendar_id,
10757 record_version_number,
10758 last_update_login,
10759 source_object_id,
10760 source_object_type
10761 )
10762 SELECT
10763 pa_proj_elem_ver_schedule_s.nextval,
10764 PPEV.element_version_id,
10765 PPEV.project_id,
10766 PPEV.proj_element_id,
10767 SYSDATE,
10768 FND_GLOBAL.USER_ID,
10769 SYSDATE,
10770 FND_GLOBAL.USER_ID,
10771 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))),
10772 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))),
10773 'N',
10774 'N',
10775 l_calendar_id,
10776 0,
10777 FND_GLOBAL.LOGIN_ID,
10778 PPEV.project_id,
10779 'PA_PROJECTS'
10780 FROM PA_TASKS PT,
10781 PA_PROJ_ELEMENT_VERSIONS PPEV
10782 WHERE
10783 PPEV.parent_structure_version_id = l_structure_version_id
10784 AND PPEV.proj_element_id = PT.task_id (+);
10785 -- anlee end of bulk insert
10786
10787 -- Bug 2790703 Begin
10788 IF (l_task_ver_ids_tbl.count > 0) THEN
10789 --rollup
10790 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
10791 p_commit => FND_API.G_FALSE,
10792 p_element_versions => l_task_ver_ids_tbl,
10793 x_return_status => l_return_status,
10794 x_msg_count => l_msg_count,
10795 x_msg_data => l_msg_data);
10796
10797 -- Bug 2790703 End
10798
10799 --Check if there is any error.
10800 l_msg_count := FND_MSG_PUB.count_msg;
10801 IF l_msg_count > 0 THEN
10802 x_msg_count := l_msg_count;
10803 IF x_msg_count = 1 THEN
10804 x_msg_data := l_msg_data;
10805 END IF;
10806 RAISE FND_API.G_EXC_ERROR;
10807 END IF;
10808 END IF;
10809
10810 --check if project or template; set status
10811 OPEN get_template_flag;
10812 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10813 CLOSE get_template_flag;
10814
10815 --bug 3010538
10816 --set update flag to 'Y' for all working versions (or published
10817 -- if versioning is disabled
10818 IF (l_template_flag = 'Y') THEN
10819 l_status_code := 'STRUCTURE_WORKING';
10820 l_baseline_flag := 'N';
10821 l_latest_eff_pub_flag := 'N';
10822 l_effective_date := NULL;
10823 ELSE
10824 l_status_code := 'STRUCTURE_PUBLISHED';
10825 l_baseline_flag := 'Y';
10826 l_latest_eff_pub_flag := 'Y';
10827 l_effective_date := sysdate;
10828 END IF;
10829
10830 --Change status
10831 OPEN sel_struc_ver_attr_rvn(l_structure_version_id);
10832 FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
10833 l_struc_ver_attr_rvn;
10834 CLOSE sel_struc_ver_attr_rvn;
10835
10836 --bug 3010538
10837 --added process_update_wbs_flag
10838 UPDATE pa_proj_elem_ver_structure
10839 set status_code = l_status_code,
10840 current_flag = l_baseline_flag,
10841 current_baseline_date = l_effective_date,
10842 current_baseline_person_id = NULL,
10843 latest_eff_published_flag = l_latest_eff_pub_flag,
10844 effective_date = l_effective_date,
10845 -- PROCESS_UPDATE_WBS_FLAG = l_update_proc_wbs_flag,
10846 record_version_number = record_version_number + 1
10847 where pev_structure_id = l_pev_structure_id;
10848
10849 --bug 2843569
10850 IF (l_status_code = 'STRUCTURE_PUBLISHED') OR
10851 (l_template_flag = 'Y') THEN
10852 OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
10853 FETCH get_scheduled_dates into l_get_sch_dates_cur;
10854 CLOSE get_scheduled_dates;
10855
10856 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
10857 p_validate_only => FND_API.G_FALSE
10858 ,p_project_id => p_project_id
10859 ,p_date_type => 'SCHEDULED'
10860 ,p_start_date => l_get_sch_dates_cur.scheduled_start_date
10861 ,p_finish_date => l_get_sch_dates_cur.scheduled_finish_date
10862 ,p_record_version_number=> l_proj_rec_ver_num
10863 ,x_return_status => x_return_status
10864 ,x_msg_count => x_msg_count
10865 ,x_msg_data => x_msg_data );
10866
10867 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10868 RAISE FND_API.G_EXC_ERROR;
10869 END IF;
10870 END IF;
10871 --bug 2843569
10872
10873 IF (l_baseline_flag = 'Y') THEN
10874 --baseline structure
10875 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
10876 p_commit => FND_API.G_FALSE,
10877 p_structure_version_id => l_structure_version_id,
10878 x_return_status => l_return_status,
10879 x_msg_count => l_msg_count,
10880 x_msg_data => l_msg_data);
10881
10882 --Check if there is any error.
10883 l_msg_count := FND_MSG_PUB.count_msg;
10884 IF l_msg_count > 0 THEN
10885 x_msg_count := l_msg_count;
10886 IF x_msg_count = 1 THEN
10887 x_msg_data := l_msg_data;
10888 END IF;
10889 RAISE FND_API.G_EXC_ERROR;
10890 END IF;
10891
10892 END IF;
10893 -- Bug 2758343 -- Added the following call to recalculate the weightings for existing tasks
10894 RECALC_FIN_TASK_WEIGHTS( p_structure_version_id => l_structure_version_id
10895 , p_project_id => p_project_id
10896 , x_msg_count => l_msg_count
10897 , x_msg_data => l_msg_data
10898 , x_return_status => l_return_status);
10899
10900 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10901 raise FND_API.G_EXC_UNEXPECTED_ERROR;
10902 END IF;
10903
10904 --end sharing on
10905 ELSIF (p_sharing_enabled_flag = 'Y' AND
10906 PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id) = 'N') THEN
10907 PA_UTILS.ADD_MESSAGE('PA','PA_PS_WP_NOT_EN_SHR_ERR');
10908 x_msg_data := 'PA_PS_WP_NOT_EN_SHR_ERR';
10909 RAISE FND_API.G_EXC_ERROR;
10910 ELSIF (p_sharing_enabled_flag = 'N') THEN
10911 --Validation
10912 PA_PROJECT_STRUCTURE_UTILS.check_sharing_off_ok(p_project_id,
10913 l_ret_stat,
10914 l_err_msg_code);
10915 IF (l_ret_stat = 'N') THEN
10916 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10917 x_msg_data := l_err_msg_code;
10918 RAISE FND_API.G_EXC_ERROR;
10919 END IF;
10920 --sharing off
10921 --Select version to be kept
10922 OPEN sel_latest_pub_ver(l_structure_id);
10923 FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
10924 IF sel_latest_pub_ver%NOTFOUND THEN
10925 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
10926 END IF;
10927 CLOSE sel_latest_pub_ver;
10928
10929 --Delete all other structure versions
10930 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
10931 LOOP
10932 FETCH sel_other_structure_ver into l_del_struc_ver_id,
10933 l_struc_ver_rvn;
10934 EXIT WHEN sel_other_structure_ver%NOTFOUND;
10935 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10936 p_project_id,
10937 l_del_struc_ver_id,
10938 l_return_status,
10939 l_err_msg_code);
10940 IF (l_return_status <> 'S') THEN
10941 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10942 x_msg_data := l_err_msg_code;
10943 RAISE FND_API.G_EXC_ERROR;
10944 END IF;
10945
10946 --get top tasks
10947 OPEN get_top_tasks(l_del_struc_ver_id);
10948 LOOP
10949 FETCH get_top_tasks into l_task_ver_id;
10950 EXIT WHEN get_top_tasks%NOTFOUND;
10951
10952 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10953 p_project_id => p_project_id
10954 ,p_task_version_id => l_task_ver_id
10955 ,p_parent_structure_ver_id => l_del_struc_ver_id
10956 ,x_return_status => l_return_status
10957 ,x_error_message_code => l_err_msg_code );
10958
10959 IF (l_return_status <> 'S') THEN
10960 x_return_status := l_return_status;
10961 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10962 l_msg_data := l_err_msg_code;
10963 CLOSE get_top_tasks;
10964 RAISE FND_API.G_EXC_ERROR;
10965 END IF;
10966 END LOOP;
10967 CLOSE get_top_tasks;
10968
10969 -- PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10970 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10971 p_structure_version_id => l_del_struc_ver_id
10972 ,p_record_version_number => l_struc_ver_rvn
10973 ,x_return_status => l_return_status
10974 ,x_msg_count => l_msg_count
10975 ,x_msg_data => l_msg_data
10976 );
10977 ----end changes
10978
10979 --Check if there is any error.
10980 l_msg_count := FND_MSG_PUB.count_msg;
10981 IF l_msg_count > 0 THEN
10982 x_msg_count := l_msg_count;
10983 IF x_msg_count = 1 THEN
10984 x_msg_data := l_msg_data;
10985 END IF;
10986 CLOSE sel_other_structure_ver;
10987 RAISE FND_API.G_EXC_ERROR;
10988 END IF;
10989
10990 END LOOP;
10991 CLOSE sel_other_structure_ver;
10992
10993 --NULL all baseline dates
10994 UPDATE pa_proj_elements
10995 SET baseline_start_date = NULL,
10996 baseline_finish_date = NULL,
10997 record_version_number = record_version_number+1
10998 WHERE project_id = p_project_id;
10999
11000 --Delete all schedule rows
11001 DELETE FROM pa_proj_elem_ver_schedule
11002 WHERE project_id = p_project_id;
11003
11004 --Delete wp attr row
11005 OPEN get_wp_attr_rvn;
11006 FETCH get_wp_attr_rvn into l_structure_id, l_wp_attr_rvn;
11007 CLOSE get_wp_attr_rvn;
11008
11009 PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
11010 p_validate_only => FND_API.G_FALSE
11011 ,p_project_id => p_project_id
11012 ,p_proj_element_id => l_structure_id
11013 ,p_record_version_number => l_wp_attr_rvn
11014 ,x_return_status => l_return_status
11015 ,x_msg_count => l_msg_count
11016 ,x_msg_data => l_msg_data
11017 );
11018
11019 --Check if there is any error.
11020 l_msg_count := FND_MSG_PUB.count_msg;
11021 IF l_msg_count > 0 THEN
11022 x_msg_count := l_msg_count;
11023 IF x_msg_count = 1 THEN
11024 x_msg_data := l_msg_data;
11025 END IF;
11026 RAISE FND_API.G_EXC_ERROR;
11027 END IF;
11028
11029 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
11030 p_validate_only => FND_API.G_FALSE
11031 ,p_project_id => p_project_id
11032 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
11033 ,P_OBJECT_ID => l_structure_id
11034 ,x_return_status => l_return_status
11035 ,x_msg_count => x_msg_count
11036 ,x_msg_data => x_msg_data
11037 );
11038
11039 --Check if there is any error.
11040 l_msg_count := FND_MSG_PUB.count_msg;
11041 IF l_msg_count > 0 THEN
11042 x_msg_count := l_msg_count;
11043 IF x_msg_count = 1 THEN
11044 x_msg_data := l_msg_data;
11045 END IF;
11046 RAISE FND_API.G_EXC_ERROR;
11047 END IF;
11048
11049 --Delete structure type
11050 OPEN sel_wp_struct_type(l_structure_id);
11051 FETCH sel_wp_struct_type into l_rowid;
11052 PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
11053 CLOSE sel_wp_struct_type;
11054
11055 --Update structure status to published if project;
11056 -- working if template
11057 OPEN get_template_flag;
11058 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
11059 CLOSE get_template_flag;
11060
11061 OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
11062 FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
11063 l_struc_ver_attr_rvn;
11064 CLOSE sel_struc_ver_attr_rvn;
11065
11066 IF (l_template_flag = 'Y') THEN
11067 l_status_code := 'STRUCTURE_WORKING';
11068 l_latest_eff_pub_flag := 'N';
11069 l_effective_date := NULL;
11070 ELSE
11071 l_status_code := 'STRUCTURE_PUBLISHED';
11072 l_latest_eff_pub_flag := 'Y';
11073 l_effective_date := sysdate;
11074 END IF;
11075
11076 --Change status
11077 UPDATE pa_proj_elem_ver_structure
11078 set status_code = l_status_code,
11079 current_flag = 'N',
11080 current_baseline_date = NULL,
11081 current_baseline_person_id = NULL,
11082 latest_eff_published_flag = l_latest_eff_pub_flag,
11083 effective_date = l_effective_date,
11084 record_version_number = record_version_number + 1
11085 where pev_structure_id = l_pev_structure_id;
11086
11087 --Create structure
11088 --get project name
11089 OPEN get_project_info;
11090 FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date;
11091 CLOSE get_project_info;
11092
11093 IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
11094 l_proj_completion_date := l_proj_start_date;
11095 ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
11096 l_proj_completion_date := sysdate;
11097 l_proj_start_date := sysdate;
11098 END IF;
11099
11100 --get suffix
11101 select meaning
11102 into l_suffix
11103 from pa_lookups
11104 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
11105 and lookup_code = 'WORKPLAN';
11106
11107 l_name := substrb(l_name||l_append||l_suffix, 1, 240);
11108 --Create new structure
11109 PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE
11110 ( p_validate_only => FND_API.G_FALSE
11111 ,p_project_id => p_project_id
11112 ,p_structure_number => l_name
11113 ,p_structure_name => l_name
11114 ,p_calling_flag => 'WORKPLAN'
11115 ,p_approval_reqd_flag => l_proj_workplan_attr_rec.WP_APPROVAL_REQD_FLAG
11116 ,p_auto_publish_flag => l_proj_workplan_attr_rec.WP_AUTO_PUBLISH_FLAG
11117 ,p_approver_source_id => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_ID
11118 ,p_approver_source_type => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_TYPE
11119 ,p_default_display_lvl => l_proj_workplan_attr_rec.WP_DEFAULT_DISPLAY_LVL
11120 ,p_enable_wp_version_flag => l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG
11121 ,p_auto_pub_upon_creation_flag => l_proj_workplan_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
11122 ,p_auto_sync_txn_date_flag => l_proj_workplan_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
11123 ,p_txn_date_sync_buf_days => l_proj_workplan_attr_rec.TXN_DATE_SYNC_BUF_DAYS
11124 --LDENG
11125 ,p_lifecycle_version_id => l_proj_workplan_attr_rec.LIFECYCLE_VERSION_ID
11126 ,p_current_phase_version_id => l_proj_workplan_attr_rec.CURRENT_PHASE_VERSION_ID
11127 --END LDENG
11128 ,p_progress_cycle_id => l_proj_progress_attr_rec.PROGRESS_CYCLE_ID
11129 ,p_wq_enable_flag => l_proj_progress_attr_rec.wq_enable_flag
11130 ,p_remain_effort_enable_flag => l_proj_progress_attr_rec.remain_effort_enable_flag
11131 ,p_percent_comp_enable_flag => l_proj_progress_attr_rec.percent_comp_enable_flag
11132 ,p_next_progress_update_date => l_proj_progress_attr_rec.next_progress_update_date
11133 ,p_action_set_id => NULL
11134 ,p_task_weight_basis_code => l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE
11135 ,x_structure_id => l_structure_id
11136 ,x_return_status => l_return_status
11137 ,x_msg_count => l_msg_count
11138 ,x_msg_data => l_msg_data );
11139
11140 --Check if there is any error.
11141 l_msg_count := FND_MSG_PUB.count_msg;
11142 IF l_msg_count > 0 THEN
11143 x_msg_count := l_msg_count;
11144 IF x_msg_count = 1 THEN
11145 x_msg_data := l_msg_data;
11146 END IF;
11147 RAISE FND_API.G_EXC_ERROR;
11148 END IF;
11149
11150 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
11151 ( p_validate_only => FND_API.G_FALSE
11152 ,p_structure_id => l_structure_id
11153 ,x_structure_version_id => l_structure_version_id
11154 ,x_return_status => l_return_status
11155 ,x_msg_count => l_msg_count
11156 ,x_msg_data => l_msg_data );
11157
11158 --Check if there is any error.
11159 l_msg_count := FND_MSG_PUB.count_msg;
11160 IF l_msg_count > 0 THEN
11161 x_msg_count := l_msg_count;
11162 IF x_msg_count = 1 THEN
11163 x_msg_data := l_msg_data;
11164 END IF;
11165 RAISE FND_API.G_EXC_ERROR;
11166 END IF;
11167
11168 PA_TASK_PUB1.Create_Schedule_Version(
11169 p_element_version_id => l_structure_version_id
11170 ,p_scheduled_start_date => l_proj_start_date
11171 ,p_scheduled_end_date => l_proj_completion_date
11172 ,x_pev_schedule_id => l_pev_schedule_id
11173 ,x_return_status => l_return_status
11174 ,x_msg_count => l_msg_count
11175 ,x_msg_data => l_msg_data
11176 );
11177
11178 --Check if there is any error.
11179 l_msg_count := FND_MSG_PUB.count_msg;
11180 IF l_msg_count > 0 THEN
11181 x_msg_count := l_msg_count;
11182 IF x_msg_count = 1 THEN
11183 x_msg_data := l_msg_data;
11184 END IF;
11185 RAISE FND_API.G_EXC_ERROR;
11186 END IF;
11187
11188 --Check versioning flag, project or template
11189 OPEN get_template_flag;
11190 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
11191 CLOSE get_template_flag;
11192
11193 IF (l_template_flag = 'Y') OR
11194 (l_template_flag = 'N' AND l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y') THEN
11195 l_status_code := 'STRUCTURE_WORKING';
11196 l_baseline_flag := 'N';
11197 l_latest_eff_pub_flag := 'N';
11198 l_effective_date := NULL;
11199 ELSE
11200 l_status_code := 'STRUCTURE_PUBLISHED';
11201 l_baseline_flag := 'Y';
11202 l_latest_eff_pub_flag := 'Y';
11203 l_effective_date := sysdate;
11204 END IF;
11205
11206 IF (l_template_flag = 'Y') THEN
11207 --update project dates
11208 OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
11209 FETCH get_scheduled_dates into l_get_sch_dates_cur;
11210 CLOSE get_scheduled_dates;
11211
11212 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
11213 p_validate_only => FND_API.G_FALSE
11214 ,p_project_id => p_project_id
11215 ,p_date_type => 'SCHEDULED'
11216 ,p_start_date => l_get_sch_dates_cur.scheduled_start_date
11217 ,p_finish_date => l_get_sch_dates_cur.scheduled_finish_date
11218 ,p_record_version_number=> l_proj_rec_ver_num
11219 ,x_return_status => x_return_status
11220 ,x_msg_count => x_msg_count
11221 ,x_msg_data => x_msg_data );
11222
11223 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11224 RAISE FND_API.G_EXC_ERROR;
11225 END IF;
11226 ELSE
11227 IF (l_status_code = 'STRUCTURE_WORKING') THEN
11228 --clear previously set dates
11229 UPDATE PA_PROJECTS_ALL
11230 SET baseline_start_date = NULL,
11231 baseline_finish_date = NULL,
11232 baseline_duration = NULL,
11233 baseline_as_of_date = NULL,
11234 scheduled_start_date = NULL,
11235 scheduled_finish_date = NULL,
11236 scheduled_duration = NULL,
11237 scheduled_as_of_date = NULL
11238 WHERE Project_id = p_project_id;
11239 END IF;
11240 END IF;
11241
11242 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
11243 ( p_validate_only => FND_API.G_FALSE
11244 ,p_structure_version_id => l_structure_version_id
11245 ,p_structure_version_name => l_name
11246 ,p_structure_version_desc => NULL
11247 ,p_effective_date => l_effective_date
11248 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
11249 ,p_locked_status_code => 'UNLOCKED'
11250 ,p_struct_version_status_code => l_status_code
11251 ,p_baseline_current_flag => l_baseline_flag
11252 ,p_baseline_original_flag => 'N'
11253 ,x_pev_structure_id => l_pev_structure_id
11254 ,x_return_status => l_return_status
11255 ,x_msg_count => l_msg_count
11256 ,x_msg_data => l_msg_data );
11257
11258 --Check if there is any error.
11259 l_msg_count := FND_MSG_PUB.count_msg;
11260 IF l_msg_count > 0 THEN
11261 x_msg_count := l_msg_count;
11262 IF x_msg_count = 1 THEN
11263 x_msg_data := l_msg_data;
11264 END IF;
11265 RAISE FND_API.G_EXC_ERROR;
11266 END IF;
11267
11268 --end sharing off
11269 END IF;
11270 --END SHARING CODE
11271 END IF;
11272 */
11273
11274 x_return_status := FND_API.G_RET_STS_SUCCESS;
11275
11276 IF (p_debug_mode = 'Y') THEN
11277 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr end');
11278 END IF;
11279
11280 EXCEPTION
11281 WHEN FND_API.G_EXC_ERROR THEN
11282 IF (p_commit = FND_API.G_TRUE) THEN
11283 ROLLBACK to update_struc_setup_attr_pvt;
11284 END IF;
11285 x_msg_count := FND_MSG_PUB.count_msg;
11286 x_return_status := FND_API.G_RET_STS_ERROR;
11287 WHEN OTHERS THEN
11288 IF (p_commit = FND_API.G_TRUE) THEN
11289 ROLLBACK to update_struc_setup_attr_pvt;
11290 END IF;
11291 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11292 x_msg_count := FND_MSG_PUB.count_msg;
11293 --put message
11294 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
11295 p_procedure_name => 'update_structures_setup_attr',
11296 p_error_text => SUBSTRB(SQLERRM,1,240));
11297 RAISE;
11298 END update_structures_setup_old;
11299
11300 PROCEDURE update_workplan_versioning
11301 ( p_api_version IN NUMBER := 1.0
11302 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
11303 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
11304 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
11305 ,p_validation_level IN VARCHAR2 := 100
11306 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
11307 ,p_debug_mode IN VARCHAR2 := 'N'
11308 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11309 ,p_proj_element_id IN NUMBER
11310 ,p_enable_wp_version_flag IN VARCHAR2
11311 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11312 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11313 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11314 )
11315 IS
11316 l_return_status VARCHAR2(1);
11317 l_msg_count NUMBER;
11318 l_msg_data VARCHAR2(250);
11319 l_ret_stat VARCHAR2(1);
11320 l_err_msg_code VARCHAR2(30);
11321 l_keep_structure_ver_id NUMBER;
11322 l_template_flag VARCHAR2(1);
11323 l_pev_structure_id NUMBER;
11324 l_struc_ver_attr_rvn NUMBER;
11325 l_del_struc_ver_id NUMBER;
11326 l_struc_ver_rvn NUMBER;
11327
11328 --bug 3125813
11329 l_project_id NUMBER;
11330 l_struc_ver_id NUMBER;
11331 --end bug 3125813
11332
11333 cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
11334 select a.element_version_id
11335 from pa_proj_elem_ver_structure a,
11336 pa_proj_elements b
11337 where b.proj_element_id = c_structure_id
11338 and b.project_id = a.project_id
11339 and b.proj_element_id = a.proj_element_id
11340 and a.status_code = 'STRUCTURE_PUBLISHED'
11341 and a.LATEST_EFF_PUBLISHED_FLAG = 'Y';
11342
11343 CURSOR get_template_flag IS
11344 select a.template_flag
11345 from pa_projects_all a,
11346 pa_proj_elements b
11347 where a.project_id = b.project_id
11348 and b.proj_element_id = p_proj_element_id;
11349
11350 cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
11351 select a.PEV_STRUCTURE_ID, a.record_version_number
11352 from pa_proj_elem_ver_structure a,
11353 pa_proj_element_versions b
11354 where b.project_id = a.project_id
11355 and b.element_version_id = c_struc_ver_id
11356 and a.element_version_id = b.element_version_id;
11357
11358 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
11359 select b.element_version_id, b.record_version_number
11360 from pa_proj_element_versions a,
11361 pa_proj_element_versions b
11362 where a.element_version_id = c_keep_struc_ver_id
11363 and a.project_id = b.project_id
11364 and a.proj_element_id = b.proj_element_id
11365 and b.element_version_id <> c_keep_struc_ver_id
11366 and b.object_type = 'PA_STRUCTURES';
11367
11368 --bug 3125813
11369 cursor sel_one_struc_ver(c_structure_id NUMBER) IS
11370 select b.project_id, b.element_version_id
11371 from pa_proj_elements a,
11372 pa_proj_element_versions b
11373 where a.proj_element_id = c_structure_id
11374 and a.project_id = b.project_id
11375 and a.proj_element_id = b.proj_element_id;
11376 --end bug 3125813
11377
11378 --bug 4263266
11379 CURSOR cur_chk_tasks(c_project_id NUMBER, c_structure_version_id NUMBER)
11380 IS
11381 SELECT 'x' from pa_proj_element_versions
11382 WHERE project_id = c_project_id
11383 AND parent_structure_version_id = c_structure_version_id
11384 AND object_type = 'PA_TASKS'
11385 ;
11386 l_dummy VARCHAR2(1);
11387 --end bug 4263266
11388
11389 --BUG 4330926
11390 l_curr_wp_ver_flag PA_PROJ_WORKPLAN_ATTR.WP_ENABLE_VERSION_FLAG%TYPE;
11391
11392 CURSOR get_curr_wp_flag (l_proj_element_id NUMBER, l_project_id NUMBER )IS
11393 SELECT WP_ENABLE_VERSION_FLAG
11394 FROM PA_PROJ_WORKPLAN_ATTR
11395 WHERE PROJ_ELEMENT_ID = l_proj_element_id
11396 AND PROJECT_ID = l_project_id;
11397
11398 --BUG 4330926
11399
11400 --bug 4546607
11401 CURSOR sub_projects ( c_project_id NUMBER, c_relationship_type VARCHAR2)
11402 IS
11403 SELECT *
11404 from pa_structures_links_v
11405 where parent_project_id= c_project_id
11406 and relationship_type = c_relationship_type
11407 ;
11408 --end bug 4546607
11409
11410 BEGIN
11411 IF (p_debug_mode = 'Y') THEN
11412 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_workplan_versioning');
11413 END IF;
11414
11415 IF (p_commit = FND_API.G_TRUE) THEN
11416 savepoint update_wp_versioning_pvt;
11417 END IF;
11418
11419 IF (p_debug_mode = 'Y') THEN
11420 pa_debug.debug('Performing validations');
11421 END IF;
11422
11423 IF (p_enable_wp_version_flag = 'Y') THEN
11424 --enable versioning
11425 PA_PROJECT_STRUCTURE_UTILS.check_versioning_on_ok(
11426 p_proj_element_id
11427 ,l_ret_stat
11428 ,l_err_msg_code);
11429 IF (l_ret_stat = 'N') THEN
11430 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
11431 x_msg_data := l_err_msg_code;
11432 RAISE FND_API.G_EXC_ERROR;
11433 END IF;
11434 --enable versioning
11435 --do not need to do anything
11436
11437 --bug 3125813
11438 --need to update weightings (if necessary) when enable versiong because
11439 --structure will become published.
11440 OPEN sel_one_struc_ver(p_proj_element_id);
11441 FETCH sel_one_struc_ver into l_project_id, l_struc_ver_id;
11442 CLOSE sel_one_struc_ver;
11443
11444 --bug 4546607
11445 --Delete all LW links without checking bcoz versioning is always allowed
11446 --for workplan.
11447 FOR sub_projects_rec in sub_projects(l_project_id, 'LW') LOOP
11448 IF PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published(sub_projects_rec.sub_project_id, sub_projects_rec.sub_structure_ver_id) = 'N'
11449 THEN
11450 PA_RELATIONSHIP_PUB.Delete_SubProject_Association(
11451 p_object_relationships_id => sub_projects_rec.object_relationship_id,
11452 p_record_version_number => sub_projects_rec.record_version_number,
11453 x_return_status => l_return_status,
11454 x_msg_count => l_msg_count,
11455 x_msg_data => l_msg_data
11456 );
11457 --Check if there is any error.
11458 l_msg_count := FND_MSG_PUB.count_msg;
11459 IF l_msg_count > 0 THEN
11460 x_msg_count := l_msg_count;
11461 IF x_msg_count = 1 THEN
11462 x_msg_data := l_msg_data;
11463 END IF;
11464 RAISE FND_API.G_EXC_ERROR;
11465 END IF;
11466 END IF;
11467 END LOOP;
11468 --end bug 4546607
11469
11470 --bug 4263266
11471 --call process wbs updates only if there is atleast one task.
11472 OPEN cur_chk_tasks(l_project_id,l_struc_ver_id);
11473 FETCH cur_chk_tasks INTO l_dummy;
11474 IF cur_chk_tasks%FOUND
11475 THEN
11476 --end bug 4263266
11477 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP(
11478 p_project_id => l_project_id,
11479 p_structure_version_id => l_struc_ver_id,
11480 x_return_status => l_return_status,
11481 x_msg_count => l_msg_count,
11482 x_msg_data => l_msg_data
11483 );
11484
11485 --Check if there is any error.
11486 l_msg_count := FND_MSG_PUB.count_msg;
11487 IF l_msg_count > 0 THEN
11488 x_msg_count := l_msg_count;
11489 IF x_msg_count = 1 THEN
11490 x_msg_data := l_msg_data;
11491 END IF;
11492 -- CLOSE sel_other_structure_ver; --Bug 3793128
11493 RAISE FND_API.G_EXC_ERROR;
11494 END IF;
11495 --end bug 3125813
11496 --bug 4263266
11497 END IF; --if cur_chk_tasks%FOUND
11498 CLOSE cur_chk_tasks;
11499 --end bug 4263266
11500
11501 --Added by rtarway for BUG 4330926
11502 OPEN get_template_flag;
11503 FETCH get_template_flag into l_template_flag;
11504 CLOSE get_template_flag;
11505
11506 OPEN get_curr_wp_flag(p_proj_element_id ,l_project_id);
11507 FETCH get_curr_wp_flag into l_curr_wp_ver_flag;
11508 CLOSE get_curr_wp_flag;
11509
11510 IF ( l_curr_wp_ver_flag ='N' AND l_template_flag = 'N' ) THEN
11511 UPDATE pa_proj_elem_ver_structure
11512 SET current_working_flag = 'N'
11513 WHERE element_version_id = l_struc_ver_id
11514 and project_id = l_project_id;
11515 END IF;
11516 --End Added by rtarway for BUG 4330926
11517
11518 --end enable versioning
11519 ELSIF (p_enable_wp_version_flag = 'N') THEN
11520 --disable versioning
11521 PA_PROJECT_STRUCTURE_UTILS.check_versioning_off_ok(
11522 p_proj_element_id
11523 ,l_ret_stat
11524 ,l_err_msg_code);
11525 IF (l_ret_stat = 'N') THEN
11526 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
11527 x_msg_data := l_err_msg_code;
11528 RAISE FND_API.G_EXC_ERROR;
11529 END IF;
11530 --disable versioning
11531 --Applies to project only
11532 OPEN get_template_flag;
11533 FETCH get_template_flag into l_template_flag;
11534 CLOSE get_template_flag;
11535
11536 IF (l_template_flag = 'N') THEN
11537 --Select version to be kept
11538 OPEN sel_latest_pub_ver(p_proj_element_id);
11539 FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
11540 IF sel_latest_pub_ver%NOTFOUND THEN
11541 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(p_proj_element_id);
11542 END IF;
11543 CLOSE sel_latest_pub_ver;
11544
11545 --Delete all versions except the keep version
11546 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
11547 LOOP
11548 FETCH sel_other_structure_ver into l_del_struc_ver_id,
11549 l_struc_ver_rvn;
11550 EXIT WHEN sel_other_structure_ver%NOTFOUND;
11551 PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
11552 p_structure_version_id => l_del_struc_ver_id
11553 ,p_record_version_number => l_struc_ver_rvn
11554 ,p_calling_from => 'DEL_WP_STRUC_DISABLE_VERSION' ---Added for bug 6023347
11555 ,x_return_status => l_return_status
11556 ,x_msg_count => l_msg_count
11557 ,x_msg_data => l_msg_data
11558 );
11559
11560 --Check if there is any error.
11561 l_msg_count := FND_MSG_PUB.count_msg;
11562 IF l_msg_count > 0 THEN
11563 x_msg_count := l_msg_count;
11564 IF x_msg_count = 1 THEN
11565 x_msg_data := l_msg_data;
11566 END IF;
11567 CLOSE sel_other_structure_ver;
11568 RAISE FND_API.G_EXC_ERROR;
11569 END IF;
11570
11571 END LOOP;
11572 CLOSE sel_other_structure_ver;
11573
11574 --Change status
11575 OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
11576 FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
11577 l_struc_ver_attr_rvn;
11578 CLOSE sel_struc_ver_attr_rvn;
11579
11580 --set status to latest published and baselined
11581
11582 UPDATE pa_proj_elem_ver_structure
11583 set status_code = 'STRUCTURE_PUBLISHED',
11584 published_date = sysdate,
11585 current_flag = 'Y',
11586 current_baseline_date = sysdate,
11587 current_baseline_person_id = NULL,
11588 latest_eff_published_flag = 'Y',
11589 effective_date = sysdate,
11590 LOCK_STATUS_CODE = 'UNLOCKED',
11591 LOCKED_BY_PERSON_ID = NULL,
11592 LOCKED_DATE = NULL,
11593 record_version_number = record_version_number + 1
11594 where pev_structure_id = l_pev_structure_id;
11595
11596 --baseline structure
11597 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
11598 p_commit => FND_API.G_FALSE,
11599 p_structure_version_id => l_keep_structure_ver_id,
11600 x_return_status => l_return_status,
11601 x_msg_count => l_msg_count,
11602 x_msg_data => l_msg_data);
11603
11604 --Check if there is any error.
11605 l_msg_count := FND_MSG_PUB.count_msg;
11606 IF l_msg_count > 0 THEN
11607 x_msg_count := l_msg_count;
11608 IF x_msg_count = 1 THEN
11609 x_msg_data := l_msg_data;
11610 END IF;
11611 RAISE FND_API.G_EXC_ERROR;
11612 END IF;
11613
11614 END IF; --for project
11615
11616 --end disable versioning
11617 END IF;
11618
11619 x_return_status := FND_API.G_RET_STS_SUCCESS;
11620
11621 IF (p_debug_mode = 'Y') THEN
11622 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_workplan_versioning end');
11623 END IF;
11624
11625 EXCEPTION
11626 WHEN FND_API.G_EXC_ERROR THEN
11627 IF (p_commit = FND_API.G_TRUE) THEN
11628 ROLLBACK to update_wp_versioning_pvt;
11629 END IF;
11630 x_msg_count := FND_MSG_PUB.count_msg;
11631 x_return_status := FND_API.G_RET_STS_ERROR;
11632 WHEN OTHERS THEN
11633 IF (p_commit = FND_API.G_TRUE) THEN
11634 ROLLBACK to update_wp_versioning_pvt;
11635 END IF;
11636 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11637 x_msg_count := FND_MSG_PUB.count_msg;
11638 --put message
11639 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
11640 p_procedure_name => 'update_workplan_versioning',
11641 p_error_text => SUBSTRB(SQLERRM,1,240));
11642 RAISE;
11643 END update_workplan_versioning;
11644
11645
11646 PROCEDURE update_wp_calendar
11647 (
11648 p_api_version IN NUMBER := 1.0
11649 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
11650 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
11651 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
11652 ,p_validation_level IN VARCHAR2 := 100
11653 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
11654 ,p_debug_mode IN VARCHAR2 := 'N'
11655 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11656 ,p_project_id IN NUMBER
11657 ,p_calendar_id IN NUMBER
11658 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11659 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11660 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11661 )
11662 IS
11663 l_opt VARCHAR2(1);
11664
11665 cursor get_wp_versions IS
11666 select ppevs.element_version_id
11667 from pa_proj_elem_ver_structure ppevs,
11668 pa_proj_elements ppe,
11669 pa_proj_structure_types ppst,
11670 pa_structure_types pst
11671 where ppevs.status_code <> 'STRUCTURE_PUBLISHED'
11672 and ppevs.project_id = ppe.project_id
11673 and ppevs.proj_element_id = ppe.proj_element_id
11674 and ppe.object_type = 'PA_STRUCTURES'
11675 and ppe.proj_element_id = ppst.proj_element_id
11676 and ppst.structure_type_id = pst.structure_type_id
11677 and pst.structure_type_class_code = 'WORKPLAN'
11678 and ppe.project_id = p_project_id
11679 and '1' = l_opt
11680 union all
11681 select ppevs.element_version_id
11682 from pa_proj_elem_ver_structure ppevs,
11683 pa_proj_elements ppe,
11684 pa_proj_structure_types ppst,
11685 pa_structure_types pst
11686 where ppevs.status_code = 'STRUCTURE_PUBLISHED'
11687 and ppevs.project_id = ppe.project_id
11688 and ppevs.proj_element_id = ppe.proj_element_id
11689 and ppe.object_type = 'PA_STRUCTURES'
11690 and ppe.proj_element_id = ppst.proj_element_id
11691 and ppst.structure_type_id = pst.structure_type_id
11692 and pst.structure_type_class_code = 'WORKPLAN'
11693 and ppe.project_id = p_project_id
11694 and '2' = l_opt;
11695
11696 l_structure_version_id NUMBER;
11697 l_return_status VARCHAR2(1);
11698 l_msg_count NUMBER;
11699 l_msg_data VARCHAR2(250);
11700 l_sch_hours NUMBER;
11701 l_bsl_hours NUMBER;
11702 l_act_hours NUMBER;
11703 l_days NUMBER;
11704 l_start_date DATE;
11705 l_finish_date DATE;
11706 l_template_flag VARCHAR2(1);
11707
11708 --Bug 3010538.
11709 l_weight_basis pa_proj_progress_attr.task_weight_basis_code%TYPE;
11710
11711 CURSOR c1 IS
11712 select template_flag
11713 from pa_projects_all where project_id = p_project_id;
11714
11715 CURSOR c2 IS
11716 select SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE
11717 from pa_projects_all where project_id = p_project_id;
11718
11719 CURSOR c3 IS
11720 select ACTUAL_START_DATE, ACTUAL_FINISH_DATE
11721 from pa_projects_all where project_id = p_project_id;
11722
11723 CURSOR c4 IS
11724 select BASELINE_START_DATE, BASELINE_FINISH_DATE
11725 from pa_projects_all where project_id = p_project_id;
11726 --
11727 l_sch_dur NUMBER; -- Bug 3657808
11728 l_act_dur NUMBER; -- Bug 3657808
11729 l_bsl_dur NUMBER; -- Bug 3657808
11730 --
11731 BEGIN
11732 IF (p_debug_mode = 'Y') THEN
11733 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_WP_CALENDAR BEGIN');
11734 END IF;
11735
11736 IF (p_commit = FND_API.G_TRUE) THEN
11737 savepoint update_wp_calendar;
11738 END IF;
11739
11740 OPEN c1;
11741 FETCH c1 into l_template_flag;
11742 CLOSE c1;
11743
11744 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id) = 'N') THEN
11745 -- Bug 3010538. Task Weighting enhancement.
11746 -- For a template even if the versioning flag is enabled, we will have only a
11747 -- working version and not a published version. Hence setting the option to 1 always
11748 -- in case of a template so that the working version is queried.
11749 IF nvl(l_template_flag,'N') = 'Y' THEN
11750 l_opt := '1';
11751 ELSE
11752 l_opt := '2';
11753 END IF;
11754 --need to modify
11755 --SCHEDULED_DURATION (template and project)
11756 --BASELINE_DURATION (project only)
11757 --ACTUAL_DURATION (project only)
11758 OPEN c2;
11759 FETCH c2 into l_start_date, l_finish_date;
11760 CLOSE c2;
11761
11762 IF (l_start_date IS NOT NULL AND
11763 l_finish_date IS NOT NULL) THEN
11764 -- Bug 3657808 Remove duration calculation using calendar
11765 --Storing in days
11766 l_sch_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11767 /*PA_DURATION_UTILS.get_duration(
11768 p_calendar_id => p_calendar_id
11769 ,p_start_date => l_start_date
11770 ,p_end_date => l_finish_date
11771 ,x_duration_days => l_days
11772 ,x_duration_hours => l_sch_hours
11773 ,x_return_status => l_return_status
11774 ,x_msg_count => l_msg_count
11775 ,x_msg_data => l_msg_data
11776 );
11777
11778 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11779 x_msg_count := FND_MSG_PUB.count_msg;
11780 if x_msg_count = 1 then
11781 x_msg_data := l_msg_data;
11782 end if;
11783 raise FND_API.G_EXC_ERROR;
11784 END IF;*/
11785
11786 END IF;
11787
11788 IF (l_template_flag = 'N') THEN
11789 OPEN c3;
11790 FETCH c3 into l_start_date, l_finish_date;
11791 CLOSE c3;
11792
11793 IF (l_start_date IS NOT NULL AND
11794 l_finish_date IS NOT NULL) THEN
11795 -- Bug 3657808 Remove duration calculation using calendar
11796 --Storing in days
11797 l_act_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11798 /*PA_DURATION_UTILS.get_duration(
11799 p_calendar_id => p_calendar_id
11800 ,p_start_date => l_start_date
11801 ,p_end_date => l_finish_date
11802 ,x_duration_days => l_days
11803 ,x_duration_hours => l_act_hours
11804 ,x_return_status => l_return_status
11805 ,x_msg_count => l_msg_count
11806 ,x_msg_data => l_msg_data
11807 );
11808
11809 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11810 x_msg_count := FND_MSG_PUB.count_msg;
11811 if x_msg_count = 1 then
11812 x_msg_data := l_msg_data;
11813 end if;
11814 raise FND_API.G_EXC_ERROR;
11815 END IF;*/
11816 END IF;
11817
11818
11819 OPEN c4;
11820 FETCH c4 into l_start_date, l_finish_date;
11821 CLOSE c4;
11822
11823 IF (l_start_date IS NOT NULL AND
11824 l_finish_date IS NOT NULL) THEN
11825 -- Bug 3657808 Remove duration calculation using calendar
11826 --Storing in days
11827 l_bsl_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11828 /*PA_DURATION_UTILS.get_duration(
11829 p_calendar_id => p_calendar_id
11830 ,p_start_date => l_start_date
11831 ,p_end_date => l_finish_date
11832 ,x_duration_days => l_days
11833 ,x_duration_hours => l_bsl_hours
11834 ,x_return_status => l_return_status
11835 ,x_msg_count => l_msg_count
11836 ,x_msg_data => l_msg_data
11837 );
11838
11839 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11840 x_msg_count := FND_MSG_PUB.count_msg;
11841 if x_msg_count = 1 then
11842 x_msg_data := l_msg_data;
11843 end if;
11844 raise FND_API.G_EXC_ERROR;
11845 END IF;*/
11846 END IF;
11847
11848 --hsiu: removed record version number for Forms changes
11849 update pa_projects_all
11850 /*set SCHEDULED_DURATION = l_sch_hours,
11851 BASELINE_DURATION = l_bsl_hours,
11852 ACTUAL_DURATION = l_act_hours*/
11853 set SCHEDULED_DURATION = l_sch_dur,
11854 BASELINE_DURATION = l_bsl_dur,
11855 ACTUAL_DURATION = l_act_dur
11856 where project_id = p_project_id;
11857
11858 END IF;
11859 ELSE
11860 l_opt := '1';
11861
11862 IF (l_template_flag = 'Y') THEN
11863 OPEN c2;
11864 FETCH c2 into l_start_date, l_finish_date;
11865 CLOSE c2;
11866
11867 IF (l_start_date IS NOT NULL AND
11868 l_finish_date IS NOT NULL) THEN
11869 -- Bug 3657808 Remove duration calculation using calendar
11870 --Storing in days
11871 l_sch_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11872 /*PA_DURATION_UTILS.get_duration(
11873 p_calendar_id => p_calendar_id
11874 ,p_start_date => l_start_date
11875 ,p_end_date => l_finish_date
11876 ,x_duration_days => l_days
11877 ,x_duration_hours => l_sch_hours
11878 ,x_return_status => l_return_status
11879 ,x_msg_count => l_msg_count
11880 ,x_msg_data => l_msg_data
11881 );
11882
11883 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11884 x_msg_count := FND_MSG_PUB.count_msg;
11885 if x_msg_count = 1 then
11886 x_msg_data := l_msg_data;
11887 end if;
11888 raise FND_API.G_EXC_ERROR;
11889 END IF;*/
11890 END IF;
11891
11892 --hsiu: removed record version number for Forms changes
11893 update pa_projects_all
11894 -- set SCHEDULED_DURATION = l_sch_hours
11895 set SCHEDULED_DURATION = l_sch_dur
11896 where project_id = p_project_id;
11897
11898 END IF;
11899 END IF;
11900
11901 -- Bug 3010538. Task Weighting enhancement.
11902 -- Obtain the task weighting basis for the project.
11903 l_weight_basis := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
11904
11905 --get all working versions
11906 OPEN get_wp_versions;
11907 LOOP
11908 FETCH get_wp_versions into l_structure_version_id;
11909 EXIT WHEN get_wp_versions%NOTFOUND;
11910
11911 -- Bug 3010538. Task Weighting enhancement.
11912 -- The weightage needs to be recalculated for the structure version(s), if the task
11913 -- weighting basis is DURATION. Recalculation has to be done for the only version(that
11914 -- is published) if versioning is disabled and for all the non published versions when
11915 -- versioning is enabled in case of a project and for the working version in case of a
11916 -- template.
11917 IF l_weight_basis = 'DURATION' THEN
11918 -- Always call this API as the cursor would have taken care to select the appropriate
11919 -- structure version for processing.
11920 pa_proj_task_struc_pub.set_update_wbs_flag(
11921 p_project_id => p_project_id
11922 ,p_structure_version_id => l_structure_version_id
11923 ,x_return_status => l_return_status
11924 ,x_msg_count => l_msg_count
11925 ,x_msg_data => l_msg_data
11926 );
11927
11928 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11929 x_msg_count := FND_MSG_PUB.count_msg;
11930 if x_msg_count = 1 then
11931 x_msg_data := l_msg_data;
11932 end if;
11933 raise FND_API.G_EXC_ERROR;
11934 END IF;
11935 END IF;
11936
11937 PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION(
11938 p_structure_version_id => l_structure_version_id
11939 ,p_calendar_id => p_calendar_id
11940 ,x_return_status => l_return_status
11941 ,x_msg_count => l_msg_count
11942 ,x_msg_data => l_msg_data
11943 );
11944
11945 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11946 x_msg_count := FND_MSG_PUB.count_msg;
11947 if x_msg_count = 1 then
11948 x_msg_data := l_msg_data;
11949 end if;
11950 raise FND_API.G_EXC_ERROR;
11951 END IF;
11952
11953 --update duration for all working structure versions
11954 END LOOP;
11955 CLOSE get_wp_versions;
11956
11957 x_return_status := FND_API.G_RET_STS_SUCCESS;
11958
11959 IF (p_debug_mode = 'Y') THEN
11960 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_WP_CALENDAR end');
11961 END IF;
11962
11963 EXCEPTION
11964 WHEN FND_API.G_EXC_ERROR THEN
11965 IF (p_commit = FND_API.G_TRUE) THEN
11966 ROLLBACK to update_wp_calendar;
11967 END IF;
11968 x_msg_count := FND_MSG_PUB.count_msg;
11969 x_return_status := FND_API.G_RET_STS_ERROR;
11970 WHEN OTHERS THEN
11971 IF (p_commit = FND_API.G_TRUE) THEN
11972 ROLLBACK to update_wp_calendar;
11973 END IF;
11974 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11975 x_msg_count := FND_MSG_PUB.count_msg;
11976 --put message
11977 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
11978 p_procedure_name => 'Update_wp_calendar',
11979 p_error_text => SUBSTRB(SQLERRM,1,240));
11980 RAISE;
11981 END update_wp_calendar;
11982
11983 PROCEDURE update_all_wp_calendar
11984 (
11985 p_api_version IN NUMBER := 1.0
11986 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
11987 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
11988 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
11989 ,p_validation_level IN VARCHAR2 := 100
11990 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
11991 ,p_debug_mode IN VARCHAR2 := 'N'
11992 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11993 ,p_calendar_id IN NUMBER
11994 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11995 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11996 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11997 )
11998 is
11999 Cursor c_calendar_projects
12000 IS
12001 Select project_id
12002 from pa_projects_all
12003 where calendar_id = p_calendar_id;
12004 BEGIN
12005 IF (p_debug_mode = 'Y') THEN
12006 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_ALL_WP_CALENDAR BEGIN');
12007 END IF;
12008
12009 IF (p_commit = FND_API.G_TRUE) THEN
12010 savepoint update_all_wp_calendar;
12011 END IF;
12012
12013 FOR c_rec IN c_calendar_projects
12014 LOOP
12015 PA_PROJECT_STRUCTURE_PVT1.update_wp_calendar
12016 (
12017 p_api_version => p_api_version
12018 ,p_init_msg_list => p_init_msg_list
12019 ,p_commit => p_commit
12020 ,p_validate_only => p_validate_only
12021 ,p_validation_level => p_validation_level
12022 ,p_calling_module => p_calling_module
12023 ,p_debug_mode => p_debug_mode
12024 ,p_max_msg_count => p_max_msg_count
12025 ,p_project_id => c_rec.project_id
12026 ,p_calendar_id => p_calendar_id
12027 ,x_return_status => x_return_status
12028 ,x_msg_count => x_msg_count
12029 ,x_msg_data => x_msg_data
12030 );
12031 END LOOP;
12032 x_return_status := FND_API.G_RET_STS_SUCCESS;
12033
12034 IF (p_debug_mode = 'Y') THEN
12035 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_ALL_WP_CALENDAR END');
12036 END IF;
12037
12038 EXCEPTION
12039 WHEN OTHERS THEN
12040 IF (p_commit = FND_API.G_TRUE) THEN
12041 ROLLBACK to update_all_wp_calendar;
12042 END IF;
12043 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12044 x_msg_count := FND_MSG_PUB.count_msg;
12045 --put message
12046 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
12047 p_procedure_name => 'Update_all_wp_calendar',
12048 p_error_text => SUBSTRB(SQLERRM,1,240));
12049 RAISE;
12050 END UPDATE_ALL_WP_CALENDAR;
12051
12052
12053 PROCEDURE RECALC_STRUC_VER_DURATION(
12054 p_api_version IN NUMBER := 1.0
12055 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
12056 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
12057 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
12058 ,p_validation_level IN VARCHAR2 := 100
12059 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
12060 ,p_debug_mode IN VARCHAR2 := 'N'
12061 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12062 ,p_structure_version_id IN NUMBER
12063 ,p_calendar_id IN NUMBER
12064 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12065 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12066 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12067 )
12068 IS
12069 CURSOR get_dates IS
12070 select ppvsch.pev_schedule_id,
12071 ppvsch.scheduled_start_date, ppvsch.scheduled_finish_date,
12072 ppvsch.estimated_start_date, ppvsch.estimated_finish_date,
12073 ppvsch.actual_start_date, ppvsch.actual_finish_date
12074 from pa_proj_elem_ver_schedule ppvsch,
12075 pa_proj_element_versions ppv
12076 where ppv.parent_structure_version_id = p_structure_version_id
12077 and ppv.project_id = ppvsch.project_id
12078 and ppv.proj_element_id = ppvsch.proj_element_id
12079 and ppv.element_version_id = ppvsch.element_version_id;
12080
12081 l_pev_schedule_id NUMBER;
12082 l_days NUMBER;
12083 l_hours NUMBER;
12084 l_scheduled_start_date DATE;
12085 l_scheduled_finish_date DATE;
12086 l_estimated_start_date DATE;
12087 l_estimated_finish_date DATE;
12088 l_actual_start_date DATE;
12089 l_actual_finish_date DATE;
12090
12091 l_return_status VARCHAR2(1);
12092 l_msg_count NUMBER;
12093 l_msg_data VARCHAR2(250);
12094 l_act_days NUMBER; -- Bug 3657808
12095 l_sch_days NUMBER; -- Bug 3657808
12096 l_est_days NUMBER; -- Bug 3657808
12097 BEGIN
12098
12099 IF (p_debug_mode = 'Y') THEN
12100 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION BEGIN');
12101 END IF;
12102
12103 IF (p_commit = FND_API.G_TRUE) THEN
12104 savepoint RECALC_STRUC_VER_DURATION;
12105 END IF;
12106
12107 OPEN get_dates;
12108 LOOP
12109 FETCH get_dates INTO l_pev_schedule_id,
12110 l_scheduled_start_date,
12111 l_scheduled_finish_date,
12112 l_estimated_start_date,
12113 l_estimated_finish_date,
12114 l_actual_start_date,
12115 l_actual_finish_date;
12116 EXIT WHEN get_dates%NOTFOUND;
12117
12118 --Update calendar id
12119 UPDATE PA_PROJ_ELEM_VER_SCHEDULE
12120 SET calendar_id = p_calendar_id
12121 WHERE pev_schedule_id = l_pev_schedule_id;
12122
12123 --Update schedule dates
12124 IF (l_scheduled_start_date IS NOT NULL AND
12125 l_scheduled_finish_date IS NOT NULL) THEN
12126 -- Bug 3657808 Remove duration calculation using calendar
12127 --Storing in days
12128 l_sch_days:=trunc(l_scheduled_finish_date) - trunc(l_scheduled_start_date) + 1;
12129 /*PA_DURATION_UTILS.get_duration(
12130 p_calendar_id => p_calendar_id
12131 ,p_start_date => l_scheduled_start_date
12132 ,p_end_date => l_scheduled_finish_date
12133 ,x_duration_days => l_days
12134 ,x_duration_hours => l_hours
12135 ,x_return_status => l_return_status
12136 ,x_msg_count => l_msg_count
12137 ,x_msg_data => l_msg_data
12138 );
12139
12140 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12141 x_msg_count := FND_MSG_PUB.count_msg;
12142 if x_msg_count = 1 then
12143 x_msg_data := l_msg_data;
12144 end if;
12145 raise FND_API.G_EXC_ERROR;
12146 END IF;*/
12147
12148 UPDATE PA_PROJ_ELEM_VER_SCHEDULE
12149 --SET DURATION = l_hours
12150 SET DURATION = l_sch_days
12151 WHERE pev_schedule_id = l_pev_schedule_id;
12152 END IF;
12153
12154 --Update estimated dates
12155 IF (l_estimated_start_date IS NOT NULL AND
12156 l_estimated_finish_date IS NOT NULL) THEN
12157 -- Bug 3657808 Remove duration calculation using calendar
12158 --Storing in days
12159 /* Commented call to API for 4210634 - It was missed during code fix for bug 3657808 */
12160 l_est_days:=trunc(l_estimated_finish_date) - trunc(l_estimated_start_date) + 1;
12161 /* PA_DURATION_UTILS.get_duration(
12162 p_calendar_id => p_calendar_id
12163 ,p_start_date => l_estimated_start_date
12164 ,p_end_date => l_estimated_finish_date
12165 ,x_duration_days => l_days
12166 ,x_duration_hours => l_hours
12167 ,x_return_status => l_return_status
12168 ,x_msg_count => l_msg_count
12169 ,x_msg_data => l_msg_data
12170 );
12171
12172 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12173 x_msg_count := FND_MSG_PUB.count_msg;
12174 if x_msg_count = 1 then
12175 x_msg_data := l_msg_data;
12176 end if;
12177 raise FND_API.G_EXC_ERROR;
12178 END IF; */
12179
12180 UPDATE PA_PROJ_ELEM_VER_SCHEDULE
12181 --SET ESTIMATED_DURATION = l_hours
12182 SET ESTIMATED_DURATION = l_est_days
12183 WHERE pev_schedule_id = l_pev_schedule_id;
12184 END IF;
12185
12186 --Update actual dates
12187 IF (l_actual_start_date IS NOT NULL AND
12188 l_actual_finish_date IS NOT NULL) THEN
12189 -- Bug 3657808 Remove duration calculation using calendar
12190 --Storing in days
12191 l_act_days:=trunc(l_actual_finish_date) - trunc(l_actual_start_date) + 1;
12192 /*PA_DURATION_UTILS.get_duration(
12193 p_calendar_id => p_calendar_id
12194 ,p_start_date => l_actual_start_date
12195 ,p_end_date => l_actual_finish_date
12196 ,x_duration_days => l_days
12197 ,x_duration_hours => l_hours
12198 ,x_return_status => l_return_status
12199 ,x_msg_count => l_msg_count
12200 ,x_msg_data => l_msg_data
12201 );
12202
12203 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12204 x_msg_count := FND_MSG_PUB.count_msg;
12205 if x_msg_count = 1 then
12206 x_msg_data := l_msg_data;
12207 end if;
12208 raise FND_API.G_EXC_ERROR;
12209 END IF;*/
12210
12211 UPDATE PA_PROJ_ELEM_VER_SCHEDULE
12212 -- SET ACTUAL_DURATION = l_hours
12213 SET ACTUAL_DURATION = l_act_days
12214 WHERE pev_schedule_id = l_pev_schedule_id;
12215 END IF;
12216
12217 END LOOP;
12218 CLOSE get_dates;
12219
12220 IF (p_debug_mode = 'Y') THEN
12221 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION end');
12222 END IF;
12223
12224 EXCEPTION
12225 WHEN FND_API.G_EXC_ERROR THEN
12226 IF (p_commit = FND_API.G_TRUE) THEN
12227 ROLLBACK to RECALC_STRUC_VER_DURATION;
12228 END IF;
12229 x_msg_count := FND_MSG_PUB.count_msg;
12230 x_return_status := FND_API.G_RET_STS_ERROR;
12231 WHEN OTHERS THEN
12232 IF (p_commit = FND_API.G_TRUE) THEN
12233 ROLLBACK to RECALC_STRUC_VER_DURATION;
12234 END IF;
12235 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12236 x_msg_count := FND_MSG_PUB.count_msg;
12237 --put message
12238 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
12239 p_procedure_name => 'RECALC_STRUC_VER_DURATION',
12240 p_error_text => SUBSTRB(SQLERRM,1,240));
12241 RAISE;
12242 END RECALC_STRUC_VER_DURATION;
12243
12244
12245 procedure Delete_Struc_Ver_Wo_Val
12246 (
12247 p_api_version IN NUMBER := 1.0
12248 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
12249 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
12250 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
12251 ,p_validation_level IN VARCHAR2 := 100
12252 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
12253 ,p_debug_mode IN VARCHAR2 := 'N'
12254 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12255 ,p_structure_version_id IN NUMBER
12256 ,p_record_version_number IN NUMBER
12257 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12258 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12259 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12260 )
12261 IS
12262 l_api_name CONSTANT VARCHAR(30) := 'Delete_Struc_Ver_Wo_Val';
12263 l_api_version CONSTANT NUMBER := 1.0;
12264
12265 l_return_status VARCHAR2(1);
12266 l_msg_count NUMBER;
12267 l_msg_data VARCHAR2(250);
12268 l_data VARCHAR2(250);
12269 l_msg_index_out NUMBER;
12270
12271 l_dummy VARCHAR2(1);
12272 l_error_message_code VARCHAR2(250);
12273
12274 CURSOR get_struc_ver IS
12275 select pev.project_id, pe.proj_element_id, pe.record_version_number,
12276 pev.element_version_id, pev.record_version_number,
12277 pevs.pev_structure_id, pevs.record_version_number,
12278 pevsh.pev_schedule_id, pevsh.record_version_number,
12279 pevsh.rowid
12280 from pa_proj_elements pe,
12281 pa_proj_element_versions pev,
12282 pa_proj_elem_ver_structure pevs,
12283 pa_proj_elem_ver_schedule pevsh
12284 where pev.element_version_id = p_structure_version_id and
12285 pev.proj_element_id = pe.proj_element_id and
12286 pev.project_id = pevs.project_id and
12287 pev.element_version_id = pevs.element_version_id and
12288 pev.project_id = pevsh.project_id (+) and
12289 pev.element_version_id = pevsh.element_version_id (+);
12290
12291 CURSOR is_last_version(p_structure_id NUMBER) IS
12292 select 'N'
12293 from pa_proj_element_versions
12294 where proj_element_id = p_structure_id;
12295
12296 CURSOR get_top_tasks IS
12297 select v.element_version_id
12298 from pa_proj_element_versions v,
12299 pa_object_relationships r
12300 where v.element_version_id = r.object_id_to1
12301 and r.object_id_from1 = p_structure_version_id
12302 and r.object_type_from = 'PA_STRUCTURES';
12303
12304 cursor sel_wp_attr(c_proj_element_id NUMBER) IS
12305 select record_version_number
12306 from pa_proj_workplan_attr
12307 where proj_element_id = c_proj_element_id;
12308
12309 l_project_id PA_PROJ_ELEMENT_VERSIONS.PROJECT_ID%TYPE;
12310 l_proj_element_id PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
12311 l_pe_rvn PA_PROJ_ELEMENTS.RECORD_VERSION_NUMBER%TYPE;
12312 l_element_version_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
12313 l_pev_rvn PA_PROJ_ELEMENT_VERSIONS.RECORD_VERSION_NUMBER%TYPE;
12314 l_pev_structure_id PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
12315 l_pevs_rvn PA_PROJ_ELEM_VER_STRUCTURE.RECORD_VERSION_NUMBER%TYPE;
12316 l_pev_schedule_id PA_PROJ_ELEM_VER_SCHEDULE.PEV_SCHEDULE_ID%TYPE;
12317 l_pevsh_rvn PA_PROJ_ELEM_VER_SCHEDULE.RECORD_VERSION_NUMBER%TYPE;
12318 l_pevsh_rowid VARCHAR2(255);
12319
12320 l_task_version_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
12321 l_task_rvn PA_PROJ_ELEMENT_VERSIONS.RECORD_VERSION_NUMBER%TYPE;
12322 l_wp_attr_rvn PA_PROJ_WORKPLAN_ATTR.RECORD_VERSION_NUMBER%TYPE;
12323
12324 l_parent_struc_ver_id PA_PROJ_ELEMENT_VERSIONS.PARENT_STRUCTURE_VERSION_ID%TYPE;
12325
12326 BEGIN
12327 IF (p_debug_mode = 'Y') THEN
12328 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL begin');
12329 END IF;
12330
12331 IF (p_commit = FND_API.G_TRUE) THEN
12332 savepoint delete_struc_ver_wo_val;
12333 END IF;
12334
12335 IF (p_debug_mode = 'Y') THEN
12336 pa_debug.debug('get structure version_info');
12337 END IF;
12338
12339 --Delete logic
12340 --Get structure version information
12341 OPEN get_struc_ver;
12342 FETCH get_struc_ver INTO l_project_id,
12343 l_proj_element_id,
12344 l_pe_rvn,
12345 l_element_version_id,
12346 l_pev_rvn,
12347 l_pev_structure_id,
12348 l_pevs_rvn,
12349 l_pev_schedule_id,
12350 l_pevsh_rvn,
12351 l_pevsh_rowid;
12352 IF (get_struc_ver%NOTFOUND) THEN
12353 CLOSE get_struc_ver;
12354 RAISE NO_DATA_FOUND;
12355 END IF;
12356 CLOSE get_struc_ver;
12357
12358 --NO ERROR, call delete_task_ver_wo_val
12359 --select all top level tasks
12360 OPEN get_top_tasks;
12361 LOOP
12362 FETCH get_top_tasks into l_task_version_id;
12363 EXIT WHEN get_top_tasks%NOTFOUND;
12364 IF (p_debug_mode = 'Y') THEN
12365 pa_debug.debug('deleting task version '||to_char(l_task_version_id));
12366 END IF;
12367
12368 --Get record version number for task, as it will change everytime
12369 --a task is deleted.
12370 select record_version_number, parent_structure_version_id
12371 into l_task_rvn, l_parent_struc_ver_id
12372 from pa_proj_element_versions
12373 where element_version_id = l_task_version_id;
12374
12375
12376 PA_TASK_PVT1.DELETE_TASK_VER_WO_VAL(p_commit => 'N',
12377 p_debug_mode => p_debug_mode,
12378 p_calling_module => 'DEL_STRUCT',
12379 p_structure_version_id => l_parent_struc_ver_id,
12380 p_task_version_id => l_task_version_id,
12381 p_record_version_number => l_task_rvn,
12382 x_return_status => l_return_status,
12383 x_msg_count => l_msg_count,
12384 x_msg_data => l_msg_data);
12385
12386 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12387 x_msg_count := FND_MSG_PUB.count_msg;
12388 IF x_msg_count = 1 then
12389 pa_interface_utils_pub.get_messages
12390 (p_encoded => FND_API.G_TRUE,
12391 p_msg_index => 1,
12392 p_data => l_data,
12393 p_msg_index_out => l_msg_index_out);
12394 x_msg_data := l_data;
12395 END IF;
12396 CLOSE get_top_tasks;
12397 raise FND_API.G_EXC_ERROR;
12398 END IF;
12399
12400 END LOOP;
12401 CLOSE get_top_tasks;
12402
12403 IF (p_debug_mode = 'Y') THEN
12404 pa_debug.debug('done deleting tasks');
12405 END IF;
12406 --If all tasks are deleted, delete schedule if workplan
12407 --Check if this is workplan
12408 If ('Y' = PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN')) THEN
12409 --Structure type exists. Delete from schedule table
12410 IF (p_debug_mode = 'Y') THEN
12411 pa_debug.debug('WORKPLAN type');
12412 END IF;
12413 PA_PROJ_ELEMENT_SCH_PKG.Delete_Row(l_pevsh_rowid);
12414
12415 --bug 4172646
12416 --remove the code to call PA_FIN_PLAN_PVT.delete_wp_budget_versions as its also called from
12417 --PA_PROJECT_STRUCTURE_PVT1.delete_structure_versions API.
12418 --
12419
12420 END IF;
12421
12422 --check for errors.
12423 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12424 x_msg_count := FND_MSG_PUB.count_msg;
12425 IF x_msg_count = 1 then
12426 pa_interface_utils_pub.get_messages
12427 (p_encoded => FND_API.G_TRUE,
12428 p_msg_index => 1,
12429 -- p_msg_count => l_msg_count,
12430 -- p_msg_data => l_msg_data,
12431 p_data => l_data,
12432 p_msg_index_out => l_msg_index_out);
12433 x_msg_data := l_data;
12434 END IF;
12435 raise FND_API.G_EXC_ERROR;
12436 END IF;
12437
12438 IF (p_debug_mode = 'Y') THEN
12439 pa_debug.debug('del structure version attr');
12440 END IF;
12441 --Delete structure version attribute
12442 PA_PROJECT_STRUCTURE_PVT1.Delete_Structure_Version_Attr(
12443 p_commit => p_commit,
12444 p_debug_mode => p_debug_mode,
12445 p_pev_structure_id => l_pev_structure_id,
12446 p_record_version_number => l_pevs_rvn,
12447 x_return_status => l_return_status,
12448 x_msg_count => l_msg_count,
12449 x_msg_data => l_msg_data);
12450 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12451 x_msg_count := FND_MSG_PUB.count_msg;
12452 IF x_msg_count = 1 then
12453 pa_interface_utils_pub.get_messages
12454 (p_encoded => FND_API.G_TRUE,
12455 p_msg_index => 1,
12456 -- p_msg_count => l_msg_count,
12457 -- p_msg_data => l_msg_data,
12458 p_data => l_data,
12459 p_msg_index_out => l_msg_index_out);
12460 x_msg_data := l_data;
12461 END IF;
12462 raise FND_API.G_EXC_ERROR;
12463 END IF;
12464
12465
12466 IF (p_debug_mode = 'Y') THEN
12467 pa_debug.debug('del structure version');
12468 END IF;
12469
12470 --Delete structure version
12471 PA_PROJECT_STRUCTURE_PVT1.Delete_Structure_Version(
12472 p_commit => p_commit,
12473 p_debug_mode => p_debug_mode,
12474 p_structure_version_id => l_element_version_id,
12475 p_record_version_number => l_pev_rvn,
12476 x_return_status => l_return_status,
12477 x_msg_count => l_msg_count,
12478 x_msg_data => l_msg_data);
12479
12480 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12481 x_msg_count := FND_MSG_PUB.count_msg;
12482 IF x_msg_count = 1 then
12483 pa_interface_utils_pub.get_messages
12484 (p_encoded => FND_API.G_TRUE,
12485 p_msg_index => 1,
12486 -- p_msg_count => l_msg_count,
12487 -- p_msg_data => l_msg_data,
12488 p_data => l_data,
12489 p_msg_index_out => l_msg_index_out);
12490 x_msg_data := l_data;
12491 END IF;
12492 raise FND_API.G_EXC_ERROR;
12493 END IF;
12494
12495
12496 --Delete structure if this is the last version
12497 OPEN is_last_version(l_proj_element_id);
12498 FETCH is_last_version into l_dummy;
12499 IF is_last_version%NOTFOUND THEN
12500 --We are deleting the last version. Delete structure
12501 IF (p_debug_mode = 'Y') THEN
12502 pa_debug.debug('delete non-versioned structure');
12503 END IF;
12504
12505
12506 IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'WORKPLAN') = 'Y') THEN
12507 --delete workplan attribute
12508 OPEN sel_wp_attr(l_proj_element_id);
12509 FETCH sel_wp_attr into l_wp_attr_rvn;
12510 CLOSE sel_wp_attr;
12511
12512 PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
12513 p_validate_only => FND_API.G_FALSE
12514 ,p_project_id => l_project_id
12515 ,p_proj_element_id => l_proj_element_id
12516 ,p_record_version_number => l_wp_attr_rvn
12517 ,x_return_status => l_return_status
12518 ,x_msg_count => l_msg_count
12519 ,x_msg_data => l_msg_data
12520 );
12521
12522 --Check error
12523 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12524 x_msg_count := FND_MSG_PUB.count_msg;
12525 IF x_msg_count = 1 then
12526 pa_interface_utils_pub.get_messages
12527 (p_encoded => FND_API.G_TRUE,
12528 p_msg_index => 1,
12529 p_data => l_data,
12530 p_msg_index_out => l_msg_index_out);
12531 x_msg_data := l_data;
12532 END IF;
12533 raise FND_API.G_EXC_ERROR;
12534 END IF;
12535
12536 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
12537 p_validate_only => FND_API.G_FALSE
12538 ,p_project_id => l_project_id
12539 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
12540 ,p_object_id => l_proj_element_id
12541 ,p_structure_type => 'WORKPLAN' --Amit
12542 ,x_return_status => l_return_status
12543 ,x_msg_count => l_msg_count
12544 ,x_msg_data => l_msg_data
12545 );
12546
12547 --Check error
12548 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12549 x_msg_count := FND_MSG_PUB.count_msg;
12550 IF x_msg_count = 1 then
12551 pa_interface_utils_pub.get_messages
12552 (p_encoded => FND_API.G_TRUE,
12553 p_msg_index => 1,
12554 p_data => l_data,
12555 p_msg_index_out => l_msg_index_out);
12556 x_msg_data := l_data;
12557 END IF;
12558 raise FND_API.G_EXC_ERROR;
12559 END IF;
12560
12561 END IF;
12562
12563 select record_version_number into l_pe_rvn
12564 from pa_proj_elements where proj_element_id = l_proj_element_id;
12565 PA_PROJECT_STRUCTURE_PVT1.Delete_Structure(
12566 p_commit => p_commit,
12567 p_debug_mode => p_debug_mode,
12568 p_structure_id => l_proj_element_id,
12569 p_record_version_number => l_pe_rvn,
12570 x_return_status => l_return_status,
12571 x_msg_count => l_msg_count,
12572 x_msg_data => l_msg_data);
12573
12574 END IF;
12575 CLOSE is_last_version;
12576
12577 --Check error
12578 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12579 x_msg_count := FND_MSG_PUB.count_msg;
12580 IF x_msg_count = 1 then
12581 pa_interface_utils_pub.get_messages
12582 (p_encoded => FND_API.G_TRUE,
12583 p_msg_index => 1,
12584 p_data => l_data,
12585 p_msg_index_out => l_msg_index_out);
12586 x_msg_data := l_data;
12587 END IF;
12588 raise FND_API.G_EXC_ERROR;
12589 END IF;
12590
12591 x_return_status := FND_API.G_RET_STS_SUCCESS;
12592
12593 IF (p_debug_mode = 'Y') THEN
12594 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL end');
12595 END IF;
12596
12597 EXCEPTION
12598 when FND_API.G_EXC_ERROR then
12599 if p_commit = FND_API.G_TRUE then
12600 rollback to delete_struc_ver_wo_val;
12601 end if;
12602 x_msg_count := FND_MSG_PUB.count_msg;
12603 x_return_status := FND_API.G_RET_STS_ERROR;
12604 when FND_API.G_EXC_UNEXPECTED_ERROR then
12605 if p_commit = FND_API.G_TRUE then
12606 rollback to delete_struc_ver_wo_val;
12607 end if;
12608 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12609 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
12610 p_procedure_name => 'Delete_Struc_Ver_Wo_Val',
12611 p_error_text => SUBSTRB(SQLERRM,1,240));
12612 when OTHERS then
12613 if p_commit = FND_API.G_TRUE then
12614 rollback to delete_struc_ver_wo_val;
12615 end if;
12616 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12617 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
12618 p_procedure_name => 'Delete_Struc_Ver_Wo_Val',
12619 p_error_text => SUBSTRB(SQLERRM,1,240));
12620 raise;
12621 END DELETE_STRUC_VER_WO_VAL;
12622
12623 procedure Generate_Error_Page
12624 (
12625 p_api_version IN NUMBER := 1.0
12626 ,p_commit IN VARCHAR2 := 'N'
12627 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
12628 ,p_debug_mode IN VARCHAR2 := 'N'
12629 ,p_max_msg_count IN NUMBER := NULL
12630 ,p_structure_version_id IN NUMBER
12631 ,p_error_tbl IN PA_PUBLISH_ERR_TBL_TYPE
12632 ,x_page_content_id OUT NOCOPY NUMBER
12633 ,x_return_status OUT NOCOPY VARCHAR2
12634 ,x_msg_count OUT NOCOPY NUMBER
12635 ,x_msg_data OUT NOCOPY VARCHAR2
12636 )
12637 IS PRAGMA AUTONOMOUS_TRANSACTION;
12638 CURSOR get_struct_ver_info IS
12639 select a.name, a.version_number, c.scheduled_start_date,
12640 c.scheduled_finish_date, b.project_id
12641 from pa_proj_elem_ver_structure a,
12642 pa_proj_element_versions b,
12643 pa_proj_elem_ver_schedule c
12644 where b.element_version_id = p_structure_version_id
12645 and b.project_id = a.project_id
12646 and b.proj_element_id = a.proj_element_id
12647 and b.element_version_id = a.element_version_id
12648 and b.project_id = c.project_id
12649 and b.proj_element_id = c.proj_element_id
12650 and b.element_version_id = c.element_version_id;
12651 l_struc_ver_info_rec get_struct_ver_info%ROWTYPE;
12652
12653 CURSOR get_project_info(c_project_id NUMBER) IS
12654 select ppa.name name, ppa.segment1,
12655 hou.name carrying_out_org_name, ppl.full_name
12656 from pa_projects_all ppa,
12657 hr_all_organization_units hou,
12658 per_all_people_f ppl,
12659 pa_project_parties ppp
12660 where ppa.carrying_out_organization_id = hou.organization_id
12661 and ppa.project_id = ppp.project_id (+)
12662 and ppa.project_id = c_project_id
12663 and 1 = ppp.project_role_id (+)
12664 and sysdate between ppp.start_date_active(+)
12665 and nvl(ppp.end_date_active(+), sysdate)
12666 and ppp.resource_source_id = ppl.person_id (+)
12667 and sysdate between ppl.effective_start_date(+)
12668 and nvl(ppl.effective_end_date (+), sysdate);
12669 l_proj_info_rec get_project_info%ROWTYPE;
12670
12671 CURSOR get_lookup_meaning(c_lookup_code VARCHAR2) IS
12672 select meaning
12673 from pa_lookups
12674 where lookup_type = 'PA_WORKPLAN_ERROR_NOTIF'
12675 and lookup_code = c_lookup_code;
12676 l_workplan_version_err varchar2(80);
12677 l_err_instruction varchar2(80);
12678 l_project_info varchar2(80);
12679 l_project_name varchar2(80);
12680 l_project_num varchar2(80);
12681 l_project_mgr varchar2(80);
12682 l_project_org varchar2(80);
12683 l_workplan_ver_info varchar2(80);
12684 l_workplan_ver_name varchar2(80);
12685 l_workplan_ver_num varchar2(80);
12686 l_wp_sch_start_date varchar2(80);
12687 l_wp_sch_finish_date varchar2(80);
12688 l_error_header varchar2(80);
12689 l_error varchar2(80);
12690
12691 l_page_content_id NUMBER;
12692 l_clob clob;
12693 l_text VARCHAR2(32767);
12694 l_index NUMBER;
12695 l_item_key VARCHAR2(240);
12696 l_return_status VARCHAR2(1);
12697 l_msg_count NUMBER;
12698 l_msg_data VARCHAR2(250);
12699 l_err_code NUMBER:= 0;
12700 l_err_stack VARCHAR2(630);
12701 l_err_stage VARCHAR2(80);
12702
12703 BEGIN
12704
12705 OPEN get_struct_ver_info;
12706 FETCH get_struct_ver_info INTO l_struc_ver_info_rec;
12707 CLOSE get_struct_ver_info;
12708
12709 OPEN get_project_info(l_struc_ver_info_rec.project_id);
12710 FETCH get_project_info INTO l_proj_info_rec;
12711 CLOSE get_project_info;
12712
12713 --get headers and prompts
12714 OPEN get_lookup_meaning('PA_WORKPLAN_VERSION_ERR');
12715 FETCH get_lookup_meaning into l_workplan_version_err;
12716 CLOSE get_lookup_meaning;
12717
12718 OPEN get_lookup_meaning('PA_ERR_INSTRUCTION');
12719 FETCH get_lookup_meaning into l_err_instruction;
12720 CLOSE get_lookup_meaning;
12721
12722 OPEN get_lookup_meaning('PA_PROJECT_INFO');
12723 FETCH get_lookup_meaning into l_project_info;
12724 CLOSE get_lookup_meaning;
12725
12726 OPEN get_lookup_meaning('PA_PROJECT_NAME');
12727 FETCH get_lookup_meaning into l_project_name;
12728 CLOSE get_lookup_meaning;
12729
12730 OPEN get_lookup_meaning('PA_PROJECT_NUM');
12731 FETCH get_lookup_meaning into l_project_num;
12732 CLOSE get_lookup_meaning;
12733
12734 OPEN get_lookup_meaning('PA_PROJECT_MGR');
12735 FETCH get_lookup_meaning into l_project_mgr;
12736 CLOSE get_lookup_meaning;
12737
12738 OPEN get_lookup_meaning('PA_PROJECT_ORG');
12739 FETCH get_lookup_meaning into l_project_org;
12740 CLOSE get_lookup_meaning;
12741
12742 OPEN get_lookup_meaning('PA_WORKPLAN_VER_INFO');
12743 FETCH get_lookup_meaning into l_workplan_ver_info;
12744 CLOSE get_lookup_meaning;
12745
12746 OPEN get_lookup_meaning('PA_WORKPLAN_VER_NAME');
12747 FETCH get_lookup_meaning into l_workplan_ver_name;
12748 CLOSE get_lookup_meaning;
12749
12750 OPEN get_lookup_meaning('PA_WORKPLAN_VER_NUM');
12751 FETCH get_lookup_meaning into l_workplan_ver_num;
12752 CLOSE get_lookup_meaning;
12753
12754 OPEN get_lookup_meaning('PA_WP_SCH_START_DATE');
12755 FETCH get_lookup_meaning into l_wp_sch_start_date;
12756 CLOSE get_lookup_meaning;
12757
12758 OPEN get_lookup_meaning('PA_WP_SCH_FINISH_DATE');
12759 FETCH get_lookup_meaning into l_wp_sch_finish_date;
12760 CLOSE get_lookup_meaning;
12761
12762 OPEN get_lookup_meaning('PA_ERROR_HEADER');
12763 FETCH get_lookup_meaning into l_error_header;
12764 CLOSE get_lookup_meaning;
12765
12766 OPEN get_lookup_meaning('PA_ERROR');
12767 FETCH get_lookup_meaning into l_error;
12768 CLOSE get_lookup_meaning;
12769 --done getting header and prompt
12770
12771 --create record in pa_page_layouts
12772 PA_PAGE_CONTENTS_PUB.CREATE_PAGE_CONTENTS(
12773 p_init_msg_list => fnd_api.g_false
12774 ,p_validate_only => fnd_api.g_false
12775 ,p_object_type => 'PA_STRUCTURES'
12776 ,p_pk1_value => p_structure_version_id
12777 ,p_pk2_value => 1
12778 ,x_page_content_id => x_page_content_id
12779 ,x_return_status => x_return_status
12780 ,x_msg_count => x_msg_count
12781 ,x_msg_data => x_msg_data
12782 );
12783
12784 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12785 RAISE FND_API.G_EXC_ERROR;
12786 END IF;
12787
12788 --create notification page
12789 select page_content
12790 into l_clob
12791 from pa_page_contents
12792 where page_content_id = x_page_content_id for update;
12793
12794 --print title
12795 l_text := '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary="">';
12796 l_text := l_text||'<tbody><tr><td width="100%"><font class="OraHeader" face="Tahoma,Arial,Helvetica,Geneva,sans-serif" color="#3c3c3c" size="5">';
12797 l_text := l_text||l_workplan_version_err||': ';
12798 l_text := l_text||l_struc_ver_info_rec.name;
12799 l_text := l_text||' ('||l_struc_ver_info_rec.version_number||')';
12800
12801 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12802 l_text
12803 ,l_clob);
12804
12805 --print instruction text
12806 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="">';
12807 l_text := l_text||'<tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr><td></td><td><span>';
12808 l_text := l_text||'<font face="Tahoma,Arial,Helvetica,Geneva,sans-serif" color="#000000" size="2">';
12809 l_text := l_text||l_err_instruction||'</font></span></td>';
12810
12811 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12812 l_text
12813 ,l_clob);
12814
12815 --print project info
12816 l_text := '</tr></tbody></table><table cellspacing=10 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td valign=top width="100%">';
12817 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>';
12818 l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12819 l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12820 l_text := l_text||l_project_info||'</b></font></td>';
12821
12822 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12823 l_text
12824 ,l_clob);
12825
12826 --print project name
12827 l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12828 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="">';
12829 l_text := l_text||'<tbody><tr><td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary="">';
12830 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>';
12831 l_text := l_text||'<label>';
12832 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>';
12833 l_text := l_text||l_proj_info_rec.name||'</b></font></td>';
12834
12835 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12836 l_text
12837 ,l_clob);
12838
12839 --print project number
12840 l_text := '</tr><tr><td height=3></td><td></td><td></td></tr><tr><td noWrap align=right><span align="right">';
12841 l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12842 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>';
12843 l_text := l_text||l_proj_info_rec.segment1||'</b></font></td>';
12844
12845 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12846 l_text
12847 ,l_clob);
12848
12849 --print project manager
12850 l_text := '</tr><tr><td height=3></td><td></td><td></td></tr></tbody></table></td><td width="5%"></td><td valign=top>';
12851 l_text := l_text||'<table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr><td noWrap align=right><span align="right">';
12852 l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12853 l_text := l_text||l_project_mgr||'</label></font></span></td>';
12854 l_text := l_text||'<td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12855 l_text := l_text||l_proj_info_rec.full_name||'</b></font></td>';
12856
12857 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12858 l_text
12859 ,l_clob);
12860
12861 --print organization
12862 l_text := '</tr><tr><td height=3></td><td></td><td></td></tr><tr><td noWrap align=right><span align="right">';
12863 l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12864 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>';
12865 l_text := l_text||l_proj_info_rec.carrying_out_org_name;
12866 l_text := l_text||'</b></font></td></tr><tr><td height=3></td><td></td><td></td></tr></tbody></table></td></tr></tbody></table>';
12867 l_text := l_text||'</td></tr></tbody></table></td></tr></tbody></table>';
12868
12869 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12870 l_text
12871 ,l_clob);
12872
12873 --print workplan version information
12874 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>';
12875 l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12876 l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12877 l_text := l_text||l_workplan_ver_info||'</b></font></td>';
12878
12879 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12880 l_text
12881 ,l_clob);
12882
12883 --print version name
12884 l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12885 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">';
12886 l_text := l_text||'<tbody><tr><td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary="" width="419">';
12887 l_text := l_text||'<tbody><tr><td noWrap align=right width="177"><span align="right">';
12888 l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12889 l_text := l_text||l_workplan_ver_name||'</label></font></span></td><td width=12></td><td width="198">';
12890 l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12891 l_text := l_text||l_struc_ver_info_rec.name||'</b></font></td>';
12892
12893 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12894 l_text
12895 ,l_clob);
12896
12897 --print version number
12898 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">';
12899 l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12900 l_text := l_text||l_workplan_ver_num||'</label></font></span></td>';
12901 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>';
12902 l_text := l_text||l_struc_ver_info_rec.version_number||'</b></font></td>';
12903
12904 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12905 l_text
12906 ,l_clob);
12907
12908 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">';
12909 l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12910 l_text := l_text||l_wp_sch_start_date||'</label></font></span></td><td width=12></td><td width="198">';
12911 l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12912 l_text := l_text||l_struc_ver_info_rec.scheduled_start_date||'</b></font></td>';
12913
12914 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12915 l_text
12916 ,l_clob);
12917
12918 --print scheduled finish date
12919 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">';
12920 l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12921 l_text := l_text||l_wp_sch_finish_date||'</label></font></span></td><td width=12></td><td width="198">';
12922 l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12923 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>';
12924 l_text := l_text||'</tr></tbody></table></td></tr></tbody></table></div><div></div>';
12925
12926 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12927 l_text
12928 ,l_clob);
12929
12930 --print error header
12931 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>';
12932 l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12933 l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12934 l_text := l_text||l_error_header||'</b></font></td>';
12935
12936 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12937 l_text
12938 ,l_clob);
12939
12940 --print error table
12941
12942 l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12943 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="">';
12944 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="">';
12945 l_text := l_text||'<tbody><tr><th style="BORDER-LEFT: #f2f2f5 1px solid" valign=bottom align=left bgcolor=#cfe0f1 scope="col">';
12946 l_text := l_text||'<font class=OraTableColumnHeader face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c size=2>';
12947 l_text := l_text||'<b><span class=OraTableHeaderLink bgcolor="#cfe0f1">';
12948 l_text := l_text||l_error||'</span></b></font></th></tr>';
12949
12950 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12951 l_text
12952 ,l_clob);
12953
12954 --print errors
12955 --loop
12956 l_index := p_error_tbl.FIRST;
12957 LOOP
12958 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>';
12959 l_text := l_text||'<font class=OraTableCellText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><span>';
12960 l_text := l_text||p_error_tbl(l_index)||'</span></font></td></tr>';
12961
12962 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12963 l_text
12964 ,l_clob);
12965
12966 EXIT WHEN l_index = p_error_tbl.LAST;
12967 l_index := p_error_tbl.next(l_index);
12968
12969 END LOOP;
12970 --end loop
12971 --print end
12972
12973 l_text := '</tbody></table></td></tr></tbody></table><div></div><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr>';
12974 l_text := l_text||'<td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody></tbody></table></td>';
12975 l_text := l_text||'</tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table></td>';
12976 l_text := l_text||'</tr></tbody></table><p></p><p></p></td></tr></table>';
12977
12978 PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12979 l_text
12980 ,l_clob);
12981
12982 --send notification
12983 PA_WORKPLAN_WORKFLOW.START_WORKFLOW(
12984 'PAWFPPWP'
12985 ,'PA_WORKPLAN_ERRORS'
12986 ,p_structure_version_id
12987 ,NULL
12988 ,NULL
12989 ,l_item_key
12990 ,l_msg_count
12991 ,l_msg_data
12992 ,l_return_status
12993 );
12994 IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
12995 PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES(
12996 p_wf_type_code => 'WORKPLAN'
12997 ,p_item_type => 'PAWFPPWP'
12998 ,p_item_key => l_item_key
12999 ,p_entity_key1 => l_struc_ver_info_rec.project_id
13000 ,p_entity_key2 => p_structure_version_id
13001 ,p_description => NULL
13002 ,p_err_code => l_err_code
13003 ,p_err_stage => l_err_stage
13004 ,p_err_stack => l_err_stack
13005 );
13006 IF (l_err_code <> 0) THEN
13007 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
13008 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
13009 RAISE FND_API.G_EXC_ERROR;
13010 END IF;
13011 ELSE
13012 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
13013 p_msg_name => 'PA_PS_CREATE_WF_FAILED');
13014 RAISE FND_API.G_EXC_ERROR;
13015 END IF;
13016
13017
13018 x_return_status := FND_API.G_RET_STS_SUCCESS;
13019 COMMIT;
13020
13021 EXCEPTION
13022 when FND_API.G_EXC_ERROR then
13023 ROLLBACK;
13024 x_msg_count := FND_MSG_PUB.count_msg;
13025 x_return_status := FND_API.G_RET_STS_ERROR;
13026 when OTHERS then
13027 ROLLBACK;
13028 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13029 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
13030 p_procedure_name => 'Generate_Error_Page',
13031 p_error_text => SUBSTRB(SQLERRM,1,240));
13032 raise;
13033 END Generate_Error_Page;
13034
13035
13036 PROCEDURE APPEND_VARCHAR_TO_CLOB(p_varchar IN varchar2,
13037 p_clob IN OUT NOCOPY CLOB)
13038 IS
13039 l_chunkSize INTEGER;
13040 v_offset INTEGER := 0;
13041 l_clob clob;
13042 l_length INTEGER;
13043
13044 v_size NUMBER;
13045 v_text VARCHAR2(3000); -- Bug 3634909. Increased to 3000 from 1000
13046 BEGIN
13047 l_chunksize := length(p_varchar);
13048 l_length := dbms_lob.getlength(p_clob);
13049
13050 dbms_lob.write(p_clob,
13051 l_chunksize,
13052 l_length+1,
13053 p_varchar);
13054 v_size := 1000;
13055 dbms_lob.read(p_clob, v_size, 1, v_text);
13056 END APPEND_VARCHAR_TO_CLOB;
13057
13058 -- Following procedure is added for Bug 2758343
13059 -- It will recalculate the task weightings based on
13060 -- duration for a given project and structure version id
13061
13062 PROCEDURE RECALC_FIN_TASK_WEIGHTS
13063 ( p_structure_version_id IN NUMBER
13064 ,p_project_id IN NUMBER
13065 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13066 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13067 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
13068
13069 IS
13070
13071 CURSOR c_get_task_ver IS
13072 SELECT element_version_id
13073 , wbs_level
13074 FROM pa_proj_element_versions
13075 WHERE project_id = p_project_id
13076 AND parent_structure_version_id = p_structure_version_id
13077 AND object_type = 'PA_TASKS';
13078
13079 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
13080 SELECT ptt.prog_entry_enable_flag
13081 FROM pa_task_types ptt
13082 , pa_proj_element_versions ppev
13083 , pa_proj_elements ppe
13084 WHERE ppev.element_version_id = c_element_version_id
13085 AND ppev.proj_element_id = ppe.proj_element_id
13086 AND ptt.object_type ='PA_TASKS' /* bug 3279978 FP M Enhancement */
13087 AND ppe.TYPE_ID = ptt.task_type_id;
13088
13089 CURSOR get_parent(c_element_version_id NUMBER) IS
13090 SELECT object_id_from1
13091 FROM pa_object_relationships
13092 WHERE object_id_to1 = c_element_version_id
13093 AND object_type_to = 'PA_TASKS'
13094 AND relationship_type = 'S'
13095 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
13096
13097 CURSOR get_summed_duration(c_parent_element_version_id NUMBER) IS
13098 SELECT sum(ppevs.duration)
13099 FROM pa_proj_elem_ver_schedule ppevs
13100 , pa_object_relationships por
13101 , pa_proj_element_versions ppev
13102 , pa_proj_elements ppe
13103 , pa_task_types ptt
13104 WHERE por.object_id_from1 = c_parent_element_version_id
13105 AND por.object_type_to = 'PA_TASKS'
13106 AND por.relationship_type = 'S'
13107 AND por.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
13108 AND por.object_id_to1 = ppevs.element_version_id
13109 AND por.object_id_to1 = ppev.element_version_id
13110 AND ppev.proj_element_id = ppe.proj_element_id
13111 AND ppevs.project_id = ppe.project_id
13112 AND ppe.TYPE_ID = ptt.task_type_id
13113 AND ptt.object_type ='PA_TASKS' /* bug 3279978 FP M Enhancement */
13114 AND ptt.prog_entry_enable_flag = 'Y';
13115
13116 CURSOR get_task_duration(c_element_version_id NUMBER, c_project_id NUMBER) IS
13117 SELECT duration
13118 FROM pa_proj_elem_ver_schedule
13119 WHERE element_version_id = c_element_version_id
13120 AND project_id = c_project_id;
13121
13122 CURSOR get_existing_weights(c_parent_element_version_id NUMBER) IS
13123 SELECT sum(weighting_percentage)
13124 FROM PA_OBJECT_RELATIONSHIPS
13125 WHERE object_id_from1 = c_parent_element_version_id
13126 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
13127 AND object_type_to = 'PA_TASKS'
13128 AND relationship_type = 'S';
13129
13130
13131 l_element_version_id NUMBER;
13132 l_parent_element_version_id NUMBER;
13133 l_outline_level NUMBER;
13134 l_progress_allowed VARCHAR2(1);
13135
13136 TYPE durations IS TABLE OF NUMBER
13137 INDEX BY BINARY_INTEGER;
13138
13139 l_durations durations;
13140 l_total_duration NUMBER;
13141 l_task_weight PA_OBJECT_RELATIONSHIPS.weighting_percentage%TYPE;
13142 l_task_duration NUMBER;
13143 l_existing_weight NUMBER;
13144 l_remaining_weight NUMBER;
13145
13146 BEGIN
13147
13148 For l_get_task_ver IN c_get_task_ver LOOP
13149
13150 l_element_version_id := l_get_task_ver.element_version_id;
13151 l_outline_level := l_get_task_ver.wbs_level;
13152
13153 OPEN check_progress_allowed(l_element_version_id);
13154 FETCH check_progress_allowed INTO l_progress_allowed;
13155 CLOSE check_progress_allowed;
13156
13157 OPEN get_parent(l_element_version_id);
13158 FETCH get_parent INTO l_parent_element_version_id;
13159 CLOSE get_parent;
13160
13161
13162 IF l_progress_allowed = 'N' THEN
13163 -- Populate task weight as zero
13164 UPDATE PA_OBJECT_RELATIONSHIPS
13165 SET weighting_percentage = 0
13166 WHERE object_id_from1 = l_parent_element_version_id
13167 AND object_id_to1 = l_element_version_id
13168 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
13169 AND object_type_to = 'PA_TASKS'
13170 AND relationship_type = 'S';
13171 ELSE
13172
13173 IF l_durations.exists(l_parent_element_version_id) then
13174 NULL;
13175 ELSE
13176 OPEN get_summed_duration(l_parent_element_version_id);
13177 FETCH get_summed_duration INTO l_total_duration;
13178 CLOSE get_summed_duration;
13179
13180 l_durations(l_parent_element_version_id) := l_total_duration;
13181 END IF;
13182
13183 OPEN get_task_duration(l_element_version_id, p_project_id);
13184 FETCH get_task_duration INTO l_task_duration;
13185 CLOSE get_task_duration;
13186
13187 IF (l_durations(l_parent_element_version_id) IS NULL) OR (l_durations(l_parent_element_version_id) = 0) THEN
13188 l_task_weight := 0;
13189 ELSE
13190 OPEN get_existing_weights(l_parent_element_version_id);
13191 FETCH get_existing_weights INTO l_existing_weight;
13192 CLOSE get_existing_weights;
13193
13194 l_remaining_weight := 100 - l_existing_weight;
13195 l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
13196
13197 IF(abs(l_remaining_weight - l_task_weight) <= .05) THEN
13198 l_task_weight := l_remaining_weight;
13199 END IF;
13200 IF(abs(l_remaining_weight) <= .01) THEN
13201 l_task_weight := l_task_weight+l_remaining_weight;
13202 END IF;
13203 END IF;
13204
13205 UPDATE PA_OBJECT_RELATIONSHIPS
13206 SET weighting_percentage = l_task_weight
13207 WHERE object_id_from1 = l_parent_element_version_id
13208 AND object_id_to1 = l_element_version_id
13209 AND object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
13210 AND object_type_to = 'PA_TASKS'
13211 AND relationship_type = 'S';
13212 END IF;
13213 END LOOP;
13214
13215 x_return_status := FND_API.G_RET_STS_SUCCESS;
13216
13217 EXCEPTION
13218 WHEN OTHERS THEN
13219 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13220 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
13221 p_procedure_name => 'RECALC_FIN_TASK_WEIGHTS',
13222 p_error_text => SUBSTRB(SQLERRM,1,240));
13223 END RECALC_FIN_TASK_WEIGHTS;
13224
13225 --maansari
13226 FUNCTION copy_task_version( p_structure_version_id NUMBER, p_task_version_id NUMBER ) RETURN VARCHAR2 IS
13227 l_copy_task_flag VARCHAR2(1) := 'Y';
13228 l_parent_task_version_id NUMBER;
13229 BEGIN
13230
13231 FOR i in 1..l_src_tasks_versions_tbl.count LOOP
13232 IF p_task_version_id = l_src_tasks_versions_tbl(i).src_task_version_id
13233 THEN
13234 l_copy_task_flag := l_src_tasks_versions_tbl(i).copy_flag;
13235 l_parent_task_version_id := l_src_tasks_versions_tbl(i).src_parent_task_version_id;
13236 --loop thru untill top of the hierarchy.
13237 WHILE l_parent_task_version_id <> p_structure_version_id LOOP
13238 FOR i in 1..l_src_tasks_versions_tbl.count LOOP
13239 IF l_parent_task_version_id = l_src_tasks_versions_tbl(i).src_task_version_id
13240 THEN
13241 --bug 2863836
13242 IF l_src_tasks_versions_tbl(i).copy_flag = 'N' THEN
13243 l_copy_task_flag := l_src_tasks_versions_tbl(i).copy_flag;
13244 END IF;
13245 --end bug 2863836
13246 l_parent_task_version_id := l_src_tasks_versions_tbl(i).src_parent_task_version_id;
13247 exit;
13248 END IF;
13249 END LOOP;
13250 END LOOP;
13251 exit;
13252 END IF;
13253 END LOOP;
13254
13255 return l_copy_task_flag;
13256 END copy_task_version;
13257 --maansari
13258
13259 -- Performance changes : added this API. It is bulk version of COPY_STRUCTURE_VERSION
13260
13261 PROCEDURE COPY_STRUCTURE_VERSION_BULK
13262 ( p_commit IN VARCHAR2 := FND_API.G_FALSE
13263 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
13264 ,p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL
13265 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
13266 ,p_debug_mode IN VARCHAR2 := 'N'
13267 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
13268 ,p_structure_version_id IN NUMBER
13269 ,p_new_struct_ver_name IN VARCHAR2
13270 ,p_new_struct_ver_desc IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13271 ,p_change_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13272 ,x_new_struct_ver_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13273 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13274 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13275 ,x_return_status OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
13276 IS
13277 l_new_struct_ver_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
13278 -- added for Bug Fix: 4537865
13279 l_tmp_struct_ver_id PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
13280 -- added for Bug Fix: 4537865
13281 l_return_status VARCHAR2(1);
13282 l_msg_count NUMBER;
13283 l_msg_data VARCHAR2(250);
13284 l_data VARCHAR2(2000);
13285 l_msg_index_out NUMBER;
13286 l_pev_structure_id NUMBER;
13287
13288 CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
13289 IS
13290 SELECT *
13291 FROM PA_PROJ_ELEMENT_VERSIONS
13292 WHERE element_version_id = c_structure_version_id;
13293
13294 l_structure_ver_rec l_get_structure_ver_csr%ROWTYPE;
13295 l_structure_ver_to_rec l_get_structure_ver_csr%ROWTYPE;
13296
13297 CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
13298 IS
13299 SELECT a.*
13300 FROM PA_PROJ_ELEM_VER_STRUCTURE a,
13301 PA_PROJ_ELEMENT_VERSIONS b
13302 WHERE b.element_version_id = c_structure_version_id
13303 AND b.project_id = a.project_id
13304 AND b.element_version_id = a.project_id;
13305
13306 l_structure_ver_attr_rec l_get_structure_ver_attr_csr%ROWTYPE;
13307
13308 l_ref_task_ver_id NUMBER;
13309 l_peer_or_sub VARCHAR2(10);
13310
13311 CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
13312 IS
13313 SELECT a.*
13314 FROM PA_PROJ_ELEM_VER_SCHEDULE a,
13315 PA_PROJ_ELEMENT_VERSIONS b
13316 WHERE b.element_version_id = c_element_version_id
13317 AND b.project_id = a.project_id
13318 AND b.element_version_id = a.element_version_id;
13319
13320 l_ver_schedule_attr_rec l_get_ver_schedule_attr_csr%ROWTYPE;
13321
13322 l_last_wbs_level NUMBER;
13323 l_task_version_id NUMBER;
13324 l_pev_schedule_id NUMBER;
13325
13326 CURSOR l_get_structure_type_csr(c_structure_version_id NUMBER)
13327 IS
13328 SELECT pst.structure_type_class_code
13329 FROM PA_STRUCTURE_TYPES pst,
13330 PA_PROJ_ELEMENT_VERSIONS ppev,
13331 PA_PROJ_STRUCTURE_TYPES ppst
13332 WHERE ppev.element_version_id = c_structure_version_id
13333 AND ppev.proj_element_id = ppst.proj_element_id
13334 AND ppst.structure_type_id = pst.structure_type_id;
13335
13336 l_structure_type PA_STRUCTURE_TYPES.structure_type%TYPE;
13337
13338 CURSOR l_check_working_versions_csr(c_structure_version_id NUMBER)
13339 IS
13340 SELECT 'Y'
13341 FROM PA_PROJ_ELEMENT_VERSIONS ppev
13342 WHERE ppev.element_version_id = c_structure_version_id
13343 AND EXISTS
13344 (SELECT 'Y'
13345 FROM PA_PROJ_ELEMENT_VERSIONS ppev2,
13346 PA_PROJ_ELEM_VER_STRUCTURE ppevs
13347 WHERE ppev2.proj_element_id = ppev.proj_element_id
13348 AND ppev2.project_id = ppev.project_id
13349 AND ppevs.project_id = ppev2.project_id
13350 AND ppevs.element_version_id = ppev2.element_version_id
13351 AND ppevs.status_code <> 'STRUCTURE_PUBLISHED');
13352
13353 l_dummy VARCHAR2(1);
13354
13355
13356 l_new_obj_rel_id PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
13357 l_structure_type1 PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
13358
13359 --Added by rtarway
13360 l_rowid VARCHAR2(255);
13361
13362 X_Row_id VARCHAR2(255);
13363 l_project_id number;
13364 l_user_id number;
13365 l_login_id number;
13366
13367 CURSOR cur_elem_ver_seq IS
13368 SELECT pa_proj_element_versions_s.nextval
13369 FROM sys.dual;
13370
13371 l_wp_struc VARCHAR2(1);
13372 l_fin_struc VARCHAR2(1);
13373
13374 BEGIN
13375
13376 pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK');
13377
13378 IF (p_debug_mode = 'Y') THEN
13379 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK begin');
13380 END IF;
13381
13382 IF (p_commit = FND_API.G_TRUE) THEN
13383 savepoint copy_structure_version_pvt_blk;
13384 END IF;
13385
13386 -- Get structure version info
13387 OPEN l_get_structure_ver_csr(p_structure_version_id);
13388 FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
13389 CLOSE l_get_structure_ver_csr;
13390
13391 l_project_id := l_structure_ver_rec.project_id;
13392
13393 OPEN cur_elem_ver_seq;
13394 FETCH cur_elem_ver_seq INTO l_new_struct_ver_id;
13395 CLOSE cur_elem_ver_seq;
13396
13397 -- Fix for 4657794 :- This is fix for regression introduced by 4537865
13398 -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_tmp_struct_ver_id
13399 -- to l_new_struct_ver_id
13400
13401 l_tmp_struct_ver_id := l_new_struct_ver_id ;
13402
13403 -- End 4657794
13404
13405 PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
13406 X_ROW_ID => l_rowid
13407 --,X_ELEMENT_VERSION_ID => l_new_struct_ver_id * commented for Bug Fix: 453786
13408 ,X_ELEMENT_VERSION_ID => l_tmp_struct_ver_id -- added for bug Fix: 4537865
13409 ,X_PROJ_ELEMENT_ID => l_structure_ver_rec.proj_element_id
13410 ,X_OBJECT_TYPE => 'PA_STRUCTURES'
13411 ,X_PROJECT_ID => l_project_id
13412 ,X_PARENT_STRUCTURE_VERSION_ID => l_new_struct_ver_id
13413 ,X_DISPLAY_SEQUENCE => NULL
13414 ,X_WBS_LEVEL => NULL
13415 ,X_WBS_NUMBER => '0'
13416 ,X_ATTRIBUTE_CATEGORY => l_structure_ver_rec.attribute_category
13417 ,X_ATTRIBUTE1 => l_structure_ver_rec.attribute1
13418 ,X_ATTRIBUTE2 => l_structure_ver_rec.attribute2
13419 ,X_ATTRIBUTE3 => l_structure_ver_rec.attribute3
13420 ,X_ATTRIBUTE4 => l_structure_ver_rec.attribute4
13421 ,X_ATTRIBUTE5 => l_structure_ver_rec.attribute5
13422 ,X_ATTRIBUTE6 => l_structure_ver_rec.attribute6
13423 ,X_ATTRIBUTE7 => l_structure_ver_rec.attribute7
13424 ,X_ATTRIBUTE8 => l_structure_ver_rec.attribute8
13425 ,X_ATTRIBUTE9 => l_structure_ver_rec.attribute9
13426 ,X_ATTRIBUTE10 => l_structure_ver_rec.attribute10
13427 ,X_ATTRIBUTE11 => l_structure_ver_rec.attribute11
13428 ,X_ATTRIBUTE12 => l_structure_ver_rec.attribute12
13429 ,X_ATTRIBUTE13 => l_structure_ver_rec.attribute13
13430 ,X_ATTRIBUTE14 => l_structure_ver_rec.attribute14
13431 ,X_ATTRIBUTE15 => l_structure_ver_rec.element_version_id
13432 ,X_TASK_UNPUB_VER_STATUS_CODE => NULL
13433 ,X_SOURCE_OBJECT_ID => l_project_id
13434 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
13435 );
13436 -- added for bug Fix: 4537865
13437 l_new_struct_ver_id := l_tmp_struct_ver_id;
13438 -- added for bug Fix: 4537865
13439
13440 /*
13441 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
13442 ( p_validate_only => p_validate_only
13443 ,p_structure_id => l_structure_ver_rec.proj_element_id
13444 ,p_attribute_category => l_structure_ver_rec.attribute_category
13445 ,p_attribute1 => l_structure_ver_rec.attribute1
13446 ,p_attribute2 => l_structure_ver_rec.attribute2
13447 ,p_attribute3 => l_structure_ver_rec.attribute3
13448 ,p_attribute4 => l_structure_ver_rec.attribute4
13449 ,p_attribute5 => l_structure_ver_rec.attribute5
13450 ,p_attribute6 => l_structure_ver_rec.attribute6
13451 ,p_attribute7 => l_structure_ver_rec.attribute7
13452 ,p_attribute8 => l_structure_ver_rec.attribute8
13453 ,p_attribute9 => l_structure_ver_rec.attribute9
13454 ,p_attribute10 => l_structure_ver_rec.attribute10
13455 ,p_attribute11 => l_structure_ver_rec.attribute11
13456 ,p_attribute12 => l_structure_ver_rec.attribute12
13457 ,p_attribute13 => l_structure_ver_rec.attribute13
13458 ,p_attribute14 => l_structure_ver_rec.attribute14
13459 ,p_attribute15 => l_structure_ver_rec.element_version_id --fix bug 2833989: replaced l_structure_ver_rec.attribute15
13460 ,x_structure_version_id => l_new_struct_ver_id
13461 ,x_return_status => l_return_status
13462 ,x_msg_count => l_msg_count
13463 ,x_msg_data => l_msg_data );
13464 */
13465
13466 If (p_debug_mode = 'Y') THEN
13467 pa_debug.debug('Create Structure Version Bulk return status: ' || l_return_status);
13468 pa_debug.debug('l_new_struct_ver_id: ' || l_new_struct_ver_id);
13469 END IF;
13470
13471
13472 --Check if there is any error.
13473 l_msg_count := FND_MSG_PUB.count_msg;
13474 IF l_msg_count > 0 THEN
13475 x_msg_count := l_msg_count;
13476 IF x_msg_count = 1 THEN
13477 x_msg_data := l_msg_data;
13478 END IF;
13479 RAISE FND_API.G_EXC_ERROR;
13480 END IF;
13481
13482 -- Get structure version attributes
13483 OPEN l_get_structure_ver_attr_csr(p_structure_version_id);
13484 FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
13485 CLOSE l_get_structure_ver_attr_csr;
13486
13487 If (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
13488 l_structure_ver_attr_rec.change_reason_code := p_change_reason_code;
13489 END IF;
13490
13491 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
13492 ( p_validate_only => FND_API.G_FALSE
13493 ,p_structure_version_id => l_new_struct_ver_id
13494 ,p_structure_version_name => p_new_struct_ver_name
13495 ,p_structure_version_desc => p_new_struct_ver_desc
13496 ,p_effective_date => l_structure_ver_attr_rec.effective_date
13497 ,p_latest_eff_published_flag => l_structure_ver_attr_rec.latest_eff_published_flag
13498 ,p_locked_status_code => l_structure_ver_attr_rec.lock_status_code
13499 ,p_struct_version_status_code => l_structure_ver_attr_rec.status_code
13500 ,p_baseline_current_flag => l_structure_ver_attr_rec.current_flag
13501 ,p_baseline_original_flag => l_structure_ver_attr_rec.original_flag
13502 ,p_change_reason_code => l_structure_ver_attr_rec.change_reason_code
13503 ,x_pev_structure_id => l_pev_structure_id
13504 ,x_return_status => l_return_status
13505 ,x_msg_count => l_msg_count
13506 ,x_msg_data => l_msg_data );
13507
13508 IF (p_debug_mode = 'Y') THEN
13509 pa_debug.debug('Create Structure Version Bulk Attr return status: ' || l_return_status);
13510 pa_debug.debug('l_pev_structure_id: ' || l_pev_structure_id);
13511 END IF;
13512
13513 --Check if there is any error.
13514 l_msg_count := FND_MSG_PUB.count_msg;
13515 IF l_msg_count > 0 THEN
13516 x_msg_count := l_msg_count;
13517 IF x_msg_count = 1 THEN
13518 x_msg_data := l_msg_data;
13519 END IF;
13520 RAISE FND_API.G_EXC_ERROR;
13521 END IF;
13522
13523 --Search for outgoing links for the structure version; create new Links
13524 -- Amit: Code(get_to_id) which was commented earlier is removed. If needed it can be found from COPY_STRUCTURE_VERSION
13525
13526 --hsiu: added to check for structure type
13527 l_wp_struc := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
13528 l_fin_struc:= PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
13529
13530 OPEN l_get_structure_type_csr(p_structure_version_id);
13531 FETCH l_get_structure_type_csr INTO l_structure_type;
13532 CLOSE l_get_structure_type_csr;
13533
13534 -- If structure is workplan type create schedule version record
13535 -- if l_structure_type = 'WORKPLAN' then
13536 IF (l_wp_struc = 'Y') THEN
13537
13538 OPEN l_get_ver_schedule_attr_csr(p_structure_version_id);
13539 FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
13540 CLOSE l_get_ver_schedule_attr_csr;
13541
13542 -- Amit: Code(PA_TASK_PUB1.CREATE_SCHEDULE_VERSION) which was commented earlier is removed.
13543 -- If needed it can be found from COPY_STRUCTURE_VERSION
13544
13545 l_pev_schedule_id := NULL;
13546 PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
13547 X_ROW_ID => X_Row_Id
13548 ,X_PEV_SCHEDULE_ID => l_pev_schedule_id
13549 ,X_ELEMENT_VERSION_ID => l_new_struct_ver_id
13550 ,X_PROJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
13551 ,X_PROJ_ELEMENT_ID => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
13552 ,X_SCHEDULED_START_DATE => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
13553 ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
13554 ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
13555 ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
13556 ,X_ACTUAL_START_DATE => l_ver_schedule_attr_rec.ACTUAL_START_DATE
13557 ,X_ACTUAL_FINISH_DATE => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
13558 ,X_ESTIMATED_START_DATE => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
13559 ,X_ESTIMATED_FINISH_DATE => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
13560 ,X_DURATION => l_ver_schedule_attr_rec.DURATION
13561 ,X_EARLY_START_DATE => l_ver_schedule_attr_rec.EARLY_START_DATE
13562 ,X_EARLY_FINISH_DATE => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
13563 ,X_LATE_START_DATE => l_ver_schedule_attr_rec.LATE_START_DATE
13564 ,X_LATE_FINISH_DATE => l_ver_schedule_attr_rec.LATE_FINISH_DATE
13565 ,X_CALENDAR_ID => l_ver_schedule_attr_rec.CALENDAR_ID
13566 ,X_MILESTONE_FLAG => l_ver_schedule_attr_rec.MILESTONE_FLAG
13567 ,X_CRITICAL_FLAG => l_ver_schedule_attr_rec.CRITICAL_FLAG
13568 ,X_WQ_PLANNED_QUANTITY => l_ver_schedule_attr_rec.wq_planned_quantity
13569 ,X_PLANNED_EFFORT => l_ver_schedule_attr_rec.planned_effort
13570 ,X_ACTUAL_DURATION => l_ver_schedule_attr_rec.actual_duration
13571 ,X_ESTIMATED_DURATION => l_ver_schedule_attr_rec.estimated_duration
13572 ,X_ATTRIBUTE_CATEGORY => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
13573 ,X_ATTRIBUTE1 => l_ver_schedule_attr_rec.ATTRIBUTE1
13574 ,X_ATTRIBUTE2 => l_ver_schedule_attr_rec.ATTRIBUTE2
13575 ,X_ATTRIBUTE3 => l_ver_schedule_attr_rec.ATTRIBUTE3
13576 ,X_ATTRIBUTE4 => l_ver_schedule_attr_rec.ATTRIBUTE4
13577 ,X_ATTRIBUTE5 => l_ver_schedule_attr_rec.ATTRIBUTE5
13578 ,X_ATTRIBUTE6 => l_ver_schedule_attr_rec.ATTRIBUTE6
13579 ,X_ATTRIBUTE7 => l_ver_schedule_attr_rec.ATTRIBUTE7
13580 ,X_ATTRIBUTE8 => l_ver_schedule_attr_rec.ATTRIBUTE8
13581 ,X_ATTRIBUTE9 => l_ver_schedule_attr_rec.ATTRIBUTE9
13582 ,X_ATTRIBUTE10 => l_ver_schedule_attr_rec.ATTRIBUTE10
13583 ,X_ATTRIBUTE11 => l_ver_schedule_attr_rec.ATTRIBUTE11
13584 ,X_ATTRIBUTE12 => l_ver_schedule_attr_rec.ATTRIBUTE12
13585 ,X_ATTRIBUTE13 => l_ver_schedule_attr_rec.ATTRIBUTE13
13586 ,X_ATTRIBUTE14 => l_ver_schedule_attr_rec.ATTRIBUTE14
13587 ,X_ATTRIBUTE15 => l_ver_schedule_attr_rec.ATTRIBUTE15
13588 ,X_SOURCE_OBJECT_ID => l_ver_schedule_attr_rec.PROJECT_ID
13589 ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
13590 );
13591
13592
13593 IF (p_debug_mode = 'Y') THEN
13594 pa_debug.debug('Create Schedule Version Bulk return status: ' || l_return_status);
13595 pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
13596 END IF;
13597
13598 --Check if there is any error.
13599 l_msg_count := FND_MSG_PUB.count_msg;
13600 IF l_msg_count > 0 THEN
13601 x_msg_count := l_msg_count;
13602 IF x_msg_count = 1 THEN
13603 x_msg_data := l_msg_data;
13604 END IF;
13605 RAISE FND_API.G_EXC_ERROR;
13606 END IF;
13607 END IF;
13608
13609 -- ELSIF l_structure_type in ('FINANCIAL') then
13610 IF l_wp_struc = 'N' and l_fin_struc = 'Y' THEN
13611 -- There can only be one working version any any time for a financial structure
13612 OPEN l_check_working_versions_csr(p_structure_version_id);
13613 FETCH l_check_working_versions_csr INTO l_dummy;
13614 if l_check_working_versions_csr%FOUND then
13615 CLOSE l_check_working_versions_csr;
13616 PA_UTILS.ADD_MESSAGE('PA','PA_PS_WORKING_VER_EXISTS');
13617 x_msg_data := 'PA_PS_WORKING_VER_EXISTS';
13618 RAISE FND_API.G_EXC_ERROR;
13619 end if;
13620 CLOSE l_check_working_versions_csr;
13621 end if;
13622
13623 -- Amit The code to get all the task versions and then create task versions one by one is commented
13624 -- Now we are using bulk insert for this purpose.
13625
13626 l_user_id := FND_GLOBAl.user_id;
13627 l_login_id := FND_GLOBAl.login_id;
13628
13629 INSERT INTO pa_proj_element_versions(
13630 ELEMENT_VERSION_ID
13631 ,PROJ_ELEMENT_ID
13632 ,OBJECT_TYPE
13633 ,PROJECT_ID
13634 ,PARENT_STRUCTURE_VERSION_ID
13635 ,DISPLAY_SEQUENCE
13636 ,WBS_LEVEL
13637 ,WBS_NUMBER
13638 ,CREATION_DATE
13639 ,CREATED_BY
13640 ,LAST_UPDATE_DATE
13641 ,LAST_UPDATED_BY
13642 ,LAST_UPDATE_LOGIN
13643 ,RECORD_VERSION_NUMBER
13644 ,ATTRIBUTE_CATEGORY
13645 ,ATTRIBUTE1
13646 ,ATTRIBUTE2
13647 ,ATTRIBUTE3
13648 ,ATTRIBUTE4
13649 ,ATTRIBUTE5
13650 ,ATTRIBUTE6
13651 ,ATTRIBUTE7
13652 ,ATTRIBUTE8
13653 ,ATTRIBUTE9
13654 ,ATTRIBUTE10
13655 ,ATTRIBUTE11
13656 ,ATTRIBUTE12
13657 ,ATTRIBUTE13
13658 ,ATTRIBUTE14
13659 ,TASK_UNPUB_VER_STATUS_CODE
13660 ,FINANCIAL_TASK_FLAG
13661 ,attribute15 --this column is used to store structure ver id of the source str to be used to created relationships.
13662 ,source_object_id
13663 ,source_object_type
13664 )
13665 SELECT
13666 pa_proj_element_versions_s.nextval
13667 ,ppev.proj_element_id
13668 ,ppev.object_type
13669 ,l_project_id
13670 ,l_new_struct_ver_id
13671 ,ppev.display_sequence
13672 ,ppev.WBS_LEVEL
13673 ,ppev.WBS_NUMBER
13674 ,SYSDATE
13675 ,l_user_id
13676 ,SYSDATE
13677 ,l_user_id
13678 ,l_login_id
13679 ,ppev.RECORD_VERSION_NUMBER
13680 ,ppev.ATTRIBUTE_CATEGORY
13681 ,ppev.ATTRIBUTE1
13682 ,ppev.ATTRIBUTE2
13683 ,ppev.ATTRIBUTE3
13684 ,ppev.ATTRIBUTE4
13685 ,ppev.ATTRIBUTE5
13686 ,ppev.ATTRIBUTE6
13687 ,ppev.ATTRIBUTE7
13688 ,ppev.ATTRIBUTE8
13689 ,ppev.ATTRIBUTE9
13690 ,ppev.ATTRIBUTE10
13691 ,ppev.ATTRIBUTE11
13692 ,ppev.ATTRIBUTE12
13693 ,ppev.ATTRIBUTE13
13694 ,ppev.ATTRIBUTE14
13695 ,ppev.TASK_UNPUB_VER_STATUS_CODE
13696 ,ppev.FINANCIAL_TASK_FLAG
13697 ,ppev.element_version_id
13698 ,l_project_id
13699 ,'PA_PROJECTS'
13700 FROM ( SELECT ppev2.* from pa_proj_element_versions ppev2
13701 ,pa_proj_elements ppe --bug 4573340
13702 WHERE -- bug#3094283 ppev2.project_id = l_project_id
13703 ppev2.parent_structure_version_id = p_structure_version_id
13704 --bug 4573340
13705 and ppe.project_id = ppev2.project_id
13706 and ppe.proj_element_id = ppev2.proj_element_id
13707 and ppe.link_task_flag = 'N'
13708 --bug 4573340
13709 and ppev2.object_type = 'PA_TASKS'
13710 order by ppev2.display_sequence ) ppev
13711 ;
13712 -- Bug 4205167 : Added hint to use Hash Join
13713 INSERT INTO PA_OBJECT_RELATIONSHIPS (
13714 object_relationship_id,
13715 object_type_from,
13716 object_id_from1,
13717 object_type_to,
13718 object_id_to1,
13719 relationship_type,
13720 relationship_subtype,
13721 Record_Version_Number,
13722 CREATED_BY,
13723 CREATION_DATE,
13724 LAST_UPDATED_BY,
13725 LAST_UPDATE_DATE,
13726 LAST_UPDATE_LOGIN,
13727 weighting_percentage
13728 )
13729 SELECT /*+ USE_HASH(ppev2 ppev1)*/
13730 pa_object_relationships_s.nextval,
13731 pobj.object_type_from,
13732 ppev1.element_version_id,
13733 pobj.object_type_to,
13734 ppev2.element_version_id,
13735 pobj.relationship_type,
13736 pobj.relationship_subtype,
13737 pobj.Record_Version_Number,
13738 l_user_id,
13739 SYSDATE,
13740 l_user_id,
13741 SYSDATE,
13742 l_login_id,
13743 pobj.weighting_percentage
13744 FROM ( SELECT object_type_from, object_id_from1,
13745 object_type_to, object_id_to1,
13746 relationship_type, relationship_subtype,
13747 Record_Version_Number, weighting_percentage
13748 FROM pa_object_relationships
13749 --bug#3094283 WHERE RELATIONSHIP_TYPE = 'S'
13750 start with object_id_from1 = p_structure_version_id
13751 and RELATIONSHIP_TYPE = 'S' /* Bug 2881667 - Added this condition */
13752 connect by object_id_from1 = prior object_id_to1
13753 and RELATIONSHIP_TYPE = 'S' ) pobj, /* Bug 2881667 - Added this condition */
13754 pa_proj_element_versions ppev1,
13755 pa_proj_element_versions ppev2
13756 WHERE
13757 --bug#3094283 ppev1.project_id = l_project_id
13758 ppev1.attribute15 = pobj.object_id_from1
13759 --bug#3094283 AND ppev2.project_id = l_project_id
13760 AND ppev2.attribute15 = pobj.object_id_to1
13761 and ppev1.parent_structure_version_id = l_new_struct_ver_id
13762 and ppev2.parent_structure_version_id = l_new_struct_ver_id
13763 ;
13764
13765
13766 INSERT INTO pa_proj_elem_ver_schedule(
13767 PEV_SCHEDULE_ID
13768 ,ELEMENT_VERSION_ID
13769 ,PROJECT_ID
13770 ,PROJ_ELEMENT_ID
13771 ,CREATION_DATE
13772 ,CREATED_BY
13773 ,LAST_UPDATE_DATE
13774 ,LAST_UPDATED_BY
13775 ,SCHEDULED_START_DATE
13776 ,SCHEDULED_FINISH_DATE
13777 ,OBLIGATION_START_DATE
13778 ,OBLIGATION_FINISH_DATE
13779 ,ACTUAL_START_DATE
13780 ,ACTUAL_FINISH_DATE
13781 ,ESTIMATED_START_DATE
13782 ,ESTIMATED_FINISH_DATE
13783 ,DURATION
13784 ,EARLY_START_DATE
13785 ,EARLY_FINISH_DATE
13786 ,LATE_START_DATE
13787 ,LATE_FINISH_DATE
13788 ,CALENDAR_ID
13789 ,MILESTONE_FLAG
13790 ,CRITICAL_FLAG
13791 ,RECORD_VERSION_NUMBER
13792 ,LAST_UPDATE_LOGIN
13793 ,WQ_PLANNED_QUANTITY
13794 ,PLANNED_EFFORT
13795 ,ACTUAL_DURATION
13796 ,ESTIMATED_DURATION
13797 ,ATTRIBUTE_CATEGORY
13798 ,ATTRIBUTE1
13799 ,ATTRIBUTE2
13800 ,ATTRIBUTE3
13801 ,ATTRIBUTE4
13802 ,ATTRIBUTE5
13803 ,ATTRIBUTE6
13804 ,ATTRIBUTE7
13805 ,ATTRIBUTE8
13806 ,ATTRIBUTE9
13807 ,ATTRIBUTE10
13808 ,ATTRIBUTE11
13809 ,ATTRIBUTE12
13810 ,ATTRIBUTE13
13811 ,ATTRIBUTE14
13812 ,ATTRIBUTE15
13813 ,source_object_id
13814 ,source_object_type
13815 ,CONSTRAINT_TYPE_CODE
13816 ,CONSTRAINT_DATE
13817 ,FREE_SLACK
13818 ,TOTAL_SLACK
13819 ,EFFORT_DRIVEN_FLAG
13820 ,LEVEL_ASSIGNMENTS_FLAG
13821 ,EXT_ACT_DURATION
13822 ,EXT_REMAIN_DURATION
13823 ,EXT_SCH_DURATION
13824 ,DEF_SCH_TOOL_TSK_TYPE_CODE -- Fix For Bug # 4321287.
13825 )
13826 SELECT
13827 pa_proj_elem_ver_schedule_s.nextval
13828 ,ppev1.ELEMENT_VERSION_ID
13829 ,l_PROJECT_ID
13830 ,ppev1.PROJ_ELEMENT_ID
13831 ,SYSDATE
13832 ,l_user_id
13833 ,SYSDATE
13834 ,l_user_id
13835 ,ppevs.SCHEDULED_START_DATE
13836 ,ppevs.SCHEDULED_FINISH_DATE
13837 ,ppevs.OBLIGATION_START_DATE
13838 ,ppevs.OBLIGATION_FINISH_DATE
13839 ,ppevs.ACTUAL_START_DATE
13840 ,ppevs.ACTUAL_FINISH_DATE
13841 ,ppevs.ESTIMATED_START_DATE
13842 ,ppevs.ESTIMATED_FINISH_DATE
13843 ,ppevs.DURATION
13844 ,ppevs.EARLY_START_DATE
13845 ,ppevs.EARLY_FINISH_DATE
13846 ,ppevs.LATE_START_DATE
13847 ,ppevs.LATE_FINISH_DATE
13848 ,ppevs.CALENDAR_ID
13849 ,ppevs.MILESTONE_FLAG
13850 ,ppevs.CRITICAL_FLAG
13851 ,ppevs.RECORD_VERSION_NUMBER
13852 ,l_login_id
13853 ,ppevs.WQ_PLANNED_QUANTITY
13854 ,ppevs.PLANNED_EFFORT
13855 ,ppevs.ACTUAL_DURATION
13856 ,ppevs.ESTIMATED_DURATION
13857 ,ppevs.ATTRIBUTE_CATEGORY
13858 ,ppevs.ATTRIBUTE1
13859 ,ppevs.ATTRIBUTE2
13860 ,ppevs.ATTRIBUTE3
13861 ,ppevs.ATTRIBUTE4
13862 ,ppevs.ATTRIBUTE5
13863 ,ppevs.ATTRIBUTE6
13864 ,ppevs.ATTRIBUTE7
13865 ,ppevs.ATTRIBUTE8
13866 ,ppevs.ATTRIBUTE9
13867 ,ppevs.ATTRIBUTE10
13868 ,ppevs.ATTRIBUTE11
13869 ,ppevs.ATTRIBUTE12
13870 ,ppevs.ATTRIBUTE13
13871 ,ppevs.ATTRIBUTE14
13872 ,ppevs.ATTRIBUTE15
13873 ,l_PROJECT_ID
13874 ,'PA_PROJECTS'
13875 ,ppevs.CONSTRAINT_TYPE_CODE
13876 ,ppevs.CONSTRAINT_DATE
13877 ,ppevs.FREE_SLACK
13878 ,ppevs.TOTAL_SLACK
13879 ,ppevs.EFFORT_DRIVEN_FLAG
13880 ,ppevs.LEVEL_ASSIGNMENTS_FLAG
13881 ,ppevs.EXT_ACT_DURATION
13882 ,ppevs.EXT_REMAIN_DURATION
13883 ,ppevs.EXT_SCH_DURATION
13884 ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE -- Fix For Bug # 4321287.
13885 FROM pa_proj_elem_ver_schedule ppevs,
13886 pa_proj_element_versions ppev1
13887 where ppev1.attribute15 = ppevs.element_version_id
13888 and ppevs.project_id = l_project_id
13889 and ppev1.project_id = l_project_id
13890 and ppev1.parent_structure_version_id = l_new_struct_ver_id
13891 and ppev1.object_type = 'PA_TASKS';
13892
13893 -----------------------------------------FP_M Changes : Begin
13894 -- Refer to tracking bug 3305199
13895 --
13896 Declare
13897 /* Bug #: 3305199 SMukka */
13898 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13899 /* Old_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
13900 /* New_Versions_Tab PA_PLSQL_DATATYPES.IdTabTyp; */
13901 Old_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13902 New_Versions_Tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13903 Begin
13904 Select Element_Version_ID, attribute15 BULK COLLECT
13905 INTO New_Versions_Tab, Old_Versions_Tab
13906 From PA_Proj_Element_Versions
13907 Where Project_ID = l_project_id
13908 AND parent_structure_version_id = l_new_struct_ver_id;
13909
13910 PA_Relationship_Pvt.Copy_Intra_Dependency (
13911 P_Source_Ver_Tbl => Old_Versions_Tab,
13912 P_Destin_Ver_Tbl => New_Versions_Tab,
13913 X_Return_Status => X_Return_Status,
13914 X_Msg_Count => X_Msg_Count,
13915 X_Msg_Data => X_Msg_Data
13916 );
13917
13918 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13919 RAISE FND_API.G_EXC_ERROR;
13920 END IF;
13921
13922 PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
13923 P_Source_Ver_Tbl => Old_Versions_Tab,
13924 P_Destin_Ver_Tbl => New_Versions_Tab,
13925 X_Return_Status => X_Return_Status,
13926 X_Msg_Count => X_Msg_Count,
13927 X_Msg_Data => X_Msg_Data
13928 );
13929 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13930 RAISE FND_API.G_EXC_ERROR;
13931 END IF;
13932 End;
13933 /* SMukka 01-Mar-04 Bug No. 3450684 */
13934 /* Added call to PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass */
13935 /* API to copy all the out going sub project assoication */
13936
13937 -- Begin fix for Bug # 4530436.
13938
13939 -- The out going sub-project association links will not copied into the new structure version
13940 -- if the new structure version created is a working structure version.
13941
13942 if
13943 (pa_project_structure_utils.Check_Struc_Ver_Published(l_project_id, l_new_struct_ver_id) = 'Y')
13944 then
13945
13946 -- End fix for Bug # 4530436.
13947
13948 PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
13949 p_validate_only => p_validate_only,
13950 p_validation_level => p_validation_level,
13951 p_calling_module => p_calling_module,
13952 p_debug_mode => p_debug_mode,
13953 p_max_msg_count => p_max_msg_count,
13954 p_commit => p_commit,
13955 p_src_str_version_id => p_structure_version_id,
13956 p_dest_str_version_id => l_new_struct_ver_id, -- Destination Str version id can be of published str also
13957 x_return_status => X_Return_Status,
13958 x_msg_count => X_Msg_Count,
13959 x_msg_data => X_Msg_Data);
13960 IF (X_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
13961 x_msg_count := FND_MSG_PUB.count_msg;
13962 IF x_msg_count = 1 then
13963 pa_interface_utils_pub.get_messages
13964 (p_encoded => FND_API.G_TRUE,
13965 p_msg_index => 1,
13966 p_msg_count => l_msg_count,
13967 p_msg_data => l_msg_data,
13968 p_data => l_data,
13969 p_msg_index_out => l_msg_index_out);
13970 x_msg_data := l_data;
13971 END IF;
13972 raise FND_API.G_EXC_ERROR;
13973 END IF;
13974
13975 end if; -- Fix for Bug # 4530436.
13976
13977 --3755117 for copying mapping
13978 BEGIN
13979 PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
13980 p_context => 'CREATE_WORKING_VERSION'
13981 ,p_src_project_id => l_project_id
13982 ,p_dest_project_id => l_project_id
13983 ,p_src_str_version_id => p_structure_version_id
13984 ,p_dest_str_version_id => l_new_struct_ver_id
13985 ,x_return_status => x_return_status
13986 ,x_msg_count => x_msg_count
13987 ,x_msg_data => x_msg_data
13988 );
13989
13990 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13991 RAISE FND_API.G_EXC_ERROR;
13992 END IF;
13993 EXCEPTION
13994 WHEN OTHERS THEN
13995 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
13996 p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13997 p_error_text => SUBSTRB('PA_PROJ_STRUC_MAPPING_PUB.copy_mapping:'||SQLERRM,1,240));
13998 RAISE FND_API.G_EXC_ERROR;
13999 END;
14000
14001 -- Changes added by skannoji
14002 -- Added code for doosan customer
14003 IF (l_wp_struc = 'Y') THEN
14004 Declare
14005 /* Bug #: 3305199 SMukka */
14006 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
14007 /* src_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
14008 /* dest_versions_tab PA_PLSQL_DATATYPES.IdTabTyp; */
14009 src_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
14010 dest_versions_tab SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
14011 Begin
14012 src_versions_tab.extend(1); /* Venky */
14013 dest_versions_tab.extend(1); /* Venky */
14014 src_versions_tab(1) := p_structure_version_id;
14015 dest_versions_tab(1) := l_new_struct_ver_id;
14016
14017 -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
14018 /*Smukka Bug No. 3474141 Date 03/01/2004 */
14019 /*moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block */
14020 BEGIN
14021 PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
14022 (
14023 p_source_project_id => l_project_id
14024 ,p_target_project_id => l_project_id
14025 ,p_src_sv_ids_tbl => src_Versions_Tab /* Workplan version id tbl */
14026 ,p_target_sv_ids_tbl => dest_Versions_Tab /* Workplan version id tbl */
14027 ,p_copy_mode => 'V' --bug 5118313
14028 ,x_return_status => x_return_status
14029 ,x_msg_count => x_msg_count
14030 ,x_Msg_data => x_msg_data
14031 );
14032 EXCEPTION
14033 WHEN OTHERS THEN
14034 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
14035 p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
14036 p_error_text => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
14037 RAISE FND_API.G_EXC_ERROR;
14038 END;
14039 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
14040 RAISE FND_API.G_EXC_ERROR;
14041 END IF;
14042 End;
14043 END IF;
14044 -- till here by skannoji
14045
14046 -----------------------------------------FP_M Changes : End
14047
14048 UPDATE pa_proj_element_versions ppevs1
14049 SET attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
14050 where ppevs2.project_id = l_project_id
14051 and parent_structure_version_id = p_structure_version_id
14052 and ppevs2.element_version_id = ppevs1.attribute15
14053 )
14054 WHERE project_id = l_project_id
14055 AND parent_structure_version_id = l_new_struct_ver_id
14056 ;
14057
14058
14059 x_new_struct_ver_id := l_new_struct_ver_id;
14060 x_return_status := FND_API.G_RET_STS_SUCCESS;
14061
14062 IF (p_commit = FND_API.G_TRUE) THEN
14063 COMMIT;
14064 END IF;
14065
14066 IF (p_debug_mode = 'Y') THEN
14067 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK END');
14068 END IF;
14069
14070 EXCEPTION
14071 when FND_API.G_EXC_ERROR then
14072 if p_commit = FND_API.G_TRUE then
14073 rollback to copy_structure_version_pvt_blk;
14074 end if;
14075 x_return_status := FND_API.G_RET_STS_ERROR;
14076 when FND_API.G_EXC_UNEXPECTED_ERROR then
14077 if p_commit = FND_API.G_TRUE then
14078 rollback to copy_structure_version_pvt_blk;
14079 end if;
14080 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14081 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
14082 p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
14083 p_error_text => SUBSTRB(SQLERRM,1,240));
14084 when OTHERS then
14085 if p_commit = FND_API.G_TRUE then
14086 rollback to copy_structure_version_pvt_blk;
14087 end if;
14088 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14089 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
14090 p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
14091 p_error_text => SUBSTRB(SQLERRM,1,240));
14092 raise;
14093 END COPY_STRUCTURE_VERSION_BULK;
14094
14095 procedure update_sch_dirty_flag(
14096 p_project_id IN NUMBER := NULL
14097 ,p_structure_version_id IN NUMBER
14098 ,p_dirty_flag IN VARCHAR2 := 'N'
14099 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14100 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
14101 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14102 )
14103 IS
14104 l_dirty_flag VARCHAR2(1);
14105 l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
14106
14107 --Bug No 3634334
14108 --Commented the following query for performance reason and rewritten the same.
14109 --Getting the project_id from pa_proj_element_versions table instead of getting
14110 --it from pa_proj_elem_ver_structure table, in this optimizer will be using the
14111 --unique index on element_version_id and functionally the process is fetching
14112 --project_id
14113 /* CURSOR get_proj_id(cp_structure_version_id NUMBER) IS
14114 SELECT project_id
14115 FROM pa_proj_elem_ver_structure
14116 WHERE element_version_id = cp_structure_version_id;*/
14117
14118 CURSOR get_proj_id(cp_structure_version_id NUMBER) IS
14119 SELECT project_id
14120 FROM pa_proj_element_versions
14121 WHERE element_version_id = cp_structure_version_id;
14122 l_proj_id NUMBER;
14123 BEGIN
14124
14125 /* IF (p_dirty_flag = 'N') THEN
14126 l_dirty_flag := 'N';
14127 ELSE
14128 l_dirty_flag := 'Y';
14129 END IF;*/
14130
14131 IF (p_dirty_flag IS NULL) THEN
14132 l_dirty_flag := 'N';
14133 ELSE
14134 l_dirty_flag := p_dirty_flag;
14135 END IF;
14136 --
14137 IF p_project_id IS NULL THEN
14138 OPEN get_proj_id(p_structure_version_id);
14139 FETCH get_proj_id INTO l_proj_id;
14140 CLOSE get_proj_id;
14141 --
14142 UPDATE pa_proj_elem_ver_structure
14143 SET SCHEDULE_DIRTY_FLAG = l_dirty_flag
14144 WHERE element_version_id = p_structure_version_id
14145 AND project_id = l_proj_id;
14146 ELSE
14147 UPDATE pa_proj_elem_ver_structure
14148 SET SCHEDULE_DIRTY_FLAG = l_dirty_flag
14149 WHERE element_version_id = p_structure_version_id
14150 AND project_id = p_project_id;
14151 END IF;
14152
14153 x_return_status := l_return_status;
14154 EXCEPTION
14155 WHEN OTHERS THEN
14156 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14157 x_msg_count := FND_MSG_PUB.count_msg;
14158 --put message
14159 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
14160 p_procedure_name => 'update_sch_dirty_flag',
14161 p_error_text => SUBSTRB(SQLERRM,1,240));
14162 RAISE;
14163 END update_sch_dirty_flag;
14164
14165 --bug 3305199
14166 --Please refer to update_structures_setup_old for old code
14167 PROCEDURE update_structures_setup_attr
14168 ( p_api_version IN NUMBER := 1.0
14169 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
14170 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
14171 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
14172 ,p_validation_level IN VARCHAR2 := 100
14173 ,p_calling_module IN VARCHAR2 := 'SELF_SERVICE'
14174 ,p_debug_mode IN VARCHAR2 := 'N'
14175 ,p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14176 ,p_project_id IN NUMBER
14177 ,p_workplan_enabled_flag IN VARCHAR2
14178 ,p_financial_enabled_flag IN VARCHAR2
14179 ,p_sharing_enabled_flag IN VARCHAR2
14180 --FP M changes bug 3301192
14181 ,p_deliverables_enabled_flag IN VARCHAR2
14182 ,p_sharing_option_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14183 --End FP M changes bug 3301192
14184 ,p_sys_program_flag IN varchar2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14185 ,p_allow_multi_prog_rollup IN varchar2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14186 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14187 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
14188 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14189 ,p_cbs_version_id IN NUMBER default NULL --added for CBS 15834912
14190 ,p_cbs_enable_flag IN VARCHAR2 default 'N' --Bug16083858
14191 )
14192 IS
14193 l_ret_stat VARCHAR2(1);
14194 l_err_msg_code VARCHAR2(250);
14195 l_suffix VARCHAR2(80);
14196 l_name VARCHAR2(240);
14197 l_append VARCHAR2(10) := ': ';
14198 l_return_status VARCHAR2(1);
14199 l_msg_count NUMBER;
14200 l_msg_data VARCHAR2(250);
14201 l_structure_id NUMBER;
14202 l_structure_version_id NUMBER;
14203 l_template_flag VARCHAR2(1);
14204 l_status_code VARCHAR2(30);
14205 l_baseline_flag VARCHAR2(1);
14206 l_latest_eff_pub_flag VARCHAR2(1);
14207 l_effective_date DATE;
14208 l_wp_attr_rvn NUMBER;
14209 l_rowid VARCHAR2(255);
14210 l_keep_structure_ver_id NUMBER;
14211 l_del_struc_ver_id NUMBER;
14212 l_struc_ver_rvn NUMBER;
14213 l_pev_structure_id NUMBER;
14214 l_pev_schedule_id NUMBER;
14215 l_struc_ver_attr_rvn NUMBER;
14216 l_struc_type_id NUMBER;
14217 l_proj_structure_type_id NUMBER;
14218 l_task_id NUMBER;
14219 l_element_version_id NUMBER;
14220 l_start_date DATE;
14221 l_completion_date DATE;
14222 l_object_type VARCHAR2(30);
14223 l_task_ver_id NUMBER;
14224 /* Bug 2790703 Begin */
14225 -- l_task_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
14226 l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
14227 l_index number :=0 ;
14228 /* Bug 2790703 End */
14229
14230 l_proj_start_Date DATE;
14231 l_proj_completion_date DATE;
14232 l_proj_prog_attr_id NUMBER;
14233
14234 -- FP.M Changes below
14235 l_sys_program_flag PA_PROJECTS_ALL.sys_program_flag%TYPE;
14236 l_allow_multi_program_rollup PA_PROJECTS_ALL.allow_multi_program_rollup%TYPE;
14237 l_proj_sys_program_flag PA_PROJECTS_ALL.sys_program_flag%TYPE;
14238 l_proj_allow_program_rollup PA_PROJECTS_ALL.allow_multi_program_rollup%TYPE;
14239 l_flag VARCHAR2(1);
14240
14241 -- NYU
14242 l_del_trans_exist VARCHAR2(1);
14243
14244 CURSOR get_project_info IS
14245 select name, target_start_date, target_finish_date, sys_program_flag, allow_multi_program_rollup
14246 from pa_projects_all
14247 where project_id = p_project_id;
14248
14249 --bug 2843569: added record_version_number
14250 CURSOR get_template_flag IS
14251 select template_flag, record_version_number
14252 from pa_projects_all
14253 where project_id = p_project_id;
14254
14255 CURSOR get_wp_attr_rvn IS
14256 select b.proj_element_id, a.record_version_number
14257 from pa_proj_workplan_attr a,
14258 pa_proj_elements b,
14259 pa_proj_structure_types c,
14260 pa_structure_types d
14261 where a.project_id = b.project_id
14262 and a.proj_element_id = b.proj_element_id
14263 and b.project_id = p_project_id
14264 and b.proj_element_id = c.proj_element_id
14265 and c.structure_type_id = d.structure_type_id
14266 and d.structure_type_class_code = 'WORKPLAN';
14267
14268 cursor sel_wp_struct_type(c_structure_id NUMBER) IS
14269 select a.rowid
14270 from pa_proj_structure_types a,
14271 pa_structure_types b
14272 where a.proj_element_id = c_structure_id
14273 and a.structure_type_id = b.structure_type_id
14274 and b.structure_type_class_code = 'WORKPLAN';
14275
14276 cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
14277 select element_version_id
14278 from pa_proj_elem_ver_structure
14279 where proj_element_id = c_structure_id
14280 and project_id = p_project_id
14281 and status_code = 'STRUCTURE_PUBLISHED'
14282 and LATEST_EFF_PUBLISHED_FLAG = 'Y';
14283
14284 --bug 4054587, replace literal with bind variable
14285 l_wp_structure_code VARCHAR2(10) := 'WORKPLAN';
14286 cursor sel_wp_structure_id IS
14287 select a.proj_element_id
14288 from pa_proj_elements a,
14289 pa_proj_structure_types b,
14290 pa_structure_types c
14291 where a.project_id = p_project_id
14292 and a.object_type = 'PA_STRUCTURES'
14293 and a.proj_element_id = b.proj_element_id
14294 and b.structure_type_id = c.structure_type_id
14295 --and c.structure_type_class_code = 'WORKPLAN';
14296 and c.structure_type_class_code = l_wp_structure_code;
14297
14298 cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
14299 select b.element_version_id, b.record_version_number
14300 from pa_proj_element_versions a,
14301 pa_proj_element_versions b
14302 where a.element_version_id = c_keep_struc_ver_id
14303 and a.project_id = b.project_id
14304 and a.proj_element_id = b.proj_element_id
14305 and b.element_version_id <> c_keep_struc_ver_id
14306 and b.object_type = 'PA_STRUCTURES';
14307
14308 cursor sel_all_wp_structure_ver(c_struc_id NUMBER) IS
14309 select a.element_version_id, a.record_version_number
14310 from pa_proj_element_versions a,
14311 pa_proj_elements b
14312 where a.proj_element_id = b.proj_element_id
14313 and a.project_id = b.project_id
14314 and b.proj_element_id = c_struc_id;
14315
14316 cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
14317 select PEV_STRUCTURE_ID, record_version_number
14318 from pa_proj_elem_ver_structure
14319 where project_id = p_project_id
14320 and element_version_id = c_struc_ver_id;
14321
14322 cursor sel_proj_workplan_attr(c_struc_id NUMBER) is
14323 select *
14324 from pa_proj_workplan_attr
14325 where proj_element_id = c_struc_id;
14326 l_proj_workplan_attr_rec sel_proj_workplan_attr%ROWTYPE;
14327
14328 cursor sel_proj_progress_attr(c_struc_id NUMBER) IS
14329 select *
14330 from pa_proj_progress_attr
14331 where project_id = p_project_id
14332 and object_type = 'PA_STRUCTURES'
14333 and object_id = c_struc_id;
14334 l_proj_progress_attr_rec sel_proj_progress_attr%ROWTYPE;
14335
14336 --bug 4054587, replace literal with bind variable
14337 l_fin_structure_code VARCHAR2(10) := 'FINANCIAL';
14338 cursor sel_fin_structure_id IS
14339 select a.proj_element_id
14340 from pa_proj_elements a,
14341 pa_proj_structure_types b,
14342 pa_structure_types c
14343 where a.project_id = p_project_id
14344 and a.object_type = 'PA_STRUCTURES'
14345 and a.proj_element_id = b.proj_element_id
14346 and b.structure_type_id = c.structure_type_id
14347 --and c.structure_type_class_code = 'FINANCIAL';
14348 and c.structure_type_class_code = l_fin_structure_code;
14349
14350 CURSOR sel_struc_type_id IS
14351 select structure_type_id
14352 from pa_structure_types
14353 where structure_type_class_code = 'WORKPLAN';
14354
14355 cursor sel_struc_ver(c_structure_id NUMBER) IS
14356 select element_version_id
14357 from pa_proj_element_versions
14358 where project_id = p_project_id
14359 and proj_element_id = c_structure_id
14360 and object_type = 'PA_STRUCTURES';
14361
14362 --hsiu: commented for performance
14363 -- cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
14364 -- select object_type, proj_element_id, element_version_id
14365 -- from pa_proj_element_versions
14366 -- where parent_structure_version_id = c_struc_ver_id;
14367 cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
14368 select pev.object_type, pev.proj_element_id, pev.element_version_id
14369 from pa_proj_element_versions pev, pa_object_relationships rel
14370 where pev.parent_structure_version_id = c_struc_ver_id
14371 and rel.object_id_to1 = pev.element_version_id
14372 and rel.relationship_type = 'S'
14373 and NOT EXISTS (
14374 select 1
14375 from pa_object_Relationships
14376 where object_id_from1 = pev.element_version_id
14377 and relationship_type = 'S'
14378 );
14379
14380
14381 cursor sel_task_dates(c_task_id NUMBER) IS
14382 select start_date, completion_date
14383 from pa_tasks
14384 where task_id = c_task_id;
14385
14386 --hsiu added for bug 2634029
14387 cursor sel_target_dates IS
14388 select target_start_date, target_finish_date, calendar_id
14389 from pa_projects_all
14390 where project_id = p_project_id;
14391
14392 CURSOR get_top_tasks(c_structure_version_id NUMBER) IS
14393 select v.element_version_id
14394 from pa_proj_element_versions v,
14395 pa_object_relationships r
14396 where v.element_version_id = r.object_id_to1
14397 and r.object_id_from1 = c_structure_version_id
14398 and r.object_type_from = 'PA_STRUCTURES';
14399
14400 --bug 2843569
14401 CURSOR get_scheduled_dates(c_project_Id NUMBER,
14402 c_element_version_id NUMBER) IS
14403 select a.scheduled_start_date, a.scheduled_finish_date
14404 from pa_proj_elem_ver_schedule a
14405 where a.project_id = c_project_id
14406 and a.element_version_id = c_element_version_id;
14407 l_get_sch_dates_cur get_scheduled_dates%ROWTYPE;
14408 l_proj_rec_ver_num NUMBER;
14409 --end bug 2843569
14410
14411 l_target_start_date DATE;
14412 l_target_finish_date DATE;
14413 l_calendar_id NUMBER;
14414 --end changes for bug 2634029
14415
14416 --bug 3010538
14417 l_task_weight_basis_code VARCHAR2(30);
14418 l_update_proc_wbs_flag VARCHAR2(1);
14419 --end bug 3010538
14420
14421 l_wp_name VARCHAR2(240);
14422
14423 CURSOR sel_fin_struc_type_id IS
14424 select structure_type_id
14425 from pa_structure_types
14426 where structure_type_class_code = 'FINANCIAL';
14427 l_fin_struc_type_id NUMBER;
14428 l_del_name VARCHAR2(240);
14429 l_wp_enabled VARCHAR2(1);
14430 l_fin_enabled VARCHAR2(1);
14431 l_delv_enabled VARCHAR2(1);
14432 l_share_code VARCHAR2(30);
14433 l_new_share_code VARCHAR2(30);
14434
14435 l_struct_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
14436
14437 /* Bug # 3420093. Progress Management changes. */
14438
14439 l_proj_progress_attr_id NUMBER;
14440
14441 /* Bug # 3420093. Progress Management changes. */
14442
14443 -- Begin fix for Bug # 4426392.
14444
14445 cursor cur_program (c_project_id NUMBER) is
14446 select 'Y'
14447 from pa_object_relationships por
14448 where (por.object_id_from2 = c_project_id
14449 or por.object_id_to2 = c_project_id)
14450 and por.relationship_type in ('LW', 'LF');
14451
14452 l_program VARCHAR2(1) := null;
14453
14454 cursor cur_links (c_project_id NUMBER) is
14455 -- Select links from the working structure version of all parent projects
14456 -- with sharing enabled to the given project.
14457 select por1.object_relationship_id obj_rel_id
14458 , por1.object_id_from2 src_proj_id
14459 , por2.object_id_from1 task_ver_id
14460 , c_project_id dest_proj_id
14461 , ppev.parent_structure_version_id src_str_ver_id
14462 , por1.record_version_number rec_ver_number
14463 from pa_object_relationships por1
14464 , pa_object_relationships por2
14465 , pa_projects_all ppa
14466 , pa_proj_element_versions ppev
14467 , pa_proj_elem_ver_structure ppevs
14468 where por1.object_id_to2 = c_project_id
14469 and por1.relationship_type in ('LW', 'LF')
14470 and por1.object_id_from1 = por2.object_id_to1
14471 and por2.relationship_type = 'S'
14472 and por1.object_id_from2 = ppa.project_id
14473 and ppa.structure_sharing_code in ('SHARE_FULL', 'SHARE_PARTIAL')
14474 and por2.object_id_from1 = ppev.element_version_id
14475 -- Bug Fix 4868867
14476 -- Ram Namburi
14477 -- adding the following additional project id join to avoid the Full Table Scan on
14478 -- pa_proj_elem_ver_structure table and to use N1.
14479 and ppev.project_id = ppevs.project_id
14480 and ppev.parent_structure_version_id = ppevs.element_version_id
14481 and ppevs.current_working_flag = 'Y'
14482 union
14483 -- Select links from the working structure version of the given project to all child projects
14484 -- with sharing enabled.
14485 select por1.object_relationship_id obj_rel_id
14486 , c_project_id src_proj_id
14487 , por2.object_id_from1 task_ver_id
14488 , por1.object_id_to2 dest_proj_id
14489 , ppev.parent_structure_version_id src_str_ver_id
14490 , por1.record_version_number rec_ver_number
14491 from pa_object_relationships por1
14492 , pa_object_relationships por2
14493 , pa_projects_all ppa
14494 , pa_proj_element_versions ppev
14495 , pa_proj_elem_ver_structure ppevs
14496 where por1.object_id_from2 = c_project_id
14497 and por1.relationship_type in ('LW', 'LF')
14498 and por1.object_id_from1 = por2.object_id_to1
14499 and por2.relationship_type = 'S'
14500 and por1.object_id_to2 = ppa.project_id
14501 and ppa.structure_sharing_code in ('SHARE_FULL', 'SHARE_PARTIAL')
14502 and por2.object_id_from1 = ppev.element_version_id
14503 -- Bug Fix 4868867
14504 -- Ram Namburi
14505 -- adding the following additional project id join to avoid the Full Table Scan on
14506 -- pa_proj_elem_ver_structure table and to use N1.
14507 and ppev.project_id = ppevs.project_id
14508 and ppev.parent_structure_version_id = ppevs.element_version_id
14509 and ppevs.current_working_flag = 'Y';
14510
14511 l_cur_links_rec cur_links%rowtype;
14512
14513 l_comment VARCHAR2(30) := null;
14514
14515 l_dest_proj_name VARCHAR2(30) := null;
14516
14517 -- End fix for Bug # 4426392.
14518
14519 BEGIN
14520 IF (p_debug_mode = 'Y') THEN
14521 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr');
14522 END IF;
14523
14524 IF (p_commit = FND_API.G_TRUE) THEN
14525 savepoint update_struc_setup_attr_pvt;
14526 END IF;
14527
14528 IF (p_debug_mode = 'Y') THEN
14529 pa_debug.debug('Performing validations');
14530 END IF;
14531
14532 l_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_workplan_enabled(p_project_id);
14533 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_financial_enabled(p_project_id);
14534 l_share_code := PA_PROJECT_STRUCTURE_UTILS.Get_Structure_sharing_code(p_project_id);
14535 l_delv_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_deliverable_enabled(p_project_id);
14536
14537
14538 --get template flag
14539 OPEN get_template_flag;
14540 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
14541 CLOSE get_template_flag;
14542
14543 --get project name
14544 OPEN get_project_info;
14545 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;
14546 CLOSE get_project_info;
14547
14548 -- Begin fix for Bug # 4426392.
14549
14550 -- If a project is part of a program then the user cannot disable its project structures
14551 -- or change its structure integration option from split tp shared or vice-versa.
14552
14553 -- Please ensure that this code s always the first check in this API.
14554
14555 open cur_program(p_project_id);
14556 fetch cur_program into l_program;
14557 close cur_program;
14558
14559 if (
14560 (nvl(l_program,'N') = 'Y')
14561 and (((l_wp_enabled = 'Y') and (p_workplan_enabled_flag = 'N'))
14562 or ((l_fin_enabled = 'Y') and (p_financial_enabled_flag = 'N'))
14563 or ((l_share_code in ('SHARE_FULL','SHARE_PARTIAL'))
14564 and (p_sharing_option_code in ('SPLIT_MAPPING','SPLIT_NO_MAPPING')))
14565 or ((l_share_code in ('SPLIT_MAPPING','SPLIT_NO_MAPPING'))
14566 and (p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL'))))
14567 ) then
14568
14569 PA_UTILS.ADD_MESSAGE('PA', 'PA_WP_PROG_CANT_CHG_STR');
14570
14571 RAISE FND_API.G_EXC_ERROR;
14572
14573 end if;
14574
14575 -- End fix for Bug # 4426392.
14576
14577 --check if ok to enable workplan
14578 If (l_wp_enabled <> p_workplan_enabled_flag AND p_workplan_enabled_flag = 'Y') THEN
14579 -- Bug 6832737 Changed check_disable_wp_ok to check_enable_wp_ok
14580 --PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
14581 PA_PROJECT_STRUCTURE_UTILS.check_enable_wp_ok(p_project_id,
14582 l_ret_stat,
14583 l_err_msg_code);
14584 IF (l_ret_stat = 'N') THEN
14585 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14586 x_msg_data := l_err_msg_code;
14587 RAISE FND_API.G_EXC_ERROR;
14588 END IF;
14589 END IF;
14590
14591 --check if ok to disable workplan
14592 IF (l_wp_enabled <> p_workplan_enabled_flag AND p_workplan_enabled_flag = 'N') THEN
14593 PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
14594 l_ret_stat,
14595 l_err_msg_code);
14596 IF (l_ret_stat = 'N') THEN
14597 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14598 x_msg_data := l_err_msg_code;
14599 RAISE FND_API.G_EXC_ERROR;
14600 END IF;
14601 END IF;
14602
14603 --check if ok to share
14604 IF (l_share_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING') and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
14605 PA_PROJECT_STRUCTURE_UTILS.check_sharing_on_ok(p_project_id,
14606 l_ret_stat,
14607 l_err_msg_code);
14608 IF (l_ret_stat = 'N') THEN
14609 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14610 x_msg_data := l_err_msg_code;
14611 RAISE FND_API.G_EXC_ERROR;
14612 END IF;
14613 END IF;
14614
14615 --check if ok to split
14616 IF (l_share_code IN ('SHARE_FULL','SHARE_PARTIAL') and p_sharing_option_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING')) THEN
14617 PA_PROJECT_STRUCTURE_UTILS.check_sharing_off_ok(p_project_id,
14618 l_ret_stat,
14619 l_err_msg_code);
14620 IF (l_ret_stat = 'N') THEN
14621 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14622 x_msg_data := l_err_msg_code;
14623 RAISE FND_API.G_EXC_ERROR;
14624 END IF;
14625 END IF;
14626
14627 IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
14628 l_proj_completion_date := l_proj_start_date;
14629 ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
14630 l_proj_completion_date := sysdate;
14631 l_proj_start_date := sysdate;
14632 END IF;
14633
14634 --get suffix
14635 select meaning
14636 into l_suffix
14637 from pa_lookups
14638 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
14639 and lookup_code = 'WORKPLAN';
14640 --get workplan name
14641 l_wp_name := substrb(l_name||l_append||l_suffix, 1, 240);
14642
14643 --check for
14644 IF (l_wp_enabled = 'N' and l_fin_enabled = 'N') THEN
14645 --both currently disabled
14646 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
14647 --disabled both
14648 NULL;
14649 ELSIF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
14650 --disable workplan (enable financial)
14651 --create financial structure API
14652 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14653 (p_validate_only => FND_API.G_FALSE
14654 ,p_project_id => p_project_id
14655 ,p_structure_number => l_name
14656 ,p_structure_name => l_name
14657 ,p_calling_flag => 'FINANCIAL'
14658 ,x_structure_id => l_structure_id
14659 ,x_return_status => l_return_status
14660 ,x_msg_count => l_msg_count
14661 ,x_msg_data => l_msg_data);
14662
14663 --Check if there is any error.
14664 l_msg_count := FND_MSG_PUB.count_msg;
14665 IF l_msg_count > 0 THEN
14666 x_msg_count := l_msg_count;
14667 IF x_msg_count = 1 THEN
14668 x_msg_data := l_msg_data;
14669 END IF;
14670 RAISE FND_API.G_EXC_ERROR;
14671 END IF;
14672
14673 --create row in pa_proj_workplan_attr
14674 PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
14675 (p_validate_only => FND_API.G_FALSE
14676 ,p_project_id => p_project_id
14677 ,p_proj_element_id => l_structure_id
14678 ,x_return_status => l_return_status
14679 ,x_msg_count => l_msg_count
14680 ,x_msg_data => l_msg_data);
14681
14682 --Check if there is any error.
14683 l_msg_count := FND_MSG_PUB.count_msg;
14684 IF l_msg_count > 0 THEN
14685 x_msg_count := l_msg_count;
14686 IF x_msg_count = 1 THEN
14687 x_msg_data := l_msg_data;
14688 END IF;
14689 RAISE FND_API.G_EXC_ERROR;
14690 END IF;
14691
14692 --create structure version
14693 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14694 (p_validate_only => FND_API.G_FALSE
14695 ,p_structure_id => l_structure_id
14696 ,x_structure_version_id => l_structure_version_id
14697 ,x_return_status => l_return_status
14698 ,x_msg_count => l_msg_count
14699 ,x_msg_data => l_msg_data );
14700
14701 --Check if there is any error.
14702 l_msg_count := FND_MSG_PUB.count_msg;
14703 IF l_msg_count > 0 THEN
14704 x_msg_count := l_msg_count;
14705 IF x_msg_count = 1 THEN
14706 x_msg_data := l_msg_data;
14707 END IF;
14708 RAISE FND_API.G_EXC_ERROR;
14709 END IF;
14710
14711 IF (l_template_flag = 'Y') THEN
14712 l_status_code := 'STRUCTURE_WORKING';
14713 l_baseline_flag := 'N';
14714 l_latest_eff_pub_flag := 'N';
14715 l_effective_date := NULL;
14716 ELSE
14717 l_status_code := 'STRUCTURE_PUBLISHED';
14718 l_baseline_flag := 'N';
14719 l_latest_eff_pub_flag := 'Y';
14720 l_effective_date := sysdate;
14721 END IF;
14722
14723 --create structure version
14724 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14725 (p_validate_only => FND_API.G_FALSE
14726 ,p_structure_version_id => l_structure_version_id
14727 ,p_structure_version_name => l_name
14728 ,p_structure_version_desc => NULL
14729 ,p_effective_date => l_effective_date
14730 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
14731 ,p_locked_status_code => 'UNLOCKED'
14732 ,p_struct_version_status_code => l_status_code
14733 ,p_baseline_current_flag => l_baseline_flag
14734 ,p_baseline_original_flag => 'N'
14735 ,x_pev_structure_id => l_pev_structure_id
14736 ,x_return_status => l_return_status
14737 ,x_msg_count => l_msg_count
14738 ,x_msg_data => l_msg_data );
14739
14740 --Check if there is any error.
14741 l_msg_count := FND_MSG_PUB.count_msg;
14742 IF l_msg_count > 0 THEN
14743 x_msg_count := l_msg_count;
14744 IF x_msg_count = 1 THEN
14745 x_msg_data := l_msg_data;
14746 END IF;
14747 RAISE FND_API.G_EXC_ERROR;
14748 END IF;
14749
14750 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
14751 --disable financial (enable workplan)
14752 --create workplan structure
14753 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14754 (p_validate_only => FND_API.G_FALSE
14755 ,p_project_id => p_project_id
14756 ,p_structure_number => l_wp_name
14757 ,p_structure_name => l_wp_name
14758 ,p_calling_flag => 'WORKPLAN'
14759 ,x_structure_id => l_structure_id
14760 ,x_return_status => l_return_status
14761 ,x_msg_count => l_msg_count
14762 ,x_msg_data => l_msg_data );
14763
14764 --Check if there is any error.
14765 l_msg_count := FND_MSG_PUB.count_msg;
14766 IF l_msg_count > 0 THEN
14767 x_msg_count := l_msg_count;
14768 IF x_msg_count = 1 THEN
14769 x_msg_data := l_msg_data;
14770 END IF;
14771 RAISE FND_API.G_EXC_ERROR;
14772 END IF;
14773
14774 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14775 (p_validate_only => FND_API.G_FALSE
14776 ,p_structure_id => l_structure_id
14777 ,x_structure_version_id => l_structure_version_id
14778 ,x_return_status => l_return_status
14779 ,x_msg_count => l_msg_count
14780 ,x_msg_data => l_msg_data );
14781
14782 --Check if there is any error.
14783 l_msg_count := FND_MSG_PUB.count_msg;
14784 IF l_msg_count > 0 THEN
14785 x_msg_count := l_msg_count;
14786 IF x_msg_count = 1 THEN
14787 x_msg_data := l_msg_data;
14788 END IF;
14789 RAISE FND_API.G_EXC_ERROR;
14790 END IF;
14791
14792 PA_TASK_PUB1.Create_Schedule_Version(
14793 p_element_version_id => l_structure_version_id
14794 ,p_scheduled_start_date => l_proj_start_date
14795 ,p_scheduled_end_date => l_proj_completion_date
14796 ,x_pev_schedule_id => l_pev_schedule_id
14797 ,x_return_status => l_return_status
14798 ,x_msg_count => l_msg_count
14799 ,x_msg_data => l_msg_data);
14800
14801 --Check if there is any error.
14802 l_msg_count := FND_MSG_PUB.count_msg;
14803 IF l_msg_count > 0 THEN
14804 x_msg_count := l_msg_count;
14805 IF x_msg_count = 1 THEN
14806 x_msg_data := l_msg_data;
14807 END IF;
14808 RAISE FND_API.G_EXC_ERROR;
14809 END IF;
14810
14811 IF (l_template_flag = 'Y') THEN
14812 l_status_code := 'STRUCTURE_WORKING';
14813 l_baseline_flag := 'N';
14814 l_latest_eff_pub_flag := 'N';
14815 l_effective_date := NULL;
14816 ELSE
14817 l_status_code := 'STRUCTURE_PUBLISHED';
14818 l_baseline_flag := 'Y';
14819 l_latest_eff_pub_flag := 'Y';
14820 l_effective_date := sysdate;
14821 END IF;
14822
14823 --create structure version
14824 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14825 (p_validate_only => FND_API.G_FALSE
14826 ,p_structure_version_id => l_structure_version_id
14827 ,p_structure_version_name => l_name
14828 ,p_structure_version_desc => NULL
14829 ,p_effective_date => l_effective_date
14830 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
14831 ,p_locked_status_code => 'UNLOCKED'
14832 ,p_struct_version_status_code => l_status_code
14833 ,p_baseline_current_flag => l_baseline_flag
14834 ,p_baseline_original_flag => 'N'
14835 ,x_pev_structure_id => l_pev_structure_id
14836 ,x_return_status => l_return_status
14837 ,x_msg_count => l_msg_count
14838 ,x_msg_data => l_msg_data );
14839
14840 --Check if there is any error.
14841 l_msg_count := FND_MSG_PUB.count_msg;
14842 IF l_msg_count > 0 THEN
14843 x_msg_count := l_msg_count;
14844 IF x_msg_count = 1 THEN
14845 x_msg_data := l_msg_data;
14846 END IF;
14847 RAISE FND_API.G_EXC_ERROR;
14848 END IF;
14849
14850 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL', 'SHARE_FULL')) THEN
14851 --partial share/full share
14852 --enable workplan structure API
14853 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14854 (p_validate_only => FND_API.G_FALSE
14855 ,p_project_id => p_project_id
14856 ,p_structure_number => l_name
14857 ,p_structure_name => l_name
14858 ,p_calling_flag => 'WORKPLAN'
14859 ,x_structure_id => l_structure_id
14860 ,x_return_status => l_return_status
14861 ,x_msg_count => l_msg_count
14862 ,x_msg_data => l_msg_data );
14863
14864 --Check if there is any error.
14865 l_msg_count := FND_MSG_PUB.count_msg;
14866 IF l_msg_count > 0 THEN
14867 x_msg_count := l_msg_count;
14868 IF x_msg_count = 1 THEN
14869 x_msg_data := l_msg_data;
14870 END IF;
14871 RAISE FND_API.G_EXC_ERROR;
14872 END IF;
14873
14874 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14875 (p_validate_only => FND_API.G_FALSE
14876 ,p_structure_id => l_structure_id
14877 ,x_structure_version_id => l_structure_version_id
14878 ,x_return_status => l_return_status
14879 ,x_msg_count => l_msg_count
14880 ,x_msg_data => l_msg_data );
14881
14882 --Check if there is any error.
14883 l_msg_count := FND_MSG_PUB.count_msg;
14884 IF l_msg_count > 0 THEN
14885 x_msg_count := l_msg_count;
14886 IF x_msg_count = 1 THEN
14887 x_msg_data := l_msg_data;
14888 END IF;
14889 RAISE FND_API.G_EXC_ERROR;
14890 END IF;
14891
14892 PA_TASK_PUB1.Create_Schedule_Version(
14893 p_element_version_id => l_structure_version_id
14894 ,p_scheduled_start_date => l_proj_start_date
14895 ,p_scheduled_end_date => l_proj_completion_date
14896 ,x_pev_schedule_id => l_pev_schedule_id
14897 ,x_return_status => l_return_status
14898 ,x_msg_count => l_msg_count
14899 ,x_msg_data => l_msg_data);
14900
14901 --Check if there is any error.
14902 l_msg_count := FND_MSG_PUB.count_msg;
14903 IF l_msg_count > 0 THEN
14904 x_msg_count := l_msg_count;
14905 IF x_msg_count = 1 THEN
14906 x_msg_data := l_msg_data;
14907 END IF;
14908 RAISE FND_API.G_EXC_ERROR;
14909 END IF;
14910
14911 IF (l_template_flag = 'Y') THEN
14912 l_status_code := 'STRUCTURE_WORKING';
14913 l_baseline_flag := 'N';
14914 l_latest_eff_pub_flag := 'N';
14915 l_effective_date := NULL;
14916 ELSE
14917 l_status_code := 'STRUCTURE_PUBLISHED';
14918 l_baseline_flag := 'Y';
14919 l_latest_eff_pub_flag := 'Y';
14920 l_effective_date := sysdate;
14921 END IF;
14922
14923 --create structure version
14924 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14925 (p_validate_only => FND_API.G_FALSE
14926 ,p_structure_version_id => l_structure_version_id
14927 ,p_structure_version_name => l_name
14928 ,p_structure_version_desc => NULL
14929 ,p_effective_date => l_effective_date
14930 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
14931 ,p_locked_status_code => 'UNLOCKED'
14932 ,p_struct_version_status_code => l_status_code
14933 ,p_baseline_current_flag => l_baseline_flag
14934 ,p_baseline_original_flag => 'N'
14935 ,x_pev_structure_id => l_pev_structure_id
14936 ,x_return_status => l_return_status
14937 ,x_msg_count => l_msg_count
14938 ,x_msg_data => l_msg_data );
14939
14940 --Check if there is any error.
14941 l_msg_count := FND_MSG_PUB.count_msg;
14942 IF l_msg_count > 0 THEN
14943 x_msg_count := l_msg_count;
14944 IF x_msg_count = 1 THEN
14945 x_msg_data := l_msg_data;
14946 END IF;
14947 RAISE FND_API.G_EXC_ERROR;
14948 END IF;
14949
14950 --create financial type
14951 OPEN sel_fin_struc_type_id;
14952 FETCH sel_fin_struc_type_id INTO l_fin_struc_type_id;
14953 CLOSE sel_fin_struc_type_id;
14954
14955 l_proj_structure_type_id := NULL;
14956 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
14957 X_ROWID => l_rowid
14958 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
14959 ,X_PROJ_ELEMENT_ID => l_structure_id
14960 ,X_STRUCTURE_TYPE_ID => l_fin_struc_type_id
14961 ,X_RECORD_VERSION_NUMBER => 1
14962 ,X_ATTRIBUTE_CATEGORY => NULL
14963 ,X_ATTRIBUTE1 => NULL
14964 ,X_ATTRIBUTE2 => NULL
14965 ,X_ATTRIBUTE3 => NULL
14966 ,X_ATTRIBUTE4 => NULL
14967 ,X_ATTRIBUTE5 => NULL
14968 ,X_ATTRIBUTE6 => NULL
14969 ,X_ATTRIBUTE7 => NULL
14970 ,X_ATTRIBUTE8 => NULL
14971 ,X_ATTRIBUTE9 => NULL
14972 ,X_ATTRIBUTE10 => NULL
14973 ,X_ATTRIBUTE11 => NULL
14974 ,X_ATTRIBUTE12 => NULL
14975 ,X_ATTRIBUTE13 => NULL
14976 ,X_ATTRIBUTE14 => NULL
14977 ,X_ATTRIBUTE15 => NULL
14978 );
14979
14980 IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
14981 NULL;
14982 ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
14983 NULL;
14984 END IF;
14985
14986 /* Bug # 3420093. Progress Management changes. */
14987
14988 --create row in pa_proj_progress_attr
14989 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
14990 p_project_id => p_project_id
14991 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
14992 ,P_OBJECT_ID => l_structure_id
14993 ,P_PROGRESS_CYCLE_ID => to_number(null)
14994 ,P_WQ_ENABLE_FLAG => 'N'
14995 ,P_REMAIN_EFFORT_ENABLE_FLAG => 'N'
14996 ,P_PERCENT_COMP_ENABLE_FLAG => 'Y'
14997 ,P_NEXT_PROGRESS_UPDATE_DATE => to_date(null)
14998 ,p_TASK_WEIGHT_BASIS_CODE => 'COST'
14999 ,X_PROJ_PROGRESS_ATTR_ID => l_proj_progress_attr_id
15000 ,P_ALLOW_COLLAB_PROG_ENTRY => 'N'
15001 ,P_ALLW_PHY_PRCNT_CMP_OVERRIDES => 'Y'
15002 ,p_structure_type => 'FINANCIAL' --Amit
15003 ,x_return_status => l_return_status
15004 ,x_msg_count => l_msg_count
15005 ,x_msg_data => l_msg_data
15006 );
15007
15008 /* Bug # 3420093. Progress Management changes. */
15009
15010
15011 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING')) THEN
15012 --split mapping/split no mapping
15013 --enable financial structure API
15014 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15015 (p_validate_only => FND_API.G_FALSE
15016 ,p_project_id => p_project_id
15017 ,p_structure_number => l_name
15018 ,p_structure_name => l_name
15019 ,p_calling_flag => 'FINANCIAL'
15020 ,x_structure_id => l_structure_id
15021 ,x_return_status => l_return_status
15022 ,x_msg_count => l_msg_count
15023 ,x_msg_data => l_msg_data);
15024
15025 --Check if there is any error.
15026 l_msg_count := FND_MSG_PUB.count_msg;
15027 IF l_msg_count > 0 THEN
15028 x_msg_count := l_msg_count;
15029 IF x_msg_count = 1 THEN
15030 x_msg_data := l_msg_data;
15031 END IF;
15032 RAISE FND_API.G_EXC_ERROR;
15033 END IF;
15034
15035 --create row in pa_proj_workplan_attr
15036 PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
15037 (p_validate_only => FND_API.G_FALSE
15038 ,p_project_id => p_project_id
15039 ,p_proj_element_id => l_structure_id
15040 ,x_return_status => l_return_status
15041 ,x_msg_count => l_msg_count
15042 ,x_msg_data => l_msg_data);
15043
15044 --Check if there is any error.
15045 l_msg_count := FND_MSG_PUB.count_msg;
15046 IF l_msg_count > 0 THEN
15047 x_msg_count := l_msg_count;
15048 IF x_msg_count = 1 THEN
15049 x_msg_data := l_msg_data;
15050 END IF;
15051 RAISE FND_API.G_EXC_ERROR;
15052 END IF;
15053
15054 --create structure version
15055 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15056 (p_validate_only => FND_API.G_FALSE
15057 ,p_structure_id => l_structure_id
15058 ,x_structure_version_id => l_structure_version_id
15059 ,x_return_status => l_return_status
15060 ,x_msg_count => l_msg_count
15061 ,x_msg_data => l_msg_data );
15062
15063 --Check if there is any error.
15064 l_msg_count := FND_MSG_PUB.count_msg;
15065 IF l_msg_count > 0 THEN
15066 x_msg_count := l_msg_count;
15067 IF x_msg_count = 1 THEN
15068 x_msg_data := l_msg_data;
15069 END IF;
15070 RAISE FND_API.G_EXC_ERROR;
15071 END IF;
15072
15073 IF (l_template_flag = 'Y') THEN
15074 l_status_code := 'STRUCTURE_WORKING';
15075 l_baseline_flag := 'N';
15076 l_latest_eff_pub_flag := 'N';
15077 l_effective_date := NULL;
15078 ELSE
15079 l_status_code := 'STRUCTURE_PUBLISHED';
15080 l_baseline_flag := 'N';
15081 l_latest_eff_pub_flag := 'Y';
15082 l_effective_date := sysdate;
15083 END IF;
15084
15085 --create structure version
15086 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15087 (p_validate_only => FND_API.G_FALSE
15088 ,p_structure_version_id => l_structure_version_id
15089 ,p_structure_version_name => l_name
15090 ,p_structure_version_desc => NULL
15091 ,p_effective_date => l_effective_date
15092 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
15093 ,p_locked_status_code => 'UNLOCKED'
15094 ,p_struct_version_status_code => l_status_code
15095 ,p_baseline_current_flag => l_baseline_flag
15096 ,p_baseline_original_flag => 'N'
15097 ,x_pev_structure_id => l_pev_structure_id
15098 ,x_return_status => l_return_status
15099 ,x_msg_count => l_msg_count
15100 ,x_msg_data => l_msg_data );
15101
15102 --Check if there is any error.
15103 l_msg_count := FND_MSG_PUB.count_msg;
15104 IF l_msg_count > 0 THEN
15105 x_msg_count := l_msg_count;
15106 IF x_msg_count = 1 THEN
15107 x_msg_data := l_msg_data;
15108 END IF;
15109 RAISE FND_API.G_EXC_ERROR;
15110 END IF;
15111
15112 --create workplan structure
15113 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15114 (p_validate_only => FND_API.G_FALSE
15115 ,p_project_id => p_project_id
15116 ,p_structure_number => l_wp_name
15117 ,p_structure_name => l_wp_name
15118 ,p_calling_flag => 'WORKPLAN'
15119 ,x_structure_id => l_structure_id
15120 ,x_return_status => l_return_status
15121 ,x_msg_count => l_msg_count
15122 ,x_msg_data => l_msg_data );
15123
15124 --Check if there is any error.
15125 l_msg_count := FND_MSG_PUB.count_msg;
15126 IF l_msg_count > 0 THEN
15127 x_msg_count := l_msg_count;
15128 IF x_msg_count = 1 THEN
15129 x_msg_data := l_msg_data;
15130 END IF;
15131 RAISE FND_API.G_EXC_ERROR;
15132 END IF;
15133
15134 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15135 (p_validate_only => FND_API.G_FALSE
15136 ,p_structure_id => l_structure_id
15137 ,x_structure_version_id => l_structure_version_id
15138 ,x_return_status => l_return_status
15139 ,x_msg_count => l_msg_count
15140 ,x_msg_data => l_msg_data );
15141
15142 --Check if there is any error.
15143 l_msg_count := FND_MSG_PUB.count_msg;
15144 IF l_msg_count > 0 THEN
15145 x_msg_count := l_msg_count;
15146 IF x_msg_count = 1 THEN
15147 x_msg_data := l_msg_data;
15148 END IF;
15149 RAISE FND_API.G_EXC_ERROR;
15150 END IF;
15151
15152 PA_TASK_PUB1.Create_Schedule_Version(
15153 p_element_version_id => l_structure_version_id
15154 ,p_scheduled_start_date => l_proj_start_date
15155 ,p_scheduled_end_date => l_proj_completion_date
15156 ,x_pev_schedule_id => l_pev_schedule_id
15157 ,x_return_status => l_return_status
15158 ,x_msg_count => l_msg_count
15159 ,x_msg_data => l_msg_data);
15160
15161 --Check if there is any error.
15162 l_msg_count := FND_MSG_PUB.count_msg;
15163 IF l_msg_count > 0 THEN
15164 x_msg_count := l_msg_count;
15165 IF x_msg_count = 1 THEN
15166 x_msg_data := l_msg_data;
15167 END IF;
15168 RAISE FND_API.G_EXC_ERROR;
15169 END IF;
15170
15171 IF (l_template_flag = 'Y') THEN
15172 l_status_code := 'STRUCTURE_WORKING';
15173 l_baseline_flag := 'N';
15174 l_latest_eff_pub_flag := 'N';
15175 l_effective_date := NULL;
15176 ELSE
15177 l_status_code := 'STRUCTURE_PUBLISHED';
15178 l_baseline_flag := 'Y';
15179 l_latest_eff_pub_flag := 'Y';
15180 l_effective_date := sysdate;
15181 END IF;
15182
15183 --create structure version
15184 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15185 (p_validate_only => FND_API.G_FALSE
15186 ,p_structure_version_id => l_structure_version_id
15187 ,p_structure_version_name => l_name
15188 ,p_structure_version_desc => NULL
15189 ,p_effective_date => l_effective_date
15190 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
15191 ,p_locked_status_code => 'UNLOCKED'
15192 ,p_struct_version_status_code => l_status_code
15193 ,p_baseline_current_flag => l_baseline_flag
15194 ,p_baseline_original_flag => 'N'
15195 ,x_pev_structure_id => l_pev_structure_id
15196 ,x_return_status => l_return_status
15197 ,x_msg_count => l_msg_count
15198 ,x_msg_data => l_msg_data );
15199
15200 --Check if there is any error.
15201 l_msg_count := FND_MSG_PUB.count_msg;
15202 IF l_msg_count > 0 THEN
15203 x_msg_count := l_msg_count;
15204 IF x_msg_count = 1 THEN
15205 x_msg_data := l_msg_data;
15206 END IF;
15207 RAISE FND_API.G_EXC_ERROR;
15208 END IF;
15209
15210 IF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
15211 NULL;
15212 ELSIF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
15213 NULL;
15214 END IF;
15215
15216 END IF;
15217
15218 ELSIF (l_wp_enabled = 'N' and l_fin_enabled = 'Y') THEN
15219 --workplan currently disabled (financial enabled)
15220 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
15221 --disabled both
15222 --disable financial structure API
15223 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
15224 p_validate_only => FND_API.G_FALSE
15225 ,p_project_id => p_project_id
15226 ,x_return_status => l_return_status
15227 ,x_msg_count => l_msg_count
15228 ,x_msg_data => l_msg_data);
15229
15230 --Check if there is any error.
15231 l_msg_count := FND_MSG_PUB.count_msg;
15232 IF l_msg_count > 0 THEN
15233 x_msg_count := l_msg_count;
15234 IF x_msg_count = 1 THEN
15235 x_msg_data := l_msg_data;
15236 END IF;
15237 RAISE FND_API.G_EXC_ERROR;
15238 END IF;
15239
15240 ELSIF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
15241 --disable workplan (enable financial)
15242 NULL;
15243 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
15244 --disable financial (enable workplan)
15245 --disable financial structure API
15246 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
15247 p_validate_only => FND_API.G_FALSE
15248 ,p_project_id => p_project_id
15249 ,x_return_status => l_return_status
15250 ,x_msg_count => l_msg_count
15251 ,x_msg_data => l_msg_data);
15252
15253 --Check if there is any error.
15254 l_msg_count := FND_MSG_PUB.count_msg;
15255 IF l_msg_count > 0 THEN
15256 x_msg_count := l_msg_count;
15257 IF x_msg_count = 1 THEN
15258 x_msg_data := l_msg_data;
15259 END IF;
15260 RAISE FND_API.G_EXC_ERROR;
15261 END IF;
15262
15263 --create workplan structure
15264 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15265 (p_validate_only => FND_API.G_FALSE
15266 ,p_project_id => p_project_id
15267 ,p_structure_number => l_wp_name
15268 ,p_structure_name => l_wp_name
15269 ,p_calling_flag => 'WORKPLAN'
15270 ,x_structure_id => l_structure_id
15271 ,x_return_status => l_return_status
15272 ,x_msg_count => l_msg_count
15273 ,x_msg_data => l_msg_data );
15274
15275 --Check if there is any error.
15276 l_msg_count := FND_MSG_PUB.count_msg;
15277 IF l_msg_count > 0 THEN
15278 x_msg_count := l_msg_count;
15279 IF x_msg_count = 1 THEN
15280 x_msg_data := l_msg_data;
15281 END IF;
15282 RAISE FND_API.G_EXC_ERROR;
15283 END IF;
15284
15285 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15286 (p_validate_only => FND_API.G_FALSE
15287 ,p_structure_id => l_structure_id
15288 ,x_structure_version_id => l_structure_version_id
15289 ,x_return_status => l_return_status
15290 ,x_msg_count => l_msg_count
15291 ,x_msg_data => l_msg_data );
15292
15293 --Check if there is any error.
15294 l_msg_count := FND_MSG_PUB.count_msg;
15295 IF l_msg_count > 0 THEN
15296 x_msg_count := l_msg_count;
15297 IF x_msg_count = 1 THEN
15298 x_msg_data := l_msg_data;
15299 END IF;
15300 RAISE FND_API.G_EXC_ERROR;
15301 END IF;
15302
15303 PA_TASK_PUB1.Create_Schedule_Version(
15304 p_element_version_id => l_structure_version_id
15305 ,p_scheduled_start_date => l_proj_start_date
15306 ,p_scheduled_end_date => l_proj_completion_date
15307 ,x_pev_schedule_id => l_pev_schedule_id
15308 ,x_return_status => l_return_status
15309 ,x_msg_count => l_msg_count
15310 ,x_msg_data => l_msg_data);
15311
15312 --Check if there is any error.
15313 l_msg_count := FND_MSG_PUB.count_msg;
15314 IF l_msg_count > 0 THEN
15315 x_msg_count := l_msg_count;
15316 IF x_msg_count = 1 THEN
15317 x_msg_data := l_msg_data;
15318 END IF;
15319 RAISE FND_API.G_EXC_ERROR;
15320 END IF;
15321
15322 IF (l_template_flag = 'Y') THEN
15323 l_status_code := 'STRUCTURE_WORKING';
15324 l_baseline_flag := 'N';
15325 l_latest_eff_pub_flag := 'N';
15326 l_effective_date := NULL;
15327 ELSE
15328 l_status_code := 'STRUCTURE_PUBLISHED';
15329 l_baseline_flag := 'Y';
15330 l_latest_eff_pub_flag := 'Y';
15331 l_effective_date := sysdate;
15332 END IF;
15333
15334 --create structure version
15335 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15336 (p_validate_only => FND_API.G_FALSE
15337 ,p_structure_version_id => l_structure_version_id
15338 ,p_structure_version_name => l_wp_name
15339 ,p_structure_version_desc => NULL
15340 ,p_effective_date => l_effective_date
15341 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
15342 ,p_locked_status_code => 'UNLOCKED'
15343 ,p_struct_version_status_code => l_status_code
15344 ,p_baseline_current_flag => l_baseline_flag
15345 ,p_baseline_original_flag => 'N'
15346 ,x_pev_structure_id => l_pev_structure_id
15347 ,x_return_status => l_return_status
15348 ,x_msg_count => l_msg_count
15349 ,x_msg_data => l_msg_data );
15350
15351 --Check if there is any error.
15352 l_msg_count := FND_MSG_PUB.count_msg;
15353 IF l_msg_count > 0 THEN
15354 x_msg_count := l_msg_count;
15355 IF x_msg_count = 1 THEN
15356 x_msg_data := l_msg_data;
15357 END IF;
15358 RAISE FND_API.G_EXC_ERROR;
15359 END IF;
15360
15361 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL', 'SHARE_FULL')) THEN
15362 --partial share
15363 --add workplan structure type
15364 OPEN sel_fin_structure_id;
15365 FETCH sel_fin_structure_id into l_structure_id;
15366 CLOSE sel_fin_structure_id;
15367
15368 OPEN sel_struc_type_id;
15369 FETCH sel_struc_type_id INTO l_struc_type_id;
15370 CLOSE sel_struc_type_id;
15371
15372 l_proj_structure_type_id := NULL;
15373 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
15374 X_ROWID => l_rowid
15375 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
15376 ,X_PROJ_ELEMENT_ID => l_structure_id
15377 ,X_STRUCTURE_TYPE_ID => l_struc_type_id
15378 ,X_RECORD_VERSION_NUMBER => 1
15379 ,X_ATTRIBUTE_CATEGORY => NULL
15380 ,X_ATTRIBUTE1 => NULL
15381 ,X_ATTRIBUTE2 => NULL
15382 ,X_ATTRIBUTE3 => NULL
15383 ,X_ATTRIBUTE4 => NULL
15384 ,X_ATTRIBUTE5 => NULL
15385 ,X_ATTRIBUTE6 => NULL
15386 ,X_ATTRIBUTE7 => NULL
15387 ,X_ATTRIBUTE8 => NULL
15388 ,X_ATTRIBUTE9 => NULL
15389 ,X_ATTRIBUTE10 => NULL
15390 ,X_ATTRIBUTE11 => NULL
15391 ,X_ATTRIBUTE12 => NULL
15392 ,X_ATTRIBUTE13 => NULL
15393 ,X_ATTRIBUTE14 => NULL
15394 ,X_ATTRIBUTE15 => NULL);
15395
15396 --add progress row
15397 l_proj_prog_attr_id := NULL;
15398 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
15399 p_validate_only => FND_API.G_FALSE
15400 ,p_project_id => p_project_id
15401 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
15402 ,P_OBJECT_ID => l_structure_id
15403 ,p_action_set_id => NULL
15404 ,p_structure_type => 'WORKPLAN' -- Amit
15405 ,x_proj_progress_attr_id => l_proj_prog_attr_id
15406 ,x_return_status => l_return_status
15407 ,x_msg_count => x_msg_count
15408 ,x_msg_data => x_msg_data);
15409
15410 --Check if there is any error.
15411 l_msg_count := FND_MSG_PUB.count_msg;
15412 IF l_msg_count > 0 THEN
15413 x_msg_count := l_msg_count;
15414 IF x_msg_count = 1 THEN
15415 x_msg_data := l_msg_data;
15416 END IF;
15417 RAISE FND_API.G_EXC_ERROR;
15418 END IF;
15419
15420 OPEN sel_struc_ver(l_structure_id);
15421 FETCH sel_struc_ver into l_structure_version_id;
15422 CLOSE sel_struc_ver;
15423
15424 --add financial planning
15425 /*Smukka Bug No. 3474141 Date 03/01/2004 */
15426 /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block */
15427 BEGIN
15428 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
15429 p_context => 'WORKPLAN'
15430 ,p_project_id => p_project_id
15431 ,p_struct_elem_version_id => l_structure_version_id
15432 ,x_return_status => l_return_status
15433 ,x_msg_count => x_msg_count
15434 ,x_Msg_data => x_msg_data);
15435 EXCEPTION
15436 WHEN OTHERS THEN
15437 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
15438 p_procedure_name => 'update_structures_setup_attr',
15439 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
15440 RAISE FND_API.G_EXC_ERROR;
15441 END;
15442 --Check if there is any error.
15443 l_msg_count := FND_MSG_PUB.count_msg;
15444 IF l_msg_count > 0 THEN
15445 x_msg_count := l_msg_count;
15446 IF x_msg_count = 1 THEN
15447 x_msg_data := l_msg_data;
15448 END IF;
15449 RAISE FND_API.G_EXC_ERROR;
15450 END IF;
15451
15452
15453 --create schedule row for each task
15454 INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
15455 pev_schedule_id,
15456 element_version_id,
15457 project_id,
15458 proj_element_id,
15459 creation_date,
15460 created_by,
15461 last_update_date,
15462 last_updated_by,
15463 scheduled_start_date,
15464 scheduled_finish_date,
15465 milestone_flag,
15466 critical_flag,
15467 calendar_id,
15468 record_version_number,
15469 last_update_login,
15470 source_object_id,
15471 source_object_type)
15472 SELECT
15473 pa_proj_elem_ver_schedule_s.nextval,
15474 PPEV.element_version_id,
15475 PPEV.project_id,
15476 PPEV.proj_element_id,
15477 SYSDATE,
15478 FND_GLOBAL.USER_ID,
15479 SYSDATE,
15480 FND_GLOBAL.USER_ID,
15481 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))),
15482 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))),
15483 'N',
15484 'N',
15485 NULL,
15486 0,
15487 FND_GLOBAL.LOGIN_ID,
15488 PPEV.project_id,
15489 'PA_PROJECTS'
15490 FROM PA_TASKS PT,
15491 PA_PROJ_ELEMENT_VERSIONS PPEV
15492 WHERE
15493 PPEV.parent_structure_version_id = l_structure_version_id
15494 AND PPEV.proj_element_id = PT.task_id (+);
15495
15496 OPEN sel_struc_and_task_vers(l_structure_version_id);
15497 LOOP
15498 FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
15499 EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
15500 /* Bug 2790703 Begin */
15501 --Add to array for rollup
15502 l_index := l_index + 1;
15503 l_task_ver_ids_tbl(l_index) := l_element_version_id;
15504 /* Bug 2790703 End */
15505 END LOOP;
15506 CLOSE sel_struc_and_task_vers;
15507
15508 IF (l_task_ver_ids_tbl.count > 0) THEN
15509 --rollup
15510 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
15511 p_commit => FND_API.G_FALSE,
15512 p_element_versions => l_task_ver_ids_tbl,
15513 x_return_status => l_return_status,
15514 x_msg_count => l_msg_count,
15515 x_msg_data => l_msg_data);
15516
15517 --Check if there is any error.
15518 l_msg_count := FND_MSG_PUB.count_msg;
15519 IF l_msg_count > 0 THEN
15520 x_msg_count := l_msg_count;
15521 IF x_msg_count = 1 THEN
15522 x_msg_data := l_msg_data;
15523 END IF;
15524 RAISE FND_API.G_EXC_ERROR;
15525 END IF;
15526 END IF;
15527
15528 IF (l_status_code = 'STRUCTURE_PUBLISHED') OR
15529 (l_template_flag = 'Y') THEN
15530 OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
15531 FETCH get_scheduled_dates into l_get_sch_dates_cur;
15532 CLOSE get_scheduled_dates;
15533
15534 /* the record version number contained in the variabe l_proj_rec_ver_num is
15535 no more latest bcoz there was an update done by some other api by now.
15536 selcting latest record version number to avoid concurrency issue. maansari*/
15537 OPEN get_template_flag;
15538 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
15539 CLOSE get_template_flag;
15540
15541 PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
15542 p_validate_only => FND_API.G_FALSE
15543 ,p_project_id => p_project_id
15544 ,p_date_type => 'SCHEDULED'
15545 ,p_start_date => l_get_sch_dates_cur.scheduled_start_date
15546 ,p_finish_date => l_get_sch_dates_cur.scheduled_finish_date
15547 ,p_record_version_number=> l_proj_rec_ver_num
15548 ,x_return_status => x_return_status
15549 ,x_msg_count => x_msg_count
15550 ,x_msg_data => x_msg_data );
15551
15552 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15553 RAISE FND_API.G_EXC_ERROR;
15554 END IF;
15555 END IF;
15556
15557 RECALC_FIN_TASK_WEIGHTS(
15558 p_structure_version_id => l_structure_version_id
15559 , p_project_id => p_project_id
15560 , x_msg_count => l_msg_count
15561 , x_msg_data => l_msg_data
15562 , x_return_status => l_return_status);
15563
15564 l_msg_count := FND_MSG_PUB.count_msg;
15565 IF l_msg_count > 0 THEN
15566 x_msg_count := l_msg_count;
15567 IF x_msg_count = 1 THEN
15568 x_msg_data := l_msg_data;
15569 END IF;
15570 RAISE FND_API.G_EXC_ERROR;
15571 END IF;
15572
15573 -- Begin fix for Bug # 4426392.
15574
15575 -- For a FINANCIAL structure only project that is part of a program, if WORKPLAN structure is enabled
15576 -- and the structures are SHARED.
15577
15578 if (nvl(l_program, 'N') = 'Y') then
15579
15580 for l_cur_links_rec in cur_links (p_project_id)
15581 loop
15582
15583 -- Delete the 'LW' or 'LF' links that currently exist from the task version.
15584
15585 pa_relationship_pub.delete_subproject_association
15586 (p_api_version => p_api_version
15587 ,p_init_msg_list => p_init_msg_list
15588 ,p_commit => p_commit
15589 ,p_validate_only => p_validate_only
15590 ,p_validation_level => p_validation_level
15591 ,p_calling_module => p_calling_module
15592 ,p_debug_mode => p_debug_mode
15593 ,p_max_msg_count => p_max_msg_count
15594 ,p_object_relationships_id => l_cur_links_rec.obj_rel_id
15595 ,p_record_version_number => l_cur_links_rec.rec_ver_number
15596 ,x_return_status => x_return_status
15597 ,x_msg_count => x_msg_count
15598 ,x_msg_data => x_msg_data);
15599
15600 -- Create both the 'LW' and 'LF' links anew from the task version.
15601
15602 pa_relationship_pub.create_subproject_association
15603 (p_api_version => p_api_version
15604 ,p_init_msg_list => p_init_msg_list
15605 ,p_commit => p_commit
15606 ,p_validate_only => p_validate_only
15607 ,p_validation_level => p_validation_level
15608 ,p_calling_module => p_calling_module
15609 ,p_debug_mode => p_debug_mode
15610 ,p_max_msg_count => p_max_msg_count
15611 ,p_src_proj_id => l_cur_links_rec.src_proj_id
15612 ,p_task_ver_id => l_cur_links_rec.task_ver_id
15613 ,p_dest_proj_id => l_cur_links_rec.dest_proj_id
15614 ,p_dest_proj_name => l_dest_proj_name
15615 ,p_comment => l_comment
15616 ,x_return_status => x_return_status
15617 ,x_msg_count => x_msg_count
15618 ,x_msg_data => x_msg_data);
15619
15620 -- Set the process update flag for the source structure version to 'Y'.
15621
15622 update pa_proj_elem_ver_structure ppevs
15623 set ppevs.process_update_wbs_flag = 'Y'
15624 where ppevs.element_version_id = l_cur_links_rec.src_str_ver_id
15625 and ppevs.project_id = l_cur_links_rec.src_proj_id;
15626
15627 end loop;
15628
15629 end if;
15630
15631 -- End fix for Bug # 4426392.
15632
15633 IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
15634 --extra code for partial share
15635 NULL;
15636 ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
15637 --extra code for full share
15638 NULL;
15639 END IF;
15640
15641 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING', 'SPLIT_MAPPING')) THEN
15642 --split mapping
15643 --Create default workplan structure
15644 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15645 (p_validate_only => FND_API.G_FALSE
15646 ,p_project_id => p_project_id
15647 ,p_structure_number => l_wp_name
15648 ,p_structure_name => l_wp_name
15649 ,p_calling_flag => 'WORKPLAN'
15650 ,x_structure_id => l_structure_id
15651 ,x_return_status => l_return_status
15652 ,x_msg_count => l_msg_count
15653 ,x_msg_data => l_msg_data );
15654
15655 --Check if there is any error.
15656 l_msg_count := FND_MSG_PUB.count_msg;
15657 IF l_msg_count > 0 THEN
15658 x_msg_count := l_msg_count;
15659 IF x_msg_count = 1 THEN
15660 x_msg_data := l_msg_data;
15661 END IF;
15662 RAISE FND_API.G_EXC_ERROR;
15663 END IF;
15664
15665 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15666 (p_validate_only => FND_API.G_FALSE
15667 ,p_structure_id => l_structure_id
15668 ,x_structure_version_id => l_structure_version_id
15669 ,x_return_status => l_return_status
15670 ,x_msg_count => l_msg_count
15671 ,x_msg_data => l_msg_data );
15672
15673 --Check if there is any error.
15674 l_msg_count := FND_MSG_PUB.count_msg;
15675 IF l_msg_count > 0 THEN
15676 x_msg_count := l_msg_count;
15677 IF x_msg_count = 1 THEN
15678 x_msg_data := l_msg_data;
15679 END IF;
15680 RAISE FND_API.G_EXC_ERROR;
15681 END IF;
15682
15683 PA_TASK_PUB1.Create_Schedule_Version(
15684 p_element_version_id => l_structure_version_id
15685 ,p_scheduled_start_date => l_proj_start_date
15686 ,p_scheduled_end_date => l_proj_completion_date
15687 ,x_pev_schedule_id => l_pev_schedule_id
15688 ,x_return_status => l_return_status
15689 ,x_msg_count => l_msg_count
15690 ,x_msg_data => l_msg_data);
15691
15692 --Check if there is any error.
15693 l_msg_count := FND_MSG_PUB.count_msg;
15694 IF l_msg_count > 0 THEN
15695 x_msg_count := l_msg_count;
15696 IF x_msg_count = 1 THEN
15697 x_msg_data := l_msg_data;
15698 END IF;
15699 RAISE FND_API.G_EXC_ERROR;
15700 END IF;
15701
15702 IF (l_template_flag = 'Y') THEN
15703 l_status_code := 'STRUCTURE_WORKING';
15704 l_baseline_flag := 'N';
15705 l_latest_eff_pub_flag := 'N';
15706 l_effective_date := NULL;
15707 ELSE
15708 l_status_code := 'STRUCTURE_PUBLISHED';
15709 l_baseline_flag := 'Y';
15710 l_latest_eff_pub_flag := 'Y';
15711 l_effective_date := sysdate;
15712 END IF;
15713
15714 --create structure version
15715 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15716 (p_validate_only => FND_API.G_FALSE
15717 ,p_structure_version_id => l_structure_version_id
15718 ,p_structure_version_name => l_name
15719 ,p_structure_version_desc => NULL
15720 ,p_effective_date => l_effective_date
15721 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
15722 ,p_locked_status_code => 'UNLOCKED'
15723 ,p_struct_version_status_code => l_status_code
15724 ,p_baseline_current_flag => l_baseline_flag
15725 ,p_baseline_original_flag => 'N'
15726 ,x_pev_structure_id => l_pev_structure_id
15727 ,x_return_status => l_return_status
15728 ,x_msg_count => l_msg_count
15729 ,x_msg_data => l_msg_data );
15730
15731 --Check if there is any error.
15732 l_msg_count := FND_MSG_PUB.count_msg;
15733 IF l_msg_count > 0 THEN
15734 x_msg_count := l_msg_count;
15735 IF x_msg_count = 1 THEN
15736 x_msg_data := l_msg_data;
15737 END IF;
15738 RAISE FND_API.G_EXC_ERROR;
15739 END IF;
15740
15741 IF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
15742 NULL;
15743 ELSIF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
15744 NULL;
15745 END IF;
15746 END IF;
15747
15748 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'N') THEN
15749 --financial currently disabled
15750 IF (p_workplan_enabled_flag = 'N') THEN
15751 --disabled both
15752 --delete all dependencies
15753 --disable workplan
15754
15755 --get structure_id
15756 OPEN sel_wp_structure_id;
15757 FETCH sel_wp_structure_id INTO l_structure_id;
15758 CLOSE sel_wp_structure_id;
15759
15760 --delete workplan structure
15761 OPEN sel_all_wp_structure_ver(l_structure_id);
15762 LOOP
15763 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
15764 l_struc_ver_rvn;
15765 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
15766 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
15767 p_project_id,
15768 l_del_struc_ver_id,
15769 l_return_status,
15770 l_err_msg_code);
15771 IF (l_return_status <> 'S') THEN
15772 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15773 x_msg_data := l_err_msg_code;
15774 RAISE FND_API.G_EXC_ERROR;
15775 END IF;
15776
15777 --get top tasks
15778 OPEN get_top_tasks(l_del_struc_ver_id);
15779 LOOP
15780 FETCH get_top_tasks into l_task_ver_id;
15781 EXIT WHEN get_top_tasks%NOTFOUND;
15782
15783 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
15784 p_project_id => p_project_id
15785 ,p_task_version_id => l_task_ver_id
15786 ,p_parent_structure_ver_id => l_del_struc_ver_id
15787 ,x_return_status => l_return_status
15788 ,x_error_message_code => l_err_msg_code );
15789
15790 IF (l_return_status <> 'S') THEN
15791 x_return_status := l_return_status;
15792 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15793 l_msg_data := l_err_msg_code;
15794 CLOSE get_top_tasks;
15795 RAISE FND_API.G_EXC_ERROR;
15796 END IF;
15797 END LOOP;
15798 CLOSE get_top_tasks;
15799
15800 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
15801 p_structure_version_id => l_del_struc_ver_id
15802 ,p_record_version_number => l_struc_ver_rvn
15803 ,x_return_status => l_return_status
15804 ,x_msg_count => l_msg_count
15805 ,x_msg_data => l_msg_data);
15806
15807 --Check if there is any error.
15808 l_msg_count := FND_MSG_PUB.count_msg;
15809 IF l_msg_count > 0 THEN
15810 x_msg_count := l_msg_count;
15811 IF x_msg_count = 1 THEN
15812 x_msg_data := l_msg_data;
15813 END IF;
15814 CLOSE sel_all_wp_structure_ver;
15815 RAISE FND_API.G_EXC_ERROR;
15816 END IF;
15817 END LOOP;
15818 CLOSE sel_all_wp_structure_ver;
15819
15820 IF (p_financial_enabled_flag = 'N') THEN
15821 NULL;
15822 ELSIF (p_financial_enabled_flag = 'Y') THEN
15823 --call enable financial structure API
15824 --enable financial structure API
15825 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15826 (p_validate_only => FND_API.G_FALSE
15827 ,p_project_id => p_project_id
15828 ,p_structure_number => l_name
15829 ,p_structure_name => l_name
15830 ,p_calling_flag => 'FINANCIAL'
15831 ,x_structure_id => l_structure_id
15832 ,x_return_status => l_return_status
15833 ,x_msg_count => l_msg_count
15834 ,x_msg_data => l_msg_data);
15835
15836 --Check if there is any error.
15837 l_msg_count := FND_MSG_PUB.count_msg;
15838 IF l_msg_count > 0 THEN
15839 x_msg_count := l_msg_count;
15840 IF x_msg_count = 1 THEN
15841 x_msg_data := l_msg_data;
15842 END IF;
15843 RAISE FND_API.G_EXC_ERROR;
15844 END IF;
15845
15846 --create row in pa_proj_workplan_attr
15847 PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
15848 (p_validate_only => FND_API.G_FALSE
15849 ,p_project_id => p_project_id
15850 ,p_proj_element_id => l_structure_id
15851 ,x_return_status => l_return_status
15852 ,x_msg_count => l_msg_count
15853 ,x_msg_data => l_msg_data);
15854
15855 --Check if there is any error.
15856 l_msg_count := FND_MSG_PUB.count_msg;
15857 IF l_msg_count > 0 THEN
15858 x_msg_count := l_msg_count;
15859 IF x_msg_count = 1 THEN
15860 x_msg_data := l_msg_data;
15861 END IF;
15862 RAISE FND_API.G_EXC_ERROR;
15863 END IF;
15864
15865 --create structure version
15866 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15867 (p_validate_only => FND_API.G_FALSE
15868 ,p_structure_id => l_structure_id
15869 ,x_structure_version_id => l_structure_version_id
15870 ,x_return_status => l_return_status
15871 ,x_msg_count => l_msg_count
15872 ,x_msg_data => l_msg_data );
15873
15874 --Check if there is any error.
15875 l_msg_count := FND_MSG_PUB.count_msg;
15876 IF l_msg_count > 0 THEN
15877 x_msg_count := l_msg_count;
15878 IF x_msg_count = 1 THEN
15879 x_msg_data := l_msg_data;
15880 END IF;
15881 RAISE FND_API.G_EXC_ERROR;
15882 END IF;
15883
15884 IF (l_template_flag = 'Y') THEN
15885 l_status_code := 'STRUCTURE_WORKING';
15886 l_baseline_flag := 'N';
15887 l_latest_eff_pub_flag := 'N';
15888 l_effective_date := NULL;
15889 ELSE
15890 l_status_code := 'STRUCTURE_PUBLISHED';
15891 l_baseline_flag := 'N';
15892 l_latest_eff_pub_flag := 'Y';
15893 l_effective_date := sysdate;
15894 END IF;
15895
15896 --create structure version
15897 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15898 (p_validate_only => FND_API.G_FALSE
15899 ,p_structure_version_id => l_structure_version_id
15900 ,p_structure_version_name => l_name
15901 ,p_structure_version_desc => NULL
15902 ,p_effective_date => l_effective_date
15903 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
15904 ,p_locked_status_code => 'UNLOCKED'
15905 ,p_struct_version_status_code => l_status_code
15906 ,p_baseline_current_flag => l_baseline_flag
15907 ,p_baseline_original_flag => 'N'
15908 ,x_pev_structure_id => l_pev_structure_id
15909 ,x_return_status => l_return_status
15910 ,x_msg_count => l_msg_count
15911 ,x_msg_data => l_msg_data );
15912
15913 --Check if there is any error.
15914 l_msg_count := FND_MSG_PUB.count_msg;
15915 IF l_msg_count > 0 THEN
15916 x_msg_count := l_msg_count;
15917 IF x_msg_count = 1 THEN
15918 x_msg_data := l_msg_data;
15919 END IF;
15920 RAISE FND_API.G_EXC_ERROR;
15921 END IF;
15922
15923 END IF;
15924
15925 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
15926 --disable financial (enable workplan), do nothing
15927 NULL;
15928 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL','SHARE_FULL')) THEN
15929 --partial share
15930 --add financial structure type
15931 OPEN sel_wp_structure_id;
15932 FETCH sel_wp_structure_id INTO l_structure_id;
15933 CLOSE sel_wp_structure_id;
15934
15935 --create financial type
15936 OPEN sel_fin_struc_type_id;
15937 FETCH sel_fin_struc_type_id INTO l_fin_struc_type_id;
15938 CLOSE sel_fin_struc_type_id;
15939
15940 l_proj_structure_type_id := NULL;
15941 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
15942 X_ROWID => l_rowid
15943 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
15944 ,X_PROJ_ELEMENT_ID => l_structure_id
15945 ,X_STRUCTURE_TYPE_ID => l_fin_struc_type_id
15946 ,X_RECORD_VERSION_NUMBER => 1
15947 ,X_ATTRIBUTE_CATEGORY => NULL
15948 ,X_ATTRIBUTE1 => NULL
15949 ,X_ATTRIBUTE2 => NULL
15950 ,X_ATTRIBUTE3 => NULL
15951 ,X_ATTRIBUTE4 => NULL
15952 ,X_ATTRIBUTE5 => NULL
15953 ,X_ATTRIBUTE6 => NULL
15954 ,X_ATTRIBUTE7 => NULL
15955 ,X_ATTRIBUTE8 => NULL
15956 ,X_ATTRIBUTE9 => NULL
15957 ,X_ATTRIBUTE10 => NULL
15958 ,X_ATTRIBUTE11 => NULL
15959 ,X_ATTRIBUTE12 => NULL
15960 ,X_ATTRIBUTE13 => NULL
15961 ,X_ATTRIBUTE14 => NULL
15962 ,X_ATTRIBUTE15 => NULL
15963 );
15964
15965 --get structure version id
15966 OPEN sel_struc_ver(l_structure_id);
15967 FETCH sel_struc_ver into l_structure_version_id;
15968 CLOSE sel_struc_ver;
15969
15970 -- Bug 3938654 : Additional Fix that will go as a part of this bug
15971 -- This fix is not related to main issue reported in the bug
15972
15973 -- The present case is when WP is already enabled (l_wp_enabled = Y) and Fin. is disabled(l_fin_enabled = N)
15974 -- But Now,We have enabled Fin. (i.e) p_financial_enabled_flag = Y and made in a shared structure(may be full / partial)
15975
15976 -- In this Case ,The Already Existing Structure Name will be of the format l_name : Workplan
15977 -- (Because earlier itself WP was enabled and the structure name hence would be of above format)
15978
15979 -- While we are going to 'SHARE' it now ,We have to reset the Structure Name Format to : l_name
15980 -- This is needed because : Later If we try to Split the structure ,It will again try to create an empty
15981 -- WP Structure with the structure name in the format l_name : Workplan
15982
15983 -- Hence ,the structure split will not be allowed as "name not unique error will be thrown"
15984 -- To avoid this Problem , We are resetting the structure name before Sharing
15985
15986 UPDATE pa_proj_elements
15987 SET name = l_name
15988 ,element_number = l_name
15989 WHERE proj_element_id = l_structure_id ;
15990
15991 -- End of Fix : 3938654
15992
15993 --bug 4114101
15994 --insert progress attr row for financial struc
15995 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
15996 p_validate_only => FND_API.G_FALSE
15997 ,p_project_id => p_project_id
15998 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
15999 ,P_OBJECT_ID => l_structure_id
16000 ,P_PROGRESS_CYCLE_ID => to_number(null)
16001 ,P_WQ_ENABLE_FLAG => 'N'
16002 ,P_REMAIN_EFFORT_ENABLE_FLAG => 'N'
16003 ,P_PERCENT_COMP_ENABLE_FLAG => 'Y'
16004 ,P_NEXT_PROGRESS_UPDATE_DATE => to_date(null)
16005 ,p_TASK_WEIGHT_BASIS_CODE => 'COST'
16006 ,X_PROJ_PROGRESS_ATTR_ID => l_proj_progress_attr_id
16007 ,P_ALLOW_COLLAB_PROG_ENTRY => 'N'
16008 ,P_ALLW_PHY_PRCNT_CMP_OVERRIDES => 'Y'
16009 ,p_structure_type => 'FINANCIAL' --Amit
16010 ,x_return_status => l_return_status
16011 ,x_msg_count => l_msg_count
16012 ,x_msg_data => l_msg_data
16013 );
16014
16015 l_msg_count := FND_MSG_PUB.count_msg;
16016 IF l_msg_count > 0 THEN
16017 x_msg_count := l_msg_count;
16018 IF x_msg_count = 1 THEN
16019 x_msg_data := l_msg_data;
16020 END IF;
16021 RAISE FND_API.G_EXC_ERROR;
16022 END IF;
16023 --end bug 4114101
16024
16025 IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
16026 NULL;
16027 ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
16028 --set financial task flag to Y for all tasks
16029 update pa_proj_element_versions
16030 set financial_task_flag = 'Y'
16031 where parent_structure_version_id = l_structure_version_id
16032 and object_type = 'PA_TASKS'
16033 and proj_element_id NOT IN
16034 (select proj_element_id
16035 from pa_proj_elements
16036 where project_id = p_project_id
16037 and object_type = 'PA_TASKS'
16038 and link_task_flag = 'Y');
16039 END IF;
16040
16041 --need to call sync up API
16042 PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN
16043 (p_patask_record_version_number => NULL
16044 ,p_parent_task_version_id => NULL
16045 ,p_project_id => p_project_id
16046 ,p_syncup_all_tasks => 'Y'
16047 ,p_task_version_id => NULL
16048 ,p_structure_version_id => l_structure_version_id
16049 ,p_check_for_transactions => 'N'
16050 ,p_checked_flag => FND_API.G_MISS_CHAR
16051 ,p_mode => 'ALL'
16052 ,x_return_status => l_return_status
16053 ,x_msg_count => l_msg_count
16054 ,x_msg_data => l_msg_data);
16055
16056 --Check if there is any error.
16057 l_msg_count := FND_MSG_PUB.count_msg;
16058 IF l_msg_count > 0 THEN
16059 x_msg_count := l_msg_count;
16060 IF x_msg_count = 1 THEN
16061 x_msg_data := l_msg_data;
16062 END IF;
16063 RAISE FND_API.G_EXC_ERROR;
16064 END IF;
16065
16066 -- Begin fix for Bug # 4426392.
16067
16068 -- For a WORKPLAN structure only project that is part of a program, if a FINANCIAL structure is enabled
16069 -- and the structures are SHARED.
16070
16071 if (nvl(l_program, 'N') = 'Y') then
16072
16073 for l_cur_links_rec in cur_links (p_project_id)
16074 loop
16075
16076 -- Delete the 'LW' or 'LF' links that currently exist from the task version.
16077
16078 pa_relationship_pub.delete_subproject_association
16079 (p_api_version => p_api_version
16080 ,p_init_msg_list => p_init_msg_list
16081 ,p_commit => p_commit
16082 ,p_validate_only => p_validate_only
16083 ,p_validation_level => p_validation_level
16084 ,p_calling_module => p_calling_module
16085 ,p_debug_mode => p_debug_mode
16086 ,p_max_msg_count => p_max_msg_count
16087 ,p_object_relationships_id => l_cur_links_rec.obj_rel_id
16088 ,p_record_version_number => l_cur_links_rec.rec_ver_number
16089 ,x_return_status => x_return_status
16090 ,x_msg_count => x_msg_count
16091 ,x_msg_data => x_msg_data);
16092
16093 -- Create both the 'LW' and 'LF' links anew from the task version.
16094
16095 pa_relationship_pub.create_subproject_association
16096 (p_api_version => p_api_version
16097 ,p_init_msg_list => p_init_msg_list
16098 ,p_commit => p_commit
16099 ,p_validate_only => p_validate_only
16100 ,p_validation_level => p_validation_level
16101 ,p_calling_module => p_calling_module
16102 ,p_debug_mode => p_debug_mode
16103 ,p_max_msg_count => p_max_msg_count
16104 ,p_src_proj_id => l_cur_links_rec.src_proj_id
16105 ,p_task_ver_id => l_cur_links_rec.task_ver_id
16106 ,p_dest_proj_id => l_cur_links_rec.dest_proj_id
16107 ,p_dest_proj_name => l_dest_proj_name
16108 ,p_comment => l_comment
16109 ,x_return_status => x_return_status
16110 ,x_msg_count => x_msg_count
16111 ,x_msg_data => x_msg_data);
16112
16113 -- Set the process update flag for the source structure version to 'Y'.
16114
16115 update pa_proj_elem_ver_structure ppevs
16116 set ppevs.process_update_wbs_flag = 'Y'
16117 where ppevs.element_version_id = l_cur_links_rec.src_str_ver_id
16118 and ppevs.project_id = l_cur_links_rec.src_proj_id;
16119
16120 end loop;
16121
16122 end if;
16123
16124 -- End fix for Bug # 4426392.
16125
16126 -- Amit : Add progress attr fro Financial here
16127 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
16128 --split mapping/ no mapping
16129 --call enable financial structure API
16130 --create financial structure API
16131 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
16132 (p_validate_only => FND_API.G_FALSE
16133 ,p_project_id => p_project_id
16134 ,p_structure_number => l_name
16135 ,p_structure_name => l_name
16136 ,p_calling_flag => 'FINANCIAL'
16137 ,x_structure_id => l_structure_id
16138 ,x_return_status => l_return_status
16139 ,x_msg_count => l_msg_count
16140 ,x_msg_data => l_msg_data);
16141
16142 --Check if there is any error.
16143 l_msg_count := FND_MSG_PUB.count_msg;
16144 IF l_msg_count > 0 THEN
16145 x_msg_count := l_msg_count;
16146 IF x_msg_count = 1 THEN
16147 x_msg_data := l_msg_data;
16148 END IF;
16149 RAISE FND_API.G_EXC_ERROR;
16150 END IF;
16151
16152 --create row in pa_proj_workplan_attr
16153 PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
16154 (p_validate_only => FND_API.G_FALSE
16155 ,p_project_id => p_project_id
16156 ,p_proj_element_id => l_structure_id
16157 ,x_return_status => l_return_status
16158 ,x_msg_count => l_msg_count
16159 ,x_msg_data => l_msg_data);
16160
16161 --Check if there is any error.
16162 l_msg_count := FND_MSG_PUB.count_msg;
16163 IF l_msg_count > 0 THEN
16164 x_msg_count := l_msg_count;
16165 IF x_msg_count = 1 THEN
16166 x_msg_data := l_msg_data;
16167 END IF;
16168 RAISE FND_API.G_EXC_ERROR;
16169 END IF;
16170
16171 --create structure version
16172 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
16173 (p_validate_only => FND_API.G_FALSE
16174 ,p_structure_id => l_structure_id
16175 ,x_structure_version_id => l_structure_version_id
16176 ,x_return_status => l_return_status
16177 ,x_msg_count => l_msg_count
16178 ,x_msg_data => l_msg_data );
16179
16180 --Check if there is any error.
16181 l_msg_count := FND_MSG_PUB.count_msg;
16182 IF l_msg_count > 0 THEN
16183 x_msg_count := l_msg_count;
16184 IF x_msg_count = 1 THEN
16185 x_msg_data := l_msg_data;
16186 END IF;
16187 RAISE FND_API.G_EXC_ERROR;
16188 END IF;
16189
16190 IF (l_template_flag = 'Y') THEN
16191 l_status_code := 'STRUCTURE_WORKING';
16192 l_baseline_flag := 'N';
16193 l_latest_eff_pub_flag := 'N';
16194 l_effective_date := NULL;
16195 ELSE
16196 l_status_code := 'STRUCTURE_PUBLISHED';
16197 l_baseline_flag := 'N';
16198 l_latest_eff_pub_flag := 'Y';
16199 l_effective_date := sysdate;
16200 END IF;
16201
16202 --create structure version
16203 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
16204 (p_validate_only => FND_API.G_FALSE
16205 ,p_structure_version_id => l_structure_version_id
16206 ,p_structure_version_name => l_name
16207 ,p_structure_version_desc => NULL
16208 ,p_effective_date => l_effective_date
16209 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
16210 ,p_locked_status_code => 'UNLOCKED'
16211 ,p_struct_version_status_code => l_status_code
16212 ,p_baseline_current_flag => l_baseline_flag
16213 ,p_baseline_original_flag => 'N'
16214 ,x_pev_structure_id => l_pev_structure_id
16215 ,x_return_status => l_return_status
16216 ,x_msg_count => l_msg_count
16217 ,x_msg_data => l_msg_data );
16218
16219 --Check if there is any error.
16220 l_msg_count := FND_MSG_PUB.count_msg;
16221 IF l_msg_count > 0 THEN
16222 x_msg_count := l_msg_count;
16223 IF x_msg_count = 1 THEN
16224 x_msg_data := l_msg_data;
16225 END IF;
16226 RAISE FND_API.G_EXC_ERROR;
16227 END IF;
16228
16229 IF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
16230 NULL;
16231 ELSIF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
16232 NULL;
16233 END IF;
16234 END IF;
16235
16236 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_PARTIAL') THEN
16237 --currently partial share
16238 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
16239 --disabled both
16240 --delete all dependencies
16241 --delete Financial structure API
16242 --get structure id
16243 OPEN sel_wp_structure_id;
16244 FETCH sel_wp_structure_id INTO l_structure_id;
16245 CLOSE sel_wp_structure_id;
16246
16247 OPEN sel_all_wp_structure_ver(l_structure_id);
16248 LOOP
16249 FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16250 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16251
16252 PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
16253 p_structure_version_id => l_structure_version_id
16254 ,p_record_version_number => l_struc_ver_rvn
16255 ,x_return_status => l_return_status
16256 ,x_msg_count => l_msg_count
16257 ,x_msg_data => l_msg_data
16258 );
16259
16260 IF (l_return_status <> 'S') THEN
16261 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16262 x_msg_data := l_err_msg_code;
16263 RAISE FND_API.G_EXC_ERROR;
16264 END IF;
16265
16266 END LOOP;
16267 CLOSE sel_all_wp_structure_ver;
16268
16269 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
16270 --split mapping/split no mapping/disable workplan
16271 --delete all tasks not marked as financial
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 --get structure version id
16278 OPEN sel_latest_pub_ver(l_structure_id);
16279 FETCH sel_latest_pub_ver into l_structure_version_id;
16280 IF sel_latest_pub_ver%NOTFOUND THEN
16281 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16282 ELSE
16283 l_keep_structure_ver_id := l_structure_version_id;
16284 END IF;
16285 CLOSE sel_latest_pub_ver;
16286
16287 /* Bug 3597178 Commented the call to PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS
16288 As we can change from a shared to split,mapped etc even though deliverable transactions exist
16289 --NYU
16290 --Check if deliverable transactions exist. If so, we cannot change the structure sharing to SPLIT
16291 l_del_trans_exist := PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS(
16292 p_project_id => p_project_id,
16293 x_return_status => l_return_status,
16294 x_msg_count => x_msg_count,
16295 x_msg_data => x_msg_data);
16296 IF l_del_trans_exist = 'Y' THEN
16297 RAISE FND_API.G_EXC_ERROR;
16298 END IF;
16299 */
16300 --delete wp budget for the version we keep
16301 l_struct_version_id_tbl.extend(1); /* Venky */
16302 l_struct_version_id_tbl(1) := l_keep_structure_ver_id;
16303 /*Smukka Bug No. 3474141 Date 03/01/2004 */
16304 /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block */
16305 BEGIN
16306 /*Commented call to this API and replaced with pa_fin_plan_pvt.Delete_wp_option
16307 for Bug 3954050
16308 PA_FIN_PLAN_PVT.delete_wp_budget_versions(
16309 p_struct_elem_version_id_tbl => l_struct_version_id_tbl
16310 ,x_return_status => l_return_status
16311 ,x_msg_count => x_msg_count
16312 ,x_Msg_data => x_msg_data);
16313 */
16314 PA_FIN_PLAN_PVT.delete_wp_option
16315 (
16316 p_project_id => p_project_id,
16317 x_return_status => l_return_status,
16318 x_msg_count => x_msg_count,
16319 x_msg_data => x_msg_data
16320 );
16321 EXCEPTION
16322 WHEN OTHERS THEN
16323 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
16324 p_procedure_name => 'update_structures_setup_attr',
16325 p_error_text => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_options :'||SQLERRM,1,240));
16326 RAISE FND_API.G_EXC_ERROR;
16327 END;
16328 l_msg_count := FND_MSG_PUB.count_msg;
16329 IF l_msg_count > 0 THEN
16330 x_msg_count := l_msg_count;
16331 IF x_msg_count = 1 THEN
16332 x_msg_data := l_msg_data;
16333 END IF;
16334 RAISE FND_API.G_EXC_ERROR;
16335 END IF;
16336
16337 --Delete all other structure versions
16338 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
16339 LOOP
16340 FETCH sel_other_structure_ver into l_del_struc_ver_id,
16341 l_struc_ver_rvn;
16342 EXIT WHEN sel_other_structure_ver%NOTFOUND;
16343 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16344 p_project_id,
16345 l_del_struc_ver_id,
16346 l_return_status,
16347 l_err_msg_code);
16348 IF (l_return_status <> 'S') THEN
16349 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16350 x_msg_data := l_err_msg_code;
16351 RAISE FND_API.G_EXC_ERROR;
16352 END IF;
16353
16354 --get top tasks
16355 OPEN get_top_tasks(l_del_struc_ver_id);
16356 LOOP
16357 FETCH get_top_tasks into l_task_ver_id;
16358 EXIT WHEN get_top_tasks%NOTFOUND;
16359
16360 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16361 p_project_id => p_project_id
16362 ,p_task_version_id => l_task_ver_id
16363 ,p_parent_structure_ver_id => l_del_struc_ver_id
16364 ,x_return_status => l_return_status
16365 ,x_error_message_code => l_err_msg_code );
16366
16367 IF (l_return_status <> 'S') THEN
16368 x_return_status := l_return_status;
16369 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16370 l_msg_data := l_err_msg_code;
16371 CLOSE get_top_tasks;
16372 RAISE FND_API.G_EXC_ERROR;
16373 END IF;
16374 END LOOP;
16375 CLOSE get_top_tasks;
16376
16377 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16378 p_structure_version_id => l_del_struc_ver_id
16379 ,p_record_version_number => l_struc_ver_rvn
16380 ,x_return_status => l_return_status
16381 ,x_msg_count => l_msg_count
16382 ,x_msg_data => l_msg_data);
16383 --Check if there is any error.
16384 l_msg_count := FND_MSG_PUB.count_msg;
16385 IF l_msg_count > 0 THEN
16386 x_msg_count := l_msg_count;
16387 IF x_msg_count = 1 THEN
16388 x_msg_data := l_msg_data;
16389 END IF;
16390 CLOSE sel_other_structure_ver;
16391 RAISE FND_API.G_EXC_ERROR;
16392 END IF;
16393 END LOOP;
16394 CLOSE sel_other_structure_ver;
16395
16396 --delete from pa_proj_progress_attr
16397 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
16398 p_validate_only => FND_API.G_FALSE
16399 ,p_project_id => p_project_id
16400 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
16401 ,p_object_id => l_structure_id
16402 ,p_structure_type => 'WORKPLAN'
16403 ,x_return_status => l_return_status
16404 ,x_msg_count => l_msg_count
16405 ,x_msg_data => l_msg_data
16406 );
16407
16408 --Check if there is any error.
16409 l_msg_count := FND_MSG_PUB.count_msg;
16410 IF l_msg_count > 0 THEN
16411 x_msg_count := l_msg_count;
16412 IF x_msg_count = 1 THEN
16413 x_msg_data := l_msg_data;
16414 END IF;
16415 RAISE FND_API.G_EXC_ERROR;
16416 END IF;
16417
16418 --delete all tasks not marked as financial in the structure keeping
16419 --delete schedule versions
16420 delete from pa_proj_elem_ver_schedule
16421 where project_id =p_project_id --Bug No 3634334
16422 and element_version_id IN (
16423 select element_version_id
16424 from pa_proj_element_versions
16425 where project_id = p_project_id --Bug No 3634334
16426 and parent_structure_version_id = l_keep_structure_ver_id
16427 and object_type IN ('PA_TASKS', 'PA_STRUCTURES'));
16428
16429 --delete relationships
16430 --Bug No 3634334 Commented for performance tuning and rewritten the query.
16431 /* delete from pa_object_relationships rel
16432 where rel.relationship_type IN ('D','S')
16433 and EXISTS (
16434 select 1 from pa_proj_element_versions
16435 where (rel.object_id_from1 = element_version_id OR
16436 rel.object_id_to1 = element_version_id ) and
16437 parent_structure_version_id = l_keep_structure_ver_id and
16438 financial_task_flag = 'N'); */
16439
16440 --Bug No 3634334 Created for performance tuning for the above query.
16441
16442 delete from pa_object_relationships rel
16443 where OBJECT_RELATIONSHIP_ID IN (
16444 select OBJECT_RELATIONSHIP_ID
16445 from pa_object_relationships rel,
16446 pa_proj_element_versions
16447 where rel.relationship_type IN ('D','S')
16448 and object_type_to = 'PA_TASKS'
16449 and rel.object_id_to1 = element_version_id
16450 and parent_structure_version_id = l_keep_structure_ver_id
16451 and financial_task_flag = 'N'
16452 UNION
16453 select OBJECT_RELATIONSHIP_ID
16454 from pa_object_relationships rel,
16455 pa_proj_element_versions
16456 where rel.relationship_type IN ('D','S')
16457 and object_type_from = 'PA_TASKS'
16458 and rel.object_id_from1 = element_version_id
16459 and parent_structure_version_id = l_keep_structure_ver_id
16460 and financial_task_flag = 'N');
16461
16462 /* Bug 3906015 Just moved the existing code after the delete statements
16463 to this position
16464 */
16465 -- NYU
16466 -- delete deliverable associations
16467 PA_DELIVERABLE_PUB.delete_dlv_associations
16468 (p_project_id=>p_project_id,
16469 x_return_status=>l_return_status,
16470 x_msg_count=>l_msg_count,
16471 x_msg_data=>l_msg_data);
16472
16473 --delete elements
16474 delete from pa_proj_elements ppe
16475 where proj_element_ID in (
16476 select proj_element_id
16477 from pa_proj_element_versions
16478 where parent_structure_version_id = l_keep_structure_ver_id
16479 and object_type = 'PA_TASKS'
16480 and financial_task_flag = 'N');
16481
16482 --delete element versions
16483 Delete from pa_proj_element_versions
16484 where parent_structure_version_id = l_keep_structure_ver_id
16485 and object_type = 'PA_TASKS'
16486 and financial_task_flag = 'N';
16487
16488 --delete from pa_proj_structure_types
16489 DELETe FROM pa_proj_structure_types
16490 where proj_element_id = l_structure_id
16491 and structure_type_id = (
16492 select structure_type_id from pa_structure_types
16493 where structure_type = 'WORKPLAN');
16494
16495 /* Bug 3906015
16496 Moved this code to above (i.e) before deleting the elements (Before deleting task)
16497 This is necessary because : delete_dlv_associations API has been modified
16498 in such a way that it retrives the tasks from pa_proj_element_versions table for the passed project_id
16499 and then for those values ,it performs deliverable related validations for Workplan Task Deletion
16500
16501 If this call,is after delete statement on pa_proj_element_versions tables,the logic written
16502 in delete_dlv_associations APi will fail .Hence moved the code up.
16503
16504 -- NYU
16505 -- delete deliverable associations
16506 PA_DELIVERABLE_PUB.delete_dlv_associations
16507 (p_project_id=>p_project_id,
16508 x_return_status=>l_return_status,
16509 x_msg_count=>l_msg_count,
16510 x_msg_data=>l_msg_data);
16511 */
16512
16513 --Check if there is any error.
16514 l_msg_count := FND_MSG_PUB.count_msg;
16515 IF l_msg_count > 0 THEN
16516 x_msg_count := l_msg_count;
16517 IF x_msg_count = 1 THEN
16518 x_msg_data := l_msg_data;
16519 END IF;
16520 RAISE FND_API.G_EXC_ERROR;
16521 END IF;
16522
16523 --bug 3894059
16524 --set versioning disable for financial structure, and structure version as published if it is a project
16525 update pa_proj_workplan_attr
16526 set WP_ENABLE_VERSION_FLAG = 'N'
16527 where proj_element_id = l_structure_id;
16528
16529 IF (l_template_flag <> 'Y') THEN
16530 --project
16531 update pa_proj_elem_ver_structure
16532 set status_code = 'STRUCTURE_PUBLISHED',
16533 latest_eff_published_flag = 'Y',
16534 published_date = sysdate
16535 where project_id = p_project_id
16536 and element_version_id = l_keep_structure_ver_id;
16537 END IF;
16538 --end bug 3894059
16539
16540 IF (p_workplan_enabled_flag = 'Y' AND p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
16541 --Create empty workplan structure
16542 l_structure_id := NULL;
16543 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
16544 (p_validate_only => FND_API.G_FALSE
16545 ,p_project_id => p_project_id
16546 ,p_structure_number => l_wp_name
16547 ,p_structure_name => l_wp_name
16548 ,p_calling_flag => 'WORKPLAN'
16549 ,x_structure_id => l_structure_id
16550 ,x_return_status => l_return_status
16551 ,x_msg_count => l_msg_count
16552 ,x_msg_data => l_msg_data );
16553
16554 --Check if there is any error.
16555 l_msg_count := FND_MSG_PUB.count_msg;
16556 IF l_msg_count > 0 THEN
16557 x_msg_count := l_msg_count;
16558 IF x_msg_count = 1 THEN
16559 x_msg_data := l_msg_data;
16560 END IF;
16561 RAISE FND_API.G_EXC_ERROR;
16562 END IF;
16563
16564 l_structure_version_id := NULL;
16565 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
16566 (p_validate_only => FND_API.G_FALSE
16567 ,p_structure_id => l_structure_id
16568 ,x_structure_version_id => l_structure_version_id
16569 ,x_return_status => l_return_status
16570 ,x_msg_count => l_msg_count
16571 ,x_msg_data => l_msg_data );
16572
16573 --Check if there is any error.
16574 l_msg_count := FND_MSG_PUB.count_msg;
16575 IF l_msg_count > 0 THEN
16576 x_msg_count := l_msg_count;
16577 IF x_msg_count = 1 THEN
16578 x_msg_data := l_msg_data;
16579 END IF;
16580 RAISE FND_API.G_EXC_ERROR;
16581 END IF;
16582
16583 PA_TASK_PUB1.Create_Schedule_Version(
16584 p_element_version_id => l_structure_version_id
16585 ,p_scheduled_start_date => l_proj_start_date
16586 ,p_scheduled_end_date => l_proj_completion_date
16587 ,x_pev_schedule_id => l_pev_schedule_id
16588 ,x_return_status => l_return_status
16589 ,x_msg_count => l_msg_count
16590 ,x_msg_data => l_msg_data);
16591
16592 --Check if there is any error.
16593 l_msg_count := FND_MSG_PUB.count_msg;
16594 IF l_msg_count > 0 THEN
16595 x_msg_count := l_msg_count;
16596 IF x_msg_count = 1 THEN
16597 x_msg_data := l_msg_data;
16598 END IF;
16599 RAISE FND_API.G_EXC_ERROR;
16600 END IF;
16601
16602 IF (l_template_flag = 'Y') THEN
16603 l_status_code := 'STRUCTURE_WORKING';
16604 l_baseline_flag := 'N';
16605 l_latest_eff_pub_flag := 'N';
16606 l_effective_date := NULL;
16607 ELSE
16608 l_status_code := 'STRUCTURE_PUBLISHED';
16609 l_baseline_flag := 'Y';
16610 l_latest_eff_pub_flag := 'Y';
16611 l_effective_date := sysdate;
16612 END IF;
16613
16614 --create structure version
16615 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
16616 (p_validate_only => FND_API.G_FALSE
16617 ,p_structure_version_id => l_structure_version_id
16618 ,p_structure_version_name => l_name
16619 ,p_structure_version_desc => NULL
16620 ,p_effective_date => l_effective_date
16621 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
16622 ,p_locked_status_code => 'UNLOCKED'
16623 ,p_struct_version_status_code => l_status_code
16624 ,p_baseline_current_flag => l_baseline_flag
16625 ,p_baseline_original_flag => 'N'
16626 ,x_pev_structure_id => l_pev_structure_id
16627 ,x_return_status => l_return_status
16628 ,x_msg_count => l_msg_count
16629 ,x_msg_data => l_msg_data );
16630
16631 --Check if there is any error.
16632 l_msg_count := FND_MSG_PUB.count_msg;
16633 IF l_msg_count > 0 THEN
16634 x_msg_count := l_msg_count;
16635 IF x_msg_count = 1 THEN
16636 x_msg_data := l_msg_data;
16637 END IF;
16638 RAISE FND_API.G_EXC_ERROR;
16639 END IF;
16640
16641 NULL;
16642 ELSIF (p_workplan_enabled_flag = 'N' ) THEN
16643 NULL;
16644 END IF;
16645
16646 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
16647 --disable financial (enable workplan)
16648 --get structure id
16649 OPEN sel_wp_structure_id;
16650 FETCH sel_wp_structure_id INTO l_structure_id;
16651 CLOSE sel_wp_structure_id;
16652
16653 update pa_proj_elements
16654 set name = l_wp_name,
16655 element_number = l_wp_name
16656 where proj_element_id = l_structure_id;
16657
16658 --Need delete financial tasks API
16659 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
16660 p_validate_only => FND_API.G_FALSE
16661 ,p_project_id => p_project_id
16662 ,x_return_status => l_return_status
16663 ,x_msg_count => l_msg_count
16664 ,x_msg_data => l_msg_data);
16665
16666 --Check if there is any error.
16667 l_msg_count := FND_MSG_PUB.count_msg;
16668 IF l_msg_count > 0 THEN
16669 x_msg_count := l_msg_count;
16670 IF x_msg_count = 1 THEN
16671 x_msg_data := l_msg_data;
16672 END IF;
16673 RAISE FND_API.G_EXC_ERROR;
16674 END IF;
16675
16676 --clear financial Flag API
16677 OPEN sel_all_wp_structure_ver(l_structure_id);
16678 LOOP
16679 FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16680 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16681
16682 PA_PROJECT_STRUCTURE_PUB1.CLEAR_FINANCIAL_FLAG(
16683 p_validate_only => FND_API.G_FALSE
16684 ,p_project_id => p_project_id
16685 ,p_task_version_id => NULL
16686 ,p_structure_version_id => l_structure_version_id
16687 ,x_return_status => l_return_status
16688 ,x_msg_count => l_msg_count
16689 ,x_msg_data => l_msg_data);
16690
16691 --Check if there is any error.
16692 l_msg_count := FND_MSG_PUB.count_msg;
16693 IF l_msg_count > 0 THEN
16694 x_msg_count := l_msg_count;
16695 IF x_msg_count = 1 THEN
16696 x_msg_data := l_msg_data;
16697 END IF;
16698 RAISE FND_API.G_EXC_ERROR;
16699 END IF;
16700
16701 END LOOP;
16702 CLOSE sel_all_wp_structure_ver;
16703
16704 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_PARTIAL') THEN
16705 --partial share; no action required
16706 NULL;
16707 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_FULL') THEN
16708 --full share
16709 --Need to call sync up API
16710 --get structure id
16711 OPEN sel_wp_structure_id;
16712 FETCH sel_wp_structure_id INTO l_structure_id;
16713 CLOSE sel_wp_structure_id;
16714
16715 --get structure version id
16716 OPEN sel_latest_pub_ver(l_structure_id);
16717 FETCH sel_latest_pub_ver into l_structure_version_id;
16718 IF sel_latest_pub_ver%NOTFOUND THEN
16719 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16720 ELSE
16721 l_keep_structure_ver_id := l_structure_version_id;
16722 END IF;
16723 CLOSE sel_latest_pub_ver;
16724
16725 update pa_proj_element_versions
16726 set financial_task_flag = 'Y'
16727 where parent_structure_version_id = l_structure_version_id
16728 and object_type = 'PA_TASKS'
16729 and proj_element_id NOT IN
16730 (select proj_element_id
16731 from pa_proj_elements
16732 where project_id = p_project_id
16733 and object_type = 'PA_TASKS'
16734 and link_task_flag = 'Y');
16735
16736 --need to call sync up API
16737 PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN
16738 (p_patask_record_version_number => NULL
16739 ,p_parent_task_version_id => NULL
16740 ,p_project_id => p_project_id
16741 ,p_syncup_all_tasks => 'Y'
16742 ,p_task_version_id => NULL
16743 ,p_structure_version_id => l_structure_version_id
16744 ,p_check_for_transactions => 'N'
16745 ,p_checked_flag => FND_API.G_MISS_CHAR
16746 ,p_mode => 'ALL'
16747 ,x_return_status => l_return_status
16748 ,x_msg_count => l_msg_count
16749 ,x_msg_data => l_msg_data);
16750
16751 --Check if there is any error.
16752 l_msg_count := FND_MSG_PUB.count_msg;
16753 IF l_msg_count > 0 THEN
16754 x_msg_count := l_msg_count;
16755 IF x_msg_count = 1 THEN
16756 x_msg_data := l_msg_data;
16757 END IF;
16758 RAISE FND_API.G_EXC_ERROR;
16759 END IF;
16760
16761 END IF;
16762
16763 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_FULL') THEN
16764 --currently full share
16765 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
16766 --disabled both
16767 --delete all dependencies
16768 --delete Financial structure API
16769 --get structure id
16770 OPEN sel_wp_structure_id;
16771 FETCH sel_wp_structure_id INTO l_structure_id;
16772 CLOSE sel_wp_structure_id;
16773
16774 OPEN sel_all_wp_structure_ver(l_structure_id);
16775 LOOP
16776 FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16777 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16778
16779 PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
16780 p_structure_version_id => l_structure_version_id
16781 ,p_record_version_number => l_struc_ver_rvn
16782 ,x_return_status => l_return_status
16783 ,x_msg_count => l_msg_count
16784 ,x_msg_data => l_msg_data
16785 );
16786
16787 IF (l_return_status <> 'S') THEN
16788 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16789 x_msg_data := l_err_msg_code;
16790 RAISE FND_API.G_EXC_ERROR;
16791 END IF;
16792
16793 END LOOP;
16794 CLOSE sel_all_wp_structure_ver;
16795
16796 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
16797 --split mapping/split no mapping/disable workplan
16798 --get structure id
16799 OPEN sel_wp_structure_id;
16800 FETCH sel_wp_structure_id INTO l_structure_id;
16801 CLOSE sel_wp_structure_id;
16802
16803 --get structure version id
16804 OPEN sel_latest_pub_ver(l_structure_id);
16805 FETCH sel_latest_pub_ver into l_structure_version_id;
16806 IF sel_latest_pub_ver%NOTFOUND THEN
16807 l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16808 ELSE
16809 l_keep_structure_ver_id := l_structure_version_id;
16810 END IF;
16811 CLOSE sel_latest_pub_ver;
16812
16813 -- Bug 3938654 : Additional Fix that will go as a part of this bug
16814 -- This fix is not related to main issue reported in the bug
16815
16816 -- Actually this call should not be present .This fix should have been
16817 -- done long back as a part of 3597178
16818 -- For the case l_wp_enabled_flag=Y,l_fin_enabled_flag=Y,l_share_code=SHARE_PARTIAL ,this fix
16819 -- has already been done .For this case (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_FULL')
16820 -- It had been missed.
16821
16822 /* Hence doing the commenting
16823 --NYU
16824 --Check if deliverable transactions exist. If so, we cannot change the structure sharing to SPLIT
16825 l_del_trans_exist := PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS(
16826 p_project_id => p_project_id,
16827 x_return_status => l_return_status,
16828 x_msg_count => x_msg_count,
16829 x_msg_data => x_msg_data);
16830 IF l_del_trans_exist = 'Y' THEN
16831 RAISE FND_API.G_EXC_ERROR;
16832 END IF;
16833 */
16834
16835 --delete wp budget for the version we keep
16836 l_struct_version_id_tbl.extend(1); /* Venky */
16837 l_struct_version_id_tbl(1) := l_keep_structure_ver_id;
16838 /*Smukka Bug No. 3474141 Date 03/01/2004 */
16839 /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block */
16840 BEGIN
16841 /*Commented call to this API and replaced with pa_fin_plan_pvt.Delete_wp_option
16842 for Bug 3954050
16843 PA_FIN_PLAN_PVT.delete_wp_budget_versions(
16844 p_struct_elem_version_id_tbl => l_struct_version_id_tbl
16845 ,x_return_status => l_return_status
16846 ,x_msg_count => x_msg_count
16847 ,x_Msg_data => x_msg_data);
16848 */
16849 PA_FIN_PLAN_PVT.delete_wp_option
16850 (
16851 p_project_id => p_project_id,
16852 x_return_status => l_return_status,
16853 x_msg_count => x_msg_count,
16854 x_msg_data => x_msg_data
16855 );
16856 EXCEPTION
16857 WHEN OTHERS THEN
16858 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
16859 p_procedure_name => 'update_structures_setup_attr',
16860 p_error_text => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_option:'||SQLERRM,1,240));
16861 RAISE FND_API.G_EXC_ERROR;
16862 END;
16863 l_msg_count := FND_MSG_PUB.count_msg;
16864 IF l_msg_count > 0 THEN
16865 x_msg_count := l_msg_count;
16866 IF x_msg_count = 1 THEN
16867 x_msg_data := l_msg_data;
16868 END IF;
16869 RAISE FND_API.G_EXC_ERROR;
16870 END IF;
16871
16872 --Delete all other structure versions
16873 OPEN sel_other_structure_ver(l_keep_structure_ver_id);
16874 LOOP
16875 FETCH sel_other_structure_ver into l_del_struc_ver_id,
16876 l_struc_ver_rvn;
16877 EXIT WHEN sel_other_structure_ver%NOTFOUND;
16878 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16879 p_project_id,
16880 l_del_struc_ver_id,
16881 l_return_status,
16882 l_err_msg_code);
16883 IF (l_return_status <> 'S') THEN
16884 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16885 x_msg_data := l_err_msg_code;
16886 RAISE FND_API.G_EXC_ERROR;
16887 END IF;
16888
16889 --get top tasks
16890 OPEN get_top_tasks(l_del_struc_ver_id);
16891 LOOP
16892 FETCH get_top_tasks into l_task_ver_id;
16893 EXIT WHEN get_top_tasks%NOTFOUND;
16894
16895 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16896 p_project_id => p_project_id
16897 ,p_task_version_id => l_task_ver_id
16898 ,p_parent_structure_ver_id => l_del_struc_ver_id
16899 ,x_return_status => l_return_status
16900 ,x_error_message_code => l_err_msg_code );
16901
16902 IF (l_return_status <> 'S') THEN
16903 x_return_status := l_return_status;
16904 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16905 l_msg_data := l_err_msg_code;
16906 CLOSE get_top_tasks;
16907 RAISE FND_API.G_EXC_ERROR;
16908 END IF;
16909 END LOOP;
16910 CLOSE get_top_tasks;
16911
16912 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16913 p_structure_version_id => l_del_struc_ver_id
16914 ,p_record_version_number => l_struc_ver_rvn
16915 ,x_return_status => l_return_status
16916 ,x_msg_count => l_msg_count
16917 ,x_msg_data => l_msg_data);
16918 --Check if there is any error.
16919 l_msg_count := FND_MSG_PUB.count_msg;
16920 IF l_msg_count > 0 THEN
16921 x_msg_count := l_msg_count;
16922 IF x_msg_count = 1 THEN
16923 x_msg_data := l_msg_data;
16924 END IF;
16925 CLOSE sel_other_structure_ver;
16926 RAISE FND_API.G_EXC_ERROR;
16927 END IF;
16928 END LOOP;
16929 CLOSE sel_other_structure_ver;
16930
16931 --delete from pa_proj_progress_attr
16932 PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
16933 p_validate_only => FND_API.G_FALSE
16934 ,p_project_id => p_project_id
16935 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
16936 ,p_object_id => l_structure_id
16937 ,p_structure_type => 'WORKPLAN' --Amit
16938 ,x_return_status => l_return_status
16939 ,x_msg_count => l_msg_count
16940 ,x_msg_data => l_msg_data
16941 );
16942
16943 --Check if there is any error.
16944 l_msg_count := FND_MSG_PUB.count_msg;
16945 IF l_msg_count > 0 THEN
16946 x_msg_count := l_msg_count;
16947 IF x_msg_count = 1 THEN
16948 x_msg_data := l_msg_data;
16949 END IF;
16950 RAISE FND_API.G_EXC_ERROR;
16951 END IF;
16952
16953 --delete all tasks not marked as financial in the structure keeping
16954 --delete schedule versions
16955 delete from pa_proj_elem_ver_schedule
16956 where project_id =p_project_id --Bug No 3634334
16957 and element_version_id IN (
16958 select element_version_id
16959 from pa_proj_element_versions
16960 where project_id =p_project_id --Bug No 3634334
16961 and parent_structure_version_id = l_keep_structure_ver_id
16962 and object_type IN ('PA_TASKS', 'PA_STRUCTURES'));
16963
16964 --delete from pa_proj_structure_types
16965 DELETe FROM pa_proj_structure_types
16966 where proj_element_id = l_structure_id
16967 and structure_type_id = (
16968 select structure_type_id from pa_structure_types
16969 where structure_type = 'WORKPLAN');
16970
16971 -- NYU
16972 -- delete deliverable associations
16973 PA_DELIVERABLE_PUB.delete_dlv_associations
16974 (p_project_id=>p_project_id,
16975 x_return_status=>l_return_status,
16976 x_msg_count=>l_msg_count,
16977 x_msg_data=>l_msg_data);
16978
16979 --Check if there is any error.
16980 l_msg_count := FND_MSG_PUB.count_msg;
16981 IF l_msg_count > 0 THEN
16982 x_msg_count := l_msg_count;
16983 IF x_msg_count = 1 THEN
16984 x_msg_data := l_msg_data;
16985 END IF;
16986 RAISE FND_API.G_EXC_ERROR;
16987 END IF;
16988
16989 --bug 3894059
16990 --set versioning disable for financial structure, and structure version as published if it is a project
16991 update pa_proj_workplan_attr
16992 set WP_ENABLE_VERSION_FLAG = 'N'
16993 where proj_element_id = l_structure_id;
16994
16995 IF (l_template_flag <> 'Y') THEN
16996 --project
16997 update pa_proj_elem_ver_structure
16998 set status_code = 'STRUCTURE_PUBLISHED',
16999 latest_eff_published_flag = 'Y',
17000 published_date = sysdate
17001 where project_id = p_project_id
17002 and element_version_id = l_keep_structure_ver_id;
17003 END IF;
17004 --end bug 3894059
17005
17006 IF (p_workplan_enabled_flag = 'Y' AND p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
17007 --Create empty workplan structure
17008 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
17009 (p_validate_only => FND_API.G_FALSE
17010 ,p_project_id => p_project_id
17011 ,p_structure_number => l_wp_name
17012 ,p_structure_name => l_wp_name
17013 ,p_calling_flag => 'WORKPLAN'
17014 ,x_structure_id => l_structure_id
17015 ,x_return_status => l_return_status
17016 ,x_msg_count => l_msg_count
17017 ,x_msg_data => l_msg_data );
17018
17019 --Check if there is any error.
17020 l_msg_count := FND_MSG_PUB.count_msg;
17021 IF l_msg_count > 0 THEN
17022 x_msg_count := l_msg_count;
17023 IF x_msg_count = 1 THEN
17024 x_msg_data := l_msg_data;
17025 END IF;
17026 RAISE FND_API.G_EXC_ERROR;
17027 END IF;
17028
17029 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
17030 (p_validate_only => FND_API.G_FALSE
17031 ,p_structure_id => l_structure_id
17032 ,x_structure_version_id => l_structure_version_id
17033 ,x_return_status => l_return_status
17034 ,x_msg_count => l_msg_count
17035 ,x_msg_data => l_msg_data );
17036
17037 --Check if there is any error.
17038 l_msg_count := FND_MSG_PUB.count_msg;
17039 IF l_msg_count > 0 THEN
17040 x_msg_count := l_msg_count;
17041 IF x_msg_count = 1 THEN
17042 x_msg_data := l_msg_data;
17043 END IF;
17044 RAISE FND_API.G_EXC_ERROR;
17045 END IF;
17046
17047 PA_TASK_PUB1.Create_Schedule_Version(
17048 p_element_version_id => l_structure_version_id
17049 ,p_scheduled_start_date => l_proj_start_date
17050 ,p_scheduled_end_date => l_proj_completion_date
17051 ,x_pev_schedule_id => l_pev_schedule_id
17052 ,x_return_status => l_return_status
17053 ,x_msg_count => l_msg_count
17054 ,x_msg_data => l_msg_data);
17055
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 IF (l_template_flag = 'Y') THEN
17067 l_status_code := 'STRUCTURE_WORKING';
17068 l_baseline_flag := 'N';
17069 l_latest_eff_pub_flag := 'N';
17070 l_effective_date := NULL;
17071 ELSE
17072 l_status_code := 'STRUCTURE_PUBLISHED';
17073 l_baseline_flag := 'Y';
17074 l_latest_eff_pub_flag := 'Y';
17075 l_effective_date := sysdate;
17076 END IF;
17077
17078 --create structure version
17079 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
17080 (p_validate_only => FND_API.G_FALSE
17081 ,p_structure_version_id => l_structure_version_id
17082 ,p_structure_version_name => l_name
17083 ,p_structure_version_desc => NULL
17084 ,p_effective_date => l_effective_date
17085 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
17086 ,p_locked_status_code => 'UNLOCKED'
17087 ,p_struct_version_status_code => l_status_code
17088 ,p_baseline_current_flag => l_baseline_flag
17089 ,p_baseline_original_flag => 'N'
17090 ,x_pev_structure_id => l_pev_structure_id
17091 ,x_return_status => l_return_status
17092 ,x_msg_count => l_msg_count
17093 ,x_msg_data => l_msg_data );
17094
17095 --Check if there is any error.
17096 l_msg_count := FND_MSG_PUB.count_msg;
17097 IF l_msg_count > 0 THEN
17098 x_msg_count := l_msg_count;
17099 IF x_msg_count = 1 THEN
17100 x_msg_data := l_msg_data;
17101 END IF;
17102 RAISE FND_API.G_EXC_ERROR;
17103 END IF;
17104
17105 NULL;
17106 ELSIF (p_workplan_enabled_flag = 'N' ) THEN
17107 NULL;
17108 END IF;
17109
17110 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
17111 --disable financial (enable workplan)
17112 --call disable financial structure API
17113 --get structure id
17114 OPEN sel_wp_structure_id;
17115 FETCH sel_wp_structure_id INTO l_structure_id;
17116 CLOSE sel_wp_structure_id;
17117
17118 update pa_proj_elements
17119 set name = l_wp_name,
17120 element_number = l_wp_name
17121 where proj_element_id = l_structure_id;
17122
17123 --Need delete financial tasks API
17124 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
17125 p_validate_only => FND_API.G_FALSE
17126 ,p_project_id => p_project_id
17127 ,x_return_status => l_return_status
17128 ,x_msg_count => l_msg_count
17129 ,x_msg_data => l_msg_data);
17130
17131 --Check if there is any error.
17132 l_msg_count := FND_MSG_PUB.count_msg;
17133 IF l_msg_count > 0 THEN
17134 x_msg_count := l_msg_count;
17135 IF x_msg_count = 1 THEN
17136 x_msg_data := l_msg_data;
17137 END IF;
17138 RAISE FND_API.G_EXC_ERROR;
17139 END IF;
17140
17141 --clear financial Flag API
17142 OPEN sel_all_wp_structure_ver(l_structure_id);
17143 LOOP
17144 FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
17145 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17146
17147 PA_PROJECT_STRUCTURE_PUB1.CLEAR_FINANCIAL_FLAG(
17148 p_validate_only => FND_API.G_FALSE
17149 ,p_project_id => p_project_id
17150 ,p_task_version_id => NULL
17151 ,p_structure_version_id => l_structure_version_id
17152 ,x_return_status => l_return_status
17153 ,x_msg_count => l_msg_count
17154 ,x_msg_data => l_msg_data);
17155
17156 --Check if there is any error.
17157 l_msg_count := FND_MSG_PUB.count_msg;
17158 IF l_msg_count > 0 THEN
17159 x_msg_count := l_msg_count;
17160 IF x_msg_count = 1 THEN
17161 x_msg_data := l_msg_data;
17162 END IF;
17163 RAISE FND_API.G_EXC_ERROR;
17164 END IF;
17165
17166 END LOOP;
17167 CLOSE sel_all_wp_structure_ver;
17168
17169 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_PARTIAL') THEN
17170 --partial share; no action required
17171 NULL;
17172 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_FULL') THEN
17173 --full share; no action required
17174 NULL;
17175 END IF;
17176
17177 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SPLIT_MAPPING') THEN
17178 --currently split with mapping
17179 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') OR
17180 (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') OR
17181 (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
17182 --disabled both/workplan/financial
17183 --remove mapping APIs
17184 PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
17185 p_project_id => p_project_id
17186 ,x_return_status => l_return_status
17187 ,x_msg_count => l_msg_count
17188 ,x_msg_data => l_msg_data);
17189
17190 --Check if there is any error.
17191 l_msg_count := FND_MSG_PUB.count_msg;
17192 IF l_msg_count > 0 THEN
17193 x_msg_count := l_msg_count;
17194 IF x_msg_count = 1 THEN
17195 x_msg_data := l_msg_data;
17196 END IF;
17197 RAISE FND_API.G_EXC_ERROR;
17198 END IF;
17199
17200 IF (p_workplan_enabled_flag = 'N') THEN
17201 --disable workplan
17202 --get structure_id
17203 OPEN sel_wp_structure_id;
17204 FETCH sel_wp_structure_id INTO l_structure_id;
17205 CLOSE sel_wp_structure_id;
17206
17207 --delete workplan structure
17208 OPEN sel_all_wp_structure_ver(l_structure_id);
17209 LOOP
17210 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17211 l_struc_ver_rvn;
17212 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17213 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17214 p_project_id,
17215 l_del_struc_ver_id,
17216 l_return_status,
17217 l_err_msg_code);
17218 IF (l_return_status <> 'S') THEN
17219 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17220 x_msg_data := l_err_msg_code;
17221 RAISE FND_API.G_EXC_ERROR;
17222 END IF;
17223
17224 --get top tasks
17225 OPEN get_top_tasks(l_del_struc_ver_id);
17226 LOOP
17227 FETCH get_top_tasks into l_task_ver_id;
17228 EXIT WHEN get_top_tasks%NOTFOUND;
17229
17230 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17231 p_project_id => p_project_id
17232 ,p_task_version_id => l_task_ver_id
17233 ,p_parent_structure_ver_id => l_del_struc_ver_id
17234 ,x_return_status => l_return_status
17235 ,x_error_message_code => l_err_msg_code );
17236
17237 IF (l_return_status <> 'S') THEN
17238 x_return_status := l_return_status;
17239 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17240 l_msg_data := l_err_msg_code;
17241 CLOSE get_top_tasks;
17242 RAISE FND_API.G_EXC_ERROR;
17243 END IF;
17244 END LOOP;
17245 CLOSE get_top_tasks;
17246
17247 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17248 p_structure_version_id => l_del_struc_ver_id
17249 ,p_record_version_number => l_struc_ver_rvn
17250 ,x_return_status => l_return_status
17251 ,x_msg_count => l_msg_count
17252 ,x_msg_data => l_msg_data);
17253
17254 --Check if there is any error.
17255 l_msg_count := FND_MSG_PUB.count_msg;
17256 IF l_msg_count > 0 THEN
17257 x_msg_count := l_msg_count;
17258 IF x_msg_count = 1 THEN
17259 x_msg_data := l_msg_data;
17260 END IF;
17261 CLOSE sel_all_wp_structure_ver;
17262 RAISE FND_API.G_EXC_ERROR;
17263 END IF;
17264 END LOOP;
17265 CLOSE sel_all_wp_structure_ver;
17266 END IF;
17267
17268 IF (p_financial_enabled_flag = 'N') THEN
17269 --disable financial structure API
17270 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
17271 p_validate_only => FND_API.G_FALSE
17272 ,p_project_id => p_project_id
17273 ,x_return_status => l_return_status
17274 ,x_msg_count => l_msg_count
17275 ,x_msg_data => l_msg_data);
17276
17277 --Check if there is any error.
17278 l_msg_count := FND_MSG_PUB.count_msg;
17279 IF l_msg_count > 0 THEN
17280 x_msg_count := l_msg_count;
17281 IF x_msg_count = 1 THEN
17282 x_msg_data := l_msg_data;
17283 END IF;
17284 RAISE FND_API.G_EXC_ERROR;
17285 END IF;
17286 END IF;
17287
17288 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
17289 --partial share/full share
17290 --remove mapping APIs
17291 PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
17292 p_project_id => p_project_id
17293 ,x_return_status => l_return_status
17294 ,x_msg_count => l_msg_count
17295 ,x_msg_data => l_msg_data);
17296
17297 --loop and delete all workplan versions
17298 OPEN sel_wp_structure_id;
17299 FETCH sel_wp_structure_id INTO l_structure_id;
17300 CLOSE sel_wp_structure_id;
17301
17302 OPEN sel_all_wp_structure_ver(l_structure_id);
17303 LOOP
17304 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17305 l_struc_ver_rvn;
17306 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17307 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17308 p_project_id,
17309 l_del_struc_ver_id,
17310 l_return_status,
17311 l_err_msg_code);
17312 IF (l_return_status <> 'S') THEN
17313 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17314 x_msg_data := l_err_msg_code;
17315 RAISE FND_API.G_EXC_ERROR;
17316 END IF;
17317
17318 --get top tasks
17319 OPEN get_top_tasks(l_del_struc_ver_id);
17320 LOOP
17321 FETCH get_top_tasks into l_task_ver_id;
17322 EXIT WHEN get_top_tasks%NOTFOUND;
17323
17324 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17325 p_project_id => p_project_id
17326 ,p_task_version_id => l_task_ver_id
17327 ,p_parent_structure_ver_id => l_del_struc_ver_id
17328 ,x_return_status => l_return_status
17329 ,x_error_message_code => l_err_msg_code );
17330
17331
17332 IF (l_return_status <> 'S') THEN
17333 x_return_status := l_return_status;
17334 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17335 l_msg_data := l_err_msg_code;
17336 CLOSE get_top_tasks;
17337 RAISE FND_API.G_EXC_ERROR;
17338 END IF;
17339 END LOOP;
17340 CLOSE get_top_tasks;
17341
17342 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17343 p_structure_version_id => l_del_struc_ver_id
17344 ,p_record_version_number => l_struc_ver_rvn
17345 ,x_return_status => l_return_status
17346 ,x_msg_count => l_msg_count
17347 ,x_msg_data => l_msg_data
17348 );
17349
17350 --Check if there is any error.
17351 l_msg_count := FND_MSG_PUB.count_msg;
17352 IF l_msg_count > 0 THEN
17353 x_msg_count := l_msg_count;
17354 IF x_msg_count = 1 THEN
17355 x_msg_data := l_msg_data;
17356 END IF;
17357 CLOSE sel_all_wp_structure_ver;
17358 RAISE FND_API.G_EXC_ERROR;
17359 END IF;
17360 END LOOP;
17361 CLOSE sel_all_wp_structure_ver;
17362
17363 --Add structure type to financial
17364 OPEN sel_fin_structure_id;
17365 FETCH sel_fin_structure_id into l_structure_id;
17366 CLOSE sel_fin_structure_id;
17367
17368 OPEN sel_struc_type_id;
17369 FETCH sel_struc_type_id INTO l_struc_type_id;
17370 CLOSE sel_struc_type_id;
17371
17372 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
17373 X_ROWID => l_rowid
17374 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
17375 ,X_PROJ_ELEMENT_ID => l_structure_id
17376 ,X_STRUCTURE_TYPE_ID => l_struc_type_id
17377 ,X_RECORD_VERSION_NUMBER => 1
17378 ,X_ATTRIBUTE_CATEGORY => NULL
17379 ,X_ATTRIBUTE1 => NULL
17380 ,X_ATTRIBUTE2 => NULL
17381 ,X_ATTRIBUTE3 => NULL
17382 ,X_ATTRIBUTE4 => NULL
17383 ,X_ATTRIBUTE5 => NULL
17384 ,X_ATTRIBUTE6 => NULL
17385 ,X_ATTRIBUTE7 => NULL
17386 ,X_ATTRIBUTE8 => NULL
17387 ,X_ATTRIBUTE9 => NULL
17388 ,X_ATTRIBUTE10 => NULL
17389 ,X_ATTRIBUTE11 => NULL
17390 ,X_ATTRIBUTE12 => NULL
17391 ,X_ATTRIBUTE13 => NULL
17392 ,X_ATTRIBUTE14 => NULL
17393 ,X_ATTRIBUTE15 => NULL);
17394
17395 l_proj_prog_attr_id := NULL;
17396 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
17397 p_validate_only => FND_API.G_FALSE
17398 ,p_project_id => p_project_id
17399 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
17400 ,P_OBJECT_ID => l_structure_id
17401 ,p_action_set_id => NULL
17402 ,p_structure_type => 'WORKPLAN' --Amit
17403 ,x_proj_progress_attr_id => l_proj_prog_attr_id
17404 ,x_return_status => l_return_status
17405 ,x_msg_count => x_msg_count
17406 ,x_msg_data => x_msg_data);
17407
17408 --get structure version id
17409 OPEN sel_struc_ver(l_structure_id);
17410 FETCH sel_struc_ver into l_structure_version_id;
17411 CLOSE sel_struc_ver;
17412
17413 --add planning transaction to the shared structure version
17414 --add financial planning
17415 /*Smukka Bug No. 3474141 Date 03/01/2004 */
17416 /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block */
17417 BEGIN
17418 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
17419 p_context => 'WORKPLAN'
17420 ,p_project_id => p_project_id
17421 ,p_struct_elem_version_id => l_structure_version_id
17422 ,x_return_status => l_return_status
17423 ,x_msg_count => x_msg_count
17424 ,x_Msg_data => x_msg_data);
17425 EXCEPTION
17426 WHEN OTHERS THEN
17427 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
17428 p_procedure_name => 'update_structures_setup_attr',
17429 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
17430 RAISE FND_API.G_EXC_ERROR;
17431 END;
17432 --Check if there is any error.
17433 l_msg_count := FND_MSG_PUB.count_msg;
17434 IF l_msg_count > 0 THEN
17435 x_msg_count := l_msg_count;
17436 IF x_msg_count = 1 THEN
17437 x_msg_data := l_msg_data;
17438 END IF;
17439 RAISE FND_API.G_EXC_ERROR;
17440 END IF;
17441
17442 --create schedule row for each task
17443 INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
17444 pev_schedule_id,
17445 element_version_id,
17446 project_id,
17447 proj_element_id,
17448 creation_date,
17449 created_by,
17450 last_update_date,
17451 last_updated_by,
17452 scheduled_start_date,
17453 scheduled_finish_date,
17454 milestone_flag,
17455 critical_flag,
17456 calendar_id,
17457 record_version_number,
17458 last_update_login,
17459 source_object_id,
17460 source_object_type)
17461 SELECT
17462 pa_proj_elem_ver_schedule_s.nextval,
17463 PPEV.element_version_id,
17464 PPEV.project_id,
17465 PPEV.proj_element_id,
17466 SYSDATE,
17467 FND_GLOBAL.USER_ID,
17468 SYSDATE,
17469 FND_GLOBAL.USER_ID,
17470 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))),
17471 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))),
17472 'N',
17473 'N',
17474 NULL,
17475 0,
17476 FND_GLOBAL.LOGIN_ID,
17477 PPEV.project_id,
17478 'PA_PROJECTS'
17479 FROM PA_TASKS PT,
17480 PA_PROJ_ELEMENT_VERSIONS PPEV
17481 WHERE
17482 PPEV.parent_structure_version_id = l_structure_version_id
17483 AND PPEV.proj_element_id = PT.task_id (+);
17484
17485 OPEN sel_struc_and_task_vers(l_structure_version_id);
17486 LOOP
17487 FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
17488 EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
17489 /* Bug 2790703 Begin */
17490 --Add to array for rollup
17491 l_index := l_index + 1;
17492 l_task_ver_ids_tbl(l_index) := l_element_version_id;
17493 /* Bug 2790703 End */
17494 END LOOP;
17495 CLOSE sel_struc_and_task_vers;
17496
17497 IF (l_task_ver_ids_tbl.count > 0) THEN
17498 --rollup
17499 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
17500 p_commit => FND_API.G_FALSE,
17501 p_element_versions => l_task_ver_ids_tbl,
17502 x_return_status => l_return_status,
17503 x_msg_count => l_msg_count,
17504 x_msg_data => l_msg_data);
17505
17506 --Check if there is any error.
17507 l_msg_count := FND_MSG_PUB.count_msg;
17508 IF l_msg_count > 0 THEN
17509 x_msg_count := l_msg_count;
17510 IF x_msg_count = 1 THEN
17511 x_msg_data := l_msg_data;
17512 END IF;
17513 RAISE FND_API.G_EXC_ERROR;
17514 END IF;
17515 END IF;
17516
17517 --Check if there is any error.
17518 l_msg_count := FND_MSG_PUB.count_msg;
17519 IF l_msg_count > 0 THEN
17520 x_msg_count := l_msg_count;
17521 IF x_msg_count = 1 THEN
17522 x_msg_data := l_msg_data;
17523 END IF;
17524 RAISE FND_API.G_EXC_ERROR;
17525 END IF;
17526
17527
17528 -- Bug # 5077599.
17529
17530 -- If the project is version disabled, then baseline the structure version.
17531
17532 if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'N') then
17533
17534 update pa_proj_elem_ver_structure ppevs
17535 set ppevs.current_flag = 'Y'
17536 , ppevs.original_flag = 'Y'
17537 , ppevs.record_version_number = (ppevs.record_version_number+1)
17538 where ppevs.project_id = p_project_id
17539 and ppevs.element_version_id = l_structure_version_id;
17540
17541 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION
17542 (p_commit => p_commit
17543 ,p_validate_only => p_validate_only
17544 ,p_validation_level => p_validation_level
17545 ,p_calling_module => p_calling_module
17546 ,p_debug_mode => p_debug_mode
17547 ,p_max_msg_count => p_max_msg_count
17548 ,p_structure_version_id => l_structure_version_id
17549 ,x_return_status => x_return_status
17550 ,x_msg_count => x_msg_count
17551 ,x_msg_data => x_msg_data);
17552
17553 end if;
17554
17555 -- Bug # 5077599.
17556
17557
17558 IF (p_sharing_option_code = 'SHARE_FULL') THEN
17559 NULL;
17560 ELSIF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
17561 NULL;
17562 END IF;
17563 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_MAPPING') THEN
17564 --split mapping; no action required
17565 NULL;
17566 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
17567 --split no mapping
17568 --remove mapping APIs
17569 PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
17570 p_project_id => p_project_id
17571 ,x_return_status => l_return_status
17572 ,x_msg_count => l_msg_count
17573 ,x_msg_data => l_msg_data);
17574
17575 --Check if there is any error.
17576 l_msg_count := FND_MSG_PUB.count_msg;
17577 IF l_msg_count > 0 THEN
17578 x_msg_count := l_msg_count;
17579 IF x_msg_count = 1 THEN
17580 x_msg_data := l_msg_data;
17581 END IF;
17582 RAISE FND_API.G_EXC_ERROR;
17583 END IF;
17584
17585 END IF;
17586
17587 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SPLIT_NO_MAPPING') THEN
17588 --currently split no mapping
17589 IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') OR
17590 (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') OR
17591 (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
17592 --disabled both/delete workplan structure/disable financial structure API
17593
17594 IF (p_workplan_enabled_flag = 'N') THEN
17595 --delete workplan structure
17596 --get structure_id
17597 OPEN sel_wp_structure_id;
17598 FETCH sel_wp_structure_id INTO l_structure_id;
17599 CLOSE sel_wp_structure_id;
17600
17601 --delete workplan structure
17602 OPEN sel_all_wp_structure_ver(l_structure_id);
17603 LOOP
17604 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17605 l_struc_ver_rvn;
17606 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17607 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17608 p_project_id,
17609 l_del_struc_ver_id,
17610 l_return_status,
17611 l_err_msg_code);
17612 IF (l_return_status <> 'S') THEN
17613 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17614 x_msg_data := l_err_msg_code;
17615 RAISE FND_API.G_EXC_ERROR;
17616 END IF;
17617
17618 --get top tasks
17619 OPEN get_top_tasks(l_del_struc_ver_id);
17620 LOOP
17621 FETCH get_top_tasks into l_task_ver_id;
17622 EXIT WHEN get_top_tasks%NOTFOUND;
17623
17624 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17625 p_project_id => p_project_id
17626 ,p_task_version_id => l_task_ver_id
17627 ,p_parent_structure_ver_id => l_del_struc_ver_id
17628 ,x_return_status => l_return_status
17629 ,x_error_message_code => l_err_msg_code );
17630
17631 IF (l_return_status <> 'S') THEN
17632 x_return_status := l_return_status;
17633 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17634 l_msg_data := l_err_msg_code;
17635 CLOSE get_top_tasks;
17636 RAISE FND_API.G_EXC_ERROR;
17637 END IF;
17638 END LOOP;
17639 CLOSE get_top_tasks;
17640
17641 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17642 p_structure_version_id => l_del_struc_ver_id
17643 ,p_record_version_number => l_struc_ver_rvn
17644 ,x_return_status => l_return_status
17645 ,x_msg_count => l_msg_count
17646 ,x_msg_data => l_msg_data);
17647
17648 --Check if there is any error.
17649 l_msg_count := FND_MSG_PUB.count_msg;
17650 IF l_msg_count > 0 THEN
17651 x_msg_count := l_msg_count;
17652 IF x_msg_count = 1 THEN
17653 x_msg_data := l_msg_data;
17654 END IF;
17655 CLOSE sel_all_wp_structure_ver;
17656 RAISE FND_API.G_EXC_ERROR;
17657 END IF;
17658 END LOOP;
17659 CLOSE sel_all_wp_structure_ver;
17660 END IF;
17661
17662 IF (p_financial_enabled_flag = 'N') THEN
17663 --disable financial structure API
17664 PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
17665 p_validate_only => FND_API.G_FALSE
17666 ,p_project_id => p_project_id
17667 ,x_return_status => l_return_status
17668 ,x_msg_count => l_msg_count
17669 ,x_msg_data => l_msg_data);
17670
17671 --Check if there is any error.
17672 l_msg_count := FND_MSG_PUB.count_msg;
17673 IF l_msg_count > 0 THEN
17674 x_msg_count := l_msg_count;
17675 IF x_msg_count = 1 THEN
17676 x_msg_data := l_msg_data;
17677 END IF;
17678 RAISE FND_API.G_EXC_ERROR;
17679 END IF;
17680 END IF;
17681 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
17682 --partial share/full share
17683 --remove financial structure row in pa_proj_workplan_attr
17684 --delete all workplan dependencies
17685 --delete workplan structure
17686 --add schedule rows for financial structure and tasks
17687 --add workplan structure type
17688
17689 --loop and delete all workplan versions
17690 OPEN sel_wp_structure_id;
17691 FETCH sel_wp_structure_id INTO l_structure_id;
17692 CLOSE sel_wp_structure_id;
17693
17694 OPEN sel_all_wp_structure_ver(l_structure_id);
17695 LOOP
17696 FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17697 l_struc_ver_rvn;
17698 EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17699 PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17700 p_project_id,
17701 l_del_struc_ver_id,
17702 l_return_status,
17703 l_err_msg_code);
17704 IF (l_return_status <> 'S') THEN
17705 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17706 x_msg_data := l_err_msg_code;
17707 RAISE FND_API.G_EXC_ERROR;
17708 END IF;
17709
17710 --get top tasks
17711 OPEN get_top_tasks(l_del_struc_ver_id);
17712 LOOP
17713 FETCH get_top_tasks into l_task_ver_id;
17714 EXIT WHEN get_top_tasks%NOTFOUND;
17715
17716 PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17717 p_project_id => p_project_id
17718 ,p_task_version_id => l_task_ver_id
17719 ,p_parent_structure_ver_id => l_del_struc_ver_id
17720 ,x_return_status => l_return_status
17721 ,x_error_message_code => l_err_msg_code );
17722
17723
17724 IF (l_return_status <> 'S') THEN
17725 x_return_status := l_return_status;
17726 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17727 l_msg_data := l_err_msg_code;
17728 CLOSE get_top_tasks;
17729 RAISE FND_API.G_EXC_ERROR;
17730 END IF;
17731 END LOOP;
17732 CLOSE get_top_tasks;
17733
17734 PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17735 p_structure_version_id => l_del_struc_ver_id
17736 ,p_record_version_number => l_struc_ver_rvn
17737 ,x_return_status => l_return_status
17738 ,x_msg_count => l_msg_count
17739 ,x_msg_data => l_msg_data
17740 );
17741
17742 --Check if there is any error.
17743 l_msg_count := FND_MSG_PUB.count_msg;
17744 IF l_msg_count > 0 THEN
17745 x_msg_count := l_msg_count;
17746 IF x_msg_count = 1 THEN
17747 x_msg_data := l_msg_data;
17748 END IF;
17749 CLOSE sel_all_wp_structure_ver;
17750 RAISE FND_API.G_EXC_ERROR;
17751 END IF;
17752 END LOOP;
17753 CLOSE sel_all_wp_structure_ver;
17754
17755 --Add structure type to financial
17756 OPEN sel_fin_structure_id;
17757 FETCH sel_fin_structure_id into l_structure_id;
17758 CLOSE sel_fin_structure_id;
17759
17760 OPEN sel_struc_type_id;
17761 FETCH sel_struc_type_id INTO l_struc_type_id;
17762 CLOSE sel_struc_type_id;
17763
17764 PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
17765 X_ROWID => l_rowid
17766 ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
17767 ,X_PROJ_ELEMENT_ID => l_structure_id
17768 ,X_STRUCTURE_TYPE_ID => l_struc_type_id
17769 ,X_RECORD_VERSION_NUMBER => 1
17770 ,X_ATTRIBUTE_CATEGORY => NULL
17771 ,X_ATTRIBUTE1 => NULL
17772 ,X_ATTRIBUTE2 => NULL
17773 ,X_ATTRIBUTE3 => NULL
17774 ,X_ATTRIBUTE4 => NULL
17775 ,X_ATTRIBUTE5 => NULL
17776 ,X_ATTRIBUTE6 => NULL
17777 ,X_ATTRIBUTE7 => NULL
17778 ,X_ATTRIBUTE8 => NULL
17779 ,X_ATTRIBUTE9 => NULL
17780 ,X_ATTRIBUTE10 => NULL
17781 ,X_ATTRIBUTE11 => NULL
17782 ,X_ATTRIBUTE12 => NULL
17783 ,X_ATTRIBUTE13 => NULL
17784 ,X_ATTRIBUTE14 => NULL
17785 ,X_ATTRIBUTE15 => NULL);
17786
17787 l_proj_prog_attr_id := NULL;
17788 PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
17789 p_validate_only => FND_API.G_FALSE
17790 ,p_project_id => p_project_id
17791 ,P_OBJECT_TYPE => 'PA_STRUCTURES'
17792 ,P_OBJECT_ID => l_structure_id
17793 ,p_action_set_id => NULL
17794 ,p_structure_type => 'WORKPLAN' --Amit
17795 ,x_proj_progress_attr_id => l_proj_prog_attr_id
17796 ,x_return_status => l_return_status
17797 ,x_msg_count => x_msg_count
17798 ,x_msg_data => x_msg_data);
17799
17800 --get structure version id
17801 OPEN sel_struc_ver(l_structure_id);
17802 FETCH sel_struc_ver into l_structure_version_id;
17803 CLOSE sel_struc_ver;
17804
17805 --add financial planning
17806 /*Smukka Bug No. 3474141 Date 03/01/2004 */
17807 /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block */
17808 BEGIN
17809 PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
17810 p_context => 'WORKPLAN'
17811 ,p_project_id => p_project_id
17812 ,p_struct_elem_version_id => l_structure_version_id
17813 ,x_return_status => l_return_status
17814 ,x_msg_count => x_msg_count
17815 ,x_Msg_data => x_msg_data);
17816 EXCEPTION
17817 WHEN OTHERS THEN
17818 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
17819 p_procedure_name => 'update_structures_setup_attr',
17820 p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
17821 RAISE FND_API.G_EXC_ERROR;
17822 END;
17823 --Check if there is any error.
17824 l_msg_count := FND_MSG_PUB.count_msg;
17825 IF l_msg_count > 0 THEN
17826 x_msg_count := l_msg_count;
17827 IF x_msg_count = 1 THEN
17828 x_msg_data := l_msg_data;
17829 END IF;
17830 RAISE FND_API.G_EXC_ERROR;
17831 END IF;
17832
17833 --create schedule row for each task
17834 INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
17835 pev_schedule_id,
17836 element_version_id,
17837 project_id,
17838 proj_element_id,
17839 creation_date,
17840 created_by,
17841 last_update_date,
17842 last_updated_by,
17843 scheduled_start_date,
17844 scheduled_finish_date,
17845 milestone_flag,
17846 critical_flag,
17847 calendar_id,
17848 record_version_number,
17849 last_update_login,
17850 source_object_id,
17851 source_object_type
17852 )
17853 SELECT
17854 pa_proj_elem_ver_schedule_s.nextval,
17855 PPEV.element_version_id,
17856 PPEV.project_id,
17857 PPEV.proj_element_id,
17858 SYSDATE,
17859 FND_GLOBAL.USER_ID,
17860 SYSDATE,
17861 FND_GLOBAL.USER_ID,
17862 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))),
17863 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))),
17864 'N',
17865 'N',
17866 NULL,
17867 0,
17868 FND_GLOBAL.LOGIN_ID,
17869 PPEV.project_id,
17870 'PA_PROJECTS'
17871 FROM PA_TASKS PT,
17872 PA_PROJ_ELEMENT_VERSIONS PPEV
17873 WHERE
17874 PPEV.parent_structure_version_id = l_structure_version_id
17875 AND PPEV.proj_element_id = PT.task_id (+);
17876
17877 OPEN sel_struc_and_task_vers(l_structure_version_id);
17878 LOOP
17879 FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
17880 EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
17881 /* Bug 2790703 Begin */
17882 --Add to array for rollup
17883 l_index := l_index + 1;
17884 l_task_ver_ids_tbl(l_index) := l_element_version_id;
17885 /* Bug 2790703 End */
17886 END LOOP;
17887 CLOSE sel_struc_and_task_vers;
17888
17889 IF (l_task_ver_ids_tbl.count > 0) THEN
17890 --rollup
17891 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
17892 p_commit => FND_API.G_FALSE,
17893 p_element_versions => l_task_ver_ids_tbl,
17894 x_return_status => l_return_status,
17895 x_msg_count => l_msg_count,
17896 x_msg_data => l_msg_data);
17897
17898 --Check if there is any error.
17899 l_msg_count := FND_MSG_PUB.count_msg;
17900 IF l_msg_count > 0 THEN
17901 x_msg_count := l_msg_count;
17902 IF x_msg_count = 1 THEN
17903 x_msg_data := l_msg_data;
17904 END IF;
17905 RAISE FND_API.G_EXC_ERROR;
17906 END IF;
17907 END IF;
17908
17909 --Check if there is any error.
17910 l_msg_count := FND_MSG_PUB.count_msg;
17911 IF l_msg_count > 0 THEN
17912 x_msg_count := l_msg_count;
17913 IF x_msg_count = 1 THEN
17914 x_msg_data := l_msg_data;
17915 END IF;
17916 RAISE FND_API.G_EXC_ERROR;
17917 END IF;
17918
17919 -- Bug # 5077599.
17920
17921 -- If the project is version disabled, then baseline the structure version.
17922
17923 if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'N') then
17924
17925 update pa_proj_elem_ver_structure ppevs
17926 set ppevs.current_flag = 'Y'
17927 , ppevs.original_flag = 'Y'
17928 , ppevs.record_version_number = (ppevs.record_version_number+1)
17929 where ppevs.project_id = p_project_id
17930 and ppevs.element_version_id = l_structure_version_id;
17931
17932 PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION
17933 (p_commit => p_commit
17934 ,p_validate_only => p_validate_only
17935 ,p_validation_level => p_validation_level
17936 ,p_calling_module => p_calling_module
17937 ,p_debug_mode => p_debug_mode
17938 ,p_max_msg_count => p_max_msg_count
17939 ,p_structure_version_id => l_structure_version_id
17940 ,x_return_status => x_return_status
17941 ,x_msg_count => x_msg_count
17942 ,x_msg_data => x_msg_data);
17943
17944 end if;
17945
17946 -- Bug # 5077599.
17947
17948
17949 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_MAPPING') THEN
17950 --split mapping; no action required
17951 NULL;
17952 ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
17953 --split no mapping; no action required
17954 NULL;
17955 END IF;
17956
17957 END IF;
17958
17959 IF (p_workplan_enabled_flag = 'N' or p_financial_enabled_flag = 'N') THEN
17960 --clear sharing option
17961 l_new_share_code := NULL;
17962 ELSE
17963 l_new_share_code := p_sharing_option_code;
17964 END IF;
17965
17966 update pa_projects_all
17967 set structure_sharing_code = l_new_share_code
17968 where project_id = p_project_id;
17969
17970 IF l_delv_enabled = 'Y' THEN
17971 --currently enabled
17972 IF (p_deliverables_enabled_flag = 'N') THEN
17973 PA_DELIVERABLE_PUB.DELETE_DELIVERABLE_STRUCTURE
17974 (p_project_id => p_project_id
17975 ,x_return_status => l_return_status
17976 ,x_msg_count => l_msg_count
17977 ,x_msg_data => l_msg_data );
17978
17979 --Check if there is any error.
17980 l_msg_count := FND_MSG_PUB.count_msg;
17981 IF l_msg_count > 0 THEN
17982 x_msg_count := l_msg_count;
17983 IF x_msg_count = 1 THEN
17984 x_msg_data := l_msg_data;
17985 END IF;
17986 RAISE FND_API.G_EXC_ERROR;
17987 END IF;
17988 END IF;
17989 ELSE --l_delv_enabled = 'N'
17990 --currently disabled
17991 IF (p_deliverables_enabled_flag = 'Y') THEN
17992 --enable deliverable
17993 --get suffix
17994 select meaning
17995 into l_suffix
17996 from pa_lookups
17997 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
17998 and lookup_code = 'DELIVERABLE';
17999 --get deliverable name
18000 l_del_name := substrb(l_name||l_append||l_suffix, 1, 240);
18001
18002 --create workplan structure
18003 PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
18004 (p_validate_only => FND_API.G_FALSE
18005 ,p_project_id => p_project_id
18006 ,p_structure_number => l_del_name
18007 ,p_structure_name => l_del_name
18008 ,p_calling_flag => 'DELIVERABLE'
18009 ,x_structure_id => l_structure_id
18010 ,x_return_status => l_return_status
18011 ,x_msg_count => l_msg_count
18012 ,x_msg_data => l_msg_data );
18013
18014 --Check if there is any error.
18015 l_msg_count := FND_MSG_PUB.count_msg;
18016 IF l_msg_count > 0 THEN
18017 x_msg_count := l_msg_count;
18018 IF x_msg_count = 1 THEN
18019 x_msg_data := l_msg_data;
18020 END IF;
18021 RAISE FND_API.G_EXC_ERROR;
18022 END IF;
18023
18024 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
18025 (p_validate_only => FND_API.G_FALSE
18026 ,p_structure_id => l_structure_id
18027 ,x_structure_version_id => l_structure_version_id
18028 ,x_return_status => l_return_status
18029 ,x_msg_count => l_msg_count
18030 ,x_msg_data => l_msg_data );
18031
18032 --Check if there is any error.
18033 l_msg_count := FND_MSG_PUB.count_msg;
18034 IF l_msg_count > 0 THEN
18035 x_msg_count := l_msg_count;
18036 IF x_msg_count = 1 THEN
18037 x_msg_data := l_msg_data;
18038 END IF;
18039 RAISE FND_API.G_EXC_ERROR;
18040 END IF;
18041
18042 PA_TASK_PUB1.Create_Schedule_Version(
18043 p_element_version_id => l_structure_version_id
18044 ,p_scheduled_start_date => l_proj_start_date
18045 ,p_scheduled_end_date => l_proj_completion_date
18046 ,x_pev_schedule_id => l_pev_schedule_id
18047 ,x_return_status => l_return_status
18048 ,x_msg_count => l_msg_count
18049 ,x_msg_data => l_msg_data);
18050
18051 --Check if there is any error.
18052 l_msg_count := FND_MSG_PUB.count_msg;
18053 IF l_msg_count > 0 THEN
18054 x_msg_count := l_msg_count;
18055 IF x_msg_count = 1 THEN
18056 x_msg_data := l_msg_data;
18057 END IF;
18058 RAISE FND_API.G_EXC_ERROR;
18059 END IF;
18060
18061 IF (l_template_flag = 'Y') THEN
18062 l_status_code := 'STRUCTURE_WORKING';
18063 l_baseline_flag := 'N';
18064 l_latest_eff_pub_flag := 'N';
18065 l_effective_date := NULL;
18066 ELSE
18067 l_status_code := 'STRUCTURE_PUBLISHED';
18068 l_baseline_flag := 'N';
18069 l_latest_eff_pub_flag := 'Y';
18070 l_effective_date := sysdate;
18071 END IF;
18072
18073 --create structure version
18074 PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
18075 (p_validate_only => FND_API.G_FALSE
18076 ,p_structure_version_id => l_structure_version_id
18077 ,p_structure_version_name => l_del_name
18078 ,p_structure_version_desc => NULL
18079 ,p_effective_date => l_effective_date
18080 ,p_latest_eff_published_flag => l_latest_eff_pub_flag
18081 ,p_locked_status_code => 'UNLOCKED'
18082 ,p_struct_version_status_code => l_status_code
18083 ,p_baseline_current_flag => l_baseline_flag
18084 ,p_baseline_original_flag => 'N'
18085 ,x_pev_structure_id => l_pev_structure_id
18086 ,x_return_status => l_return_status
18087 ,x_msg_count => l_msg_count
18088 ,x_msg_data => l_msg_data );
18089
18090 --Check if there is any error.
18091 l_msg_count := FND_MSG_PUB.count_msg;
18092 IF l_msg_count > 0 THEN
18093 x_msg_count := l_msg_count;
18094 IF x_msg_count = 1 THEN
18095 x_msg_data := l_msg_data;
18096 END IF;
18097 RAISE FND_API.G_EXC_ERROR;
18098 END IF;
18099
18100 END IF;
18101 END IF;
18102
18103 -- FP.M changes below
18104 If p_sys_program_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18105 l_sys_program_flag := null;
18106 else
18107 l_sys_program_flag := p_sys_program_flag;
18108 end if;
18109
18110 If p_allow_multi_prog_rollup = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18111 l_allow_multi_program_rollup :=null;
18112 else
18113 l_allow_multi_program_rollup :=p_allow_multi_prog_rollup;
18114 end if;
18115
18116 --bug 4275096
18117 IF l_sys_program_flag = 'N' AND l_allow_multi_program_rollup = 'Y'
18118 THEN
18119 Pa_Utils.ADD_MESSAGE
18120 ( p_app_short_name => 'PA',
18121 p_msg_name =>'PA_PS_EN_SYS_PROG_ERR');
18122 RAISE FND_API.G_EXC_ERROR;
18123 END IF;
18124 --end bug 4275096
18125
18126 IF (l_proj_sys_program_flag='Y' and nvl(l_sys_program_flag,'N')='N' ) then
18127 l_flag := PA_RELATIONSHIP_UTILS.DISABLE_SYS_PROG_OK(p_project_id);
18128 If l_flag='N' Then
18129 Pa_Utils.ADD_MESSAGE
18130 ( p_app_short_name => 'PA',
18131 p_msg_name =>'PA_PS_DIS_SYS_PROG_ERR');
18132 RAISE FND_API.G_EXC_ERROR;
18133 END IF;
18134 END IF;
18135
18136 IF (l_proj_allow_program_rollup='Y' and nvl(l_allow_multi_program_rollup,'N')='N' ) then
18137 l_flag := PA_RELATIONSHIP_UTILS.DISABLE_MULTI_PROG_OK(p_project_id);
18138 IF l_flag ='N' Then
18139 Pa_Utils.ADD_MESSAGE
18140 ( p_app_short_name => 'PA',
18141 p_msg_name =>'PA_PS_DIS_MULTI_PROG_ERR');
18142 RAISE FND_API.G_EXC_ERROR;
18143 END IF;
18144 END IF;
18145
18146 -- IF NOT FND_API.TO_BOOLEAN(p_validate_only) THEN
18147 UPDATE pa_projects_all
18148 SET
18149 sys_program_flag = nvl(l_sys_program_flag,'N'),
18150 allow_multi_program_rollup = nvl(l_allow_multi_program_rollup,'N'),
18151 CBS_VERSION_ID=p_cbs_version_id , --added for CBS 15834912
18152 CBS_ENABLE_FLAG=p_cbs_enable_flag --added for CBS 16083858
18153 WHERE project_id = p_project_id;
18154 -- END IF;
18155 -- end of FP.M changes
18156
18157 x_return_status := FND_API.G_RET_STS_SUCCESS;
18158
18159 IF (p_debug_mode = 'Y') THEN
18160 pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr end');
18161 END IF;
18162
18163 EXCEPTION
18164 WHEN FND_API.G_EXC_ERROR THEN
18165 IF (p_commit = FND_API.G_TRUE) THEN
18166 ROLLBACK to update_struc_setup_attr_pvt;
18167 END IF;
18168 x_msg_count := FND_MSG_PUB.count_msg;
18169 x_return_status := FND_API.G_RET_STS_ERROR;
18170 WHEN OTHERS THEN
18171 IF (p_commit = FND_API.G_TRUE) THEN
18172 ROLLBACK to update_struc_setup_attr_pvt;
18173 END IF;
18174 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18175 x_msg_count := FND_MSG_PUB.count_msg;
18176 --put message
18177 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
18178 p_procedure_name => 'update_structures_setup_attr',
18179 p_error_text => SUBSTRB(SQLERRM,1,240));
18180 RAISE;
18181 END update_structures_setup_attr;
18182
18183 end PA_PROJECT_STRUCTURE_PVT1;