DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_PROJECT_STRUCTURE_PVT1

Source


1 package body PA_PROJECT_STRUCTURE_PVT1 as
2 /*$Header: PAXSTCVB.pls 120.23.12010000.3 2008/10/07 11:27:32 amehrotr ship $*/
3 
4 -- API name                      : Create_Structure
5 -- Type                          : Private Procedure
6 -- Pre-reqs                      : None
7 -- Return Value                  : N/A
8 -- Parameters
9 --   p_api_version                       IN  NUMBER      := 1.0
10 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
11 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
12 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
13 --   p_validation_level                  IN  VARCHAR2    := 100
14 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
15 --   p_debug_mode                        IN  VARCHAR2    := 'N'
16 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17 --   p_project_id    IN  NUMBER
18 --   p_structure_number  IN  VARCHAR2 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19 --   p_structure_name    IN  VARCHAR2
20 --   p_calling_flag  IN  VARCHAR2 := 'WORKPLAN'
21 --   p_structure_description     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
23 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
26 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38 --   x_structure_id  OUT     NUMBER
39 --   x_return_status     OUT     VARCHAR2
40 --   x_msg_count     OUT     NUMBER
41 --   x_msg_data  OUT     VARCHAR2
42 --
43 --  History
44 --
45 --  25-JUN-01   HSIU             -Created
46 --
47 --
48 
49 
50   procedure Create_Structure
51   (
52    p_api_version                       IN  NUMBER      := 1.0
53    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
54    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
55    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
56    ,p_validation_level                  IN  VARCHAR2    := 100
57    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
58    ,p_debug_mode                        IN  VARCHAR2    := 'N'
59    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
60    ,p_project_id                        IN  NUMBER
61    ,p_structure_number                  IN  VARCHAR2 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
62    ,p_structure_name                    IN  VARCHAR2
63    ,p_calling_flag                      IN  VARCHAR2 := 'WORKPLAN'
64    ,p_structure_description             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
65    ,p_attribute_category                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
66    ,p_attribute1                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
67    ,p_attribute2                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
68    ,p_attribute3                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
69    ,p_attribute4                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
70    ,p_attribute5                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
71    ,p_attribute6                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
72    ,p_attribute7                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
73    ,p_attribute8                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
74    ,p_attribute9                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
75    ,p_attribute10                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
76    ,p_attribute11                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
77    ,p_attribute12                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
78    ,p_attribute13                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
79    ,p_attribute14                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
80    ,p_attribute15                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
81    ,p_approval_reqd_flag            IN VARCHAR2 := 'N'
82    ,p_auto_publish_flag             IN VARCHAR2 := 'N'
83    ,p_approver_source_id            IN NUMBER   := FND_API.G_MISS_NUM
84    ,p_approver_source_type          IN NUMBER   := FND_API.G_MISS_NUM
85    ,p_default_display_lvl           IN NUMBER   := 0
86    ,p_enable_wp_version_flag        IN VARCHAR2 := 'N'
87    ,p_auto_pub_upon_creation_flag   IN VARCHAR2 := 'N'
88    ,p_auto_sync_txn_date_flag       IN VARCHAR2 := 'N'
89    ,p_txn_date_sync_buf_days        IN NUMBER   := FND_API.G_MISS_NUM
90    ,p_lifecycle_version_id          IN NUMBER   := FND_API.G_MISS_NUM
91    ,p_current_phase_version_id      IN NUMBER   := FND_API.G_MISS_NUM
92    ,p_progress_cycle_id             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
93    ,p_wq_enable_flag                IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
94    ,p_remain_effort_enable_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
95    ,p_percent_comp_enable_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
96    ,p_next_progress_update_date     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
97    ,p_action_set_id                 IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
98    ,p_task_weight_basis_code        IN VARCHAR2 := 'DURATION'
99    ,x_structure_id                      OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
100    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
101    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
102    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
103   )
104   IS
105     l_msg_count            NUMBER;
106     l_msg_data             VARCHAR2(250);
107     l_return_status        VARCHAR2(2);
108     l_error_message_code   VARCHAR2(250);
109 
110     l_rowid                VARCHAR2(255);
111     l_proj_element_id      PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
112     l_structure_type_id    PA_STRUCTURE_TYPES.STRUCTURE_TYPE_ID%TYPE;
113     l_proj_structure_type_id PA_PROJ_STRUCTURE_TYPES.PROJ_STRUCTURE_TYPE_ID%TYPE;
114     l_structure_type       PA_STRUCTURE_TYPES.STRUCTURE_TYPE_CLASS_CODE%TYPE;
115 
116     l_workplan_license     VARCHAR2(1);
117     l_financial_license      VARCHAR2(1);
118     l_multi_struc_license  VARCHAR2(1);
119 
120     l_split_flag          VARCHAR2(1);
121     l_split_flag2         VARCHAR2(1);
122 
123     l_attribute_category VARCHAR2(30) := NULL;
124     l_attribute1         VARCHAR2(150) := NULL;
125     l_attribute2         VARCHAR2(150) := NULL;
126     l_attribute3         VARCHAR2(150) := NULL;
127     l_attribute4         VARCHAR2(150) := NULL;
128     l_attribute5         VARCHAR2(150) := NULL;
129     l_attribute6         VARCHAR2(150) := NULL;
130     l_attribute7         VARCHAR2(150) := NULL;
131     l_attribute8         VARCHAR2(150) := NULL;
132     l_attribute9         VARCHAR2(150) := NULL;
133     l_attribute10        VARCHAR2(150) := NULL;
134     l_attribute11        VARCHAR2(150) := NULL;
135     l_attribute12        VARCHAR2(150) := NULL;
136     l_attribute13        VARCHAR2(150) := NULL;
137     l_attribute14        VARCHAR2(150) := NULL;
138     l_attribute15        VARCHAR2(150) := NULL;
139 
140     l_proj_prog_attr_id  NUMBER;
141     l_structure_description VARCHAR2(2000);
142 
143     cursor get_split_flag IS
144     select split_cost_from_workplan_flag, SPLIT_COST_FROM_BILL_FLAG
145       from pa_projects_all
146      where project_id = p_project_id;
147 
148     cursor get_licensed(p_workplan VARCHAR2,
149                       p_financial  VARCHAR2,
150                       p_deliverable VARCHAR2)  IS
151     select structure_type_id, structure_type_class_code
152       from pa_structure_types
153      where (structure_type_class_code = 'WORKPLAN' and 'Y' = p_workplan)
154         or (structure_type_class_code = 'FINANCIAL' and 'Y' = p_financial)
155         or (structure_type_class_code = 'DELIVERABLE' and 'Y' = p_deliverable);
156     l_deliverable_license VARCHAR2(1) := 'N';
157 
158   BEGIN
159     IF (p_debug_mode = 'Y') THEN
160       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE BEGIN');
161     END IF;
162 
163     IF (p_commit = FND_API.G_TRUE) THEN
164       savepoint CREATE_STRUC_PRIVATE;
165     END IF;
166 
167     IF (p_debug_mode = 'Y') THEN
168       pa_debug.debug('Performing validations');
169     END IF;
170 
171     --Check if the structure name is unique within the project
172     If (pa_project_structure_utils.check_structure_name_unique(p_structure_name,
173                                                                NULL,
174                                                                p_project_id) <> 'Y') THEN
175       --Name is not unique
176       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_STRUC_NAME_UNIQUE');
177       x_msg_data := 'PA_PS_STRUC_NAME_UNIQUE';
178       RAISE FND_API.G_EXC_ERROR;
179     END IF;
180 
181     --Check what is licensed.
182     l_workplan_license := nvl(pa_install.is_pjt_licensed, 'N');
183     l_financial_license  := nvl(pa_install.is_costing_licensed, 'N');
184 
185     IF (p_calling_flag IS NOT NULL) THEN
186       IF (p_calling_flag = 'WORKPLAN') THEN
187         l_financial_license := 'N';
188         IF (l_workplan_license = 'N') THEN
189           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_PROJ_MANAG_NOT_LIC');
190           x_msg_data := 'PA_PS_PROD_MANAG_NOT_LIC';
191           RAISE FND_API.G_EXC_ERROR;
192         END IF;
193       ELSIF (p_calling_flag = 'FINANCIAL') THEN
194         l_workplan_license := 'N';
195         IF (l_financial_license <> 'Y') THEN
196           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_COSTING_NOT_LIC');
197           RAISE FND_API.G_EXC_ERROR;
198         END IF;
199       ELSIF (p_calling_flag = 'DELIVERABLE') THEN
200         l_workplan_license := 'N';
201         l_financial_license := 'N';
202         l_deliverable_license := 'Y';
203       END IF;
204     END IF;
205 
206 /*
207     --Check if we should split structure types into different structure
208     open get_split_flag;
209     fetch get_split_flag into l_split_flag, l_split_flag2;
210     IF get_split_flag%NOTFOUND THEN
211       PA_UTILS.ADD_MESSAGE('PA', 'PA_INVALID_PROJECT_ID');
212       x_msg_data := 'PA_INVALID_PROJECT_ID';
213       RAISE FND_API.G_EXC_ERROR;
214     END IF;
215     close get_split_flag;
216 
217     --Check if there is any error.
218     l_msg_count := FND_MSG_PUB.count_msg;
219     IF l_msg_count > 0 THEN
220       x_msg_count := l_msg_count;
221       IF x_msg_count = 1 THEN
222         x_msg_data := l_msg_data;
223       END IF;
224       RAISE FND_API.G_EXC_ERROR;
225     END IF;
226 
227     --If splitting structure types, check if one structure type is selected
228     If (l_split_flag <> 'N') THEN
229       IF (p_calling_flag = 'WORKPLAN') THEN
230         l_costing_license := 'N';
231         l_billing_license := 'N';
232         If (l_workplan_license <> 'Y') THEN
233           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_PROJ_MANAG_NOT_LIC');
234           x_msg_data := 'PA_PS_PROD_MANAG_NOT_LIC';
235           RAISE FND_API.G_EXC_ERROR;
236         END IF;
237       ELSIf (p_calling_flag = 'COSTING') THEN
238         IF (l_costing_license <> 'Y') THEN
239           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_COSTING_NOT_LIC');
240           x_msg_data := 'PA_PS_COSTING_NOT_LIC';
241           RAISE FND_API.G_EXC_ERROR;
242         END IF;
243         l_workplan_license := 'N';
244         If (l_split_flag2 <> 'N') THEN
245           l_billing_license := 'N';
246         END IF;
247       ELSIf (p_calling_flag = 'BILLING') THEN
248         IF (l_billing_license <> 'Y') THEN
249           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_BILLING_NOT_LIC');
250           x_msg_data := 'PA_PS_BILLING_NOT_LIC';
251           RAISE FND_API.G_EXC_ERROR;
252         END IF;
253         l_workplan_license := 'N';
254         If (l_split_flag2 <> 'N') THEN
255           l_costing_license := 'N';
256         END IF;
257       ELSIf (p_calling_flag IS NULL) THEN
258         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_CALLING_PAGE_SEL');
259         x_msg_data := 'PA_PS_NO_CALLING_PAGE_SEL';
260         RAISE FND_API.G_EXC_ERROR;
261       END IF;
262     END IF;
263 */
264 
265     --Check if multistructure is licensed.
266     l_multi_struc_license := 'Y'; --pa_install.is_product_licensed('PA_MULTISTRUCTURE_LICENSED');
267 
268 
269     --Replace dff values with null if not entered.
270     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL) THEN
271       l_attribute_category := p_attribute_category;
272     END IF;
273     IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN
274       l_attribute1 := p_attribute1;
275     END IF;
276     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN
277       l_attribute2 := p_attribute2;
278     END IF;
279     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN
280       l_attribute3 := p_attribute3;
281     END IF;
282     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN
283       l_attribute4 := p_attribute4;
284     END IF;
285     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN
286       l_attribute5 := p_attribute5;
287     END IF;
288     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN
289       l_attribute6 := p_attribute6;
290     END IF;
291     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN
292       l_attribute7 := p_attribute7;
293     END IF;
294     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN
295       l_attribute8 := p_attribute8;
296     END IF;
297     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN
298       l_attribute9 := p_attribute9;
299     END IF;
300     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN
301       l_attribute10 := p_attribute10;
302     END IF;
303     IF (p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute11 IS NULL) THEN
304       l_attribute11 := p_attribute11;
305     END IF;
306     IF (p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute12 IS NULL) THEN
307       l_attribute12 := p_attribute12;
308     END IF;
309     IF (p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute13 IS NULL) THEN
310       l_attribute13 := p_attribute13;
311     END IF;
312     IF (p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute14 IS NULL) THEN
313       l_attribute14 := p_attribute14;
314     END IF;
315     IF (p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute15 IS NULL) THEN
316       l_attribute15 := p_attribute15;
317     END IF;
318     --rtarway,3655698
319     IF (p_structure_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
320           l_structure_description := null;
321     else
322           l_structure_description :=  p_structure_description;
323     END IF;
324 
325     --Check if there is any error.
326     l_msg_count := FND_MSG_PUB.count_msg;
327     IF l_msg_count > 0 THEN
328       x_msg_count := l_msg_count;
329       IF x_msg_count = 1 THEN
330         x_msg_data := l_msg_data;
331       END IF;
332       RAISE FND_API.G_EXC_ERROR;
333     END IF;
334 
335     --Insert into pa_proj_elements
336     select PA_TASKS_S.NEXTVAL into l_proj_element_id from sys.dual;
337 
338     PA_PROJ_ELEMENTS_PKG.insert_row(
339      X_ROW_ID              => l_rowid
340     ,X_PROJ_ELEMENT_ID     => l_proj_element_id
341     ,X_PROJECT_ID          => p_project_id
342     ,X_OBJECT_TYPE     => 'PA_STRUCTURES'
343     ,X_ELEMENT_NUMBER      => to_char(l_proj_element_id)
344     ,X_NAME                => p_structure_name
345     ,X_DESCRIPTION     => l_structure_description--rtarway,3655698
346     ,X_STATUS_CODE     => NULL
347     ,X_WF_STATUS_CODE      => NULL
348     ,X_PM_PRODUCT_CODE     => NULL
349     ,X_PM_TASK_REFERENCE   => NULL
350     ,X_CLOSED_DATE     => NULL
351     ,X_LOCATION_ID     => NULL
352     ,X_MANAGER_PERSON_ID   => NULL
353     ,X_CARRYING_OUT_ORGANIZATION_ID => NULL
354     ,X_TYPE_ID               => NULL
355     ,X_PRIORITY_CODE       => NULL
356     ,X_INC_PROJ_PROGRESS_FLAG   => 'N'
357     ,X_REQUEST_ID            => NULL
358     ,X_PROGRAM_APPLICATION_ID => NULL
359     ,X_PROGRAM_ID            => NULL
360     ,X_PROGRAM_UPDATE_DATE => NULL
361     ,X_LINK_TASK_FLAG      => 'N'
362     ,X_ATTRIBUTE_CATEGORY  => l_attribute_category
363     ,X_ATTRIBUTE1            => l_attribute1
364     ,X_ATTRIBUTE2            => l_attribute2
365     ,X_ATTRIBUTE3            => l_attribute3
366     ,X_ATTRIBUTE4            => l_attribute4
367     ,X_ATTRIBUTE5            => l_attribute5
368     ,X_ATTRIBUTE6            => l_attribute6
369     ,X_ATTRIBUTE7            => l_attribute7
370     ,X_ATTRIBUTE8            => l_attribute8
371     ,X_ATTRIBUTE9            => l_attribute9
372     ,X_ATTRIBUTE10         => l_attribute10
373     ,X_ATTRIBUTE11         => l_attribute11
374     ,X_ATTRIBUTE12         => l_attribute12
375     ,X_ATTRIBUTE13         => l_attribute13
376     ,X_ATTRIBUTE14         => l_attribute14
377     ,X_ATTRIBUTE15         => l_attribute15
378     ,X_TASK_WEIGHTING_DERIV_CODE => NULL
379     ,X_WORK_ITEM_CODE            => NULL
380     ,X_UOM_CODE                  => NULL
381     ,X_WQ_ACTUAL_ENTRY_CODE      => NULL
382     ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
383     ,X_PARENT_STRUCTURE_ID => NULL
384     ,X_PHASE_CODE          => NULL
385     ,X_PHASE_VERSION_ID    => NULL
386         ,X_SOURCE_OBJECT_ID    => p_project_id
387     ,X_SOURCE_OBJECT_TYPE  => 'PA_PROJECTS'
388     );
389 
390     x_structure_id := l_proj_element_id;
391 
392 --dbms_output.put_line('done inserting to pa_proj_element');
393 
394     Open get_licensed(l_workplan_license, l_financial_license, l_deliverable_license);
395     IF (p_debug_mode = 'Y') THEN
396       pa_debug.debug('workplan license = '||l_workplan_license);
397       pa_debug.debug('financial license = '||l_financial_license);
398     END IF;
399 
400     LOOP
401       FETCH get_licensed into l_structure_type_id, l_structure_type;
402       EXIT WHEN get_licensed%NOTFOUND;
403 --dbms_output.put_line('begin inserting to struture type tbl');
404       IF (p_debug_mode = 'Y') THEN
405         pa_debug.debug('structure_type = '||l_structure_type);
406       END IF;
407       --check if structure type exists
408 
409       pa_project_structure_utils.Check_structure_Type_Exists(p_project_id,
410                                   l_structure_type,
411                                   l_return_status,
412                                   l_error_message_code);
413 --dbms_output.put_line(l_return_status||', '||l_error_message_code);
414       If (l_return_status <> 'S') THEN
415         PA_UTILS.ADD_MESSAGE('PA',l_error_message_code);
416         x_msg_data := l_error_message_code;
417         CLOSE get_licensed;
418         RAISE FND_API.G_EXC_ERROR;
419       END IF;
420 
421       IF (l_structure_type IN ('WORKPLAN','DELIVERABLE')) THEN
422         --Add pa_proj_workplan_attr row
423         PA_WORKPLAN_ATTR_PVT.CREATE_PROJ_WORKPLAN_ATTRS(
424            p_validate_only               => FND_API.G_FALSE
425           ,p_project_id                  => p_project_id
426           ,p_proj_element_id             => l_proj_element_id
427           ,p_approval_reqd_flag          => p_approval_reqd_flag
428           ,p_auto_publish_flag           => p_auto_publish_flag
429           ,p_approver_source_id          => p_approver_source_id
430           ,p_approver_source_type        => p_approver_source_type
431           ,p_default_display_lvl         => p_default_display_lvl
432           ,p_enable_wp_version_flag      => p_enable_wp_version_flag
433           ,p_auto_pub_upon_creation_flag => p_auto_pub_upon_creation_flag
434           ,p_auto_sync_txn_date_flag     => p_auto_sync_txn_date_flag
435           ,p_txn_date_sync_buf_days      => p_txn_date_sync_buf_days
436           ,p_lifecycle_version_id        => p_lifecycle_version_id
437           ,p_current_phase_version_id    => p_current_phase_version_id
438           ,x_return_status               => l_return_status
439           ,x_msg_count                   => x_msg_count
440           ,x_msg_data                    => x_msg_data
441         );
442 
443         IF (l_return_status <> 'S') THEN
444           RAISE FND_API.G_EXC_ERROR;
445         END IF;
446     /* Amit : Moving this code below as it will create project progress attribute records for Delievrables too
447         PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
448            p_validate_only       => FND_API.G_FALSE
449           ,p_project_id          => p_project_id
450           ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
451           ,P_OBJECT_ID           => l_proj_element_id
452           ,p_wq_enable_flag      => p_wq_enable_flag
453           ,p_progress_cycle_id   => p_progress_cycle_id
454           ,p_remain_effort_enable_flag => p_remain_effort_enable_flag
455           ,p_percent_comp_enable_flag => p_percent_comp_enable_flag
456           ,p_next_progress_update_date => p_next_progress_update_date
457           ,p_action_set_id       => p_action_set_id
458           ,p_task_weight_basis_code => p_task_weight_basis_code
459       ,p_structure_type        => l_structure_type  -- Amit
460           ,x_proj_progress_attr_id => l_proj_prog_attr_id
461           ,x_return_status       => l_return_status
462           ,x_msg_count           => x_msg_count
463           ,x_msg_data            => x_msg_data
464         );
465 
466         IF (l_return_status <> 'S') THEN
467           RAISE FND_API.G_EXC_ERROR;
468         END IF;
469     */
470 
471       END IF;
472 
473       IF (l_structure_type = 'WORKPLAN') THEN -- NOt Adding financial here as progress attr created thru enable_financial_structure
474         PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
475            p_validate_only       => FND_API.G_FALSE
476           ,p_project_id          => p_project_id
477           ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
478           ,P_OBJECT_ID           => l_proj_element_id
479           ,p_wq_enable_flag      => p_wq_enable_flag
480           ,p_progress_cycle_id   => p_progress_cycle_id
481           ,p_remain_effort_enable_flag => p_remain_effort_enable_flag
482           ,p_percent_comp_enable_flag => p_percent_comp_enable_flag
483           ,p_next_progress_update_date => p_next_progress_update_date
484           ,p_action_set_id       => p_action_set_id
485           ,p_task_weight_basis_code => p_task_weight_basis_code
486       ,p_structure_type        => l_structure_type  -- Amit
487           ,x_proj_progress_attr_id => l_proj_prog_attr_id
488           ,x_return_status       => l_return_status
489           ,x_msg_count           => x_msg_count
490           ,x_msg_data            => x_msg_data
491         );
492 
493         IF (l_return_status <> 'S') THEN
494           RAISE FND_API.G_EXC_ERROR;
495         END IF;
496       END IF;
497 
498       --Insert into pa_proj_structure_types
499       BEGIN
500       l_proj_structure_type_id := NULL;
501       PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
502        X_ROWID                   => l_rowid
503       , X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
504       , X_PROJ_ELEMENT_ID        => l_proj_element_id
505       , X_STRUCTURE_TYPE_ID      => l_structure_type_id
506       , X_RECORD_VERSION_NUMBER  => 1
507       , X_ATTRIBUTE_CATEGORY     => NULL
508       , X_ATTRIBUTE1             => NULL
509       , X_ATTRIBUTE2             => NULL
510       , X_ATTRIBUTE3             => NULL
511       , X_ATTRIBUTE4             => NULL
512       , X_ATTRIBUTE5             => NULL
513       , X_ATTRIBUTE6             => NULL
514       , X_ATTRIBUTE7             => NULL
515       , X_ATTRIBUTE8             => NULL
516       , X_ATTRIBUTE9             => NULL
517       , X_ATTRIBUTE10            => NULL
518       , X_ATTRIBUTE11            => NULL
519       , X_ATTRIBUTE12            => NULL
520       , X_ATTRIBUTE13            => NULL
521       , X_ATTRIBUTE14            => NULL
522       , X_ATTRIBUTE15            => NULL
523       );
524       EXCEPTION
525         WHEN OTHERS THEN
526           CLOSE get_licensed;
527           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
528       END;
529     END LOOP;
530 --dbms_output.put_line('done inserting to struture type tbl');
531 
532     CLOSE get_licensed;
533 
534     x_return_status := FND_API.G_RET_STS_SUCCESS;
535 
536     IF (p_debug_mode = 'Y') THEN
537       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE end');
538     END IF;
539 
540   EXCEPTION
541     WHEN FND_API.G_EXC_ERROR THEN
542       IF (p_commit = FND_API.G_TRUE) THEN
543         ROLLBACK to CREATE_STRUC_PRIVATE;
544       END IF;
545       x_msg_count := FND_MSG_PUB.count_msg;
546       x_return_status := FND_API.G_RET_STS_ERROR;
547     WHEN OTHERS THEN
548       IF (p_commit = FND_API.G_TRUE) THEN
549         ROLLBACK to CREATE_STRUC_PRIVATE;
550       END IF;
551       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
552       x_msg_count := FND_MSG_PUB.count_msg;
553       --put message
554       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
555                               p_procedure_name => 'Create_Structure',
556                               p_error_text     => SUBSTRB(SQLERRM,1,240));
557       RAISE;
558   END CREATE_STRUCTURE;
559 
560 
561 -- API name                      : Create_Structure_Version
562 -- Type                          : Private Procedure
563 -- Pre-reqs                      : None
564 -- Return Value                  : N/A
565 -- Parameters
566 --   p_api_version                       IN  NUMBER      := 1.0
567 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
568 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
569 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
570 --   p_validation_level                  IN  VARCHAR2    := 100
571 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
572 --   p_debug_mode                        IN  VARCHAR2    := 'N'
573 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
574 --   p_structure_id                      IN  NUMBER
575 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
576 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
577 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
578 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
579 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
580 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
581 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
582 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
583 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
584 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
585 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
586 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
587 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
588 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
589 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
590 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
591 --   x_structure_version_id  OUT  NUMBER
592 --   x_return_status     OUT     VARCHAR2
593 --   x_msg_count     OUT     NUMBER
594 --   x_msg_data  OUT     VARCHAR2
595 --
596 --  History
597 --
598 --  25-JUN-01   HSIU             -Created
599 --
600 --
601 
602 
603   procedure Create_Structure_Version
604   (
605    p_api_version                       IN  NUMBER      := 1.0
606    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
607    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
608    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
609    ,p_validation_level                  IN  VARCHAR2    := 100
610    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
611    ,p_debug_mode                        IN  VARCHAR2    := 'N'
612    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
613    ,p_structure_id                      IN  NUMBER
614    ,p_attribute_category                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
615    ,p_attribute1                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
616    ,p_attribute2                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
617    ,p_attribute3                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
618    ,p_attribute4                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
619    ,p_attribute5                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
620    ,p_attribute6                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
621    ,p_attribute7                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
622    ,p_attribute8                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
623    ,p_attribute9                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
624    ,p_attribute10                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
625    ,p_attribute11                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
626    ,p_attribute12                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
627    ,p_attribute13                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
628    ,p_attribute14                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
629    ,p_attribute15                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
630    ,x_structure_version_id              OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
631    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
632    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
633    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
634   )
635   IS
636      l_rowid VARCHAR2(255);
637      l_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE;
638 
639      l_msg_count NUMBER;
640      l_msg_data VARCHAR2(250);
641      -- added ofr Bug Fix: 4537865
642      l_new_structure_version_id     NUMBER;
643      -- added for Bug fix: 4537865
644 
645     l_attribute_category VARCHAR2(30) := NULL;
646     l_attribute1         VARCHAR2(150) := NULL;
647     l_attribute2         VARCHAR2(150) := NULL;
648     l_attribute3         VARCHAR2(150) := NULL;
649     l_attribute4         VARCHAR2(150) := NULL;
650     l_attribute5         VARCHAR2(150) := NULL;
651     l_attribute6         VARCHAR2(150) := NULL;
652     l_attribute7         VARCHAR2(150) := NULL;
653     l_attribute8         VARCHAR2(150) := NULL;
654     l_attribute9         VARCHAR2(150) := NULL;
655     l_attribute10        VARCHAR2(150) := NULL;
656     l_attribute11        VARCHAR2(150) := NULL;
657     l_attribute12        VARCHAR2(150) := NULL;
658     l_attribute13        VARCHAR2(150) := NULL;
659     l_attribute14        VARCHAR2(150) := NULL;
660     l_attribute15        VARCHAR2(150) := NULL;
661 
662     l_dummy              number;
663 
664     CURSOR getid is select project_id from pa_proj_elements
665                      where proj_element_id = p_structure_id;
666 
667     CURSOR cur_elem_ver_seq IS
668     SELECT pa_proj_element_versions_s.nextval
669       FROM sys.dual;
670 
671   BEGIN
672     IF (p_debug_mode = 'Y') THEN
673       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION begin');
674     END IF;
675 
676     IF (p_commit = FND_API.G_TRUE) THEN
677       savepoint CREATE_STRUC_VER_PVT;
678     END IF;
679 
680     IF (p_debug_mode = 'Y') THEN
681       pa_debug.debug('Performing validations');
682     END IF;
683 
684     --Get project id
685     OPEN getid;
686     FETCH getid into l_project_id;
687     IF (getid%NOTFOUND) THEN
688       CLOSE getid;
689       Raise NO_DATA_FOUND;
690     END IF;
691     CLOSE getid;
692 
693 
694     --Replace dff values
695     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL) THEN
696       l_attribute_category := p_attribute_category;
697     END IF;
698     IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN
699       l_attribute1 := p_attribute1;
700     END IF;
701     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN
702       l_attribute2 := p_attribute2;
703     END IF;
704     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN
705       l_attribute3 := p_attribute3;
706     END IF;
707     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN
708       l_attribute4 := p_attribute4;
709     END IF;
710     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN
711       l_attribute5 := p_attribute5;
712     END IF;
713     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN
714       l_attribute6 := p_attribute6;
715     END IF;
716     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN
717       l_attribute7 := p_attribute7;
718     END IF;
719     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN
720       l_attribute8 := p_attribute8;
721     END IF;
722     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN
723       l_attribute9 := p_attribute9;
724     END IF;
725     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN
726       l_attribute10 := p_attribute10;
727     END IF;
728     IF (p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute11 IS NULL) THEN
729       l_attribute11 := p_attribute11;
730     END IF;
731     IF (p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute12 IS NULL) THEN
732       l_attribute12 := p_attribute12;
733     END IF;
734     IF (p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute13 IS NULL) THEN
735       l_attribute13 := p_attribute13;
736     END IF;
737     IF (p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute14 IS NULL) THEN
738       l_attribute14 := p_attribute14;
739     END IF;
740     IF (p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute15 IS NULL) THEN
741       l_attribute15 := p_attribute15;
742     END IF;
743 
744     --Check if there is any error.
745     l_msg_count := FND_MSG_PUB.count_msg;
746     IF l_msg_count > 0 THEN
747       x_msg_count := l_msg_count;
748       IF x_msg_count = 1 THEN
749         x_msg_data := l_msg_data;
750       END IF;
751       RAISE FND_API.G_EXC_ERROR;
752     END IF;
753 
754 
755     --If no error,
756     --Get structure version id
757     OPEN cur_elem_ver_seq;
758     FETCH cur_elem_ver_seq INTO x_structure_version_id;
759     CLOSE cur_elem_ver_seq;
760 
761     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
762     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
763     -- to  x_structure_version_id
764 
765     l_new_structure_version_id := x_structure_version_id ;
766 
767     -- End 4657794
768 
769 --    error_msg(x_structure_version_id||' new structure version id, '||p_structure_id||', '||l_project_id);
770     --Insert
771     PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
772        X_ROW_ID                       => l_rowid
773     --,X_ELEMENT_VERSION_ID           => x_structure_version_id         * Commenmted for Bug Fix: 4537865
774       ,X_ELEMENT_VERSION_ID       => l_new_structure_version_id     -- added for bug bug Fix: 4537865
775       ,X_PROJ_ELEMENT_ID              => p_structure_id
776       ,X_OBJECT_TYPE                  => 'PA_STRUCTURES'
777       ,X_PROJECT_ID                   => l_project_id
778       ,X_PARENT_STRUCTURE_VERSION_ID  => x_structure_version_id
779       ,X_DISPLAY_SEQUENCE             => NULL
780       ,X_WBS_LEVEL                    => NULL
781       ,X_WBS_NUMBER                   => '0'
782       ,X_ATTRIBUTE_CATEGORY           => l_attribute_category
783       ,X_ATTRIBUTE1                   => l_attribute1
784       ,X_ATTRIBUTE2                   => l_attribute2
785       ,X_ATTRIBUTE3                   => l_attribute3
786       ,X_ATTRIBUTE4                   => l_attribute4
787       ,X_ATTRIBUTE5                   => l_attribute5
788       ,X_ATTRIBUTE6                   => l_attribute6
789       ,X_ATTRIBUTE7                   => l_attribute7
790       ,X_ATTRIBUTE8                   => l_attribute8
791       ,X_ATTRIBUTE9                   => l_attribute9
792       ,X_ATTRIBUTE10                  => l_attribute10
793       ,X_ATTRIBUTE11                  => l_attribute11
794       ,X_ATTRIBUTE12                  => l_attribute12
795       ,X_ATTRIBUTE13                  => l_attribute13
796       ,X_ATTRIBUTE14                  => l_attribute14
797       ,X_ATTRIBUTE15                  => l_attribute15
798       ,X_TASK_UNPUB_VER_STATUS_CODE   => NULL
799             ,X_SOURCE_OBJECT_ID             => l_project_id
800       ,X_SOURCE_OBJECT_TYPE           => 'PA_PROJECTS'
801     );
802     -- added for bug bug Fix: 4537865
803     x_structure_version_id := l_new_structure_version_id;
804     -- added for bug bug Fix: 4537865
805 
806     select element_version_id into l_dummy from pa_proj_element_versions where element_version_id = x_structure_version_id;
807 --    error_msg('element_version_id = '||l_dummy);
808 --    error_msg('rowid = '||l_rowid);
809    -- Added by skannoji
810    -- added for doosan customer to add the planning transaction
811      IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(x_structure_version_id, 'WORKPLAN') = 'Y') THEN
812         /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
813         /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block        */
814         BEGIN
815             PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
816               (
817                 p_context                => 'WORKPLAN'
818                ,p_project_id             => l_project_id
819                ,p_struct_elem_version_id => x_structure_version_id
820                ,x_return_status          => x_return_status
821                ,x_msg_count              => x_msg_count
822                ,x_Msg_data               => x_msg_data
823               );
824          EXCEPTION
825             WHEN OTHERS THEN
826                  fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
827                                          p_procedure_name => 'CREATE_STRUCTURE_VERSION',
828                                          p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
829             RAISE FND_API.G_EXC_ERROR;
830          END;
831       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
832          RAISE FND_API.G_EXC_ERROR;
833       END IF;
834      END IF;
835      -- till here by skannoji
836 
837     x_return_status := FND_API.G_RET_STS_SUCCESS;
838 
839     IF (p_debug_mode = 'Y') THEN
840       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION end');
841     END IF;
842 
843   EXCEPTION
844     WHEN FND_API.G_EXC_ERROR THEN
845       if p_commit = FND_API.G_TRUE THEN
846         rollback to CREATE_STRUC_VER_PVT;
847       end if;
848       x_msg_count := FND_MSG_PUB.count_msg;
849       x_return_status := FND_API.G_RET_STS_ERROR;
850     WHEN NO_DATA_FOUND THEN
851       if p_commit = FND_API.G_TRUE THEN
852         rollback to CREATE_STRUC_VER_PVT;
853       end if;
854       x_return_status := FND_API.G_RET_STS_ERROR;
855 
856     WHEN OTHERS THEN
857       if p_commit = FND_API.G_TRUE THEN
858         rollback to CREATE_STRUC_VER_PVT;
859       end if;
860       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
861       fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
862                               p_procedure_name => 'CREATE_STRUCTURE_VERSION',
863                               p_error_text => SUBSTRB(SQLERRM,1,240));
864       RAISE;
865   END CREATE_STRUCTURE_VERSION;
866 
867 
868 -- API name                      : Create_Structure_Version_Attr
869 -- Type                          : Private Procedure
870 -- Pre-reqs                      : None
871 -- Return Value                  : N/A
872 -- Parameters
873 --   p_api_version                       IN  NUMBER      := 1.0
874 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
875 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
876 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
877 --   p_validation_level                  IN  VARCHAR2    := 100
878 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
879 --   p_debug_mode                        IN  VARCHAR2    := 'N'
880 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
881 --   p_structure_version_id IN  NUMBER
882 --   p_structure_version_name   IN  VARCHAR2
883 --   p_structure_version_desc   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
884 --   p_effective_date   IN  DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
885 --   p_latest_eff_published_flag    IN  VARCHAR2 := 'N'
886 --   p_published_flag   IN  VARCHAR2 := 'N'
887 --   p_locked_status_code   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
888 --   p_struct_version_status_code   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
889 --   p_baseline_current_flag    IN  VARCHAR2 := 'N'
890 --   p_baseline_original_flag   IN  VARCHAR2 := 'N'
891 --   x_pev_structure_id OUT NUMBER
892 --   x_return_status     OUT     VARCHAR2
893 --   x_msg_count     OUT     NUMBER
894 --   x_msg_data  OUT     VARCHAR2
895 --
896 --  History
897 --
898 --  25-JUN-01   HSIU             -Created
899 --  21-JUN-02   HSIU             Added change_reason_code
900 --
901 
902 
903   procedure Create_Structure_Version_Attr
904   (
905    p_api_version                       IN  NUMBER      := 1.0
906    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
907    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
908    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
909    ,p_validation_level                  IN  VARCHAR2    := 100
910    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
911    ,p_debug_mode                        IN  VARCHAR2    := 'N'
912    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
913    ,p_structure_version_id              IN  NUMBER
914    ,p_structure_version_name            IN  VARCHAR2
915    ,p_structure_version_desc            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
916    ,p_effective_date                    IN  DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
917    ,p_latest_eff_published_flag         IN  VARCHAR2 := 'N'
918    ,p_published_flag                    IN  VARCHAR2 := 'N'
919    ,p_locked_status_code                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
920    ,p_struct_version_status_code        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
921    ,p_baseline_current_flag             IN  VARCHAR2 := 'N'
922    ,p_baseline_original_flag              IN  VARCHAR2 := 'N'
923    ,p_change_reason_code                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
924    ,x_pev_structure_id                  OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
925    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
926    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
927    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
928   )
929   IS
930 
931     l_rowid              VARCHAR2(255);
932     l_project_id         PA_PROJECTS_ALL.PROJECT_ID%TYPE;
933     l_proj_element_id    PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
934     l_return_status      VARCHAR2(1);
935     l_msg_count          NUMBER;
936     l_msg_data           VARCHAR2(250);
937 
938 
939     l_status_code                VARCHAR2(30) := 'STRUCTURE_WORKING';
940 
941     l_latest_eff_published_flag  VARCHAR2(1)  := 'N';
942     l_published_date             DATE         := NULL;
943     l_published_person_id        NUMBER;
944     l_effective_date             DATE         := NULL;
945     l_current_baseline_date      DATE         := NULL;
946     l_cur_baseline_person_id     NUMBER;
947     l_current_flag               VARCHAR2(1)  := 'N';
948     l_original_baseline_date     DATE         := NULL;
949     l_orig_baseline_person_id    NUMBER;
950     l_original_flag              VARCHAR2(1)  := 'N';
951     l_struc_ver_number           NUMBER;
952     l_change_reason_code         PA_PROJ_ELEM_VER_STRUCTURE.CHANGE_REASON_CODE%TYPE;
953     l_dummy                      VARCHAR2(1);
954     --rtarway, 3655698
955     l_structure_version_desc     VARCHAR2(2000);
956 
957     cursor get_person_id(p_user_id NUMBER) IS
958     select p.person_id
959       from per_all_people_f p, fnd_user f
960      where f.employee_id = p.person_id
961        and sysdate between p.effective_start_date and p.effective_end_date
962        and f.user_id = p_user_id;
963 
964     cursor getids is select project_id, proj_element_id from pa_proj_element_versions
965                      where element_version_id = p_structure_version_id;
966 
967     cursor get_published_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
968     select nvl(max(version_number),0)+1
969       from pa_proj_elem_ver_structure
970      where project_id = c_project_id
971        and proj_element_id = c_proj_element_id
972        and status_code = 'STRUCTURE_PUBLISHED';
973 
974     cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
975     select nvl(max(version_number),0)+1
976       from pa_proj_elem_ver_structure
977      where project_id = c_project_id
978        and proj_element_id = c_proj_element_id
979        and status_code <> 'STRUCTURE_PUBLISHED';
980 
981      CURSOR check_financial_type(c_structure_id NUMBER) IS
982      select '1'
983        from pa_proj_structure_types p, pa_structure_types s
984       where s.structure_type_class_code IN ('FINANCIAL')
985         and s.structure_type_id = p.structure_type_id
986         and p.proj_element_id = c_structure_id;
987 
988      CURSOR check_working_ver_exists(c_project_id NUMBER, c_structure_id NUMBER) IS
989      select '1'
990        from pa_proj_elem_ver_structure
991       where project_id = c_project_id
992         and proj_element_id = c_structure_id
993         and status_code <> 'STRUCTURE_PUBLISHED';
994 
995     l_current_working_ver_flag   VARCHAR2(1);  --FPM bug 3301192
996 
997   BEGIN
998     IF (p_debug_mode = 'Y') THEN
999       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION_ATTR begin');
1000     END IF;
1001 
1002     IF (p_commit = FND_API.G_TRUE) THEN
1003       savepoint CREATE_STRUC_VER_ATTR_PVT;
1004     END IF;
1005 
1006     IF (p_debug_mode = 'Y') THEN
1007       pa_debug.debug('Performing validations');
1008     END IF;
1009 
1010     OPEN getids;
1011     FETCH getids into l_project_id, l_proj_element_id;
1012     IF (getids%NOTFOUND) THEN
1013       CLOSE getids;
1014       Raise NO_DATA_FOUND;
1015     END IF;
1016     CLOSE getids;
1017 
1018 
1019     --Check if name unique
1020     IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(p_structure_version_name,
1021                                                                       null,
1022                                                                       l_project_id,
1023                                                                       l_proj_element_id)) THEN
1024       PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
1025       x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
1026       RAISE FND_API.G_EXC_ERROR;
1027     END IF;
1028 
1029   IF (p_published_flag = 'Y' or p_struct_version_status_code =
1030       'STRUCTURE_PUBLISHED') THEN
1031       --Creating a publish structure
1032 
1033       --Get structure version number
1034       OPEN get_published_ver_num(l_project_id, l_proj_element_id);
1035       FETCH get_published_ver_num INTO l_struc_ver_number;
1036       CLOSE get_published_ver_num;
1037 
1038 --      IF (p_published_flag = 'Y') THEN
1039       l_status_code := 'STRUCTURE_PUBLISHED';
1040       l_published_date := sysdate;
1041 
1042       --get published person id
1043       open get_person_id(FND_GLOBAL.USER_ID);
1044       fetch get_person_id into l_published_person_id;
1045       IF get_person_id%NOTFOUND then
1046         l_published_person_id := -1;
1047       END IF;
1048       close get_person_id;
1049 
1050       l_effective_date := l_published_date;
1051       l_latest_eff_published_flag := 'Y';
1052 
1053       --set others with lastest_eff_published_flag to 'N'
1054       update pa_proj_elem_ver_structure
1055       set latest_eff_published_flag = 'N',
1056           record_version_number = record_version_number + 1
1057       where project_id = l_project_id
1058         and proj_element_id = l_proj_element_id
1059         and latest_eff_published_flag = 'Y';
1060 
1061       IF (p_baseline_current_flag = 'Y') THEN
1062         --set date, person_id, flag
1063         l_current_baseline_date := l_published_date;
1064         l_current_flag := 'Y';
1065         l_cur_baseline_person_id := l_published_person_id;
1066 
1067         --clear flags in other versions.
1068         update pa_proj_elem_ver_structure
1069         set current_flag = 'N',
1070             current_baseline_date = NULL,
1071             current_baseline_person_id = NULL,
1072             record_version_number = record_version_number + 1
1073         where project_id = l_project_id
1074           and proj_element_id = l_proj_element_id
1075           and current_flag = 'Y';
1076 
1077 
1078         --Call baseline_structure_version API if workplan
1079         IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
1080           PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
1081                        p_commit => FND_API.G_FALSE,
1082                        p_structure_version_id => p_structure_version_id,
1083                        x_return_status => l_return_status,
1084                        x_msg_count => l_msg_count,
1085                        x_msg_data => l_msg_data);
1086 
1087           If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1088             x_msg_count := FND_MSG_PUB.count_msg;
1089             if x_msg_count = 1 then
1090               x_msg_data := l_msg_data;
1091             end if;
1092             raise FND_API.G_EXC_ERROR;
1093           end if;
1094 
1095         END IF;
1096 
1097 
1098 
1099 
1100       END IF;
1101       IF (p_baseline_original_flag = 'Y') THEN
1102         --set date, person_id, flag
1103         l_original_baseline_date := l_published_date;
1104         l_original_flag := 'Y';
1105         l_orig_baseline_person_id := l_published_person_id;
1106 
1107         --clear flags in other versions.
1108         update pa_proj_elem_ver_structure
1109         set original_flag = 'N',
1110             original_baseline_date = NULL,
1111             original_baseline_person_id = NULL,
1112             record_version_number = record_version_number + 1
1113         where project_id = l_project_id
1114           and proj_element_id = l_proj_element_id
1115           and original_flag = 'Y';
1116 
1117       END IF;
1118 
1119 /*
1120       ELSE
1121         l_status_code := p_struct_version_status_code;
1122         l_current_flag := p_baseline_current_flag;
1123         l_original_flag := p_baseline_original_flag;
1124         l_latest_eff_published_flag := p_latest_eff_published_flag;
1125         l_published_date := sysdate;
1126         l_published_person_id := NULL;
1127         l_effective_date := sysdate;
1128 
1129         IF (l_status_code = 'STRUCTURE_PUBLISHED') THEN
1130           open get_person_id(FND_GLOBAL.USER_ID);
1131           fetch get_person_id into l_published_person_id;
1132           IF get_person_id%NOTFOUND then
1133             l_published_person_id := NULL;
1134           END IF;
1135           close get_person_id;
1136 
1137           --set others with lastest_eff_published_flag to 'N'
1138           update pa_proj_elem_ver_structure
1139           set latest_eff_published_flag = 'N',
1140               record_version_number = record_version_number + 1
1141           where project_id = l_project_id
1142             and proj_element_id = l_proj_element_id
1143             and latest_eff_published_flag = 'Y';
1144 
1145           IF (p_baseline_current_flag = 'Y') THEN
1146             --set date, person_id, flag
1147             l_current_baseline_date := l_published_date;
1148             l_current_flag := 'Y';
1149             l_cur_baseline_person_id := l_published_person_id;
1150 
1151             --clear flags in other versions.
1152             update pa_proj_elem_ver_structure
1153             set current_flag = 'N',
1154                 current_baseline_date = NULL,
1155                 current_baseline_person_id = NULL,
1156                 record_version_number = record_version_number + 1
1157             where project_id = l_project_id
1158               and proj_element_id = l_proj_element_id
1159               and current_flag = 'Y';
1160 
1161 
1162             --Call baseline_structure_version API if workplan
1163             IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
1164               PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
1165                        p_commit => FND_API.G_FALSE,
1166                        p_structure_version_id => p_structure_version_id,
1167                        x_return_status => l_return_status,
1168                        x_msg_count => l_msg_count,
1169                        x_msg_data => l_msg_data);
1170 
1171               If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1172                 x_msg_count := FND_MSG_PUB.count_msg;
1173                 if x_msg_count = 1 then
1174                   x_msg_data := l_msg_data;
1175                 end if;
1176                 raise FND_API.G_EXC_ERROR;
1177               end if;
1178 
1179             END IF;
1180           END IF;
1181 
1182 
1183         END IF;
1184       END IF;
1185 */
1186     ELSE
1187       --Creating a non-published structure
1188 
1189       --Check if this structure contains financial structure type
1190       OPEN check_financial_type(l_proj_element_id);
1191       FETCH check_financial_type INTO l_dummy;
1192       --If not found, then this is not a financial structure. Continue.
1193       IF check_financial_type%FOUND THEN
1194 
1195         --this is a financial structure. Check if there is a non published version
1196         OPEN check_working_ver_exists(l_project_id, l_proj_element_id);
1197         FETCH check_working_ver_exists into l_dummy;
1198         If check_working_ver_exists%FOUND THEN
1199 
1200           --another non-published version exists for structure with type = costing/billing.
1201           --Error.
1202           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_ONE_WORK_VER_ALLOWED');
1203           x_msg_data := 'PA_PS_ONE_WORK_VER_ALLOWED';
1204           RAISE FND_API.G_EXC_ERROR;
1205         END IF;
1206         CLOSE check_working_ver_exists;
1207       END IF;
1208 
1209     CLOSE check_financial_type;
1210 
1211 
1212       --Get structure version number
1213       OPEN get_working_ver_num(l_project_id, l_proj_element_id);
1214       FETCH get_working_ver_num INTO l_struc_ver_number;
1215       CLOSE get_working_ver_num;
1216       l_status_code := 'STRUCTURE_WORKING';
1217     END IF;
1218 
1219     --Check if there is any error.
1220     l_msg_count := FND_MSG_PUB.count_msg;
1221     IF l_msg_count > 0 THEN
1222       x_msg_count := l_msg_count;
1223       IF x_msg_count = 1 THEN
1224         x_msg_data := l_msg_data;
1225       END IF;
1226       RAISE FND_API.G_EXC_ERROR;
1227     END IF;
1228 
1229     IF (p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1230       l_change_reason_code := NULL;
1231     ELSE
1232       l_change_reason_code := p_change_reason_code;
1233     END IF;
1234 
1235 
1236     --FPM bug 3301192
1237     --Find out if there is already a working version( a structure with status other PUBLISHED is a working version)?
1238     OPEN check_working_ver_exists(l_project_id, l_proj_element_id);
1239     FETCH check_working_ver_exists INTO l_current_working_ver_flag;
1240     IF check_working_ver_exists%FOUND
1241     THEN
1242        l_current_working_ver_flag := 'N';
1243     ELSE
1244        l_current_working_ver_flag := 'Y';
1245     END IF;
1246     CLOSE check_working_ver_exists;
1247     --End FPM bug 3301192
1248 
1249     --rtarway,3655698
1250     IF ( p_structure_version_desc = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1251     THEN
1252           l_structure_version_desc := null;
1253     ELSE
1254           l_structure_version_desc  :=  p_structure_version_desc;
1255     end if;
1256 
1257     PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
1258      X_ROWID                       => l_rowid
1259    , X_PEV_STRUCTURE_ID            => x_pev_structure_id
1260    , X_ELEMENT_VERSION_ID          => p_structure_version_id
1261    , X_VERSION_NUMBER              => l_struc_ver_number
1262    , X_NAME                        => p_structure_version_name
1263    , X_PROJECT_ID                  => l_project_id
1264    , X_PROJ_ELEMENT_ID             => l_proj_element_id
1265    , X_DESCRIPTION                 => l_structure_version_desc  -- rtarway, 3655698
1266    , X_EFFECTIVE_DATE              => l_effective_date
1267    , X_PUBLISHED_DATE              => l_published_date
1268    , X_PUBLISHED_BY                => l_published_person_id
1269    , X_CURRENT_BASELINE_DATE       => l_current_baseline_date
1270    , X_CURRENT_BASELINE_FLAG       => l_current_flag
1271    , X_CURRENT_BASELINE_BY         => l_cur_baseline_person_id
1272    , X_ORIGINAL_BASELINE_DATE      => l_original_baseline_date
1273    , X_ORIGINAL_BASELINE_FLAG      => l_original_flag
1274    , X_ORIGINAL_BASELINE_BY        => l_orig_baseline_person_id
1275    , X_LOCK_STATUS_CODE            => NULL
1276    , X_LOCKED_BY                   => NULL
1277    , X_LOCKED_DATE                 => NULL
1278    , X_STATUS_CODE                 => l_status_code
1279    , X_WF_STATUS_CODE              => NULL
1280    , X_LATEST_EFF_PUBLISHED_FLAG   => l_latest_eff_published_flag
1281    , X_CHANGE_REASON_CODE          => l_change_reason_code
1282    , X_RECORD_VERSION_NUMBER       => 1
1283    , X_CURRENT_WORKING_FLAG        => l_current_working_ver_flag   --FPM bug 3301192
1284      , X_SOURCE_OBJECT_ID            => l_project_id
1285    , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
1286     );
1287 
1288     --bug 3010538
1289     --set update flag to Y if weighting basis is DURATION or EFFORT
1290 /*  --not necessary when empty
1291     IF (PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_project_id) <> 'MANUAL') THEN
1292       --need to set update flag to Y
1293       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
1294                                p_project_id => l_project_id,
1295                                p_structure_version_id => p_structure_version_id,
1296                                p_update_wbs_flag => 'Y',
1297                                x_return_status => l_return_status,
1298                                x_msg_count => l_msg_count,
1299                                x_msg_data => l_msg_data
1300                              );
1301       If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1302         x_msg_count := FND_MSG_PUB.count_msg;
1303         if x_msg_count = 1 then
1304           x_msg_data := l_msg_data;
1305         end if;
1306         raise FND_API.G_EXC_ERROR;
1307       end if;
1308     END IF;
1309 */
1310     --end bug 3010538
1311 
1312     x_return_status := FND_API.G_RET_STS_SUCCESS;
1313 
1314     IF (p_debug_mode = 'Y') THEN
1315       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION_ATTR end');
1316     END IF;
1317 
1318   EXCEPTION
1319     WHEN FND_API.G_EXC_ERROR THEN
1320       if p_commit = FND_API.G_TRUE THEN
1321         rollback to CREATE_STRUC_VER_ATTR_PVT;
1322       end if;
1323       x_msg_count := FND_MSG_PUB.count_msg;
1324       x_return_status := FND_API.G_RET_STS_ERROR;
1325     WHEN NO_DATA_FOUND THEN
1326       if p_commit = FND_API.G_TRUE THEN
1327         rollback to CREATE_STRUC_VER_ATTR_PVT;
1328       end if;
1329       x_return_status := FND_API.G_RET_STS_ERROR;
1330     WHEN OTHERS THEN
1331       if p_commit = FND_API.G_TRUE THEN
1332         rollback to CREATE_STRUC_VER_ATTR_PVT;
1333       end if;
1334       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1335       fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
1336                               p_procedure_name => 'CREATE_STRUCTURE_VERSION_ATTR',
1337                               p_error_text => SUBSTRB(SQLERRM,1,240));
1338       RAISE;
1339   END CREATE_STRUCTURE_VERSION_ATTR;
1340 
1341 
1342 -- API name                      : Update_Structure
1343 -- Type                          : Private Procedure
1344 -- Pre-reqs                      : None
1345 -- Return Value                  : N/A
1346 -- Parameters
1347 --   p_api_version                       IN  NUMBER      := 1.0
1348 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1349 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1350 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1351 --   p_validation_level                  IN  VARCHAR2    := 100
1352 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1353 --   p_debug_mode                        IN  VARCHAR2    := 'N'
1354 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1355 --   p_structure_id  IN  NUMBER
1356 --   p_structure_number  IN  VARCHAR2 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1357 --   p_structure_name    IN  VARCHAR2
1358 --   p_description   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1359 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1360 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1361 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1362 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1363 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1364 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1365 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1366 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1367 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1368 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1369 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1370 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1371 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1372 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1373 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1374 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1375 --   p_record_version_number  IN  NUMBER
1376 --   x_return_status     OUT     VARCHAR2
1377 --   x_msg_count     OUT     NUMBER
1378 --   x_msg_data  OUT     VARCHAR2
1379 --
1380 --  History
1381 --
1382 --  25-JUN-01   HSIU             -Created
1383 --
1384 --
1385 
1386 
1387   procedure Update_Structure
1388   (
1389    p_api_version                       IN  NUMBER      := 1.0
1390    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1391    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1392    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1393    ,p_validation_level                  IN  VARCHAR2    := 100
1394    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1395    ,p_debug_mode                        IN  VARCHAR2    := 'N'
1396    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1397    ,p_structure_id                      IN  NUMBER
1398    ,p_structure_number                  IN  VARCHAR2 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1399    ,p_structure_name                    IN  VARCHAR2
1400    ,p_description                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1401    ,p_attribute_category                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1402    ,p_attribute1                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1403    ,p_attribute2                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1404    ,p_attribute3                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1405    ,p_attribute4                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1406    ,p_attribute5                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1407    ,p_attribute6                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1408    ,p_attribute7                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1409    ,p_attribute8                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1410    ,p_attribute9                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1411    ,p_attribute10                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1412    ,p_attribute11                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1413    ,p_attribute12                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1414    ,p_attribute13                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1415    ,p_attribute14                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1416    ,p_attribute15                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1417    ,p_record_version_number             IN  NUMBER
1418    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1419    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
1420    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1421   )
1422   IS
1423 
1424     l_rowid              VARCHAR2(255);
1425     l_project_id         PA_PROJECTS_ALL.PROJECT_ID%TYPE;
1426     l_proj_element_id    PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1427     l_msg_count          NUMBER;
1428     l_msg_data           VARCHAR2(250);
1429 
1430 
1431     l_element_number     PA_PROJ_ELEMENTS.element_number%TYPE;
1432     l_name               PA_PROJ_ELEMENTS.name%TYPE;
1433     l_description        PA_PROJ_ELEMENTS.description%TYPE;
1434     l_attribute_category VARCHAR2(30);
1435     l_attribute1         VARCHAR2(150);
1436     l_attribute2         VARCHAR2(150);
1437     l_attribute3         VARCHAR2(150);
1438     l_attribute4         VARCHAR2(150);
1439     l_attribute5         VARCHAR2(150);
1440     l_attribute6         VARCHAR2(150);
1441     l_attribute7         VARCHAR2(150);
1442     l_attribute8         VARCHAR2(150);
1443     l_attribute9         VARCHAR2(150);
1444     l_attribute10        VARCHAR2(150);
1445     l_attribute11        VARCHAR2(150);
1446     l_attribute12        VARCHAR2(150);
1447     l_attribute13        VARCHAR2(150);
1448     l_attribute14        VARCHAR2(150);
1449     l_attribute15        VARCHAR2(150);
1450 
1451 
1452     CURSOR get_struc IS
1453       select rowid,
1454              project_id,
1455              element_number,
1456              name,
1457              description,
1458              attribute_category,
1459              attribute1,
1460              attribute2,
1461              attribute3,
1462              attribute4,
1463              attribute5,
1464              attribute6,
1465              attribute7,
1466              attribute8,
1467              attribute9,
1468              attribute10,
1469              attribute11,
1470              attribute12,
1471              attribute13,
1472              attribute14,
1473              attribute15
1474         from pa_proj_elements
1475        where proj_element_id = p_structure_id;
1476   BEGIN
1477     IF (p_debug_mode = 'Y') THEN
1478       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE begin');
1479     END IF;
1480 
1481     IF (p_commit = FND_API.G_TRUE) then
1482       savepoint update_structure_pvt;
1483     END IF;
1484 
1485     --Get existing values.
1486     OPEN get_struc;
1487     FETCH get_struc into l_rowid,
1488                          l_project_id,
1489                          l_element_number,
1490                          l_name,
1491                          l_description,
1492                          l_attribute_category,
1493                          l_attribute1,
1494                          l_attribute2,
1495                          l_attribute3,
1496                          l_attribute4,
1497                          l_attribute5,
1498                          l_attribute6,
1499                          l_attribute7,
1500                          l_attribute8,
1501                          l_attribute9,
1502                          l_attribute10,
1503                          l_attribute11,
1504                          l_attribute12,
1505                          l_attribute13,
1506                          l_attribute14,
1507                          l_attribute15;
1508     IF (get_struc%NOTFOUND) THEN
1509       PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_NOT_EXIST');
1510       x_msg_data := 'PA_PS_STRUC_NOT_EXIST';
1511       RAISE FND_API.G_EXC_ERROR;
1512     END IF;
1513     CLOSE get_struc;
1514 
1515 
1516     --Check if there is any error.
1517     l_msg_count := FND_MSG_PUB.count_msg;
1518     IF l_msg_count > 0 THEN
1519       x_msg_count := l_msg_count;
1520       IF x_msg_count = 1 THEN
1521         x_msg_data := l_msg_data;
1522       END IF;
1523       RAISE FND_API.G_EXC_ERROR;
1524     END IF;
1525 
1526     IF (p_debug_mode = 'Y') THEN
1527       pa_debug.debug('l_name = '||l_name);
1528       pa_debug.debug('p_structure_name = '||p_structure_name);
1529     END IF;
1530 
1531     --Check if structure name is unique, if changed.
1532     IF (l_name <> p_structure_name) then
1533       IF (p_debug_mode = 'Y') THEN
1534         pa_debug.debug('different!!');
1535       END IF;
1536       IF ('Y' <> pa_project_structure_utils.Check_Structure_Name_Unique(p_structure_name,
1537                                                p_structure_id,
1538                                                l_project_id)) THEN
1539         --name not unique.
1540         PA_UTILS.ADD_MESSAGE('PA', 'PS_STRUC_NAME_UNIQUE');
1541         x_msg_data := 'PA_PS_STRUC_NAME_UNIQUE';
1542         RAISE FND_API.G_EXC_ERROR;
1543       ELSE
1544         l_name := p_structure_name;
1545       END IF;
1546     END IF;
1547 
1548     --Replace values, if entered.
1549     IF (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL) THEN
1550       l_description := p_description;
1551     END IF;
1552     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL) THEN
1553       l_attribute_category := p_attribute_category;
1554     END IF;
1555     IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN
1556       l_attribute1 := p_attribute1;
1557     END IF;
1558     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN
1559       l_attribute2 := p_attribute2;
1560     END IF;
1561     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN
1562       l_attribute3 := p_attribute3;
1563     END IF;
1564     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN
1565       l_attribute4 := p_attribute4;
1566     END IF;
1567     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN
1568       l_attribute5 := p_attribute5;
1569     END IF;
1570     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN
1571       l_attribute6 := p_attribute6;
1572     END IF;
1573     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN
1574       l_attribute7 := p_attribute7;
1575     END IF;
1576     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN
1577       l_attribute8 := p_attribute8;
1578     END IF;
1579     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN
1580       l_attribute9 := p_attribute9;
1581     END IF;
1582     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN
1583       l_attribute10 := p_attribute10;
1584     END IF;
1585     IF (p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute11 IS NULL) THEN
1586       l_attribute11 := p_attribute11;
1587     END IF;
1588     IF (p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute12 IS NULL) THEN
1589       l_attribute12 := p_attribute12;
1590     END IF;
1591     IF (p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute13 IS NULL) THEN
1592       l_attribute13 := p_attribute13;
1593     END IF;
1594     IF (p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute14 IS NULL) THEN
1595       l_attribute14 := p_attribute14;
1596     END IF;
1597     IF (p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute15 IS NULL) THEN
1598       l_attribute15 := p_attribute15;
1599     END IF;
1600 
1601     --Check if there is any error.
1602     l_msg_count := FND_MSG_PUB.count_msg;
1603     IF l_msg_count > 0 THEN
1604       x_msg_count := l_msg_count;
1605       IF x_msg_count = 1 THEN
1606         x_msg_data := l_msg_data;
1607       END IF;
1608       RAISE FND_API.G_EXC_ERROR;
1609     END IF;
1610 
1611     PA_PROJ_ELEMENTS_PKG.UPDATE_ROW(
1612        X_ROW_ID                  => l_rowid
1613       ,X_PROJ_ELEMENT_ID         => p_structure_id
1614       ,X_PROJECT_ID              => l_project_id
1615       ,X_OBJECT_TYPE             => 'PA_STRUCTURES'
1616       ,X_ELEMENT_NUMBER          => to_char(p_structure_id)
1617       ,X_NAME                    => l_name
1618       ,X_DESCRIPTION             => l_description
1619       ,X_STATUS_CODE             => NULL
1620       ,X_WF_STATUS_CODE          => NULL
1621       ,X_PM_PRODUCT_CODE         => NULL
1622       ,X_PM_TASK_REFERENCE       => NULL
1623       ,X_CLOSED_DATE             => NULL
1624       ,X_LOCATION_ID             => NULL
1625       ,X_MANAGER_PERSON_ID       => NULL
1626       ,X_CARRYING_OUT_ORGANIZATION_ID => NULL
1627       ,X_TYPE_ID                 => NULL
1628       ,X_PRIORITY_CODE           => NULL
1629       ,X_INC_PROJ_PROGRESS_FLAG  => NULL
1630       ,X_RECORD_VERSION_NUMBER   => p_record_version_number
1631       ,X_REQUEST_ID              => NULL
1632       ,X_PROGRAM_APPLICATION_ID  => NULL
1633       ,X_PROGRAM_ID              => NULL
1634       ,X_PROGRAM_UPDATE_DATE     => NULL
1635       ,X_ATTRIBUTE_CATEGORY      => l_attribute_category
1636       ,X_ATTRIBUTE1              => l_attribute1
1637       ,X_ATTRIBUTE2              => l_attribute2
1638       ,X_ATTRIBUTE3              => l_attribute3
1639       ,X_ATTRIBUTE4              => l_attribute4
1640       ,X_ATTRIBUTE5              => l_attribute5
1641       ,X_ATTRIBUTE6              => l_attribute6
1642       ,X_ATTRIBUTE7              => l_attribute7
1643       ,X_ATTRIBUTE8              => l_attribute8
1644       ,X_ATTRIBUTE9              => l_attribute9
1645       ,X_ATTRIBUTE10             => l_attribute10
1646       ,X_ATTRIBUTE11             => l_attribute11
1647       ,X_ATTRIBUTE12             => l_attribute12
1648       ,X_ATTRIBUTE13             => l_attribute13
1649       ,X_ATTRIBUTE14             => l_attribute14
1650       ,X_ATTRIBUTE15             => l_attribute15
1651       ,X_TASK_WEIGHTING_DERIV_CODE => NULL
1652       ,X_WORK_ITEM_CODE            => NULL
1653       ,X_UOM_CODE                  => NULL
1654       ,X_WQ_ACTUAL_ENTRY_CODE      => NULL
1655       ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
1656       ,X_PARENT_STRUCTURE_ID         => NULL
1657       ,X_PHASE_CODE                  => NULL
1658       ,X_PHASE_VERSION_ID            => NULL
1659     );
1660 
1661     x_return_status := FND_API.G_RET_STS_SUCCESS;
1662 
1663     IF (p_debug_mode = 'Y') THEN
1664       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE end');
1665     END IF;
1666 
1667   EXCEPTION
1668     when FND_API.G_EXC_ERROR then
1669       if p_commit = FND_API.G_TRUE then
1670          rollback to update_structure_pvt;
1671       end if;
1672       x_return_status := FND_API.G_RET_STS_ERROR;
1673     when others then
1674       if p_commit = FND_API.G_TRUE then
1675          rollback to update_structure_pvt;
1676       end if;
1677       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1678       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
1679                               p_procedure_name => 'UPDATE_STRUCTURE',
1680                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1681       RAISE;
1682   END update_structure;
1683 
1684 
1685 
1686 -- API name                      : Update_Structure_Version_Attr
1687 -- Type                          : Private Procedure
1688 -- Pre-reqs                      : None
1689 -- Return Value                  : N/A
1690 -- Parameters
1691 --   p_api_version                       IN  NUMBER      := 1.0
1692 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1693 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1694 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1695 --   p_validation_level                  IN  VARCHAR2    := 100
1696 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1697 --   p_debug_mode                        IN  VARCHAR2    := 'N'
1698 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1699 --   p_pev_structure_id       IN    NUMBER
1700 --   p_structure_version_name   IN  VARCHAR2
1701 --   p_structure_version_desc   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1702 --   p_effective_date   IN  DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1703 --   p_latest_eff_published_flag    IN  VARCHAR2 := 'N'
1704 --   p_locked_status_code   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1705 --   p_struct_version_status_code   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1706 --   p_baseline_current_flag    IN  VARCHAR2 := 'N'
1707 --   p_baseline_original_flag   IN  VARCHAR2 := 'N'
1708 --   p_record_version_number  IN    NUMBER
1709 --   x_return_status     OUT     VARCHAR2
1710 --   x_msg_count     OUT     NUMBER
1711 --   x_msg_data  OUT     VARCHAR2
1712 --
1713 --  History
1714 --
1715 --  25-JUN-01   HSIU             -Created
1716 --  21-JUN-02   HSIU             Added change_reason_code
1717 --
1718 
1719 
1720   procedure Update_Structure_Version_Attr
1721   (
1722    p_api_version                       IN  NUMBER      := 1.0
1723    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1724    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1725    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1726    ,p_validation_level                  IN  VARCHAR2    := 100
1727    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1728    ,p_debug_mode                        IN  VARCHAR2    := 'N'
1729    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1730    ,p_pev_structure_id        IN    NUMBER
1731    ,p_structure_version_name    IN  VARCHAR2
1732    ,p_structure_version_desc    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1733    ,p_effective_date    IN  DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1734    ,p_latest_eff_published_flag IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1735    ,p_locked_status_code    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1736    ,p_struct_version_status_code    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1737    ,p_baseline_current_flag IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1738    ,p_baseline_original_flag    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1739    ,p_change_reason_code        IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1740    ,p_record_version_number  IN    NUMBER
1741     --FP M changes bug 3301192
1742    ,p_current_working_ver_flag          IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1743     --end FP M changes bug 3301192
1744    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1745    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
1746    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1747   )
1748   IS
1749 
1750     l_rowid                        VARCHAR2(255);
1751     l_structure_version_id         PA_PROJ_ELEM_VER_STRUCTURE.ELEMENT_VERSION_ID%TYPE;
1752     l_project_id                   PA_PROJ_ELEM_VER_STRUCTURE.PROJECT_ID%TYPE;
1753     l_proj_element_id              PA_PROJ_ELEM_VER_STRUCTURE.PROJ_ELEMENT_ID%TYPE;
1754     l_version_number               PA_PROJ_ELEM_VER_STRUCTURE.VERSION_NUMBER%TYPE;
1755     l_name                         PA_PROJ_ELEM_VER_STRUCTURE.NAME%TYPE;
1756     l_description                  PA_PROJ_ELEM_VER_STRUCTURE.DESCRIPTION%TYPE;
1757     l_effective_date               PA_PROJ_ELEM_VER_STRUCTURE.effective_date%TYPE;
1758     l_published_date               PA_PROJ_ELEM_VER_STRUCTURE.published_date%TYPE;
1759     l_published_by_person_id       PA_PROJ_ELEM_VER_STRUCTURE.published_by_person_id%TYPE;
1760     l_current_baseline_date        PA_PROJ_ELEM_VER_STRUCTURE.current_baseline_date%TYPE;
1761     l_current_flag                 PA_PROJ_ELEM_VER_STRUCTURE.current_flag%TYPE;
1762     l_current_baseline_person_id   PA_PROJ_ELEM_VER_STRUCTURE.current_baseline_person_id%TYPE;
1763     l_original_baseline_date       PA_PROJ_ELEM_VER_STRUCTURE.original_baseline_date%TYPE;
1764     l_original_flag                PA_PROJ_ELEM_VER_STRUCTURE.original_flag%TYPE;
1765     l_original_baseline_person_id  PA_PROJ_ELEM_VER_STRUCTURE.original_baseline_person_id%TYPE;
1766     l_lock_status_code             PA_PROJ_ELEM_VER_STRUCTURE.lock_status_code%TYPE;
1767     l_locked_by_person_id          PA_PROJ_ELEM_VER_STRUCTURE.locked_by_person_id%TYPE;
1768     l_locked_date                  PA_PROJ_ELEM_VER_STRUCTURE.locked_date%TYPE;
1769     l_status_code                  PA_PROJ_ELEM_VER_STRUCTURE.status_code%TYPE;
1770     l_wf_status_code               PA_PROJ_ELEM_VER_STRUCTURE.wf_status_code%TYPE;
1771     l_latest_eff_published_flag    PA_PROJ_ELEM_VER_STRUCTURE.latest_eff_published_flag%TYPE;
1772     l_pm_source_code               PA_PROJ_ELEM_VER_STRUCTURE.pm_source_code%TYPE;
1773     l_pm_source_reference          PA_PROJ_ELEM_VER_STRUCTURE.pm_source_reference%TYPE;
1774     l_change_reason_code           VARCHAR2(30);
1775 
1776 
1777     l_return_status                VARCHAR2(1);
1778     l_msg_count                    NUMBER;
1779     l_msg_count_int                NUMBER; /*bug# 6414944*/
1780     l_msg_data                     VARCHAR2(250);
1781     l_get_lock                     VARCHAR2(1);
1782     l_person_id                    NUMBER;
1783 
1784     cursor get_person_id(p_user_id NUMBER) IS
1785     select p.person_id
1786       from per_all_people_f p, fnd_user f
1787      where f.employee_id = p.person_id
1788        and sysdate between p.effective_start_date and p.effective_end_date
1789        and f.user_id = p_user_id;
1790 
1791 
1792     cursor getids is select rowid,
1793                             element_version_id,
1794                             version_number,
1795                             name,
1796                             project_id,
1797                             proj_element_id,
1798                             description,
1799                             effective_date,
1800                             published_date,
1801                             published_by_person_id,
1802                             CURRENT_BASELINE_DATE,
1803                             CURRENT_FLAG,
1804                             CURRENT_BASELINE_PERSON_ID,
1805                             ORIGINAL_BASELINE_DATE,
1806                             ORIGINAL_FLAG,
1807                             ORIGINAL_BASELINE_PERSON_ID,
1808                             LOCK_STATUS_CODE,
1809                             LOCKED_BY_PERSON_ID,
1810                             LOCKED_DATE,
1811                             STATUS_CODE,
1812                             WF_STATUS_CODE,
1813                             LATEST_EFF_PUBLISHED_FLAG,
1814                             PM_SOURCE_CODE,
1815                             PM_SOURCE_REFERENCE,
1816                             CHANGE_REASON_CODE,
1817                             CURRENT_WORKING_FLAG
1818                        from pa_proj_elem_ver_structure
1819                      where pev_structure_id = p_pev_structure_id;
1820 
1821   l_current_working_ver_flag  VARCHAR2(1);    --FPM bug 3301192
1822 
1823     -- Begin Fix For Bug # 4297556.
1824 
1825         cursor cur_relationship_ids(c_structure_version_id NUMBER, c_project_id NUMBER)
1826     is select por.object_relationship_id, por.record_version_number
1827     , por2.object_id_from1, por.object_id_from2, por.comments, ppa.name -- Bug # 4556844.
1828     from pa_object_relationships por, pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
1829     , pa_projects_all ppa, pa_object_relationships por2 -- Bug # 4556844.
1830     where ppevs.element_version_id = ppev.parent_structure_version_id
1831     and ppevs.project_id = ppev.project_id
1832     and ppev.element_version_id = por.object_id_to1
1833     and ppev.project_id = por.object_id_to2
1834     and ppa.project_id = ppev.project_id -- Bug # 4556844.
1835     and por.relationship_type = 'LW'
1836     and ppevs.element_version_id <> c_structure_version_id
1837     and ppevs.project_id = c_project_id
1838     and ppevs.status_code = 'STRUCTURE_WORKING'
1839     and por2.object_id_to1 = por.object_id_from1 -- Bug # 4556844.
1840     and por2.object_type_from in ('PA_STRUCTURES','PA_TASKS') --Bug 6429275
1841     and por2.object_type_to = 'PA_TASKS' -- Bug 6429275
1842     and por2.relationship_type = 'S'; -- Bug # 4556844.
1843 
1844 
1845     cur_rel_ids_rec cur_relationship_ids%rowtype;
1846 
1847     -- End Fix For Bug # 4297556.
1848 
1849   BEGIN
1850     l_msg_count_int := FND_MSG_PUB.count_msg; /*Bug#6414944*/
1851     IF (p_debug_mode = 'Y') THEN
1852       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE_VERSION_ATTR begin');
1853     END IF;
1854 
1855     IF (p_commit = FND_API.G_TRUE) THEN
1856       savepoint UPDATE_STRUC_VER_ATTR_PVT;
1857     END IF;
1858 
1859     IF (p_debug_mode = 'Y') THEN
1860       pa_debug.debug('Performing validations');
1861     END IF;
1862 
1863     OPEN getids;
1864     FETCH getids into l_rowid,
1865                       l_structure_version_id,
1866                       l_version_number,
1867                       l_name,
1868                       l_project_id,
1869                       l_proj_element_id,
1870                       l_description,
1871                       l_effective_date,
1872                       l_published_date,
1873                       l_published_by_person_id,
1874                       l_current_baseline_date,
1875                       l_current_flag,
1876                       l_current_baseline_person_id,
1877                       l_original_baseline_date,
1878                       l_original_flag,
1879                       l_original_baseline_person_id,
1880                       l_lock_status_code,
1881                       l_locked_by_person_id,
1882                       l_locked_date,
1883                       l_status_code,
1884                       l_wf_status_code,
1885                       l_latest_eff_published_flag,
1886                       l_pm_source_code,
1887                       l_pm_source_reference,
1888                       l_change_reason_code,
1889                       l_current_working_ver_flag;
1890 
1891     IF (getids%NOTFOUND) THEN
1892       CLOSE getids;
1893       Raise NO_DATA_FOUND;
1894     END IF;
1895     CLOSE getids;
1896 
1897     --get person id
1898     open get_person_id(FND_GLOBAL.USER_ID);
1899     fetch get_person_id into l_person_id;
1900     IF get_person_id%NOTFOUND then
1901       l_person_id := -1;
1902     END IF;
1903     close get_person_id;
1904 
1905    IF p_calling_module <> 'PA_UPD_WBS_ATTR' AND p_calling_module <> 'PA_UPD_WBS_ATTR_UN'/*bug# 4582750 ,Bug#6414944*/
1906    THEN
1907     --bug 3940853
1908         DECLARE
1909           l_rowid  VARCHAR2(255);
1910         BEGIN
1911         select rowid into l_rowid
1912           from pa_proj_elem_ver_structure
1913          where pev_structure_id = p_pev_structure_id
1914            and record_version_number = p_record_version_number
1915            for update NOWAIT;
1916         EXCEPTION
1917           when TIMEOUT_ON_RESOURCE then
1918             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1919                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1920             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1921          when NO_DATA_FOUND then
1922             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1923                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
1924             l_msg_data := 'PA_XC_RECORD_CHANGED';
1925          when OTHERS then
1926             if SQLCODE = -54 then
1927               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1928                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1929               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1930             else
1931               raise;
1932             end if;
1933         END;
1934 
1935         x_msg_count := FND_MSG_PUB.count_msg;
1936         if x_msg_count > 0 then
1937           x_msg_data := l_msg_data;
1938           raise FND_API.G_EXC_ERROR;
1939         end if;
1940     --end bug 3940853
1941    END IF;  --p_calling_module <> 'PA_UPD_WBS_ATTR'
1942 
1943     --Check if published
1944 --hsiu
1945 --changed for versioning
1946 --    IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published(l_project_id,
1947 --                                                         l_structure_version_id)) THEN
1948     IF ('N' = PA_PROJECT_STRUCTURE_UTILS.check_edit_wp_ok(l_project_id,
1949                                                           l_structure_version_id)) THEN
1950       --If published
1951       IF (p_debug_mode = 'Y') THEN
1952         pa_debug.debug('Published');
1953       END IF;
1954 
1955       --if set current baseline flag
1956       IF (p_baseline_current_flag = 'Y') THEN
1957         l_current_flag := 'Y';
1958         l_current_baseline_date := sysdate;
1959         l_current_baseline_person_id := l_person_id;
1960 
1961         --clear other flags
1962         update pa_proj_elem_ver_structure
1963         set current_flag = 'N',
1964             current_baseline_date = NULL,
1965             current_baseline_person_id = NULL,
1966             record_version_number = record_version_number + 1
1967         where project_id = l_project_id
1968           and proj_element_id = l_proj_element_id
1969           and pev_structure_id <> p_pev_structure_id
1970           and current_flag = 'Y';
1971 
1972         --Call baseline_structure_version API if workplan
1973         IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id, 'WORKPLAN') = 'Y') THEN
1974           PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
1975                        p_commit => FND_API.G_FALSE,
1976                        p_structure_version_id => l_structure_version_id,
1977                        x_return_status => l_return_status,
1978                        x_msg_count => l_msg_count,
1979                        x_msg_data => l_msg_data);
1980 
1981           If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1982             x_msg_count := FND_MSG_PUB.count_msg;
1983             if x_msg_count = 1 then
1984               x_msg_data := l_msg_data;
1985             end if;
1986             raise FND_API.G_EXC_ERROR;
1987           end if;
1988 
1989         END IF;
1990 
1991       END IF;
1992 
1993       --if set original baseline flag
1994       IF (p_baseline_original_flag = 'Y') THEN
1995         l_original_flag := 'Y';
1996         l_original_baseline_date := sysdate;
1997         l_original_baseline_person_id := l_person_id;
1998 
1999         --clear other flags.
2000         update pa_proj_elem_ver_structure
2001         set original_flag = 'N',
2002             original_baseline_date = NULL,
2003             original_baseline_person_id = NULL,
2004             record_version_number = record_version_number + 1
2005         where project_id = l_project_id
2006           and proj_element_id = l_proj_element_id
2007           and pev_structure_id <> p_pev_structure_id
2008           and original_flag = 'Y';
2009 
2010       END IF;
2011     END IF;
2012 --hsiu
2013 --changed for versioning
2014 --    ELSE
2015     IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_edit_wp_ok(l_project_id,
2016                                                           l_structure_version_id)) THEN
2017       --If not published
2018       IF (p_debug_mode = 'Y') THEN
2019         pa_debug.debug('Not Published');
2020       END IF;
2021 
2022       --Check lock
2023       l_get_lock := PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,
2024                                                              l_structure_version_id);
2025 
2026       IF (p_debug_mode = 'Y') THEN
2027         pa_debug.debug('l_get_lock value = '||l_get_lock);
2028       END IF;
2029 
2030       --bug 3071008
2031       IF (l_get_lock <> 'Y') THEN
2032         IF (PA_SECURITY_PVT.check_user_privilege('PA_UNLOCK_ANY_STRUCTURE'
2033                                              ,NULL
2034                                              ,to_number(NULL))
2035            = FND_API.G_TRUE) THEN
2036           l_get_lock := 'Y';
2037         END IF;
2038       END IF;
2039       --end bug 3071008
2040 
2041       IF (l_get_lock = 'O') THEN
2042         --lock by other user. Error.
2043         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_STRUC_VER_LOCKED');
2044         x_msg_data := 'PA_PS_STRUC_VER_LOCKED';
2045         RAISE FND_API.G_EXC_ERROR;
2046       END IF;
2047 
2048       IF (p_locked_status_code = 'LOCKED') THEN
2049         l_lock_status_code := 'LOCKED';
2050         l_locked_by_person_id := l_person_id;
2051         l_locked_date := sysdate;
2052       ELSIF (p_locked_status_code = 'UNLOCKED') THEN
2053         l_lock_status_code := 'UNLOCKED';
2054         l_locked_by_person_id := null;
2055         l_locked_date := null;
2056       END IF;
2057 
2058       --Check if structure version name is unique if modified
2059       IF (p_structure_version_name <> l_name) THEN
2060         IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(p_structure_version_name,
2061                                                p_pev_structure_id,
2062                                                l_project_id,
2063                                                l_proj_element_id)) THEN
2064           PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
2065           x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
2066           RAISE FND_API.G_EXC_ERROR;
2067         ELSE
2068           l_name := p_structure_version_name;
2069         END IF;
2070       END IF;
2071 
2072     END IF;
2073 
2074     --other attributes
2075     If (p_struct_version_status_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR   OR
2076         p_struct_version_status_code IS NULL) THEN
2077       l_status_code := p_struct_version_status_code;
2078     END IF;
2079     IF (p_structure_version_desc <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2080         p_structure_version_desc IS NULL) THEN
2081       l_description := p_structure_version_desc;
2082     END IF;
2083 
2084     IF (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2085         p_change_reason_code IS NULL) THEN
2086       l_change_reason_code := p_change_reason_code;
2087     END IF;
2088 
2089     --FPM bug 3301192
2090     IF (p_current_working_ver_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2091         p_current_working_ver_flag IS NULL) THEN
2092       NULL;
2093     ELSE
2094       l_current_working_ver_flag := p_current_working_ver_flag;
2095     END IF;
2096     --end FPM bug 3301192
2097 
2098     --Check if there is any error.
2099     l_msg_count := FND_MSG_PUB.count_msg;
2100 --    IF p_calling_module = 'PA_UPD_WBS_ATTR_UN' THEN   Commented for Bug 6372780
2101       IF l_msg_count > l_msg_count_int THEN
2102         x_msg_count := l_msg_count;
2103         IF x_msg_count = 1 THEN
2104           x_msg_data := l_msg_data;
2105         END IF;
2106         RAISE FND_API.G_EXC_ERROR;
2107       END IF;/*Bug# 6414944*/
2108 /* Commented for Bug 6372780
2109     ELSIF l_msg_count > 0 THEN
2110       x_msg_count := l_msg_count;
2111       IF x_msg_count = 1 THEN
2112         x_msg_data := l_msg_data;
2113       END IF;
2114       RAISE FND_API.G_EXC_ERROR;
2115     END IF;
2116 */
2117 
2118     PA_PROJ_ELEM_VER_STRUCTURE_PKG.update_row(
2119      X_ROWID                      => l_rowid
2120    , X_PEV_STRUCTURE_ID           => p_pev_structure_id
2121    , X_ELEMENT_VERSION_ID         => l_structure_version_id
2122    , X_VERSION_NUMBER             => l_version_number
2123    , X_NAME                       => l_name
2124    , X_PROJECT_ID                 => l_project_id
2125    , X_PROJ_ELEMENT_ID            => l_proj_element_id
2126    , X_DESCRIPTION                => l_description
2127    , X_EFFECTIVE_DATE             => l_effective_date
2128    , X_PUBLISHED_DATE             => l_published_date
2129    , X_PUBLISHED_BY               => l_published_by_person_id
2130    , X_CURRENT_BASELINE_DATE      => l_current_baseline_date
2131    , X_CURRENT_BASELINE_FLAG      => l_current_flag
2132    , X_CURRENT_BASELINE_BY        => l_current_baseline_person_id
2133    , X_ORIGINAL_BASELINE_DATE     => l_original_baseline_date
2134    , X_ORIGINAL_BASELINE_FLAG     => l_original_flag
2135    , X_ORIGINAL_BASELINE_BY       => l_original_baseline_person_id
2136    , X_LOCK_STATUS_CODE           => l_lock_status_code
2137    , X_LOCKED_BY                  => l_locked_by_person_id
2138    , X_LOCKED_DATE                => l_locked_date
2139    , X_STATUS_CODE                => l_status_code
2140    , X_WF_STATUS_CODE             => l_wf_status_code
2141    , X_LATEST_EFF_PUBLISHED_FLAG  => l_latest_eff_published_flag
2142    , X_CHANGE_REASON_CODE         => l_change_reason_code
2143    , X_RECORD_VERSION_NUMBER      => p_record_version_number
2144    , X_CURRENT_WORKING_FLAG       => l_current_working_ver_flag    --FPM bug 3301192
2145     );
2146 
2147 
2148     --FPM bug 3301192
2149     --now set the current working flag for the other working versions to 'N'
2150     IF l_current_working_ver_flag = 'Y'
2151     THEN
2152         UPDATE pa_proj_elem_ver_structure
2153            SET current_working_flag = 'N'
2154         where project_id = l_project_id
2155           and proj_element_id = l_proj_element_id
2156           and pev_structure_id <> p_pev_structure_id
2157           and current_working_flag = 'Y';
2158 
2159         -- Begin Fix For Bug # 4297556.
2160 
2161         -- For a split structure, we delete all subproject relationships where any of the other working
2162     -- workplan versions is the child entity.
2163 
2164         for l_cur_rel_ids_rec in cur_relationship_ids(l_structure_version_id, l_project_id)
2165 
2166         loop
2167 
2168                         PA_RELATIONSHIP_PVT.Delete_SubProject_Association(
2169                                  p_commit                  =>  p_commit
2170                                 ,p_validate_only           =>  p_validate_only
2171                                 ,p_debug_mode              =>  p_debug_mode
2172                                 ,p_object_relationships_id =>  l_cur_rel_ids_rec.object_relationship_id
2173                                 ,p_record_version_number   =>  l_cur_rel_ids_rec.record_version_number
2174                                 ,x_return_status           =>  x_return_status
2175                                 ,x_msg_count               =>  x_msg_count
2176                                 ,x_msg_data                =>  x_msg_data);
2177 
2178             if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2179 
2180                     raise FND_API.G_EXC_ERROR;
2181 
2182                 end if;
2183 
2184             -- Begin Bug # 4556844.
2185 
2186                         PA_RELATIONSHIP_PVT.Create_SubProject_Association(
2187                                  p_commit                  =>  p_commit
2188                                 ,p_validate_only           =>  p_validate_only
2189                                 ,p_debug_mode              =>  p_debug_mode
2190                                 ,p_src_proj_id         =>  l_cur_rel_ids_rec.object_id_from2
2191                                 ,p_task_ver_id         =>  l_cur_rel_ids_rec.object_id_from1
2192                                 ,p_dest_proj_id        =>  l_project_id
2193                                 ,p_dest_proj_name      =>  l_cur_rel_ids_rec.name
2194                                 ,p_comment             =>  l_cur_rel_ids_rec.comments
2195                                 ,x_return_status           =>  x_return_status
2196                                 ,x_msg_count               =>  x_msg_count
2197                                 ,x_msg_data                =>  x_msg_data);
2198 
2199                         if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2200 
2201                                 raise FND_API.G_EXC_ERROR;
2202 
2203                         end if;
2204 
2205             -- End Bug # 4556844.
2206 
2207         end loop;
2208 
2209         -- End Fix For Bug # 4297556.
2210 
2211     END IF;
2212     --end FPM bug 3301192
2213 
2214     x_return_status := FND_API.G_RET_STS_SUCCESS;
2215 
2216     IF (p_debug_mode = 'Y') THEN
2217       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE_VERSION_ATTR end');
2218     END IF;
2219 
2220   EXCEPTION
2221     WHEN NO_DATA_FOUND THEN
2222       if p_commit = FND_API.G_TRUE THEN
2223         rollback to UPDATE_STRUC_VER_ATTR_PVT;
2224       end if;
2225       x_return_status := FND_API.G_RET_STS_ERROR;
2226     WHEN FND_API.G_EXC_ERROR THEN
2227       IF (p_commit = FND_API.G_TRUE) THEN
2228         ROLLBACK to UPDATE_STRUC_VER_ATTR_PVT;
2229       END IF;
2230       x_msg_count := FND_MSG_PUB.count_msg;
2231       x_return_status := FND_API.G_RET_STS_ERROR;
2232     WHEN OTHERS THEN
2233       IF (p_commit = FND_API.G_TRUE) THEN
2234         ROLLBACK to UPDATE_STRUC_VER_ATTR_PVT;
2235       END IF;
2236       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2237       x_msg_count := FND_MSG_PUB.count_msg;
2238       --put message
2239       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2240                               p_procedure_name => 'Update_Structure_Version_Attr',
2241                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2242       RAISE;
2243   END Update_Structure_Version_Attr;
2244 
2245 
2246 
2247 -- API name                      : Delete_Structure
2248 -- Type                           : Private Procedure
2249 -- Pre-reqs                      : None
2250 -- Return Value                  : N/A
2251 -- Parameters
2252 --   p_api_version                       IN  NUMBER      := 1.0
2253 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2254 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2255 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2256 --   p_validation_level                  IN  VARCHAR2    := 100
2257 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2258 --   p_debug_mode                        IN  VARCHAR2    := 'N'
2259 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2260 --   p_structure_id                      IN  NUMBER
2261 --   p_record_version_number             IN  NUMBER
2262 --   x_return_status     OUT     VARCHAR2
2263 --   x_msg_count     OUT     NUMBER
2264 --   x_msg_data  OUT     VARCHAR2
2265 --
2266 --  History
2267 --
2268 --  25-JUN-01   HSIU             -Created
2269 --
2270 --
2271 
2272 
2273   procedure Delete_Structure
2274   (
2275    p_api_version                       IN  NUMBER      := 1.0
2276    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2277    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2278    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2279    ,p_validation_level                  IN  VARCHAR2    := 100
2280    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2281    ,p_debug_mode                        IN  VARCHAR2    := 'N'
2282    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2283    ,p_structure_id                      IN  NUMBER
2284    ,p_record_version_number             IN  NUMBER
2285    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2286    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2287    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2288   )
2289   IS
2290     l_rowid  VARCHAR2(255);
2291 
2292     l_return_status                 VARCHAR2(1);
2293     l_msg_count                     NUMBER;
2294     l_msg_data                      VARCHAR2(250);
2295 
2296     cursor sel_struct_type IS
2297       select rowid
2298         from pa_proj_structure_types
2299        where proj_element_id = p_structure_id;
2300 
2301     -- Begin fix for Bug # 4506308.
2302 
2303     cursor l_cur_projects_all(c_structure_id NUMBER) is
2304     select ppa.project_id, ppa.record_version_number
2305     from pa_projects_all ppa, pa_proj_elements ppe
2306     where ppa.project_id = ppe.project_id
2307     and ppe.proj_element_id = c_structure_id;
2308 
2309     l_project_id     NUMBER;
2310     l_rec_ver_number NUMBER;
2311     l_is_wp_str      VARCHAR2(1);
2312 
2313     -- End fix for Bug # 4506308.
2314 
2315   BEGIN
2316     IF (p_debug_mode = 'Y') THEN
2317       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE begin');
2318     END IF;
2319 
2320     if p_commit = FND_API.G_TRUE then
2321        savepoint delete_structure_pvt;
2322     end if;
2323 
2324     -- Begin fix for Bug # 4506308.
2325 
2326     l_is_wp_str := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(p_structure_id, 'WORKPLAN');
2327 
2328     if (l_is_wp_str = 'Y') then
2329 
2330         open l_cur_projects_all(p_structure_id);
2331         fetch l_cur_projects_all into l_project_id, l_rec_ver_number;
2332         close l_cur_projects_all;
2333 
2334         PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
2335         p_validate_only          => FND_API.G_FALSE
2336         ,p_project_id             => l_project_id
2337         ,p_date_type              => 'SCHEDULED'
2338         ,p_start_date             => null
2339         ,p_finish_date            => null
2340         ,p_record_version_number  => l_rec_ver_number
2341         ,x_return_status          => x_return_status
2342         ,x_msg_count              => x_msg_count
2343         ,x_msg_data               => x_msg_data );
2344 
2345         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2346             RAISE FND_API.G_EXC_ERROR;
2347         END IF;
2348 
2349     end if;
2350 
2351     -- End fix for Bug # 4506308.
2352 
2353     --Delete detail rows (structure types)
2354     OPEN sel_struct_type;
2355     LOOP
2356       FETCH sel_struct_type into l_rowid;
2357       EXIT WHEN sel_struct_type%NOTFOUND;
2358       PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
2359     END LOOP;
2360     CLOSE sel_struct_type;
2361 
2362     --Lock record
2363     IF (p_validate_only <> FND_API.G_TRUE) THEN
2364       BEGIN
2365         --lock
2366         select rowid into l_rowid
2367           from pa_proj_elements
2368          where proj_element_id = p_structure_id
2369            and record_version_number = p_record_version_number
2370            for update of record_version_number NOWAIT;
2371       EXCEPTION
2372          when TIMEOUT_ON_RESOURCE then
2373             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2374                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2375             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2376          when NO_DATA_FOUND then
2377             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2378                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2379             l_msg_data := 'PA_XC_RECORD_CHANGED';
2380          when OTHERS then
2381             if SQLCODE = -54 then
2382               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2383                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2384               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2385             else
2386               raise;
2387             end if;
2388       END;
2389     ELSE
2390       BEGIN
2391         select rowid into l_rowid
2392           from pa_proj_elements
2393          where proj_element_id = p_structure_id
2394            and record_version_number = p_record_version_number;
2395       EXCEPTION
2396          when NO_DATA_FOUND then
2397             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2398                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2399             l_msg_data := 'PA_XC_RECORD_CHANGED';
2400          when OTHERS then
2401             raise;
2402       END;
2403     END IF;
2404 
2405     l_msg_count := FND_MSG_PUB.count_msg;
2406     if l_msg_count > 0 then
2407       x_msg_count := l_msg_count;
2408       if x_msg_count = 1 then
2409         x_msg_data := l_msg_data;
2410       end if;
2411       raise FND_API.G_EXC_ERROR;
2412     end if;
2413 
2414 
2415     PA_PROJ_ELEMENTS_PKG.DELETE_ROW(
2416       X_ROW_ID => l_rowid
2417     );
2418 
2419     x_return_status := FND_API.G_RET_STS_SUCCESS;
2420 
2421     IF (p_debug_mode = 'Y') THEN
2422       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE end');
2423     END IF;
2424 
2425   EXCEPTION
2426    when FND_API.G_EXC_ERROR then
2427       if p_commit = FND_API.G_TRUE then
2428          rollback to delete_structure_pvt;
2429       end if;
2430       x_return_status := FND_API.G_RET_STS_ERROR;
2431    when others then
2432       if p_commit = FND_API.G_TRUE then
2433          rollback to delete_structure_pvt;
2434       end if;
2435       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2436       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2437                               p_procedure_name => 'Delete_Structure',
2438                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2439       raise;
2440   END Delete_Structure;
2441 
2442 
2443 -- API name                      : Delete_Structure_Version
2444 -- Type                          : Private Procedure
2445 -- Pre-reqs                      : None
2446 -- Return Value                  : N/A
2447 -- Parameters
2448 --   p_api_version                       IN  NUMBER      := 1.0
2449 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2450 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2451 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2452 --   p_validation_level                  IN  VARCHAR2    := 100
2453 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2454 --   p_debug_mode                        IN  VARCHAR2    := 'N'
2455 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2456 --   p_structure_version_id              IN  NUMBER
2457 --   p_record_version_number             IN  NUMBER
2458 --   x_return_status     OUT     VARCHAR2
2459 --   x_msg_count     OUT     NUMBER
2460 --   x_msg_data  OUT     VARCHAR2
2461 --
2462 --  History
2463 --
2464 --  25-JUN-01   HSIU             -Created
2465 --
2466 --
2467 
2468 
2469   procedure Delete_Structure_Version
2470   (
2471    p_api_version                       IN  NUMBER      := 1.0
2472    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2473    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2474    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2475    ,p_validation_level                  IN  VARCHAR2    := 100
2476    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2477    ,p_debug_mode                        IN  VARCHAR2    := 'N'
2478    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2479    ,p_structure_version_id              IN  NUMBER
2480    ,p_record_version_number             IN  NUMBER
2481    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2482    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2483    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2484   )
2485   IS
2486     l_rowid  VARCHAR2(255);
2487 
2488     l_Project_ID    NUMBER;
2489 
2490     l_return_status                 VARCHAR2(1);
2491     l_msg_count                     NUMBER;
2492     l_msg_data                      VARCHAR2(250);
2493 
2494 -- Begin fix for Bug # 4483222.
2495 
2496 cursor l_cur_rel_id(p_str_ver_id NUMBER) is
2497 select por.object_relationship_id, por.record_version_number
2498 from pa_object_relationships por
2499 where por.object_id_to1 = p_str_ver_id
2500 and por.relationship_type in ('LW', 'LF');
2501 
2502 l_rec_rel_id l_cur_rel_id%ROWTYPE;
2503 
2504 -- End fix for Bug # 4483222.
2505 
2506   BEGIN
2507     IF (p_debug_mode = 'Y') THEN
2508       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION begin');
2509     END IF;
2510 
2511     if p_commit = FND_API.G_TRUE then
2512        savepoint delete_structure_version_pvt;
2513     end if;
2514 
2515     --Lock record
2516     IF (p_debug_mode = 'Y') THEN
2517       pa_debug.debug('locking record '||p_structure_version_id||', '||p_record_Version_number);
2518     END IF;
2519     IF (p_validate_only <> FND_API.G_TRUE) THEN
2520       BEGIN
2521         --lock
2522         select rowid into l_rowid
2523           from pa_proj_element_versions
2524          where element_version_id = p_structure_version_id
2525            and record_version_number = p_record_version_number
2526            for update of record_version_number NOWAIT;
2527       EXCEPTION
2528          when TIMEOUT_ON_RESOURCE then
2529             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2530                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2531             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2532          when NO_DATA_FOUND then
2533             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2534                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2535             l_msg_data := 'PA_XC_RECORD_CHANGED';
2536          when OTHERS then
2537             if SQLCODE = -54 then
2538               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2539                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2540               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2541             else
2542               raise;
2543             end if;
2544       END;
2545     ELSE
2546       BEGIN
2547         select rowid into l_rowid
2548           from pa_proj_element_versions
2549          where element_version_id = p_structure_version_id
2550            and record_version_number = p_record_version_number;
2551       EXCEPTION
2552          when NO_DATA_FOUND then
2553             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2554                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2555             l_msg_data := 'PA_XC_RECORD_CHANGED';
2556          when OTHERS then
2557             raise;
2558       END;
2559     END IF;
2560 
2561 
2562     l_msg_count := FND_MSG_PUB.count_msg;
2563     if l_msg_count > 0 then
2564       x_msg_count := l_msg_count;
2565       if x_msg_count = 1 then
2566         x_msg_data := l_msg_data;
2567       end if;
2568       raise FND_API.G_EXC_ERROR;
2569     end if;
2570 
2571     IF (p_debug_mode = 'Y') THEN
2572       pa_debug.debug('deleting structure versionn');
2573     END IF;
2574 
2575 
2576     -- Added by skannoji
2577     -- Added for doosan customer to delete structure version id for workplan
2578     DECLARE
2579       /* Bug #: 3305199 SMukka                                                         */
2580       /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
2581       /* l_struct_version_id_tbl     PA_PLSQL_DATATYPES.IdTabTyp;                      */
2582       l_struct_version_id_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
2583     BEGIN
2584      IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
2585        l_struct_version_id_tbl.extend(1); /* Venky */
2586        l_struct_version_id_tbl(1) := p_structure_version_id;
2587        /*Smukka Bug No. 3474141 Date 03/01/2004                                  */
2588        /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block        */
2589        BEGIN
2590            PA_FIN_PLAN_PVT.delete_wp_budget_versions
2591                   (
2592                      p_struct_elem_version_id_tbl    => l_struct_version_id_tbl
2593                     ,x_return_status                 => x_return_status
2594                     ,x_msg_count                     => x_msg_count
2595                     ,x_Msg_data                      => x_msg_data
2596                     );
2597        EXCEPTION
2598            WHEN OTHERS THEN
2599                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2600                                         p_procedure_name => 'Delete_Structure_Version',
2601                                         p_error_text     => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_budget_versions:'||SQLERRM,1,240));
2602            RAISE FND_API.G_EXC_ERROR;
2603        END;
2604        -- Added for FP_M Changes -- Bhumesh
2605        BEGIN
2606            SELECT project_id INTO l_Project_ID
2607        FROM   pa_proj_element_versions
2608            WHERE  element_version_id = p_structure_version_id and rownum < 2;
2609 
2610            PA_PROGRESS_PUB.delete_working_wp_progress (
2611              P_Project_ID       => l_Project_ID
2612                     ,P_Structure_Version_ID     => P_Structure_Version_ID
2613                     ,x_return_status        => x_return_status
2614                     ,x_msg_count            => x_msg_count
2615                     ,x_Msg_data             => x_msg_data
2616                     );
2617        EXCEPTION
2618            WHEN OTHERS THEN
2619                 fnd_msg_pub.add_exc_msg(
2620             p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2621                     p_procedure_name => 'Delete_Structure_Version',
2622                     p_error_text     => SUBSTRB('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
2623            RAISE FND_API.G_EXC_ERROR;
2624        END;
2625       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2626          RAISE FND_API.G_EXC_ERROR;
2627       END IF;
2628      END IF;
2629     END;
2630     -- till here by skannoji
2631 
2632 -- Begin fix for Bug # 4483222.
2633 
2634 -- delete all sub-project relationships where this structure is the child of another structure.
2635 
2636   for l_rec_rel_id in l_cur_rel_id(p_structure_version_id)
2637   loop
2638 
2639     /*
2640 
2641         pa_relationship_pub.delete_relationship
2642         (p_api_version                        => p_api_version
2643          ,p_init_msg_list                     => p_init_msg_list
2644          ,p_commit                            => p_commit
2645          ,p_validate_only                     => p_validate_only
2646          ,p_validation_level                  => p_validation_level
2647          ,p_calling_module                    => p_calling_module
2648          ,p_debug_mode                        => p_debug_mode
2649          ,p_max_msg_count                     => p_max_msg_count
2650          ,p_object_relationship_id            => l_rec_rel_id.object_relationship_id
2651          ,p_record_version_number             => l_rec_rel_id.record_version_number
2652          ,x_return_status                     => x_return_status
2653          ,x_msg_count                         => x_msg_count
2654          ,x_msg_data                          => x_msg_data);
2655 
2656     */
2657 
2658     pa_relationship_pvt.delete_subproject_association
2659         (p_commit                   =>  p_commit
2660          ,p_validate_only           =>  p_validate_only
2661          ,p_debug_mode              =>  p_debug_mode
2662          ,p_object_relationships_id =>  l_rec_rel_id.object_relationship_id
2663          ,p_record_version_number   =>  l_rec_rel_id.record_version_number
2664          ,x_return_status           =>  x_return_status
2665          ,x_msg_count               =>  x_msg_count
2666          ,x_msg_data                =>  x_msg_data);
2667 
2668          if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2669 
2670             raise FND_API.G_EXC_ERROR;
2671 
2672          end if;
2673 
2674   end loop;
2675 
2676 -- End fix for Bug # 4483222.
2677 
2678     PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW(
2679       X_ROW_ID => l_rowid
2680     );
2681 
2682    x_return_status := FND_API.G_RET_STS_SUCCESS;
2683 
2684     IF (p_debug_mode = 'Y') THEN
2685       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION end');
2686     END IF;
2687 
2688   EXCEPTION
2689    when FND_API.G_EXC_ERROR then
2690       if p_commit = FND_API.G_TRUE then
2691          rollback to delete_structure_version_pvt;
2692       end if;
2693       x_return_status := FND_API.G_RET_STS_ERROR;
2694    when others then
2695       if p_commit = FND_API.G_TRUE then
2696          rollback to delete_structure_version_pvt;
2697       end if;
2698       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2699       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2700                               p_procedure_name => 'Delete_Structure_Version',
2701                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2702       raise;
2703   END DELETE_STRUCTURE_VERSION;
2704 
2705 
2706 -- API name                      : Delete_Structure_Version_Attr
2707 -- Type                          : Private Procedure
2708 -- Pre-reqs                      : None
2709 -- Return Value                  : N/A
2710 -- Parameters
2711 --   p_api_version                       IN  NUMBER      := 1.0
2712 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2713 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2714 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2715 --   p_validation_level                  IN  VARCHAR2    := 100
2716 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2717 --   p_debug_mode                        IN  VARCHAR2    := 'N'
2718 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2719 --   p_pev_structure_id                  IN  NUMBER
2720 --   p_record_version_number             IN  NUMBER
2721 --   x_return_status     OUT     VARCHAR2
2722 --   x_msg_count     OUT     NUMBER
2723 --   x_msg_data  OUT     VARCHAR2
2724 --
2725 --  History
2726 --
2727 --  25-JUN-01   HSIU             -Created
2728 --
2729 --
2730 
2731 
2732   procedure Delete_Structure_Version_Attr
2733   (
2734    p_api_version                       IN  NUMBER      := 1.0
2735    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2736    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2737    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2738    ,p_validation_level                  IN  VARCHAR2    := 100
2739    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2740    ,p_debug_mode                        IN  VARCHAR2    := 'N'
2741    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2742    ,p_pev_structure_id                  IN  NUMBER
2743    ,p_record_version_number             IN  NUMBER
2744    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2745    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2746    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2747   )
2748   IS
2749     l_rowid                         VARCHAR2(255);
2750 
2751     l_return_status                 VARCHAR2(1);
2752     l_msg_count                     NUMBER;
2753     l_msg_data                      VARCHAR2(250);
2754 
2755     --FP M bug 3301192
2756     CURSOR cur_proj_str
2757     IS
2758       SELECT proj_element_id, project_id
2759         FROM pa_proj_elem_ver_structure
2760        WHERE pev_structure_id = p_pev_structure_id;
2761 
2762     l_structure_id               NUMBER;
2763     l_project_id                 NUMBER;
2764     l_current_working_ver_id     NUMBER;
2765 
2766     --end FPM bug 3301192
2767 
2768     -- 3804437 Added below cursor to retrieve last updated working version
2769     CURSOR cur_last_working_ver( p_structure_id NUMBER )
2770     IS
2771       select str.element_version_id
2772         from pa_proj_elem_ver_structure str,
2773               pa_proj_elements ppe
2774         where ppe.proj_element_id = p_structure_id
2775           and ppe.project_id = str.project_id
2776           and ppe.proj_element_id = str.proj_element_id
2777           and str.status_code = 'STRUCTURE_WORKING'
2778           and str.current_working_flag = 'N'
2779           order by str.last_update_date desc;
2780     -- 3804437
2781 
2782   BEGIN
2783     IF (p_debug_mode = 'Y') THEN
2784       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION_ATTR begin');
2785     END IF;
2786 
2787     if p_commit = FND_API.G_TRUE then
2788        savepoint delete_structure_ver_attr_pvt;
2789     end if;
2790 
2791     --Lock record
2792     IF (p_validate_only <> FND_API.G_TRUE) THEN
2793       BEGIN
2794         --lock
2795         select rowid into l_rowid
2796           from pa_proj_elem_ver_structure
2797          where pev_structure_id = p_pev_structure_id
2798            and record_version_number = p_record_version_number
2799            for update of record_version_number NOWAIT;
2800       EXCEPTION
2801          when TIMEOUT_ON_RESOURCE then
2802             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2803                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2804             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2805          when NO_DATA_FOUND then
2806             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2807                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2808             l_msg_data := 'PA_XC_RECORD_CHANGED';
2809          when OTHERS then
2810             if SQLCODE = -54 then
2811               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2812                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2813               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2814             else
2815               raise;
2816             end if;
2817       END;
2818     ELSE
2819       BEGIN
2820         select rowid into l_rowid
2821           from pa_proj_elem_ver_structure
2822          where pev_structure_id = p_pev_structure_id
2823            and record_version_number = p_record_version_number;
2824       EXCEPTION
2825          when NO_DATA_FOUND then
2826             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2827                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2828             l_msg_data := 'PA_XC_RECORD_CHANGED';
2829          when OTHERS then
2830             raise;
2831       END;
2832     END IF;
2833 
2834     l_msg_count := FND_MSG_PUB.count_msg;
2835     if l_msg_count > 0 then
2836       x_msg_count := l_msg_count;
2837       if x_msg_count = 1 then
2838         x_msg_data := l_msg_data;
2839       end if;
2840       raise FND_API.G_EXC_ERROR;
2841     end if;
2842 
2843     --FPM bug 3301192
2844     OPEN cur_proj_str;
2845     FETCH cur_proj_str INTO l_structure_id, l_project_id;
2846     CLOSE cur_proj_str;
2847 
2848     -- 3804437 Commented below code to retrieve last updated working version
2849     -- because below code is retrieving the current working version only
2850 
2851     --l_current_working_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
2852 
2853     -- Added code to retrieve last updated working version
2854 
2855     OPEN cur_last_working_ver(l_structure_id);
2856     FETCH cur_last_working_ver INTO l_current_working_ver_id;
2857     CLOSE cur_last_working_ver;
2858 
2859     -- 3804437 end
2860 
2861     --update the latest updated working version as current working version.
2862       UPDATE pa_proj_elem_ver_structure
2863          SET current_working_flag = 'Y'
2864        WHERE element_version_id = l_current_working_ver_id
2865          AND project_id = l_project_id;
2866 
2867     --end FPM bug 3301192
2868 
2869     PA_PROJ_ELEM_VER_STRUCTURE_PKG.delete_row(
2870       X_ROWID => l_rowid
2871     );
2872 
2873     IF (p_debug_mode = 'Y') THEN
2874       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION_ATTR end');
2875     END IF;
2876 
2877     x_return_status := FND_API.G_RET_STS_SUCCESS;
2878 
2879   EXCEPTION
2880    when FND_API.G_EXC_ERROR then
2881       if p_commit = FND_API.G_TRUE then
2882          rollback to delete_structure_ver_attr_pvt;
2883       end if;
2884       x_return_status := FND_API.G_RET_STS_ERROR;
2885    when others then
2886       if p_commit = FND_API.G_TRUE then
2887          rollback to delete_structure_ver_attr_pvt;
2888       end if;
2889       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2890       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2891                               p_procedure_name => 'Delete_Structure',
2892                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2893       raise;
2894   END Delete_Structure_Version_Attr;
2895 
2896 
2897 -- API name                      : Publish_Structure
2898 -- Type                          : Private Procedure
2899 -- Pre-reqs                      : None
2900 -- Return Value                  : N/A
2901 -- Parameters
2902 --   p_api_version                       IN  NUMBER      := 1.0
2903 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2904 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2905 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2906 --   p_validation_level                  IN  VARCHAR2    := 100
2907 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2908 --   p_debug_mode                        IN  VARCHAR2    := 'N'
2909 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2910 --   p_responsibility_id                 IN  NUMBER      := 0
2911 --   p_structure_version_id              IN  NUMBER
2912 --   p_publish_structure_ver_name        IN  VARCHAR2
2913 --   p_structure_ver_desc                IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2914 --   p_effective_date                    IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2915 --   p_original_baseline_flag            IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2916 --   p_current_baseline_flag             IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2917 --   x_published_struct_ver_id           OUT  NUMBER
2918 --   x_return_status                     OUT  VARCHAR2
2919 --   x_msg_count                         OUT  NUMBER
2920 --   x_msg_data                          OUT  VARCHAR2
2921 --
2922 --  History
2923 --
2924 --  25-JUN-01   HSIU             -Created
2925 --
2926 
2927 
2928 
2929   procedure Publish_Structure
2930   (
2931    p_api_version                       IN  NUMBER      := 1.0
2932    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2933    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2934    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2935    ,p_validation_level                  IN  VARCHAR2    := 100
2936    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2937    ,p_debug_mode                        IN  VARCHAR2    := 'N'
2938    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2939    ,p_responsibility_id                 IN  NUMBER      := 0
2940    ,p_user_id                           IN  NUMBER      := NULL
2941    ,p_structure_version_id              IN  NUMBER
2942    ,p_publish_structure_ver_name        IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2943    ,p_structure_ver_desc                IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2944    ,p_effective_date                    IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2945    ,p_original_baseline_flag            IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2946    ,p_current_baseline_flag             IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2947    ,p_pub_prog_flag             IN  VARCHAR2    DEFAULT 'Y'  -- FP_M changes
2948    ,x_published_struct_ver_id           OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2949    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2950    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2951    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2952   )
2953   IS
2954     l_api_name                      CONSTANT VARCHAR(30) := 'Publish_Structure';
2955     l_api_version                   CONSTANT NUMBER      := 1.0;
2956 
2957     l_return_status                 VARCHAR2(1);
2958     l_msg_count                     NUMBER;
2959     l_msg_data                      VARCHAR2(250);
2960     l_data                          VARCHAR2(250);
2961     l_msg_index_out                 NUMBER;
2962     l_apps_name                     VARCHAR2(2000) := 'PA';
2963 
2964     l_dummy                         VARCHAR2(1);
2965     l_dummy_name                    PA_PROJ_ELEM_VER_STRUCTURE.NAME%TYPE;
2966 
2967     l_project_id                    PA_PROJ_ELEM_VER_STRUCTURE.PROJECT_ID%TYPE;
2968     l_proj_element_id               PA_PROJ_ELEM_VER_STRUCTURE.PROJ_ELEMENT_ID%TYPE;
2969     l_element_version_id            PA_PROJ_ELEM_VER_STRUCTURE.ELEMENT_VERSION_ID%TYPE;
2970     l_pev_structure_id              PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
2971 
2972 
2973     l_new_struct_ver_id             NUMBER;
2974     -- added for Bug Fix: 4537865
2975     l_tmp_struct_ver_id         NUMBER;
2976     -- added for Bug fix: 4537865
2977     l_new_pev_structure_id          PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
2978     l_new_pev_schedule_id           PA_PROJ_ELEM_VER_SCHEDULE.PEV_SCHEDULE_ID%TYPE;
2979     l_new_obj_rel_id                PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
2980 
2981     l_original_baseline_flag        VARCHAR2(1);
2982     l_current_baseline_flag         VARCHAR2(1);
2983 
2984     l_new_struct_ver_name           PA_PROJ_ELEM_VER_STRUCTURE.name%TYPE;
2985     l_new_struct_ver_desc           PA_PROJ_ELEM_VER_STRUCTURE.description%TYPE;
2986 
2987     -- anlee
2988     -- Dates changes
2989     l_scheduled_start_date          DATE;
2990     l_scheduled_finish_date         DATE;
2991     l_proj_record_ver_number        NUMBER;
2992 
2993     l_user_id                       NUMBER;
2994 
2995   ----------------------------------- FP_M changes : Begin
2996   -- Refer to tracking bug 3305199
2997   /* Bug #: 3305199 SMukka                                                         */
2998   /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
2999   /*  l_Old_Task_Versions_Tab        PA_PLSQL_DATATYPES.IdTabTyp;                  */
3000   /*  l_New_Task_Versions_Tab        PA_PLSQL_DATATYPES.IdTabTyp;                  */
3001     l_Old_Task_Versions_Tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3002     l_New_Task_Versions_Tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3003   ----------------------------------- FP_M changes : End
3004 
3005     CURSOR get_scheduled_dates(c_project_id NUMBER, c_structure_version_id NUMBER)
3006     IS
3007     SELECT scheduled_start_date, scheduled_finish_date
3008     FROM pa_proj_elem_ver_schedule
3009     WHERE project_id = c_project_id
3010     AND   element_version_id = c_structure_version_id;
3011 
3012     CURSOR get_proj_rec_ver_number(c_project_id NUMBER)
3013     IS
3014     SELECT record_version_number
3015     FROM pa_projects_all
3016     WHERE project_id = c_project_id;
3017     -- End of changes
3018 
3019 
3020 --Bug 2189657
3021 --Added for linking tasks with no display sequence.
3022     Type T_EquivElemVerTable IS TABLE OF NUMBER
3023       Index by BINARY_INTEGER;
3024     t_equiv_elem_ver_id T_EquivElemVerTable;
3025 --Bug 2189657 end;
3026 
3027     cursor get_from_id(c_element_version_id NUMBER) IS
3028       select object_relationship_id, object_id_from1 object_id_from,
3029              object_type_from, record_version_number
3030         from pa_object_relationships
3031        where relationship_type = 'L'
3032          and object_id_to1 = c_element_version_id
3033          and object_type_to IN ('PA_TASKS','PA_STRUCTURES');
3034     l_from_object_info        get_from_id%ROWTYPE;
3035 
3036     cursor get_to_id(c_element_version_id NUMBER) IS
3037       select object_relationship_id, object_id_to1 object_id_to, object_id_to2,
3038              object_type_to, record_version_number
3039         from pa_object_relationships
3040        where relationship_type IN ('LW', 'LF')
3041          and object_id_from1 = c_element_version_id
3042          and object_type_from IN ('PA_TASKS','PA_STRUCTURES');
3043     l_to_object_info          get_to_id%ROWTYPE;
3044     l_working_ver_fg          VARCHAR2(1);
3045 
3046     cursor get_task_version_info(c_task_version_id NUMBER) IS
3047       select v1.project_id project_id, v2.proj_element_id structure_id,
3048              v1.parent_structure_version_id structure_version_id,
3049              v1.element_version_id task_version_id
3050         from pa_proj_element_versions v1,
3051              pa_proj_element_versions v2
3052        where v1.element_version_id = c_task_version_id
3053          and v1.parent_structure_version_id = v2.element_version_id;
3054     l_info_task_ver_rec       get_task_version_info%ROWTYPE;
3055 
3056     cursor get_structure_version_info(c_structure_version_id NUMBER) IS
3057       select v1.project_id project_id, v1.proj_element_id structure_id,
3058              v1.element_version_id structure_version_id
3059         from pa_proj_element_versions v1
3060        where v1.element_version_id = c_structure_version_id;
3061     l_info_struc_ver_rec      get_structure_version_info%ROWTYPE;
3062 
3063 
3064     cursor get_struc_ver_name IS
3065       select pevs.name, pevs.project_id, pevs.proj_element_id,
3066              pevs.element_version_id, pevs.pev_structure_id
3067         from pa_proj_elem_ver_structure pevs,
3068              pa_proj_element_versions pev
3069        where pev.element_version_id = p_structure_version_id
3070          and pevs.project_id = pev.project_id
3071          and pevs.element_version_id = pev.element_version_id;
3072 
3073     CURSOR get_structure_ver_csr(c_structure_version_id NUMBER) IS
3074       SELECT *
3075       FROM PA_PROJ_ELEMENT_VERSIONS
3076       WHERE element_version_id = c_structure_version_id;
3077     l_struc_ver_rec          get_structure_ver_csr%ROWTYPE;
3078 
3079     CURSOR get_structure_ver_attr_csr(c_structure_version_id NUMBER, c_project_id NUMBER) IS
3080       SELECT *
3081       FROM PA_PROJ_ELEM_VER_STRUCTURE
3082       WHERE ELEMENT_VERSION_ID = c_structure_version_id
3083         AND project_id = c_project_id;
3084     l_struc_ver_attr_rec     get_structure_ver_attr_csr%ROWTYPE;
3085 
3086     CURSOR get_ver_schedule_attr_csr(c_element_version_id NUMBER, c_project_id NUMBER) IS
3087       SELECT *
3088       FROM PA_PROJ_ELEM_VER_SCHEDULE
3089       WHERE element_version_id = c_element_version_id
3090         AND project_id = c_project_id;
3091     l_ver_sch_attr_rec       get_ver_schedule_attr_csr%ROWTYPE;
3092 
3093 --hsiu: task version status change. Added task version status.
3094     CURSOR get_task_versions_csr(c_structure_version_id NUMBER) IS
3095       SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
3096              a.project_id, b.object_id_from1 parent_element_version_id,
3097              a.TASK_UNPUB_VER_STATUS_CODE, a.parent_structure_version_id
3098         FROM PA_PROJ_ELEMENT_VERSIONS a,
3099              PA_OBJECT_RELATIONSHIPS b
3100        WHERE a.object_type = 'PA_TASKS'
3101          AND a.parent_structure_version_id = c_structure_version_id
3102          AND a.element_version_id = b.object_id_to1
3103          AND b.relationship_type = 'S'
3104        ORDER BY a.display_sequence;
3105 
3106     l_task_versions_rec      get_task_versions_csr%ROWTYPE;
3107 
3108     Cursor get_linking_tasks IS
3109       select a.element_version_id
3110         from pa_proj_element_versions a,
3111              pa_proj_elements b
3112        where a.proj_element_id = b.proj_element_id
3113          and a.parent_structure_version_id = p_structure_version_id
3114          and b.link_task_flag = 'Y';
3115     l_linking_task_rec       get_linking_tasks%ROWTYPE;
3116 
3117     l_ref_task_ver_id        NUMBER;
3118     l_peer_or_sub            VARCHAR2(10);
3119     l_last_wbs_level         NUMBER;
3120     l_task_version_id        NUMBER;
3121     l_pev_schedule_id        NUMBER;
3122 
3123     l_i_msg_count            NUMBER;
3124     l_i_msg_data             PA_VC_1000_2000:= PA_VC_1000_2000(1);
3125     l_i_return_status        VARCHAR2(1);
3126 
3127     TYPE reference_tasks IS TABLE OF NUMBER
3128        INDEX BY BINARY_INTEGER;
3129     l_outline_task_ref reference_tasks;
3130 
3131     l_proj_start_date        DATE;
3132     l_proj_completion_date   DATE;
3133     l_prefix                 VARCHAR2(80);
3134 
3135 --Hsiu added for date rollup
3136     l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3137 
3138 --hsiu added for advanced structure changes
3139     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
3140       select b.element_version_id, b.record_version_number
3141         from pa_proj_element_versions a,
3142              pa_proj_element_versions b,
3143              pa_proj_elem_ver_structure c
3144        where a.element_version_id = c_keep_struc_ver_id
3145          and a.project_id = b.project_id
3146          and a.proj_element_id = b.proj_element_id
3147          and b.element_version_id <> c_keep_struc_ver_id
3148          and b.object_type = 'PA_STRUCTURES'
3149          and b.project_id = c.project_id
3150          and b.element_version_id = c.element_version_id
3151          and c.status_code <> 'STRUCTURE_PUBLISHED';
3152     l_del_struc_ver_id       NUMBER;
3153     l_del_struc_ver_rvn      NUMBER;
3154 
3155   CURSOR get_task_ver_weighting(p_task_ver_id NUMBER)
3156   IS
3157   select weighting_percentage
3158     from pa_object_relationships
3159    where object_id_to1 = p_task_ver_id
3160      and object_type_to = 'PA_TASKS'
3161      and object_type_from in ('PA_STRUCTURES','PA_TASKS')
3162      and object_type_to = 'PA_TASKS' -- Bug 6429275
3163      and relationship_type = 'S';
3164   l_weighting_percentage     NUMBER;
3165 
3166 --hsiu added for task status
3167   l_error_message_code  VARCHAR2(250);
3168   l_create_task_ver_flag varchar2(1);
3169 
3170   -- Bug # 4691749.
3171   -- Replacing this varray PA_NUM_1000_NUM with t_TBDtasksTable index table.
3172   TYPE t_TBD_tasksTable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3173   --l_tbd_task_ver_id     PA_NUM_1000_NUM := PA_NUM_1000_NUM(); --replacing this varray with t_TBDtasksTable index table.
3174   l_tbd_task_ver_id       t_TBD_tasksTable;
3175   l_tbd_index             NUMBER := 0;
3176   -- Bug # 4691749.
3177 
3178   -- Added for  4096218
3179   -- This VARRAY will hold the list of to_be_deleted tasks' proj_element_ids
3180   l_tbd_task_id         PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3181 
3182   l_del_task_cnt        NUMBER;
3183 
3184   CURSOR get_tbd_tasks_info(c_task_ver_id NUMBER) IS
3185     select parent_structure_version_id, element_version_id,
3186            record_version_number
3187       from pa_proj_element_versions
3188      where element_version_id = c_task_ver_id;
3189   l_tbd_tasks_info_rec   get_tbd_tasks_info%ROWTYPE;
3190 
3191   CURSOR get_parent_id(c_task_ver_id NUMBER) IS
3192     select object_id_from1
3193       from pa_object_relationships
3194      where object_id_to1 = c_task_ver_id
3195        and object_type_to = 'PA_TASKS'
3196        and relationship_type = 'S';
3197   l_parent_id NUMBER;
3198   l_parent_ver_id NUMBER;
3199   TYPE t_parentTable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3200   l_parent_tbl t_parentTable;
3201 
3202 --bug 2662139
3203   CURSOR is_summary_elem(c_elem_ver_id NUMBER) IS
3204     SELECT '1'
3205       from pa_object_relationships
3206      where object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
3207        and object_id_from1 = c_elem_ver_id
3208        and relationship_type = 'S';
3209 
3210 --bug
3211     l_err_code         NUMBER:= 0;
3212     l_err_stack        VARCHAR2(630);
3213     l_err_stage        VARCHAR2(80);
3214 
3215     l_messages         PA_PROJECT_STRUCTURE_PVT1.PA_PUBLISH_ERR_TBL_TYPE;
3216     l_page_content_id  NUMBER;
3217     l_item_key         VARCHAR2(240);
3218 
3219 --added for performace improvement
3220     X_Row_id  VARCHAR2(255);
3221 
3222 --added for performance improvement
3223     l_workplan_type    VARCHAR2(1);
3224     l_financial_type   VARCHAR2(1);
3225 
3226     --maansari
3227     i NUMBER := 1;
3228 --    l_user_id    NUMBER := FND_GLOBAL.USER_ID;
3229     l_login_id   NUMBER := FND_GLOBAL.LOGIN_ID;
3230     --maansari
3231 
3232 --bug 3047602
3233   l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
3234   cursor get_all_new_childs(c_new_struc_ver_id NUMBER) IS
3235     select element_version_id
3236     from pa_proj_element_versions
3237     where parent_structure_version_id = c_new_struc_ver_id
3238     and object_type = 'PA_TASKS';
3239 --end bug 3047602
3240 
3241   l_rowid VARCHAR2(255);
3242   CURSOR cur_elem_ver_seq IS
3243     SELECT pa_proj_element_versions_s.nextval
3244       FROM sys.dual;
3245 
3246   l_last_pub_str_ver_id   NUMBER;            --Bug No. 3450684  Smukka 01/03/2004
3247   l_chk_deliverable       VARCHAR2(80);      --Summuka For checking deliverables
3248 
3249   --bug 3822112
3250   l_share_flag            VARCHAR2(1)  := 'N';
3251   l_copy_actuals_flag     VARCHAR2(1)  := 'Y';
3252   -- Bug 3839288 Begin
3253   l_task_weight_basis_code pa_proj_progress_attr.task_weight_basis_code%TYPE;
3254   l_as_of_date             DATE;
3255   -- Bug 3839288 End
3256   l_upd_new_elem_ver_id_flag VARCHAR2(1) := 'Y'; --rtarway, 3951024
3257 
3258   l_debug_mode             VARCHAR2(1);
3259   BEGIN
3260 
3261     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
3262 
3263     IF (p_debug_mode = 'Y') THEN
3264       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE begin');
3265     END IF;
3266 
3267     IF (p_commit = FND_API.G_TRUE) THEN
3268       savepoint publish_structure_pvt;
3269     END IF;
3270 
3271     PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
3272 
3273     ----------
3274     -- code --
3275     IF p_user_id IS NULL THEN
3276       l_user_id := FND_GLOBAL.USER_ID;
3277     ELSE
3278       l_user_id := p_user_id;
3279     END IF;
3280 
3281     l_workplan_type    := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
3282     l_financial_type   := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
3283 
3284     select project_id
3285     into l_project_id
3286     from pa_proj_element_versions
3287     where element_version_id = p_structure_version_id;
3288 
3289     --bug 3840509
3290     IF 'Y' = nvl(PA_PROJECT_STRUCTURE_UTILS.Get_Sch_Dirty_fl(l_project_id,
3291                                                              p_structure_version_id), 'N') THEN
3292       --need to reschedule
3293       PA_UTILS.ADD_MESSAGE('PA','PA_PS_NEED_THIRD_PT_SCH');
3294       x_msg_data := 'PA_PS_NEED_THIRD_PT_SCH';
3295       RAISE FND_API.G_EXC_ERROR;
3296     END IF;
3297     --end bug 3840509
3298 
3299     l_share_flag       := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);   --bug 3822112
3300 
3301     --Set the baseline flags
3302     l_original_baseline_flag := p_original_baseline_flag;
3303     l_current_baseline_flag  := p_current_baseline_flag;
3304 
3305     /* Smukka 01/03/2004 Bug No. 3450684                                                   */
3306     /* Added the following if block for getting the lastest published structure version id */
3307     IF l_workplan_type = 'Y' THEN
3308        l_last_pub_str_ver_id:=PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(l_project_id);
3309     ELSIF l_financial_type = 'Y' THEN
3310           l_last_pub_str_ver_id:=PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_FIN_STRUC_VER_ID(l_project_id);
3311     END IF;
3312 
3313     --hsiu: changes for checking transaction currency difference
3314     --for bug 3786612
3315     PA_PROGRESS_UTILS.check_txn_currency_diff
3316     (
3317       p_structure_version_id => p_structure_version_id,
3318       p_context => 'PUBLISH_STRUCTURE',
3319       x_return_status => l_return_status
3320     );
3321 
3322     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3323       RAISE FND_API.G_EXC_ERROR;
3324     END IF;
3325     --end changes for bug 3786612
3326 
3327     --hsiu: bug 2684465
3328     --Check if this structure missing tasks with transactions
3329 --    IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
3330 --      PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
3331 --      x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
3332 --      RAISE FND_API.G_EXC_ERROR;
3333 --    END IF;
3334     PA_PROJECT_STRUCTURE_UTILS.CHECK_MISS_TRANSACTION_TASKS(p_structure_version_id,
3335                                                             l_return_status,
3336                                                             l_msg_count,
3337                                                             l_msg_data);
3338     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3339       RAISE FND_API.G_EXC_ERROR;
3340     END IF;
3341 
3342     --Check if task statuses are consistent
3343     PA_PROJECT_STRUCTURE_UTILS.check_tasks_statuses_valid(
3344       p_structure_version_id
3345      ,l_return_status
3346      ,l_msg_count
3347      ,l_msg_data
3348     );
3349     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3350       RAISE FND_API.G_EXC_ERROR;
3351     END IF;
3352 
3353     --Check if any new summary task has transactions
3354     PA_PROJECT_STRUCTURE_UTILS.Check_txn_on_summary_tasks(
3355       p_structure_version_id
3356      ,l_return_status
3357      ,l_msg_count
3358      ,l_msg_data
3359     );
3360     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3361       PA_UTILS.ADD_MESSAGE('PA',l_error_message_code);
3362       x_msg_data := l_error_message_code;
3363       RAISE FND_API.G_EXC_ERROR;
3364     END IF;
3365     --end bug 2684465
3366 
3367 
3368     --Check if this structure can be published (ie, if linked structures are published)
3369 --    IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Publish_Struc_Ver_Ok(p_structure_version_id)) THEN
3370 --      PA_UTILS.ADD_MESSAGE('PA','PA_PS_LINK_STRUC_NOT_PUB');
3371 --      x_msg_data := 'PA_PS_LINK_STRUC_NOT_PUB';
3372 --      RAISE FND_API.G_EXC_ERROR;
3373 --    END IF;
3374 
3375     --Check if this structure missing tasks with transactions
3376 --    IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
3377 --      PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
3378 --      x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
3379 --      RAISE FND_API.G_EXC_ERROR;
3380 --    END IF;
3381 
3382     --For rollups
3383 --    IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
3384 --      OPEN get_linking_tasks;
3385 --      LOOP
3386 --        FETCH get_linking_tasks INTO l_linking_task_rec;
3387 --        EXIT WHEN get_linking_tasks%NOTFOUND;
3388 --        l_tasks_ver_ids.extend;
3389 --        l_tasks_ver_ids(l_tasks_ver_ids.count) := l_linking_task_rec.element_version_id;
3390 --      END LOOP;
3391 --      CLOSE get_linking_tasks;
3392 --
3393 --      IF (l_tasks_ver_ids.count > 0) THEN
3394 --        PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
3395 --                       p_commit => FND_API.G_FALSE,
3396 --                       p_element_versions => l_tasks_ver_ids,
3397 --                       x_return_status => l_return_status,
3398 --                       x_msg_count => l_msg_count,
3399 --                       x_msg_data => l_msg_data);
3400 --
3401 --        if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
3402 --          x_msg_count := FND_MSG_PUB.count_msg;
3403 --          if x_msg_count = 1 then
3404 --            x_msg_data := l_msg_data;
3405 --          end if;
3406 --          raise FND_API.G_EXC_ERROR;
3407 --        end if;
3408 --
3409 --      END IF;
3410 --    END IF;
3411 
3412     --Check if any linked structure is workplan type and if publishing structure is
3413     --  financial only
3414 
3415     --dbms_output.put_line('1');
3416     OPEN get_struc_ver_name;
3417 --dbms_output.put_line('open  get_struc_ver_name');
3418     FETCH get_struc_ver_name into l_dummy_name, l_project_id,
3419                                   l_proj_element_id, l_element_version_id,
3420                                   l_pev_structure_id;
3421     IF get_struc_ver_name%NOTFOUND THEN
3422 --dbms_output.put_line('close get_struc_ver_name');
3423       CLOSE get_struc_ver_name;
3424       RAISE NO_DATA_FOUND;
3425     END IF;
3426 --dbms_output.put_line('close get_struc_ver_name');
3427     CLOSE get_struc_ver_name;
3428     --dbms_output.put_line('1b');
3429 
3430     --Set baseline flags if this is the first published version
3431     IF ('N' = PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(l_project_id, l_proj_element_id)) THEN
3432       l_current_baseline_flag := 'Y';
3433       l_original_baseline_flag := 'Y';
3434     END IF;
3435 
3436     --Get Structure Version Attribute Info
3437 --dbms_output.put_line('open get_structure_ver_attr_csr');
3438     OPEN get_structure_ver_attr_csr(p_structure_version_id, l_project_id);
3439     FETCH get_structure_ver_attr_csr INTO l_struc_ver_attr_rec;
3440 --dbms_output.put_line('close get_structure_ver_attr_csr');
3441     CLOSE get_structure_ver_attr_csr;
3442 
3443     --Copy structure version name and description
3444     IF (p_publish_structure_ver_name IS NULL) OR (p_publish_structure_ver_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3445       l_new_struct_ver_name := l_struc_ver_attr_rec.name;
3446     ELSE
3447       l_new_struct_ver_name := p_publish_structure_ver_name;
3448     END IF;
3449 
3450     IF (p_structure_ver_desc IS NULL) or (p_structure_ver_desc = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3451       l_new_struct_ver_desc := l_struc_ver_attr_rec.description;
3452     ELSE
3453       l_new_struct_ver_desc := p_structure_ver_desc;
3454     END IF;
3455 
3456     --l_dummy_name for current structure
3457     --p_publish_structure_ver_name for new publishing structure
3458     --Check if names are the same
3459     IF (l_dummy_name = l_new_struct_ver_name) THEN
3460       -- If same, add Time-Stamp to working version.
3461 --      error_msg('dummyname before '||l_dummy_name);
3462 --      l_dummy_name := substr(fnd_date.date_to_canonical(sysdate)||' - '||
3463 --                             l_dummy_name,0,240);
3464       --select prefix from pa_lookups
3465       select meaning
3466         into l_prefix
3467         from pa_lookups
3468        where lookup_type = 'PA_STRUCTURES_PREFIX'
3469          and lookup_code = 'PA_PREFIX_COPY';
3470 
3471       l_dummy_name := substrb(l_prefix||' '||l_dummy_name,0,240);
3472 
3473       -- Bug Fix 4727737
3474       -- We need to make sure that the name of the newly created working version is unique
3475       -- and not getting collided with the published versions name.
3476       -- Users can create data in such a way that the version name when prefixed with Copy To:
3477       -- will result into an existing published version name.
3478 
3479       -- So adding the following call to avoid the U2 violation due to the following update statement.
3480 
3481            IF (pa_project_structure_utils.check_struc_ver_name_unique(l_dummy_name,
3482                                                                       null,
3483                                                                       l_project_id,
3484                                                                       l_proj_element_id) <> 'Y') THEN
3485 
3486              --Not unique; error.
3487              pa_utils.add_message('PA','PA_PS_NEW_STRUC_VER_NAM_UNIQUE');
3488              x_msg_data := 'PA_PS_NEW_STRUC_VER_NAM_UNIQUE';
3489              RAISE FND_API.G_EXC_ERROR;
3490            END IF;
3491 
3492       -- End of Bug Fix 4727737
3493 
3494 --      error_msg('dummy_name after'||l_dummy_name);
3495       -- update_name
3496       update PA_PROJ_ELEM_VER_STRUCTURE
3497       set name = l_dummy_name,
3498           current_working_flag = 'Y'
3499       where pev_structure_id = l_pev_structure_id;
3500 
3501     END IF;
3502 
3503     --Check if structure version name is unique
3504     If (PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(l_new_struct_ver_name,
3505                                                                null,
3506                                                                l_project_id,
3507                                                                l_proj_element_id) <> 'Y') THEN
3508       --Not unique; error.
3509       PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
3510       x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
3511       RAISE FND_API.G_EXC_ERROR;
3512     END IF;
3513     --Bug No 3450684 Smukka Checking for deliverable type
3514     IF  PA_PROJ_ELEMENTS_UTILS.check_sharedstruct_deliv(p_structure_version_id) = 'Y' THEN
3515         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3516                              p_msg_name => 'PA_PS_CHK_DEL_FAIL_PUB_STR');
3517       RAISE FND_API.G_EXC_ERROR;
3518     END IF;
3519 
3520     --Get Structure Version Info
3521     --dbms_output.put_line('2');
3522 --dbms_output.put_line('open get_structure_ver_csr');
3523     OPEN get_structure_ver_csr(p_structure_version_id);
3524     FETCH get_structure_ver_csr INTO l_struc_ver_rec;
3525 --dbms_output.put_line('close get_structure_ver_csr');
3526     CLOSE get_structure_ver_csr;
3527     --dbms_output.put_line('2b');
3528 
3529     OPEN cur_elem_ver_seq;
3530     FETCH cur_elem_ver_seq into l_new_struct_ver_id;
3531     CLOSE cur_elem_ver_seq;
3532 
3533     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
3534     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_tmp_struct_ver_id
3535     -- to l_new_struct_ver_id
3536 
3537     l_tmp_struct_ver_id := l_new_struct_ver_id ;
3538 
3539     -- End 4657794
3540 
3541     PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
3542        X_ROW_ID                       => l_rowid
3543     --,X_ELEMENT_VERSION_ID           => l_new_struct_ver_id        * commented for Bug Fix: 4537865
3544       ,X_ELEMENT_VERSION_ID       => l_tmp_struct_ver_id        -- added for Bug fix: 4537865
3545       ,X_PROJ_ELEMENT_ID              => l_struc_ver_rec.proj_element_id
3546       ,X_OBJECT_TYPE                  => 'PA_STRUCTURES'
3547       ,X_PROJECT_ID                   => l_struc_ver_rec.project_id
3548       ,X_PARENT_STRUCTURE_VERSION_ID  => l_new_struct_ver_id
3549       ,X_DISPLAY_SEQUENCE             => NULL
3550       ,X_WBS_LEVEL                    => NULL
3551       ,X_WBS_NUMBER                   => '0'
3552       ,X_ATTRIBUTE_CATEGORY           => l_struc_ver_rec.attribute_category
3553       ,X_ATTRIBUTE1                   => l_struc_ver_rec.attribute1
3554       ,X_ATTRIBUTE2                   => l_struc_ver_rec.attribute2
3555       ,X_ATTRIBUTE3                   => l_struc_ver_rec.attribute3
3556       ,X_ATTRIBUTE4                   => l_struc_ver_rec.attribute4
3557       ,X_ATTRIBUTE5                   => l_struc_ver_rec.attribute5
3558       ,X_ATTRIBUTE6                   => l_struc_ver_rec.attribute6
3559       ,X_ATTRIBUTE7                   => l_struc_ver_rec.attribute7
3560       ,X_ATTRIBUTE8                   => l_struc_ver_rec.attribute8
3561       ,X_ATTRIBUTE9                   => l_struc_ver_rec.attribute9
3562       ,X_ATTRIBUTE10                  => l_struc_ver_rec.attribute10
3563       ,X_ATTRIBUTE11                  => l_struc_ver_rec.attribute11
3564       ,X_ATTRIBUTE12                  => l_struc_ver_rec.attribute12
3565       ,X_ATTRIBUTE13                  => l_struc_ver_rec.attribute13
3566       ,X_ATTRIBUTE14                  => l_struc_ver_rec.attribute14
3567       ,X_ATTRIBUTE15                  => l_struc_ver_rec.element_version_id
3568       ,X_TASK_UNPUB_VER_STATUS_CODE   => NULL
3569             ,X_SOURCE_OBJECT_ID             => l_struc_ver_rec.project_id
3570             ,X_SOURCE_OBJECT_TYPE           => 'PA_PROJECTS'
3571     );
3572     -- added for Bug fix: 4537865
3573         l_new_struct_ver_id := l_tmp_struct_ver_id;
3574     -- added for Bug fix: 4537865
3575 
3576 /* This API insert into planning txn table if wp. Call table hander instead
3577     --Call Create Structure Version
3578     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
3579      ( p_validate_only         => p_validate_only
3580       ,p_structure_id          => l_struc_ver_rec.proj_element_id
3581       ,p_attribute_category    => l_struc_ver_rec.attribute_category
3582       ,p_attribute1            => l_struc_ver_rec.attribute1
3583       ,p_attribute2            => l_struc_ver_rec.attribute2
3584       ,p_attribute3            => l_struc_ver_rec.attribute3
3585       ,p_attribute4            => l_struc_ver_rec.attribute4
3586       ,p_attribute5            => l_struc_ver_rec.attribute5
3587       ,p_attribute6            => l_struc_ver_rec.attribute6
3588       ,p_attribute7            => l_struc_ver_rec.attribute7
3589       ,p_attribute8            => l_struc_ver_rec.attribute8
3590       ,p_attribute9            => l_struc_ver_rec.attribute9
3591       ,p_attribute10           => l_struc_ver_rec.attribute10
3592       ,p_attribute11           => l_struc_ver_rec.attribute11
3593       ,p_attribute12           => l_struc_ver_rec.attribute12
3594       ,p_attribute13           => l_struc_ver_rec.attribute13
3595       ,p_attribute14           => l_struc_ver_rec.attribute14
3596       ,p_attribute15           => l_struc_ver_rec.element_version_id    --for performacnce to be used later by new structure version
3597       ,x_structure_version_id  => l_new_struct_ver_id
3598       ,x_return_status         => l_return_status
3599       ,x_msg_count             => l_msg_count
3600       ,x_msg_data              => l_msg_data );
3601 --dbms_output.put_line('new struct version id = '||l_new_struct_ver_id);
3602 */
3603 
3604     IF (p_debug_mode = 'Y') THEN
3605       pa_debug.debug('create structure version =>'||l_new_struct_ver_id);
3606     END IF;
3607 
3608     l_msg_count := FND_MSG_PUB.count_msg;
3609     if l_msg_count > 0 then
3610       x_msg_count := l_msg_count;
3611       if x_msg_count = 1 then
3612         x_msg_data := l_msg_data;
3613       end if;
3614       raise FND_API.G_EXC_ERROR;
3615     end if;
3616 
3617     --update links linking from working version to current published version
3618 --    PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS
3619 --    (
3620 --      p_init_msg_list       => FND_API.G_FALSE
3621 --     ,p_commit              => FND_API.G_FALSE
3622 --     ,p_debug_mode          => p_debug_mode
3623 --     ,p_orig_project_id     => l_project_id
3624 --     ,p_orig_structure_id   => l_proj_element_id
3625 --     ,p_orig_struc_ver_id   => p_structure_version_id
3626 --     ,p_orig_task_ver_id    => NULL
3627 --     ,p_new_project_id      => l_project_id
3628 --     ,p_new_structure_id    => l_struc_ver_rec.proj_element_id
3629 --     ,p_new_struc_ver_id    => l_new_struct_ver_id
3630 --     ,p_new_task_ver_id     => NULL
3631 --     ,x_return_status       => l_return_status
3632 --     ,x_msg_count           => l_msg_count
3633 --     ,x_msg_data            => l_msg_data
3634 --    );
3635 --
3636 --    l_msg_count := FND_MSG_PUB.count_msg;
3637 --    if l_msg_count > 0 then
3638 --      x_msg_count := l_msg_count;
3639 --      if x_msg_count = 1 then
3640 --        x_msg_data := l_msg_data;
3641 --      end if;
3642 --      raise FND_API.G_EXC_ERROR;
3643 --    end if;
3644 
3645     --Search for incoming links; update existing links
3646     --dbms_output.put_line('3');
3647 --dbms_output.put_line('open p_structure_version_id');
3648 --    OPEN get_from_id(p_structure_version_id);
3649 --    LOOP
3650 --      IF (p_debug_mode = 'Y') THEN
3651 --        pa_debug.debug('check incoming links for struct');
3652 --      END IF;
3653 --      FETCH get_from_id INTO l_from_object_info;
3654 --      EXIT WHEN get_from_id%NOTFOUND;
3655 --
3656 --      If (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
3657 --        --get element information, then update
3658 --        --dbms_output.put_line('4');
3659 --dbms_output.put_line('open get_structure_version_info');
3660 --        OPEN get_structure_version_info(l_from_object_info.object_id_from);
3661 --        FETCH get_structure_version_info INTO l_info_struc_ver_rec;
3662 --        PA_RELATIONSHIP_PVT.Update_Relationship(
3663 --          p_init_msg_list => FND_API.G_FALSE
3664 --         ,p_commit => FND_API.G_FALSE
3665 --         ,p_debug_mode => p_debug_mode
3666 --         ,p_object_relationship_id    => l_from_object_info.object_relationship_id
3667 --         ,p_project_id_from           => l_info_struc_ver_rec.project_id
3668 --         ,p_structure_id_from         => l_info_struc_ver_rec.structure_id
3669 --         ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
3670 --         ,p_task_version_id_from      => NULL
3671 --         ,p_project_id_to             => l_project_id
3672 --         ,p_structure_id_to           => l_struc_ver_rec.proj_element_id
3673 --         ,p_structure_version_id_to   => l_new_struct_ver_id
3674 --         ,p_task_version_id_to        => NULL
3675 --         ,p_relationship_type         => 'L'
3676 --         ,p_relationship_subtype      => 'READ_WRITE'
3677 --         ,p_record_version_number     => l_from_object_info.record_version_number
3678 --         ,x_return_status             => l_return_status
3679 --         ,x_msg_count                 => l_msg_count
3680 --         ,x_msg_data                  => l_msg_data
3681 --        );
3682 --dbms_output.put_line('close get_structure_version_info');
3683 --        CLOSE get_structure_version_info;
3684 --        --dbms_output.put_line('4b');
3685 --
3686 --
3687 --      ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
3688 --        --get element information, then update
3689 --        --dbms_output.put_line('5');
3690 --dbms_output.put_line('open get_task_version_info');
3691 --        OPEN get_task_version_info(l_from_object_info.object_id_from);
3692 --        FETCH get_task_version_info INTO l_info_task_ver_rec;
3693 --        PA_RELATIONSHIP_PVT.Update_Relationship(
3694 --          p_init_msg_list => FND_API.G_FALSE
3695 --         ,p_commit => FND_API.G_FALSE
3696 --         ,p_debug_mode => p_debug_mode
3697 --         ,p_object_relationship_id    => l_from_object_info.object_relationship_id
3698 --         ,p_project_id_from           => l_info_task_ver_rec.project_id
3699 --         ,p_structure_id_from         => l_info_task_ver_rec.structure_id
3700 --         ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
3701 --         ,p_task_version_id_from      => l_info_task_ver_rec.task_version_id
3702 --         ,p_project_id_to             => l_project_id
3703 --         ,p_structure_id_to           => l_struc_ver_rec.proj_element_id
3704 --         ,p_structure_version_id_to   => l_new_struct_ver_id
3705 --         ,p_task_version_id_to        => NULL
3706 --         ,p_relationship_type         => 'L'
3707 --         ,p_relationship_subtype      => 'READ_WRITE'
3708 --         ,p_record_version_number     => l_from_object_info.record_version_number
3709 --         ,x_return_status             => l_return_status
3710 --         ,x_msg_count                 => l_msg_count
3711 --         ,x_msg_data                  => l_msg_data
3712 --        );
3713 --dbms_output.put_line('close get_task_version_info');
3714 --        CLOSE get_task_version_info;
3715 --        --dbms_output.put_line('5b');
3716 --
3717 --      END IF;
3718 --      If (p_debug_mode = 'Y') THEN
3719 --        pa_debug.debug('update incoming links for struct =>'||l_return_status);
3720 --      END IF;
3721 --
3722 --      --Check error
3723 --      l_msg_count := FND_MSG_PUB.count_msg;
3724 --      if (l_msg_count > 0) then
3725 --        x_msg_count := l_msg_count;
3726 --        if x_msg_count = 1 then
3727 --          x_msg_data := l_msg_data;
3728 --        end if;
3729 --dbms_output.put_line('close get_from_id');
3730 --        CLOSE get_from_id;
3731 --        raise FND_API.G_EXC_ERROR;
3732 --      end if;
3733 --
3734 --
3735 --    END LOOP;
3736 --dbms_output.put_line('close get_from_id');
3737 --    CLOSE get_from_id;
3738     --dbms_output.put_line('5b');
3739 
3740     -----------------------------------------------
3741     --Search for outgoing links; create new Links--
3742     --dbms_output.put_line('6');
3743 --dbms_output.put_line('open get_to_id');
3744 --    OPEN get_to_id(p_structure_version_id);
3745 --    LOOP
3746 --      IF (p_debug_mode = 'Y') THEN
3747 --        pa_debug.debug('check outgoing links for struct');
3748 --      END IF;
3749 --      FETCH get_to_id INTO l_to_object_info;
3750 --      EXIT WHEN get_to_id%NOTFOUND;
3751 --      If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
3752 --        --dbms_output.put_line('7');
3753 --dbms_output.put_line('open get_structure_version_info');
3754 --        OPEN get_structure_version_info(l_to_object_info.object_id_to);
3755 --        FETCH get_structure_version_info INTO l_info_struc_ver_rec;
3756 /*****************************/
3757 --dbms_output.put_line('creating rel: structure out going links for structures');
3758 --        PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
3759 --         p_user_id => FND_GLOBAL.USER_ID
3760 --        ,p_object_type_from => 'PA_STRUCTURES'
3761 --        ,p_object_id_from1 => l_new_struct_ver_id
3762 --        ,p_object_id_from2 => NULL
3763 --        ,p_object_id_from3 => NULL
3764 --        ,p_object_id_from4 => NULL
3765 --        ,p_object_id_from5 => NULL
3766 --        ,p_object_type_to => 'PA_STRUCTURES'
3767 --        ,p_object_id_to1 => l_info_struc_ver_rec.structure_version_id
3768 --        ,p_object_id_to2 => NULL
3769 --        ,p_object_id_to3 => NULL
3770 --        ,p_object_id_to4 => NULL
3771 --        ,p_object_id_to5 => NULL
3772 --        ,p_relationship_type => 'L'
3773 --        ,p_relationship_subtype => 'READ_WRITE'
3774 --        ,p_lag_day => NULL
3775 --        ,p_imported_lag => NULL
3776 --        ,p_priority => NULL
3777 --        ,p_pm_product_code => NULL
3778 --        ,x_object_relationship_id => l_new_obj_rel_id
3779 --        ,x_return_status => l_return_status
3780 --        );
3781 --
3782 /*****************************/
3783 --dbms_output.put_line('close get_structure_version_info');
3784 --        CLOSE get_structure_version_info;
3785 --        --dbms_output.put_line('7b');
3786 --
3787 --      ELSIF(l_to_object_info.object_type_to = 'PA_TASKS') THEN
3788 --        --dbms_output.put_line('8');
3789 --dbms_output.put_line('open get_task_version_info');
3790 --        OPEN get_task_version_info(l_to_object_info.object_id_to);
3791 --        FETCH get_task_version_info INTO l_info_task_ver_rec;
3792 /*****************************/
3793 --dbms_output.put_line('creating rel: structure out going links for tasks');
3794 --        PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
3795 --         p_user_id => FND_GLOBAL.USER_ID
3796 --        ,p_object_type_from => 'PA_STRUCTURES'
3797 --        ,p_object_id_from1 => l_new_struct_ver_id
3798 --        ,p_object_id_from2 => NULL
3799 --        ,p_object_id_from3 => NULL
3800 --        ,p_object_id_from4 => NULL
3801 --        ,p_object_id_from5 => NULL
3802 --        ,p_object_type_to => 'PA_TASKS'
3803 --        ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
3804 --        ,p_object_id_to2 => NULL
3805 --        ,p_object_id_to3 => NULL
3806 --        ,p_object_id_to4 => NULL
3807 --        ,p_object_id_to5 => NULL
3808 --        ,p_relationship_type => 'L'
3809 --        ,p_relationship_subtype => 'READ_WRITE'
3810 --        ,p_lag_day => NULL
3811 --        ,p_imported_lag => NULL
3812 --        ,p_priority => NULL
3813 --        ,p_pm_product_code => NULL
3814 --        ,x_object_relationship_id => l_new_obj_rel_id
3815 --        ,x_return_status => l_return_status
3816 --        );
3817 --
3818 /*****************************/
3819 --dbms_output.put_line('close get_task_version_info');
3820 --        CLOSE get_task_version_info;
3821 --        --dbms_output.put_line('8b');
3822 --
3823 --        If (p_debug_mode = 'Y') THEN
3824 --          pa_debug.debug('update outgoing links for struct =>'||l_return_status);
3825 --        END IF;
3826 --      END IF;
3827 --      --Check error
3828 --      l_msg_count := FND_MSG_PUB.count_msg;
3829 --      if (l_msg_count > 0) then
3830 --        x_msg_count := l_msg_count;
3831 --        if x_msg_count = 1 then
3832 --          x_msg_data := l_msg_data;
3833 --        end if;
3834 --dbms_output.put_line('close get_to_id');
3835 --        CLOSE get_to_id;
3836 --        raise FND_API.G_EXC_ERROR;
3837 --      end if;
3838 
3839 --    END LOOP;
3840 --dbms_output.put_line('close get_to_id');
3841 --    CLOSE get_to_id;
3842     --dbms_output.put_line('6b');
3843 
3844 
3845 --maansari
3846 --initialized the pl/sql table
3847 l_src_tasks_versions_tbl.delete;
3848 --maansari
3849 
3850     --Create the task versions
3851     --Fetch all task versions
3852 --    error_msg('create tasks');
3853 --dbms_output.put_line('open get_Task_versions_csr');
3854     OPEN get_task_versions_csr(p_structure_version_id);
3855     l_last_wbs_level := NULL;
3856     LOOP
3857       IF (p_debug_mode = 'Y') THEN
3858         pa_debug.debug('create task version for published structure');
3859       END IF;
3860 
3861       FETCH get_task_versions_csr INTO l_task_versions_rec;
3862       EXIT WHEN get_task_versions_csr%NOTFOUND;
3863 
3864 --hsiu added for task version status
3865 --Check if this task can be deleted.
3866 --Call PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok
3867 --If ok to be deleted, move on to the next task and don't add this task
3868 --  (goto l_endofloop);
3869 --otherwise add this task and set status to 'CANCELLED'
3870       l_create_task_ver_flag := 'Y';
3871 
3872       --Removing due to changes in publishing
3873       select a.proj_element_id, b.object_id_from1
3874       into   l_parent_id, l_parent_ver_id
3875       from pa_proj_element_versions a,
3876            pa_object_relationships b
3877       where a.element_version_id = b.object_id_from1
3878       and a.object_type = b.object_type_from
3879       and relationship_type = 'S'
3880       and object_id_to1 = l_task_versions_rec.element_version_id
3881       and object_type_to = 'PA_TASKS';
3882 
3883       --If it is financial task, check if this task should be created
3884 
3885 --      PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
3886 --        p_parent_task_ver_id => l_parent_ver_id
3887 --       ,x_return_status => l_return_status
3888 --       ,x_error_message_code => l_error_message_code);
3889 
3890 --bug: 2805602
3891 --hsiu: commented because this has been done in check_txn_on_summary_tasks
3892 --      If (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_parent_id) = 'Y') THEN
3893 --        PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK(x_task_id => l_parent_id,
3894 --          x_err_code => l_err_code,
3895 --          x_err_stack => l_err_stack,
3896 --          x_err_stage => l_err_stage
3897 --          );
3898 --        IF (l_err_code <> 0) THEN
3899 --          l_create_task_ver_flag := 'N';
3900 --        END IF;
3901 --      END IF;
3902 
3903 --      IF (l_return_status <> 'Y') THEN
3904 --        l_create_task_ver_flag := 'N';
3905 --      END IF;
3906 
3907       IF (l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE = 'TO_BE_DELETED') THEN
3908 
3909         PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok(
3910                      p_project_id             => l_task_versions_rec.project_id
3911                     ,p_task_version_id        => l_task_versions_rec.element_version_id
3912                     ,p_parent_structure_ver_id=> l_task_versions_rec.parent_structure_version_id
3913                     ,x_return_status          => l_return_status
3914                     ,x_error_message_code     => l_error_message_code );
3915         IF l_return_status <> 'S' THEN
3916 --Cannot delete this version. Create and set as cancelled
3917           l_create_task_ver_flag := 'Y';
3918         ELSE
3919 --This task version should not be created
3920           l_create_task_ver_flag := 'N';
3921 --delete from working if found
3922 
3923           -- Bug # 4691749.
3924           -- l_tbd_task_ver_id.extend;
3925           -- l_tbd_task_ver_id(l_tbd_task_ver_id.count) := l_task_versions_rec.element_version_id;
3926           l_tbd_index := l_tbd_index + 1;
3927           l_tbd_task_ver_id(l_tbd_index) := l_task_versions_rec.element_version_id;
3928           -- Bug # 4691749.
3929 
3930           -- Start : 4096218
3931           if (l_tbd_task_id.count < 1000) then -- Bug # 4691749.
3932       	 	l_tbd_task_id.extend;
3933          	l_tbd_task_id(l_tbd_task_id.count) := l_task_versions_rec.proj_element_id;
3934           end if; -- Bug # 4691749.
3935           -- End : 4096218
3936 
3937 --prorate this branch; find parent
3938           IF (l_last_wbs_level is NULL) THEN
3939             l_parent_tbl(l_new_struct_ver_id) := l_new_struct_ver_id;
3940             --l_parent_ver_id := l_new_struct_ver_id;
3941           ELSE
3942             IF (l_task_versions_rec.wbs_level > l_last_wbs_level) THEN
3943               l_parent_tbl(l_outline_task_ref(l_last_wbs_level)) := l_outline_task_ref(l_last_wbs_level);
3944               --l_parent_ver_id := l_outline_task_ref(l_last_wbs_level);
3945             ELSE
3946               OPEN get_parent_id(l_outline_task_ref(l_task_versions_rec.wbs_level));
3947               FETCH get_parent_id into l_parent_ver_id;
3948               CLOSE get_parent_id;
3949               l_parent_tbl(l_parent_ver_id) := l_parent_ver_id;
3950             END IF;
3951           END IF;
3952         END IF;
3953         --set task status to cancelled.
3954         UPDATE pa_proj_elements
3955            set status_code = '128',
3956                RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,1)+1,
3957                LAST_UPDATE_DATE = SYSDATE,
3958                LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
3959                LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
3960          where proj_element_id = l_task_versions_rec.proj_element_id;
3961 
3962         update pa_proj_element_versions
3963            set TASK_UNPUB_VER_STATUS_CODE = 'PUBLISHED'
3964          where element_version_id = l_task_versions_rec.element_version_id;
3965 
3966         -- 3955848 Added code to delete task to dlvr association in publishing flow , version enabled case
3967         -- p_delete_or_validate is passed as 'D' because only deletion should be done
3968 
3969         PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
3970          (
3971              p_task_element_id      => l_task_versions_rec.proj_element_id
3972             ,p_project_id           => l_task_versions_rec.project_id
3973             ,p_task_version_id      => l_task_versions_rec.element_version_id
3974             ,p_delete_or_validate   => 'D'
3975             ,x_return_status        => x_return_status
3976             ,x_msg_count            => x_msg_count
3977             ,x_msg_data             => x_msg_data
3978          );
3979 
3980          IF x_return_status = FND_API.G_RET_STS_ERROR then
3981              RAISE FND_API.G_EXC_ERROR;
3982          End If;
3983 
3984         -- 3955848 end
3985 
3986       ELSE
3987         --if this task is linking to a working structure version
3988         --then do not copy
3989 
3990         --Added by rtarway for bug 4193990
3991         l_working_ver_fg := 'N';
3992 
3993         OPEN get_to_id(l_task_versions_rec.element_version_id);
3994         FETCH get_to_id INTO l_to_object_info;
3995         IF get_to_id%FOUND THEN
3996           --check if this is working version
3997           IF (pa_project_structure_utils.check_struc_ver_published(l_to_object_info.object_id_to2 ,l_to_object_info.object_id_to)
3998               = 'N') THEN
3999             l_working_ver_fg := 'Y';
4000           ELSE
4001             l_working_ver_fg := 'N';
4002           END IF;
4003         --Added by rtarway for bug 4193990
4004         ELSE
4005            l_working_ver_fg := 'N';
4006         --End Added by rtarway for bug 4193990
4007         END IF;
4008         CLOSE get_to_id;
4009 
4010         IF (l_working_ver_fg = 'Y') THEN
4011           l_create_task_ver_flag := 'N';
4012           IF (l_last_wbs_level is NULL) THEN
4013             l_parent_tbl(l_new_struct_ver_id) := l_new_struct_ver_id;
4014             --l_parent_ver_id := l_new_struct_ver_id;
4015           ELSE
4016             IF (l_task_versions_rec.wbs_level > l_last_wbs_level) THEN
4017               l_parent_tbl(l_outline_task_ref(l_last_wbs_level)) := l_outline_task_ref(l_last_wbs_level);
4018               --l_parent_ver_id := l_outline_task_ref(l_last_wbs_level);
4019             ELSE
4020               OPEN get_parent_id(l_outline_task_ref(l_task_versions_rec.wbs_level));
4021               FETCH get_parent_id into l_parent_ver_id;
4022               CLOSE get_parent_id;
4023               l_parent_tbl(l_parent_ver_id) := l_parent_ver_id;
4024             END IF;
4025           END IF;
4026         ELSE --copy
4027           update pa_proj_element_versions
4028              set TASK_UNPUB_VER_STATUS_CODE = 'PUBLISHED'
4029           where element_version_id = l_task_versions_rec.element_version_id;
4030         END IF;
4031       END IF;
4032 
4033 --maansari
4034       l_src_tasks_versions_tbl(i).src_task_version_id         := l_task_versions_rec.element_version_id;
4035       l_src_tasks_versions_tbl(i).src_version_status          := l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE;
4036       l_src_tasks_versions_tbl(i).src_parent_task_version_id  := l_parent_ver_id;
4037       l_src_tasks_versions_tbl(i).copy_flag                   := l_create_task_ver_flag;
4038       i := i + 1;
4039 --maansari
4040 
4041 /*--maansari  --commenting out the following code and replacing it with bulk insert
4042     IF (l_create_task_ver_flag = 'Y') THEN
4043 --dbms_output.put_line('creating task '||l_task_versions_rec.proj_element_id||', '||l_task_versions_rec.element_version_id);
4044       if l_last_wbs_level is null then
4045         -- first task version being created
4046         -- This task should have wbs level = 1
4047         l_ref_task_ver_id := l_new_struct_ver_id;
4048         l_peer_or_sub := 'SUB';
4049       else
4050         if l_task_versions_rec.wbs_level > l_last_wbs_level then
4051           l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
4052           l_peer_or_sub := 'SUB';
4053         else
4054           l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
4055           l_peer_or_sub := 'PEER';
4056         end if;
4057       end if;
4058 --dbms_output.put_line('l_ref_task_ver_id = '||l_ref_task_ver_id);
4059 --dbms_output.put_line('l_peer_or_sub =  '||l_peer_or_sub);
4060 --dbms_output.put_line('parent_element_version_id = '||l_task_versions_rec.parent_element_version_id);
4061 --Bug 2189657
4062 --Added for linking tasks with no display sequence.
4063 --Set correct reference and parent element version id
4064       If (l_task_versions_rec.display_sequence IS NULL) THEN
4065         IF (l_ref_task_ver_id <> l_new_struct_ver_id) THEN
4066           --A task has already been created. Reference task must be a task
4067           IF (l_task_versions_rec.parent_element_version_id = p_structure_version_id) THEN
4068             --this is a link to the structure version. A task has already been created.
4069             --need to use a top level task as peer reference task
4070             l_peer_or_sub := 'PEER';
4071             l_ref_task_ver_id := l_outline_task_ref(1);
4072           ELSE
4073             --this is a link to a task.
4074             l_peer_or_sub := 'SUB';
4075             l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
4076           END IF;
4077         ELSE
4078           --No task has been created. Reference task is structure
4079           l_peer_or_sub := 'SUB';
4080           l_ref_task_ver_id := l_new_struct_ver_id;
4081 --          l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
4082         END IF;
4083       END IF;
4084 --dbms_output.put_line('l_ref_task_ver_id = '||l_ref_task_ver_id);
4085 --dbms_output.put_line('l_peer_or_sub =  '||l_peer_or_sub);
4086 
4087       OPEN get_task_ver_weighting(l_task_versions_rec.element_version_id);
4088       FETCH get_task_ver_weighting into l_weighting_percentage;
4089       CLOSE get_task_ver_weighting;
4090 
4091 --Bug 2189657 end;
4092       PA_TASK_PVT1.CREATE_TASK_VERSION
4093       ( p_validate_only        => FND_API.G_FALSE
4094        ,p_validation_level     => 0
4095        ,p_ref_task_version_id  => l_ref_task_ver_id
4096        ,p_peer_or_sub          => l_peer_or_sub
4097        ,p_task_id              => l_task_versions_rec.proj_element_id
4098        ,p_WEIGHTING_PERCENTAGE => l_weighting_percentage
4099        ,p_TASK_UNPUB_VER_STATUS_CODE => 'PUBLISHED'
4100        ,x_task_version_id      => l_task_version_id
4101        ,x_return_status        => l_return_status
4102        ,x_msg_count            => l_msg_count
4103        ,x_msg_data             => l_msg_data);
4104 
4105       t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
4106 --dbms_output.put_line('elem_ver_id = '||l_task_versions_rec.element_version_id||', new elem_ver_id = '||l_task_version_id);
4107 
4108 --dbms_output.put_line('ref/peer = '||l_ref_task_ver_id||'/'||l_peer_or_sub||'elm Id = '||l_task_versions_rec.proj_element_id||', elm ver Id = '||l_task_version_id);
4109 
4110 --dbms_output.put_line('new task version id = '||l_task_version_id);
4111 
4112 --      error_msg('done create_task_version '||l_msg_count||', '||l_msg_data);
4113       --Check if there is any error.
4114       l_msg_count := FND_MSG_PUB.count_msg;
4115       IF l_msg_count > 0 THEN
4116         x_msg_count := l_msg_count;
4117         IF x_msg_count = 1 THEN
4118           x_msg_data := l_msg_data;
4119         END IF;
4120 --dbms_output.put_line('close get_task_versions_csr');
4121         CLOSE get_task_versions_csr;
4122         RAISE FND_API.G_EXC_ERROR;
4123       END IF;
4124 */ --maansari
4125 
4126 
4127 --      error_msg('before update published links');
4128       --update links linking from working version to current published version
4129 --      IF (p_debug_mode = 'Y') THEN
4130 --        pa_debug.debug('updating links');
4131 --      END IF;
4132 --      PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS
4133 --      (
4134 --        p_init_msg_list       => FND_API.G_FALSE
4135 --       ,p_commit              => FND_API.G_FALSE
4136 --       ,p_debug_mode          => p_debug_mode
4137 --       ,p_orig_project_id     => l_project_id
4138 --       ,p_orig_structure_id   => l_proj_element_id
4139 --       ,p_orig_struc_ver_id   => p_structure_version_id
4140 --       ,p_orig_task_ver_id    => l_task_versions_rec.element_version_id
4141 --       ,p_new_project_id      => l_project_id
4142 --       ,p_new_structure_id    => l_struc_ver_rec.proj_element_id
4143 --       ,p_new_struc_ver_id    => l_new_struct_ver_id
4144 --       ,p_new_task_ver_id     => l_task_version_id
4145 --       ,x_return_status       => l_return_status
4146 --       ,x_msg_count           => l_msg_count
4147 --       ,x_msg_data            => l_msg_data
4148 --      );
4149 --      error_msg('update latest published links');
4150 
4151       --Check if there is any error.
4152 --      l_msg_count := FND_MSG_PUB.count_msg;
4153 --      IF l_msg_count > 0 THEN
4154 --        x_msg_count := l_msg_count;
4155 --        IF x_msg_count = 1 THEN
4156 --          x_msg_data := l_msg_data;
4157 --        END IF;
4158 --dbms_output.put_line('close get_task_versions_csr');
4159 --        CLOSE get_task_versions_csr;
4160 --        RAISE FND_API.G_EXC_ERROR;
4161 --      END IF;
4162 
4163 
4164       --Search for incoming links; update existing links
4165 --dbms_output.put_line('open get_from_id');
4166 --      OPEN get_from_id(l_task_versions_rec.element_version_id);
4167 --      LOOP
4168 --        FETCH get_from_id INTO l_from_object_info;
4169 --        EXIT WHEN get_from_id%NOTFOUND;
4170 --        IF (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
4171 --dbms_output.put_line('open get_structure_version_info');
4172 --          OPEN get_structure_version_info(l_from_object_info.object_id_from);
4173 --          FETCH get_structure_version_info INTO l_info_struc_ver_rec;
4174 --          PA_RELATIONSHIP_PVT.Update_Relationship(
4175 --            p_init_msg_list => FND_API.G_FALSE
4176 --           ,p_commit => FND_API.G_FALSE
4177 --           ,p_debug_mode => p_debug_mode
4178 --           ,p_object_relationship_id    => l_from_object_info.object_relationship_id
4179 --           ,p_project_id_from           => l_info_struc_ver_rec.project_id
4180 --           ,p_structure_id_from         => l_info_struc_ver_rec.structure_id
4181 --           ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
4182 --           ,p_task_version_id_from      => NULL
4183 --           ,p_project_id_to             => l_project_id
4184 --           ,p_structure_id_to           => l_struc_ver_rec.proj_element_id
4185 --           ,p_structure_version_id_to   => l_new_struct_ver_id
4186 --           ,p_task_version_id_to        => l_task_version_id
4187 --           ,p_relationship_type         => 'L'
4188 --           ,p_relationship_subtype      => 'READ_WRITE'
4189 --           ,p_record_version_number     => l_from_object_info.record_version_number
4190 --           ,x_return_status             => l_return_status
4191 --           ,x_msg_count                 => l_msg_count
4192 --           ,x_msg_data                  => l_msg_data
4193 --          );
4194 --dbms_output.put_line('Incoming: From '||l_info_struc_ver_rec.structure_version_id||' To '||l_task_version_id);
4195 --dbms_output.put_line('close get_structure_version_info');
4196 --          CLOSE get_structure_version_info;
4197 --
4198 --        ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
4199 --dbms_output.put_line('get_task_version_info');
4200 --          OPEN get_task_version_info(l_from_object_info.object_id_from);
4201 --          FETCH get_task_version_info INTO l_info_task_ver_rec;
4202 --          PA_RELATIONSHIP_PVT.Update_Relationship(
4203 --            p_init_msg_list => FND_API.G_FALSE
4204 --           ,p_commit => FND_API.G_FALSE
4205 --           ,p_debug_mode => p_debug_mode
4206 --           ,p_object_relationship_id    => l_from_object_info.object_relationship_id
4207 --           ,p_project_id_from           => l_info_task_ver_rec.project_id
4208 --           ,p_structure_id_from         => l_info_task_ver_rec.structure_id
4209 --           ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
4210 --           ,p_task_version_id_from      => l_info_task_ver_rec.task_version_id
4211 --           ,p_project_id_to             => l_project_id
4212 --           ,p_structure_id_to           => l_struc_ver_rec.proj_element_id
4213 --           ,p_structure_version_id_to   => l_new_struct_ver_id
4214 --           ,p_task_version_id_to        => l_task_version_id
4215 --           ,p_relationship_type         => 'L'
4216 --           ,p_relationship_subtype      => 'READ_WRITE'
4217 --           ,p_record_version_number     => l_from_object_info.record_version_number
4218 --           ,x_return_status             => l_return_status
4219 --           ,x_msg_count                 => l_msg_count
4220 --           ,x_msg_data                  => l_msg_data
4221 --          );
4222 --dbms_output.put_line('Incoming: From '||l_info_task_ver_rec.task_version_id||' To '||l_task_version_id);
4223 --dbms_output.put_line('close get_task_version_info');
4224 --          CLOSE get_task_version_info;
4225 --        END IF;
4226 --
4227 --        --Check error
4228 --        l_msg_count := FND_MSG_PUB.count_msg;
4229 --        if (l_msg_count > 0) then
4230 --          x_msg_count := l_msg_count;
4231 --          if x_msg_count = 1 then
4232 --            x_msg_data := l_msg_data;
4233 --          end if;
4234 --dbms_output.put_line('close get_task_versions_csr');
4235 --          CLOSE get_task_versions_csr;
4236 --dbms_output.put_line('close get_from_id');
4237 --          CLOSE get_from_id;
4238 --          raise FND_API.G_EXC_ERROR;
4239 --        end if;
4240 
4241 --      END LOOP;
4242 --dbms_output.put_line('close get_from_id');
4243 --      CLOSE get_from_id;
4244 
4245       --Search for outgoing links; create new Links
4246 --dbms_output.put_line('get_to_id');
4247 --      OPEN get_to_id(l_task_versions_rec.element_version_id);
4248 --      LOOP
4249 --        FETCH get_to_id INTO l_to_object_info;
4250 --        EXIT WHEN get_to_id%NOTFOUND;
4251 --        If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
4252 --dbms_output.put_line('get_structure_version_info');
4253 --          OPEN get_structure_version_info(l_to_object_info.object_id_to);
4254 --          FETCH get_structure_version_info INTO l_info_struc_ver_rec;
4255 /*****************************/
4256 --dbms_output.put_line('creating rel: task out going links for structures');
4257 --dbms_output.put_line(l_project_id||','||l_struc_ver_rec.proj_element_id||','||l_new_struct_ver_id||','||','||l_task_version_id||', TO: '
4258 --||l_info_struc_ver_rec.project_id||','||l_info_struc_ver_rec.structure_id||','||l_info_struc_ver_rec.structure_version_id);
4259 --          PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
4260 --           p_user_id => FND_GLOBAL.USER_ID
4261 --          ,p_object_type_from => 'PA_TASKS'
4262 --          ,p_object_id_from1 => l_task_version_id
4263 --          ,p_object_id_from2 => NULL
4264 --          ,p_object_id_from3 => NULL
4265 --          ,p_object_id_from4 => NULL
4266 --          ,p_object_id_from5 => NULL
4267 --          ,p_object_type_to => 'PA_STRUCTURES'
4268 --          ,p_object_id_to1 => l_info_struc_ver_rec.structure_version_id
4269 --          ,p_object_id_to2 => NULL
4270 --          ,p_object_id_to3 => NULL
4271 --          ,p_object_id_to4 => NULL
4272 --          ,p_object_id_to5 => NULL
4273 --          ,p_relationship_type => 'L'
4274 --          ,p_relationship_subtype => 'READ_WRITE'
4275 --          ,p_lag_day => NULL
4276 --          ,p_imported_lag => NULL
4277 --          ,p_priority => NULL
4278 --          ,p_pm_product_code => NULL
4279 --          ,x_object_relationship_id => l_new_obj_rel_id
4280 --          ,x_return_status => l_return_status
4281 --          );
4282 --dbms_output.put_line('Outgoing: From '||l_task_version_id||' To '||l_info_struc_ver_rec.structure_version_id);
4283 
4284 /*****************************/
4285 --dbms_output.put_line('close get_structure_version_info');
4286 --          CLOSE get_structure_version_info;
4287 
4288 --        ELSIF (l_to_object_info.object_type_to = 'PA_TASKS') THEN
4289 --dbms_output.put_line('open get_task_version_info');
4290 --          OPEN get_task_version_info(l_to_object_info.object_id_to);
4291 --          FETCH get_task_version_info INTO l_info_task_ver_rec;
4292 /*****************************/
4293 --dbms_output.put_line('creating rel: task out going links for tasks');
4294 --          PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
4295 --           p_user_id => FND_GLOBAL.USER_ID
4296 --          ,p_object_type_from => 'PA_TASKS'
4297 --          ,p_object_id_from1 => l_task_version_id
4298 --          ,p_object_id_from2 => NULL
4299 --          ,p_object_id_from3 => NULL
4300 --          ,p_object_id_from4 => NULL
4301 --          ,p_object_id_from5 => NULL
4302 --          ,p_object_type_to => 'PA_TASKS'
4303 --          ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
4304 --          ,p_object_id_to2 => NULL
4305 --          ,p_object_id_to3 => NULL
4306 --          ,p_object_id_to4 => NULL
4307 --          ,p_object_id_to5 => NULL
4308 --          ,p_relationship_type => 'L'
4309 --          ,p_relationship_subtype => 'READ_WRITE'
4310 --          ,p_lag_day => NULL
4311 --          ,p_imported_lag => NULL
4312 --          ,p_priority => NULL
4313 --          ,p_pm_product_code => NULL
4314 --          ,x_object_relationship_id => l_new_obj_rel_id
4315 --          ,x_return_status => l_return_status
4316 --          );
4317 --dbms_output.put_line('Outgoing: From '||l_task_version_id||' To '||l_info_task_ver_rec.task_version_id);
4318 
4319 /*****************************/
4320 --dbms_output.put_line('close get_task_version_info');
4321 --          CLOSE get_task_version_info;
4322 --
4323 --        END IF;
4324 --
4325         --Check error
4326 --        l_msg_count := FND_MSG_PUB.count_msg;
4327 --        if (l_msg_count > 0) then
4328 --          x_msg_count := l_msg_count;
4329 --          if x_msg_count = 1 then
4330 --            x_msg_data := l_msg_data;
4331 --          end if;
4332 --dbms_output.put_line('close get_task_versions_csr');
4333 --          CLOSE get_task_versions_csr;
4334 --dbms_output.put_line('close get_to_id');
4335 --          CLOSE get_to_id;
4336 --          raise FND_API.G_EXC_ERROR;
4337 --        end if;
4338 --
4339 --      END LOOP;
4340 --dbms_output.put_line('close get_to_id');
4341 --      CLOSE get_to_id;
4342 
4343 
4344 --      IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
4345 /* maansari
4346       IF (l_workplan_type = 'Y') THEN
4347 --dbms_output.put_line('open get_ver_schedule_attr_csr');
4348         OPEN get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id,
4349                                        l_task_versions_rec.project_id);
4350         FETCH get_ver_schedule_attr_csr INTO l_ver_sch_attr_rec;
4351 --dbms_output.put_line('close get_ver_schedule_attr_csr');
4352         CLOSE get_ver_schedule_attr_csr;
4353 */ --maansari
4354 
4355 
4356 /* hsiu: bug 2800553: commented for performance improvement
4357         -- xxlu added DFF attributes
4358         PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
4359         (p_validate_only           => FND_API.G_FALSE
4360         ,p_element_version_id      => l_task_version_id
4361         ,p_calendar_id             => l_ver_sch_attr_rec.calendar_id
4362         ,p_scheduled_start_date    => l_ver_sch_attr_rec.scheduled_start_date
4363         ,p_scheduled_end_date      => l_ver_sch_attr_rec.scheduled_finish_date
4364         ,p_obligation_start_date   => l_ver_sch_attr_rec.obligation_start_date
4365         ,p_obligation_end_date     => l_ver_sch_attr_rec.obligation_finish_date
4366         ,p_actual_start_date       => l_ver_sch_attr_rec.actual_start_date
4367         ,p_actual_finish_date      => l_ver_sch_attr_rec.actual_finish_date
4368         ,p_estimate_start_date     => l_ver_sch_attr_rec.estimated_start_date
4369         ,p_estimate_finish_date    => l_ver_sch_attr_rec.estimated_finish_date
4370         ,p_duration                => l_ver_sch_attr_rec.duration
4371         ,p_early_start_date        => l_ver_sch_attr_rec.early_start_date
4372         ,p_early_end_date          => l_ver_sch_attr_rec.early_finish_date
4373         ,p_late_start_date         => l_ver_sch_attr_rec.late_start_date
4374         ,p_late_end_date           => l_ver_sch_attr_rec.late_finish_date
4375         ,p_milestone_flag          => l_ver_sch_attr_rec.milestone_flag
4376         ,p_critical_flag           => l_ver_sch_attr_rec.critical_flag
4377         ,p_WQ_PLANNED_QUANTITY     => l_ver_sch_attr_rec.WQ_PLANNED_QUANTITY
4378         ,p_PLANNED_EFFORT          => l_ver_sch_attr_rec.PLANNED_EFFORT
4379         ,p_attribute_category        => l_ver_sch_attr_rec.attribute_category
4380         ,p_attribute1                => l_ver_sch_attr_rec.attribute1
4381         ,p_attribute2                => l_ver_sch_attr_rec.attribute2
4382         ,p_attribute3                => l_ver_sch_attr_rec.attribute3
4383         ,p_attribute4                => l_ver_sch_attr_rec.attribute4
4384         ,p_attribute5                => l_ver_sch_attr_rec.attribute5
4385         ,p_attribute6                => l_ver_sch_attr_rec.attribute6
4386         ,p_attribute7                => l_ver_sch_attr_rec.attribute7
4387         ,p_attribute8                => l_ver_sch_attr_rec.attribute8
4388         ,p_attribute9                => l_ver_sch_attr_rec.attribute9
4389         ,p_attribute10             => l_ver_sch_attr_rec.attribute10
4390         ,p_attribute11             => l_ver_sch_attr_rec.attribute11
4391         ,p_attribute12             => l_ver_sch_attr_rec.attribute12
4392         ,p_attribute13             => l_ver_sch_attr_rec.attribute13
4393         ,p_attribute14             => l_ver_sch_attr_rec.attribute14
4394         ,p_attribute15             => l_ver_sch_attr_rec.attribute15
4395         ,x_pev_schedule_id         => l_pev_schedule_id
4396         ,x_return_status           => l_return_status
4397         ,x_msg_count               => l_msg_count
4398         ,x_msg_data                  => l_msg_data );
4399        -- end xxlu changes
4400 */
4401 --hsiu: bug 2800553: added for performance improvement
4402 /* maansari commenting the following code and replacing it with bulk insert
4403        l_new_pev_schedule_id := NULL;
4404        PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
4405          X_ROW_ID                => X_Row_Id
4406         ,X_PEV_SCHEDULE_ID     => l_new_pev_schedule_id
4407         ,X_ELEMENT_VERSION_ID      => l_task_version_id
4408         ,X_PROJECT_ID            => l_ver_sch_attr_rec.PROJECT_ID
4409         ,X_PROJ_ELEMENT_ID     => l_ver_sch_attr_rec.PROJ_ELEMENT_ID
4410         ,X_SCHEDULED_START_DATE  => l_ver_sch_attr_rec.SCHEDULED_START_DATE
4411         ,X_SCHEDULED_FINISH_DATE => l_ver_sch_attr_rec.SCHEDULED_FINISH_DATE
4412         ,X_OBLIGATION_START_DATE => l_ver_sch_attr_rec.OBLIGATION_START_DATE
4413         ,X_OBLIGATION_FINISH_DATE => l_ver_sch_attr_rec.OBLIGATION_FINISH_DATE
4414         ,X_ACTUAL_START_DATE        => l_ver_sch_attr_rec.ACTUAL_START_DATE
4415         ,X_ACTUAL_FINISH_DATE       => l_ver_sch_attr_rec.ACTUAL_FINISH_DATE
4416         ,X_ESTIMATED_START_DATE   => l_ver_sch_attr_rec.ESTIMATED_START_DATE
4417         ,X_ESTIMATED_FINISH_DATE  => l_ver_sch_attr_rec.ESTIMATED_FINISH_DATE
4418         ,X_DURATION           => l_ver_sch_attr_rec.DURATION
4419         ,X_EARLY_START_DATE     => l_ver_sch_attr_rec.EARLY_START_DATE
4420         ,X_EARLY_FINISH_DATE        => l_ver_sch_attr_rec.EARLY_FINISH_DATE
4421         ,X_LATE_START_DATE      => l_ver_sch_attr_rec.LATE_START_DATE
4422         ,X_LATE_FINISH_DATE     => l_ver_sch_attr_rec.LATE_FINISH_DATE
4423         ,X_CALENDAR_ID            => l_ver_sch_attr_rec.CALENDAR_ID
4424         ,X_MILESTONE_FLAG       => l_ver_sch_attr_rec.MILESTONE_FLAG
4425         ,X_CRITICAL_FLAG        => l_ver_sch_attr_rec.CRITICAL_FLAG
4426         ,X_WQ_PLANNED_QUANTITY      => l_ver_sch_attr_rec.wq_planned_quantity
4427         ,X_PLANNED_EFFORT           => l_ver_sch_attr_rec.planned_effort
4428         ,X_ACTUAL_DURATION          => l_ver_sch_attr_rec.actual_duration
4429         ,X_ESTIMATED_DURATION       => l_ver_sch_attr_rec.estimated_duration
4430         ,X_ATTRIBUTE_CATEGORY               => l_ver_sch_attr_rec.ATTRIBUTE_CATEGORY
4431         ,X_ATTRIBUTE1                       => l_ver_sch_attr_rec.ATTRIBUTE1
4432         ,X_ATTRIBUTE2                       => l_ver_sch_attr_rec.ATTRIBUTE2
4433         ,X_ATTRIBUTE3                       => l_ver_sch_attr_rec.ATTRIBUTE3
4434         ,X_ATTRIBUTE4                       => l_ver_sch_attr_rec.ATTRIBUTE4
4435         ,X_ATTRIBUTE5                       => l_ver_sch_attr_rec.ATTRIBUTE5
4436         ,X_ATTRIBUTE6                       => l_ver_sch_attr_rec.ATTRIBUTE6
4437         ,X_ATTRIBUTE7                       => l_ver_sch_attr_rec.ATTRIBUTE7
4438         ,X_ATTRIBUTE8                       => l_ver_sch_attr_rec.ATTRIBUTE8
4439         ,X_ATTRIBUTE9                       => l_ver_sch_attr_rec.ATTRIBUTE9
4440         ,X_ATTRIBUTE10                    => l_ver_sch_attr_rec.ATTRIBUTE10
4441         ,X_ATTRIBUTE11                    => l_ver_sch_attr_rec.ATTRIBUTE11
4442         ,X_ATTRIBUTE12                    => l_ver_sch_attr_rec.ATTRIBUTE12
4443         ,X_ATTRIBUTE13                    => l_ver_sch_attr_rec.ATTRIBUTE13
4444         ,X_ATTRIBUTE14                    => l_ver_sch_attr_rec.ATTRIBUTE14
4445         ,X_ATTRIBUTE15                    => l_ver_sch_attr_rec.ATTRIBUTE15
4446         ,X_SOURCE_OBJECT_ID               => l_ver_sch_attr_rec.PROJECT_ID
4447         ,X_SOURCE_OBJECT_TYPE             => 'PA_PROJECTS'
4448        );
4449 
4450        --Check if there is any error.
4451        l_msg_count := FND_MSG_PUB.count_msg;
4452        IF l_msg_count > 0 THEN
4453          x_msg_count := l_msg_count;
4454          IF x_msg_count = 1 THEN
4455            x_msg_data := l_msg_data;
4456          END IF;
4457 --dbms_output.put_line('close get_task_versions_csr');
4458          CLOSE get_task_versions_csr;
4459          RAISE FND_API.G_EXC_ERROR;
4460        END IF;
4461      END IF;
4462 
4463      l_last_wbs_level := l_task_versions_rec.wbs_level;
4464      l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;
4465 
4466 --hsiu added for task version status
4467 --label for not adding the task version in the published structure version.
4468     END IF; --for l_create_task_ver_flag
4469 */ --maansari
4470 
4471     END LOOP;
4472 --dbms_output.put_line('close get_task_versions_csr');
4473     CLOSE get_task_versions_csr;
4474 
4475     --hsiu
4476     --changes for task status
4477     --tasks might be deleted because childs are also deleted when deleting
4478     -- a task
4479     l_del_task_cnt := 0;
4480     LOOP
4481 
4482       -- Bug # 4691749.
4483       -- EXIT when l_del_task_cnt = l_tbd_task_ver_id.count;
4484       EXIT when l_del_task_cnt = l_tbd_index;
4485       -- Bug # 4691749.
4486 
4487       l_del_task_cnt := l_del_task_cnt + 1;
4488 
4489       OPEN get_tbd_tasks_info(l_tbd_task_ver_id(l_del_task_cnt));
4490       FETCH get_tbd_tasks_info into l_tbd_tasks_info_rec;
4491       IF get_tbd_tasks_info%FOUND THEN
4492         PA_TASK_PVT1.Delete_Task_Ver_wo_val(
4493              p_structure_version_id  => l_tbd_tasks_info_rec.parent_structure_version_id
4494             ,p_task_version_id       => l_tbd_tasks_info_rec.element_version_id
4495             ,p_record_version_number => l_tbd_tasks_info_rec.record_version_number
4496             ,x_return_status         => l_return_status
4497             ,x_msg_count         => l_msg_count
4498             ,x_msg_data              => l_msg_data
4499         );
4500 
4501         if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4502           x_msg_count := FND_MSG_PUB.count_msg;
4503           if x_msg_count = 1 then
4504             x_msg_data := l_msg_data;
4505           end if;
4506           raise FND_API.G_EXC_ERROR;
4507         end if;
4508 
4509       END IF;
4510       CLOSE get_tbd_tasks_info;
4511     END LOOP;
4512     --end changes for task status
4513 
4514 
4515     --hsiu: create schedule row for structure version after delete so that dates are rolledup properly.
4516 --    IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
4517     IF (l_workplan_type = 'Y') THEN
4518       --Get Schedule Version Info, if workplan type
4519       --dbms_output.put_line('9');
4520 --dbms_output.put_line('open get_ver_schedule_attr_csr');
4521       OPEN get_ver_schedule_attr_csr(p_structure_version_id, l_project_id);
4522       FETCH get_ver_schedule_attr_csr INTO l_ver_sch_attr_rec;
4523 --dbms_output.put_line('close get_ver_schedule_attr_csr');
4524       CLOSE get_ver_schedule_attr_csr;
4525       --dbms_output.put_line('10b');
4526 
4527       IF (p_debug_mode = 'Y') THEN
4528         pa_debug.debug('create schedule version for struct');
4529       END IF;
4530       --Call Create_Schedule_Version if workplan type
4531 /* hsiu: bug 2800553: commented for performance improvement
4532       PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
4533       ( p_validate_only           => FND_API.G_FALSE
4534        ,p_element_version_id      => l_new_struct_ver_id
4535        ,p_calendar_id             => l_ver_sch_attr_rec.calendar_id
4536        ,p_scheduled_start_date    => l_ver_sch_attr_rec.scheduled_start_date
4537        ,p_scheduled_end_date      => l_ver_sch_attr_rec.scheduled_finish_date
4538        ,p_obligation_start_date   => l_ver_sch_attr_rec.obligation_start_date
4539        ,p_obligation_end_date     => l_ver_sch_attr_rec.obligation_finish_date
4540        ,p_actual_start_date       => l_ver_sch_attr_rec.actual_start_date
4541        ,p_actual_finish_date      => l_ver_sch_attr_rec.actual_finish_date
4542        ,p_estimate_start_date     => l_ver_sch_attr_rec.estimated_start_date
4543        ,p_estimate_finish_date    => l_ver_sch_attr_rec.estimated_finish_date
4544        ,p_duration                => l_ver_sch_attr_rec.duration
4545        ,p_early_start_date        => l_ver_sch_attr_rec.early_start_date
4546        ,p_early_end_date          => l_ver_sch_attr_rec.early_finish_date
4547        ,p_late_start_date         => l_ver_sch_attr_rec.late_start_date
4548        ,p_late_end_date           => l_ver_sch_attr_rec.late_finish_date
4549        ,p_milestone_flag          => l_ver_sch_attr_rec.milestone_flag
4550        ,p_critical_flag           => l_ver_sch_attr_rec.critical_flag
4551        ,p_WQ_PLANNED_QUANTITY     => l_ver_sch_attr_rec.WQ_PLANNED_QUANTITY
4552        ,p_PLANNED_EFFORT          => l_ver_sch_attr_rec.PLANNED_EFFORT
4553        ,x_pev_schedule_id         => l_new_pev_schedule_id
4554        ,x_return_status           => l_return_status
4555        ,x_msg_count               => l_msg_count
4556        ,x_msg_data                  => l_msg_data );
4557 */
4558 --hsiu: bug 2800553: added for performance improvement
4559       l_new_pev_schedule_id := NULL;
4560       PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
4561          X_ROW_ID                => X_Row_Id
4562         ,X_PEV_SCHEDULE_ID     => l_new_pev_schedule_id
4563         ,X_ELEMENT_VERSION_ID      => l_new_struct_ver_id
4564         ,X_PROJECT_ID            => l_ver_sch_attr_rec.PROJECT_ID
4565         ,X_PROJ_ELEMENT_ID     => l_ver_sch_attr_rec.PROJ_ELEMENT_ID
4566         ,X_SCHEDULED_START_DATE  => l_ver_sch_attr_rec.SCHEDULED_START_DATE
4567         ,X_SCHEDULED_FINISH_DATE => l_ver_sch_attr_rec.SCHEDULED_FINISH_DATE
4568         ,X_OBLIGATION_START_DATE => l_ver_sch_attr_rec.OBLIGATION_START_DATE
4569         ,X_OBLIGATION_FINISH_DATE => l_ver_sch_attr_rec.OBLIGATION_FINISH_DATE
4570         ,X_ACTUAL_START_DATE        => l_ver_sch_attr_rec.ACTUAL_START_DATE
4571         ,X_ACTUAL_FINISH_DATE       => l_ver_sch_attr_rec.ACTUAL_FINISH_DATE
4572         ,X_ESTIMATED_START_DATE   => l_ver_sch_attr_rec.ESTIMATED_START_DATE
4573         ,X_ESTIMATED_FINISH_DATE  => l_ver_sch_attr_rec.ESTIMATED_FINISH_DATE
4574         ,X_DURATION           => l_ver_sch_attr_rec.DURATION
4575         ,X_EARLY_START_DATE     => l_ver_sch_attr_rec.EARLY_START_DATE
4576         ,X_EARLY_FINISH_DATE        => l_ver_sch_attr_rec.EARLY_FINISH_DATE
4577         ,X_LATE_START_DATE      => l_ver_sch_attr_rec.LATE_START_DATE
4578         ,X_LATE_FINISH_DATE     => l_ver_sch_attr_rec.LATE_FINISH_DATE
4579         ,X_CALENDAR_ID            => l_ver_sch_attr_rec.CALENDAR_ID
4580         ,X_MILESTONE_FLAG       => l_ver_sch_attr_rec.MILESTONE_FLAG
4581         ,X_CRITICAL_FLAG        => l_ver_sch_attr_rec.CRITICAL_FLAG
4582         ,X_WQ_PLANNED_QUANTITY      => l_ver_sch_attr_rec.wq_planned_quantity
4583         ,X_PLANNED_EFFORT           => l_ver_sch_attr_rec.planned_effort
4584         ,X_ACTUAL_DURATION          => l_ver_sch_attr_rec.actual_duration
4585         ,X_ESTIMATED_DURATION       => l_ver_sch_attr_rec.estimated_duration
4586         ,X_ATTRIBUTE_CATEGORY               => l_ver_sch_attr_rec.ATTRIBUTE_CATEGORY
4587         ,X_ATTRIBUTE1                       => l_ver_sch_attr_rec.ATTRIBUTE1
4588         ,X_ATTRIBUTE2                       => l_ver_sch_attr_rec.ATTRIBUTE2
4589         ,X_ATTRIBUTE3                       => l_ver_sch_attr_rec.ATTRIBUTE3
4590         ,X_ATTRIBUTE4                       => l_ver_sch_attr_rec.ATTRIBUTE4
4591         ,X_ATTRIBUTE5                       => l_ver_sch_attr_rec.ATTRIBUTE5
4592         ,X_ATTRIBUTE6                       => l_ver_sch_attr_rec.ATTRIBUTE6
4593         ,X_ATTRIBUTE7                       => l_ver_sch_attr_rec.ATTRIBUTE7
4594         ,X_ATTRIBUTE8                       => l_ver_sch_attr_rec.ATTRIBUTE8
4595         ,X_ATTRIBUTE9                       => l_ver_sch_attr_rec.ATTRIBUTE9
4596         ,X_ATTRIBUTE10                    => l_ver_sch_attr_rec.ATTRIBUTE10
4597         ,X_ATTRIBUTE11                    => l_ver_sch_attr_rec.ATTRIBUTE11
4598         ,X_ATTRIBUTE12                    => l_ver_sch_attr_rec.ATTRIBUTE12
4599         ,X_ATTRIBUTE13                    => l_ver_sch_attr_rec.ATTRIBUTE13
4600         ,X_ATTRIBUTE14                    => l_ver_sch_attr_rec.ATTRIBUTE14
4601         ,X_ATTRIBUTE15                    => l_ver_sch_attr_rec.ATTRIBUTE15
4602         ,X_SOURCE_OBJECT_ID               => l_ver_sch_attr_rec.PROJECT_ID
4603         ,X_SOURCE_OBJECT_TYPE             => 'PA_PROJECTS'
4604       );
4605 
4606 
4607       --Check if there is any error.
4608       l_msg_count := FND_MSG_PUB.count_msg;
4609       IF l_msg_count > 0 THEN
4610         x_msg_count := l_msg_count;
4611         IF x_msg_count = 1 THEN
4612           x_msg_data := l_msg_data;
4613         END IF;
4614         RAISE FND_API.G_EXC_ERROR;
4615       END IF;
4616 
4617     END IF;
4618 
4619 
4620 --maansari
4621     --clear up global array
4622     PA_STRUCT_UPGR_PUB.clear_globals;
4623 
4624     INSERT INTO pa_proj_element_versions(
4625                      ELEMENT_VERSION_ID
4626                     ,PROJ_ELEMENT_ID
4627                     ,OBJECT_TYPE
4628                     ,PROJECT_ID
4629                     ,PARENT_STRUCTURE_VERSION_ID
4630                     ,DISPLAY_SEQUENCE
4631                     ,WBS_LEVEL
4632                     ,WBS_NUMBER
4633                     ,CREATION_DATE
4634                     ,CREATED_BY
4635                     ,LAST_UPDATE_DATE
4636                     ,LAST_UPDATED_BY
4637                     ,LAST_UPDATE_LOGIN
4638                     ,RECORD_VERSION_NUMBER
4639                     ,ATTRIBUTE_CATEGORY
4640                      ,ATTRIBUTE1
4641                      ,ATTRIBUTE2
4642                      ,ATTRIBUTE3
4643                      ,ATTRIBUTE4
4644                      ,ATTRIBUTE5
4645                      ,ATTRIBUTE6
4646                      ,ATTRIBUTE7
4647                      ,ATTRIBUTE8
4648                      ,ATTRIBUTE9
4649                      ,ATTRIBUTE10
4650                      ,ATTRIBUTE11
4651                      ,ATTRIBUTE12
4652                      ,ATTRIBUTE13
4653                      ,ATTRIBUTE14
4654                      ,TASK_UNPUB_VER_STATUS_CODE
4655                     ,attribute15          --this column is used to store structure ver id of the source str to be used to created relationships.
4656             ,source_object_id
4657             ,source_object_type
4658                     ,financial_task_flag
4659                     )
4660                   SELECT
4661                      pa_proj_element_versions_s.nextval
4662                     ,ppev.proj_element_id
4663                     ,ppev.object_type
4664                     ,l_project_id
4665                     ,l_new_struct_ver_id
4666                     ,PA_STRUCT_UPGR_PUB.get_disp_sequence(ppev.display_sequence)
4667                     ,ppev.WBS_LEVEL
4668                     ,PA_STRUCT_UPGR_PUB.get_wbs_number(ppev.WBS_LEVEL, NULL)        -- Bug No. 4049574
4669                     ,SYSDATE
4670                     ,l_user_id
4671                     ,SYSDATE
4672                     ,l_user_id
4673                     ,l_login_id
4674                      ,ppev.RECORD_VERSION_NUMBER
4675                      ,ppev.ATTRIBUTE_CATEGORY
4676                      ,ppev.ATTRIBUTE1
4677                      ,ppev.ATTRIBUTE2
4678                      ,ppev.ATTRIBUTE3
4679                      ,ppev.ATTRIBUTE4
4680                      ,ppev.ATTRIBUTE5
4681                      ,ppev.ATTRIBUTE6
4682                      ,ppev.ATTRIBUTE7
4683                      ,ppev.ATTRIBUTE8
4684                      ,ppev.ATTRIBUTE9
4685                      ,ppev.ATTRIBUTE10
4686                      ,ppev.ATTRIBUTE11
4687                      ,ppev.ATTRIBUTE12
4688                      ,ppev.ATTRIBUTE13
4689                      ,ppev.ATTRIBUTE14
4690                      ,ppev.TASK_UNPUB_VER_STATUS_CODE
4691                      ,ppev.element_version_id
4692              ,l_project_id
4693              ,'PA_PROJECTS'
4694                      ,ppev.financial_task_flag
4695                   FROM ( SELECT * from pa_proj_element_versions ppev2
4696                   --,pa_proj_elements ppe  --bug 4573340        commenting out this for bug 4578813
4697                           WHERE --bug#3094283 ppev2.project_id = l_project_id
4698                             ppev2.parent_structure_version_id = p_structure_version_id
4699                             and ppev2.object_type = 'PA_TASKS'
4700                         /*
4701                          --bug 4573340
4702                             and ppe.project_id = ppev2.project_id
4703                             and ppe.proj_element_id = ppev2.proj_element_id
4704                             and ppe.link_task_flag = 'N'
4705                          --bug 4573340
4706                            */
4707                             and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( p_structure_version_id,
4708                                                        ppev2.element_version_id ) = 'Y'
4709                            order by ppev2.display_sequence ) ppev
4710                     ;
4711 
4712                   /*   --cant write order by directly.
4713                   FROM pa_proj_element_versions ppev
4714                   WHERE ppev.project_id = l_project_id
4715                     and ppev.parent_structure_version_id = p_structure_version_id
4716                     and ppev.object_type = 'PA_TASKS'
4717                     and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( p_structure_version_id,
4718                                                        ppev.element_version_id ) = 'Y'
4719                   order by ppev.display_sequence
4720                     ;
4721                    */
4722 
4723         -- Bug 4205167 : Added hint to use Hash Join
4724               INSERT INTO PA_OBJECT_RELATIONSHIPS (
4725                                   object_relationship_id,
4726                                   object_type_from,
4727                                   object_id_from1,
4728                                   object_type_to,
4729                                   object_id_to1,
4730                                   relationship_type,
4731                                   relationship_subtype,
4732                                   Record_Version_Number,
4733                                   CREATED_BY,
4734                                   CREATION_DATE,
4735                                   LAST_UPDATED_BY,
4736                                   LAST_UPDATE_DATE,
4737                                   LAST_UPDATE_LOGIN,
4738                                   weighting_percentage
4739                                   )
4740                  SELECT /*+ USE_HASH(ppev2 ppev1)*/
4741                                pa_object_relationships_s.nextval,
4742                                pobj.object_type_from,
4743                                ppev1.element_version_id,
4744                                pobj.object_type_to,
4745                                ppev2.element_version_id,
4746                                pobj.relationship_type,
4747                                pobj.relationship_subtype,
4748                                pobj.Record_Version_Number,
4749                                l_user_id,
4750                                SYSDATE,
4751                                l_user_id,
4752                                SYSDATE,
4753                                l_login_id,
4754                                pobj.weighting_percentage
4755                     FROM ( SELECT  object_type_from, object_id_from1,
4756                                    object_type_to,   object_id_to1,
4757                                    relationship_type, relationship_subtype,
4758                                    Record_Version_Number, weighting_percentage
4759                              FROM pa_object_relationships
4760                    --bug#3094283         WHERE RELATIONSHIP_TYPE = 'S'
4761                              start with object_id_from1 = p_structure_version_id
4762                                 and RELATIONSHIP_TYPE = 'S'  /* Bug 2881667 - Added this condition */
4763                              connect by  object_id_from1 =  prior object_id_to1
4764                                 and RELATIONSHIP_TYPE = 'S' ) pobj,   /* Bug 2881667 - Added this condition */
4765                          pa_proj_element_versions ppev1,
4766                          pa_proj_element_versions ppev2
4767                  WHERE
4768                    --bug#3094283    ppev1.project_id = l_project_id
4769                    ppev1.attribute15 = pobj.object_id_from1
4770                    --bug#3094283 AND ppev2.project_id = l_project_id
4771                    AND ppev2.attribute15 = pobj.object_id_to1
4772                    and ppev1.parent_structure_version_id = l_new_struct_ver_id
4773                    and ppev2.parent_structure_version_id = l_new_struct_ver_id
4774                    ;
4775 
4776 
4777               INSERT INTO pa_proj_elem_ver_schedule(
4778                             PEV_SCHEDULE_ID
4779                            ,ELEMENT_VERSION_ID
4780                            ,PROJECT_ID
4781                            ,PROJ_ELEMENT_ID
4782                            ,CREATION_DATE
4783                            ,CREATED_BY
4784                            ,LAST_UPDATE_DATE
4785                            ,LAST_UPDATED_BY
4786                            ,SCHEDULED_START_DATE
4787                            ,SCHEDULED_FINISH_DATE
4788                            ,OBLIGATION_START_DATE
4789                            ,OBLIGATION_FINISH_DATE
4790                            ,ACTUAL_START_DATE
4791                            ,ACTUAL_FINISH_DATE
4792                            ,ESTIMATED_START_DATE
4793                            ,ESTIMATED_FINISH_DATE
4794                            ,DURATION
4795                            ,EARLY_START_DATE
4796                            ,EARLY_FINISH_DATE
4797                            ,LATE_START_DATE
4798                            ,LATE_FINISH_DATE
4799                            ,CALENDAR_ID
4800                            ,MILESTONE_FLAG
4801                            ,CRITICAL_FLAG
4802                            ,RECORD_VERSION_NUMBER
4803                            ,LAST_UPDATE_LOGIN
4804                            ,WQ_PLANNED_QUANTITY
4805                            ,PLANNED_EFFORT
4806                            ,ACTUAL_DURATION
4807                            ,ESTIMATED_DURATION
4808                            ,ATTRIBUTE_CATEGORY
4809                            ,ATTRIBUTE1
4810                            ,ATTRIBUTE2
4811                            ,ATTRIBUTE3
4812                            ,ATTRIBUTE4
4813                            ,ATTRIBUTE5
4814                            ,ATTRIBUTE6
4815                            ,ATTRIBUTE7
4816                            ,ATTRIBUTE8
4817                            ,ATTRIBUTE9
4818                            ,ATTRIBUTE10
4819                            ,ATTRIBUTE11
4820                            ,ATTRIBUTE12
4821                            ,ATTRIBUTE13
4822                            ,ATTRIBUTE14
4823                            ,ATTRIBUTE15
4824                            ,source_object_id
4825                            ,source_object_type
4826                            ,CONSTRAINT_TYPE_CODE
4827                            ,CONSTRAINT_DATE
4828                            ,FREE_SLACK
4829                            ,TOTAL_SLACK
4830                            ,EFFORT_DRIVEN_FLAG
4831                            ,LEVEL_ASSIGNMENTS_FLAG
4832                            ,EXT_ACT_DURATION
4833                            ,EXT_REMAIN_DURATION
4834                            ,EXT_SCH_DURATION
4835                            ,DEF_SCH_TOOL_TSK_TYPE_CODE -- 4295770 Added
4836                               )
4837                         SELECT
4838                             pa_proj_elem_ver_schedule_s.nextval
4839                            ,ppev1.ELEMENT_VERSION_ID
4840                            ,l_PROJECT_ID
4841                            ,ppev1.PROJ_ELEMENT_ID
4842                            ,SYSDATE
4843                            ,l_user_id
4844                            ,SYSDATE
4845                            ,l_user_id
4846                            ,ppevs.SCHEDULED_START_DATE
4847                            ,ppevs.SCHEDULED_FINISH_DATE
4848                            ,ppevs.OBLIGATION_START_DATE
4849                            ,ppevs.OBLIGATION_FINISH_DATE
4850                            ,ppevs.ACTUAL_START_DATE
4851                            ,ppevs.ACTUAL_FINISH_DATE
4852                            ,ppevs.ESTIMATED_START_DATE
4853                            ,ppevs.ESTIMATED_FINISH_DATE
4854                            ,ppevs.DURATION
4855                            ,ppevs.EARLY_START_DATE
4856                            ,ppevs.EARLY_FINISH_DATE
4857                            ,ppevs.LATE_START_DATE
4858                            ,ppevs.LATE_FINISH_DATE
4859                            ,ppevs.CALENDAR_ID
4860                            ,ppevs.MILESTONE_FLAG
4861                            ,ppevs.CRITICAL_FLAG
4862                            ,ppevs.RECORD_VERSION_NUMBER
4863                            ,l_login_id
4864                            ,ppevs.WQ_PLANNED_QUANTITY
4865                            ,ppevs.PLANNED_EFFORT
4866                            ,ppevs.ACTUAL_DURATION
4867                            ,ppevs.ESTIMATED_DURATION
4868                            ,ppevs.ATTRIBUTE_CATEGORY
4869                            ,ppevs.ATTRIBUTE1
4870                            ,ppevs.ATTRIBUTE2
4871                            ,ppevs.ATTRIBUTE3
4872                            ,ppevs.ATTRIBUTE4
4873                            ,ppevs.ATTRIBUTE5
4874                            ,ppevs.ATTRIBUTE6
4875                            ,ppevs.ATTRIBUTE7
4876                            ,ppevs.ATTRIBUTE8
4877                            ,ppevs.ATTRIBUTE9
4878                            ,ppevs.ATTRIBUTE10
4879                            ,ppevs.ATTRIBUTE11
4880                            ,ppevs.ATTRIBUTE12
4881                            ,ppevs.ATTRIBUTE13
4882                            ,ppevs.ATTRIBUTE14
4883                            ,ppevs.ATTRIBUTE15
4884                            ,l_PROJECT_ID
4885                            ,'PA_PROJECTS'
4886                            ,ppevs.CONSTRAINT_TYPE_CODE
4887                            ,ppevs.CONSTRAINT_DATE
4888                            ,ppevs.FREE_SLACK
4889                            ,ppevs.TOTAL_SLACK
4890                            ,ppevs.EFFORT_DRIVEN_FLAG
4891                            ,ppevs.LEVEL_ASSIGNMENTS_FLAG
4892                            ,ppevs.EXT_ACT_DURATION
4893                            ,ppevs.EXT_REMAIN_DURATION
4894                            ,ppevs.EXT_SCH_DURATION
4895                            ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE -- 4295770 Added
4896                          FROM pa_proj_elem_ver_schedule ppevs,
4897                               pa_proj_element_versions ppev1
4898                            where ppev1.attribute15 = ppevs.element_version_id
4899                             and  ppevs.project_id = l_project_id
4900                             and  ppev1.project_id = l_project_id
4901                             and  ppev1.parent_structure_version_id = l_new_struct_ver_id
4902                             and  ppev1.object_type = 'PA_TASKS';
4903 
4904     ---------------------------------------------- FP_M changes: Begin
4905     -- Refer to tracking bug 3305199
4906     -- Populate the old and new task version ID in PL/SQL tables
4907 
4908     Select Element_Version_ID, ATTRIBUTE15  Bulk Collect
4909     INTO   l_New_Task_Versions_Tab, l_Old_Task_Versions_Tab
4910     From   pa_proj_element_versions
4911     Where  parent_structure_version_id = l_new_struct_ver_id
4912     and    object_type = 'PA_TASKS'
4913     and    PA_PROJECT_STRUCTURE_PVT1.copy_task_version( l_new_struct_ver_id, element_version_id ) = 'Y'
4914         order by display_sequence;
4915 
4916 --bug 4019845
4917 --comment starts here
4918 /*
4919     PA_Relationship_Pvt.Copy_Intra_Dependency (
4920       P_Source_Ver_Tbl  => l_Old_Task_Versions_Tab,
4921       P_Destin_Ver_Tbl  => l_New_Task_Versions_Tab,
4922       X_Return_Status   => X_Return_Status,
4923       X_Msg_Count       => X_Msg_Count,
4924       X_Msg_Data        => X_Msg_Data
4925     );
4926 
4927         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4928            RAISE FND_API.G_EXC_ERROR;
4929         END IF;
4930 
4931         PA_RELATIONSHIP_PVT.Publish_Inter_Proj_Dep (  -- This API needs to be called
4932         p_publishing_struc_ver_id => p_structure_version_id,
4933         p_previous_pub_struc_ver_id => l_last_pub_str_ver_id,
4934         p_published_struc_ver_id => l_new_struct_ver_id,
4935         X_Return_Status      => X_Return_Status,
4936         X_Msg_Count          => X_Msg_Count,
4937         X_Msg_Data           => X_Msg_Data
4938         );
4939         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4940            RAISE FND_API.G_EXC_ERROR;
4941         END IF;
4942 */
4943 
4944         /* Smukka 01/03/2004 Bug No.3450684                                            */
4945         /* Added call to PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass        */
4946         /* And PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1 API calls to   */
4947         /* copy all the out going and coming in sub project assoications               */
4948 /*
4949         PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
4950                                       p_validate_only           =>  p_validate_only,
4951                                       p_validation_level        =>  p_validation_level,
4952                                       p_calling_module          =>  p_calling_module,
4953                                       p_debug_mode              =>  p_debug_mode,
4954                                       p_max_msg_count           =>  p_max_msg_count,
4955                                       p_commit                  =>  p_commit,
4956                                       p_src_str_version_id      =>  p_structure_version_id,
4957                                       p_dest_str_version_id     =>  l_new_struct_ver_id,  -- Destination Str version id can be of published str also
4958                                       x_return_status           =>  X_Return_Status,
4959                                       x_msg_count               =>  X_Msg_Count,
4960                                       x_msg_data                =>  X_Msg_Data);
4961         IF (X_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
4962            x_msg_count := FND_MSG_PUB.count_msg;
4963            IF x_msg_count = 1 then
4964               pa_interface_utils_pub.get_messages
4965                    (p_encoded        => FND_API.G_TRUE,
4966                     p_msg_index      => 1,
4967                     p_msg_count      => l_msg_count,
4968                     p_msg_data       => l_msg_data,
4969                     p_data           => l_data,
4970                     p_msg_index_out  => l_msg_index_out);
4971                     x_msg_data := l_data;
4972            END IF;
4973            raise FND_API.G_EXC_ERROR;
4974         END IF;
4975         PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1(
4976                                       p_api_version    =>   p_api_version,
4977                                       p_init_msg_list      =>   p_init_msg_list,
4978                                       p_validate_only      =>   p_validate_only,
4979                                       p_validation_level   =>   p_validation_level,
4980                                       p_calling_module     =>   p_calling_module,
4981                                       p_commit             =>   p_commit,
4982                                       p_debug_mode     =>   p_debug_mode,
4983                                       p_max_msg_count      =>   p_max_msg_count,
4984                                       p_src_str_version_id      =>   p_structure_version_id,
4985                                       p_pub_str_version_id      =>   l_new_struct_ver_id,
4986                                       p_last_pub_str_version_id =>   l_last_pub_str_ver_id,
4987                                       x_return_status           =>  x_return_status,
4988                                       x_msg_count               =>  x_msg_count,
4989                                       x_msg_data                =>  x_msg_data);
4990 
4991     --------------------------------------------- FP_M changes: End
4992 */
4993 --end bug 4019845
4994 
4995   update pa_proj_element_versions ppevs1
4996      set attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
4997                           where ppevs2.project_id = l_project_id
4998                             and parent_structure_version_id = p_structure_version_id
4999                             and ppevs2.element_version_id = ppevs1.attribute15
5000                              )
5001    where project_id = l_project_id
5002     and parent_structure_version_id = l_new_struct_ver_id;
5003 
5004 --maansari
5005 
5006     --This has to be done at the end because creating latest version before
5007     --  updating links will break the logic for updating to latest published
5008     --  version.
5009 
5010     --Call Create Structure Version Attr
5011     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
5012      ( p_validate_only               => FND_API.G_FALSE
5013       ,p_structure_version_id        => l_new_struct_ver_id
5014       ,p_structure_version_name      => l_new_struct_ver_name
5015       ,p_structure_version_desc      => l_new_struct_ver_desc
5016       ,p_effective_date              => l_struc_ver_attr_rec.effective_date
5017       ,p_latest_eff_published_flag   => 'Y'
5018       ,p_published_flag              => 'Y'
5019       ,p_locked_status_code          => 'UNLOCK'
5020       ,p_struct_version_status_code  => 'STRUCTURE_PUBLISHED'
5021       ,p_baseline_current_flag       => l_current_baseline_flag
5022       ,p_baseline_original_flag      => l_original_baseline_flag
5023       ,p_change_reason_code          => l_struc_ver_attr_rec.change_reason_code
5024       ,x_pev_structure_id            => l_new_pev_structure_id
5025       ,x_return_status               => l_return_status
5026       ,x_msg_count                   => l_msg_count
5027       ,x_msg_data                    => l_msg_data );
5028 
5029 
5030     l_msg_count := FND_MSG_PUB.count_msg;
5031     if (l_msg_count > 0) then
5032       x_msg_count := l_msg_count;
5033       if x_msg_count = 1 then
5034         x_msg_data := l_msg_data;
5035       end if;
5036       raise FND_API.G_EXC_ERROR;
5037     end if;
5038 
5039 --bug 4019845
5040 /*
5041     --bug 3047602: rollup dates
5042     OPEN get_all_new_childs(l_new_struct_ver_id);
5043     FETCH get_all_new_childs bulk collect into l_task_ver_ids_tbl;
5044     CLOSE get_all_new_childs;
5045 
5046 update pa_proj_elem_ver_structure
5047    set status_code = 'STRUCTURE_WORKING',
5048        LOCKED_BY_PERSON_ID = (select locked_by_person_id
5049                                 from pa_proj_elem_ver_structure
5050                                where project_id = l_project_id
5051                                  and element_version_id = p_structure_version_id),
5052        LOCK_STATUS_CODE = 'LOCKED'
5053  where project_id = l_project_id and element_version_id = l_new_struct_ver_id;
5054 
5055        --3755117 for copying mapping
5056        BEGIN
5057          PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
5058            p_context             => 'PUBLISH_VERSION'
5059           ,p_src_project_id      => l_project_id
5060           ,p_dest_project_id     => l_project_id
5061           ,p_src_str_version_id  => p_structure_version_id
5062           ,p_dest_str_version_id => l_new_struct_ver_id
5063           ,x_return_status       => x_return_status
5064           ,x_msg_count           => x_msg_count
5065           ,x_msg_data            => x_msg_data
5066          );
5067 
5068          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5069             RAISE FND_API.G_EXC_ERROR;
5070          END IF;
5071        EXCEPTION
5072          WHEN OTHERS THEN
5073            fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5074                                            p_procedure_name => 'PUBLISH_STRUCTURE',
5075                                            p_error_text     => SUBSTRB('PA_PROJ_STRUC_MAPPING_PUB.COPY_MAPPING:'||SQLERRM,1,240));
5076            RAISE FND_API.G_EXC_ERROR;
5077        END;
5078 */
5079 --end bug 4019845
5080 
5081        -- Changes added by skannoji
5082        -- Added code for doosan customer
5083          /* Bug #: 3305199 SMukka                                                         */
5084          /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
5085          /* src_versions_tab   PA_PLSQL_DATATYPES.IdTabTyp;                               */
5086          /* dest_versions_tab  PA_PLSQL_DATATYPES.IdTabTyp;                               */
5087 --bug 4019845
5088 /*
5089        Declare
5090          src_versions_tab   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5091          dest_versions_tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5092          prev_pub_tab       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --bug 3847386
5093        Begin
5094          src_versions_tab.extend(1);
5095          dest_versions_tab.extend(1);
5096          src_versions_tab(1)  := p_structure_version_id;
5097          dest_versions_tab(1) :=  l_new_struct_ver_id;
5098          prev_pub_tab.extend(1);   --bug 3847386
5099          prev_pub_tab(1) := l_last_pub_str_ver_id;   --bug 3847386
5100          -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
5101          --Smukka Bug No. 3474141 Date 03/01/2004
5102          --moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block
5103          BEGIN
5104              PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
5105               (
5106                 p_source_project_id            => l_project_id
5107                ,p_target_project_id            => l_project_id
5108                ,p_src_sv_ids_tbl               => src_Versions_Tab
5109                ,p_target_sv_ids_tbl            => dest_Versions_Tab
5110                ,p_copy_act_from_str_ids_tbl    => prev_pub_tab --bug 3847386
5111                ,x_return_status                => x_return_status
5112                ,x_msg_count                    => x_msg_count
5113                ,x_Msg_data                     => x_msg_data
5114               );
5115           EXCEPTION
5116               WHEN OTHERS THEN
5117                    fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5118                                            p_procedure_name => 'PUBLISH_STRUCTURE',
5119                                            p_error_text     => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
5120               RAISE FND_API.G_EXC_ERROR;
5121           END;
5122          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5123             RAISE FND_API.G_EXC_ERROR;
5124          END IF;
5125        End;
5126        -- till here by skannoji
5127 */
5128 --end bug 4019845
5129 
5130 
5131 /* Removed for bug 3850488.
5132        BEGIN
5133          PA_TASK_ASSIGNMENTS_PVT.Copy_Missing_Unplanned_Asgmts(
5134             p_project_id => l_project_id
5135            ,p_old_structure_version_id => l_last_pub_str_ver_id
5136            ,p_new_structure_version_id => l_new_struct_ver_id
5137            ,x_msg_count => x_msg_count
5138            ,x_msg_data => x_msg_data
5139            ,x_return_status => x_return_status
5140          );
5141        EXCEPTION
5142          WHEN OTHERS THEN
5143                    fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5144                                            p_procedure_name => 'PUBLISH_STRUCTURE',
5145                                            p_error_text     => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_missing_unplanned_asgmts:'||SQLERRM,1,240));
5146            RAISE FND_API.G_EXC_ERROR;
5147        END;
5148        If (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5149          RAISE FND_API.G_EXC_ERROR;
5150        END IF;
5151 */
5152 
5153 /* --hsiu: no need to rollup since the copied structure version is already rolled-up
5154     IF l_task_ver_ids_tbl.count > 0 THEN
5155       --rollup dates for new published version
5156 
5157       PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
5158                        p_commit => FND_API.G_FALSE,
5159                        p_element_versions => l_task_ver_ids_tbl,
5160                        x_return_status => l_return_status,
5161                        x_msg_count => l_msg_count,
5162                        x_msg_data => l_msg_data);
5163 
5164       l_msg_count := FND_MSG_PUB.count_msg;
5165       if (l_msg_count > 0) then
5166         x_msg_count := l_msg_count;
5167         if x_msg_count = 1 then
5168           x_msg_data := l_msg_data;
5169         end if;
5170         raise FND_API.G_EXC_ERROR;
5171       end if;
5172     END IF;
5173     --end bug 3047602
5174 */
5175 --    error_msg('before progress report');
5176 
5177 
5178 --      IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'FINANCIAL') = 'Y') THEN
5179 
5180 --bug 4019845
5181 /*
5182       IF (l_financial_type = 'Y') THEN
5183 
5184     select start_date, completion_date
5185     into l_proj_start_date, l_proj_completion_date
5186     from pa_projects_all
5187     where project_id = l_project_id;
5188 
5189     --dbms_output.put_line('sycn up api');
5190     --Call sync-up API
5191 --    error_msg('import task');
5192 
5193     PA_XC_PROJECT_PUB.import_task
5194       ( p_project_id               => l_project_id
5195       ,p_task_reference            => NULL
5196       ,p_task_name                 => NULL
5197       ,p_task_start_date           => NULL
5198       ,p_task_end_date             => NULL
5199       ,p_parent_task_reference     => NULL
5200       ,p_task_number               => NULL
5201       ,p_wbs_level                 => NULL
5202       ,p_milestone                 => NULL
5203       ,p_duration                  => NULL
5204       ,p_duration_unit             => NULL
5205       ,p_early_start_date          => NULL
5206       ,p_early_finish_date         => NULL
5207       ,p_late_start_date           => NULL
5208       ,p_late_finish_date          => NULL
5209       ,p_display_seq               => NULL
5210       ,p_login_user_name           => NULL
5211       ,p_critical_path             => NULL
5212       ,p_sub_project_id            => NULL
5213       ,p_attribute7                => NULL
5214       ,p_attribute8                => NULL
5215       ,p_attribute9                => NULL
5216       ,p_attribute10               => NULL
5217       ,p_progress_report           => NULL
5218       ,p_progress_status           => NULL
5219       ,p_progress_comments         => NULL
5220       ,p_progress_asof_date        => NULL
5221       ,p_predecessors              => NULL
5222       ,p_structure_version_id      => l_new_struct_ver_id
5223       ,p_calling_mode              => 'PUBLISH' );
5224 
5225     l_i_msg_count := 0;
5226 --    error_msg('import project');
5227     PA_XC_PROJECT_PUB.import_project
5228       (p_user_id                   => l_user_id
5229       ,p_commit                    => 'N'
5230       ,p_debug_mode                => p_debug_mode
5231       ,p_project_id                => l_project_id
5232       ,p_project_mpx_start_date    => fnd_date.date_to_canonical(l_proj_start_date)
5233       ,p_project_mpx_end_date      => fnd_date.date_to_canonical(l_proj_completion_date)
5234       ,p_task_mgr_override         => NULL
5235       ,p_task_pgs_override         => NULL
5236       ,p_process_id                => NULL
5237       ,p_language                  => NULL
5238       ,p_delimiter                 => NULL
5239       ,p_responsibility_id         => p_responsibility_id
5240       ,p_structure_id              => NULL
5241       ,p_structure_version_id      => l_new_struct_ver_id
5242       ,p_calling_mode              => 'PUBLISH'
5243       ,x_msg_count                 => l_i_msg_count
5244       ,x_msg_data                  => l_i_msg_data
5245       ,x_return_status             => l_i_return_status);
5246 
5247 
5248 --dbms_output.put_line('import proj: '||l_i_return_status);
5249     --Check for error
5250 --    IF (x_msg_count > 0) THEN
5251 --      FOR i IN 1..x_msg_count LOOP
5252 --        PA_UTILS.ADD_MESSAGE('PA',l_i_msg_data(i));
5253 --      END LOOP;
5254 --    END IF;
5255 
5256     l_msg_count := FND_MSG_PUB.count_msg;
5257     if l_msg_count > 0 then
5258       x_msg_count := l_msg_count;
5259       if x_msg_count = 1 then
5260 --        x_msg_data := l_msg_data;
5261             pa_interface_utils_pub.get_messages
5262             (p_encoded        => FND_API.G_TRUE,
5263              p_msg_index      => 1,
5264              p_msg_count      => l_msg_count,
5265              p_msg_data       => l_msg_data,
5266              p_data           => l_data,
5267              p_msg_index_out  => l_msg_index_out);
5268              x_msg_data := l_data;
5269       end if;
5270       raise FND_API.G_EXC_ERROR;
5271     end if;
5272 
5273     END IF; --for checking structure type
5274 */
5275 --bug 4019845
5276 
5277 
5278 /*  removed
5279     IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'WORKPLAN') = 'Y') THEN
5280       --API for progress report.
5281 */
5282 /*  removed
5283       PA_PROGRESS_PUB.CREATE_PROGRESS_FOR_WBS(
5284         p_commit               => FND_API.G_FALSE
5285        ,p_project_id           => l_project_id
5286        ,p_structure_version_id => l_new_struct_ver_id
5287        ,x_return_status        => l_return_status
5288        ,x_msg_count            => l_msg_count
5289        ,x_msg_data             => l_msg_data
5290       );
5291 */
5292 /*  removed
5293       IF (p_debug_mode = 'Y') THEN
5294         pa_debug.debug('progress report api');
5295       END IF;
5296 
5297 
5298       --Check if there is any error.
5299       l_msg_count := FND_MSG_PUB.count_msg;
5300       IF l_msg_count > 0 THEN
5301         x_msg_count := l_msg_count;
5302         IF x_msg_count = 1 THEN
5303           x_msg_data := l_msg_data;
5304         END IF;
5305         RAISE FND_API.G_EXC_ERROR;
5306       END IF;
5307 
5308     END IF;
5309 */
5310 
5311 --bug 4019845
5312 /*
5313 --bug 3830932
5314 --moving before copy project dates so that latest structure version will be selected in the API
5315 update pa_proj_elem_ver_structure
5316    set status_code = 'STRUCTURE_PUBLISHED',
5317        LOCKED_BY_PERSON_ID = NULL,
5318        LOCK_STATUS_CODE = 'UNLOCKED'
5319  where project_id = l_project_id and element_version_id = l_new_struct_ver_id;
5320 --end bug 3830932
5321 
5322 -- anlee
5323 -- Dates changes
5324 --    IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'WORKPLAN') = 'Y') THEN
5325     IF (l_workplan_type = 'Y') THEN
5326       OPEN get_scheduled_dates(l_project_id, l_new_struct_ver_id);
5327       FETCH get_scheduled_dates INTO l_scheduled_start_date, l_scheduled_finish_date;
5328       CLOSE get_scheduled_dates;
5329 
5330       OPEN get_proj_rec_ver_number(l_project_id);
5331       FETCH get_proj_rec_ver_number INTO l_proj_record_ver_number;
5332       CLOSE get_proj_rec_ver_number;
5333 
5334       PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
5335         p_validate_only          => FND_API.G_FALSE
5336        ,p_project_id             => l_project_id
5337        ,p_date_type              => 'SCHEDULED'
5338        ,p_start_date             => l_scheduled_start_date
5339        ,p_finish_date            => l_scheduled_finish_date
5340        ,p_record_version_number  => l_proj_record_ver_number
5341        ,x_return_status          => l_return_status
5342        ,x_msg_count              => l_msg_count
5343        ,x_msg_data               => l_msg_data );
5344 
5345       --Check if there is any error.
5346       l_msg_count := FND_MSG_PUB.count_msg;
5347       IF l_msg_count > 0 THEN
5348         x_msg_count := l_msg_count;
5349         IF x_msg_count = 1 THEN
5350           x_msg_data := l_msg_data;
5351         END IF;
5352         RAISE FND_API.G_EXC_ERROR;
5353       END IF;
5354     END IF;
5355 -- End of changes
5356 
5357 -- hsiu
5358 -- project dates changes
5359 -- copy dates to transaction dates if 1, share structure
5360 --                                    2, auto task update is enabled
5361 --   IF ((PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'WORKPLAN') = 'Y') AND
5362 --      (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'FINANCIAL') = 'Y')) THEN
5363    IF ((l_workplan_type = 'Y') AND
5364       (l_financial_type = 'Y')) THEN
5365      --select workplan attr
5366      IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_proj_element_id) = 'Y') THEN
5367        --Copy to transaction date
5368        PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
5369          p_project_id => l_project_id,
5370          x_return_status => l_return_status,
5371          x_msg_count => l_msg_count,
5372          x_msg_data => l_msg_data
5373        );
5374 
5375        if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5376          x_msg_count := FND_MSG_PUB.count_msg;
5377          if x_msg_count = 1 then
5378            x_msg_data := l_msg_data;
5379          end if;
5380          raise FND_API.G_EXC_ERROR;
5381        end if;
5382 
5383      END IF;
5384    END IF;
5385 -- end of changes
5386 */
5387 --end bug 4019845
5388 
5389 --bug 4019845
5390 /*
5391    --hsiu: task status
5392    --push down and rollup
5393    PA_STRUCT_TASK_ROLLUP_PUB.Task_Stat_Pushdown_Rollup(
5394           p_structure_version_id => l_new_struct_ver_id
5395          ,x_return_status => x_return_status
5396          ,x_msg_count => x_msg_count
5397          ,x_msg_data => x_msg_data
5398         );
5399    IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5400      RAISE FND_API.G_EXC_ERROR;
5401    END IF;
5402    --end task status changes
5403 */
5404 --end bug 4019845
5405 
5406 /* remove
5407    --hsiu: prorate tasks for tasks that have to be deleted peer tasks
5408    l_parent_ver_id := l_parent_tbl.FIRST;
5409    FOR i IN 1..l_parent_tbl.COUNT LOOP
5410      --if it has child then prorate
5411 --     IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_parent_ver_id) = 'N') THEN
5412        OPEN is_summary_elem(l_parent_ver_id);
5413        FETCH is_summary_elem INTO l_dummy;
5414        IF is_summary_elem%FOUND THEN
5415          PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
5416               p_task_version_id => l_parent_ver_id
5417              ,x_return_status => x_return_status
5418              ,x_msg_count => x_msg_count
5419              ,x_msg_data => x_msg_data);
5420          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5421            CLOSE is_summary_elem;
5422            RAISE FND_API.G_EXC_ERROR;
5423          END IF;
5424        END IF;
5425        CLOSE is_summary_elem;
5426 --     END IF;
5427      l_parent_ver_id := l_parent_tbl.NEXT(l_parent_ver_id);
5428    END LOOP;
5429 */
5430 
5431 /* --moved before copying tasks
5432     --hsiu
5433     --changes for task status
5434     --tasks might be deleted because childs are also deleted when deleting
5435     -- a task
5436     l_del_task_cnt := 0;
5437     LOOP
5438       EXIT when l_del_task_cnt = l_tbd_task_ver_id.count;
5439       l_del_task_cnt := l_del_task_cnt + 1;
5440 
5441       OPEN get_tbd_tasks_info(l_tbd_task_ver_id(l_del_task_cnt));
5442       FETCH get_tbd_tasks_info into l_tbd_tasks_info_rec;
5443       IF get_tbd_tasks_info%FOUND THEN
5444         PA_TASK_PVT1.Delete_Task_Ver_wo_val(
5445              p_structure_version_id  => l_tbd_tasks_info_rec.parent_structure_version_id
5446             ,p_task_version_id       => l_tbd_tasks_info_rec.element_version_id
5447             ,p_record_version_number => l_tbd_tasks_info_rec.record_version_number
5448             ,x_return_status         => l_return_status
5449             ,x_msg_count         => l_msg_count
5450             ,x_msg_data              => l_msg_data
5451         );
5452 
5453         if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5454           x_msg_count := FND_MSG_PUB.count_msg;
5455           if x_msg_count = 1 then
5456             x_msg_data := l_msg_data;
5457           end if;
5458           raise FND_API.G_EXC_ERROR;
5459         end if;
5460 
5461       END IF;
5462       CLOSE get_tbd_tasks_info;
5463     END LOOP;
5464     --end changes for task status
5465 */
5466 
5467     --Change the status of the working version to 'STRUCTURE_WORKING'
5468     update PA_PROJ_ELEM_VER_STRUCTURE
5469     set status_code = 'STRUCTURE_WORKING',
5470         record_version_number = nvl(record_version_number,0)+1
5471     where pev_structure_id = l_pev_structure_id;
5472 
5473 
5474 --bug 4479392
5475 --Update the wbs_flag for the working version as well.
5476       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
5477                                p_project_id => l_project_id,
5478                                p_structure_version_id => p_structure_version_id,
5479                                p_update_wbs_flag => 'Y',
5480                                x_return_status => l_return_status,
5481                                x_msg_count => l_msg_count,
5482                                x_msg_data => l_msg_data
5483                              );
5484       If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5485         x_msg_count := FND_MSG_PUB.count_msg;
5486         if x_msg_count = 1 then
5487           x_msg_data := l_msg_data;
5488         end if;
5489         raise FND_API.G_EXC_ERROR;
5490       end if;
5491 
5492 --end bug 4479392
5493 
5494     --bug 3035902
5495     --Change the process flag of the published structure version to Y if
5496     --the working version is set to Y
5497     --Bug No 3450684 SMukka Commented if condition
5498     --IF (PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(l_project_id,
5499       --  p_structure_version_id) = 'Y') THEN
5500       --set the flag for the published version
5501       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
5502                                p_project_id => l_project_id,
5503                                p_structure_version_id => l_new_struct_ver_id,
5504                                p_update_wbs_flag => 'Y',
5505                                x_return_status => l_return_status,
5506                                x_msg_count => l_msg_count,
5507                                x_msg_data => l_msg_data
5508                              );
5509       If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5510         x_msg_count := FND_MSG_PUB.count_msg;
5511         if x_msg_count = 1 then
5512           x_msg_data := l_msg_data;
5513         end if;
5514         raise FND_API.G_EXC_ERROR;
5515       end if;
5516     --END IF;
5517     --end bug 3035902
5518 
5519 --bug 4019845
5520 /*
5521  -- Added this for FP_M changes -- Bhumesh
5522   PA_PROGRESS_PUB.Pull_Summarized_Actuals (
5523      P_Project_ID       =>  l_Project_ID
5524     ,p_Calling_Mode     =>  'PUBLISH'
5525     ,x_return_status    =>  x_return_status
5526     ,x_msg_count        =>  x_msg_count
5527     ,x_msg_data         =>  x_msg_data
5528   );
5529 
5530   if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
5531       x_msg_count := FND_MSG_PUB.count_msg;
5532       if x_msg_count = 1 then
5533         x_msg_data := l_msg_data;
5534       end if;
5535       raise FND_API.G_EXC_ERROR;
5536   end if;
5537 
5538 IF p_pub_prog_flag = 'Y' THEN
5539   PA_PROGRESS_PUB.Publish_Progress(
5540      p_project_id               => l_Project_ID
5541     --,p_structure_version_id     => p_structure_version_id -- Bug 3839288
5542     ,p_pub_structure_version_id   => l_new_struct_ver_id  -- Bug 3839288
5543     ,x_upd_new_elem_ver_id_flag   => l_upd_new_elem_ver_id_flag -- added by rtarway for BUG 3951024
5544     ,x_as_of_date         => l_as_of_date -- Bug 3839288
5545     ,x_task_weight_basis_code     => l_task_weight_basis_code -- Bug 3839288
5546     ,x_return_status        => x_return_status
5547     ,x_msg_count            => x_msg_count
5548     ,x_msg_data             => x_msg_data
5549   );
5550 
5551   if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
5552       x_msg_count := FND_MSG_PUB.count_msg;
5553       if x_msg_count = 1 then
5554         x_msg_data := l_msg_data;
5555       end if;
5556       raise FND_API.G_EXC_ERROR;
5557   end if;
5558 
5559 END IF;
5560 */
5561 --end bug 4019845
5562 
5563  -- End
5564 
5565     IF l_debug_mode = 'Y' THEN
5566         pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'Before opening sel_other_structure_ver p_structure_version_id='||p_structure_version_id, 3);
5567     END IF;
5568 
5569     --hsiu
5570     --changes for advanced structure
5571     --Delete other working structures after publishing
5572     OPEN sel_other_structure_ver(p_structure_version_id);
5573     LOOP
5574       FETCH sel_other_structure_ver into l_del_struc_ver_id, l_del_struc_ver_rvn;
5575       EXIT WHEN sel_other_structure_ver%NOTFOUND;
5576 
5577     IF l_debug_mode = 'Y' THEN
5578         pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'Before calling PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val', 3);
5579         pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'l_del_struc_ver_id='||l_del_struc_ver_id||' l_del_struc_ver_rvn='||l_del_struc_ver_rvn, 3);
5580     END IF;
5581 
5582       PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val(
5583               p_structure_version_id => l_del_struc_ver_id
5584              ,p_record_version_number => l_del_struc_ver_rvn
5585              ,x_return_status => l_return_status
5586              ,x_msg_count => l_msg_count
5587              ,x_msg_data => l_msg_data
5588             );
5589 
5590       --Check if there is any error.
5591       l_msg_count := FND_MSG_PUB.count_msg;
5592 
5593     IF l_debug_mode = 'Y' THEN
5594         pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'After calling PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val l_return_status='||l_return_status||' l_msg_count='||l_msg_count, 3);
5595     END IF;
5596 
5597       IF l_msg_count > 0  OR l_return_status ='E' THEN
5598         x_msg_count := l_msg_count;
5599         IF x_msg_count = 1 THEN
5600           x_msg_data := l_msg_data;
5601         END IF;
5602         CLOSE sel_other_structure_ver;
5603         RAISE FND_API.G_EXC_ERROR;
5604       END IF;
5605 
5606     END LOOP;
5607     CLOSE sel_other_structure_ver;
5608     --end changes
5609 
5610 
5611     x_published_struct_ver_id := l_new_struct_ver_id;
5612 
5613     --bug 3010538
5614     IF (p_calling_module = 'SELF_SERVICE') THEN
5615       --called separately if calling from AMG
5616       PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP(
5617         p_calling_context => 'PUBLISH',
5618         p_project_id => l_project_id,
5619 --        p_structure_version_id => l_last_pub_str_ver_id,   --SMukka Commented
5620         p_structure_version_id => p_structure_version_id,   --Smukka Added line
5621         p_pub_struc_ver_id => l_new_struct_ver_id,
5622         p_pub_prog_flag => p_pub_prog_flag,
5623         x_return_status => l_return_status,
5624         x_msg_count => l_msg_count,
5625         x_msg_data => l_msg_data
5626       );
5627 
5628       --Check if there is any error.
5629       l_msg_count := FND_MSG_PUB.count_msg;
5630       IF l_msg_count > 0 THEN
5631         x_msg_count := l_msg_count;
5632         IF x_msg_count = 1 THEN
5633           x_msg_data := l_msg_data;
5634         END IF;
5635         RAISE FND_API.G_EXC_ERROR;
5636       END IF;
5637     END IF;
5638     --end bug 3010538
5639 
5640 --bug 4019845
5641 /*
5642     -- BUg 3627315 Issue 8 : Added following call
5643     --The follwoing api is called to push progress data to PJI for the new
5644     --structure version.
5645     BEGIN
5646          --bug 3822112
5647          if l_share_flag = 'Y'
5648          then
5649             l_copy_actuals_flag := 'N';
5650          end if;
5651     PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC(
5652            p_project_id               => l_Project_ID
5653           ,p_src_str_ver_id           => p_structure_version_id
5654           ,p_dst_str_ver_id           => l_new_struct_ver_id
5655           ,p_pub_wp_with_prog_flag    => p_pub_prog_flag
5656           ,p_calling_context          => 'PUBLISH'
5657           ,p_copy_actuals_flag        => l_copy_actuals_flag    --bug 3822112
5658           ,p_last_pub_str_version_id  => l_last_pub_str_ver_id -- Modified rakragha 28-JUL-2004
5659           ,x_return_status            => x_return_status
5660           ,x_msg_count                => x_msg_count
5661           ,x_msg_data                 => x_msg_data
5662           );
5663     EXCEPTION
5664       WHEN OTHERS THEN
5665           fnd_msg_pub.add_exc_msg(p_pkg_name       =>
5666             'PA_PROJECT_STRUCTURE_PVT1',
5667                     p_procedure_name => 'publish_structure',
5668                     p_error_text     => SUBSTRB('Call PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC:'||SQLERRM,1,120));
5669                    RAISE FND_API.G_EXC_ERROR;
5670     END;
5671 
5672     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5673         x_msg_count := FND_MSG_PUB.count_msg;
5674         IF x_msg_count = 1 THEN
5675             x_msg_data := l_msg_data;
5676         END IF;
5677         raise FND_API.G_EXC_ERROR;
5678     END IF;
5679 */
5680 --bug 4019845
5681 
5682 
5683 --bug 4019845
5684 /*
5685     -- Bug 3839288 Begin
5686     IF p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL
5687     THEN
5688     BEGIN
5689 
5690         pa_progress_pub.populate_pji_tab_for_plan(
5691              p_init_msg_list    => FND_API.G_FALSE
5692             ,p_commit       => FND_API.G_FALSE
5693             --,p_calling_module => p_calling_module
5694             ,p_project_id       => l_Project_ID
5695             ,p_structure_version_id => l_new_struct_ver_id
5696             ,p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(l_Project_ID)
5697             ,p_structure_type       => 'WORKPLAN'
5698             ,x_return_status        => x_return_status
5699             ,x_msg_count            => x_msg_count
5700             ,x_msg_data             => x_msg_data
5701             );
5702     EXCEPTION
5703         WHEN OTHERS THEN
5704             fnd_msg_pub.add_exc_msg(p_pkg_name       =>
5705                 'PA_PROJECT_STRUCTURE_PVT1',
5706                     p_procedure_name => 'publish_structure',
5707                     p_error_text     => SUBSTRB('Call pa_progress_pub.populate_pji_tab_for_plan:'||SQLERRM,1,120));
5708             RAISE FND_API.G_EXC_ERROR;
5709     END;
5710 
5711     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5712         x_msg_count := FND_MSG_PUB.count_msg;
5713         IF x_msg_count = 1 THEN
5714             x_msg_data := l_msg_data;
5715         END IF;
5716         raise FND_API.G_EXC_ERROR;
5717     END IF;
5718 
5719     BEGIN
5720            PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
5721                  p_init_msg_list             => FND_API.G_FALSE
5722             --,p_calling_module      => p_calling_module
5723                 ,p_commit                    => FND_API.G_FALSE
5724                 --,p_validate_only             => p_validate_only
5725                 ,p_project_id                => l_Project_ID
5726                 ,p_structure_version_id      => l_new_struct_ver_id
5727                 ,p_as_of_date                => l_as_of_date
5728                 ,p_wp_rollup_method          => l_task_weight_basis_code
5729                 ,p_rollup_entire_wbs         => 'Y'
5730                 ,p_working_wp_prog_flag      => 'N'
5731                 ,p_upd_new_elem_ver_id_flag  => l_upd_new_elem_ver_id_flag --rtarway, 3951024
5732                 ,x_return_status             => x_return_status
5733                 ,x_msg_count                 => x_msg_count
5734                 ,x_msg_data                  => x_msg_data);
5735     EXCEPTION
5736         WHEN OTHERS THEN
5737             fnd_msg_pub.add_exc_msg(p_pkg_name       =>
5738                 'PA_PROJECT_STRUCTURE_PVT1',
5739                     p_procedure_name => 'publish_structure',
5740                     p_error_text     => SUBSTRB('Call PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT:'||SQLERRM,1,120));
5741             RAISE FND_API.G_EXC_ERROR;
5742     END;
5743 
5744 
5745     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5746         x_msg_count := FND_MSG_PUB.count_msg;
5747         IF x_msg_count = 1 THEN
5748             x_msg_data := l_msg_data;
5749         END IF;
5750         raise FND_API.G_EXC_ERROR;
5751     END IF;
5752 
5753        END IF;
5754     -- Bug 3839288 End
5755 */
5756 --end bug 4019845
5757 
5758 --bug 4019845
5759 /*
5760     IF p_pub_prog_flag = 'Y'
5761     THEN
5762   --bug 3851528
5763         BEGIN
5764            PA_PROGRESS_UTILS.clear_prog_outdated_flag(
5765                  p_project_id                => l_Project_ID
5766                 ,p_structure_version_id      => l_new_struct_ver_id
5767                 ,p_object_id                 => null
5768                 ,p_object_type               => null
5769                 ,x_return_status             => x_return_status
5770                 ,x_msg_count                 => x_msg_count
5771                 ,x_msg_data                  => x_msg_data);
5772         EXCEPTION
5773                 WHEN OTHERS THEN
5774                         fnd_msg_pub.add_exc_msg(p_pkg_name       =>
5775                                 'PA_PROJECT_STRUCTURE_PVT1',
5776                                         p_procedure_name => 'publish_structure',
5777                                         p_error_text     => SUBSTRB('Call PA_PROGRESS_UTILS.clear_prog_outdated_flag:'||SQLERRM,1,120));
5778                         RAISE FND_API.G_EXC_ERROR;
5779         END;
5780 
5781 
5782         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5783                 x_msg_count := FND_MSG_PUB.count_msg;
5784                 IF x_msg_count = 1 THEN
5785                         x_msg_data := l_msg_data;
5786                 END IF;
5787                 raise FND_API.G_EXC_ERROR;
5788         END IF;
5789   --bug 3851528
5790 
5791     END IF; -- p_pub_prog_flag = 'Y' THEN
5792 */
5793 --end bug 4019845
5794 
5795     -- Start Bug : 4096218
5796     IF p_calling_module = 'AMG' THEN
5797             /* 4096218 Commenting , as we have changed the global varray name to G_DELETED_TASK_IDS_FROM_OP
5798                        and now we are expected to pass the varray of 'to be deleted' task projelementids ,
5799                not version ids.
5800             PA_PROJECT_PUB.G_DELETED_TASK_VER_IDS_FROM_OP := l_tbd_task_ver_id;
5801         */
5802         PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP := l_tbd_task_id;
5803     END IF;
5804     -- End Bug : 4096218
5805 
5806     x_return_status := FND_API.G_RET_STS_SUCCESS;
5807 
5808     if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5809       x_msg_count := FND_MSG_PUB.count_msg;
5810       if x_msg_count = 1 then
5811         x_msg_data := l_msg_data;
5812       end if;
5813       raise FND_API.G_EXC_ERROR;
5814     end if;
5815 
5816     IF (p_debug_mode = 'Y') THEN
5817       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE end');
5818     END IF;
5819 
5820   EXCEPTION
5821     when FND_API.G_EXC_ERROR then
5822       if p_commit = FND_API.G_TRUE then
5823          rollback to publish_structure_pvt;
5824       else
5825          --need to rollback because generate error page performs a commit
5826          rollback;
5827       end if;
5828       --get errors
5829       FOR i IN 1..FND_MSG_PUB.COUNT_MSG LOOP
5830         FND_MSG_PUB.GET(p_encoded=>'F',
5831                         p_data=>l_messages(i),
5832                         p_msg_index_out => l_msg_index_out);
5833       END LOOP;
5834 
5835       --create error clob
5836       PA_PROJECT_STRUCTURE_PVT1.Generate_Error_Page(
5837         p_structure_version_id => p_structure_version_id,
5838         p_error_tbl            => l_messages,
5839         x_page_content_id      => l_page_content_id,
5840         x_return_status        => l_return_status,
5841         x_msg_count            => l_msg_count,
5842         x_msg_data             => l_msg_data
5843       );
5844 
5845       x_msg_count := FND_MSG_PUB.count_msg;
5846       x_return_status := FND_API.G_RET_STS_ERROR;
5847     when FND_API.G_EXC_UNEXPECTED_ERROR then
5848       if p_commit = FND_API.G_TRUE then
5849          rollback to publish_structure_pvt;
5850       end if;
5851       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5852       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5853                               p_procedure_name => 'PUBLISH_STRUCTURE',
5854                               p_error_text     => SUBSTRB(SQLERRM,1,240));
5855     when OTHERS then
5856       if p_commit = FND_API.G_TRUE then
5857          rollback to publish_structure_pvt;
5858       end if;
5859       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5860       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5861                               p_procedure_name => 'PUBLISH_STRUCTURE',
5862                               p_error_text     => SUBSTRB(SQLERRM,1,240));
5863       raise;
5864   END Publish_Structure;
5865 
5866 
5867 -- API name                      : UPDATE_LATEST_PUB_LINKS
5868 -- Type                          : Private Procedure
5869 -- Pre-reqs                      : None
5870 -- Return Value                  : N/A
5871 -- Parameters
5872 --   p_api_version                       IN  NUMBER      := 1.0
5873 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
5874 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
5875 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
5876 --   p_validation_level                  IN  VARCHAR2    := 100
5877 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
5878 --   p_debug_mode                        IN  VARCHAR2    := 'N'
5879 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5880 --   p_orig_project_id                   IN  NUMBER
5881 --   p_orig_structure_id                 IN  NUMBER
5882 --   p_orig_struc_ver_id                 IN  NUMBER
5883 --   p_orig_task_ver_id                  IN  NUMBER
5884 --   p_new_project_id                    IN  NUMBER
5885 --   p_new_structure_id                  IN  NUMBER
5886 --   p_new_struc_ver_id                  IN  NUMBER
5887 --   p_new_task_ver_id                   IN  NUMBER
5888 --   x_return_status     OUT     VARCHAR2
5889 --   x_msg_count     OUT     NUMBER
5890 --   x_msg_data  OUT     VARCHAR2
5891 --
5892 --  History
5893 --
5894 --  25-JUN-01   HSIU              -Created
5895 --
5896 --
5897 
5898 
5899   procedure UPDATE_LATEST_PUB_LINKS
5900   (
5901    p_api_version                       IN  NUMBER      := 1.0
5902    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
5903    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
5904    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
5905    ,p_validation_level                  IN  VARCHAR2    := 100
5906    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
5907    ,p_debug_mode                        IN  VARCHAR2    := 'N'
5908    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5909    ,p_orig_project_id                   IN  NUMBER
5910    ,p_orig_structure_id                 IN  NUMBER
5911    ,p_orig_struc_ver_id                 IN  NUMBER
5912    ,p_orig_task_ver_id                  IN  NUMBER
5913    ,p_new_project_id                    IN  NUMBER
5914    ,p_new_structure_id                  IN  NUMBER
5915    ,p_new_struc_ver_id                  IN  NUMBER
5916    ,p_new_task_ver_id                   IN  NUMBER
5917    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5918    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
5919    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5920   )
5921   IS
5922     cursor get_from_id(c_element_version_id NUMBER) IS
5923       select object_relationship_id, object_id_from1 object_id_from,
5924              object_type_from, record_version_number
5925         from pa_object_relationships
5926        where relationship_type = 'L'
5927          and object_id_to1 = c_element_version_id
5928          and object_type_to IN ('PA_TASKS','PA_STRUCTURES');
5929     l_from_object_info        get_from_id%ROWTYPE;
5930 
5931     cursor get_task_version_info(c_task_version_id NUMBER) IS
5932       select v1.project_id project_id, v2.proj_element_id structure_id,
5933              v1.parent_structure_version_id structure_version_id,
5934              v1.element_version_id task_version_id
5935         from pa_proj_element_versions v1,
5936              pa_proj_element_versions v2
5937        where v1.element_version_id = c_task_version_id
5938          and v1.parent_structure_version_id = v2.element_version_id;
5939     l_info_task_ver_rec       get_task_version_info%ROWTYPE;
5940 
5941     cursor get_structure_version_info(c_structure_version_id NUMBER) IS
5942       select v1.project_id project_id, v1.proj_element_id structure_id,
5943              v1.element_version_id structure_version_id
5944         from pa_proj_element_versions v1
5945        where v1.element_version_id = c_structure_version_id;
5946     l_info_struc_ver_rec      get_structure_version_info%ROWTYPE;
5947 
5948     l_return_status                 VARCHAR2(1);
5949     l_msg_count                     NUMBER;
5950     l_msg_data                      VARCHAR2(250);
5951     l_data                          VARCHAR2(250);
5952     l_msg_index_out                 NUMBER;
5953     l_orig_element_version_id       NUMBER;
5954 
5955     l_object_type                   VARCHAR2(30);
5956 
5957     cursor get_latest_struc_ver(c_struc_ver_id NUMBER) IS
5958       select pevs.element_version_id
5959         from pa_proj_element_versions pev,
5960              pa_proj_elem_ver_structure pevs
5961        where pev.element_version_id = c_struc_ver_id
5962          and pev.project_id = pevs.project_id
5963          and pev.proj_element_id = pevs.proj_element_id
5964          and pevs.latest_eff_published_flag = 'Y';
5965 
5966     cursor get_latest_task_ver(c_task_ver_id NUMBER) IS
5967       select pev2.element_version_id task_version_id,
5968              pev2.parent_structure_version_id parent_structure_version_id
5969         from pa_proj_element_versions pev,
5970              pa_proj_element_versions pev1,
5971              pa_proj_elem_ver_structure pevs,
5972              pa_proj_element_versions pev2
5973        where pev.element_version_id = c_task_ver_id
5974          and pev.parent_structure_version_id = pev1.element_version_id
5975          and pev1.project_id = pevs.project_id
5976          and pev1.proj_element_id = pevs.proj_element_id
5977          and pevs.latest_eff_published_flag = 'Y'
5978          and pev.proj_element_id = pev2.proj_element_id
5979          and pev.project_id = pev2.project_id
5980          and pev2.parent_structure_version_id = pevs.element_version_id;
5981 
5982     cursor can_update(c_element_version_id NUMBER) IS
5983       select '1'
5984         from pa_proj_elem_ver_structure pevs,
5985              pa_proj_element_versions pev
5986        where pev.element_version_id = c_element_version_id
5987          and pev.parent_structure_version_id = pevs.element_version_id
5988          and pev.project_id = pevs.project_id
5989          and pevs.status_code IN ('STRUCTURE_WORKING', 'STRUCTURE_REJECTED');
5990     l_dummy  VARCHAR2(1);
5991 
5992     l_latest_elem_ver               NUMBER;
5993     l_latest_parent_struc_ver       NUMBER;
5994 
5995   BEGIN
5996     IF (p_debug_mode = 'Y') THEN
5997       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS begin');
5998     END IF;
5999 
6000     IF (p_commit = FND_API.G_TRUE) THEN
6001       savepoint update_latest_pub_links_pvt;
6002     END IF;
6003 
6004     IF p_orig_task_ver_id IS NULL THEN
6005       l_object_type := 'PA_STRUCTURES';
6006       l_orig_element_version_id := p_orig_struc_ver_id;
6007     ELSE
6008       l_object_type := 'PA_TASKS';
6009       l_orig_element_version_id := p_orig_task_ver_id;
6010     END IF;
6011 
6012 --    error_msg('in update latest pub links');
6013     --Search for the element version in the latest published version
6014     --  that has a link point to it, and corresponds to the original
6015     --  element.
6016     IF (l_object_type = 'PA_STRUCTURES') THEN
6017       --Get the published element
6018 --dbms_output.put_line('b, Open get_latest_struc_ver');
6019       OPEN get_latest_struc_ver(l_orig_element_version_id);
6020       FETCH get_latest_struc_ver INTO l_latest_elem_ver;
6021       IF get_latest_struc_ver%NOTFOUND THEN
6022         --no publish version. exit;
6023         IF (p_debug_mode = 'Y') THEN
6024           pa_debug.debug('No latest published version found');
6025         END IF;
6026 --dbms_output.put_line('b, Close get_latest_struc_ver');
6027         CLOSE get_latest_struc_ver;
6028         x_return_status := FND_API.G_RET_STS_SUCCESS;
6029         return;
6030       END IF;
6031       l_latest_parent_struc_ver := l_latest_elem_ver;
6032 --dbms_output.put_line('b, Close get_latest_struc_ver');
6033       CLOSE get_latest_struc_ver;
6034     ELSIF (l_object_type = 'PA_TASKS') THEN
6035 --dbms_output.put_line('b, Open get_latest_task_ver');
6036       OPEN get_latest_task_ver(l_orig_element_version_id);
6037       FETCH get_latest_task_ver INTO l_latest_elem_ver,
6038                                      l_latest_parent_struc_ver;
6039       IF get_latest_task_ver%NOTFOUND THEN
6040         --no publish version. exit;
6041         IF (p_debug_mode = 'Y') THEN
6042           pa_debug.debug('No latest published version found');
6043         END IF;
6044 --dbms_output.put_line('b, Close get_latest_task_ver');
6045         CLOSE get_latest_task_ver;
6046         x_return_status := FND_API.G_RET_STS_SUCCESS;
6047         return;
6048       END IF;
6049 --dbms_output.put_line('b, Close get_latest_task_ver');
6050       CLOSE get_latest_task_ver;
6051     END IF;
6052 
6053     --For the element, find all the element versions that links to
6054     --  the publish version which belongs to a working version.
6055 
6056     --Search for incoming links for the latest pub element
6057 --dbms_output.put_line('b, Open get_from_id');
6058     OPEN get_from_id(l_latest_elem_ver);
6059     LOOP
6060       IF (p_debug_mode = 'Y') THEN
6061         pa_debug.debug('getting incoming links');
6062       END IF;
6063       FETCH get_from_id INTO l_from_object_info;
6064       EXIT WHEN get_from_id%NOTFOUND;
6065 
6066 --dbms_output.put_line('b, Open can_update');
6067       OPEN can_update(l_from_object_info.object_id_from);
6068       FETCH can_update INTO l_dummy;
6069       IF (can_update%FOUND) THEN
6070 --dbms_output.put_line('can update found');
6071         --the from object is a working/rejected version. Need to update
6072         IF (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
6073 
6074 --dbms_output.put_line('b, Open get_structure_version_info');
6075           OPEN get_structure_version_info(l_from_object_info.object_id_from);
6076           FETCH get_structure_version_info INTO l_info_struc_ver_rec;
6077           PA_RELATIONSHIP_PVT.Update_Relationship(
6078             p_init_msg_list => FND_API.G_FALSE
6079            ,p_commit => FND_API.G_FALSE
6080            ,p_debug_mode => p_debug_mode
6081            ,p_object_relationship_id    => l_from_object_info.object_relationship_id
6082            ,p_project_id_from           => l_info_struc_ver_rec.project_id
6083            ,p_structure_id_from         => l_info_struc_ver_rec.structure_id
6084            ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
6085            ,p_task_version_id_from      => NULL
6086            ,p_project_id_to             => p_new_project_id
6087            ,p_structure_id_to           => p_new_structure_id
6088            ,p_structure_version_id_to   => p_new_struc_ver_id
6089            ,p_task_version_id_to        => p_new_task_ver_id
6090            ,p_relationship_type         => 'L'
6091            ,p_relationship_subtype      => 'READ_WRITE'
6092            ,p_record_version_number     => l_from_object_info.record_version_number
6093            ,x_return_status             => l_return_status
6094            ,x_msg_count                 => l_msg_count
6095            ,x_msg_data                  => l_msg_data
6096           );
6097 --dbms_output.put_line('b, Close get_structure_version_info');
6098           CLOSE get_structure_version_info;
6099 
6100         ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
6101 --dbms_output.put_line('b, Open get_task_version_info');
6102           OPEN get_task_version_info(l_from_object_info.object_id_from);
6103           FETCH get_task_version_info INTO l_info_task_ver_rec;
6104           PA_RELATIONSHIP_PVT.Update_Relationship(
6105             p_init_msg_list => FND_API.G_FALSE
6106            ,p_commit => FND_API.G_FALSE
6107            ,p_debug_mode => p_debug_mode
6108            ,p_object_relationship_id    => l_from_object_info.object_relationship_id
6109            ,p_project_id_from           => l_info_task_ver_rec.project_id
6110            ,p_structure_id_from         => l_info_task_ver_rec.structure_id
6111            ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
6112            ,p_task_version_id_from      => l_info_task_ver_rec.task_version_id
6113            ,p_project_id_to             => p_new_project_id
6114            ,p_structure_id_to           => p_new_structure_id
6115            ,p_structure_version_id_to   => p_new_struc_ver_id
6116            ,p_task_version_id_to        => p_new_task_ver_id
6117            ,p_relationship_type         => 'L'
6118            ,p_relationship_subtype      => 'READ_WRITE'
6119            ,p_record_version_number     => l_from_object_info.record_version_number
6120            ,x_return_status             => l_return_status
6121            ,x_msg_count                 => l_msg_count
6122            ,x_msg_data                  => l_msg_data
6123           );
6124 --dbms_output.put_line('b, Close get_task_version_info');
6125           CLOSE get_task_version_info;
6126 
6127         END IF;
6128       END IF;
6129 --dbms_output.put_line('b, Close can_update');
6130       CLOSE can_update;
6131     END LOOP;
6132 --dbms_output.put_line('b, Close get_from_id');
6133     CLOSE get_from_id;
6134 
6135 
6136     l_msg_count := FND_MSG_PUB.count_msg;
6137     if (l_msg_count > 0) then
6138       x_msg_count := l_msg_count;
6139       if x_msg_count = 1 then
6140         x_msg_data := l_msg_data;
6141       end if;
6142       raise FND_API.G_EXC_ERROR;
6143     end if;
6144 
6145   EXCEPTION
6146     when FND_API.G_EXC_ERROR then
6147       if p_commit = FND_API.G_TRUE then
6148          rollback to update_latest_pub_links_pvt;
6149       end if;
6150       x_msg_count := FND_MSG_PUB.count_msg;
6151       x_return_status := FND_API.G_RET_STS_ERROR;
6152     when FND_API.G_EXC_UNEXPECTED_ERROR then
6153       if p_commit = FND_API.G_TRUE then
6154          rollback to update_latest_pub_links_pvt;
6155       end if;
6156       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6157       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
6158                               p_procedure_name => 'UPDATE_LATEST_PUB_LINKS',
6159                               p_error_text     => SUBSTRB(SQLERRM,1,240));
6160     when OTHERS then
6161       if p_commit = FND_API.G_TRUE then
6162          rollback to update_latest_pub_links_pvt;
6163       end if;
6164       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6165       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
6166                               p_procedure_name => 'UPDATE_LATEST_PUB_LINKS',
6167                               p_error_text     => SUBSTRB(SQLERRM,1,240));
6168       raise;
6169   END UPDATE_LATEST_PUB_LINKS;
6170 
6171 
6172 PROCEDURE COPY_STRUCTURE_VERSION
6173 ( p_commit                        IN VARCHAR2   := FND_API.G_FALSE
6174  ,p_validate_only                 IN VARCHAR2   := FND_API.G_TRUE
6175  ,p_validation_level              IN NUMBER     := FND_API.G_VALID_LEVEL_FULL
6176  ,p_calling_module                IN VARCHAR2   := 'SELF_SERVICE'
6177  ,p_debug_mode                    IN VARCHAR2   := 'N'
6178  ,p_max_msg_count                 IN NUMBER     := FND_API.G_MISS_NUM
6179  ,p_structure_version_id          IN NUMBER
6180  ,p_new_struct_ver_name           IN VARCHAR2
6181  ,p_new_struct_ver_desc           IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6182  ,p_change_reason_code                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6183  ,x_new_struct_ver_id            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6184  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6185  ,x_msg_data                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6186  ,x_return_status                OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
6187 IS
6188   l_new_struct_ver_id             PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
6189   l_return_status                 VARCHAR2(1);
6190   l_msg_count                     NUMBER;
6191   l_msg_data                      VARCHAR2(250);
6192   l_pev_structure_id              NUMBER;
6193 
6194   CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
6195   IS
6196   SELECT *
6197   FROM PA_PROJ_ELEMENT_VERSIONS
6198   WHERE element_version_id = c_structure_version_id;
6199 
6200   l_structure_ver_rec       l_get_structure_ver_csr%ROWTYPE;
6201   l_structure_ver_to_rec    l_get_structure_ver_csr%ROWTYPE;
6202 
6203   CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
6204   IS
6205   SELECT a.*
6206   FROM PA_PROJ_ELEM_VER_STRUCTURE a,
6207        PA_PROJ_ELEMENT_VERSIONS b
6208   WHERE b.element_version_id = c_structure_version_id
6209   AND   b.project_id = a.project_id
6210   AND   b.element_version_id = a.project_id;
6211 
6212   l_structure_ver_attr_rec       l_get_structure_ver_attr_csr%ROWTYPE;
6213 
6214   CURSOR l_get_task_versions_csr(c_structure_version_id NUMBER)
6215   IS
6216   SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
6217          b.object_id_from1 parent_element_version_id,
6218          a.TASK_UNPUB_VER_STATUS_CODE
6219   FROM PA_PROJ_ELEMENT_VERSIONS a,
6220        PA_OBJECT_RELATIONSHIPS b
6221   WHERE a.object_type = 'PA_TASKS'
6222   AND   a.parent_structure_version_id = c_structure_version_id
6223   AND   a.element_version_id = b.object_id_to1
6224   AND   b.relationship_type = 'S'
6225   AND   b.object_type_from in ('PA_STRUCTURES','PA_TASKS') -- Bug 6429275
6226   AND   b.object_type_to = 'PA_TASKS'
6227   ORDER BY a.display_sequence;
6228 
6229   l_task_versions_rec        l_get_task_versions_csr%ROWTYPE;
6230   l_ref_task_ver_id          NUMBER;
6231   l_peer_or_sub              VARCHAR2(10);
6232 
6233   CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
6234   IS
6235   SELECT a.*
6236   FROM PA_PROJ_ELEM_VER_SCHEDULE a,
6237        PA_PROJ_ELEMENT_VERSIONS b
6238   WHERE b.element_version_id = c_element_version_id
6239   AND b.project_id = a.project_id
6240   AND b.element_version_id = a.element_version_id;
6241 
6242   l_ver_schedule_attr_rec       l_get_ver_schedule_attr_csr%ROWTYPE;
6243 
6244   TYPE reference_tasks IS TABLE OF NUMBER
6245        INDEX BY BINARY_INTEGER;
6246 
6247 --Bug 2189657
6248 --Added for linking tasks with no display sequence.
6249   Type T_EquivElemVerTable IS TABLE OF NUMBER
6250       Index by BINARY_INTEGER;
6251   t_equiv_elem_ver_id T_EquivElemVerTable;
6252 --Bug 2189657 end;
6253 
6254 
6255   -- This table stores reference task version IDs for a particular wbs
6256   -- level. This provides a lookup to find the last task version
6257   -- at that level.
6258   l_outline_task_ref reference_tasks;
6259 
6260   l_last_wbs_level          NUMBER;
6261   l_task_version_id         NUMBER;
6262   l_pev_schedule_id         NUMBER;
6263 
6264   CURSOR l_get_structure_type_csr(c_structure_version_id NUMBER)
6265   IS
6266   SELECT pst.structure_type_class_code
6267   FROM   PA_STRUCTURE_TYPES pst,
6268          PA_PROJ_ELEMENT_VERSIONS ppev,
6269          PA_PROJ_STRUCTURE_TYPES ppst
6270   WHERE  ppev.element_version_id = c_structure_version_id
6271   AND    ppev.proj_element_id = ppst.proj_element_id
6272   AND    ppst.structure_type_id = pst.structure_type_id;
6273 
6274   l_structure_type          PA_STRUCTURE_TYPES.structure_type%TYPE;
6275 
6276   CURSOR l_check_working_versions_csr(c_structure_version_id NUMBER)
6277   IS
6278   SELECT 'Y'
6279   FROM  PA_PROJ_ELEMENT_VERSIONS ppev
6280   WHERE ppev.element_version_id = c_structure_version_id
6281   AND   EXISTS
6282         (SELECT 'Y'
6283          FROM   PA_PROJ_ELEMENT_VERSIONS ppev2,
6284                 PA_PROJ_ELEM_VER_STRUCTURE ppevs
6285          WHERE  ppev2.proj_element_id = ppev.proj_element_id
6286          AND    ppev2.project_id = ppev.project_id
6287          AND    ppevs.project_id = ppev2.project_id
6288          AND    ppevs.element_version_id = ppev2.element_version_id
6289          AND    ppevs.status_code <> 'STRUCTURE_PUBLISHED');
6290 
6291   l_dummy                   VARCHAR2(1);
6292 
6293   cursor get_to_id(c_element_version_id NUMBER) IS
6294       select object_relationship_id, object_id_to1 object_id_to,
6295              object_type_to, record_version_number
6296         from pa_object_relationships
6297        where relationship_type = 'L'
6298          and object_id_from1 = c_element_version_id
6299          and object_type_from IN ('PA_TASKS','PA_STRUCTURES');
6300     l_to_object_info          get_to_id%ROWTYPE;
6301 
6302     cursor get_task_version_info(c_task_version_id NUMBER) IS
6303       select v1.project_id project_id, v2.proj_element_id structure_id,
6304              v1.parent_structure_version_id structure_version_id,
6305              v1.element_version_id task_version_id
6306         from pa_proj_element_versions v1,
6307              pa_proj_element_versions v2
6308        where v1.element_version_id = c_task_version_id
6309          and v1.parent_structure_version_id = v2.element_version_id;
6310     l_info_task_ver_rec       get_task_version_info%ROWTYPE;
6311 
6312     l_new_obj_rel_id          PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
6313     l_structure_type1         PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
6314 
6315 --hsiu
6316 --added for task weighting
6317     CURSOR get_cur_task_ver_weighting(c_ver_id NUMBER) IS
6318      select WEIGHTING_PERCENTAGE
6319        from pa_object_relationships
6320       where object_id_to1 = c_ver_id
6321         and object_type_to = 'PA_TASKS'
6322         and relationship_type = 'S';
6323     l_weighting               NUMBER(17,2);
6324 
6325 --end task weighting changes
6326 
6327    X_Row_id  VARCHAR2(255);
6328 BEGIN
6329 
6330   pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION');
6331 
6332   IF (p_debug_mode = 'Y') THEN
6333     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION begin');
6334   END IF;
6335 
6336   IF (p_commit = FND_API.G_TRUE) THEN
6337     savepoint copy_structure_version_pvt;
6338   END IF;
6339 
6340   -- Get structure version info
6341   OPEN l_get_structure_ver_csr(p_structure_version_id);
6342   FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
6343   CLOSE l_get_structure_ver_csr;
6344 
6345   PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
6346   ( p_validate_only         => p_validate_only
6347    ,p_structure_id          => l_structure_ver_rec.proj_element_id
6348    ,p_attribute_category    => l_structure_ver_rec.attribute_category
6349    ,p_attribute1            => l_structure_ver_rec.attribute1
6350    ,p_attribute2            => l_structure_ver_rec.attribute2
6351    ,p_attribute3            => l_structure_ver_rec.attribute3
6352    ,p_attribute4            => l_structure_ver_rec.attribute4
6353    ,p_attribute5            => l_structure_ver_rec.attribute5
6354    ,p_attribute6            => l_structure_ver_rec.attribute6
6355    ,p_attribute7            => l_structure_ver_rec.attribute7
6356    ,p_attribute8            => l_structure_ver_rec.attribute8
6357    ,p_attribute9            => l_structure_ver_rec.attribute9
6358    ,p_attribute10           => l_structure_ver_rec.attribute10
6359    ,p_attribute11           => l_structure_ver_rec.attribute11
6360    ,p_attribute12           => l_structure_ver_rec.attribute12
6361    ,p_attribute13           => l_structure_ver_rec.attribute13
6362    ,p_attribute14           => l_structure_ver_rec.attribute14
6363    ,p_attribute15           => l_structure_ver_rec.attribute15
6364    ,x_structure_version_id  => l_new_struct_ver_id
6365    ,x_return_status         => l_return_status
6366    ,x_msg_count             => l_msg_count
6367    ,x_msg_data              => l_msg_data );
6368 
6369   If (p_debug_mode = 'Y') THEN
6370     pa_debug.debug('Create Structure Version return status: ' || l_return_status);
6371     pa_debug.debug('l_new_struct_ver_id: ' || l_new_struct_ver_id);
6372   END IF;
6373 
6374 
6375   --Check if there is any error.
6376   l_msg_count := FND_MSG_PUB.count_msg;
6377   IF l_msg_count > 0 THEN
6378     x_msg_count := l_msg_count;
6379     IF x_msg_count = 1 THEN
6380       x_msg_data := l_msg_data;
6381     END IF;
6382     RAISE FND_API.G_EXC_ERROR;
6383   END IF;
6384 
6385    -- Get structure version attributes
6386   OPEN l_get_structure_ver_attr_csr(p_structure_version_id);
6387   FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
6388   CLOSE l_get_structure_ver_attr_csr;
6389 
6390   If (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
6391     l_structure_ver_attr_rec.change_reason_code := p_change_reason_code;
6392   END IF;
6393 
6394   PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
6395   ( p_validate_only               => FND_API.G_FALSE
6396    ,p_structure_version_id        => l_new_struct_ver_id
6397    ,p_structure_version_name      => p_new_struct_ver_name
6398    ,p_structure_version_desc      => p_new_struct_ver_desc
6399    ,p_effective_date              => l_structure_ver_attr_rec.effective_date
6400    ,p_latest_eff_published_flag   => l_structure_ver_attr_rec.latest_eff_published_flag
6401    ,p_locked_status_code          => l_structure_ver_attr_rec.lock_status_code
6402    ,p_struct_version_status_code  => l_structure_ver_attr_rec.status_code
6403    ,p_baseline_current_flag       => l_structure_ver_attr_rec.current_flag
6404    ,p_baseline_original_flag      => l_structure_ver_attr_rec.original_flag
6405    ,p_change_reason_code          => l_structure_ver_attr_rec.change_reason_code
6406    ,x_pev_structure_id            => l_pev_structure_id
6407    ,x_return_status               => l_return_status
6408    ,x_msg_count                   => l_msg_count
6409    ,x_msg_data                    => l_msg_data );
6410 
6411   IF (p_debug_mode = 'Y') THEN
6412     pa_debug.debug('Create Structure Version Attr return status: ' || l_return_status);
6413     pa_debug.debug('l_pev_structure_id: ' || l_pev_structure_id);
6414   END IF;
6415 
6416   --Check if there is any error.
6417   l_msg_count := FND_MSG_PUB.count_msg;
6418   IF l_msg_count > 0 THEN
6419     x_msg_count := l_msg_count;
6420     IF x_msg_count = 1 THEN
6421       x_msg_data := l_msg_data;
6422     END IF;
6423     RAISE FND_API.G_EXC_ERROR;
6424   END IF;
6425 
6426   --Search for outgoing links for the structure version; create new Links
6427 /*
6428   OPEN get_to_id(p_structure_version_id);
6429   LOOP
6430     FETCH get_to_id INTO l_to_object_info;
6431     EXIT WHEN get_to_id%NOTFOUND;
6432     If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
6433       OPEN l_get_structure_ver_csr(l_to_object_info.object_id_to);
6434       FETCH l_get_structure_ver_csr INTO l_structure_ver_to_rec;
6435 
6436       SELECT pst.structure_type_class_code
6437       INTO l_structure_type1
6438       FROM PA_STRUCTURE_TYPES pst,
6439            PA_PROJ_STRUCTURE_TYPES ppst
6440       WHERE ppst.proj_element_id = l_structure_ver_to_rec.proj_element_id
6441       AND   pst.structure_type_id = ppst.structure_type_id;
6442 
6443       PA_RELATIONSHIP_PVT.Create_Relationship(
6444          p_init_msg_list                => FND_API.G_FALSE
6445         ,p_commit                       => FND_API.G_FALSE
6446         ,p_debug_mode                   => p_debug_mode
6447         ,p_project_id_from              => l_structure_ver_rec.project_id
6448         ,p_structure_id_from            => l_structure_ver_rec.proj_element_id
6449         ,p_structure_version_id_from    => l_new_struct_ver_id
6450         ,p_task_version_id_from         => NULL
6451         ,p_project_id_to                => l_structure_ver_to_rec.project_id
6452         ,p_structure_id_to              => l_structure_ver_to_rec.proj_element_id
6453         ,p_structure_version_id_to      => l_structure_ver_to_rec.element_version_id
6454         ,p_task_version_id_to           => NULL
6455         ,p_structure_type               => l_structure_type1
6456         ,p_initiating_element           => NULL
6457         ,p_link_to_latest_structure_ver => NULL
6458         ,p_relationship_type            => 'L'
6459         ,p_relationship_subtype         => 'READ_WRITE'
6460         ,x_object_relationship_id       => l_new_obj_rel_id
6461         ,x_return_status                => l_return_status
6462         ,x_msg_count                    => l_msg_count
6463         ,x_msg_data                     => l_msg_data
6464       );
6465       CLOSE l_get_structure_ver_csr;
6466 
6467       IF (p_debug_mode = 'Y') THEN
6468        pa_debug.debug('Create Relationship return status: ' || l_return_status);
6469        pa_debug.debug('l_new_obj_rel_id: ' || l_new_obj_rel_id);
6470       END IF;
6471     ELSIF(l_to_object_info.object_type_to = 'PA_TASKS') THEN
6472       OPEN get_task_version_info(l_to_object_info.object_id_to);
6473       FETCH get_task_version_info INTO l_info_task_ver_rec;
6474 
6475       SELECT pst.structure_type_class_code
6476       INTO l_structure_type1
6477       FROM PA_STRUCTURE_TYPES pst,
6478            PA_PROJ_STRUCTURE_TYPES ppst
6479       WHERE ppst.proj_element_id = l_info_task_ver_rec.structure_id
6480       AND   pst.structure_type_id = ppst.structure_type_id;
6481 
6482       PA_RELATIONSHIP_PVT.Create_Relationship(
6483          p_init_msg_list                => FND_API.G_FALSE
6484         ,p_commit                       => FND_API.G_FALSE
6485         ,p_debug_mode                   => p_debug_mode
6486         ,p_project_id_from              => l_structure_ver_rec.project_id
6487         ,p_structure_id_from            => l_structure_ver_rec.proj_element_id
6488         ,p_structure_version_id_from    => l_new_struct_ver_id
6489         ,p_task_version_id_from         => NULL
6490         ,p_project_id_to                => l_info_task_ver_rec.project_id
6491         ,p_structure_id_to              => l_info_task_ver_rec.structure_id
6492         ,p_structure_version_id_to      => l_info_task_ver_rec.structure_version_id
6493         ,p_task_version_id_to           => l_info_task_ver_rec.task_version_id
6494         ,p_structure_type               => l_structure_type1
6495         ,p_initiating_element           => NULL
6496         ,p_link_to_latest_structure_ver => NULL
6497         ,p_relationship_type            => 'L'
6498         ,p_relationship_subtype         => 'READ_WRITE'
6499         ,x_object_relationship_id       => l_new_obj_rel_id
6500         ,x_return_status                => l_return_status
6501         ,x_msg_count                    => l_msg_count
6502         ,x_msg_data                     => l_msg_data
6503       );
6504       CLOSE get_task_version_info;
6505       IF (p_debug_mode = 'Y') THEN
6506         pa_debug.debug('Create Relationship return status: ' || l_return_status);
6507         pa_debug.debug('l_new_obj_rel_id: ' || l_new_obj_rel_id);
6508       END IF;
6509     END IF;
6510     --Check error
6511     l_msg_count := FND_MSG_PUB.count_msg;
6512     if (l_msg_count > 0) then
6513       x_msg_count := l_msg_count;
6514       if x_msg_count = 1 then
6515         x_msg_data := l_msg_data;
6516       end if;
6517       CLOSE get_to_id;
6518       raise FND_API.G_EXC_ERROR;
6519     end if;
6520 
6521   END LOOP;
6522   CLOSE get_to_id;
6523 */
6524 
6525 
6526   OPEN l_get_structure_type_csr(p_structure_version_id);
6527   FETCH l_get_structure_type_csr INTO l_structure_type;
6528   CLOSE l_get_structure_type_csr;
6529 
6530   -- If structure is workplan type create schedule version record
6531   if l_structure_type = 'WORKPLAN' then
6532 
6533     OPEN l_get_ver_schedule_attr_csr(p_structure_version_id);
6534     FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
6535     CLOSE l_get_ver_schedule_attr_csr;
6536 
6537 /*
6538     PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
6539     ( p_validate_only           => FND_API.G_FALSE
6540      ,p_element_version_id      => l_new_struct_ver_id
6541      ,p_calendar_id             => l_ver_schedule_attr_rec.calendar_id
6542      ,p_scheduled_start_date    => l_ver_schedule_attr_rec.scheduled_start_date
6543      ,p_scheduled_end_date      => l_ver_schedule_attr_rec.scheduled_finish_date
6544      ,p_obligation_start_date   => l_ver_schedule_attr_rec.obligation_start_date
6545      ,p_obligation_end_date     => l_ver_schedule_attr_rec.obligation_finish_date
6546      ,p_actual_start_date       => l_ver_schedule_attr_rec.actual_start_date
6547      ,p_actual_finish_date      => l_ver_schedule_attr_rec.actual_finish_date
6548      ,p_estimate_start_date     => l_ver_schedule_attr_rec.estimated_start_date
6549      ,p_estimate_finish_date    => l_ver_schedule_attr_rec.estimated_finish_date
6550      ,p_duration                => l_ver_schedule_attr_rec.duration
6551      ,p_early_start_date        => l_ver_schedule_attr_rec.early_start_date
6552      ,p_early_end_date          => l_ver_schedule_attr_rec.early_finish_date
6553      ,p_late_start_date         => l_ver_schedule_attr_rec.late_start_date
6554      ,p_late_end_date           => l_ver_schedule_attr_rec.late_finish_date
6555      ,p_milestone_flag          => l_ver_schedule_attr_rec.milestone_flag
6556      ,p_critical_flag           => l_ver_schedule_attr_rec.critical_flag
6557      ,p_WQ_PLANNED_QUANTITY     => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
6558      ,p_PLANNED_EFFORT          => l_ver_schedule_attr_rec.PLANNED_EFFORT
6559      ,x_pev_schedule_id         => l_pev_schedule_id
6560      ,x_return_status           => l_return_status
6561      ,x_msg_count           => l_msg_count
6562      ,x_msg_data            => l_msg_data );
6563 */
6564     l_pev_schedule_id := NULL;
6565     PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
6566          X_ROW_ID                => X_Row_Id
6567         ,X_PEV_SCHEDULE_ID     => l_pev_schedule_id
6568         ,X_ELEMENT_VERSION_ID      => l_new_struct_ver_id
6569         ,X_PROJECT_ID            => l_ver_schedule_attr_rec.PROJECT_ID
6570         ,X_PROJ_ELEMENT_ID     => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
6571         ,X_SCHEDULED_START_DATE  => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
6572         ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
6573         ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
6574         ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
6575         ,X_ACTUAL_START_DATE        => l_ver_schedule_attr_rec.ACTUAL_START_DATE
6576         ,X_ACTUAL_FINISH_DATE       => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
6577         ,X_ESTIMATED_START_DATE   => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
6578         ,X_ESTIMATED_FINISH_DATE  => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
6579         ,X_DURATION           => l_ver_schedule_attr_rec.DURATION
6580         ,X_EARLY_START_DATE     => l_ver_schedule_attr_rec.EARLY_START_DATE
6581         ,X_EARLY_FINISH_DATE        => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
6582         ,X_LATE_START_DATE      => l_ver_schedule_attr_rec.LATE_START_DATE
6583         ,X_LATE_FINISH_DATE     => l_ver_schedule_attr_rec.LATE_FINISH_DATE
6584         ,X_CALENDAR_ID            => l_ver_schedule_attr_rec.CALENDAR_ID
6585         ,X_MILESTONE_FLAG       => l_ver_schedule_attr_rec.MILESTONE_FLAG
6586         ,X_CRITICAL_FLAG        => l_ver_schedule_attr_rec.CRITICAL_FLAG
6587         ,X_WQ_PLANNED_QUANTITY      => l_ver_schedule_attr_rec.wq_planned_quantity
6588         ,X_PLANNED_EFFORT           => l_ver_schedule_attr_rec.planned_effort
6589         ,X_ACTUAL_DURATION          => l_ver_schedule_attr_rec.actual_duration
6590         ,X_ESTIMATED_DURATION       => l_ver_schedule_attr_rec.estimated_duration
6591         ,X_ATTRIBUTE_CATEGORY               => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
6592         ,X_ATTRIBUTE1                       => l_ver_schedule_attr_rec.ATTRIBUTE1
6593         ,X_ATTRIBUTE2                       => l_ver_schedule_attr_rec.ATTRIBUTE2
6594         ,X_ATTRIBUTE3                       => l_ver_schedule_attr_rec.ATTRIBUTE3
6595         ,X_ATTRIBUTE4                       => l_ver_schedule_attr_rec.ATTRIBUTE4
6596         ,X_ATTRIBUTE5                       => l_ver_schedule_attr_rec.ATTRIBUTE5
6597         ,X_ATTRIBUTE6                       => l_ver_schedule_attr_rec.ATTRIBUTE6
6598         ,X_ATTRIBUTE7                       => l_ver_schedule_attr_rec.ATTRIBUTE7
6599         ,X_ATTRIBUTE8                       => l_ver_schedule_attr_rec.ATTRIBUTE8
6600         ,X_ATTRIBUTE9                       => l_ver_schedule_attr_rec.ATTRIBUTE9
6601         ,X_ATTRIBUTE10                    => l_ver_schedule_attr_rec.ATTRIBUTE10
6602         ,X_ATTRIBUTE11                    => l_ver_schedule_attr_rec.ATTRIBUTE11
6603         ,X_ATTRIBUTE12                    => l_ver_schedule_attr_rec.ATTRIBUTE12
6604         ,X_ATTRIBUTE13                    => l_ver_schedule_attr_rec.ATTRIBUTE13
6605         ,X_ATTRIBUTE14                    => l_ver_schedule_attr_rec.ATTRIBUTE14
6606         ,X_ATTRIBUTE15                    => l_ver_schedule_attr_rec.ATTRIBUTE15
6607         ,X_SOURCE_OBJECT_ID               => l_ver_schedule_attr_rec.PROJECT_ID
6608         ,X_SOURCE_OBJECT_TYPE             => 'PA_PROJECTS'
6609     );
6610 
6611 
6612     IF (p_debug_mode = 'Y') THEN
6613       pa_debug.debug('Create Schedule Version return status: ' || l_return_status);
6614       pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
6615     END IF;
6616 
6617     --Check if there is any error.
6618     l_msg_count := FND_MSG_PUB.count_msg;
6619     IF l_msg_count > 0 THEN
6620       x_msg_count := l_msg_count;
6621       IF x_msg_count = 1 THEN
6622         x_msg_data := l_msg_data;
6623       END IF;
6624       RAISE FND_API.G_EXC_ERROR;
6625     END IF;
6626 
6627   ELSIF l_structure_type in ('FINANCIAL') then
6628     -- There can only be one working version any any time for a financial structure
6629     OPEN l_check_working_versions_csr(p_structure_version_id);
6630     FETCH l_check_working_versions_csr INTO l_dummy;
6631     if l_check_working_versions_csr%FOUND then
6632       CLOSE l_check_working_versions_csr;
6633       PA_UTILS.ADD_MESSAGE('PA','PA_PS_WORKING_VER_EXISTS');
6634       x_msg_data := 'PA_PS_WORKING_VER_EXISTS';
6635       RAISE FND_API.G_EXC_ERROR;
6636     end if;
6637     CLOSE l_check_working_versions_csr;
6638   end if;
6639 
6640   -- Fetch all task versions for this structure version
6641   OPEN l_get_task_versions_csr(p_structure_version_id);
6642 
6643   l_last_wbs_level := null;
6644 
6645   LOOP
6646     FETCH l_get_task_versions_csr INTO l_task_versions_rec;
6647     EXIT WHEN l_get_task_versions_csr%NOTFOUND;
6648 
6649     if l_last_wbs_level is null then
6650       -- first task version being created
6651       -- This task should have wbs level = 1
6652       l_ref_task_ver_id := l_new_struct_ver_id; --p_structure_version_id;
6653       l_peer_or_sub := 'SUB';
6654     else
6655       if l_task_versions_rec.wbs_level > l_last_wbs_level then
6656         l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
6657         l_peer_or_sub := 'SUB';
6658       else
6659         l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
6660         l_peer_or_sub := 'PEER';
6661       end if;
6662     end if;
6663 
6664 --Bug 2189657
6665 --Added for linking tasks with no display sequence.
6666 --Set correct reference and parent element version id
6667       If (l_task_versions_rec.display_sequence IS NULL) THEN
6668         IF (l_ref_task_ver_id <> l_new_struct_ver_id) THEN
6669           --A task has already been created. Reference task must be a task
6670           IF (l_task_versions_rec.parent_element_version_id = p_structure_version_id) THEN
6671             --this is a link to the structure version. A task has already been created.
6672             --need to use a top level task as peer reference task
6673             l_peer_or_sub := 'PEER';
6674             l_ref_task_ver_id := l_outline_task_ref(1);
6675           ELSE
6676             --this is a link to a task.
6677             l_peer_or_sub := 'SUB';
6678             l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
6679           END IF;
6680         ELSE
6681           --No task has been created. Reference task is structure
6682           l_peer_or_sub := 'SUB';
6683           l_ref_task_ver_id := l_new_struct_ver_id;
6684 --          l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
6685         END IF;
6686       END IF;
6687 --Bug 2189657 end;
6688     OPEN get_cur_task_ver_weighting(l_task_versions_rec.element_version_id);
6689     FETCH get_cur_task_ver_weighting INTO l_weighting;
6690     CLOSE get_cur_task_ver_weighting;
6691 
6692     PA_TASK_PVT1.CREATE_TASK_VERSION
6693     ( p_validate_only        => FND_API.G_FALSE
6694      ,p_validation_level     => 0
6695      ,p_ref_task_version_id  => l_ref_task_ver_id
6696      ,p_peer_or_sub          => l_peer_or_sub
6697      ,p_task_id              => l_task_versions_rec.proj_element_id
6698      ,p_WEIGHTING_PERCENTAGE => l_weighting
6699      ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE
6700      ,x_task_version_id      => l_task_version_id
6701      ,x_return_status        => l_return_status
6702      ,x_msg_count            => l_msg_count
6703      ,x_msg_data             => l_msg_data);
6704 
6705     t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
6706 
6707     IF (p_debug_mode = 'Y') THEN
6708       pa_debug.debug('Create Task Version return status: ' || l_return_status);
6709       pa_debug.debug('l_task_version_id: ' || l_task_version_id);
6710       pa_debug.debug('l_msg_count: ' || l_msg_count);
6711     END IF;
6712 
6713     --Check if there is any error.
6714     l_msg_count := FND_MSG_PUB.count_msg;
6715     IF l_msg_count > 0 THEN
6716       x_msg_count := l_msg_count;
6717       IF x_msg_count = 1 THEN
6718         x_msg_data := l_msg_data;
6719       END IF;
6720       RAISE FND_API.G_EXC_ERROR;
6721     END IF;
6722 
6723     if l_structure_type = 'WORKPLAN' then
6724       -- Get task version schedule attributes
6725       OPEN l_get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id);
6726       FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
6727       CLOSE l_get_ver_schedule_attr_csr;
6728 
6729       IF (p_debug_mode = 'Y') THEN
6730         pa_debug.debug('Before Create Schedule Version');
6731       END IF;
6732       -- xxlu added DFF attributes
6733 /*      PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
6734       ( p_validate_only           => FND_API.G_FALSE
6735        ,p_element_version_id      => l_task_version_id
6736        ,p_calendar_id             => l_ver_schedule_attr_rec.calendar_id
6737        ,p_scheduled_start_date    => l_ver_schedule_attr_rec.scheduled_start_date
6738        ,p_scheduled_end_date      => l_ver_schedule_attr_rec.scheduled_finish_date
6739        ,p_obligation_start_date   => l_ver_schedule_attr_rec.obligation_start_date
6740        ,p_obligation_end_date     => l_ver_schedule_attr_rec.obligation_finish_date
6741        ,p_actual_start_date       => l_ver_schedule_attr_rec.actual_start_date
6742        ,p_actual_finish_date      => l_ver_schedule_attr_rec.actual_finish_date
6743        ,p_estimate_start_date     => l_ver_schedule_attr_rec.estimated_start_date
6744        ,p_estimate_finish_date    => l_ver_schedule_attr_rec.estimated_finish_date
6745        ,p_duration                => l_ver_schedule_attr_rec.duration
6746        ,p_early_start_date        => l_ver_schedule_attr_rec.early_start_date
6747        ,p_early_end_date          => l_ver_schedule_attr_rec.early_finish_date
6748        ,p_late_start_date         => l_ver_schedule_attr_rec.late_start_date
6749        ,p_late_end_date           => l_ver_schedule_attr_rec.late_finish_date
6750        ,p_milestone_flag          => l_ver_schedule_attr_rec.milestone_flag
6751        ,p_critical_flag           => l_ver_schedule_attr_rec.critical_flag
6752        ,p_WQ_PLANNED_QUANTITY     => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
6753        ,p_PLANNED_EFFORT          => l_ver_schedule_attr_rec.PLANNED_EFFORT
6754         ,p_attribute_category        => l_ver_schedule_attr_rec.attribute_category
6755         ,p_attribute1                => l_ver_schedule_attr_rec.attribute1
6756         ,p_attribute2                => l_ver_schedule_attr_rec.attribute2
6757         ,p_attribute3                => l_ver_schedule_attr_rec.attribute3
6758         ,p_attribute4                => l_ver_schedule_attr_rec.attribute4
6759         ,p_attribute5                => l_ver_schedule_attr_rec.attribute5
6760         ,p_attribute6                => l_ver_schedule_attr_rec.attribute6
6761         ,p_attribute7                => l_ver_schedule_attr_rec.attribute7
6762         ,p_attribute8                => l_ver_schedule_attr_rec.attribute8
6763         ,p_attribute9                => l_ver_schedule_attr_rec.attribute9
6764         ,p_attribute10             => l_ver_schedule_attr_rec.attribute10
6765         ,p_attribute11             => l_ver_schedule_attr_rec.attribute11
6766         ,p_attribute12             => l_ver_schedule_attr_rec.attribute12
6767         ,p_attribute13             => l_ver_schedule_attr_rec.attribute13
6768         ,p_attribute14             => l_ver_schedule_attr_rec.attribute14
6769         ,p_attribute15             => l_ver_schedule_attr_rec.attribute15
6770        ,x_pev_schedule_id         => l_pev_schedule_id
6771        ,x_return_status           => l_return_status
6772        ,x_msg_count           => l_msg_count
6773        ,x_msg_data            => l_msg_data );
6774       -- end xxlu changes
6775 */
6776       l_pev_schedule_id := NULL;
6777       PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
6778          X_ROW_ID                => X_Row_Id
6779         ,X_PEV_SCHEDULE_ID     => l_pev_schedule_id
6780         ,X_ELEMENT_VERSION_ID      => l_task_version_id
6781         ,X_PROJECT_ID            => l_ver_schedule_attr_rec.PROJECT_ID
6782         ,X_PROJ_ELEMENT_ID     => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
6783         ,X_SCHEDULED_START_DATE  => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
6784         ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
6785         ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
6786         ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
6787         ,X_ACTUAL_START_DATE        => l_ver_schedule_attr_rec.ACTUAL_START_DATE
6788         ,X_ACTUAL_FINISH_DATE       => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
6789         ,X_ESTIMATED_START_DATE   => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
6790         ,X_ESTIMATED_FINISH_DATE  => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
6791         ,X_DURATION           => l_ver_schedule_attr_rec.DURATION
6792         ,X_EARLY_START_DATE     => l_ver_schedule_attr_rec.EARLY_START_DATE
6793         ,X_EARLY_FINISH_DATE        => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
6794         ,X_LATE_START_DATE      => l_ver_schedule_attr_rec.LATE_START_DATE
6795         ,X_LATE_FINISH_DATE     => l_ver_schedule_attr_rec.LATE_FINISH_DATE
6796         ,X_CALENDAR_ID            => l_ver_schedule_attr_rec.CALENDAR_ID
6797         ,X_MILESTONE_FLAG       => l_ver_schedule_attr_rec.MILESTONE_FLAG
6798         ,X_CRITICAL_FLAG        => l_ver_schedule_attr_rec.CRITICAL_FLAG
6799         ,X_WQ_PLANNED_QUANTITY      => l_ver_schedule_attr_rec.wq_planned_quantity
6800         ,X_PLANNED_EFFORT           => l_ver_schedule_attr_rec.planned_effort
6801         ,X_ACTUAL_DURATION          => l_ver_schedule_attr_rec.actual_duration
6802         ,X_ESTIMATED_DURATION       => l_ver_schedule_attr_rec.estimated_duration
6803         ,X_ATTRIBUTE_CATEGORY               => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
6804         ,X_ATTRIBUTE1                       => l_ver_schedule_attr_rec.ATTRIBUTE1
6805         ,X_ATTRIBUTE2                       => l_ver_schedule_attr_rec.ATTRIBUTE2
6806         ,X_ATTRIBUTE3                       => l_ver_schedule_attr_rec.ATTRIBUTE3
6807         ,X_ATTRIBUTE4                       => l_ver_schedule_attr_rec.ATTRIBUTE4
6808         ,X_ATTRIBUTE5                       => l_ver_schedule_attr_rec.ATTRIBUTE5
6809         ,X_ATTRIBUTE6                       => l_ver_schedule_attr_rec.ATTRIBUTE6
6810         ,X_ATTRIBUTE7                       => l_ver_schedule_attr_rec.ATTRIBUTE7
6811         ,X_ATTRIBUTE8                       => l_ver_schedule_attr_rec.ATTRIBUTE8
6812         ,X_ATTRIBUTE9                       => l_ver_schedule_attr_rec.ATTRIBUTE9
6813         ,X_ATTRIBUTE10                    => l_ver_schedule_attr_rec.ATTRIBUTE10
6814         ,X_ATTRIBUTE11                    => l_ver_schedule_attr_rec.ATTRIBUTE11
6815         ,X_ATTRIBUTE12                    => l_ver_schedule_attr_rec.ATTRIBUTE12
6816         ,X_ATTRIBUTE13                    => l_ver_schedule_attr_rec.ATTRIBUTE13
6817         ,X_ATTRIBUTE14                    => l_ver_schedule_attr_rec.ATTRIBUTE14
6818         ,X_ATTRIBUTE15                    => l_ver_schedule_attr_rec.ATTRIBUTE15
6819     ,X_SOURCE_OBJECT_ID               => l_ver_schedule_attr_rec.PROJECT_ID
6820         ,X_SOURCE_OBJECT_TYPE             => 'PA_PROJECTS'
6821       );
6822 
6823       IF (p_debug_mode = 'Y') THEN
6824         pa_debug.debug('Create Schedule Version return status: ' || l_return_status);
6825         pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
6826       END IF;
6827 
6828       --Check if there is any error.
6829       l_msg_count := FND_MSG_PUB.count_msg;
6830       IF l_msg_count > 0 THEN
6831         x_msg_count := l_msg_count;
6832         IF x_msg_count = 1 THEN
6833           x_msg_data := l_msg_data;
6834         END IF;
6835         RAISE FND_API.G_EXC_ERROR;
6836       END IF;
6837     end if;
6838 
6839 /* hsiu: bug 2800553: commented for performance improvement
6840     --Search for outgoing links; create new Links
6841     OPEN get_to_id(l_task_versions_rec.element_version_id);
6842     LOOP
6843       FETCH get_to_id INTO l_to_object_info;
6844       EXIT WHEN get_to_id%NOTFOUND;
6845       If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
6846         OPEN l_get_structure_ver_csr(l_to_object_info.object_id_to);
6847         FETCH l_get_structure_ver_csr INTO l_structure_ver_to_rec;
6848 
6849           PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
6850            p_user_id => FND_GLOBAL.USER_ID
6851           ,p_object_type_from => 'PA_TASKS'
6852           ,p_object_id_from1 => l_task_version_id
6853           ,p_object_id_from2 => NULL
6854           ,p_object_id_from3 => NULL
6855           ,p_object_id_from4 => NULL
6856           ,p_object_id_from5 => NULL
6857           ,p_object_type_to => 'PA_STRUCTURES'
6858           ,p_object_id_to1 => l_structure_ver_to_rec.element_version_id
6859           ,p_object_id_to2 => NULL
6860           ,p_object_id_to3 => NULL
6861           ,p_object_id_to4 => NULL
6862           ,p_object_id_to5 => NULL
6863           ,p_relationship_type => 'L'
6864           ,p_relationship_subtype => 'READ_WRITE'
6865           ,p_lag_day => NULL
6866           ,p_imported_lag => NULL
6867           ,p_priority => NULL
6868           ,p_pm_product_code => NULL
6869           ,x_object_relationship_id => l_new_obj_rel_id
6870           ,x_return_status => l_return_status
6871           );
6872 */
6873 /*
6874         OPEN l_get_structure_type_csr(l_structure_ver_to_rec.element_version_id);
6875         FETCH l_get_structure_type_csr INTO l_structure_type1;
6876         CLOSE l_get_structure_type_csr;
6877 
6878         PA_RELATIONSHIP_PVT.Create_Relationship(
6879            p_init_msg_list                => FND_API.G_FALSE
6880           ,p_commit                       => FND_API.G_FALSE
6881           ,p_debug_mode                   => p_debug_mode
6882           ,p_project_id_from              => l_structure_ver_rec.project_id
6883           ,p_structure_id_from            => l_structure_ver_rec.proj_element_id
6884           ,p_structure_version_id_from    => l_new_struct_ver_id
6885           ,p_task_version_id_from         => l_task_version_id
6886           ,p_project_id_to                => l_structure_ver_to_rec.project_id
6887           ,p_structure_id_to              => l_structure_ver_to_rec.proj_element_id
6888           ,p_structure_version_id_to      => l_structure_ver_to_rec.element_version_id
6889           ,p_task_version_id_to           => NULL
6890           ,p_structure_type               => l_structure_type1
6891           ,p_initiating_element           => NULL
6892           ,p_link_to_latest_structure_ver => NULL
6893           ,p_relationship_type            => 'L'
6894           ,p_relationship_subtype         => 'READ_WRITE'
6895           ,x_object_relationship_id       => l_new_obj_rel_id
6896           ,x_return_status                => l_return_status
6897           ,x_msg_count                    => l_msg_count
6898           ,x_msg_data                     => l_msg_data
6899         );
6900 */
6901 /* hsiu: bug 2800553:  commented for performance improvement
6902         CLOSE l_get_structure_ver_csr;
6903 
6904       ELSIF (l_to_object_info.object_type_to = 'PA_TASKS') THEN
6905         OPEN get_task_version_info(l_to_object_info.object_id_to);
6906         FETCH get_task_version_info INTO l_info_task_ver_rec;
6907 
6908           PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
6909            p_user_id => FND_GLOBAL.USER_ID
6910           ,p_object_type_from => 'PA_TASKS'
6911           ,p_object_id_from1 => l_task_version_id
6912           ,p_object_id_from2 => NULL
6913           ,p_object_id_from3 => NULL
6914           ,p_object_id_from4 => NULL
6915           ,p_object_id_from5 => NULL
6916           ,p_object_type_to => 'PA_TASKS'
6917           ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
6918           ,p_object_id_to2 => NULL
6919           ,p_object_id_to3 => NULL
6920           ,p_object_id_to4 => NULL
6921           ,p_object_id_to5 => NULL
6922           ,p_relationship_type => 'L'
6923           ,p_relationship_subtype => 'READ_WRITE'
6924           ,p_lag_day => NULL
6925           ,p_imported_lag => NULL
6926           ,p_priority => NULL
6927           ,p_pm_product_code => NULL
6928           ,x_object_relationship_id => l_new_obj_rel_id
6929           ,x_return_status => l_return_status
6930           );
6931 */
6932 /*
6933         OPEN l_get_structure_type_csr(l_info_task_ver_rec.structure_version_id);
6934         FETCH l_get_structure_type_csr INTO l_structure_type1;
6935         CLOSE l_get_structure_type_csr;
6936 
6937         PA_RELATIONSHIP_PVT.Create_Relationship(
6938            p_init_msg_list                => FND_API.G_FALSE
6939           ,p_commit                       => FND_API.G_FALSE
6940           ,p_debug_mode                   => p_debug_mode
6941           ,p_project_id_from              => l_structure_ver_rec.project_id
6942           ,p_structure_id_from            => l_structure_ver_rec.proj_element_id
6943           ,p_structure_version_id_from    => l_new_struct_ver_id
6944           ,p_task_version_id_from         => l_task_version_id
6945           ,p_project_id_to                => l_info_task_ver_rec.project_id
6946           ,p_structure_id_to              => l_info_task_ver_rec.structure_id
6947           ,p_structure_version_id_to      => l_info_task_ver_rec.structure_version_id
6948           ,p_task_version_id_to           => l_info_task_ver_rec.task_version_id
6949           ,p_structure_type               => l_structure_type1
6950           ,p_initiating_element           => NULL
6951           ,p_link_to_latest_structure_ver => NULL
6952           ,p_relationship_type            => 'L'
6953           ,p_relationship_subtype         => 'READ_WRITE'
6954           ,x_object_relationship_id       => l_new_obj_rel_id
6955           ,x_return_status                => l_return_status
6956           ,x_msg_count                    => l_msg_count
6957           ,x_msg_data                     => l_msg_data
6958         );
6959 */
6960 /* hsiu: bug 2800553: commented for performance improvement
6961         CLOSE get_task_version_info;
6962 
6963       END IF;
6964 
6965       --Check error
6966       l_msg_count := FND_MSG_PUB.count_msg;
6967       if (l_msg_count > 0) then
6968         x_msg_count := l_msg_count;
6969         if x_msg_count = 1 then
6970           x_msg_data := l_msg_data;
6971         end if;
6972         CLOSE get_to_id;
6973         raise FND_API.G_EXC_ERROR;
6974      end if;
6975     END LOOP;
6976     CLOSE get_to_id;
6977 */
6978     l_last_wbs_level := l_task_versions_rec.wbs_level;
6979     l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;
6980 
6981   END LOOP;
6982 
6983   CLOSE l_get_task_versions_csr;
6984 
6985   x_new_struct_ver_id := l_new_struct_ver_id;
6986   x_return_status := FND_API.G_RET_STS_SUCCESS;
6987 
6988   IF (p_commit = FND_API.G_TRUE) THEN
6989     COMMIT;
6990   END IF;
6991 
6992   IF (p_debug_mode = 'Y') THEN
6993     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION END');
6994   END IF;
6995 
6996 EXCEPTION
6997   when FND_API.G_EXC_ERROR then
6998     if p_commit = FND_API.G_TRUE then
6999       rollback to copy_structure_version_pvt;
7000     end if;
7001     x_return_status := FND_API.G_RET_STS_ERROR;
7002   when FND_API.G_EXC_UNEXPECTED_ERROR then
7003     if p_commit = FND_API.G_TRUE then
7004       rollback to copy_structure_version_pvt;
7005     end if;
7006     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7007     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
7008                             p_procedure_name => 'COPY_STRUCTURE_VERSION',
7009                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7010   when OTHERS then
7011     if p_commit = FND_API.G_TRUE then
7012       rollback to copy_structure_version_pvt;
7013     end if;
7014     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7015     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
7016                             p_procedure_name => 'COPY_STRUCTURE_VERSION',
7017                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7018     raise;
7019 END COPY_STRUCTURE_VERSION;
7020 
7021 
7022 PROCEDURE COPY_STRUCTURE
7023 ( p_commit                        IN VARCHAR2    := FND_API.G_FALSE
7024  ,p_validate_only                 IN VARCHAR2    := FND_API.G_TRUE
7025  ,p_validation_level              IN VARCHAR2    := 100
7026  ,p_calling_module                IN VARCHAR2    := 'SELF_SERVICE'
7027  ,p_debug_mode                    IN VARCHAR2    := 'N'
7028  ,p_max_msg_count                 IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7029  ,p_src_project_id                IN NUMBER
7030  ,p_dest_project_id               IN NUMBER
7031 -- anlee
7032 -- Dates changes
7033  ,p_delta                         IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7034 -- End of changes
7035  ,p_copy_task_flag                IN VARCHAR2    := 'Y'
7036  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7037  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7038  ,x_msg_data                     OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
7039 IS
7040   l_return_status                 VARCHAR2(1);
7041   l_msg_count                     NUMBER;
7042   l_msg_data                      VARCHAR2(250);
7043   l_split_cost_workplan_flag      VARCHAR2(1);
7044   l_structure_id                  NUMBER;
7045   l_structure_type                PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
7046 
7047 --Bug 2189657
7048 --Added for linking tasks with no display sequence.
7049     Type T_EquivElemVerTable IS TABLE OF NUMBER
7050       Index by BINARY_INTEGER;
7051     t_equiv_elem_ver_id T_EquivElemVerTable;
7052 --Bug 2189657 end;
7053 
7054   CURSOR l_get_structure_type_csr(c_proj_element_id NUMBER)
7055   IS
7056   SELECT structure_type_class_code
7057   FROM   PA_STRUCTURE_TYPES pst,
7058          PA_PROJ_STRUCTURE_TYPES ppst
7059   WHERE  ppst.proj_element_id = c_proj_element_id
7060   AND    pst.structure_type_id = ppst.structure_type_id;
7061 
7062   CURSOR l_get_structure_csr(c_project_id NUMBER)
7063   IS
7064   SELECT *
7065   FROM PA_PROJ_ELEMENTS
7066   WHERE project_id = c_project_id
7067   AND   object_type = 'PA_STRUCTURES';
7068 
7069   l_structure_rec                 l_get_structure_csr%ROWTYPE;
7070 
7071   --This cursor will either get all the working versions or the latest published version
7072 --  CURSOR l_get_structure_versions_csr(c_project_id NUMBER, c_structure_id NUMBER, c_pub_status VARCHAR2)
7073 --  IS
7074 --  SELECT b.element_version_id
7075 --  FROM   PA_PROJ_ELEM_VER_STRUCTURE b
7076 --  WHERE  b.proj_element_id = c_structure_id
7077 --  AND    b.project_id = c_project_id
7078 --  AND    (b.STATUS_CODE = 'STRUCTURE_PUBLISHED' AND b.LATEST_EFF_PUBLISHED_FLAG = 'Y' AND c_pub_status = 'Y')
7079 --    UNION
7080 --  SELECT b.element_version_id
7081 --  FROM   PA_PROJ_ELEM_VER_STRUCTURE b
7082 --  WHERE  b.proj_element_id = c_structure_id
7083 --  AND    b.project_id = c_project_id
7084 --  AND    (b.STATUS_CODE <> 'STRUCTURE_PUBLISHED' AND c_pub_status = 'N');
7085 
7086 
7087   l_structure_version_id         NUMBER;
7088   l_new_structure_version_id     NUMBER;
7089 
7090   CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
7091   IS
7092   SELECT *
7093   FROM PA_PROJ_ELEMENT_VERSIONS
7094   WHERE element_version_id = c_structure_version_id;
7095 
7096   l_structure_ver_rec       l_get_structure_ver_csr%ROWTYPE;
7097 
7098 --commented by hsiu for advanced structure changes
7099 --  CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER, c_pub_status VARCHAR2)
7100 --  IS
7101 --  SELECT a.*
7102 --  FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7103 --       PA_PROJ_ELEMENT_VERSIONS b
7104 --  WHERE b.element_version_id = c_structure_version_id
7105 --    AND b.element_version_id = a.element_version_id
7106 --    AND b.project_id = a.project_id
7107 --    AND (a.STATUS_CODE <> 'STRUCTURE_PUBLISHED' AND c_pub_status = 'N')
7108 --  UNION
7109 --  SELECT a.*
7110 --  FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7111 --       PA_PROJ_ELEMENT_VERSIONS b
7112 --  WHERE b.element_version_id = c_structure_version_id
7113 --    AND b.element_version_id = a.element_version_id
7114 --    AND b.project_id = a.project_id
7115 --    AND (a.STATUS_CODE = 'STRUCTURE_PUBLISHED' AND c_pub_status = 'Y' and a.LATEST_EFF_PUBLISHED_FLAG='Y');
7116 
7117   CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
7118   IS
7119   SELECT a.*
7120   FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7121        PA_PROJ_ELEMENT_VERSIONS b
7122   WHERE b.element_version_id = c_structure_version_id
7123     AND b.element_version_id = a.element_version_id
7124     AND b.proj_element_id = a.proj_element_id
7125     AND b.project_id = a.project_id;
7126   l_structure_ver_attr_rec       l_get_structure_ver_attr_csr%ROWTYPE;
7127 
7128   CURSOR l_get_task_versions_csr(c_structure_version_id NUMBER)
7129   IS
7130   SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
7131          b.object_id_from1 parent_element_version_id
7132   FROM PA_PROJ_ELEMENT_VERSIONS a,
7133        PA_OBJECT_RELATIONSHIPS b,
7134        pa_proj_elements c
7135   WHERE a.object_type = 'PA_TASKS'
7136   AND   a.parent_structure_version_id = c_structure_version_id
7137   AND   a.element_version_id = b.object_id_to1
7138   AND   b.relationship_type = 'S'
7139   and   c.link_task_flag <> 'Y'
7140   and   c.proj_element_id = a.proj_element_id
7141   ORDER BY a.display_sequence;
7142 
7143   l_task_versions_rec        l_get_task_versions_csr%ROWTYPE;
7144 
7145   CURSOR get_task_ver_weighting(p_task_ver_id NUMBER)
7146   IS
7147   select weighting_percentage
7148     from pa_object_relationships
7149    where object_id_to1 = p_task_ver_id
7150      and object_type_to = 'PA_TASKS'
7151      and relationship_type = 'S';
7152   l_weighting_percentage     NUMBER;
7153 
7154   l_ref_task_ver_id          NUMBER;
7155   l_peer_or_sub              VARCHAR2(10);
7156 
7157   CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
7158   IS
7159   SELECT a.*
7160   FROM PA_PROJ_ELEM_VER_SCHEDULE a,
7161        PA_PROJ_ELEMENT_VERSIONS b
7162   WHERE b.element_version_id = c_element_version_id
7163   AND   b.element_version_id = a.element_version_id
7164   AND   b.project_id = a.project_id;
7165 
7166   l_ver_schedule_attr_rec       l_get_ver_schedule_attr_csr%ROWTYPE;
7167 
7168   TYPE reference_tasks IS TABLE OF NUMBER
7169        INDEX BY BINARY_INTEGER;
7170 
7171   -- This table stores reference task version IDs for a particular wbs
7172   -- level. This provides a lookup to find the last task version
7173   -- at that level.
7174   l_outline_task_ref reference_tasks;
7175 
7176   l_last_wbs_level          NUMBER;
7177   l_task_version_id         NUMBER;
7178   l_pev_schedule_id         NUMBER;
7179 
7180   CURSOR l_get_tasks_csr(c_project_id NUMBER, c_proj_element_id NUMBER)
7181   IS
7182   SELECT a.*, b.task_number PA_TASK_NUMBER
7183   FROM PA_PROJ_ELEMENTS a,
7184        PA_TASKS b
7185   WHERE a.object_type = 'PA_TASKS'
7186   AND   a.project_id = c_project_id
7187   AND   a.proj_element_id = c_proj_element_id
7188   AND   a.LINK_TASK_FLAG <> 'Y'
7189   AND   a.proj_element_id = b.task_id(+);
7190 
7191   CURSOR l_get_pa_tasks_csr(c_project_id NUMBER, c_task_number VARCHAR2)
7192   IS
7193   SELECT task_id
7194   FROM PA_TASKS
7195   WHERE project_id = c_project_id
7196   AND   task_number = c_task_number;
7197 
7198   l_tasks_rec              l_get_tasks_csr%ROWTYPE;
7199   l_task_id                NUMBER;
7200   l_task_id_ref            reference_tasks;
7201   l_pev_structure_id       NUMBER;
7202 
7203   --Bug No 3634334  Commented for performance reasons and rewritten the query.
7204   /*CURSOR l_linking_tasks_csr(c_src_project_id NUMBER, c_dest_project_id NUMBER)
7205   IS
7206   select a.task_id
7207   from pa_tasks a, pa_tasks b, pa_proj_elements c
7208   where a.project_id = c_dest_project_id
7209     and b.project_id = c_src_project_id
7210     and a.task_number = b.task_number
7211     and b.task_id = c.proj_element_id
7212     and c.link_task_flag = 'Y';*/
7213 
7214   CURSOR l_linking_tasks_csr(c_src_project_id NUMBER, c_dest_project_id NUMBER)
7215   IS
7216   select /*+ INDEX(a PA_TASKS_U2) */ a.task_id    --Bug No 3634334
7217   from pa_tasks a, pa_tasks b, pa_proj_elements c
7218   where a.project_id = c_dest_project_id
7219     and b.project_id = c_src_project_id
7220     and a.task_number = b.task_number
7221     and c.project_id = c_src_project_id    --Bug No 3634334
7222     and b.task_id = c.proj_element_id
7223     and c.object_type = 'PA_TASKS'  -- Bug No. 3968095
7224     and c.link_task_flag = 'Y';
7225 
7226   l_task_delete NUMBER;
7227   l_task_delete_rvn NUMBER;
7228   l_task_delete_wbs_rvn NUMBER;
7229 
7230   Type task_match_tbl is Table of NUMBER
7231     INDEX BY BINARY_INTEGER;
7232   l_task_match_tbl task_match_tbl;
7233 
7234   CURSOR l_is_template (c_project_id NUMBER)
7235   IS
7236   SELECT 1 FROM PA_PROJECTS_ALL
7237   WHERE TEMPLATE_FLAG = 'Y'
7238   AND project_id = c_project_id;
7239   l_dummy NUMBER;
7240 
7241 --  l_is_workplan VARCHAR2(1);
7242 --  l_is_billing  VARCHAR2(1);
7243 --  l_is_costing  VARCHAR2(1);
7244   l_structure_pub_status VARCHAR2(1);
7245   l_rowid VARCHAR2(255);
7246   l_name         VARCHAR2(240);
7247   l_project_name VARCHAR2(30);
7248   l_append       VARCHAR2(10) := ': ';
7249   l_suffix       VARCHAR2(80);
7250 -- anlee
7251 -- Dates changes
7252   l_delta        NUMBER;
7253 -- End of changes
7254 
7255 --HSIU
7256 --Added for calculating delta using target date
7257   CURSOR get_target_dates
7258   IS
7259   SELECT target_start_date, target_finish_date
7260   FROM   PA_PROJECTS_ALL
7261   WHERE  PROJECT_ID = p_dest_project_id;
7262   l_target_start_date    DATE;
7263   l_target_finish_date   DATE;
7264   l_scheduled_start_date  DATE;
7265   l_scheduled_finish_date DATE;
7266 -- hsiu
7267 -- Added for advanced structure
7268   l_src_template_flag  VARCHAR2(1);
7269   l_dest_template_flag VARCHAR2(1);
7270   l_select             NUMBER; -- For selecting structure versions:
7271                                -- 1 for last updated working
7272                                -- 2 for all working, baselined and latest published
7273                                -- 3 for latest published only
7274   l_copy               NUMBER; -- For status of copied structure version
7275                                -- 1 for Working
7276                                -- 2 for Published and Baselined
7277                                -- 3 for same as original
7278                                -- 4 for Published only
7279   l_status_code        VARCHAR2(30);
7280   l_baseline_flag      VARCHAR2(1);
7281   l_latest_flag        VARCHAR2(1);
7282 
7283   CURSOR l_get_structure_versions_csr(c_project_id NUMBER, c_structure_id NUMBER,
7284                                       c_option NUMBER)
7285   IS
7286   SELECT distinct(b.element_version_id)
7287   FROM   pa_proj_elements a, pa_proj_elem_ver_structure b
7288   WHERE  a.project_id = c_project_id
7289   AND    a.proj_element_id = c_structure_id
7290   AND    a.project_id = b.project_id
7291   AND    a.proj_element_id = b.proj_element_id
7292   AND    b.status_code <> 'STRUCTURE_PUBLISHED'
7293 --Bug 2643432
7294 --This is a temporary fix. The API returns the first row, but since date
7295 --comparison only compares up to the day, not the second, we can only
7296 --return the first selected row in this API.
7297   AND    b.element_version_id = PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(c_structure_id)
7298 --  AND    b.last_update_date = (
7299 --         SELECT MAX(c.last_update_date)
7300 --         FROM pa_proj_elem_ver_structure c
7301 --         WHERE c.project_id = a.project_id
7302 --         AND c.proj_element_id = a.proj_element_id
7303 --         AND c.status_code <> 'STRUCTURE_PUBLISHED')
7304   AND    1 = (c_option)
7305   UNION
7306   SELECT distinct(b.element_version_id)
7307   FROM   pa_proj_elements a, pa_proj_elem_ver_structure b
7308   WHERE  a.project_id = c_project_id
7309   AND    a.proj_element_id = c_structure_id
7310   AND    a.project_id = b.project_id
7311   AND    a.proj_element_id = b.proj_element_id
7312   AND    ((b.status_code = 'STRUCTURE_PUBLISHED' AND
7313            b.latest_eff_published_flag = 'Y')
7314           OR
7315           (b.status_code = 'STRUCTURE_PUBLISHED' AND
7316            b.current_flag = 'Y')
7317           OR
7318           (b.status_code <> 'STRUCTURE_PUBLISHED'))
7319   AND    2 = (c_option)
7320   UNION
7321   SELECT distinct(b.element_version_id)
7322   FROM   pa_proj_elements a, pa_proj_elem_ver_structure b
7323   WHERE  a.project_id = c_project_id
7324   AND    a.proj_element_id = c_structure_id
7325   AND    a.project_id = b.project_id
7326   AND    a.proj_element_id = b.proj_element_id
7327   AND    b.status_code = 'STRUCTURE_PUBLISHED'
7328   AND    b.latest_eff_published_flag = 'Y'
7329   AND    3 = (c_option);
7330 
7331 
7332   CURSOR get_wp_attr(c_proj_element_id NUMBER) IS
7333     select *
7334     from   pa_proj_workplan_attr
7335     where  proj_element_id = c_proj_element_id;
7336   l_wp_attr_rec get_wp_attr%ROWTYPE;
7337 
7338   CURSOR get_progress_attr(c_proj_element_id NUMBER, c_project_id NUMBER) IS            -- For Bug 3968095
7339     select *
7340     from   pa_proj_progress_attr
7341     where  object_type = 'PA_STRUCTURES'
7342     and    object_id = c_proj_element_id
7343     and project_id = c_project_id;                                      -- For Bug 3968095
7344   l_progress_attr_rec  get_progress_attr%ROWTYPE;
7345 
7346   CURSOR get_proj_rec_ver_number(c_project_id NUMBER) IS
7347     select record_version_number
7348     from pa_projects_all
7349     where project_id = c_project_id;
7350   l_proj_record_ver_number   NUMBER;
7351   l_struc_scheduled_start_date  DATE;
7352   l_struc_scheduled_finish_date DATE;
7353 --hsiu added for task version status
7354   l_task_unpub_ver_status_code    pa_proj_element_versions.TASK_UNPUB_VER_STATUS_CODE%TYPE;
7355 --end task version status changes
7356 
7357 --hsiu: bug 2667527
7358   CURSOR get_init_task_stat(c_task_type_id NUMBER) IS
7359     select INITIAL_STATUS_CODE
7360       from pa_task_types
7361      where task_type_id = c_task_type_id;
7362   l_init_status_code PA_TASK_TYPES.INITIAL_STATUS_CODE%TYPE;
7363 --end bug 2667527
7364 BEGIN
7365   pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE');
7366 
7367   IF (p_debug_mode = 'Y') THEN
7368     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE begin');
7369   END IF;
7370 
7371   IF (p_commit = FND_API.G_TRUE) THEN
7372     savepoint copy_structure_pvt;
7373   END IF;
7374 
7375   -- Check if source and destination project are the same
7376   if p_src_project_id = p_dest_project_id then
7377     x_return_status := FND_API.G_RET_STS_SUCCESS;
7378     return;
7379   end if;
7380 
7381   --Check if the destination project is a template
7382   OPEN l_is_template(p_dest_project_id);
7383   FETCH l_is_template INTO l_dummy;
7384   IF l_is_template%NOTFOUND THEN
7385     l_dest_template_flag := 'N';
7386   ELSE
7387     l_dest_template_flag := 'Y';
7388   END IF;
7389   CLOSE l_is_template;
7390 
7391   --Check if the source project is a template
7392   OPEN l_is_template(p_src_project_id);
7393   FETCH l_is_template INTO l_dummy;
7394   IF l_is_template%NOTFOUND THEN
7395     l_src_template_flag := 'N';
7396   ELSE
7397     l_src_template_flag := 'Y';
7398   END IF;
7399   CLOSE l_is_template;
7400 
7401 /* commented by Hsiu
7402   -- delta is now calculated for each version
7403 
7404   -- anlee
7405   -- Dates changes
7406   if (p_delta = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR (p_delta is NULL) then
7407     l_delta := 0;
7408   else
7409     l_delta := p_delta;
7410   end if;
7411   -- End of changes
7412 */
7413 
7414 /* commented by Hsiu
7415 
7416   -- Check split_cost_from_workplan_flag for source project
7417   SELECT split_cost_from_workplan_flag
7418   INTO l_split_cost_workplan_flag
7419   FROM PA_PROJECTS_ALL
7420   WHERE project_id = p_src_project_id;
7421 
7422   if l_split_cost_workplan_flag = 'N' then
7423     OPEN l_get_structure_csr(p_src_project_id);
7424     FETCH l_get_structure_csr INTO l_structure_rec;
7425     if l_get_structure_csr%NOTFOUND then
7426       CLOSE l_get_structure_csr;
7427       PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_NOT_EXIST');
7428       l_msg_data := 'PA_PS_STRUC_NOT_EXIST';
7429       RAISE FND_API.G_EXC_ERROR;
7430     end if;
7431 
7432     CLOSE l_get_structure_csr;
7433 */
7434 
7435   select name into l_project_name
7436     from pa_projects_all
7437    where project_id = p_dest_project_id;
7438 
7439   select meaning
7440     into l_suffix
7441     from pa_lookups
7442    where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
7443      and lookup_code = 'WORKPLAN';
7444 
7445   --Hsiu start modification
7446   --Get target dates
7447   l_delta := 0;
7448   OPEN get_target_dates;
7449   FETCH get_target_dates into l_target_start_date, l_target_finish_date;
7450   CLOSE get_target_dates;
7451   --end modification
7452 
7453   OPEN l_get_structure_csr(p_src_project_id);
7454   LOOP
7455     FETCH l_get_structure_csr INTO l_structure_rec;
7456     EXIT WHEN l_get_structure_csr%NOTFOUND;
7457 
7458     --check if this is a split project
7459 --    SELECT split_cost_from_workplan_flag
7460 --    INTO l_split_cost_workplan_flag
7461 --    FROM PA_PROJECTS_ALL
7462 --    WHERE project_id = p_src_project_id;
7463 
7464 --    OPEN l_get_structure_type_csr(l_structure_rec.proj_element_id);
7465 --    FETCH l_get_structure_type_csr INTO l_structure_type;
7466 --    CLOSE l_get_structure_type_csr;
7467 
7468 --    IF l_split_cost_workplan_flag = 'N' THEN
7469 --      --there should not be a second structure
7470 --      l_structure_type := NULL;
7471 --    END IF;
7472 
7473 -- Hsiu added
7474 -- For advanced structure
7475 
7476     l_name := substrb(l_project_name, 1, 240);
7477     IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id)
7478         = 'N') THEN
7479       --Workplan and financial are separate structures
7480       IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
7481                                      l_structure_rec.proj_element_id, 'WORKPLAN')
7482          = 'Y') THEN
7483 
7484         --Workplan structure
7485         l_structure_type := 'WORKPLAN';
7486 
7487         --Get workplan attributes
7488         OPEN get_wp_attr(l_structure_rec.proj_element_id);
7489         FETCH get_wp_attr into l_wp_attr_rec;
7490         CLOSE get_wp_attr;
7491 
7492         OPEN get_progress_attr(l_structure_rec.proj_element_id, l_structure_rec.project_id);        -- For Bug 3968095
7493         FETCH get_progress_attr into l_progress_attr_rec;
7494         CLOSE get_progress_attr;
7495 
7496         --Modify name; add suffix
7497         l_name := substrb(l_project_name||l_append||l_suffix, 1, 240);
7498 
7499         IF (l_src_template_flag = 'Y') AND
7500            (l_dest_template_flag = 'Y') THEN
7501           l_select := 1;
7502           l_copy := 1;
7503         ELSIF (l_src_template_flag = 'Y') AND
7504               (l_dest_template_flag = 'N') THEN
7505           l_select := 1;
7506           IF (l_wp_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y' AND
7507               l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N') THEN
7508             l_copy := 1;
7509           ELSE
7510             l_copy := 2;
7511           END IF;
7512         ELSIF (l_src_template_flag = 'N') AND
7513               (l_dest_template_flag = 'N') THEN
7514           l_select := 2;
7515           l_copy := 3;
7516         ELSIF (l_src_template_flag = 'N') AND
7517               (l_dest_template_flag = 'Y') THEN
7518           IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7519                           l_structure_rec.proj_element_id) = 'Y') THEN
7520             l_select := 3;
7521           ELSE
7522             l_select := 1;
7523           END IF;
7524           l_copy := 1;
7525         END IF;
7526       END IF;
7527       IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
7528                                      l_structure_rec.proj_element_id, 'FINANCIAL')
7529          = 'Y') THEN
7530 
7531         --Financial structure
7532         l_structure_type := 'FINANCIAL';
7533 
7534         IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7535                         l_structure_rec.proj_element_id) = 'Y') THEN
7536           l_select := 3;
7537         ELSE
7538           l_select := 1;
7539         END IF;
7540         IF (l_dest_template_flag = 'Y') THEN
7541           l_copy := 1;
7542         ELSE
7543           l_copy := 4;
7544         END IF;
7545 
7546       END IF;
7547     ELSE--share flag is 'Y' for source project
7548 
7549       --Workplan and financial as 1 structure
7550       l_structure_type := NULL; --for share structure
7551 
7552       --Get workplan attributes
7553       OPEN get_wp_attr(l_structure_rec.proj_element_id);
7554       FETCH get_wp_attr into l_wp_attr_rec;
7555       CLOSE get_wp_attr;
7556 
7557       OPEN get_progress_attr(l_structure_rec.proj_element_id, l_structure_rec.project_id);      -- For Bug 3968095
7558       FETCH get_progress_attr into l_progress_attr_rec;
7559       CLOSE get_progress_attr;
7560 
7561       IF (l_src_template_flag = 'Y') AND
7562          (l_dest_template_flag = 'Y') THEN
7563         l_select := 1;
7564         l_copy := 1;
7565       ELSIF (l_src_template_flag = 'Y') AND
7566             (l_dest_template_flag = 'N') THEN
7567         l_select := 1;
7568         IF (l_wp_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y' AND
7569             l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N') THEN
7570           l_copy := 1;
7571         ELSE
7572           l_copy := 2;
7573         END IF;
7574       ELSIF (l_src_template_flag = 'N') AND
7575             (l_dest_template_flag = 'N') THEN
7576         l_select := 2;
7577         l_copy := 3;
7578       ELSIF (l_src_template_flag = 'N') AND
7579             (l_dest_template_flag = 'Y') THEN
7580         IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7581                         l_structure_rec.proj_element_id) = 'Y') THEN
7582           l_select := 3;
7583         ELSE
7584           l_select := 1;
7585         END IF;
7586         l_copy := 1;
7587       END IF;
7588     END IF;
7589 -- end advanced structure changes
7590 
7591 /*
7592     IF (l_structure_type = 'WORKPLAN') THEN
7593       l_name := substr(l_project_name||l_append||l_suffix, 1, 240);
7594     ELSE
7595       l_name := substr(l_project_name, 1, 240);
7596     END IF;
7597 */
7598     IF (p_debug_mode = 'Y') THEN
7599       pa_debug.debug('create structure');
7600     END IF;
7601 
7602 --Commented by hsiu
7603 --  IF (l_dest_template_flag = 'Y' AND l_structure_type = 'WORKPLAN') THEN
7604 --Create new structure
7605 --    PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
7606 --    ( p_validate_only           => FND_API.G_FALSE
7607 --     ,p_project_id              => p_dest_project_id
7608 --     ,p_structure_number        => l_name
7609 --     ,p_structure_name          => l_name
7610 --     ,p_calling_flag            => l_structure_type
7611 --     ,x_structure_id            => l_structure_id
7612 --     ,x_return_status           => l_return_status
7613 --     ,x_msg_count               => l_msg_count
7614 --     ,x_msg_data                => l_msg_data );
7615 
7616 --    --Check if there is any error.
7617 --    l_msg_count := FND_MSG_PUB.count_msg;
7618 --    IF l_msg_count > 0 THEN
7619 --      x_msg_count := l_msg_count;
7620 --      IF x_msg_count = 1 THEN
7621 --        x_msg_data := l_msg_data;
7622 --      END IF;
7623 --      RAISE FND_API.G_EXC_ERROR;
7624 --    END IF;
7625 
7626 --    IF (p_debug_mode = 'Y') THEN
7627 --      pa_debug.debug('create structure version');
7628 --    END IF;
7629 --    PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
7630 --    ( p_validate_only         => FND_API.G_FALSE
7631 --     ,p_structure_id          => l_structure_id
7632 --     ,x_structure_version_id  => l_new_structure_version_id
7633 --     ,x_return_status         => l_return_status
7634 --     ,x_msg_count             => l_msg_count
7635 --     ,x_msg_data              => l_msg_data );
7636 
7637 --    --Check if there is any error.
7638 --    l_msg_count := FND_MSG_PUB.count_msg;
7639 --    IF l_msg_count > 0 THEN
7640 --      x_msg_count := l_msg_count;
7641 --      IF x_msg_count = 1 THEN
7642 --        x_msg_data := l_msg_data;
7643 --      END IF;
7644 --      RAISE FND_API.G_EXC_ERROR;
7645 --    END IF;
7646 
7647 --    IF (p_debug_mode = 'Y') THEN
7648 --      pa_debug.debug('create structure version attr');
7649 --    END IF;
7650 --    PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
7651 --    ( p_validate_only               => FND_API.G_FALSE
7652 --     ,p_structure_version_id        => l_new_structure_version_id
7653 --     ,p_structure_version_name      => l_name
7654 --     ,p_structure_version_desc      => NULL
7655 --     ,p_effective_date              => NULL
7656 --     ,p_latest_eff_published_flag   => 'N'
7657 --     ,p_locked_status_code          => 'UNLOCKED'
7658 --     ,p_struct_version_status_code  => 'STRUCTURE_WORKING'
7659 --     ,p_baseline_current_flag       => 'N'
7660 --     ,p_baseline_original_flag      => 'N'
7661 --     ,x_pev_structure_id            => l_pev_structure_id
7662 --     ,x_return_status               => l_return_status
7663 --     ,x_msg_count                   => l_msg_count
7664 --     ,x_msg_data                    => l_msg_data );
7665 
7666 --    --Check if there is any error.
7667 --    l_msg_count := FND_MSG_PUB.count_msg;
7668 --    IF l_msg_count > 0 THEN
7669 --      x_msg_count := l_msg_count;
7670 --      IF x_msg_count = 1 THEN
7671 --        x_msg_data := l_msg_data;
7672 --      END IF;
7673 --      RAISE FND_API.G_EXC_ERROR;
7674 --    END IF;
7675 
7676 --    IF (p_debug_mode = 'Y') THEN
7677 --      pa_debug.debug('create schedule version');
7678 --    END IF;
7679 --    PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
7680 --    ( p_validate_only           => FND_API.G_FALSE
7681 --     ,p_element_version_id      => l_new_structure_version_id
7682 --     ,p_scheduled_start_date    => SYSDATE
7683 --     ,p_scheduled_end_date      => SYSDATE
7684 --     ,x_pev_schedule_id         => l_pev_schedule_id
7685 --     ,x_return_status           => l_return_status
7686 --     ,x_msg_count             => l_msg_count
7687 --     ,x_msg_data              => l_msg_data );
7688 
7689 --    --Check if there is any error.
7690 --    l_msg_count := FND_MSG_PUB.count_msg;
7691 --    IF l_msg_count > 0 THEN
7692 --      x_msg_count := l_msg_count;
7693 --      IF x_msg_count = 1 THEN
7694 --        x_msg_data := l_msg_data;
7695 --      END IF;
7696 --      RAISE FND_API.G_EXC_ERROR;
7697 --    END IF;
7698 
7699 --  ELSE
7700 --copy from
7701 --end commented code by hsiu
7702 
7703     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
7704     ( p_validate_only           => FND_API.G_FALSE
7705      ,p_project_id              => p_dest_project_id
7706      ,p_structure_number        => l_name
7707      ,p_structure_name          => l_name
7708      ,p_calling_flag            => l_structure_type
7709      ,p_structure_description   => l_structure_rec.description
7710      ,p_attribute_category      => l_structure_rec.attribute_category
7711      ,p_attribute1              => l_structure_rec.attribute1
7712      ,p_attribute2              => l_structure_rec.attribute2
7713      ,p_attribute3              => l_structure_rec.attribute3
7714      ,p_attribute4              => l_structure_rec.attribute4
7715      ,p_attribute5              => l_structure_rec.attribute5
7716      ,p_attribute6              => l_structure_rec.attribute6
7717      ,p_attribute7              => l_structure_rec.attribute7
7718      ,p_attribute8              => l_structure_rec.attribute8
7719      ,p_attribute9              => l_structure_rec.attribute9
7720      ,p_attribute10             => l_structure_rec.attribute10
7721      ,p_attribute11             => l_structure_rec.attribute11
7722      ,p_attribute12             => l_structure_rec.attribute12
7723      ,p_attribute13             => l_structure_rec.attribute13
7724      ,p_attribute14             => l_structure_rec.attribute14
7725      ,p_attribute15             => l_structure_rec.attribute15
7726    ,p_approval_reqd_flag          =>l_wp_attr_rec.WP_APPROVAL_REQD_FLAG
7727    ,p_auto_publish_flag           =>l_wp_attr_rec.WP_AUTO_PUBLISH_FLAG
7728    ,p_approver_source_id          =>l_wp_attr_rec.WP_APPROVER_SOURCE_ID
7729    ,p_approver_source_type        =>l_wp_attr_rec.WP_APPROVER_SOURCE_TYPE
7730    ,p_default_display_lvl         =>l_wp_attr_rec.WP_DEFAULT_DISPLAY_LVL
7731    ,p_enable_wp_version_flag      =>l_wp_attr_rec.WP_ENABLE_VERSION_FLAG
7732    ,p_auto_pub_upon_creation_flag =>l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
7733    ,p_auto_sync_txn_date_flag     =>l_wp_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
7734    ,p_txn_date_sync_buf_days      =>l_wp_attr_rec.TXN_DATE_SYNC_BUF_DAYS
7735 --LDENG
7736    ,p_lifecycle_version_id         => l_wp_attr_rec.LIFECYCLE_VERSION_ID
7737    ,p_current_phase_version_id     => l_wp_attr_rec.CURRENT_PHASE_VERSION_ID
7738 --END LDENG
7739    ,p_PROGRESS_CYCLE_ID           =>l_progress_attr_rec.PROGRESS_CYCLE_ID
7740    ,p_wq_enable_flag              =>l_progress_attr_rec.WQ_ENABLE_FLAG
7741    ,p_remain_effort_enable_flag   =>l_progress_attr_rec.REMAIN_EFFORT_ENABLE_FLAG
7742    ,p_percent_comp_enable_flag    =>l_progress_attr_rec.PERCENT_COMP_ENABLE_FLAG
7743    ,p_next_progress_update_date   =>l_progress_attr_rec.NEXT_PROGRESS_UPDATE_DATE
7744      ,x_structure_id            => l_structure_id
7745      ,x_return_status           => l_return_status
7746      ,x_msg_count               => l_msg_count
7747      ,x_msg_data                => l_msg_data );
7748 
7749     IF (p_debug_mode = 'Y') THEN
7750       pa_debug.debug('done: '||l_return_status);
7751     END IF;
7752 
7753     --Check if there is any error.
7754     l_msg_count := FND_MSG_PUB.count_msg;
7755     IF l_msg_count > 0 THEN
7756       x_msg_count := l_msg_count;
7757       IF x_msg_count = 1 THEN
7758         x_msg_data := l_msg_data;
7759       END IF;
7760       RAISE FND_API.G_EXC_ERROR;
7761     END IF;
7762 
7763 
7764 /*
7765     -- Get all of the tasks for the source project
7766     OPEN l_get_tasks_csr(p_src_project_id);
7767     LOOP
7768       FETCH l_get_tasks_csr INTO l_tasks_rec;
7769       EXIT WHEN l_get_tasks_csr%NOTFOUND;
7770 
7771       -- CREATE_TASK
7772       PA_TASK_PUB1.CREATE_TASK
7773       ( p_validate_only          => FND_API.G_FALSE
7774        ,p_object_type            => 'PA_TASKS'
7775        ,p_project_id             => p_dest_project_id
7776        ,p_structure_id           => l_structure_id
7777        ,p_task_number            => l_tasks_rec.element_number
7778        ,p_task_name              => l_tasks_rec.name
7779        ,p_task_manager_id        => l_tasks_rec.manager_person_id
7780        ,p_scheduled_start_date   => sysdate
7781        ,p_scheduled_finish_date  => sysdate
7782        ,x_task_id                => l_task_id
7783        ,x_return_status          => l_return_status
7784        ,x_msg_count              => l_msg_count
7785        ,x_msg_data               => l_msg_data);
7786 
7787       --Check if there is any error.
7788       l_msg_count := FND_MSG_PUB.count_msg;
7789       IF l_msg_count > 0 THEN
7790         x_msg_count := l_msg_count;
7791         IF x_msg_count = 1 THEN
7792           x_msg_data := l_msg_data;
7793         END IF;
7794         RAISE FND_API.G_EXC_ERROR;
7795       END IF;
7796 
7797       -- Store the newly created task ID
7798       l_task_id_ref(l_tasks_rec.proj_element_id) := l_task_id;
7799     END LOOP;
7800     CLOSE l_get_tasks_csr;
7801 */
7802 
7803 --commented by hsiu
7804     --Get structure type
7805 --  l_is_workplan := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'WORKPLAN');
7806 --  l_is_billing  := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'BILLING');
7807 --  l_is_costing  := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'COSTING');
7808 
7809 --  IF (l_is_billing = 'Y') OR (l_is_costing = 'Y') THEN
7810 --    --Check if it has any published version.
7811 --    If (pa_project_structure_utils.CHECK_PUBLISHED_VER_EXISTS(
7812 --            p_src_project_id, l_structure_rec.proj_element_id) = 'Y') THEN
7813 --      l_structure_pub_status := 'Y';
7814 --    ELSE
7815 --      l_structure_pub_status := 'N';
7816 --    END IF;
7817 --  ELSE
7818 --    l_structure_pub_status := 'N';
7819 --  END IF;
7820 --end commented code by hsiu
7821 
7822     -- Copy all of the structure versions, either published or unpublished from the source structure
7823     -- depending on the flag
7824     OPEN l_get_structure_versions_csr(p_src_project_id,
7825                                       l_structure_rec.proj_element_id,
7826                                       l_select);
7827     LOOP
7828       FETCH l_get_structure_versions_csr INTO l_structure_version_id;
7829       EXIT WHEN l_get_structure_versions_csr%NOTFOUND;
7830 
7831       -- Get structure version info
7832       OPEN l_get_structure_ver_csr(l_structure_version_id);
7833       FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
7834       CLOSE l_get_structure_ver_csr;
7835 
7836 
7837       IF (p_debug_mode = 'Y') THEN
7838         pa_debug.debug('create structure version');
7839       END IF;
7840       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
7841       ( p_validate_only         => p_validate_only
7842        ,p_structure_id          => l_structure_id
7843        ,p_attribute_category    => l_structure_ver_rec.attribute_category
7844        ,p_attribute1            => l_structure_ver_rec.attribute1
7845        ,p_attribute2            => l_structure_ver_rec.attribute2
7846        ,p_attribute3            => l_structure_ver_rec.attribute3
7847        ,p_attribute4            => l_structure_ver_rec.attribute4
7848        ,p_attribute5            => l_structure_ver_rec.attribute5
7849        ,p_attribute6            => l_structure_ver_rec.attribute6
7850        ,p_attribute7            => l_structure_ver_rec.attribute7
7851        ,p_attribute8            => l_structure_ver_rec.attribute8
7852        ,p_attribute9            => l_structure_ver_rec.attribute9
7853        ,p_attribute10           => l_structure_ver_rec.attribute10
7854        ,p_attribute11           => l_structure_ver_rec.attribute11
7855        ,p_attribute12           => l_structure_ver_rec.attribute12
7856        ,p_attribute13           => l_structure_ver_rec.attribute13
7857        ,p_attribute14           => l_structure_ver_rec.attribute14
7858        ,p_attribute15           => l_structure_ver_rec.attribute15
7859        ,x_structure_version_id  => l_new_structure_version_id
7860        ,x_return_status         => l_return_status
7861        ,x_msg_count             => l_msg_count
7862        ,x_msg_data              => l_msg_data );
7863 
7864       --Check if there is any error.
7865       l_msg_count := FND_MSG_PUB.count_msg;
7866       IF l_msg_count > 0 THEN
7867         x_msg_count := l_msg_count;
7868         IF x_msg_count = 1 THEN
7869           x_msg_data := l_msg_data;
7870         END IF;
7871         RAISE FND_API.G_EXC_ERROR;
7872       END IF;
7873 
7874       --Structure version attributes creates after tasks are created
7875 
7876       -- If structure is workplan type create schedule version record
7877       if (l_structure_type = 'WORKPLAN') OR (l_structure_type IS NULL) THEN
7878 
7879         OPEN l_get_ver_schedule_attr_csr(l_structure_version_id);
7880         FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
7881         CLOSE l_get_ver_schedule_attr_csr;
7882 
7883         --Hsiu added
7884         --Project Dates changes: Calculate delta
7885         IF (l_target_start_date IS NULL) THEN
7886           l_delta := 0;
7887         ELSE
7888           l_delta := l_target_start_date - l_ver_schedule_attr_rec.scheduled_start_date;
7889         END IF;
7890 
7891         --calcuate scheduled start and finish dates
7892         IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_start_date + l_delta) THEN
7893           l_scheduled_start_date := l_target_finish_date;
7894         ELSE
7895           l_scheduled_start_date := l_ver_schedule_attr_rec.scheduled_start_date + l_delta;
7896         END IF;
7897 
7898         IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_finish_date + l_delta) THEN
7899           l_scheduled_finish_date := l_target_finish_date;
7900         ELSE
7901           l_scheduled_finish_date := l_ver_schedule_attr_rec.scheduled_finish_date + l_delta;
7902         END IF;
7903         -- end calculate scheduled start and finish dates
7904 
7905 
7906         IF (p_debug_mode = 'Y') THEN
7907           pa_debug.debug('create schedule version for structure');
7908         END IF;
7909 
7910         l_struc_scheduled_start_date  := l_scheduled_start_date;
7911         l_struc_scheduled_finish_date := l_scheduled_finish_date;
7912 
7913         PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
7914         ( p_validate_only           => FND_API.G_FALSE
7915          ,p_element_version_id      => l_new_structure_version_id
7916          ,p_calendar_id             => l_ver_schedule_attr_rec.calendar_id
7917          ,p_scheduled_start_date    => l_scheduled_start_date
7918          ,p_scheduled_end_date      => l_scheduled_finish_date
7919          ,p_obligation_start_date   => l_ver_schedule_attr_rec.obligation_start_date
7920          ,p_obligation_end_date     => l_ver_schedule_attr_rec.obligation_finish_date
7921          ,p_actual_start_date       => l_ver_schedule_attr_rec.actual_start_date
7922          ,p_actual_finish_date      => l_ver_schedule_attr_rec.actual_finish_date
7923          ,p_estimate_start_date     => l_ver_schedule_attr_rec.estimated_start_date
7924          ,p_estimate_finish_date    => l_ver_schedule_attr_rec.estimated_finish_date
7925          ,p_duration                => l_ver_schedule_attr_rec.duration
7926          ,p_early_start_date        => l_ver_schedule_attr_rec.early_start_date
7927          ,p_early_end_date          => l_ver_schedule_attr_rec.early_finish_date
7928          ,p_late_start_date         => l_ver_schedule_attr_rec.late_start_date
7929          ,p_late_end_date           => l_ver_schedule_attr_rec.late_finish_date
7930          ,p_milestone_flag          => l_ver_schedule_attr_rec.milestone_flag
7931          ,p_critical_flag           => l_ver_schedule_attr_rec.critical_flag
7932          ,p_WQ_PLANNED_QUANTITY     => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
7933          ,p_PLANNED_EFFORT          => l_ver_schedule_attr_rec.PLANNED_EFFORT
7934          ,x_pev_schedule_id         => l_pev_schedule_id
7935          ,x_return_status           => l_return_status
7936          ,x_msg_count               => l_msg_count
7937          ,x_msg_data                => l_msg_data );
7938 
7939         --Check if there is any error.
7940         l_msg_count := FND_MSG_PUB.count_msg;
7941         IF l_msg_count > 0 THEN
7942           x_msg_count := l_msg_count;
7943           IF x_msg_count = 1 THEN
7944             x_msg_data := l_msg_data;
7945           END IF;
7946           RAISE FND_API.G_EXC_ERROR;
7947         END IF;
7948 
7949       end if;
7950 
7951 
7952       -- Fetch all task versions for this structure version
7953       OPEN l_get_task_versions_csr(l_structure_version_id);
7954 
7955       l_last_wbs_level := null;
7956 
7957       LOOP
7958         FETCH l_get_task_versions_csr INTO l_task_versions_rec;
7959         EXIT WHEN l_get_task_versions_csr%NOTFOUND or p_copy_task_flag = 'N';
7960 
7961         if l_last_wbs_level is null then
7962           -- first task version being created
7963           -- This task should have wbs level = 1
7964           l_ref_task_ver_id := l_new_structure_version_id;
7965           l_peer_or_sub := 'SUB';
7966         else
7967           if l_task_versions_rec.wbs_level > l_last_wbs_level then
7968             l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
7969             l_peer_or_sub := 'SUB';
7970           else
7971             l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
7972             l_peer_or_sub := 'PEER';
7973           end if;
7974         end if;
7975 
7976 
7977         --check if task already exist; if it does, then skip
7978         -- CREATE_TASK
7979         IF (p_debug_mode = 'Y') THEN
7980           pa_debug.debug('l_task_versions_rec.proj_elemnet_id = '||l_task_versions_rec.proj_element_id);
7981         END IF;
7982 
7983         If (NOT (l_task_match_tbl.exists(l_task_versions_rec.proj_element_id))) THEN
7984 
7985           OPEN l_get_tasks_csr(p_src_project_id, l_task_versions_rec.proj_element_id);
7986           FETCH l_get_tasks_csr INTO l_tasks_rec;
7987           CLOSE l_get_tasks_csr;
7988 
7989 --commented by hsiu
7990 --          If (l_is_workplan = 'Y') AND (l_is_billing = 'N') AND (l_is_costing = 'N') THEN
7991           l_task_id := NULL;
7992           IF (l_structure_type = 'WORKPLAN') THEN
7993             --get new id
7994             select PA_TASKS_S.NEXTVAL into l_task_id from sys.dual;
7995           ELSE
7996             --id exists in pa_tasks. Need to find matching id by using task_number
7997             OPEN l_get_pa_tasks_csr(p_dest_project_id, l_tasks_rec.PA_TASK_NUMBER);
7998             FETCH l_get_pa_tasks_csr into l_task_id;
7999             CLOSE l_get_pa_tasks_csr;
8000           END IF;
8001 
8002           IF (p_debug_mode = 'Y') THEN
8003             pa_debug.debug('inserting into task with id'||l_task_id);
8004           END IF;
8005 
8006           OPEN get_init_task_stat(l_tasks_rec.TYPE_ID);
8007           FETCH get_init_task_stat into l_init_status_code;
8008           CLOSE get_init_task_stat;
8009 
8010           PA_PROJ_ELEMENTS_PKG.Insert_Row(
8011                  X_ROW_ID                               => l_rowid
8012                 ,X_PROJ_ELEMENT_ID                      => l_task_id
8013                 ,X_PROJECT_ID                           => p_dest_project_id
8014                 ,X_OBJECT_TYPE                          => 'PA_TASKS'
8015                 ,X_ELEMENT_NUMBER                       => l_tasks_rec.ELEMENT_NUMBER
8016                 ,X_NAME                                 => l_tasks_rec.NAME
8017                 ,X_DESCRIPTION                          => l_tasks_rec.DESCRIPTION
8018                 ,X_STATUS_CODE                          => l_init_status_code
8019                 ,X_WF_STATUS_CODE                       => l_tasks_rec.WF_STATUS_CODE
8020                 ,X_PM_PRODUCT_CODE                      => l_tasks_rec.PM_SOURCE_CODE
8021                 ,X_PM_TASK_REFERENCE                    => l_tasks_rec.PM_SOURCE_REFERENCE
8022                 ,X_CLOSED_DATE                          => l_tasks_rec.CLOSED_DATE
8023                 ,X_LOCATION_ID                          => l_tasks_rec.LOCATION_ID
8024                 ,X_MANAGER_PERSON_ID                    => l_tasks_rec.MANAGER_PERSON_ID
8025                 ,X_CARRYING_OUT_ORGANIZATION_ID         => l_tasks_rec.CARRYING_OUT_ORGANIZATION_ID
8026                 ,X_TYPE_ID                              => l_tasks_rec.TYPE_ID
8027                 ,X_PRIORITY_CODE                    => l_tasks_rec.PRIORITY_CODE
8028                 ,X_INC_PROJ_PROGRESS_FLAG               => l_tasks_rec.INC_PROJ_PROGRESS_FLAG
8029                 ,X_REQUEST_ID                           => l_tasks_rec.REQUEST_ID
8030                 ,X_PROGRAM_APPLICATION_ID               => l_tasks_rec.PROGRAM_APPLICATION_ID
8031                 ,X_PROGRAM_ID                           => l_tasks_rec.PROGRAM_ID
8032                 ,X_PROGRAM_UPDATE_DATE                  => l_tasks_rec.PROGRAM_UPDATE_DATE
8033                 ,X_LINK_TASK_FLAG                       => l_tasks_rec.LINK_TASK_FLAG
8034                 ,X_ATTRIBUTE_CATEGORY                   => l_tasks_rec.ATTRIBUTE_CATEGORY
8035                 ,X_ATTRIBUTE1                           => l_tasks_rec.ATTRIBUTE1
8036                 ,X_ATTRIBUTE2                           => l_tasks_rec.ATTRIBUTE2
8037                 ,X_ATTRIBUTE3                           => l_tasks_rec.ATTRIBUTE3
8038                 ,X_ATTRIBUTE4                           => l_tasks_rec.ATTRIBUTE4
8039                 ,X_ATTRIBUTE5                           => l_tasks_rec.ATTRIBUTE5
8040                 ,X_ATTRIBUTE6                           => l_tasks_rec.ATTRIBUTE6
8041                 ,X_ATTRIBUTE7                           => l_tasks_rec.ATTRIBUTE7
8042                 ,X_ATTRIBUTE8                           => l_tasks_rec.ATTRIBUTE8
8043                 ,X_ATTRIBUTE9                           => l_tasks_rec.ATTRIBUTE9
8044                 ,X_ATTRIBUTE10                          => l_tasks_rec.ATTRIBUTE10
8045                 ,X_ATTRIBUTE11                          => l_tasks_rec.ATTRIBUTE11
8046                 ,X_ATTRIBUTE12                          => l_tasks_rec.ATTRIBUTE12
8047                 ,X_ATTRIBUTE13                          => l_tasks_rec.ATTRIBUTE13
8048                 ,X_ATTRIBUTE14                          => l_tasks_rec.ATTRIBUTE14
8049                 ,X_ATTRIBUTE15                          => l_tasks_rec.ATTRIBUTE15
8050                 ,X_TASK_WEIGHTING_DERIV_CODE       => NULL
8051                 ,X_WORK_ITEM_CODE                  => l_tasks_rec.WQ_ITEM_CODE
8052                 ,X_UOM_CODE                        => l_tasks_rec.WQ_UOM_CODE
8053                 ,X_WQ_ACTUAL_ENTRY_CODE            => l_tasks_rec.WQ_ACTUAL_ENTRY_CODE
8054                 ,X_TASK_PROGRESS_ENTRY_PAGE_ID     =>l_tasks_rec.TASK_PROGRESS_ENTRY_PAGE_ID
8055                 ,X_PARENT_STRUCTURE_ID             => l_structure_id
8056                 ,X_PHASE_CODE                      => l_tasks_rec.PHASE_CODE
8057                 ,X_PHASE_VERSION_ID                => l_tasks_rec.PHASE_VERSION_ID
8058         ,X_SOURCE_OBJECT_ID                => p_dest_project_id
8059                 ,X_SOURCE_OBJECT_TYPE              => 'PA_PROJECTS'
8060           );
8061 
8062           -- insert task id into table so task will not be duplicated.
8063           l_task_match_tbl(l_tasks_rec.proj_element_id) := l_task_id;
8064 
8065         ELSE
8066           --copy the id into l_task_id;
8067           l_task_id := l_task_match_tbl(l_task_versions_rec.proj_element_id);
8068         END IF;
8069 
8070         IF (p_debug_mode = 'Y') THEN
8071           pa_debug.debug('l_task_id = '||l_task_id);
8072         END IF;
8073 
8074 
8075         IF (p_debug_mode = 'Y') THEN
8076           pa_debug.debug('before creating version:'||l_ref_task_ver_id||','||l_peer_or_sub);
8077         END IF;
8078 
8079         OPEN get_task_ver_weighting(l_task_versions_rec.element_version_id);
8080         FETCH get_task_ver_weighting into l_weighting_percentage;
8081         CLOSE get_task_ver_weighting;
8082 
8083 --hsiu: task version status changes
8084         IF (l_dest_template_flag = 'N') THEN
8085           --check if structure is shared
8086           --  if shared, check if versioned
8087           --    'WORKING' if versioned; 'PUBLISHED' if not
8088           --  if split, check if 'FINANCIAL'
8089           --    'PUBLISHED' if financial
8090           --    check if versioned
8091           --    'WORKING' if versioend; 'PUBLISHED' if not
8092           IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_dest_project_id)) THEN
8093             IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_dest_project_id) AND (l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N')) THEN
8094               l_task_unpub_ver_status_code := 'WORKING';
8095             ELSE
8096               l_task_unpub_ver_status_code := 'PUBLISHED';
8097             END IF;
8098           ELSE --split
8099             IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL')  AND
8100                 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
8101               l_task_unpub_ver_status_code := 'PUBLISHED';
8102             ELSE --workplan only
8103               IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_dest_project_id) AND (l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N')) THEN
8104                 l_task_unpub_ver_status_code := 'WORKING';
8105               ELSE
8106                 l_task_unpub_ver_status_code := 'PUBLISHED';
8107               END IF;
8108             END IF;
8109           END IF;
8110         ELSE
8111           l_task_unpub_ver_status_code := 'WORKING';
8112         END IF;
8113 --end task version status changes
8114 
8115         PA_TASK_PUB1.CREATE_TASK_VERSION
8116         ( p_validate_only        => FND_API.G_FALSE
8117          ,p_ref_task_version_id  => l_ref_task_ver_id
8118          ,p_peer_or_sub          => l_peer_or_sub
8119          ,p_task_id              => l_task_id--l_task_id_ref(l_task_versions_rec.proj_element_id)
8120          ,p_WEIGHTING_PERCENTAGE => l_weighting_percentage
8121          ,p_TASK_UNPUB_VER_STATUS_CODE => l_TASK_UNPUB_VER_STATUS_CODE
8122          ,x_task_version_id      => l_task_version_id
8123          ,x_return_status        => l_return_status
8124          ,x_msg_count            => l_msg_count
8125          ,x_msg_data             => l_msg_data);
8126 
8127       t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
8128 
8129         --Check if there is any error.
8130         l_msg_count := FND_MSG_PUB.count_msg;
8131         IF l_msg_count > 0 THEN
8132           x_msg_count := l_msg_count;
8133           IF x_msg_count = 1 THEN
8134             x_msg_data := l_msg_data;
8135           END IF;
8136           RAISE FND_API.G_EXC_ERROR;
8137         END IF;
8138 
8139         if (l_structure_type = 'WORKPLAN') or (l_structure_type IS NULL) THEN
8140           -- Get task version schedule attributes
8141           OPEN l_get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id);
8142           FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
8143           CLOSE l_get_ver_schedule_attr_csr;
8144 
8145           --calcuate scheduled start and finish dates
8146           IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_start_date + l_delta) THEN
8147             l_scheduled_start_date := l_target_finish_date;
8148           ELSE
8149             l_scheduled_start_date := l_ver_schedule_attr_rec.scheduled_start_date + l_delta;
8150           END IF;
8151 
8152           IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_finish_date + l_delta) THEN
8153             l_scheduled_finish_date := l_target_finish_date;
8154           ELSE
8155             l_scheduled_finish_date := l_ver_schedule_attr_rec.scheduled_finish_date + l_delta;
8156           END IF;
8157           -- end calculate scheduled start and finish dates
8158 
8159           -- xxlu added DFF attributes
8160           PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
8161           ( p_validate_only           => FND_API.G_FALSE
8162            ,p_element_version_id      => l_task_version_id
8163            ,p_calendar_id             => l_ver_schedule_attr_rec.calendar_id
8164 -- anlee
8165 -- Dates changes
8166            ,p_scheduled_start_date    => l_scheduled_start_date
8167            ,p_scheduled_end_date      => l_scheduled_finish_date
8168 -- End of changes
8169            ,p_obligation_start_date   => l_ver_schedule_attr_rec.obligation_start_date
8170            ,p_obligation_end_date     => l_ver_schedule_attr_rec.obligation_finish_date
8171            ,p_actual_start_date       => l_ver_schedule_attr_rec.actual_start_date
8172            ,p_actual_finish_date      => l_ver_schedule_attr_rec.actual_finish_date
8173            ,p_estimate_start_date     => l_ver_schedule_attr_rec.estimated_start_date
8174            ,p_estimate_finish_date    => l_ver_schedule_attr_rec.estimated_finish_date
8175            ,p_duration                => l_ver_schedule_attr_rec.duration
8176            ,p_early_start_date        => l_ver_schedule_attr_rec.early_start_date
8177            ,p_early_end_date          => l_ver_schedule_attr_rec.early_finish_date
8178            ,p_late_start_date         => l_ver_schedule_attr_rec.late_start_date
8179            ,p_late_end_date           => l_ver_schedule_attr_rec.late_finish_date
8180            ,p_milestone_flag          => l_ver_schedule_attr_rec.milestone_flag
8181            ,p_critical_flag           => l_ver_schedule_attr_rec.critical_flag
8182            ,p_WQ_PLANNED_QUANTITY     => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
8183            ,p_PLANNED_EFFORT          => l_ver_schedule_attr_rec.PLANNED_EFFORT
8184            ,p_attribute_category         => l_ver_schedule_attr_rec.attribute_category
8185            ,p_attribute1                 => l_ver_schedule_attr_rec.attribute1
8186            ,p_attribute2                 => l_ver_schedule_attr_rec.attribute2
8187            ,p_attribute3                 => l_ver_schedule_attr_rec.attribute3
8188            ,p_attribute4                 => l_ver_schedule_attr_rec.attribute4
8189            ,p_attribute5                 => l_ver_schedule_attr_rec.attribute5
8190            ,p_attribute6                 => l_ver_schedule_attr_rec.attribute6
8191            ,p_attribute7                 => l_ver_schedule_attr_rec.attribute7
8192            ,p_attribute8                 => l_ver_schedule_attr_rec.attribute8
8193            ,p_attribute9                 => l_ver_schedule_attr_rec.attribute9
8194            ,p_attribute10              => l_ver_schedule_attr_rec.attribute10
8195            ,p_attribute11              => l_ver_schedule_attr_rec.attribute11
8196            ,p_attribute12              => l_ver_schedule_attr_rec.attribute12
8197            ,p_attribute13              => l_ver_schedule_attr_rec.attribute13
8198            ,p_attribute14              => l_ver_schedule_attr_rec.attribute14
8199            ,p_attribute15              => l_ver_schedule_attr_rec.attribute15
8200            ,x_pev_schedule_id         => l_pev_schedule_id
8201            ,x_return_status           => l_return_status
8202            ,x_msg_count               => l_msg_count
8203            ,x_msg_data                => l_msg_data );
8204            -- end xxlu changes
8205 
8206           --Check if there is any error.
8207           l_msg_count := FND_MSG_PUB.count_msg;
8208           IF l_msg_count > 0 THEN
8209             x_msg_count := l_msg_count;
8210             IF x_msg_count = 1 THEN
8211               x_msg_data := l_msg_data;
8212             END IF;
8213             RAISE FND_API.G_EXC_ERROR;
8214           END IF;
8215         end if;
8216 
8217         l_last_wbs_level := l_task_versions_rec.wbs_level;
8218         l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;--l_task_versions_rec.element_version_id;
8219 
8220       END LOOP;
8221       CLOSE l_get_task_versions_csr;
8222 
8223       --Delete linking tasks in PA_TASKS if this is a financial structure
8224       IF (l_structure_type = 'FINANCIAL' or l_structure_type IS NULL) THEN
8225         OPEN l_linking_tasks_csr(p_src_project_id, p_dest_project_id);
8226         LOOP
8227           FETCH l_linking_tasks_csr into l_task_delete;
8228           EXIT WHEN l_linking_tasks_csr%NOTFOUND;
8229 
8230           select a.record_version_number, 0
8231             INTO l_task_delete_rvn, l_task_delete_wbs_rvn
8232             from pa_tasks a
8233            where a.task_id = l_task_delete;
8234 
8235           PA_TASKS_MAINT_PUB.DELETE_TASK(
8236              p_init_msg_list => FND_API.G_FALSE
8237             ,p_commit => FND_API.G_FALSE
8238             ,p_project_id => p_dest_project_id
8239             ,p_task_id    => l_task_delete
8240             ,p_record_version_number => l_task_delete_rvn
8241             ,p_wbs_record_version_number => l_task_delete_wbs_rvn
8242             ,x_return_status => l_return_status
8243             ,x_msg_count => l_msg_count
8244             ,x_msg_data  => l_msg_data
8245           );
8246           l_msg_count := FND_MSG_PUB.count_msg;
8247           IF l_msg_count > 0 THEN
8248             x_msg_count := l_msg_count;
8249             IF x_msg_count = 1 THEN
8250               x_msg_data := l_msg_data;
8251             END IF;
8252             RAISE FND_API.G_EXC_ERROR;
8253           END IF;
8254 
8255         END LOOP;
8256         CLOSE l_linking_tasks_csr;
8257       END IF;
8258 
8259       -- Get structure version attributes
8260       OPEN l_get_structure_ver_attr_csr(l_structure_version_id);
8261       FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
8262       CLOSE l_get_structure_ver_attr_csr;
8263 
8264       IF (p_debug_mode = 'Y') THEN
8265         pa_debug.debug('create structure version attribute');
8266       END IF;
8267 
8268       IF (l_copy = 1) THEN
8269         l_status_code := 'STRUCTURE_WORKING';
8270         l_baseline_flag := 'N';
8271         l_latest_flag := 'N';
8272       ELSIF (l_copy = 2) THEN
8273         l_status_code := 'STRUCTURE_PUBLISHED';
8274         l_baseline_flag := 'Y';
8275         l_latest_flag := 'Y';
8276       ELSIF (l_copy = 3) THEN
8277         l_status_code := l_structure_ver_attr_rec.status_code;
8278         l_baseline_flag := l_structure_ver_attr_rec.current_flag;
8279         l_latest_flag := l_structure_ver_attr_rec.LATEST_EFF_PUBLISHED_FLAG;
8280       ELSIF (l_copy = 4) THEN
8281         l_status_code := 'STRUCTURE_PUBLISHED';
8282         l_baseline_flag := 'N';
8283         l_latest_flag := 'Y';
8284       END IF;
8285 
8286       --moved here for baseline purpose
8287       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
8288       ( p_validate_only               => FND_API.G_FALSE
8289        ,p_structure_version_id        => l_new_structure_version_id
8290 --       ,p_structure_version_name      => l_name
8291 --hsiu
8292 --fix bug 2640307
8293 --structure version name needs to be unique; copy from source.
8294        ,p_structure_version_name      => l_structure_ver_attr_rec.name
8295 --end bug 2640307 fix
8296        ,p_structure_version_desc      => l_structure_ver_attr_rec.description
8297        ,p_effective_date              => l_structure_ver_attr_rec.effective_date
8298        ,p_latest_eff_published_flag   => l_latest_flag
8299        ,p_locked_status_code          => 'UNLOCKED'
8300        ,p_struct_version_status_code  => l_status_code
8301        ,p_baseline_current_flag       => l_baseline_flag
8302        ,p_baseline_original_flag      => 'N'
8303        ,x_pev_structure_id            => l_pev_structure_id
8304        ,x_return_status               => l_return_status
8305        ,x_msg_count                   => l_msg_count
8306        ,x_msg_data                    => l_msg_data );
8307 
8308       --Check if there is any error.
8309       l_msg_count := FND_MSG_PUB.count_msg;
8310       IF l_msg_count > 0 THEN
8311         x_msg_count := l_msg_count;
8312         IF x_msg_count = 1 THEN
8313           x_msg_data := l_msg_data;
8314         END IF;
8315         RAISE FND_API.G_EXC_ERROR;
8316       END IF;
8317 
8318       --If status is published and latest version, or template
8319       --update project level schedule dates
8320       IF ((l_status_code = 'STRUCTURE_PUBLISHED') and (l_latest_flag = 'Y')) OR (l_dest_template_flag = 'Y') THEN
8321         OPEN get_proj_rec_ver_number(p_dest_project_id);
8322         FETCH get_proj_rec_ver_number into l_proj_record_ver_number;
8323         CLOSE get_proj_rec_ver_number;
8324 
8325         PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES(
8326           p_validate_only       => FND_API.G_FALSE
8327          ,p_project_id          => p_dest_project_id
8328          ,p_date_type           => 'SCHEDULED'
8329          ,p_start_date          => l_struc_scheduled_start_date
8330          ,p_finish_date         => l_struc_scheduled_finish_date
8331          ,p_record_version_number => l_proj_record_ver_number
8332          ,x_return_status        => l_return_status
8333          ,x_msg_count           => l_msg_count
8334          ,x_msg_data            => l_msg_data
8335         );
8336 
8337         IF l_msg_count > 0 THEN
8338           x_msg_count := l_msg_count;
8339           IF x_msg_count = 1 THEN
8340             x_msg_data := l_msg_data;
8341           END IF;
8342           RAISE FND_API.G_EXC_ERROR;
8343         END IF;
8344       END IF;
8345 
8346     END LOOP;
8347     CLOSE l_get_structure_versions_csr;
8348 
8349     --Commented by hsiu
8350     --END IF;
8351     --END IF for check if project is template and if type = WORKPLAN
8352   END LOOP;
8353   CLOSE l_get_structure_csr;
8354 --  HSiu: commented old code
8355 --  end if;
8356 
8357 
8358   x_return_status := FND_API.G_RET_STS_SUCCESS;
8359 
8360   IF (p_commit = FND_API.G_TRUE) THEN
8361     COMMIT;
8362   END IF;
8363 
8364   IF (p_debug_mode = 'Y') THEN
8365     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE END');
8366   END IF;
8367 
8368 EXCEPTION
8369   when FND_API.G_EXC_ERROR then
8370     if p_commit = FND_API.G_TRUE then
8371       rollback to copy_structure_pvt;
8372     end if;
8373     x_return_status := FND_API.G_RET_STS_ERROR;
8374   when FND_API.G_EXC_UNEXPECTED_ERROR then
8375     if p_commit = FND_API.G_TRUE then
8376       rollback to copy_structure_pvt;
8377     end if;
8378     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8379     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8380                             p_procedure_name => 'COPY_STRUCTURE',
8381                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8382   when OTHERS then
8383     if p_commit = FND_API.G_TRUE then
8384       rollback to copy_structure_pvt;
8385     end if;
8386     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8387     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8388                             p_procedure_name => 'COPY_STRUCTURE',
8389                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8390     raise;
8391 END COPY_STRUCTURE;
8392 
8393 
8394 PROCEDURE BASELINE_STRUCTURE_VERSION
8395 ( p_commit                        IN VARCHAR2    := FND_API.G_FALSE
8396  ,p_validate_only                 IN VARCHAR2    := FND_API.G_TRUE
8397  ,p_validation_level              IN VARCHAR2    := 100
8398  ,p_calling_module                IN VARCHAR2    := 'SELF_SERVICE'
8399  ,p_debug_mode                    IN VARCHAR2    := 'N'
8400  ,p_max_msg_count                 IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8401  ,p_structure_version_id          IN NUMBER
8402  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8403  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8404  ,x_msg_data                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8405 )
8406 IS
8407     CURSOR c1( c_project_id NUMBER ) IS
8408       SELECT B.PROJ_ELEMENT_ID, B.SCHEDULED_START_DATE,
8409              B.SCHEDULED_FINISH_DATE, A.ELEMENT_VERSION_ID   , duration
8410       FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B
8411       WHERE A.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
8412         AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8413         AND A.PROJECT_ID = B.PROJECT_ID
8414         AND A.project_id = c_project_id;
8415 
8416     c1_rec c1%ROWTYPE;
8417     l_project_id  NUMBER;
8418 
8419 -- anlee
8420 -- Dates changes
8421     CURSOR c2 (c_project_id NUMBER)
8422     IS
8423     SELECT record_version_number
8424     FROM pa_projects_all
8425     WHERE project_id = c_project_id;
8426 
8427     l_proj_record_ver_number NUMBER;
8428     l_return_status VARCHAR2(1);
8429     l_msg_count NUMBER;
8430     l_msg_data VARCHAR2(2000);
8431 -- End of changes
8432 
8433    l_calendar_id   NUMBER;
8434    l_duration      NUMBER;
8435    l_duration_days NUMBER;
8436    cursor get_cal_id IS
8437      select a.calendar_id
8438        from pa_projects_all a, pa_proj_element_versions b
8439       where a.project_id = b.project_id
8440         and b.element_version_id = p_structure_version_id;
8441 BEGIN
8442     IF (p_debug_mode = 'Y') THEN
8443       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION BEGIN');
8444     END IF;
8445 
8446     IF (p_commit = FND_API.G_TRUE) THEN
8447       savepoint baseline_structure_pvt;
8448     END IF;
8449 
8450     SELECT PROJECT_ID
8451     INTO l_project_id
8452     FROM PA_PROJ_ELEMENT_VERSIONS
8453     WHERE ELEMENT_VERSION_ID = p_structure_version_id;
8454 
8455     UPDATE PA_PROJ_ELEMENTS
8456     SET BASELINE_START_DATE= NULL ,
8457         BASELINE_FINISH_DATE= NULL ,
8458         RECORD_VERSION_NUMBER=NVL(RECORD_VERSION_NUMBER,0) + 1
8459     WHERE PROJECT_ID = l_project_id;
8460 
8461     OPEN c1( l_project_id );
8462     LOOP
8463       FETCH c1 into c1_rec;
8464       EXIT WHEN c1%NOTFOUND;
8465 
8466 /*      -- Calc duration
8467       OPEN get_cal_id;
8468       FETCH get_cal_id INTO l_calendar_id;
8469       CLOSE get_cal_id;
8470 
8471       PA_DURATION_UTILS.GET_DURATION(
8472        p_calendar_id      => l_calendar_id
8473       ,p_start_date       => c1_rec.scheduled_start_date
8474       ,p_end_date         => c1_rec.scheduled_finish_date
8475       ,x_duration_days    => l_duration_days
8476       ,x_duration_hours   => l_duration
8477       ,x_return_status    => l_return_status
8478       ,x_msg_count        => l_msg_count
8479       ,x_msg_data         => l_msg_data );
8480 
8481       --Check if there is any error.
8482       l_msg_count := FND_MSG_PUB.count_msg;
8483       IF l_msg_count > 0 THEN
8484         x_msg_count := l_msg_count;
8485         IF x_msg_count = 1 THEN
8486           x_msg_data := l_msg_data;
8487         END IF;
8488         RAISE FND_API.G_EXC_ERROR;
8489       END IF;
8490 */
8491 
8492       UPDATE PA_PROJ_ELEMENTS
8493       SET BASELINE_START_DATE=c1_rec.scheduled_start_date,
8494           BASELINE_FINISH_DATE=c1_rec.scheduled_finish_date, -- pa
8495           BASELINE_DURATION=c1_rec.duration,
8496           RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,0) + 1
8497       WHERE PROJ_ELEMENT_ID = c1_rec.proj_element_id;
8498 
8499       -- anlee
8500       -- Dates changes
8501       if c1_rec.element_version_id = p_structure_version_id then
8502         OPEN c2(l_project_id);
8503         FETCH c2 INTO l_proj_record_ver_number;
8504         CLOSE c2;
8505 
8506         PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
8507          p_validate_only          => FND_API.G_FALSE
8508         ,p_project_id             => l_project_id
8509         ,p_date_type              => 'BASELINE'
8510         ,p_start_date             => c1_rec.scheduled_start_date
8511         ,p_finish_date            => c1_rec.scheduled_finish_date
8512         ,p_record_version_number  => l_proj_record_ver_number
8513         ,x_return_status          => l_return_status
8514         ,x_msg_count              => l_msg_count
8515         ,x_msg_data               => l_msg_data );
8516 
8517         --Check if there is any error.
8518         l_msg_count := FND_MSG_PUB.count_msg;
8519         IF l_msg_count > 0 THEN
8520           x_msg_count := l_msg_count;
8521           IF x_msg_count = 1 THEN
8522             x_msg_data := l_msg_data;
8523           END IF;
8524           RAISE FND_API.G_EXC_ERROR;
8525         END IF;
8526       END IF;
8527 -- End of changes
8528 
8529     END LOOP;
8530     CLOSE c1;
8531 
8532     IF (p_debug_mode = 'Y') THEN
8533       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION end');
8534     END IF;
8535 
8536     x_return_status := FND_API.G_RET_STS_SUCCESS;
8537 
8538 EXCEPTION
8539   when FND_API.G_EXC_ERROR then
8540     if p_commit = FND_API.G_TRUE then
8541       rollback to baseline_structure_pvt;
8542     end if;
8543     x_return_status := FND_API.G_RET_STS_ERROR;
8544   when FND_API.G_EXC_UNEXPECTED_ERROR then
8545     if p_commit = FND_API.G_TRUE then
8546       rollback to baseline_structure_pvt;
8547     end if;
8548     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8549     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8550                             p_procedure_name => 'BASELINE_STRUCTURE_VERSION',
8551                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8552   when OTHERS then
8553     if p_commit = FND_API.G_TRUE then
8554       rollback to baseline_structure_pvt;
8555     end if;
8556     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8557     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8558                             p_procedure_name => 'BASELINE_STRUCTURE_VERSION',
8559                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8560     raise;
8561 END BASELINE_STRUCTURE_VERSION;
8562 
8563 
8564 PROCEDURE SPLIT_WORKPLAN
8565 ( p_commit                        IN VARCHAR2    := FND_API.G_FALSE
8566  ,p_validate_only                 IN VARCHAR2    := FND_API.G_TRUE
8567  ,p_validation_level              IN VARCHAR2    := 100
8568  ,p_calling_module                IN VARCHAR2    := 'SELF_SERVICE'
8569  ,p_debug_mode                    IN VARCHAR2    := 'N'
8570  ,p_max_msg_count                 IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8571  ,p_project_id                    IN NUMBER
8572  ,p_structure_name                IN VARCHAR2
8573  ,p_structure_number              IN VARCHAR2
8574  ,p_description                   IN VARCHAR2
8575  ,x_structure_id                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8576  ,x_structure_version_id         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8577  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8578  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8579  ,x_msg_data                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8580 )
8581 IS
8582   cursor c1 IS
8583     select a.proj_element_id
8584       from pa_proj_elements a,
8585            pa_proj_structure_types b,
8586            pa_structure_types c
8587      where a.project_id = p_project_id
8588        and a.object_type = 'PA_STRUCTURES'
8589        and a.proj_element_id = b.proj_element_id
8590        and b.structure_type_id = c.structure_type_id
8591        and c.structure_type_class_code IN ('FINANCIAL');
8592 
8593   cursor sel_struct_type(c_structure_id NUMBER) IS
8594     select a.rowid
8595       from pa_proj_structure_types a, pa_structure_types b
8596      where a.proj_element_id = c_structure_id
8597        and a.structure_type_id = b.structure_type_id
8598        and b.structure_type_class_code = 'WORKPLAN';
8599 
8600 
8601   l_structure_id NUMBER;
8602   l_rowid  VARCHAR2(255);
8603 
8604   l_ret_stat VARCHAR2(1);
8605   l_msg_count            NUMBER;
8606   l_msg_data             VARCHAR2(250);
8607 
8608   l_struc_id           NUMBER;
8609   l_struc_ver_attr_id  NUMBER;
8610   l_struc_ver_id       NUMBER;
8611   l_pev_schedule_id    NUMBER;
8612 
8613 BEGIN
8614     IF (p_debug_mode = 'Y') THEN
8615       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN BEGIN');
8616     END IF;
8617 
8618     IF (p_commit = FND_API.G_TRUE) THEN
8619       savepoint split_workplan;
8620     END IF;
8621 
8622     IF (p_debug_mode = 'Y') THEN
8623       pa_debug.debug('Find existing structure');
8624     END IF;
8625 
8626     --get current costing/billing structure id
8627     OPEN c1;
8628     FETCH c1 INTO l_structure_id;
8629     CLOSE c1;
8630 
8631     --check if there is a published workplan version
8632     IF PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_project_id, l_structure_id) = 'Y' THEN
8633       --cannot split if publish version exists.
8634       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_CANNOT_SPLIT_STRUCT');
8635       x_msg_data := 'PA_PS_CANNOT_SPLIT_STRUCT';
8636       RAISE FND_API.G_EXC_ERROR;
8637     END IF;
8638 
8639     --delete workplan structure type
8640     OPEN sel_struct_type(l_structure_id);
8641     FETCH sel_struct_type INTO l_rowid;
8642     IF sel_struct_type%FOUND THEN
8643       IF (p_debug_mode = 'Y') THEN
8644         pa_debug.debug('Deleting type structure type');
8645       END IF;
8646       PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
8647     END IF;
8648     CLOSE sel_struct_type;
8649 
8650     --create_structure
8651     PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
8652                         p_project_id                        => p_project_id
8653                        ,p_structure_number                  => p_structure_number
8654                        ,p_structure_name                    => p_structure_name
8655                        ,p_structure_description             => p_description
8656                        ,p_calling_flag                      => 'WORKPLAN'
8657                        ,x_structure_id                      => l_struc_id
8658                        ,x_return_status                     => l_ret_stat
8659                        ,x_msg_count                         => l_msg_count
8660                        ,x_msg_data                          => l_msg_data
8661     );
8662 
8663     x_structure_id := l_struc_id;
8664 
8665     --Check if there is any error.
8666     l_msg_count := FND_MSG_PUB.count_msg;
8667     IF l_msg_count > 0 THEN
8668       x_msg_count := l_msg_count;
8669       IF x_msg_count = 1 THEN
8670         x_msg_data := l_msg_data;
8671       END IF;
8672       RAISE FND_API.G_EXC_ERROR;
8673     END IF;
8674 
8675     --delete schedule info for structure versions and tasks
8676     delete from pa_proj_elem_ver_schedule
8677     where project_id = p_project_id;
8678 
8679     --create_structure_version
8680     PA_PROJECT_STRUCTURE_PUB1.create_structure_Version(
8681            p_structure_id                    => l_struc_id,
8682            x_structure_version_id            => l_struc_ver_id,
8683            x_return_status                   => l_ret_stat,
8684            x_msg_count                       => l_msg_count,
8685            x_msg_data                        => l_msg_data
8686     );
8687 
8688     x_structure_version_id := l_struc_ver_id;
8689 
8690     --Check if there is any error.
8691     l_msg_count := FND_MSG_PUB.count_msg;
8692     IF l_msg_count > 0 THEN
8693       x_msg_count := l_msg_count;
8694       IF x_msg_count = 1 THEN
8695         x_msg_data := l_msg_data;
8696       END IF;
8697       RAISE FND_API.G_EXC_ERROR;
8698     END IF;
8699 
8700     --create_structure_version_attr
8701     PA_PROJECT_STRUCTURE_PUB1.create_structure_version_attr(
8702       p_structure_version_id                 => l_struc_ver_id,
8703       p_structure_version_name               => p_structure_name,
8704       p_structure_version_desc               => p_description,
8705       x_return_status                        => l_ret_stat,
8706       x_msg_count                            => l_msg_count,
8707       x_msg_data                             => l_msg_data,
8708       x_pev_structure_id                     => l_struc_ver_attr_id
8709     );
8710 
8711     --Check if there is any error.
8712     l_msg_count := FND_MSG_PUB.count_msg;
8713     IF l_msg_count > 0 THEN
8714       x_msg_count := l_msg_count;
8715       IF x_msg_count = 1 THEN
8716         x_msg_data := l_msg_data;
8717       END IF;
8718       RAISE FND_API.G_EXC_ERROR;
8719     END IF;
8720 
8721     --create_schedule_version
8722     PA_TASK_PUB1.Create_Schedule_Version(
8723                    p_element_version_id      => l_struc_ver_id
8724                   ,p_scheduled_start_date    => SYSDATE
8725                   ,p_scheduled_end_date      => SYSDATE
8726                   ,x_pev_schedule_id         => l_pev_schedule_id
8727                   ,x_return_status           => l_ret_stat
8728                   ,x_msg_count               => l_msg_count
8729                   ,x_msg_data                => l_msg_data
8730     );
8731 
8732     --Check if there is any error.
8733     l_msg_count := FND_MSG_PUB.count_msg;
8734     IF l_msg_count > 0 THEN
8735       x_msg_count := l_msg_count;
8736       IF x_msg_count = 1 THEN
8737         x_msg_data := l_msg_data;
8738       END IF;
8739       RAISE FND_API.G_EXC_ERROR;
8740     END IF;
8741 
8742     x_return_status := FND_API.G_RET_STS_SUCCESS;
8743 
8744     IF (p_debug_mode = 'Y') THEN
8745       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN end');
8746     END IF;
8747 
8748 EXCEPTION
8749   when FND_API.G_EXC_ERROR then
8750     if p_commit = FND_API.G_TRUE then
8751       rollback to split_workplan;
8752     end if;
8753     x_return_status := FND_API.G_RET_STS_ERROR;
8754   when FND_API.G_EXC_UNEXPECTED_ERROR then
8755     if p_commit = FND_API.G_TRUE then
8756       rollback to split_workplan;
8757     end if;
8758     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8759     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8760                             p_procedure_name => 'SPLIT_WORKPLAN',
8761                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8762   when OTHERS then
8763     if p_commit = FND_API.G_TRUE then
8764       rollback to split_workplan;
8765     end if;
8766     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8767     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8768                             p_procedure_name => 'SPLIT_WORKPLAN',
8769                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8770     raise;
8771 END SPLIT_WORKPLAN;
8772 
8773 
8774 procedure SUBMIT_WORKPLAN
8775 (
8776     p_api_version                       IN  NUMBER      := 1.0
8777    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
8778    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
8779    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
8780    ,p_validation_level                  IN  VARCHAR2    := 100
8781    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
8782    ,p_debug_mode                        IN  VARCHAR2    := 'N'
8783    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8784    ,p_project_id                        IN  NUMBER
8785    ,p_structure_id                      IN  NUMBER
8786    ,p_structure_version_id              IN  NUMBER
8787    ,p_responsibility_id                 IN  NUMBER
8788    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8789    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
8790    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8791 )
8792 IS
8793   l_structure_version_name   VARCHAR2(240);
8794   l_structure_version_desc   VARCHAR2(250);
8795   l_auto_pub                 VARCHAR2(1);
8796   l_published_struc_ver_id   NUMBER;
8797   l_dummy                    VARCHAR2(1);
8798   l_item_key                 VARCHAR2(240);
8799   l_wf_enable                VARCHAR2(1);
8800   l_wf_item_type             VARCHAR2(30);
8801   l_wf_process               VARCHAR2(30);
8802   l_wf_success_code          VARCHAR2(30);
8803   l_wf_failure_code          VARCHAR2(30);
8804   l_err_code                 NUMBER;
8805   l_err_stage                VARCHAR2(30);
8806   l_err_stack                VARCHAR2(240);
8807   l_return_status            VARCHAR2(1);
8808   l_msg_count                NUMBER;
8809   l_msg_data                 VARCHAR2(250);
8810   l_error_msg_code           VARCHAR2(250);
8811 
8812   CURSOR checkAutoPub IS
8813     select '1' from pa_proj_workplan_attr
8814       where project_id = p_project_id
8815         and wp_auto_publish_flag = 'Y';
8816 
8817   CURSOR get_wp_info IS
8818     select name, description
8819       from pa_proj_elem_ver_structure
8820      where project_Id = p_project_id
8821        and element_version_id = p_structure_version_id;
8822 
8823  /* Bug 2683138 */
8824  /* CURSOR get_start_wf IS
8825     select 'Y' from dual
8826        where exists (
8827        select 1 from pa_product_installation_v
8828         where product_short_code = 'PJT' AND INSTALLED_FLAG = 'Y'); */
8829 
8830   CURSOR get_start_wf IS
8831     select 'Y' from dual;
8832 
8833   CURSOR get_wf_info(c_status_code VARCHAR2) IS
8834     select enable_wf_flag, workflow_item_type,
8835            workflow_process, wf_success_status_code,
8836            wf_failure_status_code
8837       from pa_project_statuses
8838      where project_status_code = c_status_code;
8839 --status_code can be STRUCTURE_SUBMITTED, STRUCTURE_REJECTED,
8840 --                   STRUCTURE_APPROVED, or STRUCTURE_PUBLISHED
8841 
8842   --check if delete unpublished ok
8843     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
8844       select b.element_version_id
8845         from pa_proj_element_versions a,
8846              pa_proj_element_versions b
8847        where a.element_version_id = c_keep_struc_ver_id
8848          and a.project_id = b.project_id
8849          and a.proj_element_id = b.proj_element_id
8850          and b.element_version_id <> c_keep_struc_ver_id
8851          and b.object_type = 'PA_STRUCTURES';
8852     l_del_struc_ver_id  NUMBER;
8853 
8854 BEGIN
8855   PA_DEBUG.INIT_ERR_STACK('PA_PROJECT_STRUCTURE_PVT1.SUBMIT_WORKPLAN');
8856 
8857   x_return_status := FND_API.G_RET_STS_SUCCESS;
8858 
8859   IF (p_commit = FND_API.G_TRUE) THEN
8860     savepoint SUBMIT_WP_PRIVATE;
8861   END IF;
8862 
8863   OPEN get_wp_info;
8864   FETCH get_wp_info into l_structure_version_name, l_structure_version_desc;
8865   CLOSE get_wp_info;
8866 
8867   --Check if ok to publish workplan version
8868   OPEN checkAutoPub;
8869   FETCH checkAutoPub into l_dummy;
8870   IF checkAutoPub%NOTFOUND THEN
8871     l_auto_pub := 'N';
8872   ELSE
8873     l_auto_pub := 'Y';
8874   END IF;
8875   CLOSE checkAutoPub;
8876 
8877 
8878   --hsiu: bug 2684465
8879   --Check if this structure missing tasks with transactions
8880 --  IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
8881 --    PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
8882 --    x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
8883 --    RAISE FND_API.G_EXC_ERROR;
8884 --  END IF;
8885   PA_PROJECT_STRUCTURE_UTILS.CHECK_MISS_TRANSACTION_TASKS(p_structure_version_id,
8886                                                           l_return_status,
8887                                                           l_msg_count,
8888                                                           l_msg_data);
8889   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8890     RAISE FND_API.G_EXC_ERROR;
8891   END IF;
8892 
8893 
8894 
8895   --Check if task statuses are consistent
8896   PA_PROJECT_STRUCTURE_UTILS.check_tasks_statuses_valid(
8897       p_structure_version_id
8898      ,l_return_status
8899      ,l_msg_count
8900      ,l_msg_data
8901   );
8902   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8903     RAISE FND_API.G_EXC_ERROR;
8904   END IF;
8905 
8906 
8907   --Check if any new summary task has transactions
8908   PA_PROJECT_STRUCTURE_UTILS.Check_txn_on_summary_tasks(
8909     p_structure_version_id
8910    ,l_return_status
8911    ,l_msg_count
8912    ,l_msg_data
8913   );
8914   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8915     RAISE FND_API.G_EXC_ERROR;
8916   END IF;
8917 
8918 
8919   --end bug 2684465
8920 
8921 
8922 
8923   IF (l_auto_pub = 'Y') THEN
8924 
8925 /*
8926     --Check if this structure can be published (ie, if linked structures are published)
8927     IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Publish_Struc_Ver_Ok(p_structure_version_id)) THEN
8928       PA_UTILS.ADD_MESSAGE('PA','PA_PS_LINK_STRUC_NOT_PUB');
8929       x_msg_data := 'PA_PS_LINK_STRUC_NOT_PUB';
8930       RAISE FND_API.G_EXC_ERROR;
8931     END IF;
8932 */
8933 
8934 /*
8935     PA_PROGRESS_PUB.CREATE_PROGRESS_FOR_WBS(
8936         p_validate_only        => FND_API.G_TRUE
8937        ,p_commit               => FND_API.G_FALSE
8938        ,p_project_id           => p_project_id
8939        ,p_structure_version_id => p_structure_version_id
8940        ,x_return_status        => l_return_status
8941        ,x_msg_count            => l_msg_count
8942        ,x_msg_data             => l_msg_data
8943     );
8944 */
8945 
8946     --bug 3840509
8947     IF 'Y' = nvl(PA_PROJECT_STRUCTURE_UTILS.Get_Sch_Dirty_fl(p_project_id,
8948                                                              p_structure_version_id), 'N') THEN
8949       --need to reschedule
8950       PA_UTILS.ADD_MESSAGE('PA','PA_PS_NEED_THIRD_PT_SCH');
8951       x_msg_data := 'PA_PS_NEED_THIRD_PT_SCH';
8952       RAISE FND_API.G_EXC_ERROR;
8953     END IF;
8954     --end bug 3840509
8955 
8956       --Check if there is any error.
8957     l_msg_count := FND_MSG_PUB.count_msg;
8958     IF l_msg_count > 0 THEN
8959       x_msg_count := l_msg_count;
8960       IF x_msg_count = 1 THEN
8961         x_msg_data := l_msg_data;
8962       END IF;
8963       RAISE FND_API.G_EXC_ERROR;
8964     END IF;
8965 
8966 /*
8967     savepoint check_workplan;
8968 
8969     PA_PROJECT_STRUCTURE_PVT1.Publish_Structure(
8970       p_responsibility_id                => p_responsibility_id
8971      ,p_structure_version_id             => p_structure_version_id
8972      ,p_publish_structure_ver_name       => l_structure_version_name
8973      ,p_structure_ver_desc               => l_structure_version_desc
8974      ,p_effective_date                   => TRUNC(SYSDATE)
8975      ,p_current_baseline_flag            => 'N'
8976      ,x_published_struct_ver_id          => l_published_struc_ver_id
8977      ,x_return_status                    => x_return_status
8978      ,x_msg_count                        => x_msg_count
8979      ,x_msg_data                         => x_msg_data
8980     );
8981 
8982     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8983       RAISE FND_API.G_EXC_ERROR;
8984     END IF;
8985     rollback to check_workplan;
8986 */
8987   END IF;
8988 
8989 -- For bug 3045358 : Functionality presently is that we do not require to check for the locking status of other working versions
8990 -- while submitting a particular version for approval.
8991 -- Hence commenting the below code
8992   /*
8993   OPEN sel_other_structure_ver(p_structure_version_id);
8994   LOOP
8995     FETCH sel_other_structure_ver into l_del_struc_ver_id;
8996     EXIT WHEN sel_other_structure_ver%NOTFOUND;
8997     PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
8998       p_project_id => p_project_id
8999      ,p_structure_version_id =>l_del_struc_ver_id
9000      ,x_return_status => l_return_status
9001      ,x_error_message_code => l_msg_data
9002     );
9003 
9004     IF (l_return_status <> 'S') THEN
9005       PA_UTILS.ADD_MESSAGE('PA',l_msg_data);
9006       x_msg_data := l_msg_data;
9007       CLOSE sel_other_structure_ver;
9008       RAISE FND_API.G_EXC_ERROR;
9009     END IF;
9010   END LOOP;
9011   CLOSE sel_other_structure_ver;
9012   */
9013   --Update to submit status
9014   UPDATE PA_PROJ_ELEM_VER_STRUCTURE
9015   set status_code = 'STRUCTURE_SUBMITTED',
9016       lock_status_code = 'UNLOCKED',
9017       locked_by_person_id = NULL,
9018       locked_date = NULL
9019   where project_id = p_project_id
9020   and element_version_id = p_structure_version_id;
9021 
9022   --Submit for approval
9023   IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9024 
9025     OPEN get_start_wf;
9026     FETCH get_start_wf into l_dummy;
9027     IF get_start_wf%FOUND THEN
9028 
9029       OPEN get_wf_info('STRUCTURE_SUBMITTED');
9030       FETCH get_wf_info into l_wf_enable, l_wf_item_type, l_wf_process,
9031                              l_wf_success_code, l_wf_failure_code;
9032       IF (l_wf_enable = 'Y') THEN
9033         PA_WORKPLAN_WORKFLOW.Start_workflow
9034         (
9035           l_wf_item_type
9036          ,l_wf_process
9037          ,p_structure_version_id
9038          ,p_responsibility_id
9039          ,FND_GLOBAL.USER_ID
9040          ,l_item_key
9041          ,x_msg_count
9042          ,x_msg_data
9043          ,x_return_status
9044         );
9045 
9046         IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9047           --update pa_wf_process_table
9048           PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES
9049           (
9050              p_wf_type_code =>      'WORKPLAN'
9051             ,p_item_type    =>      l_wf_item_type
9052             ,p_item_key     =>      l_item_key
9053             ,p_entity_key1  =>      p_project_id
9054             ,p_entity_key2  =>      p_structure_version_id
9055             ,p_description  =>      NULL
9056             ,p_err_code     =>      l_err_code
9057             ,p_err_stage    =>      l_err_stage
9058             ,p_err_stack    =>      l_err_stack
9059           );
9060           IF (l_err_code <> 0) THEN
9061             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9062                                  p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9063             x_return_status := FND_API.G_RET_STS_ERROR;
9064           END IF;
9065         ELSE
9066           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9067                                p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9068           x_return_status := FND_API.G_RET_STS_ERROR;
9069         END IF;
9070       END IF;
9071       CLOSE get_wf_info;
9072     END IF;
9073     CLOSE get_start_wf;
9074 
9075   END IF;
9076 
9077 EXCEPTION
9078     WHEN FND_API.G_EXC_ERROR THEN
9079       IF (p_commit = FND_API.G_TRUE) THEN
9080         ROLLBACK to SUBMIT_WP_PRIVATE;
9081       END IF;
9082       x_msg_count := FND_MSG_PUB.count_msg;
9083       x_return_status := FND_API.G_RET_STS_ERROR;
9084     WHEN OTHERS THEN
9085       IF (p_commit = FND_API.G_TRUE) THEN
9086         ROLLBACK to SUBMIT_WP_PRIVATE;
9087       END IF;
9088       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9089       x_msg_count := FND_MSG_PUB.count_msg;
9090       --put message
9091       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
9092                               p_procedure_name => 'Submit_Workplan',
9093                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9094       RAISE;
9095 END SUBMIT_WORKPLAN;
9096 
9097 
9098 procedure CHANGE_WORKPLAN_STATUS
9099 (
9100    p_api_version                 IN     NUMBER :=  1.0,
9101    p_init_msg_list               IN     VARCHAR2 := fnd_api.g_true,
9102    p_commit                      IN     VARCHAR2 := FND_API.g_false,
9103    p_validate_only               IN     VARCHAR2 := FND_API.g_false,
9104    p_max_msg_count               IN     NUMBER := FND_API.g_miss_num,
9105    p_project_id                  IN     NUMBER := NULL,
9106    p_structure_version_id        IN     NUMBER := NULL,
9107    p_status_code                 IN     VARCHAR2 := NULL,
9108    p_record_version_number       IN     NUMBER := NULL,
9109    x_return_status               OUT    NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
9110    x_msg_count                   OUT    NOCOPY NUMBER, --File.Sql.39 bug 4440895
9111    x_msg_data                    OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9112 )
9113 IS
9114       l_wf_enable VARCHAR2(1);
9115       l_wf_item_type VARCHAR2(30);
9116       l_wf_process VARCHAR2(30);
9117       l_success_code VARCHAR2(30);
9118       l_failure_code VARCHAR2(30);
9119       l_err_code NUMBER;
9120       l_err_stage VARCHAR2(30);
9121       l_err_stack VARCHAR2(240);
9122       l_dummy     VARCHAR2(1);
9123       l_item_key  NUMBER;
9124       l_pev_struc_id  NUMBER;
9125       l_msg_count    NUMBER;
9126       l_msg_data     VARCHAR2(250);
9127 
9128   /* Bug 2683138 */
9129   /* CURSOR get_start_wf IS
9130       select 'Y' from dual
9131        where exists (
9132          select 1 from pa_product_installation_v
9133           where product_short_code = 'PJT' AND INSTALLED_FLAG = 'Y');   */
9134 
9135     CURSOR get_start_wf IS
9136       select 'Y' from dual;
9137 
9138   CURSOR get_wf_info(c_status_code VARCHAR2) IS
9139     select enable_wf_flag, workflow_item_type,
9140            workflow_process, wf_success_status_code,
9141            wf_failure_status_code
9142       from pa_project_statuses
9143      where project_status_code = c_status_code;
9144 
9145   CURSOR get_status_code(c_status_code VARCHAR2) IS
9146     select '1' from pa_project_statuses
9147      where project_status_code = c_status_code
9148        and status_type = 'STRUCTURE';
9149 
9150 BEGIN
9151     PA_DEBUG.init_err_stack('PA_PROJECT_STRUCTURE_PVT1.CHANGE_WORKPLAN_STATUS');
9152 
9153     -- Initialize the return status to success
9154     x_return_status := FND_API.G_RET_STS_SUCCESS;
9155 
9156     --
9157     BEGIN
9158       select pev_structure_id into l_pev_struc_id
9159         from pa_proj_elem_ver_structure
9160        where project_id = p_project_id
9161          and element_version_id = p_structure_version_id
9162          and record_version_number = p_record_version_number
9163          for update of record_version_number NOWAIT;
9164     EXCEPTION
9165          when TIMEOUT_ON_RESOURCE then
9166             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9167                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
9168             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
9169          when NO_DATA_FOUND then
9170             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9171                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
9172             l_msg_data := 'PA_XC_RECORD_CHANGED';
9173          when OTHERS then
9174             if SQLCODE = -54 then
9175               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9176                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
9177               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
9178             else
9179               raise;
9180             end if;
9181     END;
9182 
9183     l_msg_count := FND_MSG_PUB.count_msg;
9184     if l_msg_count > 0 then
9185       x_msg_count := l_msg_count;
9186       if x_msg_count = 1 then
9187         x_msg_data := l_msg_data;
9188       end if;
9189       raise FND_API.G_EXC_ERROR;
9190     end if;
9191 
9192     --check if status if valid
9193     OPEN get_status_code(p_status_code);
9194     FETCH get_status_code INTO l_dummy ;
9195     IF (get_status_code%NOTFOUND) THEN
9196       CLOSE get_status_code;
9197       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9198                            p_msg_name       => 'PA_PS_STRUC_STAT_INVAL');
9199               x_msg_data := 'PA_PS_STRUC_STAT_INVAL';
9200       RAISE FND_API.G_EXC_ERROR;
9201     END IF;
9202     CLOSE get_status_code;
9203     --end validation
9204 
9205     update pa_proj_elem_ver_structure
9206     set status_code = p_status_code,
9207         record_version_number = record_version_number + 1
9208     where pev_structure_id = l_pev_struc_id;
9209 
9210     OPEN get_start_wf;
9211     FETCH get_start_wf INTO  l_dummy;
9212     IF (get_start_wf%found) THEN
9213       OPEN get_wf_info(p_status_code);
9214       FETCH get_wf_info INTO l_wf_enable, l_wf_item_type, l_wf_process,
9215                              l_success_code,l_failure_code;
9216       IF (get_wf_info%found) then
9217         IF (l_wf_enable = 'Y') THEN
9218           PA_WORKPLAN_WORKFLOW.Start_workflow
9219           (
9220             l_wf_item_type
9221            ,l_wf_process
9222            ,p_structure_version_id
9223            ,FND_GLOBAL.RESP_ID -- NULL Added for bug 5372586
9224            ,FND_GLOBAL.USER_ID -- NULL Added for bug 5372586
9225            ,l_item_key
9226            ,x_msg_count
9227            ,x_msg_data
9228            ,x_return_status
9229           );
9230 
9231           IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9232             --update pa_wf_process_table
9233             PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES
9234             (
9235                p_wf_type_code =>      'WORKPLAN'
9236               ,p_item_type    =>      l_wf_item_type
9237               ,p_item_key     =>      l_item_key
9238               ,p_entity_key1  =>      p_project_id
9239               ,p_entity_key2  =>      p_structure_version_id
9240               ,p_description  =>      NULL
9241               ,p_err_code     =>      l_err_code
9242               ,p_err_stage    =>      l_err_stage
9243               ,p_err_stack    =>      l_err_stack
9244             );
9245             IF (l_err_code <> 0) THEN
9246               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9247                                    p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9248               x_return_status := FND_API.G_RET_STS_ERROR;
9249             END IF;
9250           ELSE
9251             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9252                                  p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9253             x_return_status := FND_API.G_RET_STS_ERROR;
9254 
9255           END IF;
9256         END IF;
9257       END IF;
9258       CLOSE get_wf_info;
9259 
9260     END IF;
9261     CLOSE get_start_wf;
9262 
9263 EXCEPTION
9264     WHEN FND_API.G_EXC_ERROR THEN
9265       x_msg_count := FND_MSG_PUB.count_msg;
9266       x_return_status := FND_API.G_RET_STS_ERROR;
9267     WHEN OTHERS THEN
9268       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9269       x_msg_count := FND_MSG_PUB.count_msg;
9270       --put message
9271       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
9272                               p_procedure_name => 'Change_Workplan_Status',
9273                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9274       RAISE;
9275 END CHANGE_WORKPLAN_STATUS;
9276 
9277 
9278   PROCEDURE rework_workplan
9279   (
9280     p_api_version                       IN  NUMBER      := 1.0
9281    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
9282    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
9283    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
9284    ,p_validation_level                  IN  VARCHAR2    := 100
9285    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
9286    ,p_debug_mode                        IN  VARCHAR2    := 'N'
9287    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9288    ,p_project_id                        IN  NUMBER
9289    ,p_structure_version_id              IN  NUMBER
9290    ,p_record_version_number             IN  NUMBER
9291    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9292    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
9293    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9294   )
9295   IS
9296     l_item_key      VARCHAR2(240);
9297     l_approve_req   VARCHAR2(1);
9298     l_item_type     VARCHAR2(30);
9299     l_wf_status     VARCHAR2(30);
9300     l_msg_count     NUMBER;
9301     l_msg_data      VARCHAR2(300);
9302 
9303     CURSOR check_approve_req IS
9304       select nvl(wp_approval_reqd_flag,'N') from pa_proj_workplan_attr
9305        where project_id = p_project_id;
9306 
9307 /* Bug 2680486 -- Performance changes -- Added the join of wf_type_code to avoid full table scan on pa_wf_processes*/
9308 
9309     CURSOR get_item_key IS
9310       select MAX(pwp.item_key), max(pwp.item_type)
9311         from pa_wf_processes pwp, pa_project_statuses pps
9312        where pwp.item_type = pps.workflow_item_type
9313          and pps.status_type = 'STRUCTURE'
9314          and pps.project_status_code = 'STRUCTURE_SUBMITTED'
9315          and entity_key2 = p_structure_version_id
9316      and pwp.wf_type_code = 'WORKPLAN';
9317 
9318     CURSOR get_wf_status IS
9319       select 'Y'
9320         from wf_item_activity_statuses wias, pa_project_statuses pps
9321        where wias.item_type = pps.WORKFLOW_ITEM_TYPE
9322          and wias.item_key = l_item_key
9323          and wias.activity_status = 'ACTIVE'
9324          and pps.status_type = 'STRUCTURE'
9325          and pps.project_status_code = 'STRUCTURE_SUBMITTED';
9326 
9327   BEGIN
9328     PA_DEBUG.init_err_stack('PA_PROJECT_STRUCTURE_PVT1.REWORK_WORKPLAN');
9329     x_return_status := FND_API.G_RET_STS_SUCCESS;
9330 
9331     IF (p_commit = FND_API.G_TRUE) THEN
9332       savepoint rework_workplan_pvt;
9333     END IF;
9334 
9335     change_workplan_status(
9336       p_project_id => p_project_id
9337      ,p_structure_version_id => p_structure_version_id
9338      ,p_status_code => 'STRUCTURE_WORKING'
9339      ,p_record_version_number => p_record_version_number
9340      ,x_return_status => x_return_status
9341      ,x_msg_count => l_msg_count
9342      ,x_msg_data => l_msg_data
9343     );
9344 
9345       --Check if there is any error.
9346     l_msg_count := FND_MSG_PUB.count_msg;
9347     IF l_msg_count > 0 THEN
9348       x_msg_count := l_msg_count;
9349       IF x_msg_count = 1 THEN
9350         x_msg_data := l_msg_data;
9351       END IF;
9352       RAISE FND_API.G_EXC_ERROR;
9353     END IF;
9354 
9355     IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9356       OPEN check_approve_req;
9357       FETCH check_approve_req into l_approve_req;
9358       IF check_approve_req%NOTFOUND THEN
9359         l_approve_req := 'N';
9360       END IF;
9361       CLOSE check_approve_req;
9362 
9363       OPEN get_item_key;
9364       FETCH get_item_key into l_item_key, l_item_type;
9365       IF (get_item_key%FOUND) THEN
9366 
9367         --process exist
9368         OPEN get_wf_status;
9369         FETCH get_wf_status INTO l_wf_status;
9370         IF (get_wf_status%NOTFOUND or l_wf_status <> 'Y') THEN
9371 --          IF (l_approve_req = 'Y') THEN
9372 --            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
9373 --                                ,p_msg_name => 'PA_PR_CANCEL_WORKFLOW_INV');
9374 --            x_return_status := FND_API.G_RET_STS_ERROR;
9375 --            x_msg_count := FND_MSG_PUB.count_msg;
9376 --            if x_msg_count = 1 then
9377 --              x_msg_data := 'PA_PR_CANCEL_WORKFLOW_INV';
9378 --            end if;
9379 --            raise FND_API.G_EXC_ERROR;
9380 --          END IF;
9381             NULL;
9382         ELSE
9383           --cancel process
9384           PA_WORKPLAN_WORKFLOW.cancel_workflow(
9385             l_item_type
9386            ,l_item_key
9387            ,x_msg_count
9388            ,x_msg_data
9389            ,x_return_status
9390           );
9391         END IF;
9392         CLOSE get_wf_status;
9393 
9394       ELSE
9395         IF (l_approve_req = 'Y') THEN
9396           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
9397                               ,p_msg_name => 'PA_PR_CANCEL_WORKFLOW_INV');
9398           x_return_status := FND_API.G_RET_STS_ERROR;
9399           x_msg_count := FND_MSG_PUB.count_msg;
9400           if x_msg_count = 1 then
9401             x_msg_data := 'PA_PR_CANCEL_WORKFLOW_INV';
9402           end if;
9403           raise FND_API.G_EXC_ERROR;
9404         END IF;
9405       END IF;
9406       CLOSE get_item_key;
9407     END IF;
9408 EXCEPTION
9409     WHEN FND_API.G_EXC_ERROR THEN
9410       IF (p_commit = FND_API.G_TRUE) THEN
9411         ROLLBACK to rework_workplan_pvt;
9412       END IF;
9413       x_msg_count := FND_MSG_PUB.count_msg;
9414       x_return_status := FND_API.G_RET_STS_ERROR;
9415     WHEN OTHERS THEN
9416       IF (p_commit = FND_API.G_TRUE) THEN
9417         ROLLBACK to rework_workplan_pvt;
9418       END IF;
9419       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9420       x_msg_count := FND_MSG_PUB.count_msg;
9421       --put message
9422       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
9423                               p_procedure_name => 'rework_Workplan',
9424                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9425       RAISE;
9426   END rework_workplan;
9427 
9428 
9429 -- API name                      : update_structures_setup_attr
9430 -- Type                             : Update API
9431 -- Pre-reqs                       : None
9432 -- Return Value                 : Update_structures_setup_attr
9433 --
9434 -- Parameters
9435 --  p_project_id                IN NUMBER
9436 --  p_workplan_enabled_flag IN VARCHAR2
9437 --  p_financial_enabled_flag IN VARCHAR2
9438 --  p_sharing_enabled_flag IN VARCHAR2
9439 --  x_return_status OUT VARCHAR2
9440 --  x_msg_count OUT NUMBER
9441 --  x_msg_data  OUT VARCHAR2
9442 --
9443 --  History
9444 --
9445 --  26-JUL-02   HSIU             -Created
9446 --  15-JAN-04   HSIU             -rewrite API with sharing code changes
9447 
9448   PROCEDURE update_structures_setup_old
9449   (  p_api_version      IN  NUMBER     := 1.0
9450     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
9451     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
9452     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
9453     ,p_validation_level IN  VARCHAR2   := 100
9454     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
9455     ,p_debug_mode       IN  VARCHAR2   := 'N'
9456     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9457     ,p_project_id IN NUMBER
9458     ,p_workplan_enabled_flag IN VARCHAR2
9459     ,p_financial_enabled_flag IN VARCHAR2
9460     ,p_sharing_enabled_flag IN VARCHAR2
9461     --FP M changes bug 3301192
9462     ,p_deliverables_enabled_flag       IN VARCHAR2
9463     ,p_sharing_option_code             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9464     --End FP M changes bug 3301192
9465     ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9466     ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9467     ,x_msg_data  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9468   )
9469   IS
9470     l_ret_stat           VARCHAR2(1);
9471     l_err_msg_code       VARCHAR2(30);
9472     l_suffix             VARCHAR2(80);
9473     l_name               VARCHAR2(240);
9474     l_append             VARCHAR2(10) := ': ';
9475     l_return_status      VARCHAR2(1);
9476     l_msg_count          NUMBER;
9477     l_msg_data           VARCHAR2(250);
9478     l_structure_id       NUMBER;
9479     l_structure_version_id NUMBER;
9480     l_template_flag      VARCHAR2(1);
9481     l_status_code        VARCHAR2(30);
9482     l_baseline_flag      VARCHAR2(1);
9483     l_latest_eff_pub_flag VARCHAR2(1);
9484     l_effective_date     DATE;
9485     l_wp_attr_rvn        NUMBER;
9486     l_rowid              VARCHAR2(255);
9487     l_keep_structure_ver_id NUMBER;
9488     l_del_struc_ver_id   NUMBER;
9489     l_struc_ver_rvn      NUMBER;
9490     l_pev_structure_id   NUMBER;
9491     l_pev_schedule_id    NUMBER;
9492     l_struc_ver_attr_rvn NUMBER;
9493     l_struc_type_id      NUMBER;
9494     l_proj_structure_type_id NUMBER;
9495     l_task_id            NUMBER;
9496     l_element_version_id NUMBER;
9497     l_start_date         DATE;
9498     l_completion_date    DATE;
9499     l_object_type        VARCHAR2(30);
9500     l_task_ver_id        NUMBER;
9501    /* Bug 2790703 Begin */
9502     -- l_task_ver_ids       PA_NUM_1000_NUM := PA_NUM_1000_NUM();
9503     l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
9504     l_index number :=0 ;
9505 /* Bug 2790703 End */
9506 
9507     l_proj_start_Date DATE;
9508     l_proj_completion_date DATE;
9509     l_proj_prog_attr_id NUMBER;
9510 
9511     CURSOR get_project_info IS
9512       select name, target_start_date, target_finish_date
9513         from pa_projects_all
9514        where project_id = p_project_id;
9515 
9516 --bug 2843569: added record_version_number
9517     CURSOR get_template_flag IS
9518       select template_flag, record_version_number
9519         from pa_projects_all
9520        where project_id = p_project_id;
9521 
9522     CURSOR get_wp_attr_rvn IS
9523       select b.proj_element_id, a.record_version_number
9524         from pa_proj_workplan_attr a,
9525              pa_proj_elements b,
9526              pa_proj_structure_types c,
9527              pa_structure_types d
9528        where a.project_id = b.project_id
9529          and a.proj_element_id = b.proj_element_id
9530          and b.project_id = p_project_id
9531          and b.proj_element_id = c.proj_element_id
9532          and c.structure_type_id = d.structure_type_id
9533          and d.structure_type_class_code = 'WORKPLAN';
9534 
9535     cursor sel_wp_struct_type(c_structure_id NUMBER) IS
9536       select a.rowid
9537         from pa_proj_structure_types a,
9538              pa_structure_types b
9539        where a.proj_element_id = c_structure_id
9540          and a.structure_type_id = b.structure_type_id
9541          and b.structure_type_class_code = 'WORKPLAN';
9542 
9543     cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
9544       select element_version_id
9545         from pa_proj_elem_ver_structure
9546        where proj_element_id = c_structure_id
9547          and project_id = p_project_id
9548          and status_code = 'STRUCTURE_PUBLISHED'
9549          and LATEST_EFF_PUBLISHED_FLAG = 'Y';
9550 
9551     cursor sel_wp_structure_id IS
9552       select a.proj_element_id
9553         from pa_proj_elements a,
9554              pa_proj_structure_types b,
9555              pa_structure_types c
9556        where a.project_id = p_project_id
9557          and a.object_type = 'PA_STRUCTURES'
9558          and a.proj_element_id = b.proj_element_id
9559          and b.structure_type_id = c.structure_type_id
9560          and c.structure_type_class_code = 'WORKPLAN';
9561 
9562     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
9563       select b.element_version_id, b.record_version_number
9564         from pa_proj_element_versions a,
9565              pa_proj_element_versions b
9566        where a.element_version_id = c_keep_struc_ver_id
9567          and a.project_id = b.project_id
9568          and a.proj_element_id = b.proj_element_id
9569          and b.element_version_id <> c_keep_struc_ver_id
9570          and b.object_type = 'PA_STRUCTURES';
9571 
9572     cursor sel_all_wp_structure_ver(c_struc_id NUMBER) IS
9573       select a.element_version_id, a.record_version_number
9574         from pa_proj_element_versions a,
9575              pa_proj_elements b
9576        where a.proj_element_id = b.proj_element_id
9577          and a.project_id = b.project_id
9578          and b.proj_element_id = c_struc_id;
9579 
9580     cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
9581       select PEV_STRUCTURE_ID, record_version_number
9582         from pa_proj_elem_ver_structure
9583        where project_id = p_project_id
9584          and element_version_id = c_struc_ver_id;
9585 
9586     cursor sel_proj_workplan_attr(c_struc_id NUMBER) is
9587       select *
9588         from pa_proj_workplan_attr
9589        where proj_element_id = c_struc_id;
9590     l_proj_workplan_attr_rec  sel_proj_workplan_attr%ROWTYPE;
9591 
9592     cursor sel_proj_progress_attr(c_struc_id NUMBER) IS
9593       select *
9594         from pa_proj_progress_attr
9595        where project_id = p_project_id
9596          and object_type = 'PA_STRUCTURES'
9597          and object_id = c_struc_id;
9598     l_proj_progress_attr_rec  sel_proj_progress_attr%ROWTYPE;
9599 
9600     cursor sel_fin_structure_id IS
9601       select a.proj_element_id
9602         from pa_proj_elements a,
9603              pa_proj_structure_types b,
9604              pa_structure_types c
9605        where a.project_id = p_project_id
9606          and a.object_type = 'PA_STRUCTURES'
9607          and a.proj_element_id = b.proj_element_id
9608          and b.structure_type_id = c.structure_type_id
9609          and c.structure_type_class_code = 'FINANCIAL';
9610 
9611     CURSOR sel_struc_type_id IS
9612       select structure_type_id
9613         from pa_structure_types
9614        where structure_type_class_code = 'WORKPLAN';
9615 
9616     cursor sel_struc_ver(c_structure_id NUMBER) IS
9617       select element_version_id
9618         from pa_proj_element_versions
9619        where project_id = p_project_id
9620          and proj_element_id = c_structure_id
9621          and object_type = 'PA_STRUCTURES';
9622 
9623 --hsiu: commented for performance
9624 --    cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
9625 --      select object_type, proj_element_id, element_version_id
9626 --        from pa_proj_element_versions
9627 --       where parent_structure_version_id = c_struc_ver_id;
9628     cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
9629       select pev.object_type, pev.proj_element_id, pev.element_version_id
9630         from pa_proj_element_versions pev, pa_object_relationships rel
9631        where pev.parent_structure_version_id = c_struc_ver_id
9632          and rel.object_id_to1 = pev.element_version_id
9633          and rel.relationship_type = 'S'
9634          and NOT EXISTS (
9635                select 1
9636                  from pa_object_Relationships
9637                 where object_id_from1 = pev.element_version_id
9638                   and relationship_type = 'S'
9639              );
9640 
9641 
9642     cursor sel_task_dates(c_task_id NUMBER) IS
9643       select start_date, completion_date
9644         from pa_tasks
9645        where task_id = c_task_id;
9646 
9647 --hsiu added for bug 2634029
9648     cursor sel_target_dates IS
9649       select target_start_date, target_finish_date, calendar_id
9650         from pa_projects_all
9651        where project_id = p_project_id;
9652 
9653     CURSOR get_top_tasks(c_structure_version_id NUMBER) IS
9654            select v.element_version_id
9655              from pa_proj_element_versions v,
9656                   pa_object_relationships r
9657             where v.element_version_id = r.object_id_to1
9658               and r.object_id_from1 = c_structure_version_id
9659               and r.object_type_from = 'PA_STRUCTURES';
9660 
9661 --bug 2843569
9662     CURSOR get_scheduled_dates(c_project_Id NUMBER,
9663                                 c_element_version_id NUMBER) IS
9664            select a.scheduled_start_date, a.scheduled_finish_date
9665              from pa_proj_elem_ver_schedule a
9666             where a.project_id = c_project_id
9667               and a.element_version_id = c_element_version_id;
9668     l_get_sch_dates_cur get_scheduled_dates%ROWTYPE;
9669     l_proj_rec_ver_num      NUMBER;
9670 --end bug 2843569
9671 
9672     l_target_start_date     DATE;
9673     l_target_finish_date    DATE;
9674     l_calendar_id           NUMBER;
9675 --end changes for bug 2634029
9676 
9677 --bug 3010538
9678     l_task_weight_basis_code VARCHAR2(30);
9679     l_update_proc_wbs_flag VARCHAR2(1);
9680 --end bug 3010538
9681 
9682     l_wp_name               VARCHAR2(240);
9683   BEGIN
9684     IF (p_debug_mode = 'Y') THEN
9685       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr');
9686     END IF;
9687 
9688     IF (p_commit = FND_API.G_TRUE) THEN
9689       savepoint update_struc_setup_attr_pvt;
9690     END IF;
9691 
9692     IF (p_debug_mode = 'Y') THEN
9693       pa_debug.debug('Performing validations');
9694     END IF;
9695 
9696 /*
9697     --For enabling workplan
9698     IF (p_workplan_enabled_flag <>
9699         PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id)) THEN
9700       --BEGIN ENABLING WP CODE
9701 
9702       IF (p_workplan_enabled_flag = 'Y') THEN
9703         --Validation
9704         PA_PROJECT_STRUCTURE_UTILS.check_enable_wp_ok(p_project_id,
9705                                                       l_ret_stat,
9706                                                       l_err_msg_code);
9707         IF (l_ret_stat = 'N') THEN
9708           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
9709           x_msg_data := l_err_msg_code;
9710           RAISE FND_API.G_EXC_ERROR;
9711         END IF;
9712         --enable WP
9713         --get project name
9714         OPEN get_project_info;
9715         FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date;
9716         CLOSE get_project_info;
9717 
9718         IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
9719           l_proj_completion_date := l_proj_start_date;
9720         ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
9721           l_proj_completion_date := sysdate;
9722           l_proj_start_date := sysdate;
9723         END IF;
9724 
9725         --get suffix
9726         select meaning
9727           into l_suffix
9728           from pa_lookups
9729          where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
9730            and lookup_code = 'WORKPLAN';
9731 
9732         l_name := substrb(l_name||l_append||l_suffix, 1, 240);
9733         --Create new structure
9734         PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
9735          ( p_validate_only           => FND_API.G_FALSE
9736           ,p_project_id              => p_project_id
9737           ,p_structure_number        => l_name
9738           ,p_structure_name          => l_name
9739           ,p_calling_flag            => 'WORKPLAN'
9740           ,x_structure_id            => l_structure_id
9741           ,x_return_status           => l_return_status
9742           ,x_msg_count               => l_msg_count
9743           ,x_msg_data                => l_msg_data );
9744 
9745         --Check if there is any error.
9746         l_msg_count := FND_MSG_PUB.count_msg;
9747         IF l_msg_count > 0 THEN
9748           x_msg_count := l_msg_count;
9749           IF x_msg_count = 1 THEN
9750             x_msg_data := l_msg_data;
9751           END IF;
9752           RAISE FND_API.G_EXC_ERROR;
9753         END IF;
9754 
9755         PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
9756         ( p_validate_only         => FND_API.G_FALSE
9757          ,p_structure_id          => l_structure_id
9758          ,x_structure_version_id  => l_structure_version_id
9759          ,x_return_status         => l_return_status
9760          ,x_msg_count             => l_msg_count
9761          ,x_msg_data              => l_msg_data );
9762 
9763         --Check if there is any error.
9764         l_msg_count := FND_MSG_PUB.count_msg;
9765         IF l_msg_count > 0 THEN
9766           x_msg_count := l_msg_count;
9767           IF x_msg_count = 1 THEN
9768             x_msg_data := l_msg_data;
9769           END IF;
9770           RAISE FND_API.G_EXC_ERROR;
9771         END IF;
9772 
9773         PA_TASK_PUB1.Create_Schedule_Version(
9774           p_element_version_id      => l_structure_version_id
9775          ,p_scheduled_start_date    => l_proj_start_date
9776          ,p_scheduled_end_date      => l_proj_completion_date
9777          ,x_pev_schedule_id         => l_pev_schedule_id
9778          ,x_return_status           => l_return_status
9779          ,x_msg_count               => l_msg_count
9780          ,x_msg_data                => l_msg_data
9781         );
9782 
9783         --Check if there is any error.
9784         l_msg_count := FND_MSG_PUB.count_msg;
9785         IF l_msg_count > 0 THEN
9786           x_msg_count := l_msg_count;
9787           IF x_msg_count = 1 THEN
9788             x_msg_data := l_msg_data;
9789           END IF;
9790           RAISE FND_API.G_EXC_ERROR;
9791         END IF;
9792 
9793         OPEN get_template_flag;
9794         FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
9795         CLOSE get_template_flag;
9796 
9797         IF (l_template_flag = 'Y') THEN
9798           l_status_code := 'STRUCTURE_WORKING';
9799           l_baseline_flag := 'N';
9800           l_latest_eff_pub_flag := 'N';
9801           l_effective_date := NULL;
9802         ELSE
9803           l_status_code := 'STRUCTURE_PUBLISHED';
9804           l_baseline_flag := 'Y';
9805           l_latest_eff_pub_flag := 'Y';
9806           l_effective_date := sysdate;
9807         END IF;
9808 
9809         PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
9810         ( p_validate_only               => FND_API.G_FALSE
9811          ,p_structure_version_id        => l_structure_version_id
9812          ,p_structure_version_name      => l_name
9813          ,p_structure_version_desc      => NULL
9814          ,p_effective_date              => l_effective_date
9815          ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
9816          ,p_locked_status_code          => 'UNLOCKED'
9817          ,p_struct_version_status_code  => l_status_code
9818          ,p_baseline_current_flag       => l_baseline_flag
9819          ,p_baseline_original_flag      => 'N'
9820          ,x_pev_structure_id            => l_pev_structure_id
9821          ,x_return_status               => l_return_status
9822          ,x_msg_count                   => l_msg_count
9823          ,x_msg_data                    => l_msg_data );
9824 
9825         --Check if there is any error.
9826         l_msg_count := FND_MSG_PUB.count_msg;
9827         IF l_msg_count > 0 THEN
9828           x_msg_count := l_msg_count;
9829           IF x_msg_count = 1 THEN
9830             x_msg_data := l_msg_data;
9831           END IF;
9832           RAISE FND_API.G_EXC_ERROR;
9833         END IF;
9834 
9835         --end enable WP
9836       ELSE
9837         --Validation
9838         PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
9839                                                        l_ret_stat,
9840                                                        l_err_msg_code);
9841         IF (l_ret_stat = 'N') THEN
9842           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
9843           x_msg_data := l_err_msg_code;
9844           RAISE FND_API.G_EXC_ERROR;
9845         END IF;
9846         --disable WP
9847 
9848         --get structure_id
9849         OPEN sel_wp_structure_id;
9850         FETCH sel_wp_structure_id INTO l_structure_id;
9851         CLOSE sel_wp_structure_id;
9852 
9853         IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id)
9854             = 'Y') THEN
9855           --Shared
9856           --Select version to be kept
9857           OPEN sel_latest_pub_ver(l_structure_id);
9858           FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
9859           IF sel_latest_pub_ver%NOTFOUND THEN
9860             l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
9861           END IF;
9862           CLOSE sel_latest_pub_ver;
9863 
9864           --Delete all other structure versions
9865           OPEN sel_other_structure_ver(l_keep_structure_ver_id);
9866           LOOP
9867             FETCH sel_other_structure_ver into l_del_struc_ver_id,
9868                                                l_struc_ver_rvn;
9869             EXIT WHEN sel_other_structure_ver%NOTFOUND;
9870 -----hsiu: bug 2800553: added for sharing/splitting performance
9871             PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
9872                        p_project_id,
9873                        l_del_struc_ver_id,
9874                        l_return_status,
9875                        l_err_msg_code);
9876             IF (l_return_status <> 'S') THEN
9877               PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
9878               x_msg_data := l_err_msg_code;
9879               RAISE FND_API.G_EXC_ERROR;
9880             END IF;
9881 
9882             --get top tasks
9883             OPEN get_top_tasks(l_del_struc_ver_id);
9884             LOOP
9885               FETCH get_top_tasks into l_task_ver_id;
9886               EXIT WHEN get_top_tasks%NOTFOUND;
9887 
9888               PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
9889                p_project_id                   => p_project_id
9890               ,p_task_version_id              => l_task_ver_id
9891               ,p_parent_structure_ver_id      => l_del_struc_ver_id
9892               ,x_return_status                => l_return_status
9893               ,x_error_message_code           => l_err_msg_code );
9894 
9895               IF (l_return_status <> 'S') THEN
9896                 x_return_status := l_return_status;
9897                 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
9898                 l_msg_data := l_err_msg_code;
9899                 CLOSE get_top_tasks;
9900                 RAISE FND_API.G_EXC_ERROR;
9901               END IF;
9902             END LOOP;
9903             CLOSE get_top_tasks;
9904 
9905 --            PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
9906             PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
9907               p_structure_version_id => l_del_struc_ver_id
9908              ,p_record_version_number => l_struc_ver_rvn
9909              ,x_return_status => l_return_status
9910              ,x_msg_count => l_msg_count
9911              ,x_msg_data => l_msg_data
9912             );
9913 ----end changes
9914 
9915             --Check if there is any error.
9916             l_msg_count := FND_MSG_PUB.count_msg;
9917             IF l_msg_count > 0 THEN
9918               x_msg_count := l_msg_count;
9919               IF x_msg_count = 1 THEN
9920                 x_msg_data := l_msg_data;
9921               END IF;
9922               CLOSE sel_other_structure_ver;
9923               RAISE FND_API.G_EXC_ERROR;
9924             END IF;
9925 
9926           END LOOP;
9927           CLOSE sel_other_structure_ver;
9928 
9929           --NULL all baseline dates
9930           UPDATE pa_proj_elements
9931              SET baseline_start_date = NULL,
9932                  baseline_finish_date = NULL,
9933                  record_version_number = record_version_number+1
9934            WHERE project_id = p_project_id;
9935 
9936           --Delete all schedule rows
9937           DELETE FROM pa_proj_elem_ver_schedule
9938           WHERE project_id = p_project_id;
9939 
9940           --Delete wp attr row
9941           OPEN get_wp_attr_rvn;
9942           FETCH get_wp_attr_rvn into l_structure_id, l_wp_attr_rvn;
9943           CLOSE get_wp_attr_rvn;
9944 
9945           PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
9946             p_validate_only               => FND_API.G_FALSE
9947            ,p_project_id => p_project_id
9948            ,p_proj_element_id => l_structure_id
9949            ,p_record_version_number => l_wp_attr_rvn
9950            ,x_return_status => l_return_status
9951            ,x_msg_count => l_msg_count
9952            ,x_msg_data => l_msg_data
9953           );
9954 
9955           --Check if there is any error.
9956           l_msg_count := FND_MSG_PUB.count_msg;
9957           IF l_msg_count > 0 THEN
9958             x_msg_count := l_msg_count;
9959             IF x_msg_count = 1 THEN
9960               x_msg_data := l_msg_data;
9961             END IF;
9962             RAISE FND_API.G_EXC_ERROR;
9963           END IF;
9964 
9965           PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
9966             p_validate_only        => FND_API.G_FALSE
9967            ,p_project_id           => p_project_id
9968            ,P_OBJECT_TYPE          => 'PA_STRUCTURES'
9969            ,p_object_id            => l_structure_id
9970            ,x_return_status        => l_return_status
9971            ,x_msg_count            => l_msg_count
9972            ,x_msg_data             => l_msg_data
9973           );
9974 
9975           --Check if there is any error.
9976           l_msg_count := FND_MSG_PUB.count_msg;
9977           IF l_msg_count > 0 THEN
9978             x_msg_count := l_msg_count;
9979             IF x_msg_count = 1 THEN
9980               x_msg_data := l_msg_data;
9981             END IF;
9982             RAISE FND_API.G_EXC_ERROR;
9983           END IF;
9984 
9985           --Delete structure type
9986           OPEN sel_wp_struct_type(l_structure_id);
9987           FETCH sel_wp_struct_type into l_rowid;
9988           PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
9989           CLOSE sel_wp_struct_type;
9990 
9991           --Update structure status to published if project;
9992           --  working if template
9993           OPEN get_template_flag;
9994           FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
9995           CLOSE get_template_flag;
9996 
9997           OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
9998           FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
9999                                             l_struc_ver_attr_rvn;
10000           CLOSE sel_struc_ver_attr_rvn;
10001 
10002           IF (l_template_flag = 'Y') THEN
10003             l_status_code := 'STRUCTURE_WORKING';
10004             l_latest_eff_pub_flag := 'N';
10005             l_effective_date := NULL;
10006           ELSE
10007             l_status_code := 'STRUCTURE_PUBLISHED';
10008             l_latest_eff_pub_flag := 'Y';
10009             l_effective_date := sysdate;
10010           END IF;
10011 
10012           --Change status
10013           UPDATE pa_proj_elem_ver_structure
10014           set status_code = l_status_code,
10015               current_flag = 'N',
10016               current_baseline_date = NULL,
10017               current_baseline_person_id = NULL,
10018               latest_eff_published_flag = l_latest_eff_pub_flag,
10019               effective_date = l_effective_date,
10020               record_version_number = record_version_number + 1
10021           where pev_structure_id = l_pev_structure_id;
10022 
10023         ELSE
10024           --Not Shared
10025           --Delete all structure versions
10026           OPEN sel_all_wp_structure_ver(l_structure_id);
10027           LOOP
10028             FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
10029                                              l_struc_ver_rvn;
10030             EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
10031             PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10032                        p_project_id,
10033                        l_del_struc_ver_id,
10034                        l_return_status,
10035                        l_err_msg_code);
10036             IF (l_return_status <> 'S') THEN
10037               PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10038               x_msg_data := l_err_msg_code;
10039               RAISE FND_API.G_EXC_ERROR;
10040             END IF;
10041 
10042             --get top tasks
10043             OPEN get_top_tasks(l_del_struc_ver_id);
10044             LOOP
10045               FETCH get_top_tasks into l_task_ver_id;
10046               EXIT WHEN get_top_tasks%NOTFOUND;
10047 
10048               PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10049                p_project_id                   => p_project_id
10050               ,p_task_version_id              => l_task_ver_id
10051               ,p_parent_structure_ver_id      => l_del_struc_ver_id
10052               ,x_return_status                => l_return_status
10053               ,x_error_message_code           => l_err_msg_code );
10054 
10055               IF (l_return_status <> 'S') THEN
10056                 x_return_status := l_return_status;
10057                 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10058                 l_msg_data := l_err_msg_code;
10059                 CLOSE get_top_tasks;
10060                 RAISE FND_API.G_EXC_ERROR;
10061               END IF;
10062             END LOOP;
10063             CLOSE get_top_tasks;
10064 
10065 --            PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10066             PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10067               p_structure_version_id => l_del_struc_ver_id
10068              ,p_record_version_number => l_struc_ver_rvn
10069              ,x_return_status => l_return_status
10070              ,x_msg_count => l_msg_count
10071              ,x_msg_data => l_msg_data
10072             );
10073 ----end changes
10074 
10075             --Check if there is any error.
10076             l_msg_count := FND_MSG_PUB.count_msg;
10077             IF l_msg_count > 0 THEN
10078               x_msg_count := l_msg_count;
10079               IF x_msg_count = 1 THEN
10080                 x_msg_data := l_msg_data;
10081               END IF;
10082               CLOSE sel_all_wp_structure_ver;
10083               RAISE FND_API.G_EXC_ERROR;
10084             END IF;
10085           END LOOP;
10086           CLOSE sel_all_wp_structure_ver;
10087 
10088         END IF;
10089         --end disable WP
10090       END IF;
10091       --END ENABLING WP CODE
10092     END IF;
10093 
10094     --For sharing workplan
10095     IF (p_sharing_enabled_flag <>
10096         PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(p_project_id)) THEN
10097       --get structure_id
10098       OPEN sel_wp_structure_id;
10099       FETCH sel_wp_structure_id INTO l_structure_id;
10100       CLOSE sel_wp_structure_id;
10101 
10102       --select current proj wp attributes
10103       OPEN sel_proj_workplan_attr(l_structure_id);
10104       FETCH sel_proj_workplan_attr INTO l_proj_workplan_attr_rec;
10105       CLOSE sel_proj_workplan_attr;
10106 
10107       OPEN sel_proj_progress_attr(l_structure_id);
10108       FETCH sel_proj_progress_attr INTO l_proj_progress_attr_rec;
10109       CLOSE sel_proj_progress_attr;
10110 
10111       --BEGIN SHARING CODE
10112       IF (p_sharing_enabled_flag = 'Y' AND
10113           PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id) = 'Y') THEN
10114         --Validation
10115         PA_PROJECT_STRUCTURE_UTILS.check_sharing_on_ok(p_project_id,
10116                                                        l_ret_stat,
10117                                                        l_err_msg_code);
10118         IF (l_ret_stat = 'N') THEN
10119           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10120           x_msg_data := l_err_msg_code;
10121           RAISE FND_API.G_EXC_ERROR;
10122         END IF;
10123 
10124         --hsiu: bug 2634029; get target dates
10125         OPEN sel_target_dates;
10126         FETCH sel_target_dates into l_target_start_date, l_target_finish_date, l_calendar_id;
10127         CLOSE sel_target_dates;
10128         IF (l_target_start_date IS NULL or l_target_finish_date IS NULL) THEN
10129           l_target_start_date := sysdate;
10130           l_target_finish_date := sysdate;
10131         END IF;
10132         --end bug 2634029 changes
10133 
10134         --sharing on
10135         --loop and delete all workplan versions
10136         OPEN sel_all_wp_structure_ver(l_structure_id);
10137         LOOP
10138           FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
10139                                               l_struc_ver_rvn;
10140           EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
10141             PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10142                        p_project_id,
10143                        l_del_struc_ver_id,
10144                        l_return_status,
10145                        l_err_msg_code);
10146             IF (l_return_status <> 'S') THEN
10147               PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10148               x_msg_data := l_err_msg_code;
10149               RAISE FND_API.G_EXC_ERROR;
10150             END IF;
10151 
10152             --get top tasks
10153             OPEN get_top_tasks(l_del_struc_ver_id);
10154             LOOP
10155               FETCH get_top_tasks into l_task_ver_id;
10156               EXIT WHEN get_top_tasks%NOTFOUND;
10157 
10158               PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10159                p_project_id                   => p_project_id
10160               ,p_task_version_id              => l_task_ver_id
10161               ,p_parent_structure_ver_id      => l_del_struc_ver_id
10162               ,x_return_status                => l_return_status
10163               ,x_error_message_code           => l_err_msg_code );
10164 
10165 
10166               IF (l_return_status <> 'S') THEN
10167                 x_return_status := l_return_status;
10168                 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10169                 l_msg_data := l_err_msg_code;
10170                 CLOSE get_top_tasks;
10171                 RAISE FND_API.G_EXC_ERROR;
10172               END IF;
10173             END LOOP;
10174             CLOSE get_top_tasks;
10175 
10176 --          PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10177             PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10178               p_structure_version_id => l_del_struc_ver_id
10179              ,p_record_version_number => l_struc_ver_rvn
10180              ,x_return_status => l_return_status
10181              ,x_msg_count => l_msg_count
10182              ,x_msg_data => l_msg_data
10183           );
10184 
10185 ----end changes
10186 
10187           --Check if there is any error.
10188           l_msg_count := FND_MSG_PUB.count_msg;
10189           IF l_msg_count > 0 THEN
10190             x_msg_count := l_msg_count;
10191             IF x_msg_count = 1 THEN
10192               x_msg_data := l_msg_data;
10193             END IF;
10194             CLOSE sel_all_wp_structure_ver;
10195             RAISE FND_API.G_EXC_ERROR;
10196           END IF;
10197         END LOOP;
10198         CLOSE sel_all_wp_structure_ver;
10199 
10200         --Add structure type to financial
10201         OPEN sel_fin_structure_id;
10202         FETCH sel_fin_structure_id into l_structure_id;
10203         CLOSE sel_fin_structure_id;
10204 
10205         OPEN sel_struc_type_id;
10206         FETCH sel_struc_type_id INTO l_struc_type_id;
10207         CLOSE sel_struc_type_id;
10208 
10209         PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
10210               X_ROWID                  => l_rowid
10211              ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
10212              ,X_PROJ_ELEMENT_ID        => l_structure_id
10213              ,X_STRUCTURE_TYPE_ID      => l_struc_type_id
10214              ,X_RECORD_VERSION_NUMBER  => 1
10215              ,X_ATTRIBUTE_CATEGORY     => NULL
10216              ,X_ATTRIBUTE1             => NULL
10217              ,X_ATTRIBUTE2             => NULL
10218              ,X_ATTRIBUTE3             => NULL
10219              ,X_ATTRIBUTE4             => NULL
10220              ,X_ATTRIBUTE5             => NULL
10221              ,X_ATTRIBUTE6             => NULL
10222              ,X_ATTRIBUTE7             => NULL
10223              ,X_ATTRIBUTE8             => NULL
10224              ,X_ATTRIBUTE9             => NULL
10225              ,X_ATTRIBUTE10            => NULL
10226              ,X_ATTRIBUTE11            => NULL
10227              ,X_ATTRIBUTE12            => NULL
10228              ,X_ATTRIBUTE13            => NULL
10229              ,X_ATTRIBUTE14            => NULL
10230              ,X_ATTRIBUTE15            => NULL
10231         );
10232 
10233         --add proj_wp attr
10234         PA_WORKPLAN_ATTR_PVT.CREATE_PROJ_WORKPLAN_ATTRS(
10235           p_validate_only               => FND_API.G_FALSE
10236          ,p_project_id                   => p_project_id
10237          ,p_proj_element_id              => l_structure_id
10238          ,p_approval_reqd_flag           => l_proj_workplan_attr_rec.WP_APPROVAL_REQD_FLAG
10239          ,p_auto_publish_flag            => l_proj_workplan_attr_rec.WP_AUTO_PUBLISH_FLAG
10240          ,p_approver_source_id           => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_ID
10241          ,p_approver_source_type         => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_TYPE
10242          ,p_default_display_lvl          => l_proj_workplan_attr_rec.WP_DEFAULT_DISPLAY_LVL
10243          ,p_enable_wp_version_flag       => l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG
10244          ,p_auto_pub_upon_creation_flag  => l_proj_workplan_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
10245          ,p_auto_sync_txn_date_flag      => l_proj_workplan_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
10246          ,p_txn_date_sync_buf_days       => l_proj_workplan_attr_rec.TXN_DATE_SYNC_BUF_DAYS
10247 --LDENG
10248          ,p_lifecycle_version_id         => l_proj_workplan_attr_rec.LIFECYCLE_VERSION_ID
10249          ,p_current_phase_version_id     => l_proj_workplan_attr_rec.CURRENT_PHASE_VERSION_ID
10250 --END LDENG
10251          ,x_return_status                => l_return_status
10252          ,x_msg_count                    => l_msg_count
10253          ,x_msg_data                     => l_msg_data
10254         );
10255 
10256         --Check if there is any error.
10257         l_msg_count := FND_MSG_PUB.count_msg;
10258         IF l_msg_count > 0 THEN
10259           x_msg_count := l_msg_count;
10260           IF x_msg_count = 1 THEN
10261             x_msg_data := l_msg_data;
10262           END IF;
10263           RAISE FND_API.G_EXC_ERROR;
10264         END IF;
10265 
10266         --bug 3010538
10267         --copy task weighting basis
10268         PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
10269            p_validate_only       => FND_API.G_FALSE
10270           ,p_project_id          => p_project_id
10271           ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
10272           ,P_OBJECT_ID           => l_structure_id
10273           ,p_PROGRESS_CYCLE_ID   => l_proj_progress_attr_rec.PROGRESS_CYCLE_ID
10274           ,p_wq_enable_flag      => l_proj_progress_attr_rec.wq_enable_flag
10275           ,p_remain_effort_enable_flag => l_proj_progress_attr_rec.remain_effort_enable_flag
10276           ,p_percent_comp_enable_flag => l_proj_progress_attr_rec.percent_comp_enable_flag
10277           ,p_next_progress_update_date => l_proj_progress_attr_rec.next_progress_update_date
10278           ,p_action_set_id       => NULL
10279           ,p_TASK_WEIGHT_BASIS_CODE => l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE
10280           ,x_proj_progress_attr_id => l_proj_prog_attr_id
10281           ,x_return_status       => l_return_status
10282           ,x_msg_count           => x_msg_count
10283           ,x_msg_data            => x_msg_data
10284         );
10285 
10286         --Check if there is any error.
10287         l_msg_count := FND_MSG_PUB.count_msg;
10288         IF l_msg_count > 0 THEN
10289           x_msg_count := l_msg_count;
10290           IF x_msg_count = 1 THEN
10291             x_msg_data := l_msg_data;
10292           END IF;
10293           RAISE FND_API.G_EXC_ERROR;
10294         END IF;
10295 
10296         --Loop schedule version to structure version and task versions
10297         OPEN sel_struc_ver(l_structure_id);
10298         FETCH sel_struc_ver into l_structure_version_id;
10299         CLOSE sel_struc_ver;
10300 
10301         --3035902: process update flag changes
10302         IF (l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE = 'EFFORT') THEN
10303           --set process flag to Y
10304           --get structure version id
10305           PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
10306                                p_project_id => p_project_id,
10307                                p_structure_version_id => l_structure_version_id,
10308                                p_update_wbs_flag => 'Y',
10309                                x_return_status => l_return_status,
10310                                x_msg_count => l_msg_count,
10311                                x_msg_data => l_msg_data
10312                              );
10313           If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
10314             x_msg_count := FND_MSG_PUB.count_msg;
10315             if x_msg_count = 1 then
10316               x_msg_data := l_msg_data;
10317             end if;
10318             raise FND_API.G_EXC_ERROR;
10319           end if;
10320 
10321         END IF;
10322          --3035902: end process update flag changes
10323 
10324 
10325         OPEN sel_struc_and_task_vers(l_structure_version_id);
10326         LOOP
10327           FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
10328           EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
10329 --hsiu: commented for performance enhancement
10330 --          l_start_date := sysdate;
10331 --          l_completion_date := sysdate;
10332 
10333           --If it is lowest task, get dates
10334 --hsiu: commented for performance
10335 --          IF (l_object_type = 'PA_TASKS' AND
10336 --              PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_element_version_id) = 'Y') THEN
10337 --            OPEN sel_task_dates(l_task_id);
10338 --            FETCH sel_task_dates into l_start_date, l_completion_date;
10339 --            CLOSE sel_task_dates;
10340 
10341         --  Bug 2790703 Begin
10342             --Add to array for rollup
10343             --l_task_ver_ids.extend;
10344             --l_task_ver_ids(l_task_ver_ids.count) := l_element_version_id;
10345         l_index := l_index + 1;
10346         l_task_ver_ids_tbl(l_index) := l_element_version_id;
10347         --  Bug 2790703 End
10348 
10349 --hsiu: commented for performance
10350 --            IF (l_start_date IS NULL) OR (l_completion_date IS NULL) THEN
10351 --              CLOSE sel_struc_and_task_vers;
10352 --              PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_FIN_TK_DATE_MISS');
10353 --              x_msg_data := 'PA_PS_FIN_TK_DATE_MISS';
10354 --              RAISE FND_API.G_EXC_ERROR;
10355 --hsiu: 2634029
10356 --      Default sysdate or project target dates if transaction dates
10357 --      are missing.
10358 --              l_start_date := l_target_start_date;
10359 --              l_completion_date := l_target_finish_date;
10360 --            END IF;
10361 --          END IF;
10362 
10363           -- anlee
10364           --   Commented out for performance
10365           --   Will use bulk insert into schedule table instead
10366           -- anlee end of comment
10367 
10368         END LOOP;
10369         CLOSE sel_struc_and_task_vers;
10370 
10371         INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
10372           pev_schedule_id,
10373           element_version_id,
10374           project_id,
10375           proj_element_id,
10376           creation_date,
10377           created_by,
10378           last_update_date,
10379           last_updated_by,
10380           scheduled_start_date,
10381           scheduled_finish_date,
10382           milestone_flag,
10383           critical_flag,
10384           calendar_id,
10385           record_version_number,
10386           last_update_login,
10387       source_object_id,
10388       source_object_type
10389       )
10390         SELECT
10391           pa_proj_elem_ver_schedule_s.nextval,
10392           PPEV.element_version_id,
10393           PPEV.project_id,
10394           PPEV.proj_element_id,
10395           SYSDATE,
10396           FND_GLOBAL.USER_ID,
10397           SYSDATE,
10398           FND_GLOBAL.USER_ID,
10399           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', decode(PT.COMPLETION_DATE, NULL, trunc(l_target_start_date), trunc(PT.START_DATE))),
10400           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_target_finish_date))),
10401           'N',
10402           'N',
10403           l_calendar_id,
10404           0,
10405           FND_GLOBAL.LOGIN_ID,
10406       PPEV.project_id,
10407       'PA_PROJECTS'
10408         FROM PA_TASKS PT,
10409              PA_PROJ_ELEMENT_VERSIONS PPEV
10410         WHERE
10411              PPEV.parent_structure_version_id = l_structure_version_id
10412         AND  PPEV.proj_element_id = PT.task_id (+);
10413         -- anlee end of bulk insert
10414 
10415     -- Bug 2790703 Begin
10416       IF (l_task_ver_ids_tbl.count > 0) THEN
10417         --rollup
10418         PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
10419                        p_commit => FND_API.G_FALSE,
10420                        p_element_versions => l_task_ver_ids_tbl,
10421                        x_return_status => l_return_status,
10422                        x_msg_count => l_msg_count,
10423                        x_msg_data => l_msg_data);
10424 
10425     -- Bug 2790703 End
10426 
10427           --Check if there is any error.
10428           l_msg_count := FND_MSG_PUB.count_msg;
10429           IF l_msg_count > 0 THEN
10430             x_msg_count := l_msg_count;
10431             IF x_msg_count = 1 THEN
10432               x_msg_data := l_msg_data;
10433             END IF;
10434             RAISE FND_API.G_EXC_ERROR;
10435           END IF;
10436         END IF;
10437 
10438         --check if project or template; set status
10439         OPEN get_template_flag;
10440         FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10441         CLOSE get_template_flag;
10442 
10443         --bug 3010538
10444         --set update flag to 'Y' for all working versions (or published
10445         --  if versioning is disabled
10446         IF (l_template_flag = 'Y') THEN
10447           l_status_code := 'STRUCTURE_WORKING';
10448           l_baseline_flag := 'N';
10449           l_latest_eff_pub_flag := 'N';
10450           l_effective_date := NULL;
10451         ELSE
10452           l_status_code := 'STRUCTURE_PUBLISHED';
10453           l_baseline_flag := 'Y';
10454           l_latest_eff_pub_flag := 'Y';
10455           l_effective_date := sysdate;
10456         END IF;
10457 
10458         --Change status
10459         OPEN sel_struc_ver_attr_rvn(l_structure_version_id);
10460         FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
10461                                           l_struc_ver_attr_rvn;
10462         CLOSE sel_struc_ver_attr_rvn;
10463 
10464 --bug 3010538
10465 --added process_update_wbs_flag
10466         UPDATE pa_proj_elem_ver_structure
10467         set status_code = l_status_code,
10468             current_flag = l_baseline_flag,
10469             current_baseline_date = l_effective_date,
10470             current_baseline_person_id = NULL,
10471             latest_eff_published_flag = l_latest_eff_pub_flag,
10472             effective_date = l_effective_date,
10473 --            PROCESS_UPDATE_WBS_FLAG = l_update_proc_wbs_flag,
10474             record_version_number = record_version_number + 1
10475         where pev_structure_id = l_pev_structure_id;
10476 
10477 --bug 2843569
10478         IF (l_status_code = 'STRUCTURE_PUBLISHED') OR
10479            (l_template_flag = 'Y') THEN
10480           OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
10481           FETCH get_scheduled_dates into l_get_sch_dates_cur;
10482           CLOSE get_scheduled_dates;
10483 
10484           PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
10485             p_validate_only        => FND_API.G_FALSE
10486            ,p_project_id           => p_project_id
10487            ,p_date_type            => 'SCHEDULED'
10488            ,p_start_date           => l_get_sch_dates_cur.scheduled_start_date
10489            ,p_finish_date          => l_get_sch_dates_cur.scheduled_finish_date
10490            ,p_record_version_number=> l_proj_rec_ver_num
10491            ,x_return_status        => x_return_status
10492            ,x_msg_count            => x_msg_count
10493            ,x_msg_data             => x_msg_data );
10494 
10495           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10496             RAISE FND_API.G_EXC_ERROR;
10497           END IF;
10498         END IF;
10499 --bug 2843569
10500 
10501         IF (l_baseline_flag = 'Y') THEN
10502           --baseline structure
10503           PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
10504                        p_commit => FND_API.G_FALSE,
10505                        p_structure_version_id => l_structure_version_id,
10506                        x_return_status => l_return_status,
10507                        x_msg_count => l_msg_count,
10508                        x_msg_data => l_msg_data);
10509 
10510           --Check if there is any error.
10511           l_msg_count := FND_MSG_PUB.count_msg;
10512           IF l_msg_count > 0 THEN
10513             x_msg_count := l_msg_count;
10514             IF x_msg_count = 1 THEN
10515               x_msg_data := l_msg_data;
10516             END IF;
10517             RAISE FND_API.G_EXC_ERROR;
10518           END IF;
10519 
10520         END IF;
10521     -- Bug 2758343 -- Added the following call to recalculate the weightings for existing tasks
10522     RECALC_FIN_TASK_WEIGHTS(  p_structure_version_id    => l_structure_version_id
10523                 , p_project_id          => p_project_id
10524                 , x_msg_count           => l_msg_count
10525                 , x_msg_data            => l_msg_data
10526                 , x_return_status       => l_return_status);
10527 
10528     IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10529             raise FND_API.G_EXC_UNEXPECTED_ERROR;
10530     END IF;
10531 
10532         --end sharing on
10533       ELSIF (p_sharing_enabled_flag = 'Y' AND
10534           PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id) = 'N') THEN
10535         PA_UTILS.ADD_MESSAGE('PA','PA_PS_WP_NOT_EN_SHR_ERR');
10536         x_msg_data := 'PA_PS_WP_NOT_EN_SHR_ERR';
10537         RAISE FND_API.G_EXC_ERROR;
10538       ELSIF (p_sharing_enabled_flag = 'N') THEN
10539         --Validation
10540         PA_PROJECT_STRUCTURE_UTILS.check_sharing_off_ok(p_project_id,
10541                                                         l_ret_stat,
10542                                                         l_err_msg_code);
10543         IF (l_ret_stat = 'N') THEN
10544           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10545           x_msg_data := l_err_msg_code;
10546           RAISE FND_API.G_EXC_ERROR;
10547         END IF;
10548         --sharing off
10549         --Select version to be kept
10550         OPEN sel_latest_pub_ver(l_structure_id);
10551         FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
10552         IF sel_latest_pub_ver%NOTFOUND THEN
10553           l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
10554         END IF;
10555         CLOSE sel_latest_pub_ver;
10556 
10557         --Delete all other structure versions
10558         OPEN sel_other_structure_ver(l_keep_structure_ver_id);
10559         LOOP
10560           FETCH sel_other_structure_ver into l_del_struc_ver_id,
10561                                              l_struc_ver_rvn;
10562           EXIT WHEN sel_other_structure_ver%NOTFOUND;
10563             PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10564                        p_project_id,
10565                        l_del_struc_ver_id,
10566                        l_return_status,
10567                        l_err_msg_code);
10568             IF (l_return_status <> 'S') THEN
10569               PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10570               x_msg_data := l_err_msg_code;
10571               RAISE FND_API.G_EXC_ERROR;
10572             END IF;
10573 
10574             --get top tasks
10575             OPEN get_top_tasks(l_del_struc_ver_id);
10576             LOOP
10577               FETCH get_top_tasks into l_task_ver_id;
10578               EXIT WHEN get_top_tasks%NOTFOUND;
10579 
10580               PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10581                p_project_id                   => p_project_id
10582               ,p_task_version_id              => l_task_ver_id
10583               ,p_parent_structure_ver_id      => l_del_struc_ver_id
10584               ,x_return_status                => l_return_status
10585               ,x_error_message_code           => l_err_msg_code );
10586 
10587               IF (l_return_status <> 'S') THEN
10588                 x_return_status := l_return_status;
10589                 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10590                 l_msg_data := l_err_msg_code;
10591                 CLOSE get_top_tasks;
10592                 RAISE FND_API.G_EXC_ERROR;
10593               END IF;
10594             END LOOP;
10595             CLOSE get_top_tasks;
10596 
10597 --          PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10598             PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10599               p_structure_version_id => l_del_struc_ver_id
10600              ,p_record_version_number => l_struc_ver_rvn
10601              ,x_return_status => l_return_status
10602              ,x_msg_count => l_msg_count
10603              ,x_msg_data => l_msg_data
10604           );
10605 ----end changes
10606 
10607           --Check if there is any error.
10608           l_msg_count := FND_MSG_PUB.count_msg;
10609           IF l_msg_count > 0 THEN
10610             x_msg_count := l_msg_count;
10611             IF x_msg_count = 1 THEN
10612               x_msg_data := l_msg_data;
10613             END IF;
10614             CLOSE sel_other_structure_ver;
10615             RAISE FND_API.G_EXC_ERROR;
10616           END IF;
10617 
10618         END LOOP;
10619         CLOSE sel_other_structure_ver;
10620 
10621         --NULL all baseline dates
10622         UPDATE pa_proj_elements
10623            SET baseline_start_date = NULL,
10624                baseline_finish_date = NULL,
10625                record_version_number = record_version_number+1
10626          WHERE project_id = p_project_id;
10627 
10628         --Delete all schedule rows
10629         DELETE FROM pa_proj_elem_ver_schedule
10630         WHERE project_id = p_project_id;
10631 
10632         --Delete wp attr row
10633         OPEN get_wp_attr_rvn;
10634         FETCH get_wp_attr_rvn into l_structure_id, l_wp_attr_rvn;
10635         CLOSE get_wp_attr_rvn;
10636 
10637         PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
10638             p_validate_only               => FND_API.G_FALSE
10639            ,p_project_id => p_project_id
10640            ,p_proj_element_id => l_structure_id
10641            ,p_record_version_number => l_wp_attr_rvn
10642            ,x_return_status => l_return_status
10643            ,x_msg_count => l_msg_count
10644            ,x_msg_data => l_msg_data
10645         );
10646 
10647         --Check if there is any error.
10648         l_msg_count := FND_MSG_PUB.count_msg;
10649         IF l_msg_count > 0 THEN
10650           x_msg_count := l_msg_count;
10651           IF x_msg_count = 1 THEN
10652             x_msg_data := l_msg_data;
10653           END IF;
10654           RAISE FND_API.G_EXC_ERROR;
10655         END IF;
10656 
10657         PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
10658            p_validate_only       => FND_API.G_FALSE
10659           ,p_project_id          => p_project_id
10660           ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
10661           ,P_OBJECT_ID           => l_structure_id
10662           ,x_return_status       => l_return_status
10663           ,x_msg_count           => x_msg_count
10664           ,x_msg_data            => x_msg_data
10665         );
10666 
10667         --Check if there is any error.
10668         l_msg_count := FND_MSG_PUB.count_msg;
10669         IF l_msg_count > 0 THEN
10670           x_msg_count := l_msg_count;
10671           IF x_msg_count = 1 THEN
10672             x_msg_data := l_msg_data;
10673           END IF;
10674           RAISE FND_API.G_EXC_ERROR;
10675         END IF;
10676 
10677         --Delete structure type
10678         OPEN sel_wp_struct_type(l_structure_id);
10679         FETCH sel_wp_struct_type into l_rowid;
10680         PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
10681         CLOSE sel_wp_struct_type;
10682 
10683         --Update structure status to published if project;
10684         --  working if template
10685         OPEN get_template_flag;
10686         FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10687         CLOSE get_template_flag;
10688 
10689         OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
10690         FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
10691                                           l_struc_ver_attr_rvn;
10692         CLOSE sel_struc_ver_attr_rvn;
10693 
10694         IF (l_template_flag = 'Y') THEN
10695           l_status_code := 'STRUCTURE_WORKING';
10696           l_latest_eff_pub_flag := 'N';
10697           l_effective_date := NULL;
10698         ELSE
10699           l_status_code := 'STRUCTURE_PUBLISHED';
10700           l_latest_eff_pub_flag := 'Y';
10701           l_effective_date := sysdate;
10702         END IF;
10703 
10704         --Change status
10705         UPDATE pa_proj_elem_ver_structure
10706         set status_code = l_status_code,
10707             current_flag = 'N',
10708             current_baseline_date = NULL,
10709             current_baseline_person_id = NULL,
10710             latest_eff_published_flag = l_latest_eff_pub_flag,
10711             effective_date = l_effective_date,
10712             record_version_number = record_version_number + 1
10713         where pev_structure_id = l_pev_structure_id;
10714 
10715         --Create structure
10716         --get project name
10717         OPEN get_project_info;
10718         FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date;
10719         CLOSE get_project_info;
10720 
10721         IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
10722           l_proj_completion_date := l_proj_start_date;
10723         ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
10724           l_proj_completion_date := sysdate;
10725           l_proj_start_date := sysdate;
10726         END IF;
10727 
10728         --get suffix
10729         select meaning
10730           into l_suffix
10731           from pa_lookups
10732          where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
10733            and lookup_code = 'WORKPLAN';
10734 
10735         l_name := substrb(l_name||l_append||l_suffix, 1, 240);
10736         --Create new structure
10737         PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE
10738          ( p_validate_only           => FND_API.G_FALSE
10739           ,p_project_id              => p_project_id
10740           ,p_structure_number        => l_name
10741           ,p_structure_name          => l_name
10742           ,p_calling_flag            => 'WORKPLAN'
10743           ,p_approval_reqd_flag      => l_proj_workplan_attr_rec.WP_APPROVAL_REQD_FLAG
10744           ,p_auto_publish_flag       => l_proj_workplan_attr_rec.WP_AUTO_PUBLISH_FLAG
10745           ,p_approver_source_id      => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_ID
10746           ,p_approver_source_type    => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_TYPE
10747           ,p_default_display_lvl     => l_proj_workplan_attr_rec.WP_DEFAULT_DISPLAY_LVL
10748           ,p_enable_wp_version_flag  => l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG
10749           ,p_auto_pub_upon_creation_flag => l_proj_workplan_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
10750           ,p_auto_sync_txn_date_flag => l_proj_workplan_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
10751           ,p_txn_date_sync_buf_days  => l_proj_workplan_attr_rec.TXN_DATE_SYNC_BUF_DAYS
10752 --LDENG
10753       ,p_lifecycle_version_id         => l_proj_workplan_attr_rec.LIFECYCLE_VERSION_ID
10754       ,p_current_phase_version_id     => l_proj_workplan_attr_rec.CURRENT_PHASE_VERSION_ID
10755 --END LDENG
10756           ,p_progress_cycle_id => l_proj_progress_attr_rec.PROGRESS_CYCLE_ID
10757           ,p_wq_enable_flag => l_proj_progress_attr_rec.wq_enable_flag
10758           ,p_remain_effort_enable_flag => l_proj_progress_attr_rec.remain_effort_enable_flag
10759           ,p_percent_comp_enable_flag => l_proj_progress_attr_rec.percent_comp_enable_flag
10760           ,p_next_progress_update_date => l_proj_progress_attr_rec.next_progress_update_date
10761           ,p_action_set_id       => NULL
10762           ,p_task_weight_basis_code => l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE
10763           ,x_structure_id            => l_structure_id
10764           ,x_return_status           => l_return_status
10765           ,x_msg_count               => l_msg_count
10766           ,x_msg_data                => l_msg_data );
10767 
10768         --Check if there is any error.
10769         l_msg_count := FND_MSG_PUB.count_msg;
10770         IF l_msg_count > 0 THEN
10771           x_msg_count := l_msg_count;
10772           IF x_msg_count = 1 THEN
10773             x_msg_data := l_msg_data;
10774           END IF;
10775           RAISE FND_API.G_EXC_ERROR;
10776         END IF;
10777 
10778         PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
10779         ( p_validate_only         => FND_API.G_FALSE
10780          ,p_structure_id          => l_structure_id
10781          ,x_structure_version_id  => l_structure_version_id
10782          ,x_return_status         => l_return_status
10783          ,x_msg_count             => l_msg_count
10784          ,x_msg_data              => l_msg_data );
10785 
10786         --Check if there is any error.
10787         l_msg_count := FND_MSG_PUB.count_msg;
10788         IF l_msg_count > 0 THEN
10789           x_msg_count := l_msg_count;
10790           IF x_msg_count = 1 THEN
10791             x_msg_data := l_msg_data;
10792           END IF;
10793           RAISE FND_API.G_EXC_ERROR;
10794         END IF;
10795 
10796         PA_TASK_PUB1.Create_Schedule_Version(
10797           p_element_version_id      => l_structure_version_id
10798          ,p_scheduled_start_date    => l_proj_start_date
10799          ,p_scheduled_end_date      => l_proj_completion_date
10800          ,x_pev_schedule_id         => l_pev_schedule_id
10801          ,x_return_status           => l_return_status
10802          ,x_msg_count               => l_msg_count
10803          ,x_msg_data                => l_msg_data
10804         );
10805 
10806         --Check if there is any error.
10807         l_msg_count := FND_MSG_PUB.count_msg;
10808         IF l_msg_count > 0 THEN
10809           x_msg_count := l_msg_count;
10810           IF x_msg_count = 1 THEN
10811             x_msg_data := l_msg_data;
10812           END IF;
10813           RAISE FND_API.G_EXC_ERROR;
10814         END IF;
10815 
10816         --Check versioning flag, project or template
10817         OPEN get_template_flag;
10818         FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10819         CLOSE get_template_flag;
10820 
10821         IF (l_template_flag = 'Y') OR
10822            (l_template_flag = 'N' AND l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y') THEN
10823           l_status_code := 'STRUCTURE_WORKING';
10824           l_baseline_flag := 'N';
10825           l_latest_eff_pub_flag := 'N';
10826           l_effective_date := NULL;
10827         ELSE
10828           l_status_code := 'STRUCTURE_PUBLISHED';
10829           l_baseline_flag := 'Y';
10830           l_latest_eff_pub_flag := 'Y';
10831           l_effective_date := sysdate;
10832         END IF;
10833 
10834         IF (l_template_flag = 'Y') THEN
10835           --update project dates
10836           OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
10837           FETCH get_scheduled_dates into l_get_sch_dates_cur;
10838           CLOSE get_scheduled_dates;
10839 
10840           PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
10841             p_validate_only        => FND_API.G_FALSE
10842            ,p_project_id           => p_project_id
10843            ,p_date_type            => 'SCHEDULED'
10844            ,p_start_date           => l_get_sch_dates_cur.scheduled_start_date
10845            ,p_finish_date          => l_get_sch_dates_cur.scheduled_finish_date
10846            ,p_record_version_number=> l_proj_rec_ver_num
10847            ,x_return_status        => x_return_status
10848            ,x_msg_count            => x_msg_count
10849            ,x_msg_data             => x_msg_data );
10850 
10851           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10852             RAISE FND_API.G_EXC_ERROR;
10853           END IF;
10854         ELSE
10855           IF (l_status_code = 'STRUCTURE_WORKING') THEN
10856             --clear previously set dates
10857             UPDATE PA_PROJECTS_ALL
10858             SET baseline_start_date          = NULL,
10859                 baseline_finish_date         = NULL,
10860                 baseline_duration            = NULL,
10861                 baseline_as_of_date          = NULL,
10862                 scheduled_start_date         = NULL,
10863                 scheduled_finish_date        = NULL,
10864                 scheduled_duration           = NULL,
10865                 scheduled_as_of_date         = NULL
10866             WHERE Project_id = p_project_id;
10867           END IF;
10868         END IF;
10869 
10870         PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
10871         ( p_validate_only               => FND_API.G_FALSE
10872          ,p_structure_version_id        => l_structure_version_id
10873          ,p_structure_version_name      => l_name
10874          ,p_structure_version_desc      => NULL
10875          ,p_effective_date              => l_effective_date
10876          ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
10877          ,p_locked_status_code          => 'UNLOCKED'
10878          ,p_struct_version_status_code  => l_status_code
10879          ,p_baseline_current_flag       => l_baseline_flag
10880          ,p_baseline_original_flag      => 'N'
10881          ,x_pev_structure_id            => l_pev_structure_id
10882          ,x_return_status               => l_return_status
10883          ,x_msg_count                   => l_msg_count
10884          ,x_msg_data                    => l_msg_data );
10885 
10886         --Check if there is any error.
10887         l_msg_count := FND_MSG_PUB.count_msg;
10888         IF l_msg_count > 0 THEN
10889           x_msg_count := l_msg_count;
10890           IF x_msg_count = 1 THEN
10891             x_msg_data := l_msg_data;
10892           END IF;
10893           RAISE FND_API.G_EXC_ERROR;
10894         END IF;
10895 
10896         --end sharing off
10897       END IF;
10898       --END SHARING CODE
10899     END IF;
10900 */
10901 
10902     x_return_status := FND_API.G_RET_STS_SUCCESS;
10903 
10904     IF (p_debug_mode = 'Y') THEN
10905       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr end');
10906     END IF;
10907 
10908   EXCEPTION
10909     WHEN FND_API.G_EXC_ERROR THEN
10910       IF (p_commit = FND_API.G_TRUE) THEN
10911         ROLLBACK to update_struc_setup_attr_pvt;
10912       END IF;
10913       x_msg_count := FND_MSG_PUB.count_msg;
10914       x_return_status := FND_API.G_RET_STS_ERROR;
10915     WHEN OTHERS THEN
10916       IF (p_commit = FND_API.G_TRUE) THEN
10917         ROLLBACK to update_struc_setup_attr_pvt;
10918       END IF;
10919       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10920       x_msg_count := FND_MSG_PUB.count_msg;
10921       --put message
10922       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
10923                               p_procedure_name => 'update_structures_setup_attr',
10924                               p_error_text     => SUBSTRB(SQLERRM,1,240));
10925       RAISE;
10926   END update_structures_setup_old;
10927 
10928   PROCEDURE update_workplan_versioning
10929   ( p_api_version      IN  NUMBER     := 1.0
10930     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
10931     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
10932     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
10933     ,p_validation_level IN  VARCHAR2   := 100
10934     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
10935     ,p_debug_mode       IN  VARCHAR2   := 'N'
10936     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
10937     ,p_proj_element_id  IN  NUMBER
10938     ,p_enable_wp_version_flag IN VARCHAR2
10939     ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10940     ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
10941     ,x_msg_data  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10942   )
10943   IS
10944     l_return_status      VARCHAR2(1);
10945     l_msg_count          NUMBER;
10946     l_msg_data           VARCHAR2(250);
10947     l_ret_stat           VARCHAR2(1);
10948     l_err_msg_code       VARCHAR2(30);
10949     l_keep_structure_ver_id NUMBER;
10950     l_template_flag      VARCHAR2(1);
10951     l_pev_structure_id   NUMBER;
10952     l_struc_ver_attr_rvn NUMBER;
10953     l_del_struc_ver_id   NUMBER;
10954     l_struc_ver_rvn      NUMBER;
10955 
10956     --bug 3125813
10957     l_project_id         NUMBER;
10958     l_struc_ver_id       NUMBER;
10959     --end bug 3125813
10960 
10961     cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
10962       select a.element_version_id
10963         from pa_proj_elem_ver_structure a,
10964              pa_proj_elements b
10965        where b.proj_element_id = c_structure_id
10966          and b.project_id = a.project_id
10967          and b.proj_element_id = a.proj_element_id
10968          and a.status_code = 'STRUCTURE_PUBLISHED'
10969          and a.LATEST_EFF_PUBLISHED_FLAG = 'Y';
10970 
10971     CURSOR get_template_flag IS
10972       select a.template_flag
10973         from pa_projects_all a,
10974              pa_proj_elements b
10975        where a.project_id = b.project_id
10976          and b.proj_element_id = p_proj_element_id;
10977 
10978     cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
10979       select a.PEV_STRUCTURE_ID, a.record_version_number
10980         from pa_proj_elem_ver_structure a,
10981              pa_proj_element_versions b
10982        where b.project_id = a.project_id
10983          and b.element_version_id = c_struc_ver_id
10984          and a.element_version_id = b.element_version_id;
10985 
10986     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
10987       select b.element_version_id, b.record_version_number
10988         from pa_proj_element_versions a,
10989              pa_proj_element_versions b
10990        where a.element_version_id = c_keep_struc_ver_id
10991          and a.project_id = b.project_id
10992          and a.proj_element_id = b.proj_element_id
10993          and b.element_version_id <> c_keep_struc_ver_id
10994          and b.object_type = 'PA_STRUCTURES';
10995 
10996     --bug 3125813
10997     cursor sel_one_struc_ver(c_structure_id NUMBER) IS
10998       select b.project_id, b.element_version_id
10999         from pa_proj_elements a,
11000              pa_proj_element_versions b
11001        where a.proj_element_id = c_structure_id
11002          and a.project_id = b.project_id
11003          and a.proj_element_id = b.proj_element_id;
11004     --end bug 3125813
11005 
11006    --bug 4263266
11007    CURSOR cur_chk_tasks(c_project_id NUMBER, c_structure_version_id NUMBER)
11008    IS
11009      SELECT 'x' from pa_proj_element_versions
11010      WHERE project_id = c_project_id
11011        AND parent_structure_version_id = c_structure_version_id
11012        AND object_type = 'PA_TASKS'
11013      ;
11014    l_dummy     VARCHAR2(1);
11015    --end bug 4263266
11016 
11017    --BUG 4330926
11018    l_curr_wp_ver_flag PA_PROJ_WORKPLAN_ATTR.WP_ENABLE_VERSION_FLAG%TYPE;
11019 
11020    CURSOR get_curr_wp_flag (l_proj_element_id NUMBER, l_project_id NUMBER )IS
11021    SELECT WP_ENABLE_VERSION_FLAG
11022    FROM   PA_PROJ_WORKPLAN_ATTR
11023    WHERE  PROJ_ELEMENT_ID = l_proj_element_id
11024    AND    PROJECT_ID = l_project_id;
11025 
11026    --BUG 4330926
11027 
11028    --bug 4546607
11029    CURSOR sub_projects ( c_project_id NUMBER, c_relationship_type VARCHAR2)
11030    IS
11031         SELECT *
11032           from pa_structures_links_v
11033         where parent_project_id= c_project_id
11034           and relationship_type = c_relationship_type
11035           ;
11036    --end bug 4546607
11037 
11038   BEGIN
11039     IF (p_debug_mode = 'Y') THEN
11040       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_workplan_versioning');
11041     END IF;
11042 
11043     IF (p_commit = FND_API.G_TRUE) THEN
11044       savepoint update_wp_versioning_pvt;
11045     END IF;
11046 
11047     IF (p_debug_mode = 'Y') THEN
11048       pa_debug.debug('Performing validations');
11049     END IF;
11050 
11051     IF (p_enable_wp_version_flag = 'Y') THEN
11052       --enable versioning
11053       PA_PROJECT_STRUCTURE_UTILS.check_versioning_on_ok(
11054         p_proj_element_id
11055        ,l_ret_stat
11056        ,l_err_msg_code);
11057        IF (l_ret_stat = 'N') THEN
11058           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
11059           x_msg_data := l_err_msg_code;
11060           RAISE FND_API.G_EXC_ERROR;
11061        END IF;
11062        --enable versioning
11063        --do not need to do anything
11064 
11065        --bug 3125813
11066        --need to update weightings (if necessary) when enable versiong because
11067        --structure will become published.
11068        OPEN sel_one_struc_ver(p_proj_element_id);
11069        FETCH sel_one_struc_ver into l_project_id, l_struc_ver_id;
11070        CLOSE sel_one_struc_ver;
11071 
11072 --bug 4546607
11073        --Delete all LW links without checking bcoz versioning is always allowed
11074        --for workplan.
11075        FOR sub_projects_rec in sub_projects(l_project_id, 'LW') LOOP
11076            IF PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published(sub_projects_rec.sub_project_id, sub_projects_rec.sub_structure_ver_id) = 'N'
11077            THEN
11078                PA_RELATIONSHIP_PUB.Delete_SubProject_Association(
11079                                         p_object_relationships_id => sub_projects_rec.object_relationship_id,
11080                                         p_record_version_number   => sub_projects_rec.record_version_number,
11081                                         x_return_status => l_return_status,
11082                                         x_msg_count => l_msg_count,
11083                                         x_msg_data => l_msg_data
11084                                         );
11085                --Check if there is any error.
11086                l_msg_count := FND_MSG_PUB.count_msg;
11087                IF l_msg_count > 0 THEN
11088                    x_msg_count := l_msg_count;
11089                  IF x_msg_count = 1 THEN
11090                     x_msg_data := l_msg_data;
11091                  END IF;
11092                  RAISE FND_API.G_EXC_ERROR;
11093               END IF;
11094            END IF;
11095        END LOOP;
11096 --end bug 4546607
11097 
11098        --bug 4263266
11099        --call process wbs updates only if there is atleast one task.
11100       OPEN cur_chk_tasks(l_project_id,l_struc_ver_id);
11101       FETCH cur_chk_tasks INTO l_dummy;
11102       IF cur_chk_tasks%FOUND
11103       THEN
11104        --end bug 4263266
11105        PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP(
11106          p_project_id => l_project_id,
11107          p_structure_version_id => l_struc_ver_id,
11108          x_return_status => l_return_status,
11109          x_msg_count => l_msg_count,
11110          x_msg_data => l_msg_data
11111        );
11112 
11113        --Check if there is any error.
11114        l_msg_count := FND_MSG_PUB.count_msg;
11115        IF l_msg_count > 0 THEN
11116          x_msg_count := l_msg_count;
11117          IF x_msg_count = 1 THEN
11118            x_msg_data := l_msg_data;
11119          END IF;
11120 --         CLOSE sel_other_structure_ver;      --Bug 3793128
11121          RAISE FND_API.G_EXC_ERROR;
11122        END IF;
11123        --end bug 3125813
11124       --bug 4263266
11125       END IF; --if cur_chk_tasks%FOUND
11126       CLOSE cur_chk_tasks;
11127       --end bug 4263266
11128 
11129       --Added by rtarway for BUG 4330926
11130       OPEN  get_template_flag;
11131       FETCH get_template_flag into l_template_flag;
11132       CLOSE get_template_flag;
11133 
11134       OPEN  get_curr_wp_flag(p_proj_element_id ,l_project_id);
11135       FETCH get_curr_wp_flag into l_curr_wp_ver_flag;
11136       CLOSE get_curr_wp_flag;
11137 
11138       IF ( l_curr_wp_ver_flag ='N' AND l_template_flag = 'N'   ) THEN
11139         UPDATE pa_proj_elem_ver_structure
11140         SET    current_working_flag = 'N'
11141         WHERE  element_version_id = l_struc_ver_id
11142         and    project_id = l_project_id;
11143       END IF;
11144       --End Added by rtarway for BUG 4330926
11145 
11146        --end enable versioning
11147     ELSIF (p_enable_wp_version_flag = 'N') THEN
11148       --disable versioning
11149       PA_PROJECT_STRUCTURE_UTILS.check_versioning_off_ok(
11150         p_proj_element_id
11151        ,l_ret_stat
11152        ,l_err_msg_code);
11153       IF (l_ret_stat = 'N') THEN
11154          PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
11155          x_msg_data := l_err_msg_code;
11156          RAISE FND_API.G_EXC_ERROR;
11157       END IF;
11158       --disable versioning
11159       --Applies to project only
11160       OPEN get_template_flag;
11161       FETCH get_template_flag into l_template_flag;
11162       CLOSE get_template_flag;
11163 
11164       IF (l_template_flag = 'N') THEN
11165         --Select version to be kept
11166         OPEN sel_latest_pub_ver(p_proj_element_id);
11167         FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
11168         IF sel_latest_pub_ver%NOTFOUND THEN
11169           l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(p_proj_element_id);
11170         END IF;
11171         CLOSE sel_latest_pub_ver;
11172 
11173         --Delete all versions except the keep version
11174         OPEN sel_other_structure_ver(l_keep_structure_ver_id);
11175         LOOP
11176           FETCH sel_other_structure_ver into l_del_struc_ver_id,
11177                                              l_struc_ver_rvn;
11178           EXIT WHEN sel_other_structure_ver%NOTFOUND;
11179           PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
11180               p_structure_version_id => l_del_struc_ver_id
11181              ,p_record_version_number => l_struc_ver_rvn
11182 	     ,p_calling_from => 'DEL_WP_STRUC_DISABLE_VERSION' ---Added for bug 6023347
11183              ,x_return_status => l_return_status
11184              ,x_msg_count => l_msg_count
11185              ,x_msg_data => l_msg_data
11186           );
11187 
11188           --Check if there is any error.
11189           l_msg_count := FND_MSG_PUB.count_msg;
11190           IF l_msg_count > 0 THEN
11191             x_msg_count := l_msg_count;
11192             IF x_msg_count = 1 THEN
11193               x_msg_data := l_msg_data;
11194             END IF;
11195             CLOSE sel_other_structure_ver;
11196             RAISE FND_API.G_EXC_ERROR;
11197           END IF;
11198 
11199         END LOOP;
11200         CLOSE sel_other_structure_ver;
11201 
11202         --Change status
11203         OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
11204         FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
11205                                           l_struc_ver_attr_rvn;
11206         CLOSE sel_struc_ver_attr_rvn;
11207 
11208         --set status to latest published and baselined
11209 
11210         UPDATE pa_proj_elem_ver_structure
11211         set status_code = 'STRUCTURE_PUBLISHED',
11212             published_date = sysdate,
11213             current_flag = 'Y',
11214             current_baseline_date = sysdate,
11215             current_baseline_person_id = NULL,
11216             latest_eff_published_flag = 'Y',
11217             effective_date = sysdate,
11218             LOCK_STATUS_CODE = 'UNLOCKED',
11219             LOCKED_BY_PERSON_ID = NULL,
11220             LOCKED_DATE = NULL,
11221             record_version_number = record_version_number + 1
11222         where pev_structure_id = l_pev_structure_id;
11223 
11224         --baseline structure
11225         PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
11226                        p_commit => FND_API.G_FALSE,
11227                        p_structure_version_id => l_keep_structure_ver_id,
11228                        x_return_status => l_return_status,
11229                        x_msg_count => l_msg_count,
11230                        x_msg_data => l_msg_data);
11231 
11232         --Check if there is any error.
11233         l_msg_count := FND_MSG_PUB.count_msg;
11234         IF l_msg_count > 0 THEN
11235           x_msg_count := l_msg_count;
11236           IF x_msg_count = 1 THEN
11237             x_msg_data := l_msg_data;
11238           END IF;
11239           RAISE FND_API.G_EXC_ERROR;
11240         END IF;
11241 
11242        END IF; --for project
11243 
11244        --end disable versioning
11245     END IF;
11246 
11247     x_return_status := FND_API.G_RET_STS_SUCCESS;
11248 
11249     IF (p_debug_mode = 'Y') THEN
11250       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_workplan_versioning end');
11251     END IF;
11252 
11253   EXCEPTION
11254     WHEN FND_API.G_EXC_ERROR THEN
11255       IF (p_commit = FND_API.G_TRUE) THEN
11256         ROLLBACK to update_wp_versioning_pvt;
11257       END IF;
11258       x_msg_count := FND_MSG_PUB.count_msg;
11259       x_return_status := FND_API.G_RET_STS_ERROR;
11260     WHEN OTHERS THEN
11261       IF (p_commit = FND_API.G_TRUE) THEN
11262         ROLLBACK to update_wp_versioning_pvt;
11263       END IF;
11264       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11265       x_msg_count := FND_MSG_PUB.count_msg;
11266       --put message
11267       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
11268                               p_procedure_name => 'update_workplan_versioning',
11269                               p_error_text     => SUBSTRB(SQLERRM,1,240));
11270       RAISE;
11271   END update_workplan_versioning;
11272 
11273 
11274   PROCEDURE update_wp_calendar
11275   (
11276      p_api_version      IN  NUMBER     := 1.0
11277     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
11278     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
11279     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
11280     ,p_validation_level IN  VARCHAR2   := 100
11281     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
11282     ,p_debug_mode       IN  VARCHAR2   := 'N'
11283     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11284     ,p_project_id       IN  NUMBER
11285     ,p_calendar_id      IN  NUMBER
11286     ,x_return_status    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11287     ,x_msg_count        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11288     ,x_msg_data         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11289   )
11290   IS
11291     l_opt                     VARCHAR2(1);
11292 
11293     cursor get_wp_versions IS
11294       select ppevs.element_version_id
11295         from pa_proj_elem_ver_structure ppevs,
11296              pa_proj_elements ppe,
11297              pa_proj_structure_types ppst,
11298              pa_structure_types pst
11299        where ppevs.status_code <> 'STRUCTURE_PUBLISHED'
11300          and ppevs.project_id = ppe.project_id
11301          and ppevs.proj_element_id = ppe.proj_element_id
11302          and ppe.object_type = 'PA_STRUCTURES'
11303          and ppe.proj_element_id = ppst.proj_element_id
11304          and ppst.structure_type_id = pst.structure_type_id
11305          and pst.structure_type_class_code = 'WORKPLAN'
11306          and ppe.project_id = p_project_id
11307          and '1' = l_opt
11308       union all
11309       select ppevs.element_version_id
11310         from pa_proj_elem_ver_structure ppevs,
11311              pa_proj_elements ppe,
11312              pa_proj_structure_types ppst,
11313              pa_structure_types pst
11314        where ppevs.status_code = 'STRUCTURE_PUBLISHED'
11315          and ppevs.project_id = ppe.project_id
11316          and ppevs.proj_element_id = ppe.proj_element_id
11317          and ppe.object_type = 'PA_STRUCTURES'
11318          and ppe.proj_element_id = ppst.proj_element_id
11319          and ppst.structure_type_id = pst.structure_type_id
11320          and pst.structure_type_class_code = 'WORKPLAN'
11321          and ppe.project_id = p_project_id
11322          and '2' = l_opt;
11323 
11324     l_structure_version_id    NUMBER;
11325     l_return_status           VARCHAR2(1);
11326     l_msg_count               NUMBER;
11327     l_msg_data                VARCHAR2(250);
11328     l_sch_hours                   NUMBER;
11329     l_bsl_hours                   NUMBER;
11330     l_act_hours                   NUMBER;
11331     l_days                    NUMBER;
11332     l_start_date              DATE;
11333     l_finish_date             DATE;
11334     l_template_flag           VARCHAR2(1);
11335 
11336     --Bug 3010538.
11337     l_weight_basis            pa_proj_progress_attr.task_weight_basis_code%TYPE;
11338 
11339     CURSOR c1 IS
11340       select template_flag
11341         from pa_projects_all where project_id = p_project_id;
11342 
11343     CURSOR c2 IS
11344       select SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE
11345         from pa_projects_all where project_id = p_project_id;
11346 
11347     CURSOR c3 IS
11348       select ACTUAL_START_DATE, ACTUAL_FINISH_DATE
11349         from pa_projects_all where project_id = p_project_id;
11350 
11351     CURSOR c4 IS
11352       select BASELINE_START_DATE, BASELINE_FINISH_DATE
11353         from pa_projects_all where project_id = p_project_id;
11354 --
11355     l_sch_dur   NUMBER;          -- Bug 3657808
11356     l_act_dur   NUMBER;          -- Bug 3657808
11357     l_bsl_dur   NUMBER;          -- Bug 3657808
11358 --
11359   BEGIN
11360     IF (p_debug_mode = 'Y') THEN
11361       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_WP_CALENDAR BEGIN');
11362     END IF;
11363 
11364     IF (p_commit = FND_API.G_TRUE) THEN
11365       savepoint update_wp_calendar;
11366     END IF;
11367 
11368     OPEN c1;
11369     FETCH c1 into l_template_flag;
11370     CLOSE c1;
11371 
11372     IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id) = 'N') THEN
11373       -- Bug 3010538. Task Weighting enhancement.
11374       -- For a template even if the versioning flag is enabled, we will have only a
11375       -- working version and not a published version. Hence setting the option to 1 always
11376       -- in case of a template so that the working version is queried.
11377       IF nvl(l_template_flag,'N') = 'Y' THEN
11378         l_opt := '1';
11379       ELSE
11380         l_opt := '2';
11381       END IF;
11382       --need to modify
11383       --SCHEDULED_DURATION (template and project)
11384       --BASELINE_DURATION (project only)
11385       --ACTUAL_DURATION   (project only)
11386       OPEN c2;
11387       FETCH c2 into l_start_date, l_finish_date;
11388       CLOSE c2;
11389 
11390       IF (l_start_date IS NOT NULL AND
11391           l_finish_date IS NOT NULL) THEN
11392          -- Bug 3657808 Remove duration calculation using calendar
11393      --Storing in days
11394           l_sch_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11395         /*PA_DURATION_UTILS.get_duration(
11396           p_calendar_id => p_calendar_id
11397          ,p_start_date => l_start_date
11398          ,p_end_date => l_finish_date
11399          ,x_duration_days => l_days
11400          ,x_duration_hours => l_sch_hours
11401          ,x_return_status => l_return_status
11402          ,x_msg_count => l_msg_count
11403          ,x_msg_data => l_msg_data
11404         );
11405 
11406         If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11407           x_msg_count := FND_MSG_PUB.count_msg;
11408           if x_msg_count = 1 then
11409             x_msg_data := l_msg_data;
11410           end if;
11411           raise FND_API.G_EXC_ERROR;
11412         END IF;*/
11413 
11414       END IF;
11415 
11416       IF (l_template_flag = 'N') THEN
11417         OPEN c3;
11418         FETCH c3 into l_start_date, l_finish_date;
11419         CLOSE c3;
11420 
11421         IF (l_start_date IS NOT NULL AND
11422             l_finish_date IS NOT NULL) THEN
11423          -- Bug 3657808 Remove duration calculation using calendar
11424      --Storing in days
11425           l_act_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11426           /*PA_DURATION_UTILS.get_duration(
11427             p_calendar_id => p_calendar_id
11428            ,p_start_date => l_start_date
11429            ,p_end_date => l_finish_date
11430            ,x_duration_days => l_days
11431            ,x_duration_hours => l_act_hours
11432            ,x_return_status => l_return_status
11433            ,x_msg_count => l_msg_count
11434            ,x_msg_data => l_msg_data
11435           );
11436 
11437          If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11438             x_msg_count := FND_MSG_PUB.count_msg;
11439             if x_msg_count = 1 then
11440               x_msg_data := l_msg_data;
11441             end if;
11442             raise FND_API.G_EXC_ERROR;
11443           END IF;*/
11444         END IF;
11445 
11446 
11447         OPEN c4;
11448         FETCH c4 into l_start_date, l_finish_date;
11449         CLOSE c4;
11450 
11451         IF (l_start_date IS NOT NULL AND
11452             l_finish_date IS NOT NULL) THEN
11453          -- Bug 3657808 Remove duration calculation using calendar
11454      --Storing in days
11455           l_bsl_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11456           /*PA_DURATION_UTILS.get_duration(
11457             p_calendar_id => p_calendar_id
11458            ,p_start_date => l_start_date
11459            ,p_end_date => l_finish_date
11460            ,x_duration_days => l_days
11461            ,x_duration_hours => l_bsl_hours
11462            ,x_return_status => l_return_status
11463            ,x_msg_count => l_msg_count
11464            ,x_msg_data => l_msg_data
11465           );
11466 
11467          If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11468             x_msg_count := FND_MSG_PUB.count_msg;
11469             if x_msg_count = 1 then
11470               x_msg_data := l_msg_data;
11471             end if;
11472             raise FND_API.G_EXC_ERROR;
11473           END IF;*/
11474         END IF;
11475 
11476 --hsiu: removed record version number for Forms changes
11477         update pa_projects_all
11478            /*set SCHEDULED_DURATION = l_sch_hours,
11479                BASELINE_DURATION = l_bsl_hours,
11480                ACTUAL_DURATION = l_act_hours*/
11481            set SCHEDULED_DURATION = l_sch_dur,
11482                BASELINE_DURATION = l_bsl_dur,
11483                ACTUAL_DURATION = l_act_dur
11484          where project_id = p_project_id;
11485 
11486       END IF;
11487     ELSE
11488       l_opt := '1';
11489 
11490       IF (l_template_flag =  'Y') THEN
11491         OPEN c2;
11492         FETCH c2 into l_start_date, l_finish_date;
11493         CLOSE c2;
11494 
11495         IF (l_start_date IS NOT NULL AND
11496             l_finish_date IS NOT NULL) THEN
11497          -- Bug 3657808 Remove duration calculation using calendar
11498      --Storing in days
11499           l_sch_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11500           /*PA_DURATION_UTILS.get_duration(
11501             p_calendar_id => p_calendar_id
11502            ,p_start_date => l_start_date
11503            ,p_end_date => l_finish_date
11504            ,x_duration_days => l_days
11505            ,x_duration_hours => l_sch_hours
11506            ,x_return_status => l_return_status
11507            ,x_msg_count => l_msg_count
11508            ,x_msg_data => l_msg_data
11509           );
11510 
11511          If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11512             x_msg_count := FND_MSG_PUB.count_msg;
11513             if x_msg_count = 1 then
11514               x_msg_data := l_msg_data;
11515             end if;
11516             raise FND_API.G_EXC_ERROR;
11517           END IF;*/
11518         END IF;
11519 
11520 --hsiu: removed record version number for Forms changes
11521         update pa_projects_all
11522           -- set SCHEDULED_DURATION = l_sch_hours
11523            set SCHEDULED_DURATION = l_sch_dur
11524          where project_id = p_project_id;
11525 
11526       END IF;
11527     END IF;
11528 
11529     -- Bug 3010538. Task Weighting enhancement.
11530     -- Obtain the task weighting basis for the project.
11531     l_weight_basis  := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
11532 
11533 --get all working versions
11534     OPEN get_wp_versions;
11535     LOOP
11536       FETCH get_wp_versions into l_structure_version_id;
11537       EXIT WHEN get_wp_versions%NOTFOUND;
11538 
11539       -- Bug 3010538. Task Weighting enhancement.
11540       -- The weightage needs to be recalculated for the structure version(s), if the task
11541       -- weighting basis is DURATION. Recalculation has to be done for the only version(that
11542       -- is published) if versioning is disabled and for all the non published versions when
11543       -- versioning is enabled in case of a project and for the working version in case of a
11544       -- template.
11545       IF l_weight_basis = 'DURATION' THEN
11546           -- Always call this API as the cursor would have taken care to select the appropriate
11547           -- structure version for processing.
11548                pa_proj_task_struc_pub.set_update_wbs_flag(
11549                      p_project_id            => p_project_id
11550                     ,p_structure_version_id  => l_structure_version_id
11551                     ,x_return_status         => l_return_status
11552                     ,x_msg_count             => l_msg_count
11553                     ,x_msg_data              => l_msg_data
11554                );
11555 
11556                 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11557                   x_msg_count := FND_MSG_PUB.count_msg;
11558                   if x_msg_count = 1 then
11559                     x_msg_data := l_msg_data;
11560                   end if;
11561                   raise FND_API.G_EXC_ERROR;
11562                 END IF;
11563       END IF;
11564 
11565       PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION(
11566          p_structure_version_id => l_structure_version_id
11567         ,p_calendar_id          => p_calendar_id
11568         ,x_return_status        => l_return_status
11569         ,x_msg_count            => l_msg_count
11570         ,x_msg_data             => l_msg_data
11571       );
11572 
11573       If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11574         x_msg_count := FND_MSG_PUB.count_msg;
11575         if x_msg_count = 1 then
11576           x_msg_data := l_msg_data;
11577         end if;
11578         raise FND_API.G_EXC_ERROR;
11579       END IF;
11580 
11581 --update duration for all working structure versions
11582     END LOOP;
11583     CLOSE get_wp_versions;
11584 
11585     x_return_status := FND_API.G_RET_STS_SUCCESS;
11586 
11587     IF (p_debug_mode = 'Y') THEN
11588       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_WP_CALENDAR end');
11589     END IF;
11590 
11591   EXCEPTION
11592     WHEN FND_API.G_EXC_ERROR THEN
11593       IF (p_commit = FND_API.G_TRUE) THEN
11594         ROLLBACK to update_wp_calendar;
11595       END IF;
11596       x_msg_count := FND_MSG_PUB.count_msg;
11597       x_return_status := FND_API.G_RET_STS_ERROR;
11598     WHEN OTHERS THEN
11599       IF (p_commit = FND_API.G_TRUE) THEN
11600         ROLLBACK to update_wp_calendar;
11601       END IF;
11602       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11603       x_msg_count := FND_MSG_PUB.count_msg;
11604       --put message
11605       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
11606                               p_procedure_name => 'Update_wp_calendar',
11607                               p_error_text     => SUBSTRB(SQLERRM,1,240));
11608       RAISE;
11609   END update_wp_calendar;
11610 
11611   PROCEDURE update_all_wp_calendar
11612   (
11613      p_api_version      IN  NUMBER     := 1.0
11614     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
11615     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
11616     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
11617     ,p_validation_level IN  VARCHAR2   := 100
11618     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
11619     ,p_debug_mode       IN  VARCHAR2   := 'N'
11620     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11621     ,p_calendar_id      IN  NUMBER
11622     ,x_return_status    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11623     ,x_msg_count        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11624     ,x_msg_data         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11625   )
11626   is
11627     Cursor c_calendar_projects
11628     IS
11629     Select project_id
11630     from pa_projects_all
11631     where calendar_id = p_calendar_id;
11632   BEGIN
11633     IF (p_debug_mode = 'Y') THEN
11634       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_ALL_WP_CALENDAR BEGIN');
11635     END IF;
11636 
11637     IF (p_commit = FND_API.G_TRUE) THEN
11638       savepoint update_all_wp_calendar;
11639     END IF;
11640 
11641     FOR c_rec IN c_calendar_projects
11642     LOOP
11643         PA_PROJECT_STRUCTURE_PVT1.update_wp_calendar
11644                (
11645                 p_api_version       => p_api_version
11646                 ,p_init_msg_list    => p_init_msg_list
11647                 ,p_commit           => p_commit
11648                 ,p_validate_only    => p_validate_only
11649                 ,p_validation_level => p_validation_level
11650                 ,p_calling_module   => p_calling_module
11651                 ,p_debug_mode       => p_debug_mode
11652                 ,p_max_msg_count    => p_max_msg_count
11653                 ,p_project_id       => c_rec.project_id
11654                 ,p_calendar_id      => p_calendar_id
11655                 ,x_return_status    => x_return_status
11656                 ,x_msg_count        => x_msg_count
11657                 ,x_msg_data         => x_msg_data
11658                 );
11659    END LOOP;
11660    x_return_status := FND_API.G_RET_STS_SUCCESS;
11661 
11662     IF (p_debug_mode = 'Y') THEN
11663       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_ALL_WP_CALENDAR END');
11664     END IF;
11665 
11666   EXCEPTION
11667       WHEN OTHERS THEN
11668         IF (p_commit = FND_API.G_TRUE) THEN
11669           ROLLBACK to update_all_wp_calendar;
11670         END IF;
11671         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11672         x_msg_count := FND_MSG_PUB.count_msg;
11673         --put message
11674         fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
11675                               p_procedure_name => 'Update_all_wp_calendar',
11676                               p_error_text     => SUBSTRB(SQLERRM,1,240));
11677       RAISE;
11678   END UPDATE_ALL_WP_CALENDAR;
11679 
11680 
11681   PROCEDURE RECALC_STRUC_VER_DURATION(
11682      p_api_version      IN  NUMBER     := 1.0
11683     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
11684     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
11685     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
11686     ,p_validation_level IN  VARCHAR2   := 100
11687     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
11688     ,p_debug_mode       IN  VARCHAR2   := 'N'
11689     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11690     ,p_structure_version_id IN NUMBER
11691     ,p_calendar_id      IN  NUMBER
11692     ,x_return_status    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11693     ,x_msg_count        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11694     ,x_msg_data         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11695   )
11696   IS
11697     CURSOR get_dates IS
11698       select ppvsch.pev_schedule_id,
11699              ppvsch.scheduled_start_date, ppvsch.scheduled_finish_date,
11700              ppvsch.estimated_start_date, ppvsch.estimated_finish_date,
11701              ppvsch.actual_start_date, ppvsch.actual_finish_date
11702         from pa_proj_elem_ver_schedule ppvsch,
11703              pa_proj_element_versions ppv
11704        where ppv.parent_structure_version_id = p_structure_version_id
11705          and ppv.project_id = ppvsch.project_id
11706          and ppv.proj_element_id = ppvsch.proj_element_id
11707          and ppv.element_version_id = ppvsch.element_version_id;
11708 
11709     l_pev_schedule_id       NUMBER;
11710     l_days                  NUMBER;
11711     l_hours                 NUMBER;
11712     l_scheduled_start_date  DATE;
11713     l_scheduled_finish_date DATE;
11714     l_estimated_start_date  DATE;
11715     l_estimated_finish_date DATE;
11716     l_actual_start_date     DATE;
11717     l_actual_finish_date    DATE;
11718 
11719     l_return_status         VARCHAR2(1);
11720     l_msg_count             NUMBER;
11721     l_msg_data              VARCHAR2(250);
11722     l_act_days              NUMBER;                -- Bug 3657808
11723     l_sch_days              NUMBER;                -- Bug 3657808
11724     l_est_days              NUMBER;                -- Bug 3657808
11725   BEGIN
11726 
11727     IF (p_debug_mode = 'Y') THEN
11728       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION BEGIN');
11729     END IF;
11730 
11731     IF (p_commit = FND_API.G_TRUE) THEN
11732       savepoint RECALC_STRUC_VER_DURATION;
11733     END IF;
11734 
11735     OPEN get_dates;
11736     LOOP
11737       FETCH get_dates INTO l_pev_schedule_id,
11738                            l_scheduled_start_date,
11739                            l_scheduled_finish_date,
11740                            l_estimated_start_date,
11741                            l_estimated_finish_date,
11742                            l_actual_start_date,
11743                            l_actual_finish_date;
11744       EXIT WHEN get_dates%NOTFOUND;
11745 
11746 --Update calendar id
11747       UPDATE PA_PROJ_ELEM_VER_SCHEDULE
11748          SET calendar_id = p_calendar_id
11749        WHERE pev_schedule_id = l_pev_schedule_id;
11750 
11751 --Update schedule dates
11752       IF (l_scheduled_start_date IS NOT NULL AND
11753           l_scheduled_finish_date IS NOT NULL) THEN
11754         -- Bug 3657808 Remove duration calculation using calendar
11755         --Storing in days
11756         l_sch_days:=trunc(l_scheduled_finish_date) - trunc(l_scheduled_start_date) + 1;
11757         /*PA_DURATION_UTILS.get_duration(
11758           p_calendar_id => p_calendar_id
11759          ,p_start_date => l_scheduled_start_date
11760          ,p_end_date => l_scheduled_finish_date
11761          ,x_duration_days => l_days
11762          ,x_duration_hours => l_hours
11763          ,x_return_status => l_return_status
11764          ,x_msg_count => l_msg_count
11765          ,x_msg_data => l_msg_data
11766         );
11767 
11768         If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11769           x_msg_count := FND_MSG_PUB.count_msg;
11770           if x_msg_count = 1 then
11771             x_msg_data := l_msg_data;
11772           end if;
11773           raise FND_API.G_EXC_ERROR;
11774         END IF;*/
11775 
11776         UPDATE PA_PROJ_ELEM_VER_SCHEDULE
11777            --SET DURATION = l_hours
11778            SET DURATION = l_sch_days
11779          WHERE pev_schedule_id = l_pev_schedule_id;
11780       END IF;
11781 
11782 --Update estimated dates
11783       IF (l_estimated_start_date IS NOT NULL AND
11784           l_estimated_finish_date IS NOT NULL) THEN
11785         -- Bug 3657808 Remove duration calculation using calendar
11786         --Storing in days
11787     /* Commented call to API for 4210634 - It was missed during code fix for bug 3657808 */
11788         l_est_days:=trunc(l_estimated_finish_date) - trunc(l_estimated_start_date) + 1;
11789         /* PA_DURATION_UTILS.get_duration(
11790           p_calendar_id => p_calendar_id
11791          ,p_start_date => l_estimated_start_date
11792          ,p_end_date => l_estimated_finish_date
11793          ,x_duration_days => l_days
11794          ,x_duration_hours => l_hours
11795          ,x_return_status => l_return_status
11796          ,x_msg_count => l_msg_count
11797          ,x_msg_data => l_msg_data
11798         );
11799 
11800         If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11801           x_msg_count := FND_MSG_PUB.count_msg;
11802           if x_msg_count = 1 then
11803             x_msg_data := l_msg_data;
11804           end if;
11805           raise FND_API.G_EXC_ERROR;
11806         END IF; */
11807 
11808         UPDATE PA_PROJ_ELEM_VER_SCHEDULE
11809            --SET ESTIMATED_DURATION = l_hours
11810            SET ESTIMATED_DURATION = l_est_days
11811          WHERE pev_schedule_id = l_pev_schedule_id;
11812       END IF;
11813 
11814 --Update actual dates
11815       IF (l_actual_start_date IS NOT NULL AND
11816           l_actual_finish_date IS NOT NULL) THEN
11817         -- Bug 3657808 Remove duration calculation using calendar
11818         --Storing in days
11819         l_act_days:=trunc(l_actual_finish_date) - trunc(l_actual_start_date) + 1;
11820         /*PA_DURATION_UTILS.get_duration(
11821           p_calendar_id => p_calendar_id
11822          ,p_start_date => l_actual_start_date
11823          ,p_end_date => l_actual_finish_date
11824          ,x_duration_days => l_days
11825          ,x_duration_hours => l_hours
11826          ,x_return_status => l_return_status
11827          ,x_msg_count => l_msg_count
11828          ,x_msg_data => l_msg_data
11829         );
11830 
11831         If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11832           x_msg_count := FND_MSG_PUB.count_msg;
11833           if x_msg_count = 1 then
11834             x_msg_data := l_msg_data;
11835           end if;
11836           raise FND_API.G_EXC_ERROR;
11837         END IF;*/
11838 
11839         UPDATE PA_PROJ_ELEM_VER_SCHEDULE
11840 --           SET ACTUAL_DURATION = l_hours
11841            SET ACTUAL_DURATION = l_act_days
11842          WHERE pev_schedule_id = l_pev_schedule_id;
11843       END IF;
11844 
11845     END LOOP;
11846     CLOSE get_dates;
11847 
11848     IF (p_debug_mode = 'Y') THEN
11849       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION end');
11850     END IF;
11851 
11852   EXCEPTION
11853     WHEN FND_API.G_EXC_ERROR THEN
11854       IF (p_commit = FND_API.G_TRUE) THEN
11855         ROLLBACK to RECALC_STRUC_VER_DURATION;
11856       END IF;
11857       x_msg_count := FND_MSG_PUB.count_msg;
11858       x_return_status := FND_API.G_RET_STS_ERROR;
11859     WHEN OTHERS THEN
11860       IF (p_commit = FND_API.G_TRUE) THEN
11861         ROLLBACK to RECALC_STRUC_VER_DURATION;
11862       END IF;
11863       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11864       x_msg_count := FND_MSG_PUB.count_msg;
11865       --put message
11866       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
11867                               p_procedure_name => 'RECALC_STRUC_VER_DURATION',
11868                               p_error_text     => SUBSTRB(SQLERRM,1,240));
11869       RAISE;
11870   END RECALC_STRUC_VER_DURATION;
11871 
11872 
11873   procedure Delete_Struc_Ver_Wo_Val
11874   (
11875    p_api_version                       IN  NUMBER      := 1.0
11876    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
11877    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
11878    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
11879    ,p_validation_level                  IN  VARCHAR2    := 100
11880    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
11881    ,p_debug_mode                        IN  VARCHAR2    := 'N'
11882    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11883    ,p_structure_version_id              IN  NUMBER
11884    ,p_record_version_number             IN  NUMBER
11885    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11886    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
11887    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11888   )
11889   IS
11890     l_api_name                      CONSTANT VARCHAR(30) := 'Delete_Struc_Ver_Wo_Val';
11891     l_api_version                   CONSTANT NUMBER      := 1.0;
11892 
11893     l_return_status                 VARCHAR2(1);
11894     l_msg_count                     NUMBER;
11895     l_msg_data                      VARCHAR2(250);
11896     l_data                          VARCHAR2(250);
11897     l_msg_index_out                 NUMBER;
11898 
11899     l_dummy                VARCHAR2(1);
11900     l_error_message_code   VARCHAR2(250);
11901 
11902     CURSOR get_struc_ver IS
11903            select pev.project_id, pe.proj_element_id, pe.record_version_number,
11904                   pev.element_version_id, pev.record_version_number,
11905                   pevs.pev_structure_id, pevs.record_version_number,
11906                   pevsh.pev_schedule_id, pevsh.record_version_number,
11907                   pevsh.rowid
11908              from pa_proj_elements pe,
11909                   pa_proj_element_versions pev,
11910                   pa_proj_elem_ver_structure pevs,
11911                   pa_proj_elem_ver_schedule pevsh
11912             where pev.element_version_id = p_structure_version_id and
11913                   pev.proj_element_id = pe.proj_element_id and
11914                   pev.project_id = pevs.project_id and
11915                   pev.element_version_id = pevs.element_version_id and
11916                   pev.project_id = pevsh.project_id (+) and
11917                   pev.element_version_id = pevsh.element_version_id (+);
11918 
11919     CURSOR is_last_version(p_structure_id NUMBER) IS
11920            select 'N'
11921              from pa_proj_element_versions
11922             where proj_element_id = p_structure_id;
11923 
11924     CURSOR get_top_tasks IS
11925            select v.element_version_id
11926              from pa_proj_element_versions v,
11927                   pa_object_relationships r
11928             where v.element_version_id = r.object_id_to1
11929               and r.object_id_from1 = p_structure_version_id
11930               and r.object_type_from = 'PA_STRUCTURES';
11931 
11932     cursor sel_wp_attr(c_proj_element_id NUMBER) IS
11933       select record_version_number
11934         from pa_proj_workplan_attr
11935        where proj_element_id = c_proj_element_id;
11936 
11937     l_project_id          PA_PROJ_ELEMENT_VERSIONS.PROJECT_ID%TYPE;
11938     l_proj_element_id     PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
11939     l_pe_rvn              PA_PROJ_ELEMENTS.RECORD_VERSION_NUMBER%TYPE;
11940     l_element_version_id  PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
11941     l_pev_rvn             PA_PROJ_ELEMENT_VERSIONS.RECORD_VERSION_NUMBER%TYPE;
11942     l_pev_structure_id    PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
11943     l_pevs_rvn            PA_PROJ_ELEM_VER_STRUCTURE.RECORD_VERSION_NUMBER%TYPE;
11944     l_pev_schedule_id     PA_PROJ_ELEM_VER_SCHEDULE.PEV_SCHEDULE_ID%TYPE;
11945     l_pevsh_rvn           PA_PROJ_ELEM_VER_SCHEDULE.RECORD_VERSION_NUMBER%TYPE;
11946     l_pevsh_rowid         VARCHAR2(255);
11947 
11948     l_task_version_id     PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
11949     l_task_rvn            PA_PROJ_ELEMENT_VERSIONS.RECORD_VERSION_NUMBER%TYPE;
11950     l_wp_attr_rvn         PA_PROJ_WORKPLAN_ATTR.RECORD_VERSION_NUMBER%TYPE;
11951 
11952     l_parent_struc_ver_id PA_PROJ_ELEMENT_VERSIONS.PARENT_STRUCTURE_VERSION_ID%TYPE;
11953 
11954   BEGIN
11955     IF (p_debug_mode = 'Y') THEN
11956       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL begin');
11957     END IF;
11958 
11959     IF (p_commit = FND_API.G_TRUE) THEN
11960       savepoint delete_struc_ver_wo_val;
11961     END IF;
11962 
11963     IF (p_debug_mode = 'Y') THEN
11964       pa_debug.debug('get structure version_info');
11965     END IF;
11966 
11967     --Delete logic
11968     --Get structure version information
11969     OPEN get_struc_ver;
11970     FETCH get_struc_ver INTO l_project_id,
11971                              l_proj_element_id,
11972                              l_pe_rvn,
11973                              l_element_version_id,
11974                              l_pev_rvn,
11975                              l_pev_structure_id,
11976                              l_pevs_rvn,
11977                              l_pev_schedule_id,
11978                              l_pevsh_rvn,
11979                              l_pevsh_rowid;
11980     IF (get_struc_ver%NOTFOUND) THEN
11981       CLOSE get_struc_ver;
11982       RAISE NO_DATA_FOUND;
11983     END IF;
11984     CLOSE get_struc_ver;
11985 
11986     --NO ERROR, call delete_task_ver_wo_val
11987     --select all top level tasks
11988     OPEN get_top_tasks;
11989     LOOP
11990       FETCH get_top_tasks into l_task_version_id;
11991       EXIT WHEN get_top_tasks%NOTFOUND;
11992       IF (p_debug_mode = 'Y') THEN
11993         pa_debug.debug('deleting task version '||to_char(l_task_version_id));
11994       END IF;
11995 
11996       --Get record version number for task, as it will change everytime
11997       --a task is deleted.
11998       select record_version_number, parent_structure_version_id
11999       into l_task_rvn, l_parent_struc_ver_id
12000       from pa_proj_element_versions
12001       where element_version_id = l_task_version_id;
12002 
12003 
12004       PA_TASK_PVT1.DELETE_TASK_VER_WO_VAL(p_commit => 'N',
12005                                        p_debug_mode => p_debug_mode,
12006                                        p_calling_module => 'DEL_STRUCT',
12007                                        p_structure_version_id => l_parent_struc_ver_id,
12008                                        p_task_version_id => l_task_version_id,
12009                                        p_record_version_number => l_task_rvn,
12010                                        x_return_status => l_return_status,
12011                                        x_msg_count => l_msg_count,
12012                                        x_msg_data => l_msg_data);
12013 
12014       IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12015         x_msg_count := FND_MSG_PUB.count_msg;
12016         IF x_msg_count = 1 then
12017            pa_interface_utils_pub.get_messages
12018            (p_encoded        => FND_API.G_TRUE,
12019             p_msg_index      => 1,
12020             p_data           => l_data,
12021             p_msg_index_out  => l_msg_index_out);
12022            x_msg_data := l_data;
12023         END IF;
12024         CLOSE get_top_tasks;
12025         raise FND_API.G_EXC_ERROR;
12026       END IF;
12027 
12028     END LOOP;
12029     CLOSE get_top_tasks;
12030 
12031     IF (p_debug_mode = 'Y') THEN
12032       pa_debug.debug('done deleting tasks');
12033     END IF;
12034     --If all tasks are deleted, delete schedule if workplan
12035     --Check if this is workplan
12036     If ('Y' = PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN')) THEN
12037        --Structure type exists. Delete from schedule table
12038        IF (p_debug_mode = 'Y') THEN
12039          pa_debug.debug('WORKPLAN type');
12040        END IF;
12041        PA_PROJ_ELEMENT_SCH_PKG.Delete_Row(l_pevsh_rowid);
12042 
12043        --bug 4172646
12044        --remove the code to call PA_FIN_PLAN_PVT.delete_wp_budget_versions as its also called from
12045        --PA_PROJECT_STRUCTURE_PVT1.delete_structure_versions API.
12046        --
12047 
12048     END IF;
12049 
12050     --check for errors.
12051     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12052       x_msg_count := FND_MSG_PUB.count_msg;
12053       IF x_msg_count = 1 then
12054          pa_interface_utils_pub.get_messages
12055          (p_encoded        => FND_API.G_TRUE,
12056           p_msg_index      => 1,
12057 --          p_msg_count      => l_msg_count,
12058 --          p_msg_data       => l_msg_data,
12059           p_data           => l_data,
12060           p_msg_index_out  => l_msg_index_out);
12061          x_msg_data := l_data;
12062       END IF;
12063       raise FND_API.G_EXC_ERROR;
12064     END IF;
12065 
12066     IF (p_debug_mode = 'Y') THEN
12067       pa_debug.debug('del structure version attr');
12068     END IF;
12069     --Delete structure version attribute
12070     PA_PROJECT_STRUCTURE_PVT1.Delete_Structure_Version_Attr(
12071                         p_commit => p_commit,
12072                         p_debug_mode => p_debug_mode,
12073                         p_pev_structure_id => l_pev_structure_id,
12074                         p_record_version_number => l_pevs_rvn,
12075                         x_return_status => l_return_status,
12076                         x_msg_count => l_msg_count,
12077                         x_msg_data => l_msg_data);
12078     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12079       x_msg_count := FND_MSG_PUB.count_msg;
12080       IF x_msg_count = 1 then
12081          pa_interface_utils_pub.get_messages
12082          (p_encoded        => FND_API.G_TRUE,
12083           p_msg_index      => 1,
12084 --          p_msg_count      => l_msg_count,
12085 --          p_msg_data       => l_msg_data,
12086           p_data           => l_data,
12087           p_msg_index_out  => l_msg_index_out);
12088          x_msg_data := l_data;
12089       END IF;
12090       raise FND_API.G_EXC_ERROR;
12091     END IF;
12092 
12093 
12094     IF (p_debug_mode = 'Y') THEN
12095       pa_debug.debug('del structure version');
12096     END IF;
12097 
12098     --Delete structure version
12099     PA_PROJECT_STRUCTURE_PVT1.Delete_Structure_Version(
12100                         p_commit => p_commit,
12101                         p_debug_mode => p_debug_mode,
12102                         p_structure_version_id => l_element_version_id,
12103                         p_record_version_number => l_pev_rvn,
12104                         x_return_status => l_return_status,
12105                         x_msg_count => l_msg_count,
12106                         x_msg_data => l_msg_data);
12107 
12108     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12109       x_msg_count := FND_MSG_PUB.count_msg;
12110       IF x_msg_count = 1 then
12111          pa_interface_utils_pub.get_messages
12112          (p_encoded        => FND_API.G_TRUE,
12113           p_msg_index      => 1,
12114 --          p_msg_count      => l_msg_count,
12115 --          p_msg_data       => l_msg_data,
12116           p_data           => l_data,
12117           p_msg_index_out  => l_msg_index_out);
12118          x_msg_data := l_data;
12119       END IF;
12120       raise FND_API.G_EXC_ERROR;
12121     END IF;
12122 
12123 
12124     --Delete structure if this is the last version
12125     OPEN is_last_version(l_proj_element_id);
12126     FETCH is_last_version into l_dummy;
12127     IF is_last_version%NOTFOUND THEN
12128       --We are deleting the last version. Delete structure
12129       IF (p_debug_mode = 'Y') THEN
12130         pa_debug.debug('delete non-versioned structure');
12131       END IF;
12132 
12133 
12134       IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'WORKPLAN') = 'Y') THEN
12135         --delete workplan attribute
12136         OPEN sel_wp_attr(l_proj_element_id);
12137         FETCH sel_wp_attr into l_wp_attr_rvn;
12138         CLOSE sel_wp_attr;
12139 
12140         PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
12141           p_validate_only => FND_API.G_FALSE
12142          ,p_project_id => l_project_id
12143          ,p_proj_element_id => l_proj_element_id
12144          ,p_record_version_number => l_wp_attr_rvn
12145          ,x_return_status => l_return_status
12146          ,x_msg_count => l_msg_count
12147          ,x_msg_data => l_msg_data
12148         );
12149 
12150         --Check error
12151         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12152           x_msg_count := FND_MSG_PUB.count_msg;
12153           IF x_msg_count = 1 then
12154              pa_interface_utils_pub.get_messages
12155              (p_encoded        => FND_API.G_TRUE,
12156               p_msg_index      => 1,
12157               p_data           => l_data,
12158               p_msg_index_out  => l_msg_index_out);
12159              x_msg_data := l_data;
12160           END IF;
12161           raise FND_API.G_EXC_ERROR;
12162         END IF;
12163 
12164         PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
12165           p_validate_only        => FND_API.G_FALSE
12166          ,p_project_id           => l_project_id
12167          ,P_OBJECT_TYPE          => 'PA_STRUCTURES'
12168          ,p_object_id            => l_proj_element_id
12169      ,p_structure_type       => 'WORKPLAN' --Amit
12170          ,x_return_status        => l_return_status
12171          ,x_msg_count            => l_msg_count
12172          ,x_msg_data             => l_msg_data
12173         );
12174 
12175         --Check error
12176         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12177           x_msg_count := FND_MSG_PUB.count_msg;
12178           IF x_msg_count = 1 then
12179              pa_interface_utils_pub.get_messages
12180              (p_encoded        => FND_API.G_TRUE,
12181               p_msg_index      => 1,
12182               p_data           => l_data,
12183               p_msg_index_out  => l_msg_index_out);
12184              x_msg_data := l_data;
12185           END IF;
12186           raise FND_API.G_EXC_ERROR;
12187         END IF;
12188 
12189       END IF;
12190 
12191       select record_version_number into l_pe_rvn
12192       from pa_proj_elements where proj_element_id = l_proj_element_id;
12193       PA_PROJECT_STRUCTURE_PVT1.Delete_Structure(
12194                         p_commit => p_commit,
12195                         p_debug_mode => p_debug_mode,
12196                         p_structure_id => l_proj_element_id,
12197                         p_record_version_number => l_pe_rvn,
12198                         x_return_status => l_return_status,
12199                         x_msg_count => l_msg_count,
12200                         x_msg_data => l_msg_data);
12201 
12202     END IF;
12203     CLOSE is_last_version;
12204 
12205     --Check error
12206     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12207       x_msg_count := FND_MSG_PUB.count_msg;
12208       IF x_msg_count = 1 then
12209          pa_interface_utils_pub.get_messages
12210          (p_encoded        => FND_API.G_TRUE,
12211           p_msg_index      => 1,
12212           p_data           => l_data,
12213           p_msg_index_out  => l_msg_index_out);
12214          x_msg_data := l_data;
12215       END IF;
12216       raise FND_API.G_EXC_ERROR;
12217     END IF;
12218 
12219     x_return_status := FND_API.G_RET_STS_SUCCESS;
12220 
12221     IF (p_debug_mode = 'Y') THEN
12222       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL end');
12223     END IF;
12224 
12225   EXCEPTION
12226     when FND_API.G_EXC_ERROR then
12227       if p_commit = FND_API.G_TRUE then
12228         rollback to delete_struc_ver_wo_val;
12229       end if;
12230       x_msg_count := FND_MSG_PUB.count_msg;
12231       x_return_status := FND_API.G_RET_STS_ERROR;
12232     when FND_API.G_EXC_UNEXPECTED_ERROR then
12233       if p_commit = FND_API.G_TRUE then
12234         rollback to delete_struc_ver_wo_val;
12235       end if;
12236       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12237       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
12238                               p_procedure_name => 'Delete_Struc_Ver_Wo_Val',
12239                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12240     when OTHERS then
12241       if p_commit = FND_API.G_TRUE then
12242          rollback to delete_struc_ver_wo_val;
12243       end if;
12244       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12245       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
12246                               p_procedure_name => 'Delete_Struc_Ver_Wo_Val',
12247                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12248       raise;
12249   END DELETE_STRUC_VER_WO_VAL;
12250 
12251   procedure Generate_Error_Page
12252   (
12253     p_api_version                      IN  NUMBER     := 1.0
12254    ,p_commit                           IN  VARCHAR2   := 'N'
12255    ,p_calling_module                   IN  VARCHAR2   := 'SELF_SERVICE'
12256    ,p_debug_mode                       IN  VARCHAR2   := 'N'
12257    ,p_max_msg_count                    IN  NUMBER     := NULL
12258    ,p_structure_version_id             IN  NUMBER
12259    ,p_error_tbl                        IN  PA_PUBLISH_ERR_TBL_TYPE
12260    ,x_page_content_id                  OUT NOCOPY NUMBER
12261    ,x_return_status                    OUT NOCOPY VARCHAR2
12262    ,x_msg_count                        OUT NOCOPY NUMBER
12263    ,x_msg_data                         OUT NOCOPY VARCHAR2
12264   )
12265   IS PRAGMA AUTONOMOUS_TRANSACTION;
12266     CURSOR get_struct_ver_info IS
12267       select a.name, a.version_number, c.scheduled_start_date,
12268              c.scheduled_finish_date, b.project_id
12269         from pa_proj_elem_ver_structure a,
12270              pa_proj_element_versions b,
12271              pa_proj_elem_ver_schedule c
12272        where b.element_version_id = p_structure_version_id
12273          and b.project_id = a.project_id
12274          and b.proj_element_id = a.proj_element_id
12275          and b.element_version_id = a.element_version_id
12276          and b.project_id = c.project_id
12277          and b.proj_element_id = c.proj_element_id
12278          and b.element_version_id = c.element_version_id;
12279     l_struc_ver_info_rec get_struct_ver_info%ROWTYPE;
12280 
12281     CURSOR get_project_info(c_project_id NUMBER) IS
12282       select ppa.name name, ppa.segment1,
12283              hou.name carrying_out_org_name, ppl.full_name
12284         from pa_projects_all ppa,
12285              hr_all_organization_units hou,
12286              per_all_people_f ppl,
12287              pa_project_parties ppp
12288        where ppa.carrying_out_organization_id = hou.organization_id
12289          and ppa.project_id = ppp.project_id (+)
12290          and ppa.project_id = c_project_id
12291          and 1 = ppp.project_role_id (+)
12292          and sysdate between ppp.start_date_active(+)
12293              and nvl(ppp.end_date_active(+), sysdate)
12294          and ppp.resource_source_id = ppl.person_id (+)
12295          and sysdate between ppl.effective_start_date(+)
12296              and nvl(ppl.effective_end_date (+), sysdate);
12297     l_proj_info_rec get_project_info%ROWTYPE;
12298 
12299     CURSOR get_lookup_meaning(c_lookup_code VARCHAR2) IS
12300       select meaning
12301         from pa_lookups
12302        where lookup_type = 'PA_WORKPLAN_ERROR_NOTIF'
12303          and lookup_code = c_lookup_code;
12304     l_workplan_version_err      varchar2(80);
12305     l_err_instruction           varchar2(80);
12306     l_project_info              varchar2(80);
12307     l_project_name              varchar2(80);
12308     l_project_num               varchar2(80);
12309     l_project_mgr               varchar2(80);
12310     l_project_org               varchar2(80);
12311     l_workplan_ver_info         varchar2(80);
12312     l_workplan_ver_name         varchar2(80);
12313     l_workplan_ver_num          varchar2(80);
12314     l_wp_sch_start_date         varchar2(80);
12315     l_wp_sch_finish_date        varchar2(80);
12316     l_error_header              varchar2(80);
12317     l_error                     varchar2(80);
12318 
12319     l_page_content_id           NUMBER;
12320     l_clob                      clob;
12321     l_text                      VARCHAR2(32767);
12322     l_index                     NUMBER;
12323     l_item_key                  VARCHAR2(240);
12324     l_return_status             VARCHAR2(1);
12325     l_msg_count                 NUMBER;
12326     l_msg_data                  VARCHAR2(250);
12327     l_err_code                  NUMBER:= 0;
12328     l_err_stack                 VARCHAR2(630);
12329     l_err_stage                 VARCHAR2(80);
12330 
12331   BEGIN
12332 
12333     OPEN get_struct_ver_info;
12334     FETCH get_struct_ver_info INTO l_struc_ver_info_rec;
12335     CLOSE get_struct_ver_info;
12336 
12337     OPEN get_project_info(l_struc_ver_info_rec.project_id);
12338     FETCH get_project_info INTO l_proj_info_rec;
12339     CLOSE get_project_info;
12340 
12341     --get headers and prompts
12342     OPEN get_lookup_meaning('PA_WORKPLAN_VERSION_ERR');
12343     FETCH get_lookup_meaning into l_workplan_version_err;
12344     CLOSE get_lookup_meaning;
12345 
12346     OPEN get_lookup_meaning('PA_ERR_INSTRUCTION');
12347     FETCH get_lookup_meaning into l_err_instruction;
12348     CLOSE get_lookup_meaning;
12349 
12350     OPEN get_lookup_meaning('PA_PROJECT_INFO');
12351     FETCH get_lookup_meaning into l_project_info;
12352     CLOSE get_lookup_meaning;
12353 
12354     OPEN get_lookup_meaning('PA_PROJECT_NAME');
12355     FETCH get_lookup_meaning into l_project_name;
12356     CLOSE get_lookup_meaning;
12357 
12358     OPEN get_lookup_meaning('PA_PROJECT_NUM');
12359     FETCH get_lookup_meaning into l_project_num;
12360     CLOSE get_lookup_meaning;
12361 
12362     OPEN get_lookup_meaning('PA_PROJECT_MGR');
12363     FETCH get_lookup_meaning into l_project_mgr;
12364     CLOSE get_lookup_meaning;
12365 
12366     OPEN get_lookup_meaning('PA_PROJECT_ORG');
12367     FETCH get_lookup_meaning into l_project_org;
12368     CLOSE get_lookup_meaning;
12369 
12370     OPEN get_lookup_meaning('PA_WORKPLAN_VER_INFO');
12371     FETCH get_lookup_meaning into l_workplan_ver_info;
12372     CLOSE get_lookup_meaning;
12373 
12374     OPEN get_lookup_meaning('PA_WORKPLAN_VER_NAME');
12375     FETCH get_lookup_meaning into l_workplan_ver_name;
12376     CLOSE get_lookup_meaning;
12377 
12378     OPEN get_lookup_meaning('PA_WORKPLAN_VER_NUM');
12379     FETCH get_lookup_meaning into l_workplan_ver_num;
12380     CLOSE get_lookup_meaning;
12381 
12382     OPEN get_lookup_meaning('PA_WP_SCH_START_DATE');
12383     FETCH get_lookup_meaning into l_wp_sch_start_date;
12384     CLOSE get_lookup_meaning;
12385 
12386     OPEN get_lookup_meaning('PA_WP_SCH_FINISH_DATE');
12387     FETCH get_lookup_meaning into l_wp_sch_finish_date;
12388     CLOSE get_lookup_meaning;
12389 
12390     OPEN get_lookup_meaning('PA_ERROR_HEADER');
12391     FETCH get_lookup_meaning into l_error_header;
12392     CLOSE get_lookup_meaning;
12393 
12394     OPEN get_lookup_meaning('PA_ERROR');
12395     FETCH get_lookup_meaning into l_error;
12396     CLOSE get_lookup_meaning;
12397     --done getting header and prompt
12398 
12399     --create record in pa_page_layouts
12400     PA_PAGE_CONTENTS_PUB.CREATE_PAGE_CONTENTS(
12401       p_init_msg_list   => fnd_api.g_false
12402      ,p_validate_only   => fnd_api.g_false
12403      ,p_object_type     => 'PA_STRUCTURES'
12404      ,p_pk1_value       => p_structure_version_id
12405      ,p_pk2_value       => 1
12406      ,x_page_content_id => x_page_content_id
12407      ,x_return_status   => x_return_status
12408      ,x_msg_count       => x_msg_count
12409      ,x_msg_data        => x_msg_data
12410     );
12411 
12412     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12413       RAISE FND_API.G_EXC_ERROR;
12414     END IF;
12415 
12416     --create notification page
12417     select page_content
12418     into l_clob
12419     from pa_page_contents
12420     where page_content_id = x_page_content_id for update;
12421 
12422     --print title
12423     l_text := '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary="">';
12424     l_text := l_text||'<tbody><tr><td width="100%"><font class="OraHeader" face="Tahoma,Arial,Helvetica,Geneva,sans-serif" color="#3c3c3c" size="5">';
12425     l_text := l_text||l_workplan_version_err||': ';
12426     l_text := l_text||l_struc_ver_info_rec.name;
12427     l_text := l_text||' ('||l_struc_ver_info_rec.version_number||')';
12428 
12429     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12430       l_text
12431      ,l_clob);
12432 
12433     --print instruction text
12434     l_text := '</font></td></tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table><table cellspacing=0 cellpadding=0 width="100%" border=0 summary="">';
12435     l_text := l_text||'<tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr><td></td><td><span>';
12436     l_text := l_text||'<font face="Tahoma,Arial,Helvetica,Geneva,sans-serif" color="#000000" size="2">';
12437     l_text := l_text||l_err_instruction||'</font></span></td>';
12438 
12439     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12440       l_text
12441      ,l_clob);
12442 
12443     --print project info
12444     l_text := '</tr></tbody></table><table cellspacing=10 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td valign=top width="100%">';
12445     l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td height=17></td></tr><tr><td width=20 rowspan=3>';
12446     l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12447     l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12448     l_text := l_text||l_project_info||'</b></font></td>';
12449 
12450     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12451       l_text
12452      ,l_clob);
12453 
12454     --print project name
12455     l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12456     l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary="">';
12457     l_text := l_text||'<tbody><tr><td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary="">';
12458     l_text := l_text||'<tbody><tr><td noWrap align=right><span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2>';
12459     l_text := l_text||'<label>';
12460     l_text := l_text||l_project_name||'</label></font></span></td><td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12461     l_text := l_text||l_proj_info_rec.name||'</b></font></td>';
12462 
12463     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12464       l_text
12465      ,l_clob);
12466 
12467     --print project number
12468     l_text := '</tr><tr><td height=3></td><td></td><td></td></tr><tr><td noWrap align=right><span align="right">';
12469     l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12470     l_text := l_text||l_project_num||'</label></font></span></td><td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12471     l_text := l_text||l_proj_info_rec.segment1||'</b></font></td>';
12472 
12473     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12474       l_text
12475      ,l_clob);
12476 
12477     --print project manager
12478     l_text := '</tr><tr><td height=3></td><td></td><td></td></tr></tbody></table></td><td width="5%"></td><td valign=top>';
12479     l_text := l_text||'<table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr><td noWrap align=right><span align="right">';
12480     l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12481     l_text := l_text||l_project_mgr||'</label></font></span></td>';
12482     l_text := l_text||'<td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12483     l_text := l_text||l_proj_info_rec.full_name||'</b></font></td>';
12484 
12485     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12486       l_text
12487      ,l_clob);
12488 
12489     --print organization
12490     l_text := '</tr><tr><td height=3></td><td></td><td></td></tr><tr><td noWrap align=right><span align="right">';
12491     l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12492     l_text := l_text||l_project_org||'</label></font></span></td><td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12493     l_text := l_text||l_proj_info_rec.carrying_out_org_name;
12494     l_text := l_text||'</b></font></td></tr><tr><td height=3></td><td></td><td></td></tr></tbody></table></td></tr></tbody></table>';
12495     l_text := l_text||'</td></tr></tbody></table></td></tr></tbody></table>';
12496 
12497     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12498       l_text
12499      ,l_clob);
12500 
12501     --print workplan version information
12502     l_text := '<div><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td height=17></td></tr><tr><td width=20 rowspan=3>';
12503     l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12504     l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12505     l_text := l_text||l_workplan_ver_info||'</b></font></td>';
12506 
12507     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12508       l_text
12509      ,l_clob);
12510 
12511     --print version name
12512     l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12513     l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary="" width="319">';
12514     l_text := l_text||'<tbody><tr><td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary="" width="419">';
12515     l_text := l_text||'<tbody><tr><td noWrap align=right width="177"><span align="right">';
12516     l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12517     l_text := l_text||l_workplan_ver_name||'</label></font></span></td><td width=12></td><td width="198">';
12518     l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12519     l_text := l_text||l_struc_ver_info_rec.name||'</b></font></td>';
12520 
12521     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12522       l_text
12523      ,l_clob);
12524 
12525     --print version number
12526     l_text := '</tr><tr><td height=3 width="177"></td><td width="12"></td><td width="198"></td></tr><tr><td noWrap align=right width="177">';
12527     l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12528     l_text := l_text||l_workplan_ver_num||'</label></font></span></td>';
12529     l_text := l_text||'<td width=12></td><td width="198"><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12530     l_text := l_text||l_struc_ver_info_rec.version_number||'</b></font></td>';
12531 
12532     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12533       l_text
12534      ,l_clob);
12535 
12536     l_text := '</tr><tr><td height=3 width="177"></td><td width="12"></td><td width="198"></td></tr><tr><td noWrap align=right width="177">';
12537     l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12538     l_text := l_text||l_wp_sch_start_date||'</label></font></span></td><td width=12></td><td width="198">';
12539     l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12540     l_text := l_text||l_struc_ver_info_rec.scheduled_start_date||'</b></font></td>';
12541 
12542     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12543       l_text
12544      ,l_clob);
12545 
12546     --print scheduled finish date
12547     l_text := '</tr><tr><td height=3 width="177"></td><td width="12"></td><td width="198"></td></tr><tr><td noWrap align=right width="177">';
12548     l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12549     l_text := l_text||l_wp_sch_finish_date||'</label></font></span></td><td width=12></td><td width="198">';
12550     l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12551     l_text := l_text||l_struc_ver_info_rec.scheduled_finish_date||'</b></font></td></tr></tbody></table></td></tr></tbody></table><div></div></td>';
12552     l_text := l_text||'</tr></tbody></table></td></tr></tbody></table></div><div></div>';
12553 
12554     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12555       l_text
12556      ,l_clob);
12557 
12558     --print error header
12559     l_text := '<div><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td height=17></td></tr><tr><td width=20 rowspan=3>';
12560     l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12561     l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12562     l_text := l_text||l_error_header||'</b></font></td>';
12563 
12564     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12565       l_text
12566      ,l_clob);
12567 
12568     --print error table
12569 
12570     l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12571     l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td><table cellspacing=0 cellpadding=0 width=0 border=0 summary="">';
12572     l_text := l_text||' <tbody><tr><td class=OraTable bgcolor=#999966><table style="BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=1 width="100%" border=0 summary="">';
12573     l_text := l_text||'<tbody><tr><th style="BORDER-LEFT: #f2f2f5 1px solid" valign=bottom align=left bgcolor=#cfe0f1 scope="col">';
12574     l_text := l_text||'<font class=OraTableColumnHeader face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c size=2>';
12575     l_text := l_text||'<b><span class=OraTableHeaderLink bgcolor="#cfe0f1">';
12576     l_text := l_text||l_error||'</span></b></font></th></tr>';
12577 
12578     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12579       l_text
12580      ,l_clob);
12581 
12582     --print errors
12583     --loop
12584     l_index := p_error_tbl.FIRST;
12585     LOOP
12586       l_text := '<tr><td style="BORDER-RIGHT: #cfe0f1 1px solid; BORDER-TOP: #cfe0f1 1px solid; BORDER-LEFT: #cfe0f1 1px solid; BORDER-BOTTOM: #cfe0f1 1px solid" valign=baseline noWrap bgcolor=#f2f2f5>';
12587       l_text := l_text||'<font class=OraTableCellText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><span>';
12588       l_text := l_text||p_error_tbl(l_index)||'</span></font></td></tr>';
12589 
12590       PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12591         l_text
12592        ,l_clob);
12593 
12594       EXIT WHEN l_index = p_error_tbl.LAST;
12595       l_index := p_error_tbl.next(l_index);
12596 
12597     END LOOP;
12598     --end loop
12599     --print end
12600 
12601     l_text := '</tbody></table></td></tr></tbody></table><div></div><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr>';
12602     l_text := l_text||'<td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody></tbody></table></td>';
12603     l_text := l_text||'</tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table></td>';
12604     l_text := l_text||'</tr></tbody></table><p></p><p></p></td></tr></table>';
12605 
12606     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12607       l_text
12608      ,l_clob);
12609 
12610     --send notification
12611     PA_WORKPLAN_WORKFLOW.START_WORKFLOW(
12612           'PAWFPPWP'
12613          ,'PA_WORKPLAN_ERRORS'
12614          ,p_structure_version_id
12615          ,NULL
12616          ,NULL
12617          ,l_item_key
12618          ,l_msg_count
12619          ,l_msg_data
12620          ,l_return_status
12621         );
12622     IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
12623       PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES(
12624              p_wf_type_code =>      'WORKPLAN'
12625             ,p_item_type    =>      'PAWFPPWP'
12626             ,p_item_key     =>      l_item_key
12627             ,p_entity_key1  =>      l_struc_ver_info_rec.project_id
12628             ,p_entity_key2  =>      p_structure_version_id
12629             ,p_description  =>      NULL
12630             ,p_err_code     =>      l_err_code
12631             ,p_err_stage    =>      l_err_stage
12632             ,p_err_stack    =>      l_err_stack
12633           );
12634       IF (l_err_code <> 0) THEN
12635         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12636                                  p_msg_name => 'PA_PS_CREATE_WF_FAILED');
12637         RAISE FND_API.G_EXC_ERROR;
12638       END IF;
12639     ELSE
12640       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12641                                p_msg_name => 'PA_PS_CREATE_WF_FAILED');
12642       RAISE FND_API.G_EXC_ERROR;
12643     END IF;
12644 
12645 
12646     x_return_status := FND_API.G_RET_STS_SUCCESS;
12647     COMMIT;
12648 
12649   EXCEPTION
12650     when FND_API.G_EXC_ERROR then
12651       ROLLBACK;
12652       x_msg_count := FND_MSG_PUB.count_msg;
12653       x_return_status := FND_API.G_RET_STS_ERROR;
12654     when OTHERS then
12655       ROLLBACK;
12656       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12657       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
12658                               p_procedure_name => 'Generate_Error_Page',
12659                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12660       raise;
12661   END Generate_Error_Page;
12662 
12663 
12664   PROCEDURE APPEND_VARCHAR_TO_CLOB(p_varchar IN varchar2,
12665                                    p_clob    IN OUT NOCOPY CLOB)
12666   IS
12667     l_chunkSize   INTEGER;
12668     v_offset      INTEGER := 0;
12669     l_clob        clob;
12670     l_length      INTEGER;
12671 
12672     v_size        NUMBER;
12673     v_text        VARCHAR2(3000);  -- Bug 3634909. Increased to 3000 from 1000
12674   BEGIN
12675     l_chunksize := length(p_varchar);
12676     l_length := dbms_lob.getlength(p_clob);
12677 
12678     dbms_lob.write(p_clob,
12679                    l_chunksize,
12680                    l_length+1,
12681                    p_varchar);
12682     v_size := 1000;
12683     dbms_lob.read(p_clob, v_size, 1, v_text);
12684   END APPEND_VARCHAR_TO_CLOB;
12685 
12686 -- Following procedure is added for Bug 2758343
12687 -- It will recalculate the task weightings based on
12688 -- duration for a given project and structure version id
12689 
12690 PROCEDURE RECALC_FIN_TASK_WEIGHTS
12691 ( p_structure_version_id IN NUMBER
12692  ,p_project_id           IN NUMBER
12693  ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12694  ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12695  ,x_return_status        OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
12696 
12697 IS
12698 
12699 CURSOR c_get_task_ver IS
12700     SELECT element_version_id
12701          , wbs_level
12702     FROM   pa_proj_element_versions
12703     WHERE  project_id = p_project_id
12704     AND    parent_structure_version_id = p_structure_version_id
12705     AND    object_type = 'PA_TASKS';
12706 
12707 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
12708     SELECT ptt.prog_entry_enable_flag
12709     FROM   pa_task_types ptt
12710          , pa_proj_element_versions ppev
12711          , pa_proj_elements ppe
12712     WHERE  ppev.element_version_id = c_element_version_id
12713     AND    ppev.proj_element_id = ppe.proj_element_id
12714     AND    ptt.object_type ='PA_TASKS'              /* bug 3279978 FP M Enhancement */
12715     AND    ppe.TYPE_ID   = ptt.task_type_id;
12716 
12717 CURSOR get_parent(c_element_version_id NUMBER) IS
12718     SELECT object_id_from1
12719     FROM   pa_object_relationships
12720     WHERE  object_id_to1 = c_element_version_id
12721     AND    object_type_to = 'PA_TASKS'
12722     AND    relationship_type = 'S'
12723     AND    object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
12724 
12725  CURSOR get_summed_duration(c_parent_element_version_id NUMBER) IS
12726     SELECT sum(ppevs.duration)
12727     FROM   pa_proj_elem_ver_schedule ppevs
12728          , pa_object_relationships por
12729          , pa_proj_element_versions ppev
12730          , pa_proj_elements ppe
12731          , pa_task_types ptt
12732     WHERE  por.object_id_from1 = c_parent_element_version_id
12733     AND    por.object_type_to = 'PA_TASKS'
12734     AND    por.relationship_type = 'S'
12735     AND    por.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
12736     AND    por.object_id_to1 = ppevs.element_version_id
12737     AND    por.object_id_to1 = ppev.element_version_id
12738     AND    ppev.proj_element_id = ppe.proj_element_id
12739     AND    ppevs.project_id     = ppe.project_id
12740     AND    ppe.TYPE_ID   = ptt.task_type_id
12741     AND    ptt.object_type ='PA_TASKS'              /* bug 3279978 FP M Enhancement */
12742     AND    ptt.prog_entry_enable_flag = 'Y';
12743 
12744  CURSOR get_task_duration(c_element_version_id NUMBER, c_project_id NUMBER) IS
12745     SELECT duration
12746     FROM   pa_proj_elem_ver_schedule
12747     WHERE  element_version_id = c_element_version_id
12748     AND    project_id = c_project_id;
12749 
12750  CURSOR get_existing_weights(c_parent_element_version_id NUMBER) IS
12751     SELECT sum(weighting_percentage)
12752     FROM   PA_OBJECT_RELATIONSHIPS
12753     WHERE  object_id_from1 = c_parent_element_version_id
12754     AND    object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
12755     AND    object_type_to = 'PA_TASKS'
12756     AND    relationship_type = 'S';
12757 
12758 
12759 l_element_version_id NUMBER;
12760 l_parent_element_version_id NUMBER;
12761 l_outline_level NUMBER;
12762 l_progress_allowed VARCHAR2(1);
12763 
12764 TYPE durations IS TABLE OF NUMBER
12765        INDEX BY BINARY_INTEGER;
12766 
12767 l_durations durations;
12768 l_total_duration NUMBER;
12769 l_task_weight PA_OBJECT_RELATIONSHIPS.weighting_percentage%TYPE;
12770 l_task_duration  NUMBER;
12771 l_existing_weight NUMBER;
12772 l_remaining_weight NUMBER;
12773 
12774 BEGIN
12775 
12776 For l_get_task_ver IN c_get_task_ver LOOP
12777 
12778     l_element_version_id := l_get_task_ver.element_version_id;
12779     l_outline_level  := l_get_task_ver.wbs_level;
12780 
12781     OPEN check_progress_allowed(l_element_version_id);
12782     FETCH check_progress_allowed INTO l_progress_allowed;
12783     CLOSE check_progress_allowed;
12784 
12785     OPEN get_parent(l_element_version_id);
12786     FETCH get_parent INTO l_parent_element_version_id;
12787     CLOSE get_parent;
12788 
12789 
12790     IF l_progress_allowed = 'N' THEN
12791           -- Populate task weight as zero
12792           UPDATE PA_OBJECT_RELATIONSHIPS
12793           SET weighting_percentage = 0
12794           WHERE object_id_from1 = l_parent_element_version_id
12795           AND   object_id_to1 = l_element_version_id
12796           AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
12797           AND   object_type_to = 'PA_TASKS'
12798           AND   relationship_type = 'S';
12799     ELSE
12800 
12801           IF l_durations.exists(l_parent_element_version_id) then
12802               NULL;
12803           ELSE
12804           OPEN get_summed_duration(l_parent_element_version_id);
12805               FETCH get_summed_duration INTO l_total_duration;
12806               CLOSE get_summed_duration;
12807 
12808           l_durations(l_parent_element_version_id) := l_total_duration;
12809           END IF;
12810 
12811       OPEN get_task_duration(l_element_version_id, p_project_id);
12812           FETCH get_task_duration INTO l_task_duration;
12813           CLOSE get_task_duration;
12814 
12815           IF (l_durations(l_parent_element_version_id) IS NULL) OR (l_durations(l_parent_element_version_id) = 0) THEN
12816           l_task_weight := 0;
12817           ELSE
12818               OPEN get_existing_weights(l_parent_element_version_id);
12819           FETCH get_existing_weights INTO l_existing_weight;
12820               CLOSE get_existing_weights;
12821 
12822           l_remaining_weight := 100 - l_existing_weight;
12823               l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
12824 
12825           IF(abs(l_remaining_weight - l_task_weight) <= .05) THEN
12826             l_task_weight := l_remaining_weight;
12827           END IF;
12828           IF(abs(l_remaining_weight) <= .01) THEN
12829             l_task_weight := l_task_weight+l_remaining_weight;
12830           END IF;
12831       END IF;
12832 
12833           UPDATE PA_OBJECT_RELATIONSHIPS
12834           SET weighting_percentage = l_task_weight
12835           WHERE object_id_from1 = l_parent_element_version_id
12836           AND   object_id_to1 = l_element_version_id
12837           AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
12838           AND   object_type_to = 'PA_TASKS'
12839           AND   relationship_type = 'S';
12840     END IF;
12841 END LOOP;
12842 
12843 x_return_status := FND_API.G_RET_STS_SUCCESS;
12844 
12845 EXCEPTION
12846 WHEN OTHERS THEN
12847   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12848   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
12849                           p_procedure_name => 'RECALC_FIN_TASK_WEIGHTS',
12850                           p_error_text     => SUBSTRB(SQLERRM,1,240));
12851 END RECALC_FIN_TASK_WEIGHTS;
12852 
12853 --maansari
12854 FUNCTION copy_task_version( p_structure_version_id NUMBER, p_task_version_id NUMBER ) RETURN VARCHAR2 IS
12855    l_copy_task_flag VARCHAR2(1) := 'Y';
12856    l_parent_task_version_id NUMBER;
12857 BEGIN
12858 
12859    FOR i in 1..l_src_tasks_versions_tbl.count LOOP
12860        IF p_task_version_id = l_src_tasks_versions_tbl(i).src_task_version_id
12861        THEN
12862           l_copy_task_flag := l_src_tasks_versions_tbl(i).copy_flag;
12863           l_parent_task_version_id := l_src_tasks_versions_tbl(i).src_parent_task_version_id;
12864           --loop thru untill top of the hierarchy.
12865           WHILE l_parent_task_version_id <> p_structure_version_id LOOP
12866             FOR i in 1..l_src_tasks_versions_tbl.count LOOP
12867              IF l_parent_task_version_id = l_src_tasks_versions_tbl(i).src_task_version_id
12868              THEN
12869 --bug 2863836
12870                 IF l_src_tasks_versions_tbl(i).copy_flag = 'N' THEN
12871                   l_copy_task_flag := l_src_tasks_versions_tbl(i).copy_flag;
12872                 END IF;
12873 --end bug 2863836
12874                 l_parent_task_version_id := l_src_tasks_versions_tbl(i).src_parent_task_version_id;
12875                 exit;
12876              END IF;
12877             END LOOP;
12878           END LOOP;
12879           exit;
12880        END IF;
12881    END LOOP;
12882 
12883    return l_copy_task_flag;
12884 END copy_task_version;
12885 --maansari
12886 
12887 -- Performance changes : added this API. It is bulk version of COPY_STRUCTURE_VERSION
12888 
12889 PROCEDURE COPY_STRUCTURE_VERSION_BULK
12890 ( p_commit                        IN VARCHAR2   := FND_API.G_FALSE
12891  ,p_validate_only                 IN VARCHAR2   := FND_API.G_TRUE
12892  ,p_validation_level              IN NUMBER     := FND_API.G_VALID_LEVEL_FULL
12893  ,p_calling_module                IN VARCHAR2   := 'SELF_SERVICE'
12894  ,p_debug_mode                    IN VARCHAR2   := 'N'
12895  ,p_max_msg_count                 IN NUMBER     := FND_API.G_MISS_NUM
12896  ,p_structure_version_id          IN NUMBER
12897  ,p_new_struct_ver_name           IN VARCHAR2
12898  ,p_new_struct_ver_desc           IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12899  ,p_change_reason_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12900  ,x_new_struct_ver_id            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12901  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12902  ,x_msg_data                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12903  ,x_return_status                OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
12904 IS
12905   l_new_struct_ver_id             PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
12906   -- added for Bug Fix: 4537865
12907   l_tmp_struct_ver_id         PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
12908   -- added for Bug Fix: 4537865
12909   l_return_status                 VARCHAR2(1);
12910   l_msg_count                     NUMBER;
12911   l_msg_data                      VARCHAR2(250);
12912   l_data                          VARCHAR2(2000);
12913   l_msg_index_out                 NUMBER;
12914   l_pev_structure_id              NUMBER;
12915 
12916   CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
12917   IS
12918   SELECT *
12919   FROM PA_PROJ_ELEMENT_VERSIONS
12920   WHERE element_version_id = c_structure_version_id;
12921 
12922   l_structure_ver_rec       l_get_structure_ver_csr%ROWTYPE;
12923   l_structure_ver_to_rec    l_get_structure_ver_csr%ROWTYPE;
12924 
12925   CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
12926   IS
12927   SELECT a.*
12928   FROM PA_PROJ_ELEM_VER_STRUCTURE a,
12929        PA_PROJ_ELEMENT_VERSIONS b
12930   WHERE b.element_version_id = c_structure_version_id
12931   AND   b.project_id = a.project_id
12932   AND   b.element_version_id = a.project_id;
12933 
12934   l_structure_ver_attr_rec       l_get_structure_ver_attr_csr%ROWTYPE;
12935 
12936   l_ref_task_ver_id          NUMBER;
12937   l_peer_or_sub              VARCHAR2(10);
12938 
12939   CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
12940   IS
12941   SELECT a.*
12942   FROM PA_PROJ_ELEM_VER_SCHEDULE a,
12943        PA_PROJ_ELEMENT_VERSIONS b
12944   WHERE b.element_version_id = c_element_version_id
12945   AND b.project_id = a.project_id
12946   AND b.element_version_id = a.element_version_id;
12947 
12948   l_ver_schedule_attr_rec       l_get_ver_schedule_attr_csr%ROWTYPE;
12949 
12950   l_last_wbs_level          NUMBER;
12951   l_task_version_id         NUMBER;
12952   l_pev_schedule_id         NUMBER;
12953 
12954   CURSOR l_get_structure_type_csr(c_structure_version_id NUMBER)
12955   IS
12956   SELECT pst.structure_type_class_code
12957   FROM   PA_STRUCTURE_TYPES pst,
12958          PA_PROJ_ELEMENT_VERSIONS ppev,
12959          PA_PROJ_STRUCTURE_TYPES ppst
12960   WHERE  ppev.element_version_id = c_structure_version_id
12961   AND    ppev.proj_element_id = ppst.proj_element_id
12962   AND    ppst.structure_type_id = pst.structure_type_id;
12963 
12964   l_structure_type          PA_STRUCTURE_TYPES.structure_type%TYPE;
12965 
12966   CURSOR l_check_working_versions_csr(c_structure_version_id NUMBER)
12967   IS
12968   SELECT 'Y'
12969   FROM  PA_PROJ_ELEMENT_VERSIONS ppev
12970   WHERE ppev.element_version_id = c_structure_version_id
12971   AND   EXISTS
12972         (SELECT 'Y'
12973          FROM   PA_PROJ_ELEMENT_VERSIONS ppev2,
12974                 PA_PROJ_ELEM_VER_STRUCTURE ppevs
12975          WHERE  ppev2.proj_element_id = ppev.proj_element_id
12976          AND    ppev2.project_id = ppev.project_id
12977          AND    ppevs.project_id = ppev2.project_id
12978          AND    ppevs.element_version_id = ppev2.element_version_id
12979          AND    ppevs.status_code <> 'STRUCTURE_PUBLISHED');
12980 
12981   l_dummy                   VARCHAR2(1);
12982 
12983 
12984     l_new_obj_rel_id          PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
12985     l_structure_type1         PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
12986 
12987 --Added by rtarway
12988 l_rowid VARCHAR2(255);
12989 
12990    X_Row_id  VARCHAR2(255);
12991    l_project_id number;
12992    l_user_id number;
12993    l_login_id number;
12994 
12995     CURSOR cur_elem_ver_seq IS
12996     SELECT pa_proj_element_versions_s.nextval
12997       FROM sys.dual;
12998 
12999   l_wp_struc VARCHAR2(1);
13000   l_fin_struc VARCHAR2(1);
13001 
13002 BEGIN
13003 
13004   pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK');
13005 
13006   IF (p_debug_mode = 'Y') THEN
13007     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK begin');
13008   END IF;
13009 
13010   IF (p_commit = FND_API.G_TRUE) THEN
13011     savepoint copy_structure_version_pvt_blk;
13012   END IF;
13013 
13014   -- Get structure version info
13015   OPEN l_get_structure_ver_csr(p_structure_version_id);
13016   FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
13017   CLOSE l_get_structure_ver_csr;
13018 
13019   l_project_id := l_structure_ver_rec.project_id;
13020 
13021   OPEN cur_elem_ver_seq;
13022   FETCH cur_elem_ver_seq INTO l_new_struct_ver_id;
13023   CLOSE cur_elem_ver_seq;
13024 
13025     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
13026     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_tmp_struct_ver_id
13027     -- to l_new_struct_ver_id
13028 
13029     l_tmp_struct_ver_id := l_new_struct_ver_id ;
13030 
13031     -- End 4657794
13032 
13033     PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
13034        X_ROW_ID                       => l_rowid
13035     --,X_ELEMENT_VERSION_ID           => l_new_struct_ver_id        * commented for Bug Fix: 453786
13036       ,X_ELEMENT_VERSION_ID       => l_tmp_struct_ver_id        --  added for bug Fix: 4537865
13037       ,X_PROJ_ELEMENT_ID              => l_structure_ver_rec.proj_element_id
13038       ,X_OBJECT_TYPE                  => 'PA_STRUCTURES'
13039       ,X_PROJECT_ID                   => l_project_id
13040       ,X_PARENT_STRUCTURE_VERSION_ID  => l_new_struct_ver_id
13041       ,X_DISPLAY_SEQUENCE             => NULL
13042       ,X_WBS_LEVEL                    => NULL
13043       ,X_WBS_NUMBER                   => '0'
13044       ,X_ATTRIBUTE_CATEGORY           => l_structure_ver_rec.attribute_category
13045       ,X_ATTRIBUTE1                   => l_structure_ver_rec.attribute1
13046       ,X_ATTRIBUTE2                   => l_structure_ver_rec.attribute2
13047       ,X_ATTRIBUTE3                   => l_structure_ver_rec.attribute3
13048       ,X_ATTRIBUTE4                   => l_structure_ver_rec.attribute4
13049       ,X_ATTRIBUTE5                   => l_structure_ver_rec.attribute5
13050       ,X_ATTRIBUTE6                   => l_structure_ver_rec.attribute6
13051       ,X_ATTRIBUTE7                   => l_structure_ver_rec.attribute7
13052       ,X_ATTRIBUTE8                   => l_structure_ver_rec.attribute8
13053       ,X_ATTRIBUTE9                   => l_structure_ver_rec.attribute9
13054       ,X_ATTRIBUTE10                  => l_structure_ver_rec.attribute10
13055       ,X_ATTRIBUTE11                  => l_structure_ver_rec.attribute11
13056       ,X_ATTRIBUTE12                  => l_structure_ver_rec.attribute12
13057       ,X_ATTRIBUTE13                  => l_structure_ver_rec.attribute13
13058       ,X_ATTRIBUTE14                  => l_structure_ver_rec.attribute14
13059       ,X_ATTRIBUTE15                  => l_structure_ver_rec.element_version_id
13060       ,X_TASK_UNPUB_VER_STATUS_CODE   => NULL
13061             ,X_SOURCE_OBJECT_ID             => l_project_id
13062       ,X_SOURCE_OBJECT_TYPE           => 'PA_PROJECTS'
13063     );
13064       -- added for bug Fix: 4537865
13065      l_new_struct_ver_id := l_tmp_struct_ver_id;
13066       -- added for bug Fix: 4537865
13067 
13068 /*
13069   PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
13070   ( p_validate_only         => p_validate_only
13071    ,p_structure_id          => l_structure_ver_rec.proj_element_id
13072    ,p_attribute_category    => l_structure_ver_rec.attribute_category
13073    ,p_attribute1            => l_structure_ver_rec.attribute1
13074    ,p_attribute2            => l_structure_ver_rec.attribute2
13075    ,p_attribute3            => l_structure_ver_rec.attribute3
13076    ,p_attribute4            => l_structure_ver_rec.attribute4
13077    ,p_attribute5            => l_structure_ver_rec.attribute5
13078    ,p_attribute6            => l_structure_ver_rec.attribute6
13079    ,p_attribute7            => l_structure_ver_rec.attribute7
13080    ,p_attribute8            => l_structure_ver_rec.attribute8
13081    ,p_attribute9            => l_structure_ver_rec.attribute9
13082    ,p_attribute10           => l_structure_ver_rec.attribute10
13083    ,p_attribute11           => l_structure_ver_rec.attribute11
13084    ,p_attribute12           => l_structure_ver_rec.attribute12
13085    ,p_attribute13           => l_structure_ver_rec.attribute13
13086    ,p_attribute14           => l_structure_ver_rec.attribute14
13087    ,p_attribute15           => l_structure_ver_rec.element_version_id  --fix bug 2833989: replaced l_structure_ver_rec.attribute15
13088    ,x_structure_version_id  => l_new_struct_ver_id
13089    ,x_return_status         => l_return_status
13090    ,x_msg_count             => l_msg_count
13091    ,x_msg_data              => l_msg_data );
13092 */
13093 
13094   If (p_debug_mode = 'Y') THEN
13095     pa_debug.debug('Create Structure Version Bulk return status: ' || l_return_status);
13096     pa_debug.debug('l_new_struct_ver_id: ' || l_new_struct_ver_id);
13097   END IF;
13098 
13099 
13100   --Check if there is any error.
13101   l_msg_count := FND_MSG_PUB.count_msg;
13102   IF l_msg_count > 0 THEN
13103     x_msg_count := l_msg_count;
13104     IF x_msg_count = 1 THEN
13105       x_msg_data := l_msg_data;
13106     END IF;
13107     RAISE FND_API.G_EXC_ERROR;
13108   END IF;
13109 
13110    -- Get structure version attributes
13111   OPEN l_get_structure_ver_attr_csr(p_structure_version_id);
13112   FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
13113   CLOSE l_get_structure_ver_attr_csr;
13114 
13115   If (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
13116     l_structure_ver_attr_rec.change_reason_code := p_change_reason_code;
13117   END IF;
13118 
13119   PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
13120   ( p_validate_only               => FND_API.G_FALSE
13121    ,p_structure_version_id        => l_new_struct_ver_id
13122    ,p_structure_version_name      => p_new_struct_ver_name
13123    ,p_structure_version_desc      => p_new_struct_ver_desc
13124    ,p_effective_date              => l_structure_ver_attr_rec.effective_date
13125    ,p_latest_eff_published_flag   => l_structure_ver_attr_rec.latest_eff_published_flag
13126    ,p_locked_status_code          => l_structure_ver_attr_rec.lock_status_code
13127    ,p_struct_version_status_code  => l_structure_ver_attr_rec.status_code
13128    ,p_baseline_current_flag       => l_structure_ver_attr_rec.current_flag
13129    ,p_baseline_original_flag      => l_structure_ver_attr_rec.original_flag
13130    ,p_change_reason_code          => l_structure_ver_attr_rec.change_reason_code
13131    ,x_pev_structure_id            => l_pev_structure_id
13132    ,x_return_status               => l_return_status
13133    ,x_msg_count                   => l_msg_count
13134    ,x_msg_data                    => l_msg_data );
13135 
13136   IF (p_debug_mode = 'Y') THEN
13137     pa_debug.debug('Create Structure Version Bulk Attr return status: ' || l_return_status);
13138     pa_debug.debug('l_pev_structure_id: ' || l_pev_structure_id);
13139   END IF;
13140 
13141   --Check if there is any error.
13142   l_msg_count := FND_MSG_PUB.count_msg;
13143   IF l_msg_count > 0 THEN
13144     x_msg_count := l_msg_count;
13145     IF x_msg_count = 1 THEN
13146       x_msg_data := l_msg_data;
13147     END IF;
13148     RAISE FND_API.G_EXC_ERROR;
13149   END IF;
13150 
13151   --Search for outgoing links for the structure version; create new Links
13152   -- Amit: Code(get_to_id) which was commented earlier is removed. If needed it can be found from COPY_STRUCTURE_VERSION
13153 
13154   --hsiu: added to check for structure type
13155   l_wp_struc := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
13156   l_fin_struc:= PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
13157 
13158   OPEN l_get_structure_type_csr(p_structure_version_id);
13159   FETCH l_get_structure_type_csr INTO l_structure_type;
13160   CLOSE l_get_structure_type_csr;
13161 
13162   -- If structure is workplan type create schedule version record
13163 --  if l_structure_type = 'WORKPLAN' then
13164   IF (l_wp_struc = 'Y') THEN
13165 
13166     OPEN l_get_ver_schedule_attr_csr(p_structure_version_id);
13167     FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
13168     CLOSE l_get_ver_schedule_attr_csr;
13169 
13170   -- Amit: Code(PA_TASK_PUB1.CREATE_SCHEDULE_VERSION) which was commented earlier is removed.
13171   -- If needed it can be found from COPY_STRUCTURE_VERSION
13172 
13173     l_pev_schedule_id := NULL;
13174     PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
13175          X_ROW_ID               => X_Row_Id
13176         ,X_PEV_SCHEDULE_ID          => l_pev_schedule_id
13177         ,X_ELEMENT_VERSION_ID           => l_new_struct_ver_id
13178         ,X_PROJECT_ID               => l_ver_schedule_attr_rec.PROJECT_ID
13179         ,X_PROJ_ELEMENT_ID          => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
13180         ,X_SCHEDULED_START_DATE         => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
13181         ,X_SCHEDULED_FINISH_DATE        => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
13182         ,X_OBLIGATION_START_DATE        => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
13183         ,X_OBLIGATION_FINISH_DATE       => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
13184         ,X_ACTUAL_START_DATE            => l_ver_schedule_attr_rec.ACTUAL_START_DATE
13185         ,X_ACTUAL_FINISH_DATE           => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
13186         ,X_ESTIMATED_START_DATE         => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
13187         ,X_ESTIMATED_FINISH_DATE        => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
13188         ,X_DURATION             => l_ver_schedule_attr_rec.DURATION
13189         ,X_EARLY_START_DATE         => l_ver_schedule_attr_rec.EARLY_START_DATE
13190         ,X_EARLY_FINISH_DATE            => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
13191         ,X_LATE_START_DATE          => l_ver_schedule_attr_rec.LATE_START_DATE
13192         ,X_LATE_FINISH_DATE         => l_ver_schedule_attr_rec.LATE_FINISH_DATE
13193         ,X_CALENDAR_ID              => l_ver_schedule_attr_rec.CALENDAR_ID
13194         ,X_MILESTONE_FLAG           => l_ver_schedule_attr_rec.MILESTONE_FLAG
13195         ,X_CRITICAL_FLAG            => l_ver_schedule_attr_rec.CRITICAL_FLAG
13196         ,X_WQ_PLANNED_QUANTITY          => l_ver_schedule_attr_rec.wq_planned_quantity
13197         ,X_PLANNED_EFFORT           => l_ver_schedule_attr_rec.planned_effort
13198         ,X_ACTUAL_DURATION          => l_ver_schedule_attr_rec.actual_duration
13199         ,X_ESTIMATED_DURATION           => l_ver_schedule_attr_rec.estimated_duration
13200         ,X_ATTRIBUTE_CATEGORY           => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
13201         ,X_ATTRIBUTE1               => l_ver_schedule_attr_rec.ATTRIBUTE1
13202         ,X_ATTRIBUTE2               => l_ver_schedule_attr_rec.ATTRIBUTE2
13203         ,X_ATTRIBUTE3               => l_ver_schedule_attr_rec.ATTRIBUTE3
13204         ,X_ATTRIBUTE4               => l_ver_schedule_attr_rec.ATTRIBUTE4
13205         ,X_ATTRIBUTE5               => l_ver_schedule_attr_rec.ATTRIBUTE5
13206         ,X_ATTRIBUTE6               => l_ver_schedule_attr_rec.ATTRIBUTE6
13207         ,X_ATTRIBUTE7               => l_ver_schedule_attr_rec.ATTRIBUTE7
13208         ,X_ATTRIBUTE8               => l_ver_schedule_attr_rec.ATTRIBUTE8
13209         ,X_ATTRIBUTE9               => l_ver_schedule_attr_rec.ATTRIBUTE9
13210         ,X_ATTRIBUTE10              => l_ver_schedule_attr_rec.ATTRIBUTE10
13211         ,X_ATTRIBUTE11              => l_ver_schedule_attr_rec.ATTRIBUTE11
13212         ,X_ATTRIBUTE12              => l_ver_schedule_attr_rec.ATTRIBUTE12
13213         ,X_ATTRIBUTE13              => l_ver_schedule_attr_rec.ATTRIBUTE13
13214         ,X_ATTRIBUTE14              => l_ver_schedule_attr_rec.ATTRIBUTE14
13215         ,X_ATTRIBUTE15              => l_ver_schedule_attr_rec.ATTRIBUTE15
13216     ,X_SOURCE_OBJECT_ID   => l_ver_schedule_attr_rec.PROJECT_ID
13217         ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
13218     );
13219 
13220 
13221     IF (p_debug_mode = 'Y') THEN
13222       pa_debug.debug('Create Schedule Version Bulk return status: ' || l_return_status);
13223       pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
13224     END IF;
13225 
13226     --Check if there is any error.
13227     l_msg_count := FND_MSG_PUB.count_msg;
13228     IF l_msg_count > 0 THEN
13229       x_msg_count := l_msg_count;
13230       IF x_msg_count = 1 THEN
13231         x_msg_data := l_msg_data;
13232       END IF;
13233       RAISE FND_API.G_EXC_ERROR;
13234     END IF;
13235   END IF;
13236 
13237 --  ELSIF l_structure_type in ('FINANCIAL') then
13238   IF l_wp_struc = 'N' and l_fin_struc = 'Y' THEN
13239     -- There can only be one working version any any time for a financial structure
13240     OPEN l_check_working_versions_csr(p_structure_version_id);
13241     FETCH l_check_working_versions_csr INTO l_dummy;
13242     if l_check_working_versions_csr%FOUND then
13243       CLOSE l_check_working_versions_csr;
13244       PA_UTILS.ADD_MESSAGE('PA','PA_PS_WORKING_VER_EXISTS');
13245       x_msg_data := 'PA_PS_WORKING_VER_EXISTS';
13246       RAISE FND_API.G_EXC_ERROR;
13247     end if;
13248     CLOSE l_check_working_versions_csr;
13249   end if;
13250 
13251   -- Amit The code to get all the task versions and then create task versions one by one is commented
13252   -- Now we are using bulk insert for this purpose.
13253 
13254     l_user_id := FND_GLOBAl.user_id;
13255     l_login_id := FND_GLOBAl.login_id;
13256 
13257     INSERT INTO pa_proj_element_versions(
13258                      ELEMENT_VERSION_ID
13259                     ,PROJ_ELEMENT_ID
13260                     ,OBJECT_TYPE
13261                     ,PROJECT_ID
13262                     ,PARENT_STRUCTURE_VERSION_ID
13263                     ,DISPLAY_SEQUENCE
13264                     ,WBS_LEVEL
13265                     ,WBS_NUMBER
13266                     ,CREATION_DATE
13267                     ,CREATED_BY
13268                     ,LAST_UPDATE_DATE
13269                     ,LAST_UPDATED_BY
13270                     ,LAST_UPDATE_LOGIN
13271                     ,RECORD_VERSION_NUMBER
13272                     ,ATTRIBUTE_CATEGORY
13273                      ,ATTRIBUTE1
13274                      ,ATTRIBUTE2
13275                      ,ATTRIBUTE3
13276                      ,ATTRIBUTE4
13277                      ,ATTRIBUTE5
13278                      ,ATTRIBUTE6
13279                      ,ATTRIBUTE7
13280                      ,ATTRIBUTE8
13281                      ,ATTRIBUTE9
13282                      ,ATTRIBUTE10
13283                      ,ATTRIBUTE11
13284                      ,ATTRIBUTE12
13285                      ,ATTRIBUTE13
13286                      ,ATTRIBUTE14
13287                      ,TASK_UNPUB_VER_STATUS_CODE
13288                      ,FINANCIAL_TASK_FLAG
13289                     ,attribute15          --this column is used to store structure ver id of the source str to be used to created relationships.
13290             ,source_object_id
13291                     ,source_object_type
13292                     )
13293                   SELECT
13294                      pa_proj_element_versions_s.nextval
13295                     ,ppev.proj_element_id
13296                     ,ppev.object_type
13297                     ,l_project_id
13298                     ,l_new_struct_ver_id
13299                     ,ppev.display_sequence
13300                     ,ppev.WBS_LEVEL
13301                     ,ppev.WBS_NUMBER
13302                     ,SYSDATE
13303                     ,l_user_id
13304                     ,SYSDATE
13305                     ,l_user_id
13306                     ,l_login_id
13307                      ,ppev.RECORD_VERSION_NUMBER
13308                      ,ppev.ATTRIBUTE_CATEGORY
13309                      ,ppev.ATTRIBUTE1
13310                      ,ppev.ATTRIBUTE2
13311                      ,ppev.ATTRIBUTE3
13312                      ,ppev.ATTRIBUTE4
13313                      ,ppev.ATTRIBUTE5
13314                      ,ppev.ATTRIBUTE6
13315                      ,ppev.ATTRIBUTE7
13316                      ,ppev.ATTRIBUTE8
13317                      ,ppev.ATTRIBUTE9
13318                      ,ppev.ATTRIBUTE10
13319                      ,ppev.ATTRIBUTE11
13320                      ,ppev.ATTRIBUTE12
13321                      ,ppev.ATTRIBUTE13
13322                      ,ppev.ATTRIBUTE14
13323                      ,ppev.TASK_UNPUB_VER_STATUS_CODE
13324                      ,ppev.FINANCIAL_TASK_FLAG
13325                      ,ppev.element_version_id
13326              ,l_project_id
13327              ,'PA_PROJECTS'
13328                   FROM ( SELECT ppev2.* from pa_proj_element_versions ppev2
13329                   ,pa_proj_elements ppe  --bug 4573340
13330                           WHERE -- bug#3094283 ppev2.project_id = l_project_id
13331                             ppev2.parent_structure_version_id = p_structure_version_id
13332                          --bug 4573340
13333                             and ppe.project_id = ppev2.project_id
13334                             and ppe.proj_element_id = ppev2.proj_element_id
13335                             and ppe.link_task_flag = 'N'
13336                          --bug 4573340
13337                             and ppev2.object_type = 'PA_TASKS'
13338                            order by ppev2.display_sequence ) ppev
13339                     ;
13340            -- Bug 4205167 : Added hint to use Hash Join
13341               INSERT INTO PA_OBJECT_RELATIONSHIPS (
13342                                   object_relationship_id,
13343                                   object_type_from,
13344                                   object_id_from1,
13345                                   object_type_to,
13346                                   object_id_to1,
13347                                   relationship_type,
13348                                   relationship_subtype,
13349                                   Record_Version_Number,
13350                                   CREATED_BY,
13351                                   CREATION_DATE,
13352                                   LAST_UPDATED_BY,
13353                                   LAST_UPDATE_DATE,
13354                                   LAST_UPDATE_LOGIN,
13355                                   weighting_percentage
13356                                   )
13357                  SELECT /*+ USE_HASH(ppev2 ppev1)*/
13358                                pa_object_relationships_s.nextval,
13359                                pobj.object_type_from,
13360                            ppev1.element_version_id,
13361                    pobj.object_type_to,
13362                    ppev2.element_version_id,
13363                    pobj.relationship_type,
13364                    pobj.relationship_subtype,
13365                                pobj.Record_Version_Number,
13366                                l_user_id,
13367                                SYSDATE,
13368                                l_user_id,
13369                                SYSDATE,
13370                                l_login_id,
13371                                pobj.weighting_percentage
13372                     FROM ( SELECT  object_type_from, object_id_from1,
13373                                    object_type_to,   object_id_to1,
13374                                    relationship_type, relationship_subtype,
13375                                    Record_Version_Number, weighting_percentage
13376                              FROM pa_object_relationships
13377                      --bug#3094283       WHERE RELATIONSHIP_TYPE = 'S'
13378                              start with object_id_from1 = p_structure_version_id
13379                   and RELATIONSHIP_TYPE = 'S'  /* Bug 2881667 - Added this condition */
13380                              connect by  object_id_from1 =  prior object_id_to1
13381                               and RELATIONSHIP_TYPE = 'S' ) pobj,   /* Bug 2881667 - Added this condition */
13382                          pa_proj_element_versions ppev1,
13383                          pa_proj_element_versions ppev2
13384                  WHERE
13385                    --bug#3094283    ppev1.project_id = l_project_id
13386                    ppev1.attribute15 = pobj.object_id_from1
13387                    --bug#3094283 AND ppev2.project_id = l_project_id
13388                    AND ppev2.attribute15 = pobj.object_id_to1
13389                    and ppev1.parent_structure_version_id = l_new_struct_ver_id
13390                    and ppev2.parent_structure_version_id = l_new_struct_ver_id
13391                    ;
13392 
13393 
13394               INSERT INTO pa_proj_elem_ver_schedule(
13395                             PEV_SCHEDULE_ID
13396                            ,ELEMENT_VERSION_ID
13397                            ,PROJECT_ID
13398                            ,PROJ_ELEMENT_ID
13399                            ,CREATION_DATE
13400                            ,CREATED_BY
13401                            ,LAST_UPDATE_DATE
13402                            ,LAST_UPDATED_BY
13403                            ,SCHEDULED_START_DATE
13404                            ,SCHEDULED_FINISH_DATE
13405                            ,OBLIGATION_START_DATE
13406                            ,OBLIGATION_FINISH_DATE
13407                            ,ACTUAL_START_DATE
13408                            ,ACTUAL_FINISH_DATE
13409                            ,ESTIMATED_START_DATE
13410                            ,ESTIMATED_FINISH_DATE
13411                            ,DURATION
13412                            ,EARLY_START_DATE
13413                            ,EARLY_FINISH_DATE
13414                            ,LATE_START_DATE
13415                            ,LATE_FINISH_DATE
13416                            ,CALENDAR_ID
13417                            ,MILESTONE_FLAG
13418                            ,CRITICAL_FLAG
13419                            ,RECORD_VERSION_NUMBER
13420                            ,LAST_UPDATE_LOGIN
13421                            ,WQ_PLANNED_QUANTITY
13422                            ,PLANNED_EFFORT
13423                            ,ACTUAL_DURATION
13424                            ,ESTIMATED_DURATION
13425                            ,ATTRIBUTE_CATEGORY
13426                            ,ATTRIBUTE1
13427                            ,ATTRIBUTE2
13428                            ,ATTRIBUTE3
13429                            ,ATTRIBUTE4
13430                            ,ATTRIBUTE5
13431                            ,ATTRIBUTE6
13432                            ,ATTRIBUTE7
13433                            ,ATTRIBUTE8
13434                            ,ATTRIBUTE9
13435                            ,ATTRIBUTE10
13436                            ,ATTRIBUTE11
13437                            ,ATTRIBUTE12
13438                            ,ATTRIBUTE13
13439                            ,ATTRIBUTE14
13440                            ,ATTRIBUTE15
13441                ,source_object_id
13442                ,source_object_type
13443                ,CONSTRAINT_TYPE_CODE
13444                ,CONSTRAINT_DATE
13445                ,FREE_SLACK
13446                ,TOTAL_SLACK
13447                ,EFFORT_DRIVEN_FLAG
13448                ,LEVEL_ASSIGNMENTS_FLAG
13449                ,EXT_ACT_DURATION
13450                ,EXT_REMAIN_DURATION
13451                ,EXT_SCH_DURATION
13452            ,DEF_SCH_TOOL_TSK_TYPE_CODE -- Fix For Bug # 4321287.
13453                               )
13454                         SELECT
13455                             pa_proj_elem_ver_schedule_s.nextval
13456                            ,ppev1.ELEMENT_VERSION_ID
13457                            ,l_PROJECT_ID
13458                            ,ppev1.PROJ_ELEMENT_ID
13459                            ,SYSDATE
13460                            ,l_user_id
13461                            ,SYSDATE
13462                            ,l_user_id
13463                            ,ppevs.SCHEDULED_START_DATE
13464                            ,ppevs.SCHEDULED_FINISH_DATE
13465                            ,ppevs.OBLIGATION_START_DATE
13466                            ,ppevs.OBLIGATION_FINISH_DATE
13467                            ,ppevs.ACTUAL_START_DATE
13468                            ,ppevs.ACTUAL_FINISH_DATE
13469                            ,ppevs.ESTIMATED_START_DATE
13470                            ,ppevs.ESTIMATED_FINISH_DATE
13471                            ,ppevs.DURATION
13472                            ,ppevs.EARLY_START_DATE
13473                            ,ppevs.EARLY_FINISH_DATE
13474                            ,ppevs.LATE_START_DATE
13475                            ,ppevs.LATE_FINISH_DATE
13476                            ,ppevs.CALENDAR_ID
13477                            ,ppevs.MILESTONE_FLAG
13478                            ,ppevs.CRITICAL_FLAG
13479                            ,ppevs.RECORD_VERSION_NUMBER
13480                            ,l_login_id
13481                            ,ppevs.WQ_PLANNED_QUANTITY
13482                            ,ppevs.PLANNED_EFFORT
13483                            ,ppevs.ACTUAL_DURATION
13484                            ,ppevs.ESTIMATED_DURATION
13485                            ,ppevs.ATTRIBUTE_CATEGORY
13486                            ,ppevs.ATTRIBUTE1
13487                            ,ppevs.ATTRIBUTE2
13488                            ,ppevs.ATTRIBUTE3
13489                            ,ppevs.ATTRIBUTE4
13490                            ,ppevs.ATTRIBUTE5
13491                            ,ppevs.ATTRIBUTE6
13492                            ,ppevs.ATTRIBUTE7
13493                            ,ppevs.ATTRIBUTE8
13494                            ,ppevs.ATTRIBUTE9
13495                            ,ppevs.ATTRIBUTE10
13496                            ,ppevs.ATTRIBUTE11
13497                            ,ppevs.ATTRIBUTE12
13498                            ,ppevs.ATTRIBUTE13
13499                            ,ppevs.ATTRIBUTE14
13500                            ,ppevs.ATTRIBUTE15
13501                ,l_PROJECT_ID
13502                ,'PA_PROJECTS'
13503                ,ppevs.CONSTRAINT_TYPE_CODE
13504                ,ppevs.CONSTRAINT_DATE
13505                ,ppevs.FREE_SLACK
13506                ,ppevs.TOTAL_SLACK
13507                ,ppevs.EFFORT_DRIVEN_FLAG
13508                ,ppevs.LEVEL_ASSIGNMENTS_FLAG
13509                ,ppevs.EXT_ACT_DURATION
13510                ,ppevs.EXT_REMAIN_DURATION
13511                ,ppevs.EXT_SCH_DURATION
13512            ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE -- Fix For Bug # 4321287.
13513                          FROM pa_proj_elem_ver_schedule ppevs,
13514                               pa_proj_element_versions ppev1
13515                            where ppev1.attribute15 = ppevs.element_version_id
13516                             and  ppevs.project_id = l_project_id
13517                             and  ppev1.project_id = l_project_id
13518                             and  ppev1.parent_structure_version_id = l_new_struct_ver_id
13519                             and  ppev1.object_type = 'PA_TASKS';
13520 
13521     -----------------------------------------FP_M Changes : Begin
13522     -- Refer to tracking bug 3305199
13523     --
13524     Declare
13525           /* Bug #: 3305199 SMukka                                                         */
13526           /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13527       /* Old_Versions_Tab  PA_PLSQL_DATATYPES.IdTabTyp;                                */
13528       /* New_Versions_Tab  PA_PLSQL_DATATYPES.IdTabTyp;                                */
13529       Old_Versions_Tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13530       New_Versions_Tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13531     Begin
13532       Select Element_Version_ID, attribute15 BULK COLLECT
13533       INTO   New_Versions_Tab, Old_Versions_Tab
13534       From   PA_Proj_Element_Versions
13535       Where  Project_ID = l_project_id
13536       AND    parent_structure_version_id = l_new_struct_ver_id;
13537 
13538       PA_Relationship_Pvt.Copy_Intra_Dependency (
13539         P_Source_Ver_Tbl  => Old_Versions_Tab,
13540         P_Destin_Ver_Tbl  => New_Versions_Tab,
13541         X_Return_Status   => X_Return_Status,
13542         X_Msg_Count     => X_Msg_Count,
13543         X_Msg_Data      => X_Msg_Data
13544       );
13545 
13546           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13547              RAISE FND_API.G_EXC_ERROR;
13548           END IF;
13549 
13550           PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
13551         P_Source_Ver_Tbl     => Old_Versions_Tab,
13552         P_Destin_Ver_Tbl     => New_Versions_Tab,
13553         X_Return_Status      => X_Return_Status,
13554         X_Msg_Count          => X_Msg_Count,
13555         X_Msg_Data           => X_Msg_Data
13556           );
13557           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13558              RAISE FND_API.G_EXC_ERROR;
13559           END IF;
13560     End;
13561         /* SMukka 01-Mar-04 Bug No. 3450684                                            */
13562         /* Added call to PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass               */
13563         /* API to copy all the out going sub project assoication                       */
13564 
13565     -- Begin fix for Bug # 4530436.
13566 
13567     -- The out going sub-project association links will not copied into the new structure version
13568     -- if the new structure version created is a working structure version.
13569 
13570     if
13571       (pa_project_structure_utils.Check_Struc_Ver_Published(l_project_id, l_new_struct_ver_id) = 'Y')
13572     then
13573 
13574     -- End fix for Bug # 4530436.
13575 
13576         PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
13577                                       p_validate_only           =>  p_validate_only,
13578                                       p_validation_level        =>  p_validation_level,
13579                                       p_calling_module          =>  p_calling_module,
13580                                       p_debug_mode              =>  p_debug_mode,
13581                                       p_max_msg_count           =>  p_max_msg_count,
13582                                       p_commit                  =>  p_commit,
13583                                       p_src_str_version_id      =>  p_structure_version_id,
13584                                       p_dest_str_version_id     =>  l_new_struct_ver_id,  -- Destination Str version id can be of published str also
13585                                       x_return_status           =>  X_Return_Status,
13586                                       x_msg_count               =>  X_Msg_Count,
13587                                       x_msg_data                =>  X_Msg_Data);
13588         IF (X_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
13589            x_msg_count := FND_MSG_PUB.count_msg;
13590            IF x_msg_count = 1 then
13591               pa_interface_utils_pub.get_messages
13592                    (p_encoded        => FND_API.G_TRUE,
13593                     p_msg_index      => 1,
13594                     p_msg_count      => l_msg_count,
13595                     p_msg_data       => l_msg_data,
13596                     p_data           => l_data,
13597                     p_msg_index_out  => l_msg_index_out);
13598                     x_msg_data := l_data;
13599            END IF;
13600            raise FND_API.G_EXC_ERROR;
13601         END IF;
13602 
13603     end if; -- Fix for Bug # 4530436.
13604 
13605       --3755117 for copying mapping
13606       BEGIN
13607         PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
13608            p_context             => 'CREATE_WORKING_VERSION'
13609           ,p_src_project_id      => l_project_id
13610           ,p_dest_project_id     => l_project_id
13611           ,p_src_str_version_id  => p_structure_version_id
13612           ,p_dest_str_version_id => l_new_struct_ver_id
13613           ,x_return_status       => x_return_status
13614           ,x_msg_count           => x_msg_count
13615           ,x_msg_data            => x_msg_data
13616         );
13617 
13618         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13619            RAISE FND_API.G_EXC_ERROR;
13620         END IF;
13621       EXCEPTION
13622         WHEN OTHERS THEN
13623           fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
13624                                   p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13625                                   p_error_text     => SUBSTRB('PA_PROJ_STRUC_MAPPING_PUB.copy_mapping:'||SQLERRM,1,240));
13626         RAISE FND_API.G_EXC_ERROR;
13627       END;
13628 
13629         -- Changes added by skannoji
13630         -- Added code for doosan customer
13631       IF (l_wp_struc = 'Y') THEN
13632         Declare
13633       /* Bug #: 3305199 SMukka                                                         */
13634           /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13635           /* src_versions_tab   PA_PLSQL_DATATYPES.IdTabTyp;                               */
13636           /* dest_versions_tab  PA_PLSQL_DATATYPES.IdTabTyp;                               */
13637           src_versions_tab   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13638           dest_versions_tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13639         Begin
13640            src_versions_tab.extend(1); /* Venky */
13641            dest_versions_tab.extend(1); /* Venky */
13642            src_versions_tab(1)  :=  p_structure_version_id;
13643            dest_versions_tab(1) :=  l_new_struct_ver_id;
13644 
13645           -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
13646            /*Smukka Bug No. 3474141 Date 03/01/2004                                    */
13647            /*moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block        */
13648            BEGIN
13649                PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
13650                (
13651                  p_source_project_id            => l_project_id
13652                 ,p_target_project_id            => l_project_id
13653                 ,p_src_sv_ids_tbl               => src_Versions_Tab /* Workplan version id tbl */
13654                 ,p_target_sv_ids_tbl            => dest_Versions_Tab /* Workplan version id tbl */
13655                 ,p_copy_mode                    => 'V'     --bug  5118313
13656                 ,x_return_status                => x_return_status
13657                 ,x_msg_count                    => x_msg_count
13658                 ,x_Msg_data                     => x_msg_data
13659                );
13660            EXCEPTION
13661                WHEN OTHERS THEN
13662                     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
13663                                             p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13664                                             p_error_text     => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
13665                RAISE FND_API.G_EXC_ERROR;
13666            END;
13667           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13668              RAISE FND_API.G_EXC_ERROR;
13669           END IF;
13670         End;
13671       END IF;
13672         -- till here by skannoji
13673 
13674     -----------------------------------------FP_M Changes : End
13675 
13676       UPDATE pa_proj_element_versions ppevs1
13677          SET attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
13678                           where ppevs2.project_id = l_project_id
13679                             and parent_structure_version_id = p_structure_version_id
13680                             and ppevs2.element_version_id = ppevs1.attribute15
13681                              )
13682           WHERE project_id = l_project_id
13683         AND parent_structure_version_id = l_new_struct_ver_id
13684        ;
13685 
13686 
13687   x_new_struct_ver_id := l_new_struct_ver_id;
13688   x_return_status := FND_API.G_RET_STS_SUCCESS;
13689 
13690   IF (p_commit = FND_API.G_TRUE) THEN
13691     COMMIT;
13692   END IF;
13693 
13694   IF (p_debug_mode = 'Y') THEN
13695     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK END');
13696   END IF;
13697 
13698 EXCEPTION
13699   when FND_API.G_EXC_ERROR then
13700     if p_commit = FND_API.G_TRUE then
13701       rollback to copy_structure_version_pvt_blk;
13702     end if;
13703     x_return_status := FND_API.G_RET_STS_ERROR;
13704   when FND_API.G_EXC_UNEXPECTED_ERROR then
13705     if p_commit = FND_API.G_TRUE then
13706       rollback to copy_structure_version_pvt_blk;
13707     end if;
13708     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13709     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
13710                             p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13711                             p_error_text     => SUBSTRB(SQLERRM,1,240));
13712   when OTHERS then
13713     if p_commit = FND_API.G_TRUE then
13714       rollback to copy_structure_version_pvt_blk;
13715     end if;
13716     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13717     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
13718                             p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13719                             p_error_text     => SUBSTRB(SQLERRM,1,240));
13720     raise;
13721 END COPY_STRUCTURE_VERSION_BULK;
13722 
13723 procedure update_sch_dirty_flag(
13724      p_project_id           IN NUMBER := NULL
13725     ,p_structure_version_id IN NUMBER
13726     ,p_dirty_flag           IN VARCHAR2 := 'N'
13727     ,x_return_status        OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13728     ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13729     ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13730 )
13731 IS
13732   l_dirty_flag    VARCHAR2(1);
13733   l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
13734 
13735    --Bug No 3634334
13736    --Commented the following query for performance reason and rewritten the same.
13737    --Getting the project_id from pa_proj_element_versions table instead of getting
13738    --it from pa_proj_elem_ver_structure table, in this optimizer will be using the
13739    --unique index on element_version_id and functionally the process is fetching
13740    --project_id
13741 /*  CURSOR get_proj_id(cp_structure_version_id NUMBER) IS
13742   SELECT project_id
13743     FROM pa_proj_elem_ver_structure
13744    WHERE element_version_id = cp_structure_version_id;*/
13745 
13746   CURSOR get_proj_id(cp_structure_version_id NUMBER) IS
13747   SELECT project_id
13748     FROM pa_proj_element_versions
13749    WHERE element_version_id = cp_structure_version_id;
13750    l_proj_id   NUMBER;
13751 BEGIN
13752 
13753 /*  IF (p_dirty_flag = 'N') THEN
13754     l_dirty_flag := 'N';
13755   ELSE
13756     l_dirty_flag := 'Y';
13757   END IF;*/
13758 
13759   IF (p_dirty_flag IS NULL) THEN
13760     l_dirty_flag := 'N';
13761   ELSE
13762     l_dirty_flag := p_dirty_flag;
13763   END IF;
13764 --
13765   IF p_project_id IS NULL THEN
13766      OPEN get_proj_id(p_structure_version_id);
13767      FETCH get_proj_id INTO l_proj_id;
13768      CLOSE get_proj_id;
13769 --
13770      UPDATE pa_proj_elem_ver_structure
13771         SET SCHEDULE_DIRTY_FLAG = l_dirty_flag
13772       WHERE element_version_id = p_structure_version_id
13773          AND project_id = l_proj_id;
13774   ELSE
13775      UPDATE pa_proj_elem_ver_structure
13776         SET SCHEDULE_DIRTY_FLAG = l_dirty_flag
13777       WHERE element_version_id = p_structure_version_id
13778         AND project_id = p_project_id;
13779   END IF;
13780 
13781   x_return_status := l_return_status;
13782 EXCEPTION
13783   WHEN OTHERS THEN
13784     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13785     x_msg_count := FND_MSG_PUB.count_msg;
13786     --put message
13787     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
13788                             p_procedure_name => 'update_sch_dirty_flag',
13789                             p_error_text     => SUBSTRB(SQLERRM,1,240));
13790     RAISE;
13791 END update_sch_dirty_flag;
13792 
13793 --bug 3305199
13794 --Please refer to update_structures_setup_old for old code
13795   PROCEDURE update_structures_setup_attr
13796   (  p_api_version      IN  NUMBER     := 1.0
13797     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
13798     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
13799     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
13800     ,p_validation_level IN  VARCHAR2   := 100
13801     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
13802     ,p_debug_mode       IN  VARCHAR2   := 'N'
13803     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13804     ,p_project_id IN NUMBER
13805     ,p_workplan_enabled_flag IN VARCHAR2
13806     ,p_financial_enabled_flag IN VARCHAR2
13807     ,p_sharing_enabled_flag IN VARCHAR2
13808     --FP M changes bug 3301192
13809     ,p_deliverables_enabled_flag       IN VARCHAR2
13810     ,p_sharing_option_code             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13811     --End FP M changes bug 3301192
13812     ,p_sys_program_flag  IN varchar2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13813     ,p_allow_multi_prog_rollup IN varchar2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13814     ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13815     ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13816     ,x_msg_data  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13817   )
13818   IS
13819     l_ret_stat           VARCHAR2(1);
13820     l_err_msg_code       VARCHAR2(250);
13821     l_suffix             VARCHAR2(80);
13822     l_name               VARCHAR2(240);
13823     l_append             VARCHAR2(10) := ': ';
13824     l_return_status      VARCHAR2(1);
13825     l_msg_count          NUMBER;
13826     l_msg_data           VARCHAR2(250);
13827     l_structure_id       NUMBER;
13828     l_structure_version_id NUMBER;
13829     l_template_flag      VARCHAR2(1);
13830     l_status_code        VARCHAR2(30);
13831     l_baseline_flag      VARCHAR2(1);
13832     l_latest_eff_pub_flag VARCHAR2(1);
13833     l_effective_date     DATE;
13834     l_wp_attr_rvn        NUMBER;
13835     l_rowid              VARCHAR2(255);
13836     l_keep_structure_ver_id NUMBER;
13837     l_del_struc_ver_id   NUMBER;
13838     l_struc_ver_rvn      NUMBER;
13839     l_pev_structure_id   NUMBER;
13840     l_pev_schedule_id    NUMBER;
13841     l_struc_ver_attr_rvn NUMBER;
13842     l_struc_type_id      NUMBER;
13843     l_proj_structure_type_id NUMBER;
13844     l_task_id            NUMBER;
13845     l_element_version_id NUMBER;
13846     l_start_date         DATE;
13847     l_completion_date    DATE;
13848     l_object_type        VARCHAR2(30);
13849     l_task_ver_id        NUMBER;
13850    /* Bug 2790703 Begin */
13851     -- l_task_ver_ids       PA_NUM_1000_NUM := PA_NUM_1000_NUM();
13852     l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
13853     l_index number :=0 ;
13854 /* Bug 2790703 End */
13855 
13856     l_proj_start_Date DATE;
13857     l_proj_completion_date DATE;
13858     l_proj_prog_attr_id NUMBER;
13859 
13860     -- FP.M Changes below
13861     l_sys_program_flag        PA_PROJECTS_ALL.sys_program_flag%TYPE;
13862     l_allow_multi_program_rollup    PA_PROJECTS_ALL.allow_multi_program_rollup%TYPE;
13863     l_proj_sys_program_flag        PA_PROJECTS_ALL.sys_program_flag%TYPE;
13864     l_proj_allow_program_rollup    PA_PROJECTS_ALL.allow_multi_program_rollup%TYPE;
13865     l_flag                    VARCHAR2(1);
13866 
13867     -- NYU
13868     l_del_trans_exist VARCHAR2(1);
13869 
13870     CURSOR get_project_info IS
13871       select name, target_start_date, target_finish_date, sys_program_flag, allow_multi_program_rollup
13872         from pa_projects_all
13873        where project_id = p_project_id;
13874 
13875 --bug 2843569: added record_version_number
13876     CURSOR get_template_flag IS
13877       select template_flag, record_version_number
13878         from pa_projects_all
13879        where project_id = p_project_id;
13880 
13881     CURSOR get_wp_attr_rvn IS
13882       select b.proj_element_id, a.record_version_number
13883         from pa_proj_workplan_attr a,
13884              pa_proj_elements b,
13885              pa_proj_structure_types c,
13886              pa_structure_types d
13887        where a.project_id = b.project_id
13888          and a.proj_element_id = b.proj_element_id
13889          and b.project_id = p_project_id
13890          and b.proj_element_id = c.proj_element_id
13891          and c.structure_type_id = d.structure_type_id
13892          and d.structure_type_class_code = 'WORKPLAN';
13893 
13894     cursor sel_wp_struct_type(c_structure_id NUMBER) IS
13895       select a.rowid
13896         from pa_proj_structure_types a,
13897              pa_structure_types b
13898        where a.proj_element_id = c_structure_id
13899          and a.structure_type_id = b.structure_type_id
13900          and b.structure_type_class_code = 'WORKPLAN';
13901 
13902     cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
13903       select element_version_id
13904         from pa_proj_elem_ver_structure
13905        where proj_element_id = c_structure_id
13906          and project_id = p_project_id
13907          and status_code = 'STRUCTURE_PUBLISHED'
13908          and LATEST_EFF_PUBLISHED_FLAG = 'Y';
13909 
13910     --bug 4054587, replace literal with bind variable
13911     l_wp_structure_code VARCHAR2(10) := 'WORKPLAN';
13912     cursor sel_wp_structure_id IS
13913       select a.proj_element_id
13914         from pa_proj_elements a,
13915              pa_proj_structure_types b,
13916              pa_structure_types c
13917        where a.project_id = p_project_id
13918          and a.object_type = 'PA_STRUCTURES'
13919          and a.proj_element_id = b.proj_element_id
13920          and b.structure_type_id = c.structure_type_id
13921          --and c.structure_type_class_code = 'WORKPLAN';
13922          and c.structure_type_class_code = l_wp_structure_code;
13923 
13924     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
13925       select b.element_version_id, b.record_version_number
13926         from pa_proj_element_versions a,
13927              pa_proj_element_versions b
13928        where a.element_version_id = c_keep_struc_ver_id
13929          and a.project_id = b.project_id
13930          and a.proj_element_id = b.proj_element_id
13931          and b.element_version_id <> c_keep_struc_ver_id
13932          and b.object_type = 'PA_STRUCTURES';
13933 
13934     cursor sel_all_wp_structure_ver(c_struc_id NUMBER) IS
13935       select a.element_version_id, a.record_version_number
13936         from pa_proj_element_versions a,
13937              pa_proj_elements b
13938        where a.proj_element_id = b.proj_element_id
13939          and a.project_id = b.project_id
13940          and b.proj_element_id = c_struc_id;
13941 
13942     cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
13943       select PEV_STRUCTURE_ID, record_version_number
13944         from pa_proj_elem_ver_structure
13945        where project_id = p_project_id
13946          and element_version_id = c_struc_ver_id;
13947 
13948     cursor sel_proj_workplan_attr(c_struc_id NUMBER) is
13949       select *
13950         from pa_proj_workplan_attr
13951        where proj_element_id = c_struc_id;
13952     l_proj_workplan_attr_rec  sel_proj_workplan_attr%ROWTYPE;
13953 
13954     cursor sel_proj_progress_attr(c_struc_id NUMBER) IS
13955       select *
13956         from pa_proj_progress_attr
13957        where project_id = p_project_id
13958          and object_type = 'PA_STRUCTURES'
13959          and object_id = c_struc_id;
13960     l_proj_progress_attr_rec  sel_proj_progress_attr%ROWTYPE;
13961 
13962     --bug 4054587, replace literal with bind variable
13963     l_fin_structure_code VARCHAR2(10) := 'FINANCIAL';
13964     cursor sel_fin_structure_id IS
13965       select a.proj_element_id
13966         from pa_proj_elements a,
13967              pa_proj_structure_types b,
13968              pa_structure_types c
13969        where a.project_id = p_project_id
13970          and a.object_type = 'PA_STRUCTURES'
13971          and a.proj_element_id = b.proj_element_id
13972          and b.structure_type_id = c.structure_type_id
13973          --and c.structure_type_class_code = 'FINANCIAL';
13974          and c.structure_type_class_code = l_fin_structure_code;
13975 
13976     CURSOR sel_struc_type_id IS
13977       select structure_type_id
13978         from pa_structure_types
13979        where structure_type_class_code = 'WORKPLAN';
13980 
13981     cursor sel_struc_ver(c_structure_id NUMBER) IS
13982       select element_version_id
13983         from pa_proj_element_versions
13984        where project_id = p_project_id
13985          and proj_element_id = c_structure_id
13986          and object_type = 'PA_STRUCTURES';
13987 
13988 --hsiu: commented for performance
13989 --    cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
13990 --      select object_type, proj_element_id, element_version_id
13991 --        from pa_proj_element_versions
13992 --       where parent_structure_version_id = c_struc_ver_id;
13993     cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
13994       select pev.object_type, pev.proj_element_id, pev.element_version_id
13995         from pa_proj_element_versions pev, pa_object_relationships rel
13996        where pev.parent_structure_version_id = c_struc_ver_id
13997          and rel.object_id_to1 = pev.element_version_id
13998          and rel.relationship_type = 'S'
13999          and NOT EXISTS (
14000                select 1
14001                  from pa_object_Relationships
14002                 where object_id_from1 = pev.element_version_id
14003                   and relationship_type = 'S'
14004              );
14005 
14006 
14007     cursor sel_task_dates(c_task_id NUMBER) IS
14008       select start_date, completion_date
14009         from pa_tasks
14010        where task_id = c_task_id;
14011 
14012 --hsiu added for bug 2634029
14013     cursor sel_target_dates IS
14014       select target_start_date, target_finish_date, calendar_id
14015         from pa_projects_all
14016        where project_id = p_project_id;
14017 
14018     CURSOR get_top_tasks(c_structure_version_id NUMBER) IS
14019            select v.element_version_id
14020              from pa_proj_element_versions v,
14021                   pa_object_relationships r
14022             where v.element_version_id = r.object_id_to1
14023               and r.object_id_from1 = c_structure_version_id
14024               and r.object_type_from = 'PA_STRUCTURES';
14025 
14026 --bug 2843569
14027     CURSOR get_scheduled_dates(c_project_Id NUMBER,
14028                                 c_element_version_id NUMBER) IS
14029            select a.scheduled_start_date, a.scheduled_finish_date
14030              from pa_proj_elem_ver_schedule a
14031             where a.project_id = c_project_id
14032               and a.element_version_id = c_element_version_id;
14033     l_get_sch_dates_cur get_scheduled_dates%ROWTYPE;
14034     l_proj_rec_ver_num      NUMBER;
14035 --end bug 2843569
14036 
14037     l_target_start_date     DATE;
14038     l_target_finish_date    DATE;
14039     l_calendar_id           NUMBER;
14040 --end changes for bug 2634029
14041 
14042 --bug 3010538
14043     l_task_weight_basis_code VARCHAR2(30);
14044     l_update_proc_wbs_flag VARCHAR2(1);
14045 --end bug 3010538
14046 
14047     l_wp_name               VARCHAR2(240);
14048 
14049     CURSOR sel_fin_struc_type_id IS
14050       select structure_type_id
14051         from pa_structure_types
14052        where structure_type_class_code = 'FINANCIAL';
14053     l_fin_struc_type_id NUMBER;
14054     l_del_name          VARCHAR2(240);
14055     l_wp_enabled        VARCHAR2(1);
14056     l_fin_enabled       VARCHAR2(1);
14057     l_delv_enabled      VARCHAR2(1);
14058     l_share_code        VARCHAR2(30);
14059     l_new_share_code    VARCHAR2(30);
14060 
14061     l_struct_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
14062 
14063 /*  Bug # 3420093. Progress Management changes. */
14064 
14065     l_proj_progress_attr_id     NUMBER;
14066 
14067 /*      Bug # 3420093. Progress Management changes.     */
14068 
14069 -- Begin fix for Bug # 4426392.
14070 
14071    cursor cur_program (c_project_id NUMBER) is
14072    select 'Y'
14073    from pa_object_relationships por
14074    where (por.object_id_from2 = c_project_id
14075           or por.object_id_to2 = c_project_id)
14076    and por.relationship_type in ('LW', 'LF');
14077 
14078    l_program    VARCHAR2(1) := null;
14079 
14080    cursor cur_links (c_project_id NUMBER) is
14081    -- Select links from the working structure version of all parent projects
14082    -- with sharing enabled to the given project.
14083    select por1.object_relationship_id obj_rel_id
14084           , por1.object_id_from2 src_proj_id
14085           , por2.object_id_from1 task_ver_id
14086           , c_project_id dest_proj_id
14087           , ppev.parent_structure_version_id src_str_ver_id
14088           , por1.record_version_number rec_ver_number
14089    from pa_object_relationships por1
14090         , pa_object_relationships por2
14091         , pa_projects_all ppa
14092         , pa_proj_element_versions ppev
14093         , pa_proj_elem_ver_structure ppevs
14094    where por1.object_id_to2 = c_project_id
14095          and por1.relationship_type in ('LW', 'LF')
14096          and por1.object_id_from1 = por2.object_id_to1
14097          and por2.relationship_type = 'S'
14098          and por1.object_id_from2 = ppa.project_id
14099          and ppa.structure_sharing_code in ('SHARE_FULL', 'SHARE_PARTIAL')
14100          and por2.object_id_from1 = ppev.element_version_id
14101          -- Bug Fix 4868867
14102          -- Ram Namburi
14103          -- adding the following additional project id join to avoid the Full Table Scan on
14104          --  pa_proj_elem_ver_structure table and to use N1.
14105          and ppev.project_id = ppevs.project_id
14106          and ppev.parent_structure_version_id = ppevs.element_version_id
14107          and ppevs.current_working_flag = 'Y'
14108    union
14109    -- Select links from the working structure version of the given project to all child projects
14110    -- with sharing enabled.
14111     select por1.object_relationship_id obj_rel_id
14112           , c_project_id src_proj_id
14113           , por2.object_id_from1 task_ver_id
14114           , por1.object_id_to2 dest_proj_id
14115           , ppev.parent_structure_version_id src_str_ver_id
14116           , por1.record_version_number rec_ver_number
14117    from pa_object_relationships por1
14118         , pa_object_relationships por2
14119         , pa_projects_all ppa
14120         , pa_proj_element_versions ppev
14121         , pa_proj_elem_ver_structure ppevs
14122    where por1.object_id_from2 = c_project_id
14123          and por1.relationship_type in ('LW', 'LF')
14124          and por1.object_id_from1 = por2.object_id_to1
14125          and por2.relationship_type = 'S'
14126          and por1.object_id_to2 = ppa.project_id
14127          and ppa.structure_sharing_code in ('SHARE_FULL', 'SHARE_PARTIAL')
14128          and por2.object_id_from1 = ppev.element_version_id
14129          -- Bug Fix 4868867
14130          -- Ram Namburi
14131          -- adding the following additional project id join to avoid the Full Table Scan on
14132          --  pa_proj_elem_ver_structure table and to use N1.
14133          and ppev.project_id = ppevs.project_id
14134          and ppev.parent_structure_version_id = ppevs.element_version_id
14135          and ppevs.current_working_flag = 'Y';
14136 
14137    l_cur_links_rec      cur_links%rowtype;
14138 
14139    l_comment            VARCHAR2(30) := null;
14140 
14141    l_dest_proj_name     VARCHAR2(30) := null;
14142 
14143 -- End fix for Bug # 4426392.
14144 
14145   BEGIN
14146     IF (p_debug_mode = 'Y') THEN
14147       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr');
14148     END IF;
14149 
14150     IF (p_commit = FND_API.G_TRUE) THEN
14151       savepoint update_struc_setup_attr_pvt;
14152     END IF;
14153 
14154     IF (p_debug_mode = 'Y') THEN
14155       pa_debug.debug('Performing validations');
14156     END IF;
14157 
14158 l_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_workplan_enabled(p_project_id);
14159 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_financial_enabled(p_project_id);
14160 l_share_code := PA_PROJECT_STRUCTURE_UTILS.Get_Structure_sharing_code(p_project_id);
14161 l_delv_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_deliverable_enabled(p_project_id);
14162 
14163 
14164 --get template flag
14165 OPEN get_template_flag;
14166 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
14167 CLOSE get_template_flag;
14168 
14169 --get project name
14170 OPEN get_project_info;
14171 FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date, l_proj_sys_program_flag, l_proj_allow_program_rollup;
14172 CLOSE get_project_info;
14173 
14174 -- Begin fix for Bug # 4426392.
14175 
14176 -- If a project is part of a program then the user cannot disable its project structures
14177 -- or change its structure integration option from split tp shared or vice-versa.
14178 
14179 -- Please ensure that this code s always the first check in this API.
14180 
14181 open cur_program(p_project_id);
14182 fetch cur_program into l_program;
14183 close cur_program;
14184 
14185 if (
14186      (nvl(l_program,'N') = 'Y')
14187      and (((l_wp_enabled = 'Y') and (p_workplan_enabled_flag = 'N'))
14188          or ((l_fin_enabled = 'Y') and (p_financial_enabled_flag = 'N'))
14189          or ((l_share_code in ('SHARE_FULL','SHARE_PARTIAL'))
14190              and (p_sharing_option_code in ('SPLIT_MAPPING','SPLIT_NO_MAPPING')))
14191          or ((l_share_code in ('SPLIT_MAPPING','SPLIT_NO_MAPPING'))
14192              and (p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL'))))
14193     ) then
14194 
14195         PA_UTILS.ADD_MESSAGE('PA', 'PA_WP_PROG_CANT_CHG_STR');
14196 
14197         RAISE FND_API.G_EXC_ERROR;
14198 
14199 end if;
14200 
14201 -- End fix for Bug # 4426392.
14202 
14203 --check if ok to enable workplan
14204 If (l_wp_enabled <> p_workplan_enabled_flag AND p_workplan_enabled_flag = 'Y') THEN
14205   PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
14206                                                        l_ret_stat,
14207                                                        l_err_msg_code);
14208   IF (l_ret_stat = 'N') THEN
14209     PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14210     x_msg_data := l_err_msg_code;
14211     RAISE FND_API.G_EXC_ERROR;
14212   END IF;
14213 END IF;
14214 
14215 --check if ok to disable workplan
14216 IF (l_wp_enabled <> p_workplan_enabled_flag AND p_workplan_enabled_flag = 'N') THEN
14217   PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
14218                                                        l_ret_stat,
14219                                                        l_err_msg_code);
14220   IF (l_ret_stat = 'N') THEN
14221     PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14222     x_msg_data := l_err_msg_code;
14223     RAISE FND_API.G_EXC_ERROR;
14224   END IF;
14225 END IF;
14226 
14227 --check if ok to share
14228     IF (l_share_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING') and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
14229         PA_PROJECT_STRUCTURE_UTILS.check_sharing_on_ok(p_project_id,
14230                                                        l_ret_stat,
14231                                                        l_err_msg_code);
14232         IF (l_ret_stat = 'N') THEN
14233             PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14234             x_msg_data := l_err_msg_code;
14235             RAISE FND_API.G_EXC_ERROR;
14236         END IF;
14237     END IF;
14238 
14239 --check if ok to split
14240   IF (l_share_code IN ('SHARE_FULL','SHARE_PARTIAL') and p_sharing_option_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING')) THEN
14241     PA_PROJECT_STRUCTURE_UTILS.check_sharing_off_ok(p_project_id,
14242                                                         l_ret_stat,
14243                                                         l_err_msg_code);
14244     IF (l_ret_stat = 'N') THEN
14245       PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14246       x_msg_data := l_err_msg_code;
14247       RAISE FND_API.G_EXC_ERROR;
14248     END IF;
14249   END IF;
14250 
14251 IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
14252   l_proj_completion_date := l_proj_start_date;
14253 ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
14254   l_proj_completion_date := sysdate;
14255   l_proj_start_date := sysdate;
14256 END IF;
14257 
14258 --get suffix
14259 select meaning
14260 into l_suffix
14261 from pa_lookups
14262 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
14263 and lookup_code = 'WORKPLAN';
14264 --get workplan name
14265 l_wp_name := substrb(l_name||l_append||l_suffix, 1, 240);
14266 
14267 --check for
14268 IF (l_wp_enabled = 'N' and l_fin_enabled = 'N') THEN
14269   --both currently disabled
14270   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
14271     --disabled both
14272     NULL;
14273   ELSIF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
14274     --disable workplan (enable financial)
14275     --create financial structure API
14276     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14277     (p_validate_only => FND_API.G_FALSE
14278     ,p_project_id    => p_project_id
14279     ,p_structure_number => l_name
14280     ,p_structure_name   => l_name
14281     ,p_calling_flag     => 'FINANCIAL'
14282     ,x_structure_id     => l_structure_id
14283     ,x_return_status    => l_return_status
14284     ,x_msg_count        => l_msg_count
14285     ,x_msg_data         => l_msg_data);
14286 
14287     --Check if there is any error.
14288     l_msg_count := FND_MSG_PUB.count_msg;
14289     IF l_msg_count > 0 THEN
14290       x_msg_count := l_msg_count;
14291       IF x_msg_count = 1 THEN
14292         x_msg_data := l_msg_data;
14293       END IF;
14294       RAISE FND_API.G_EXC_ERROR;
14295     END IF;
14296 
14297     --create row in pa_proj_workplan_attr
14298     PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
14299     (p_validate_only => FND_API.G_FALSE
14300     ,p_project_id => p_project_id
14301     ,p_proj_element_id => l_structure_id
14302     ,x_return_status    => l_return_status
14303     ,x_msg_count        => l_msg_count
14304     ,x_msg_data         => l_msg_data);
14305 
14306     --Check if there is any error.
14307     l_msg_count := FND_MSG_PUB.count_msg;
14308     IF l_msg_count > 0 THEN
14309       x_msg_count := l_msg_count;
14310       IF x_msg_count = 1 THEN
14311         x_msg_data := l_msg_data;
14312       END IF;
14313       RAISE FND_API.G_EXC_ERROR;
14314     END IF;
14315 
14316     --create structure version
14317     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14318     (p_validate_only         => FND_API.G_FALSE
14319     ,p_structure_id          => l_structure_id
14320     ,x_structure_version_id  => l_structure_version_id
14321     ,x_return_status         => l_return_status
14322     ,x_msg_count             => l_msg_count
14323     ,x_msg_data              => l_msg_data );
14324 
14325     --Check if there is any error.
14326     l_msg_count := FND_MSG_PUB.count_msg;
14327     IF l_msg_count > 0 THEN
14328       x_msg_count := l_msg_count;
14329       IF x_msg_count = 1 THEN
14330         x_msg_data := l_msg_data;
14331       END IF;
14332       RAISE FND_API.G_EXC_ERROR;
14333     END IF;
14334 
14335     IF (l_template_flag = 'Y') THEN
14336       l_status_code := 'STRUCTURE_WORKING';
14337       l_baseline_flag := 'N';
14338       l_latest_eff_pub_flag := 'N';
14339       l_effective_date := NULL;
14340     ELSE
14341       l_status_code := 'STRUCTURE_PUBLISHED';
14342       l_baseline_flag := 'N';
14343       l_latest_eff_pub_flag := 'Y';
14344       l_effective_date := sysdate;
14345     END IF;
14346 
14347     --create structure version
14348     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14349     (p_validate_only               => FND_API.G_FALSE
14350     ,p_structure_version_id        => l_structure_version_id
14351     ,p_structure_version_name      => l_name
14352     ,p_structure_version_desc      => NULL
14353     ,p_effective_date              => l_effective_date
14354     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
14355     ,p_locked_status_code          => 'UNLOCKED'
14356     ,p_struct_version_status_code  => l_status_code
14357     ,p_baseline_current_flag       => l_baseline_flag
14358     ,p_baseline_original_flag      => 'N'
14359     ,x_pev_structure_id            => l_pev_structure_id
14360     ,x_return_status               => l_return_status
14361     ,x_msg_count                   => l_msg_count
14362     ,x_msg_data                    => l_msg_data );
14363 
14364     --Check if there is any error.
14365     l_msg_count := FND_MSG_PUB.count_msg;
14366     IF l_msg_count > 0 THEN
14367       x_msg_count := l_msg_count;
14368       IF x_msg_count = 1 THEN
14369         x_msg_data := l_msg_data;
14370       END IF;
14371       RAISE FND_API.G_EXC_ERROR;
14372     END IF;
14373 
14374   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
14375     --disable financial (enable workplan)
14376     --create workplan structure
14377     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14378     (p_validate_only           => FND_API.G_FALSE
14379     ,p_project_id              => p_project_id
14380     ,p_structure_number        => l_wp_name
14381     ,p_structure_name          => l_wp_name
14382     ,p_calling_flag            => 'WORKPLAN'
14383     ,x_structure_id            => l_structure_id
14384     ,x_return_status           => l_return_status
14385     ,x_msg_count               => l_msg_count
14386     ,x_msg_data                => l_msg_data );
14387 
14388     --Check if there is any error.
14389     l_msg_count := FND_MSG_PUB.count_msg;
14390     IF l_msg_count > 0 THEN
14391       x_msg_count := l_msg_count;
14392       IF x_msg_count = 1 THEN
14393         x_msg_data := l_msg_data;
14394       END IF;
14395       RAISE FND_API.G_EXC_ERROR;
14396     END IF;
14397 
14398     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14399     (p_validate_only         => FND_API.G_FALSE
14400     ,p_structure_id          => l_structure_id
14401     ,x_structure_version_id  => l_structure_version_id
14402     ,x_return_status         => l_return_status
14403     ,x_msg_count             => l_msg_count
14404     ,x_msg_data              => l_msg_data );
14405 
14406     --Check if there is any error.
14407     l_msg_count := FND_MSG_PUB.count_msg;
14408     IF l_msg_count > 0 THEN
14409       x_msg_count := l_msg_count;
14410       IF x_msg_count = 1 THEN
14411         x_msg_data := l_msg_data;
14412       END IF;
14413       RAISE FND_API.G_EXC_ERROR;
14414     END IF;
14415 
14416     PA_TASK_PUB1.Create_Schedule_Version(
14417      p_element_version_id      => l_structure_version_id
14418     ,p_scheduled_start_date    => l_proj_start_date
14419     ,p_scheduled_end_date      => l_proj_completion_date
14420     ,x_pev_schedule_id         => l_pev_schedule_id
14421     ,x_return_status           => l_return_status
14422     ,x_msg_count               => l_msg_count
14423     ,x_msg_data                => l_msg_data);
14424 
14425     --Check if there is any error.
14426     l_msg_count := FND_MSG_PUB.count_msg;
14427     IF l_msg_count > 0 THEN
14428       x_msg_count := l_msg_count;
14429       IF x_msg_count = 1 THEN
14430         x_msg_data := l_msg_data;
14431       END IF;
14432       RAISE FND_API.G_EXC_ERROR;
14433     END IF;
14434 
14435     IF (l_template_flag = 'Y') THEN
14436       l_status_code := 'STRUCTURE_WORKING';
14437       l_baseline_flag := 'N';
14438       l_latest_eff_pub_flag := 'N';
14439       l_effective_date := NULL;
14440     ELSE
14441       l_status_code := 'STRUCTURE_PUBLISHED';
14442       l_baseline_flag := 'Y';
14443       l_latest_eff_pub_flag := 'Y';
14444       l_effective_date := sysdate;
14445     END IF;
14446 
14447     --create structure version
14448     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14449     (p_validate_only               => FND_API.G_FALSE
14450     ,p_structure_version_id        => l_structure_version_id
14451     ,p_structure_version_name      => l_name
14452     ,p_structure_version_desc      => NULL
14453     ,p_effective_date              => l_effective_date
14454     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
14455     ,p_locked_status_code          => 'UNLOCKED'
14456     ,p_struct_version_status_code  => l_status_code
14457     ,p_baseline_current_flag       => l_baseline_flag
14458     ,p_baseline_original_flag      => 'N'
14459     ,x_pev_structure_id            => l_pev_structure_id
14460     ,x_return_status               => l_return_status
14461     ,x_msg_count                   => l_msg_count
14462     ,x_msg_data                    => l_msg_data );
14463 
14464     --Check if there is any error.
14465     l_msg_count := FND_MSG_PUB.count_msg;
14466     IF l_msg_count > 0 THEN
14467       x_msg_count := l_msg_count;
14468       IF x_msg_count = 1 THEN
14469         x_msg_data := l_msg_data;
14470       END IF;
14471       RAISE FND_API.G_EXC_ERROR;
14472     END IF;
14473 
14474   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL', 'SHARE_FULL')) THEN
14475     --partial share/full share
14476     --enable workplan structure API
14477     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14478     (p_validate_only           => FND_API.G_FALSE
14479     ,p_project_id              => p_project_id
14480     ,p_structure_number        => l_name
14481     ,p_structure_name          => l_name
14482     ,p_calling_flag            => 'WORKPLAN'
14483     ,x_structure_id            => l_structure_id
14484     ,x_return_status           => l_return_status
14485     ,x_msg_count               => l_msg_count
14486     ,x_msg_data                => l_msg_data );
14487 
14488     --Check if there is any error.
14489     l_msg_count := FND_MSG_PUB.count_msg;
14490     IF l_msg_count > 0 THEN
14491       x_msg_count := l_msg_count;
14492       IF x_msg_count = 1 THEN
14493         x_msg_data := l_msg_data;
14494       END IF;
14495       RAISE FND_API.G_EXC_ERROR;
14496     END IF;
14497 
14498     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14499     (p_validate_only         => FND_API.G_FALSE
14500     ,p_structure_id          => l_structure_id
14501     ,x_structure_version_id  => l_structure_version_id
14502     ,x_return_status         => l_return_status
14503     ,x_msg_count             => l_msg_count
14504     ,x_msg_data              => l_msg_data );
14505 
14506     --Check if there is any error.
14507     l_msg_count := FND_MSG_PUB.count_msg;
14508     IF l_msg_count > 0 THEN
14509       x_msg_count := l_msg_count;
14510       IF x_msg_count = 1 THEN
14511         x_msg_data := l_msg_data;
14512       END IF;
14513       RAISE FND_API.G_EXC_ERROR;
14514     END IF;
14515 
14516     PA_TASK_PUB1.Create_Schedule_Version(
14517      p_element_version_id      => l_structure_version_id
14518     ,p_scheduled_start_date    => l_proj_start_date
14519     ,p_scheduled_end_date      => l_proj_completion_date
14520     ,x_pev_schedule_id         => l_pev_schedule_id
14521     ,x_return_status           => l_return_status
14522     ,x_msg_count               => l_msg_count
14523     ,x_msg_data                => l_msg_data);
14524 
14525     --Check if there is any error.
14526     l_msg_count := FND_MSG_PUB.count_msg;
14527     IF l_msg_count > 0 THEN
14528       x_msg_count := l_msg_count;
14529       IF x_msg_count = 1 THEN
14530         x_msg_data := l_msg_data;
14531       END IF;
14532       RAISE FND_API.G_EXC_ERROR;
14533     END IF;
14534 
14535     IF (l_template_flag = 'Y') THEN
14536       l_status_code := 'STRUCTURE_WORKING';
14537       l_baseline_flag := 'N';
14538       l_latest_eff_pub_flag := 'N';
14539       l_effective_date := NULL;
14540     ELSE
14541       l_status_code := 'STRUCTURE_PUBLISHED';
14542       l_baseline_flag := 'Y';
14543       l_latest_eff_pub_flag := 'Y';
14544       l_effective_date := sysdate;
14545     END IF;
14546 
14547     --create structure version
14548     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14549     (p_validate_only               => FND_API.G_FALSE
14550     ,p_structure_version_id        => l_structure_version_id
14551     ,p_structure_version_name      => l_name
14552     ,p_structure_version_desc      => NULL
14553     ,p_effective_date              => l_effective_date
14554     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
14555     ,p_locked_status_code          => 'UNLOCKED'
14556     ,p_struct_version_status_code  => l_status_code
14557     ,p_baseline_current_flag       => l_baseline_flag
14558     ,p_baseline_original_flag      => 'N'
14559     ,x_pev_structure_id            => l_pev_structure_id
14560     ,x_return_status               => l_return_status
14561     ,x_msg_count                   => l_msg_count
14562     ,x_msg_data                    => l_msg_data );
14563 
14564     --Check if there is any error.
14565     l_msg_count := FND_MSG_PUB.count_msg;
14566     IF l_msg_count > 0 THEN
14567       x_msg_count := l_msg_count;
14568       IF x_msg_count = 1 THEN
14569         x_msg_data := l_msg_data;
14570       END IF;
14571       RAISE FND_API.G_EXC_ERROR;
14572     END IF;
14573 
14574     --create financial type
14575     OPEN sel_fin_struc_type_id;
14576     FETCH sel_fin_struc_type_id INTO l_fin_struc_type_id;
14577     CLOSE sel_fin_struc_type_id;
14578 
14579     l_proj_structure_type_id := NULL;
14580     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
14581      X_ROWID                  => l_rowid
14582     ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
14583     ,X_PROJ_ELEMENT_ID        => l_structure_id
14584     ,X_STRUCTURE_TYPE_ID      => l_fin_struc_type_id
14585     ,X_RECORD_VERSION_NUMBER  => 1
14586     ,X_ATTRIBUTE_CATEGORY     => NULL
14587     ,X_ATTRIBUTE1             => NULL
14588     ,X_ATTRIBUTE2             => NULL
14589     ,X_ATTRIBUTE3             => NULL
14590     ,X_ATTRIBUTE4             => NULL
14591     ,X_ATTRIBUTE5             => NULL
14592     ,X_ATTRIBUTE6             => NULL
14593     ,X_ATTRIBUTE7             => NULL
14594     ,X_ATTRIBUTE8             => NULL
14595     ,X_ATTRIBUTE9             => NULL
14596     ,X_ATTRIBUTE10            => NULL
14597     ,X_ATTRIBUTE11            => NULL
14598     ,X_ATTRIBUTE12            => NULL
14599     ,X_ATTRIBUTE13            => NULL
14600     ,X_ATTRIBUTE14            => NULL
14601     ,X_ATTRIBUTE15            => NULL
14602     );
14603 
14604     IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
14605       NULL;
14606     ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
14607       NULL;
14608     END IF;
14609 
14610 /*  Bug # 3420093. Progress Management changes. */
14611 
14612   --create row in pa_proj_progress_attr
14613   PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
14614   p_project_id                  => p_project_id
14615  ,P_OBJECT_TYPE                 => 'PA_STRUCTURES'
14616  ,P_OBJECT_ID                   => l_structure_id
14617  ,P_PROGRESS_CYCLE_ID           => to_number(null)
14618  ,P_WQ_ENABLE_FLAG              => 'N'
14619  ,P_REMAIN_EFFORT_ENABLE_FLAG       => 'N'
14620  ,P_PERCENT_COMP_ENABLE_FLAG        => 'Y'
14621  ,P_NEXT_PROGRESS_UPDATE_DATE       => to_date(null)
14622  ,p_TASK_WEIGHT_BASIS_CODE          => 'COST'
14623  ,X_PROJ_PROGRESS_ATTR_ID           => l_proj_progress_attr_id
14624  ,P_ALLOW_COLLAB_PROG_ENTRY         => 'N'
14625  ,P_ALLW_PHY_PRCNT_CMP_OVERRIDES    => 'Y'
14626  ,p_structure_type                      => 'FINANCIAL' --Amit
14627  ,x_return_status                   => l_return_status
14628  ,x_msg_count                   => l_msg_count
14629  ,x_msg_data                    => l_msg_data
14630 );
14631 
14632 /*      Bug # 3420093. Progress Management changes.     */
14633 
14634 
14635   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING')) THEN
14636     --split mapping/split no mapping
14637     --enable financial structure API
14638     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14639     (p_validate_only => FND_API.G_FALSE
14640     ,p_project_id    => p_project_id
14641     ,p_structure_number => l_name
14642     ,p_structure_name   => l_name
14643     ,p_calling_flag     => 'FINANCIAL'
14644     ,x_structure_id     => l_structure_id
14645     ,x_return_status    => l_return_status
14646     ,x_msg_count        => l_msg_count
14647     ,x_msg_data         => l_msg_data);
14648 
14649     --Check if there is any error.
14650     l_msg_count := FND_MSG_PUB.count_msg;
14651     IF l_msg_count > 0 THEN
14652       x_msg_count := l_msg_count;
14653       IF x_msg_count = 1 THEN
14654         x_msg_data := l_msg_data;
14655       END IF;
14656       RAISE FND_API.G_EXC_ERROR;
14657     END IF;
14658 
14659     --create row in pa_proj_workplan_attr
14660     PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
14661     (p_validate_only => FND_API.G_FALSE
14662     ,p_project_id => p_project_id
14663     ,p_proj_element_id => l_structure_id
14664     ,x_return_status    => l_return_status
14665     ,x_msg_count        => l_msg_count
14666     ,x_msg_data         => l_msg_data);
14667 
14668     --Check if there is any error.
14669     l_msg_count := FND_MSG_PUB.count_msg;
14670     IF l_msg_count > 0 THEN
14671       x_msg_count := l_msg_count;
14672       IF x_msg_count = 1 THEN
14673         x_msg_data := l_msg_data;
14674       END IF;
14675       RAISE FND_API.G_EXC_ERROR;
14676     END IF;
14677 
14678     --create structure version
14679     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14680     (p_validate_only         => FND_API.G_FALSE
14681     ,p_structure_id          => l_structure_id
14682     ,x_structure_version_id  => l_structure_version_id
14683     ,x_return_status         => l_return_status
14684     ,x_msg_count             => l_msg_count
14685     ,x_msg_data              => l_msg_data );
14686 
14687     --Check if there is any error.
14688     l_msg_count := FND_MSG_PUB.count_msg;
14689     IF l_msg_count > 0 THEN
14690       x_msg_count := l_msg_count;
14691       IF x_msg_count = 1 THEN
14692         x_msg_data := l_msg_data;
14693       END IF;
14694       RAISE FND_API.G_EXC_ERROR;
14695     END IF;
14696 
14697     IF (l_template_flag = 'Y') THEN
14698       l_status_code := 'STRUCTURE_WORKING';
14699       l_baseline_flag := 'N';
14700       l_latest_eff_pub_flag := 'N';
14701       l_effective_date := NULL;
14702     ELSE
14703       l_status_code := 'STRUCTURE_PUBLISHED';
14704       l_baseline_flag := 'N';
14705       l_latest_eff_pub_flag := 'Y';
14706       l_effective_date := sysdate;
14707     END IF;
14708 
14709     --create structure version
14710     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14711     (p_validate_only               => FND_API.G_FALSE
14712     ,p_structure_version_id        => l_structure_version_id
14713     ,p_structure_version_name      => l_name
14714     ,p_structure_version_desc      => NULL
14715     ,p_effective_date              => l_effective_date
14716     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
14717     ,p_locked_status_code          => 'UNLOCKED'
14718     ,p_struct_version_status_code  => l_status_code
14719     ,p_baseline_current_flag       => l_baseline_flag
14720     ,p_baseline_original_flag      => 'N'
14721     ,x_pev_structure_id            => l_pev_structure_id
14722     ,x_return_status               => l_return_status
14723     ,x_msg_count                   => l_msg_count
14724     ,x_msg_data                    => l_msg_data );
14725 
14726     --Check if there is any error.
14727     l_msg_count := FND_MSG_PUB.count_msg;
14728     IF l_msg_count > 0 THEN
14729       x_msg_count := l_msg_count;
14730       IF x_msg_count = 1 THEN
14731         x_msg_data := l_msg_data;
14732       END IF;
14733       RAISE FND_API.G_EXC_ERROR;
14734     END IF;
14735 
14736     --create workplan structure
14737     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14738     (p_validate_only           => FND_API.G_FALSE
14739     ,p_project_id              => p_project_id
14740     ,p_structure_number        => l_wp_name
14741     ,p_structure_name          => l_wp_name
14742     ,p_calling_flag            => 'WORKPLAN'
14743     ,x_structure_id            => l_structure_id
14744     ,x_return_status           => l_return_status
14745     ,x_msg_count               => l_msg_count
14746     ,x_msg_data                => l_msg_data );
14747 
14748     --Check if there is any error.
14749     l_msg_count := FND_MSG_PUB.count_msg;
14750     IF l_msg_count > 0 THEN
14751       x_msg_count := l_msg_count;
14752       IF x_msg_count = 1 THEN
14753         x_msg_data := l_msg_data;
14754       END IF;
14755       RAISE FND_API.G_EXC_ERROR;
14756     END IF;
14757 
14758     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14759     (p_validate_only         => FND_API.G_FALSE
14760     ,p_structure_id          => l_structure_id
14761     ,x_structure_version_id  => l_structure_version_id
14762     ,x_return_status         => l_return_status
14763     ,x_msg_count             => l_msg_count
14764     ,x_msg_data              => l_msg_data );
14765 
14766     --Check if there is any error.
14767     l_msg_count := FND_MSG_PUB.count_msg;
14768     IF l_msg_count > 0 THEN
14769       x_msg_count := l_msg_count;
14770       IF x_msg_count = 1 THEN
14771         x_msg_data := l_msg_data;
14772       END IF;
14773       RAISE FND_API.G_EXC_ERROR;
14774     END IF;
14775 
14776     PA_TASK_PUB1.Create_Schedule_Version(
14777      p_element_version_id      => l_structure_version_id
14778     ,p_scheduled_start_date    => l_proj_start_date
14779     ,p_scheduled_end_date      => l_proj_completion_date
14780     ,x_pev_schedule_id         => l_pev_schedule_id
14781     ,x_return_status           => l_return_status
14782     ,x_msg_count               => l_msg_count
14783     ,x_msg_data                => l_msg_data);
14784 
14785     --Check if there is any error.
14786     l_msg_count := FND_MSG_PUB.count_msg;
14787     IF l_msg_count > 0 THEN
14788       x_msg_count := l_msg_count;
14789       IF x_msg_count = 1 THEN
14790         x_msg_data := l_msg_data;
14791       END IF;
14792       RAISE FND_API.G_EXC_ERROR;
14793     END IF;
14794 
14795     IF (l_template_flag = 'Y') THEN
14796       l_status_code := 'STRUCTURE_WORKING';
14797       l_baseline_flag := 'N';
14798       l_latest_eff_pub_flag := 'N';
14799       l_effective_date := NULL;
14800     ELSE
14801       l_status_code := 'STRUCTURE_PUBLISHED';
14802       l_baseline_flag := 'Y';
14803       l_latest_eff_pub_flag := 'Y';
14804       l_effective_date := sysdate;
14805     END IF;
14806 
14807     --create structure version
14808     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14809     (p_validate_only               => FND_API.G_FALSE
14810     ,p_structure_version_id        => l_structure_version_id
14811     ,p_structure_version_name      => l_name
14812     ,p_structure_version_desc      => NULL
14813     ,p_effective_date              => l_effective_date
14814     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
14815     ,p_locked_status_code          => 'UNLOCKED'
14816     ,p_struct_version_status_code  => l_status_code
14817     ,p_baseline_current_flag       => l_baseline_flag
14818     ,p_baseline_original_flag      => 'N'
14819     ,x_pev_structure_id            => l_pev_structure_id
14820     ,x_return_status               => l_return_status
14821     ,x_msg_count                   => l_msg_count
14822     ,x_msg_data                    => l_msg_data );
14823 
14824     --Check if there is any error.
14825     l_msg_count := FND_MSG_PUB.count_msg;
14826     IF l_msg_count > 0 THEN
14827       x_msg_count := l_msg_count;
14828       IF x_msg_count = 1 THEN
14829         x_msg_data := l_msg_data;
14830       END IF;
14831       RAISE FND_API.G_EXC_ERROR;
14832     END IF;
14833 
14834     IF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
14835       NULL;
14836     ELSIF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
14837       NULL;
14838     END IF;
14839 
14840   END IF;
14841 
14842 ELSIF (l_wp_enabled = 'N' and l_fin_enabled = 'Y') THEN
14843   --workplan currently disabled (financial enabled)
14844   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
14845     --disabled both
14846     --disable financial structure API
14847     PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
14848      p_validate_only     => FND_API.G_FALSE
14849     ,p_project_id        => p_project_id
14850     ,x_return_status     => l_return_status
14851     ,x_msg_count         => l_msg_count
14852     ,x_msg_data          => l_msg_data);
14853 
14854     --Check if there is any error.
14855     l_msg_count := FND_MSG_PUB.count_msg;
14856     IF l_msg_count > 0 THEN
14857       x_msg_count := l_msg_count;
14858       IF x_msg_count = 1 THEN
14859         x_msg_data := l_msg_data;
14860       END IF;
14861       RAISE FND_API.G_EXC_ERROR;
14862     END IF;
14863 
14864   ELSIF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
14865     --disable workplan (enable financial)
14866     NULL;
14867   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
14868     --disable financial (enable workplan)
14869     --disable financial structure API
14870     PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
14871      p_validate_only     => FND_API.G_FALSE
14872     ,p_project_id        => p_project_id
14873     ,x_return_status     => l_return_status
14874     ,x_msg_count         => l_msg_count
14875     ,x_msg_data          => l_msg_data);
14876 
14877     --Check if there is any error.
14878     l_msg_count := FND_MSG_PUB.count_msg;
14879     IF l_msg_count > 0 THEN
14880       x_msg_count := l_msg_count;
14881       IF x_msg_count = 1 THEN
14882         x_msg_data := l_msg_data;
14883       END IF;
14884       RAISE FND_API.G_EXC_ERROR;
14885     END IF;
14886 
14887     --create workplan structure
14888     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14889     (p_validate_only           => FND_API.G_FALSE
14890     ,p_project_id              => p_project_id
14891     ,p_structure_number        => l_wp_name
14892     ,p_structure_name          => l_wp_name
14893     ,p_calling_flag            => 'WORKPLAN'
14894     ,x_structure_id            => l_structure_id
14895     ,x_return_status           => l_return_status
14896     ,x_msg_count               => l_msg_count
14897     ,x_msg_data                => l_msg_data );
14898 
14899     --Check if there is any error.
14900     l_msg_count := FND_MSG_PUB.count_msg;
14901     IF l_msg_count > 0 THEN
14902       x_msg_count := l_msg_count;
14903       IF x_msg_count = 1 THEN
14904         x_msg_data := l_msg_data;
14905       END IF;
14906       RAISE FND_API.G_EXC_ERROR;
14907     END IF;
14908 
14909     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14910     (p_validate_only         => FND_API.G_FALSE
14911     ,p_structure_id          => l_structure_id
14912     ,x_structure_version_id  => l_structure_version_id
14913     ,x_return_status         => l_return_status
14914     ,x_msg_count             => l_msg_count
14915     ,x_msg_data              => l_msg_data );
14916 
14917     --Check if there is any error.
14918     l_msg_count := FND_MSG_PUB.count_msg;
14919     IF l_msg_count > 0 THEN
14920       x_msg_count := l_msg_count;
14921       IF x_msg_count = 1 THEN
14922         x_msg_data := l_msg_data;
14923       END IF;
14924       RAISE FND_API.G_EXC_ERROR;
14925     END IF;
14926 
14927     PA_TASK_PUB1.Create_Schedule_Version(
14928      p_element_version_id      => l_structure_version_id
14929     ,p_scheduled_start_date    => l_proj_start_date
14930     ,p_scheduled_end_date      => l_proj_completion_date
14931     ,x_pev_schedule_id         => l_pev_schedule_id
14932     ,x_return_status           => l_return_status
14933     ,x_msg_count               => l_msg_count
14934     ,x_msg_data                => l_msg_data);
14935 
14936     --Check if there is any error.
14937     l_msg_count := FND_MSG_PUB.count_msg;
14938     IF l_msg_count > 0 THEN
14939       x_msg_count := l_msg_count;
14940       IF x_msg_count = 1 THEN
14941         x_msg_data := l_msg_data;
14942       END IF;
14943       RAISE FND_API.G_EXC_ERROR;
14944     END IF;
14945 
14946     IF (l_template_flag = 'Y') THEN
14947       l_status_code := 'STRUCTURE_WORKING';
14948       l_baseline_flag := 'N';
14949       l_latest_eff_pub_flag := 'N';
14950       l_effective_date := NULL;
14951     ELSE
14952       l_status_code := 'STRUCTURE_PUBLISHED';
14953       l_baseline_flag := 'Y';
14954       l_latest_eff_pub_flag := 'Y';
14955       l_effective_date := sysdate;
14956     END IF;
14957 
14958     --create structure version
14959     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14960     (p_validate_only               => FND_API.G_FALSE
14961     ,p_structure_version_id        => l_structure_version_id
14962     ,p_structure_version_name      => l_wp_name
14963     ,p_structure_version_desc      => NULL
14964     ,p_effective_date              => l_effective_date
14965     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
14966     ,p_locked_status_code          => 'UNLOCKED'
14967     ,p_struct_version_status_code  => l_status_code
14968     ,p_baseline_current_flag       => l_baseline_flag
14969     ,p_baseline_original_flag      => 'N'
14970     ,x_pev_structure_id            => l_pev_structure_id
14971     ,x_return_status               => l_return_status
14972     ,x_msg_count                   => l_msg_count
14973     ,x_msg_data                    => l_msg_data );
14974 
14975     --Check if there is any error.
14976     l_msg_count := FND_MSG_PUB.count_msg;
14977     IF l_msg_count > 0 THEN
14978       x_msg_count := l_msg_count;
14979       IF x_msg_count = 1 THEN
14980         x_msg_data := l_msg_data;
14981       END IF;
14982       RAISE FND_API.G_EXC_ERROR;
14983     END IF;
14984 
14985   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL', 'SHARE_FULL')) THEN
14986     --partial share
14987     --add workplan structure type
14988     OPEN sel_fin_structure_id;
14989     FETCH sel_fin_structure_id into l_structure_id;
14990     CLOSE sel_fin_structure_id;
14991 
14992     OPEN sel_struc_type_id;
14993     FETCH sel_struc_type_id INTO l_struc_type_id;
14994     CLOSE sel_struc_type_id;
14995 
14996     l_proj_structure_type_id := NULL;
14997     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
14998      X_ROWID                  => l_rowid
14999     ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
15000     ,X_PROJ_ELEMENT_ID        => l_structure_id
15001     ,X_STRUCTURE_TYPE_ID      => l_struc_type_id
15002     ,X_RECORD_VERSION_NUMBER  => 1
15003     ,X_ATTRIBUTE_CATEGORY     => NULL
15004     ,X_ATTRIBUTE1             => NULL
15005     ,X_ATTRIBUTE2             => NULL
15006     ,X_ATTRIBUTE3             => NULL
15007     ,X_ATTRIBUTE4             => NULL
15008     ,X_ATTRIBUTE5             => NULL
15009     ,X_ATTRIBUTE6             => NULL
15010     ,X_ATTRIBUTE7             => NULL
15011     ,X_ATTRIBUTE8             => NULL
15012     ,X_ATTRIBUTE9             => NULL
15013     ,X_ATTRIBUTE10            => NULL
15014     ,X_ATTRIBUTE11            => NULL
15015     ,X_ATTRIBUTE12            => NULL
15016     ,X_ATTRIBUTE13            => NULL
15017     ,X_ATTRIBUTE14            => NULL
15018     ,X_ATTRIBUTE15            => NULL);
15019 
15020     --add progress row
15021     l_proj_prog_attr_id := NULL;
15022     PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
15023      p_validate_only       => FND_API.G_FALSE
15024     ,p_project_id          => p_project_id
15025     ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
15026     ,P_OBJECT_ID           => l_structure_id
15027     ,p_action_set_id       => NULL
15028     ,p_structure_type      => 'WORKPLAN' -- Amit
15029     ,x_proj_progress_attr_id => l_proj_prog_attr_id
15030     ,x_return_status       => l_return_status
15031     ,x_msg_count           => x_msg_count
15032     ,x_msg_data            => x_msg_data);
15033 
15034     --Check if there is any error.
15035     l_msg_count := FND_MSG_PUB.count_msg;
15036     IF l_msg_count > 0 THEN
15037       x_msg_count := l_msg_count;
15038       IF x_msg_count = 1 THEN
15039         x_msg_data := l_msg_data;
15040       END IF;
15041       RAISE FND_API.G_EXC_ERROR;
15042     END IF;
15043 
15044     OPEN sel_struc_ver(l_structure_id);
15045     FETCH sel_struc_ver into l_structure_version_id;
15046     CLOSE sel_struc_ver;
15047 
15048     --add financial planning
15049     /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
15050     /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block        */
15051     BEGIN
15052         PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
15053                       p_context                => 'WORKPLAN'
15054                      ,p_project_id             => p_project_id
15055                      ,p_struct_elem_version_id => l_structure_version_id
15056                      ,x_return_status          => l_return_status
15057                      ,x_msg_count              => x_msg_count
15058                      ,x_Msg_data               => x_msg_data);
15059     EXCEPTION
15060        WHEN OTHERS THEN
15061             fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
15062                                     p_procedure_name => 'update_structures_setup_attr',
15063                                     p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
15064        RAISE FND_API.G_EXC_ERROR;
15065     END;
15066     --Check if there is any error.
15067     l_msg_count := FND_MSG_PUB.count_msg;
15068     IF l_msg_count > 0 THEN
15069       x_msg_count := l_msg_count;
15070       IF x_msg_count = 1 THEN
15071         x_msg_data := l_msg_data;
15072       END IF;
15073       RAISE FND_API.G_EXC_ERROR;
15074     END IF;
15075 
15076 
15077     --create schedule row for each task
15078     INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
15079           pev_schedule_id,
15080           element_version_id,
15081           project_id,
15082           proj_element_id,
15083           creation_date,
15084           created_by,
15085           last_update_date,
15086           last_updated_by,
15087           scheduled_start_date,
15088           scheduled_finish_date,
15089           milestone_flag,
15090           critical_flag,
15091           calendar_id,
15092           record_version_number,
15093           last_update_login,
15094       source_object_id,
15095       source_object_type)
15096     SELECT
15097           pa_proj_elem_ver_schedule_s.nextval,
15098           PPEV.element_version_id,
15099           PPEV.project_id,
15100           PPEV.proj_element_id,
15101           SYSDATE,
15102           FND_GLOBAL.USER_ID,
15103           SYSDATE,
15104           FND_GLOBAL.USER_ID,
15105           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.START_DATE), trunc(l_proj_start_date))),
15106           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_proj_completion_date))),
15107           'N',
15108           'N',
15109           NULL,
15110           0,
15111           FND_GLOBAL.LOGIN_ID,
15112       PPEV.project_id,
15113       'PA_PROJECTS'
15114     FROM PA_TASKS PT,
15115          PA_PROJ_ELEMENT_VERSIONS PPEV
15116     WHERE
15117          PPEV.parent_structure_version_id = l_structure_version_id
15118     AND  PPEV.proj_element_id = PT.task_id (+);
15119 
15120     OPEN sel_struc_and_task_vers(l_structure_version_id);
15121     LOOP
15122       FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
15123       EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
15124       /* Bug 2790703 Begin */
15125       --Add to array for rollup
15126       l_index := l_index + 1;
15127       l_task_ver_ids_tbl(l_index) := l_element_version_id;
15128       /* Bug 2790703 End */
15129       END LOOP;
15130     CLOSE sel_struc_and_task_vers;
15131 
15132     IF (l_task_ver_ids_tbl.count > 0) THEN
15133       --rollup
15134       PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
15135        p_commit => FND_API.G_FALSE,
15136        p_element_versions => l_task_ver_ids_tbl,
15137        x_return_status => l_return_status,
15138        x_msg_count => l_msg_count,
15139        x_msg_data => l_msg_data);
15140 
15141       --Check if there is any error.
15142       l_msg_count := FND_MSG_PUB.count_msg;
15143       IF l_msg_count > 0 THEN
15144         x_msg_count := l_msg_count;
15145         IF x_msg_count = 1 THEN
15146           x_msg_data := l_msg_data;
15147         END IF;
15148         RAISE FND_API.G_EXC_ERROR;
15149       END IF;
15150     END IF;
15151 
15152     IF (l_status_code = 'STRUCTURE_PUBLISHED') OR
15153        (l_template_flag = 'Y') THEN
15154       OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
15155       FETCH get_scheduled_dates into l_get_sch_dates_cur;
15156       CLOSE get_scheduled_dates;
15157 
15158       /* the record version number contained in the variabe l_proj_rec_ver_num is
15159         no more latest bcoz there was an update done by some other api by now.
15160         selcting latest record version number to avoid concurrency issue. maansari*/
15161       OPEN get_template_flag;
15162       FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
15163       CLOSE get_template_flag;
15164 
15165       PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
15166             p_validate_only        => FND_API.G_FALSE
15167            ,p_project_id           => p_project_id
15168            ,p_date_type            => 'SCHEDULED'
15169            ,p_start_date           => l_get_sch_dates_cur.scheduled_start_date
15170            ,p_finish_date          => l_get_sch_dates_cur.scheduled_finish_date
15171            ,p_record_version_number=> l_proj_rec_ver_num
15172            ,x_return_status        => x_return_status
15173            ,x_msg_count            => x_msg_count
15174            ,x_msg_data             => x_msg_data );
15175 
15176       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15177         RAISE FND_API.G_EXC_ERROR;
15178       END IF;
15179     END IF;
15180 
15181     RECALC_FIN_TASK_WEIGHTS(
15182        p_structure_version_id => l_structure_version_id
15183      , p_project_id           => p_project_id
15184      , x_msg_count            => l_msg_count
15185      , x_msg_data             => l_msg_data
15186      , x_return_status        => l_return_status);
15187 
15188     l_msg_count := FND_MSG_PUB.count_msg;
15189     IF l_msg_count > 0 THEN
15190       x_msg_count := l_msg_count;
15191       IF x_msg_count = 1 THEN
15192         x_msg_data := l_msg_data;
15193       END IF;
15194       RAISE FND_API.G_EXC_ERROR;
15195     END IF;
15196 
15197 -- Begin fix for Bug # 4426392.
15198 
15199 -- For a FINANCIAL structure only project that is part of a program, if WORKPLAN structure is enabled
15200 -- and the structures are SHARED.
15201 
15202 if (nvl(l_program, 'N') = 'Y') then
15203 
15204         for l_cur_links_rec in cur_links (p_project_id)
15205         loop
15206 
15207                 -- Delete the 'LW' or 'LF' links that currently exist from the task version.
15208 
15209                 pa_relationship_pub.delete_subproject_association
15210                 (p_api_version                   =>     p_api_version
15211                 ,p_init_msg_list                 =>     p_init_msg_list
15212                 ,p_commit                        =>     p_commit
15213                 ,p_validate_only                 =>     p_validate_only
15214                 ,p_validation_level              =>     p_validation_level
15215                 ,p_calling_module                =>     p_calling_module
15216                 ,p_debug_mode                    =>     p_debug_mode
15217                 ,p_max_msg_count                 =>     p_max_msg_count
15218                 ,p_object_relationships_id       =>     l_cur_links_rec.obj_rel_id
15219                 ,p_record_version_number         =>     l_cur_links_rec.rec_ver_number
15220                 ,x_return_status                 =>     x_return_status
15221                 ,x_msg_count                     =>     x_msg_count
15222                 ,x_msg_data                      =>     x_msg_data);
15223 
15224                 -- Create both the 'LW' and 'LF' links anew from the task version.
15225 
15226                 pa_relationship_pub.create_subproject_association
15227                 (p_api_version                   =>     p_api_version
15228                 ,p_init_msg_list                 =>     p_init_msg_list
15229                 ,p_commit                        =>     p_commit
15230                 ,p_validate_only                 =>     p_validate_only
15231                 ,p_validation_level              =>     p_validation_level
15232                 ,p_calling_module                =>     p_calling_module
15233                 ,p_debug_mode                    =>     p_debug_mode
15234                 ,p_max_msg_count                 =>     p_max_msg_count
15235                 ,p_src_proj_id                   =>     l_cur_links_rec.src_proj_id
15236                 ,p_task_ver_id                   =>     l_cur_links_rec.task_ver_id
15237                 ,p_dest_proj_id                  =>     l_cur_links_rec.dest_proj_id
15238                 ,p_dest_proj_name                =>     l_dest_proj_name
15239                 ,p_comment                       =>     l_comment
15240                 ,x_return_status                 =>     x_return_status
15241                 ,x_msg_count                     =>     x_msg_count
15242                 ,x_msg_data                      =>     x_msg_data);
15243 
15244                 -- Set the process update flag for the source structure version to 'Y'.
15245 
15246                 update pa_proj_elem_ver_structure ppevs
15247                 set ppevs.process_update_wbs_flag = 'Y'
15248                 where ppevs.element_version_id = l_cur_links_rec.src_str_ver_id
15249                 and ppevs.project_id = l_cur_links_rec.src_proj_id;
15250 
15251         end loop;
15252 
15253 end if;
15254 
15255 -- End fix for Bug # 4426392.
15256 
15257     IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
15258       --extra code for partial share
15259       NULL;
15260     ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
15261       --extra code for full share
15262       NULL;
15263     END IF;
15264 
15265   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING', 'SPLIT_MAPPING')) THEN
15266     --split mapping
15267     --Create default workplan structure
15268     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15269     (p_validate_only           => FND_API.G_FALSE
15270     ,p_project_id              => p_project_id
15271     ,p_structure_number        => l_wp_name
15272     ,p_structure_name          => l_wp_name
15273     ,p_calling_flag            => 'WORKPLAN'
15274     ,x_structure_id            => l_structure_id
15275     ,x_return_status           => l_return_status
15276     ,x_msg_count               => l_msg_count
15277     ,x_msg_data                => l_msg_data );
15278 
15279     --Check if there is any error.
15280     l_msg_count := FND_MSG_PUB.count_msg;
15281     IF l_msg_count > 0 THEN
15282       x_msg_count := l_msg_count;
15283       IF x_msg_count = 1 THEN
15284         x_msg_data := l_msg_data;
15285       END IF;
15286       RAISE FND_API.G_EXC_ERROR;
15287     END IF;
15288 
15289     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15290     (p_validate_only         => FND_API.G_FALSE
15291     ,p_structure_id          => l_structure_id
15292     ,x_structure_version_id  => l_structure_version_id
15293     ,x_return_status         => l_return_status
15294     ,x_msg_count             => l_msg_count
15295     ,x_msg_data              => l_msg_data );
15296 
15297     --Check if there is any error.
15298     l_msg_count := FND_MSG_PUB.count_msg;
15299     IF l_msg_count > 0 THEN
15300       x_msg_count := l_msg_count;
15301       IF x_msg_count = 1 THEN
15302         x_msg_data := l_msg_data;
15303       END IF;
15304       RAISE FND_API.G_EXC_ERROR;
15305     END IF;
15306 
15307     PA_TASK_PUB1.Create_Schedule_Version(
15308      p_element_version_id      => l_structure_version_id
15309     ,p_scheduled_start_date    => l_proj_start_date
15310     ,p_scheduled_end_date      => l_proj_completion_date
15311     ,x_pev_schedule_id         => l_pev_schedule_id
15312     ,x_return_status           => l_return_status
15313     ,x_msg_count               => l_msg_count
15314     ,x_msg_data                => l_msg_data);
15315 
15316     --Check if there is any error.
15317     l_msg_count := FND_MSG_PUB.count_msg;
15318     IF l_msg_count > 0 THEN
15319       x_msg_count := l_msg_count;
15320       IF x_msg_count = 1 THEN
15321         x_msg_data := l_msg_data;
15322       END IF;
15323       RAISE FND_API.G_EXC_ERROR;
15324     END IF;
15325 
15326     IF (l_template_flag = 'Y') THEN
15327       l_status_code := 'STRUCTURE_WORKING';
15328       l_baseline_flag := 'N';
15329       l_latest_eff_pub_flag := 'N';
15330       l_effective_date := NULL;
15331     ELSE
15332       l_status_code := 'STRUCTURE_PUBLISHED';
15333       l_baseline_flag := 'Y';
15334       l_latest_eff_pub_flag := 'Y';
15335       l_effective_date := sysdate;
15336     END IF;
15337 
15338     --create structure version
15339     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15340     (p_validate_only               => FND_API.G_FALSE
15341     ,p_structure_version_id        => l_structure_version_id
15342     ,p_structure_version_name      => l_name
15343     ,p_structure_version_desc      => NULL
15344     ,p_effective_date              => l_effective_date
15345     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
15346     ,p_locked_status_code          => 'UNLOCKED'
15347     ,p_struct_version_status_code  => l_status_code
15348     ,p_baseline_current_flag       => l_baseline_flag
15349     ,p_baseline_original_flag      => 'N'
15350     ,x_pev_structure_id            => l_pev_structure_id
15351     ,x_return_status               => l_return_status
15352     ,x_msg_count                   => l_msg_count
15353     ,x_msg_data                    => l_msg_data );
15354 
15355     --Check if there is any error.
15356     l_msg_count := FND_MSG_PUB.count_msg;
15357     IF l_msg_count > 0 THEN
15358       x_msg_count := l_msg_count;
15359       IF x_msg_count = 1 THEN
15360         x_msg_data := l_msg_data;
15361       END IF;
15362       RAISE FND_API.G_EXC_ERROR;
15363     END IF;
15364 
15365     IF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
15366       NULL;
15367     ELSIF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
15368       NULL;
15369     END IF;
15370   END IF;
15371 
15372 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'N') THEN
15373   --financial currently disabled
15374   IF (p_workplan_enabled_flag = 'N') THEN
15375     --disabled both
15376     --delete all dependencies
15377     --disable workplan
15378 
15379     --get structure_id
15380     OPEN sel_wp_structure_id;
15381     FETCH sel_wp_structure_id INTO l_structure_id;
15382     CLOSE sel_wp_structure_id;
15383 
15384     --delete workplan structure
15385     OPEN sel_all_wp_structure_ver(l_structure_id);
15386     LOOP
15387       FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
15388                                           l_struc_ver_rvn;
15389       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
15390       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
15391                        p_project_id,
15392                        l_del_struc_ver_id,
15393                        l_return_status,
15394                        l_err_msg_code);
15395       IF (l_return_status <> 'S') THEN
15396         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15397         x_msg_data := l_err_msg_code;
15398         RAISE FND_API.G_EXC_ERROR;
15399       END IF;
15400 
15401       --get top tasks
15402       OPEN get_top_tasks(l_del_struc_ver_id);
15403       LOOP
15404         FETCH get_top_tasks into l_task_ver_id;
15405         EXIT WHEN get_top_tasks%NOTFOUND;
15406 
15407         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
15408                p_project_id                   => p_project_id
15409               ,p_task_version_id              => l_task_ver_id
15410               ,p_parent_structure_ver_id      => l_del_struc_ver_id
15411               ,x_return_status                => l_return_status
15412               ,x_error_message_code           => l_err_msg_code );
15413 
15414         IF (l_return_status <> 'S') THEN
15415           x_return_status := l_return_status;
15416           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15417           l_msg_data := l_err_msg_code;
15418           CLOSE get_top_tasks;
15419           RAISE FND_API.G_EXC_ERROR;
15420         END IF;
15421       END LOOP;
15422       CLOSE get_top_tasks;
15423 
15424       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
15425               p_structure_version_id => l_del_struc_ver_id
15426              ,p_record_version_number => l_struc_ver_rvn
15427              ,x_return_status => l_return_status
15428              ,x_msg_count => l_msg_count
15429              ,x_msg_data => l_msg_data);
15430 
15431       --Check if there is any error.
15432       l_msg_count := FND_MSG_PUB.count_msg;
15433       IF l_msg_count > 0 THEN
15434         x_msg_count := l_msg_count;
15435         IF x_msg_count = 1 THEN
15436           x_msg_data := l_msg_data;
15437         END IF;
15438         CLOSE sel_all_wp_structure_ver;
15439         RAISE FND_API.G_EXC_ERROR;
15440       END IF;
15441     END LOOP;
15442     CLOSE sel_all_wp_structure_ver;
15443 
15444     IF (p_financial_enabled_flag = 'N') THEN
15445       NULL;
15446     ELSIF (p_financial_enabled_flag = 'Y') THEN
15447       --call enable financial structure API
15448       --enable financial structure API
15449       PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15450       (p_validate_only => FND_API.G_FALSE
15451       ,p_project_id    => p_project_id
15452       ,p_structure_number => l_name
15453       ,p_structure_name   => l_name
15454       ,p_calling_flag     => 'FINANCIAL'
15455       ,x_structure_id     => l_structure_id
15456       ,x_return_status    => l_return_status
15457       ,x_msg_count        => l_msg_count
15458       ,x_msg_data         => l_msg_data);
15459 
15460       --Check if there is any error.
15461       l_msg_count := FND_MSG_PUB.count_msg;
15462       IF l_msg_count > 0 THEN
15463         x_msg_count := l_msg_count;
15464         IF x_msg_count = 1 THEN
15465           x_msg_data := l_msg_data;
15466         END IF;
15467         RAISE FND_API.G_EXC_ERROR;
15468       END IF;
15469 
15470       --create row in pa_proj_workplan_attr
15471       PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
15472       (p_validate_only => FND_API.G_FALSE
15473       ,p_project_id => p_project_id
15474       ,p_proj_element_id => l_structure_id
15475       ,x_return_status    => l_return_status
15476       ,x_msg_count        => l_msg_count
15477       ,x_msg_data         => l_msg_data);
15478 
15479       --Check if there is any error.
15480       l_msg_count := FND_MSG_PUB.count_msg;
15481       IF l_msg_count > 0 THEN
15482         x_msg_count := l_msg_count;
15483         IF x_msg_count = 1 THEN
15484           x_msg_data := l_msg_data;
15485         END IF;
15486         RAISE FND_API.G_EXC_ERROR;
15487       END IF;
15488 
15489       --create structure version
15490       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15491       (p_validate_only         => FND_API.G_FALSE
15492       ,p_structure_id          => l_structure_id
15493       ,x_structure_version_id  => l_structure_version_id
15494       ,x_return_status         => l_return_status
15495       ,x_msg_count             => l_msg_count
15496       ,x_msg_data              => l_msg_data );
15497 
15498       --Check if there is any error.
15499       l_msg_count := FND_MSG_PUB.count_msg;
15500       IF l_msg_count > 0 THEN
15501         x_msg_count := l_msg_count;
15502         IF x_msg_count = 1 THEN
15503           x_msg_data := l_msg_data;
15504         END IF;
15505         RAISE FND_API.G_EXC_ERROR;
15506       END IF;
15507 
15508       IF (l_template_flag = 'Y') THEN
15509         l_status_code := 'STRUCTURE_WORKING';
15510         l_baseline_flag := 'N';
15511         l_latest_eff_pub_flag := 'N';
15512         l_effective_date := NULL;
15513       ELSE
15514         l_status_code := 'STRUCTURE_PUBLISHED';
15515         l_baseline_flag := 'N';
15516         l_latest_eff_pub_flag := 'Y';
15517         l_effective_date := sysdate;
15518       END IF;
15519 
15520       --create structure version
15521       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15522       (p_validate_only               => FND_API.G_FALSE
15523       ,p_structure_version_id        => l_structure_version_id
15524       ,p_structure_version_name      => l_name
15525       ,p_structure_version_desc      => NULL
15526       ,p_effective_date              => l_effective_date
15527       ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
15528       ,p_locked_status_code          => 'UNLOCKED'
15529       ,p_struct_version_status_code  => l_status_code
15530       ,p_baseline_current_flag       => l_baseline_flag
15531       ,p_baseline_original_flag      => 'N'
15532       ,x_pev_structure_id            => l_pev_structure_id
15533       ,x_return_status               => l_return_status
15534       ,x_msg_count                   => l_msg_count
15535       ,x_msg_data                    => l_msg_data );
15536 
15537       --Check if there is any error.
15538       l_msg_count := FND_MSG_PUB.count_msg;
15539       IF l_msg_count > 0 THEN
15540         x_msg_count := l_msg_count;
15541         IF x_msg_count = 1 THEN
15542           x_msg_data := l_msg_data;
15543         END IF;
15544         RAISE FND_API.G_EXC_ERROR;
15545       END IF;
15546 
15547     END IF;
15548 
15549   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
15550     --disable financial (enable workplan), do nothing
15551     NULL;
15552   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL','SHARE_FULL')) THEN
15553     --partial share
15554     --add financial structure type
15555     OPEN sel_wp_structure_id;
15556     FETCH sel_wp_structure_id INTO l_structure_id;
15557     CLOSE sel_wp_structure_id;
15558 
15559     --create financial type
15560     OPEN sel_fin_struc_type_id;
15561     FETCH sel_fin_struc_type_id INTO l_fin_struc_type_id;
15562     CLOSE sel_fin_struc_type_id;
15563 
15564     l_proj_structure_type_id := NULL;
15565     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
15566      X_ROWID                  => l_rowid
15567     ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
15568     ,X_PROJ_ELEMENT_ID        => l_structure_id
15569     ,X_STRUCTURE_TYPE_ID      => l_fin_struc_type_id
15570     ,X_RECORD_VERSION_NUMBER  => 1
15571     ,X_ATTRIBUTE_CATEGORY     => NULL
15572     ,X_ATTRIBUTE1             => NULL
15573     ,X_ATTRIBUTE2             => NULL
15574     ,X_ATTRIBUTE3             => NULL
15575     ,X_ATTRIBUTE4             => NULL
15576     ,X_ATTRIBUTE5             => NULL
15577     ,X_ATTRIBUTE6             => NULL
15578     ,X_ATTRIBUTE7             => NULL
15579     ,X_ATTRIBUTE8             => NULL
15580     ,X_ATTRIBUTE9             => NULL
15581     ,X_ATTRIBUTE10            => NULL
15582     ,X_ATTRIBUTE11            => NULL
15583     ,X_ATTRIBUTE12            => NULL
15584     ,X_ATTRIBUTE13            => NULL
15585     ,X_ATTRIBUTE14            => NULL
15586     ,X_ATTRIBUTE15            => NULL
15587     );
15588 
15589     --get structure version id
15590     OPEN sel_struc_ver(l_structure_id);
15591     FETCH sel_struc_ver into l_structure_version_id;
15592     CLOSE sel_struc_ver;
15593 
15594     -- Bug 3938654 : Additional Fix that will go as a part of this bug
15595     --               This fix is not related to main issue reported in the bug
15596 
15597     -- The present case is when WP is already enabled (l_wp_enabled = Y) and Fin. is disabled(l_fin_enabled = N)
15598     --  But Now,We have enabled Fin. (i.e) p_financial_enabled_flag = Y and made in a shared structure(may be full / partial)
15599 
15600     -- In this Case ,The Already Existing Structure Name will be of the format l_name : Workplan
15601     -- (Because earlier itself WP was enabled and the structure name hence would be of above format)
15602 
15603     -- While we are going to 'SHARE' it now ,We have to reset the Structure Name Format to : l_name
15604     -- This is needed because : Later If we try to Split the structure ,It will again try to create an empty
15605     -- WP Structure with the structure name in the format l_name : Workplan
15606 
15607     -- Hence ,the structure split will not be allowed as "name not unique error will be thrown"
15608     -- To avoid this Problem , We are resetting the structure name before Sharing
15609 
15610     UPDATE pa_proj_elements
15611        SET name = l_name
15612           ,element_number = l_name
15613      WHERE proj_element_id = l_structure_id ;
15614 
15615     -- End of Fix : 3938654
15616 
15617     --bug 4114101
15618     --insert progress attr row for financial struc
15619     PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
15620      p_validate_only            => FND_API.G_FALSE
15621     ,p_project_id               => p_project_id
15622     ,P_OBJECT_TYPE              => 'PA_STRUCTURES'
15623     ,P_OBJECT_ID                => l_structure_id
15624     ,P_PROGRESS_CYCLE_ID        => to_number(null)
15625     ,P_WQ_ENABLE_FLAG           => 'N'
15626     ,P_REMAIN_EFFORT_ENABLE_FLAG    => 'N'
15627     ,P_PERCENT_COMP_ENABLE_FLAG     => 'Y'
15628     ,P_NEXT_PROGRESS_UPDATE_DATE    => to_date(null)
15629     ,p_TASK_WEIGHT_BASIS_CODE       => 'COST'
15630     ,X_PROJ_PROGRESS_ATTR_ID        => l_proj_progress_attr_id
15631     ,P_ALLOW_COLLAB_PROG_ENTRY      => 'N'
15632     ,P_ALLW_PHY_PRCNT_CMP_OVERRIDES     => 'Y'
15633     ,p_structure_type                   => 'FINANCIAL' --Amit
15634     ,x_return_status                => l_return_status
15635     ,x_msg_count                => l_msg_count
15636     ,x_msg_data                     => l_msg_data
15637     );
15638 
15639     l_msg_count := FND_MSG_PUB.count_msg;
15640     IF l_msg_count > 0 THEN
15641       x_msg_count := l_msg_count;
15642       IF x_msg_count = 1 THEN
15643         x_msg_data := l_msg_data;
15644       END IF;
15645       RAISE FND_API.G_EXC_ERROR;
15646     END IF;
15647     --end bug 4114101
15648 
15649     IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
15650       NULL;
15651     ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
15652       --set financial task flag to Y for all tasks
15653       update pa_proj_element_versions
15654          set financial_task_flag = 'Y'
15655        where parent_structure_version_id = l_structure_version_id
15656          and object_type = 'PA_TASKS'
15657          and proj_element_id NOT IN
15658              (select proj_element_id
15659                 from pa_proj_elements
15660                where project_id = p_project_id
15661                  and object_type = 'PA_TASKS'
15662                  and link_task_flag = 'Y');
15663     END IF;
15664 
15665     --need to call sync up API
15666     PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN
15667      (p_patask_record_version_number   => NULL
15668      ,p_parent_task_version_id         => NULL
15669      ,p_project_id                     => p_project_id
15670      ,p_syncup_all_tasks               => 'Y'
15671      ,p_task_version_id                => NULL
15672      ,p_structure_version_id           => l_structure_version_id
15673      ,p_check_for_transactions         => 'N'
15674      ,p_checked_flag                   => FND_API.G_MISS_CHAR
15675      ,p_mode                           => 'ALL'
15676      ,x_return_status                  => l_return_status
15677      ,x_msg_count                      => l_msg_count
15678      ,x_msg_data                       => l_msg_data);
15679 
15680     --Check if there is any error.
15681     l_msg_count := FND_MSG_PUB.count_msg;
15682     IF l_msg_count > 0 THEN
15683       x_msg_count := l_msg_count;
15684       IF x_msg_count = 1 THEN
15685         x_msg_data := l_msg_data;
15686       END IF;
15687       RAISE FND_API.G_EXC_ERROR;
15688     END IF;
15689 
15690 -- Begin fix for Bug # 4426392.
15691 
15692 -- For a WORKPLAN structure only project that is part of a program, if a FINANCIAL structure is enabled
15693 -- and the structures are SHARED.
15694 
15695 if (nvl(l_program, 'N') = 'Y') then
15696 
15697         for l_cur_links_rec in cur_links (p_project_id)
15698         loop
15699 
15700                 -- Delete the 'LW' or 'LF' links that currently exist from the task version.
15701 
15702                 pa_relationship_pub.delete_subproject_association
15703                 (p_api_version                   =>     p_api_version
15704                 ,p_init_msg_list                 =>     p_init_msg_list
15705                 ,p_commit                        =>     p_commit
15706                 ,p_validate_only                 =>     p_validate_only
15707                 ,p_validation_level              =>     p_validation_level
15708                 ,p_calling_module                =>     p_calling_module
15709                 ,p_debug_mode                    =>     p_debug_mode
15710                 ,p_max_msg_count                 =>     p_max_msg_count
15711                 ,p_object_relationships_id       =>     l_cur_links_rec.obj_rel_id
15712                 ,p_record_version_number         =>     l_cur_links_rec.rec_ver_number
15713                 ,x_return_status                 =>     x_return_status
15714                 ,x_msg_count                     =>     x_msg_count
15715                 ,x_msg_data                      =>     x_msg_data);
15716 
15717                 -- Create both the 'LW' and 'LF' links anew from the task version.
15718 
15719                 pa_relationship_pub.create_subproject_association
15720                 (p_api_version                   =>     p_api_version
15721                 ,p_init_msg_list                 =>     p_init_msg_list
15722                 ,p_commit                        =>     p_commit
15723                 ,p_validate_only                 =>     p_validate_only
15724                 ,p_validation_level              =>     p_validation_level
15725                 ,p_calling_module                =>     p_calling_module
15726                 ,p_debug_mode                    =>     p_debug_mode
15727                 ,p_max_msg_count                 =>     p_max_msg_count
15728                 ,p_src_proj_id                   =>     l_cur_links_rec.src_proj_id
15729                 ,p_task_ver_id                   =>     l_cur_links_rec.task_ver_id
15730                 ,p_dest_proj_id                  =>     l_cur_links_rec.dest_proj_id
15731                 ,p_dest_proj_name                =>     l_dest_proj_name
15732                 ,p_comment                       =>     l_comment
15733                 ,x_return_status                 =>     x_return_status
15734                 ,x_msg_count                     =>     x_msg_count
15735                 ,x_msg_data                      =>     x_msg_data);
15736 
15737                 -- Set the process update flag for the source structure version to 'Y'.
15738 
15739                 update pa_proj_elem_ver_structure ppevs
15740                 set ppevs.process_update_wbs_flag = 'Y'
15741                 where ppevs.element_version_id = l_cur_links_rec.src_str_ver_id
15742                 and ppevs.project_id = l_cur_links_rec.src_proj_id;
15743 
15744         end loop;
15745 
15746 end if;
15747 
15748 -- End fix for Bug # 4426392.
15749 
15750     -- Amit : Add progress attr fro Financial here
15751   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
15752     --split mapping/ no mapping
15753     --call enable financial structure API
15754     --create financial structure API
15755     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15756     (p_validate_only => FND_API.G_FALSE
15757     ,p_project_id    => p_project_id
15758     ,p_structure_number => l_name
15759     ,p_structure_name   => l_name
15760     ,p_calling_flag     => 'FINANCIAL'
15761     ,x_structure_id     => l_structure_id
15762     ,x_return_status    => l_return_status
15763     ,x_msg_count        => l_msg_count
15764     ,x_msg_data         => l_msg_data);
15765 
15766     --Check if there is any error.
15767     l_msg_count := FND_MSG_PUB.count_msg;
15768     IF l_msg_count > 0 THEN
15769       x_msg_count := l_msg_count;
15770       IF x_msg_count = 1 THEN
15771         x_msg_data := l_msg_data;
15772       END IF;
15773       RAISE FND_API.G_EXC_ERROR;
15774     END IF;
15775 
15776     --create row in pa_proj_workplan_attr
15777     PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
15778     (p_validate_only => FND_API.G_FALSE
15779     ,p_project_id => p_project_id
15780     ,p_proj_element_id => l_structure_id
15781     ,x_return_status    => l_return_status
15782     ,x_msg_count        => l_msg_count
15783     ,x_msg_data         => l_msg_data);
15784 
15785     --Check if there is any error.
15786     l_msg_count := FND_MSG_PUB.count_msg;
15787     IF l_msg_count > 0 THEN
15788       x_msg_count := l_msg_count;
15789       IF x_msg_count = 1 THEN
15790         x_msg_data := l_msg_data;
15791       END IF;
15792       RAISE FND_API.G_EXC_ERROR;
15793     END IF;
15794 
15795     --create structure version
15796     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15797     (p_validate_only         => FND_API.G_FALSE
15798     ,p_structure_id          => l_structure_id
15799     ,x_structure_version_id  => l_structure_version_id
15800     ,x_return_status         => l_return_status
15801     ,x_msg_count             => l_msg_count
15802     ,x_msg_data              => l_msg_data );
15803 
15804     --Check if there is any error.
15805     l_msg_count := FND_MSG_PUB.count_msg;
15806     IF l_msg_count > 0 THEN
15807       x_msg_count := l_msg_count;
15808       IF x_msg_count = 1 THEN
15809         x_msg_data := l_msg_data;
15810       END IF;
15811       RAISE FND_API.G_EXC_ERROR;
15812     END IF;
15813 
15814     IF (l_template_flag = 'Y') THEN
15815       l_status_code := 'STRUCTURE_WORKING';
15816       l_baseline_flag := 'N';
15817       l_latest_eff_pub_flag := 'N';
15818       l_effective_date := NULL;
15819     ELSE
15820       l_status_code := 'STRUCTURE_PUBLISHED';
15821       l_baseline_flag := 'N';
15822       l_latest_eff_pub_flag := 'Y';
15823       l_effective_date := sysdate;
15824     END IF;
15825 
15826     --create structure version
15827     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15828     (p_validate_only               => FND_API.G_FALSE
15829     ,p_structure_version_id        => l_structure_version_id
15830     ,p_structure_version_name      => l_name
15831     ,p_structure_version_desc      => NULL
15832     ,p_effective_date              => l_effective_date
15833     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
15834     ,p_locked_status_code          => 'UNLOCKED'
15835     ,p_struct_version_status_code  => l_status_code
15836     ,p_baseline_current_flag       => l_baseline_flag
15837     ,p_baseline_original_flag      => 'N'
15838     ,x_pev_structure_id            => l_pev_structure_id
15839     ,x_return_status               => l_return_status
15840     ,x_msg_count                   => l_msg_count
15841     ,x_msg_data                    => l_msg_data );
15842 
15843     --Check if there is any error.
15844     l_msg_count := FND_MSG_PUB.count_msg;
15845     IF l_msg_count > 0 THEN
15846       x_msg_count := l_msg_count;
15847       IF x_msg_count = 1 THEN
15848         x_msg_data := l_msg_data;
15849       END IF;
15850       RAISE FND_API.G_EXC_ERROR;
15851     END IF;
15852 
15853     IF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
15854       NULL;
15855     ELSIF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
15856       NULL;
15857     END IF;
15858   END IF;
15859 
15860 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_PARTIAL') THEN
15861   --currently partial share
15862   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
15863     --disabled both
15864     --delete all dependencies
15865     --delete Financial structure API
15866     --get structure id
15867     OPEN sel_wp_structure_id;
15868     FETCH sel_wp_structure_id INTO l_structure_id;
15869     CLOSE sel_wp_structure_id;
15870 
15871     OPEN sel_all_wp_structure_ver(l_structure_id);
15872     LOOP
15873       FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
15874       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
15875 
15876       PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
15877               p_structure_version_id => l_structure_version_id
15878              ,p_record_version_number => l_struc_ver_rvn
15879              ,x_return_status => l_return_status
15880              ,x_msg_count => l_msg_count
15881              ,x_msg_data => l_msg_data
15882       );
15883 
15884       IF (l_return_status <> 'S') THEN
15885         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15886         x_msg_data := l_err_msg_code;
15887         RAISE FND_API.G_EXC_ERROR;
15888       END IF;
15889 
15890     END LOOP;
15891     CLOSE sel_all_wp_structure_ver;
15892 
15893   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING', 'SPLIT_MAPPING')) OR (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
15894     --split mapping/split no mapping/disable workplan
15895     --delete all tasks not marked as financial
15896     --get structure id
15897     OPEN sel_wp_structure_id;
15898     FETCH sel_wp_structure_id INTO l_structure_id;
15899     CLOSE sel_wp_structure_id;
15900 
15901     --get structure version id
15902     OPEN sel_latest_pub_ver(l_structure_id);
15903     FETCH sel_latest_pub_ver into l_structure_version_id;
15904     IF sel_latest_pub_ver%NOTFOUND THEN
15905       l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
15906     ELSE
15907       l_keep_structure_ver_id := l_structure_version_id;
15908     END IF;
15909     CLOSE sel_latest_pub_ver;
15910 
15911 /*  Bug 3597178 Commented the call to PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS
15912     As we can change from a shared to split,mapped etc even though deliverable transactions exist
15913     --NYU
15914     --Check if deliverable transactions exist.  If so, we cannot change the structure sharing to SPLIT
15915     l_del_trans_exist := PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS(
15916         p_project_id => p_project_id,
15917         x_return_status => l_return_status,
15918         x_msg_count => x_msg_count,
15919         x_msg_data => x_msg_data);
15920     IF l_del_trans_exist = 'Y' THEN
15921         RAISE FND_API.G_EXC_ERROR;
15922     END IF;
15923 */
15924     --delete wp budget for the version we keep
15925     l_struct_version_id_tbl.extend(1); /* Venky */
15926     l_struct_version_id_tbl(1) := l_keep_structure_ver_id;
15927     /*Smukka Bug No. 3474141 Date 03/01/2004                                  */
15928     /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block        */
15929     BEGIN
15930          /*Commented call to this API and replaced with pa_fin_plan_pvt.Delete_wp_option
15931           for Bug 3954050
15932         PA_FIN_PLAN_PVT.delete_wp_budget_versions(
15933                      p_struct_elem_version_id_tbl    => l_struct_version_id_tbl
15934                     ,x_return_status                 => l_return_status
15935                     ,x_msg_count                     => x_msg_count
15936                     ,x_Msg_data                      => x_msg_data);
15937        */
15938         PA_FIN_PLAN_PVT.delete_wp_option
15939         (
15940                 p_project_id        =>  p_project_id,
15941                 x_return_status     => l_return_status,
15942                 x_msg_count         => x_msg_count,
15943                 x_msg_data          => x_msg_data
15944         );
15945     EXCEPTION
15946         WHEN OTHERS THEN
15947              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
15948                                      p_procedure_name => 'update_structures_setup_attr',
15949                                      p_error_text     => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_options :'||SQLERRM,1,240));
15950         RAISE FND_API.G_EXC_ERROR;
15951     END;
15952     l_msg_count := FND_MSG_PUB.count_msg;
15953     IF l_msg_count > 0 THEN
15954       x_msg_count := l_msg_count;
15955       IF x_msg_count = 1 THEN
15956         x_msg_data := l_msg_data;
15957       END IF;
15958       RAISE FND_API.G_EXC_ERROR;
15959     END IF;
15960 
15961     --Delete all other structure versions
15962     OPEN sel_other_structure_ver(l_keep_structure_ver_id);
15963     LOOP
15964       FETCH sel_other_structure_ver into l_del_struc_ver_id,
15965                                          l_struc_ver_rvn;
15966       EXIT WHEN sel_other_structure_ver%NOTFOUND;
15967       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
15968                        p_project_id,
15969                        l_del_struc_ver_id,
15970                        l_return_status,
15971                        l_err_msg_code);
15972       IF (l_return_status <> 'S') THEN
15973         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15974         x_msg_data := l_err_msg_code;
15975         RAISE FND_API.G_EXC_ERROR;
15976       END IF;
15977 
15978       --get top tasks
15979       OPEN get_top_tasks(l_del_struc_ver_id);
15980       LOOP
15981         FETCH get_top_tasks into l_task_ver_id;
15982         EXIT WHEN get_top_tasks%NOTFOUND;
15983 
15984         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
15985                p_project_id                   => p_project_id
15986               ,p_task_version_id              => l_task_ver_id
15987               ,p_parent_structure_ver_id      => l_del_struc_ver_id
15988               ,x_return_status                => l_return_status
15989               ,x_error_message_code           => l_err_msg_code );
15990 
15991         IF (l_return_status <> 'S') THEN
15992           x_return_status := l_return_status;
15993           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15994           l_msg_data := l_err_msg_code;
15995           CLOSE get_top_tasks;
15996           RAISE FND_API.G_EXC_ERROR;
15997         END IF;
15998       END LOOP;
15999       CLOSE get_top_tasks;
16000 
16001       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16002               p_structure_version_id => l_del_struc_ver_id
16003              ,p_record_version_number => l_struc_ver_rvn
16004              ,x_return_status => l_return_status
16005              ,x_msg_count => l_msg_count
16006              ,x_msg_data => l_msg_data);
16007       --Check if there is any error.
16008       l_msg_count := FND_MSG_PUB.count_msg;
16009       IF l_msg_count > 0 THEN
16010         x_msg_count := l_msg_count;
16011         IF x_msg_count = 1 THEN
16012           x_msg_data := l_msg_data;
16013         END IF;
16014         CLOSE sel_other_structure_ver;
16015         RAISE FND_API.G_EXC_ERROR;
16016       END IF;
16017     END LOOP;
16018     CLOSE sel_other_structure_ver;
16019 
16020     --delete from pa_proj_progress_attr
16021     PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
16022             p_validate_only        => FND_API.G_FALSE
16023            ,p_project_id           => p_project_id
16024            ,P_OBJECT_TYPE          => 'PA_STRUCTURES'
16025            ,p_object_id            => l_structure_id
16026        ,p_structure_type       => 'WORKPLAN'
16027            ,x_return_status        => l_return_status
16028            ,x_msg_count            => l_msg_count
16029            ,x_msg_data             => l_msg_data
16030           );
16031 
16032     --Check if there is any error.
16033     l_msg_count := FND_MSG_PUB.count_msg;
16034     IF l_msg_count > 0 THEN
16035       x_msg_count := l_msg_count;
16036       IF x_msg_count = 1 THEN
16037         x_msg_data := l_msg_data;
16038       END IF;
16039       RAISE FND_API.G_EXC_ERROR;
16040     END IF;
16041 
16042     --delete all tasks not marked as financial in the structure keeping
16043     --delete schedule versions
16044     delete from pa_proj_elem_ver_schedule
16045     where project_id =p_project_id       --Bug No 3634334
16046       and element_version_id IN (
16047       select element_version_id
16048       from pa_proj_element_versions
16049       where project_id = p_project_id    --Bug No 3634334
16050       and parent_structure_version_id = l_keep_structure_ver_id
16051       and object_type IN ('PA_TASKS', 'PA_STRUCTURES'));
16052 
16053     --delete relationships
16054     --Bug No 3634334 Commented for performance tuning and rewritten the query.
16055 /*    delete from pa_object_relationships rel
16056     where rel.relationship_type IN ('D','S')
16057     and EXISTS (
16058       select 1 from pa_proj_element_versions
16059       where (rel.object_id_from1 = element_version_id OR
16060       rel.object_id_to1 = element_version_id ) and
16061       parent_structure_version_id = l_keep_structure_ver_id and
16062       financial_task_flag = 'N'); */
16063 
16064     --Bug No 3634334 Created for performance tuning for the above query.
16065 
16066     delete from pa_object_relationships rel
16067     where OBJECT_RELATIONSHIP_ID IN (
16068          select OBJECT_RELATIONSHIP_ID
16069            from pa_object_relationships rel,
16070                 pa_proj_element_versions
16071           where rel.relationship_type IN ('D','S')
16072             and object_type_to = 'PA_TASKS'
16073             and rel.object_id_to1 = element_version_id
16074             and parent_structure_version_id = l_keep_structure_ver_id
16075             and financial_task_flag = 'N'
16076           UNION
16077          select OBJECT_RELATIONSHIP_ID
16078            from pa_object_relationships rel,
16079                 pa_proj_element_versions
16080           where rel.relationship_type IN ('D','S')
16081             and object_type_from = 'PA_TASKS'
16082             and rel.object_id_from1 = element_version_id
16083             and parent_structure_version_id = l_keep_structure_ver_id
16084             and financial_task_flag = 'N');
16085 
16086 /*   Bug 3906015 Just moved the existing code after the delete statements
16087      to this position
16088 */
16089     -- NYU
16090     -- delete deliverable associations
16091     PA_DELIVERABLE_PUB.delete_dlv_associations
16092         (p_project_id=>p_project_id,
16093         x_return_status=>l_return_status,
16094         x_msg_count=>l_msg_count,
16095         x_msg_data=>l_msg_data);
16096 
16097     --delete elements
16098     delete from pa_proj_elements ppe
16099     where proj_element_ID in (
16100       select proj_element_id
16101       from pa_proj_element_versions
16102       where parent_structure_version_id = l_keep_structure_ver_id
16103       and object_type = 'PA_TASKS'
16104       and financial_task_flag = 'N');
16105 
16106     --delete element versions
16107     Delete from pa_proj_element_versions
16108     where parent_structure_version_id = l_keep_structure_ver_id
16109     and object_type = 'PA_TASKS'
16110     and financial_task_flag = 'N';
16111 
16112     --delete from pa_proj_structure_types
16113     DELETe FROM pa_proj_structure_types
16114     where proj_element_id = l_structure_id
16115     and structure_type_id = (
16116       select structure_type_id from pa_structure_types
16117       where structure_type = 'WORKPLAN');
16118 
16119 /*   Bug 3906015
16120      Moved this code to above (i.e) before deleting the elements (Before deleting task)
16121      This is necessary because : delete_dlv_associations API has been modified
16122      in such a way that it retrives the tasks from pa_proj_element_versions table for the passed project_id
16123      and then for those values ,it performs deliverable related validations for Workplan Task Deletion
16124 
16125      If this call,is after delete statement on pa_proj_element_versions tables,the logic written
16126      in delete_dlv_associations APi will fail .Hence moved the code up.
16127 
16128     -- NYU
16129     -- delete deliverable associations
16130     PA_DELIVERABLE_PUB.delete_dlv_associations
16131         (p_project_id=>p_project_id,
16132         x_return_status=>l_return_status,
16133         x_msg_count=>l_msg_count,
16134         x_msg_data=>l_msg_data);
16135 */
16136 
16137     --Check if there is any error.
16138     l_msg_count := FND_MSG_PUB.count_msg;
16139     IF l_msg_count > 0 THEN
16140       x_msg_count := l_msg_count;
16141       IF x_msg_count = 1 THEN
16142         x_msg_data := l_msg_data;
16143       END IF;
16144       RAISE FND_API.G_EXC_ERROR;
16145     END IF;
16146 
16147     --bug 3894059
16148     --set versioning disable for financial structure, and structure version as published if it is a project
16149     update pa_proj_workplan_attr
16150        set WP_ENABLE_VERSION_FLAG = 'N'
16151      where proj_element_id = l_structure_id;
16152 
16153     IF (l_template_flag <> 'Y') THEN
16154       --project
16155       update pa_proj_elem_ver_structure
16156          set status_code = 'STRUCTURE_PUBLISHED',
16157              latest_eff_published_flag = 'Y',
16158              published_date = sysdate
16159       where project_id = p_project_id
16160         and element_version_id = l_keep_structure_ver_id;
16161     END IF;
16162     --end bug 3894059
16163 
16164     IF (p_workplan_enabled_flag = 'Y' AND p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
16165         --Create empty workplan structure
16166       l_structure_id := NULL;
16167       PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
16168       (p_validate_only           => FND_API.G_FALSE
16169       ,p_project_id              => p_project_id
16170       ,p_structure_number        => l_wp_name
16171       ,p_structure_name          => l_wp_name
16172       ,p_calling_flag            => 'WORKPLAN'
16173       ,x_structure_id            => l_structure_id
16174       ,x_return_status           => l_return_status
16175       ,x_msg_count               => l_msg_count
16176       ,x_msg_data                => l_msg_data );
16177 
16178       --Check if there is any error.
16179       l_msg_count := FND_MSG_PUB.count_msg;
16180       IF l_msg_count > 0 THEN
16181         x_msg_count := l_msg_count;
16182         IF x_msg_count = 1 THEN
16183           x_msg_data := l_msg_data;
16184         END IF;
16185         RAISE FND_API.G_EXC_ERROR;
16186       END IF;
16187 
16188       l_structure_version_id := NULL;
16189       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
16190        (p_validate_only         => FND_API.G_FALSE
16191        ,p_structure_id          => l_structure_id
16192        ,x_structure_version_id  => l_structure_version_id
16193        ,x_return_status         => l_return_status
16194        ,x_msg_count             => l_msg_count
16195        ,x_msg_data              => l_msg_data );
16196 
16197       --Check if there is any error.
16198       l_msg_count := FND_MSG_PUB.count_msg;
16199       IF l_msg_count > 0 THEN
16200         x_msg_count := l_msg_count;
16201         IF x_msg_count = 1 THEN
16202           x_msg_data := l_msg_data;
16203         END IF;
16204         RAISE FND_API.G_EXC_ERROR;
16205       END IF;
16206 
16207       PA_TASK_PUB1.Create_Schedule_Version(
16208        p_element_version_id      => l_structure_version_id
16209       ,p_scheduled_start_date    => l_proj_start_date
16210       ,p_scheduled_end_date      => l_proj_completion_date
16211       ,x_pev_schedule_id         => l_pev_schedule_id
16212       ,x_return_status           => l_return_status
16213       ,x_msg_count               => l_msg_count
16214       ,x_msg_data                => l_msg_data);
16215 
16216       --Check if there is any error.
16217       l_msg_count := FND_MSG_PUB.count_msg;
16218       IF l_msg_count > 0 THEN
16219         x_msg_count := l_msg_count;
16220         IF x_msg_count = 1 THEN
16221           x_msg_data := l_msg_data;
16222         END IF;
16223         RAISE FND_API.G_EXC_ERROR;
16224       END IF;
16225 
16226       IF (l_template_flag = 'Y') THEN
16227         l_status_code := 'STRUCTURE_WORKING';
16228         l_baseline_flag := 'N';
16229         l_latest_eff_pub_flag := 'N';
16230         l_effective_date := NULL;
16231       ELSE
16232         l_status_code := 'STRUCTURE_PUBLISHED';
16233         l_baseline_flag := 'Y';
16234         l_latest_eff_pub_flag := 'Y';
16235         l_effective_date := sysdate;
16236       END IF;
16237 
16238       --create structure version
16239       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
16240       (p_validate_only               => FND_API.G_FALSE
16241       ,p_structure_version_id        => l_structure_version_id
16242       ,p_structure_version_name      => l_name
16243       ,p_structure_version_desc      => NULL
16244       ,p_effective_date              => l_effective_date
16245       ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
16246       ,p_locked_status_code          => 'UNLOCKED'
16247       ,p_struct_version_status_code  => l_status_code
16248       ,p_baseline_current_flag       => l_baseline_flag
16249       ,p_baseline_original_flag      => 'N'
16250       ,x_pev_structure_id            => l_pev_structure_id
16251       ,x_return_status               => l_return_status
16252       ,x_msg_count                   => l_msg_count
16253       ,x_msg_data                    => l_msg_data );
16254 
16255       --Check if there is any error.
16256       l_msg_count := FND_MSG_PUB.count_msg;
16257       IF l_msg_count > 0 THEN
16258         x_msg_count := l_msg_count;
16259         IF x_msg_count = 1 THEN
16260           x_msg_data := l_msg_data;
16261         END IF;
16262         RAISE FND_API.G_EXC_ERROR;
16263       END IF;
16264 
16265       NULL;
16266     ELSIF (p_workplan_enabled_flag = 'N' ) THEN
16267       NULL;
16268     END IF;
16269 
16270   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
16271     --disable financial (enable workplan)
16272     --get structure id
16273     OPEN sel_wp_structure_id;
16274     FETCH sel_wp_structure_id INTO l_structure_id;
16275     CLOSE sel_wp_structure_id;
16276 
16277     update pa_proj_elements
16278     set name = l_wp_name,
16279         element_number = l_wp_name
16280     where proj_element_id = l_structure_id;
16281 
16282     --Need delete financial tasks API
16283     PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
16284      p_validate_only     => FND_API.G_FALSE
16285     ,p_project_id        => p_project_id
16286     ,x_return_status     => l_return_status
16287     ,x_msg_count         => l_msg_count
16288     ,x_msg_data          => l_msg_data);
16289 
16290     --Check if there is any error.
16291     l_msg_count := FND_MSG_PUB.count_msg;
16292     IF l_msg_count > 0 THEN
16293       x_msg_count := l_msg_count;
16294       IF x_msg_count = 1 THEN
16295         x_msg_data := l_msg_data;
16296       END IF;
16297       RAISE FND_API.G_EXC_ERROR;
16298     END IF;
16299 
16300     --clear financial Flag API
16301     OPEN sel_all_wp_structure_ver(l_structure_id);
16302     LOOP
16303       FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16304       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16305 
16306       PA_PROJECT_STRUCTURE_PUB1.CLEAR_FINANCIAL_FLAG(
16307        p_validate_only => FND_API.G_FALSE
16308       ,p_project_id    => p_project_id
16309       ,p_task_version_id => NULL
16310       ,p_structure_version_id => l_structure_version_id
16311       ,x_return_status     => l_return_status
16312       ,x_msg_count         => l_msg_count
16313       ,x_msg_data          => l_msg_data);
16314 
16315       --Check if there is any error.
16316       l_msg_count := FND_MSG_PUB.count_msg;
16317       IF l_msg_count > 0 THEN
16318         x_msg_count := l_msg_count;
16319         IF x_msg_count = 1 THEN
16320           x_msg_data := l_msg_data;
16321         END IF;
16322         RAISE FND_API.G_EXC_ERROR;
16323       END IF;
16324 
16325     END LOOP;
16326     CLOSE sel_all_wp_structure_ver;
16327 
16328   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_PARTIAL') THEN
16329     --partial share; no action required
16330     NULL;
16331   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_FULL') THEN
16332     --full share
16333     --Need to call sync up API
16334     --get structure id
16335     OPEN sel_wp_structure_id;
16336     FETCH sel_wp_structure_id INTO l_structure_id;
16337     CLOSE sel_wp_structure_id;
16338 
16339     --get structure version id
16340     OPEN sel_latest_pub_ver(l_structure_id);
16341     FETCH sel_latest_pub_ver into l_structure_version_id;
16342     IF sel_latest_pub_ver%NOTFOUND THEN
16343       l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16344     ELSE
16345       l_keep_structure_ver_id := l_structure_version_id;
16346     END IF;
16347     CLOSE sel_latest_pub_ver;
16348 
16349     update pa_proj_element_versions
16350        set financial_task_flag = 'Y'
16351      where parent_structure_version_id = l_structure_version_id
16352        and object_type = 'PA_TASKS'
16353        and proj_element_id NOT IN
16354            (select proj_element_id
16355               from pa_proj_elements
16356              where project_id = p_project_id
16357                and object_type = 'PA_TASKS'
16358                and link_task_flag = 'Y');
16359 
16360     --need to call sync up API
16361     PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN
16362      (p_patask_record_version_number   => NULL
16363      ,p_parent_task_version_id         => NULL
16364      ,p_project_id                     => p_project_id
16365      ,p_syncup_all_tasks               => 'Y'
16366      ,p_task_version_id                => NULL
16367      ,p_structure_version_id           => l_structure_version_id
16368      ,p_check_for_transactions         => 'N'
16369      ,p_checked_flag                   => FND_API.G_MISS_CHAR
16370      ,p_mode                           => 'ALL'
16371       ,x_return_status     => l_return_status
16372       ,x_msg_count         => l_msg_count
16373       ,x_msg_data          => l_msg_data);
16374 
16375     --Check if there is any error.
16376     l_msg_count := FND_MSG_PUB.count_msg;
16377     IF l_msg_count > 0 THEN
16378       x_msg_count := l_msg_count;
16379       IF x_msg_count = 1 THEN
16380         x_msg_data := l_msg_data;
16381       END IF;
16382       RAISE FND_API.G_EXC_ERROR;
16383     END IF;
16384 
16385   END IF;
16386 
16387 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_FULL') THEN
16388   --currently full share
16389   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
16390     --disabled both
16391     --delete all dependencies
16392     --delete Financial structure API
16393     --get structure id
16394     OPEN sel_wp_structure_id;
16395     FETCH sel_wp_structure_id INTO l_structure_id;
16396     CLOSE sel_wp_structure_id;
16397 
16398     OPEN sel_all_wp_structure_ver(l_structure_id);
16399     LOOP
16400       FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16401       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16402 
16403       PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
16404               p_structure_version_id => l_structure_version_id
16405              ,p_record_version_number => l_struc_ver_rvn
16406              ,x_return_status => l_return_status
16407              ,x_msg_count => l_msg_count
16408              ,x_msg_data => l_msg_data
16409       );
16410 
16411       IF (l_return_status <> 'S') THEN
16412         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16413         x_msg_data := l_err_msg_code;
16414         RAISE FND_API.G_EXC_ERROR;
16415       END IF;
16416 
16417     END LOOP;
16418     CLOSE sel_all_wp_structure_ver;
16419 
16420   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_MAPPING', 'SPLIT_NO_MAPPING')) OR (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
16421     --split mapping/split no mapping/disable workplan
16422     --get structure id
16423     OPEN sel_wp_structure_id;
16424     FETCH sel_wp_structure_id INTO l_structure_id;
16425     CLOSE sel_wp_structure_id;
16426 
16427     --get structure version id
16428     OPEN sel_latest_pub_ver(l_structure_id);
16429     FETCH sel_latest_pub_ver into l_structure_version_id;
16430     IF sel_latest_pub_ver%NOTFOUND THEN
16431       l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16432     ELSE
16433       l_keep_structure_ver_id := l_structure_version_id;
16434     END IF;
16435     CLOSE sel_latest_pub_ver;
16436 
16437     -- Bug 3938654 : Additional Fix that will go as a part of this bug
16438     --               This fix is not related to main issue reported in the bug
16439 
16440     -- Actually this call should not be present .This fix should have been
16441     -- done long back as a part of 3597178
16442     -- For the case l_wp_enabled_flag=Y,l_fin_enabled_flag=Y,l_share_code=SHARE_PARTIAL ,this fix
16443     -- has already been done .For this case (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_FULL')
16444     -- It had been missed.
16445 
16446    /*  Hence doing the commenting
16447     --NYU
16448     --Check if deliverable transactions exist.  If so, we cannot change the structure sharing to SPLIT
16449     l_del_trans_exist := PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS(
16450         p_project_id => p_project_id,
16451         x_return_status => l_return_status,
16452         x_msg_count => x_msg_count,
16453         x_msg_data => x_msg_data);
16454     IF l_del_trans_exist = 'Y' THEN
16455         RAISE FND_API.G_EXC_ERROR;
16456     END IF;
16457    */
16458 
16459     --delete wp budget for the version we keep
16460     l_struct_version_id_tbl.extend(1); /* Venky */
16461     l_struct_version_id_tbl(1) := l_keep_structure_ver_id;
16462     /*Smukka Bug No. 3474141 Date 03/01/2004                                  */
16463     /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block        */
16464     BEGIN
16465         /*Commented call to this API and replaced with pa_fin_plan_pvt.Delete_wp_option
16466           for Bug 3954050
16467         PA_FIN_PLAN_PVT.delete_wp_budget_versions(
16468                      p_struct_elem_version_id_tbl    => l_struct_version_id_tbl
16469                     ,x_return_status                 => l_return_status
16470                     ,x_msg_count                     => x_msg_count
16471                     ,x_Msg_data                      => x_msg_data);
16472         */
16473         PA_FIN_PLAN_PVT.delete_wp_option
16474         (
16475                 p_project_id        =>  p_project_id,
16476                 x_return_status     => l_return_status,
16477                 x_msg_count         => x_msg_count,
16478                 x_msg_data          => x_msg_data
16479         );
16480     EXCEPTION
16481         WHEN OTHERS THEN
16482              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
16483                                      p_procedure_name => 'update_structures_setup_attr',
16484                                      p_error_text     => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_option:'||SQLERRM,1,240));
16485         RAISE FND_API.G_EXC_ERROR;
16486     END;
16487     l_msg_count := FND_MSG_PUB.count_msg;
16488     IF l_msg_count > 0 THEN
16489       x_msg_count := l_msg_count;
16490       IF x_msg_count = 1 THEN
16491         x_msg_data := l_msg_data;
16492       END IF;
16493       RAISE FND_API.G_EXC_ERROR;
16494     END IF;
16495 
16496     --Delete all other structure versions
16497     OPEN sel_other_structure_ver(l_keep_structure_ver_id);
16498     LOOP
16499       FETCH sel_other_structure_ver into l_del_struc_ver_id,
16500                                          l_struc_ver_rvn;
16501       EXIT WHEN sel_other_structure_ver%NOTFOUND;
16502       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16503                        p_project_id,
16504                        l_del_struc_ver_id,
16505                        l_return_status,
16506                        l_err_msg_code);
16507       IF (l_return_status <> 'S') THEN
16508         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16509         x_msg_data := l_err_msg_code;
16510         RAISE FND_API.G_EXC_ERROR;
16511       END IF;
16512 
16513       --get top tasks
16514       OPEN get_top_tasks(l_del_struc_ver_id);
16515       LOOP
16516         FETCH get_top_tasks into l_task_ver_id;
16517         EXIT WHEN get_top_tasks%NOTFOUND;
16518 
16519         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16520                p_project_id                   => p_project_id
16521               ,p_task_version_id              => l_task_ver_id
16522               ,p_parent_structure_ver_id      => l_del_struc_ver_id
16523               ,x_return_status                => l_return_status
16524               ,x_error_message_code           => l_err_msg_code );
16525 
16526         IF (l_return_status <> 'S') THEN
16527           x_return_status := l_return_status;
16528           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16529           l_msg_data := l_err_msg_code;
16530           CLOSE get_top_tasks;
16531           RAISE FND_API.G_EXC_ERROR;
16532         END IF;
16533       END LOOP;
16534       CLOSE get_top_tasks;
16535 
16536       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16537               p_structure_version_id => l_del_struc_ver_id
16538              ,p_record_version_number => l_struc_ver_rvn
16539              ,x_return_status => l_return_status
16540              ,x_msg_count => l_msg_count
16541              ,x_msg_data => l_msg_data);
16542       --Check if there is any error.
16543       l_msg_count := FND_MSG_PUB.count_msg;
16544       IF l_msg_count > 0 THEN
16545         x_msg_count := l_msg_count;
16546         IF x_msg_count = 1 THEN
16547           x_msg_data := l_msg_data;
16548         END IF;
16549         CLOSE sel_other_structure_ver;
16550         RAISE FND_API.G_EXC_ERROR;
16551       END IF;
16552     END LOOP;
16553     CLOSE sel_other_structure_ver;
16554 
16555     --delete from pa_proj_progress_attr
16556     PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
16557             p_validate_only        => FND_API.G_FALSE
16558            ,p_project_id           => p_project_id
16559            ,P_OBJECT_TYPE          => 'PA_STRUCTURES'
16560            ,p_object_id            => l_structure_id
16561        ,p_structure_type       => 'WORKPLAN' --Amit
16562            ,x_return_status        => l_return_status
16563            ,x_msg_count            => l_msg_count
16564            ,x_msg_data             => l_msg_data
16565           );
16566 
16567     --Check if there is any error.
16568     l_msg_count := FND_MSG_PUB.count_msg;
16569     IF l_msg_count > 0 THEN
16570       x_msg_count := l_msg_count;
16571       IF x_msg_count = 1 THEN
16572         x_msg_data := l_msg_data;
16573       END IF;
16574       RAISE FND_API.G_EXC_ERROR;
16575     END IF;
16576 
16577     --delete all tasks not marked as financial in the structure keeping
16578     --delete schedule versions
16579     delete from pa_proj_elem_ver_schedule
16580     where project_id =p_project_id                                     --Bug No 3634334
16581       and element_version_id IN (
16582       select element_version_id
16583       from pa_proj_element_versions
16584       where project_id =p_project_id                                   --Bug No 3634334
16585       and parent_structure_version_id = l_keep_structure_ver_id
16586       and object_type IN ('PA_TASKS', 'PA_STRUCTURES'));
16587 
16588     --delete from pa_proj_structure_types
16589     DELETe FROM pa_proj_structure_types
16590     where proj_element_id = l_structure_id
16591     and structure_type_id = (
16592       select structure_type_id from pa_structure_types
16593       where structure_type = 'WORKPLAN');
16594 
16595     -- NYU
16596     -- delete deliverable associations
16597     PA_DELIVERABLE_PUB.delete_dlv_associations
16598         (p_project_id=>p_project_id,
16599         x_return_status=>l_return_status,
16600         x_msg_count=>l_msg_count,
16601         x_msg_data=>l_msg_data);
16602 
16603     --Check if there is any error.
16604     l_msg_count := FND_MSG_PUB.count_msg;
16605     IF l_msg_count > 0 THEN
16606       x_msg_count := l_msg_count;
16607       IF x_msg_count = 1 THEN
16608         x_msg_data := l_msg_data;
16609       END IF;
16610       RAISE FND_API.G_EXC_ERROR;
16611     END IF;
16612 
16613     --bug 3894059
16614     --set versioning disable for financial structure, and structure version as published if it is a project
16615     update pa_proj_workplan_attr
16616        set WP_ENABLE_VERSION_FLAG = 'N'
16617      where proj_element_id = l_structure_id;
16618 
16619     IF (l_template_flag <> 'Y') THEN
16620       --project
16621       update pa_proj_elem_ver_structure
16622          set status_code = 'STRUCTURE_PUBLISHED',
16623              latest_eff_published_flag = 'Y',
16624              published_date = sysdate
16625       where project_id = p_project_id
16626         and element_version_id = l_keep_structure_ver_id;
16627     END IF;
16628     --end bug 3894059
16629 
16630     IF (p_workplan_enabled_flag = 'Y' AND p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
16631         --Create empty workplan structure
16632       PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
16633       (p_validate_only           => FND_API.G_FALSE
16634       ,p_project_id              => p_project_id
16635       ,p_structure_number        => l_wp_name
16636       ,p_structure_name          => l_wp_name
16637       ,p_calling_flag            => 'WORKPLAN'
16638       ,x_structure_id            => l_structure_id
16639       ,x_return_status           => l_return_status
16640       ,x_msg_count               => l_msg_count
16641       ,x_msg_data                => l_msg_data );
16642 
16643       --Check if there is any error.
16644       l_msg_count := FND_MSG_PUB.count_msg;
16645       IF l_msg_count > 0 THEN
16646         x_msg_count := l_msg_count;
16647         IF x_msg_count = 1 THEN
16648           x_msg_data := l_msg_data;
16649         END IF;
16650         RAISE FND_API.G_EXC_ERROR;
16651       END IF;
16652 
16653       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
16654        (p_validate_only         => FND_API.G_FALSE
16655        ,p_structure_id          => l_structure_id
16656        ,x_structure_version_id  => l_structure_version_id
16657        ,x_return_status         => l_return_status
16658        ,x_msg_count             => l_msg_count
16659        ,x_msg_data              => l_msg_data );
16660 
16661       --Check if there is any error.
16662       l_msg_count := FND_MSG_PUB.count_msg;
16663       IF l_msg_count > 0 THEN
16664         x_msg_count := l_msg_count;
16665         IF x_msg_count = 1 THEN
16666           x_msg_data := l_msg_data;
16667         END IF;
16668         RAISE FND_API.G_EXC_ERROR;
16669       END IF;
16670 
16671       PA_TASK_PUB1.Create_Schedule_Version(
16672        p_element_version_id      => l_structure_version_id
16673       ,p_scheduled_start_date    => l_proj_start_date
16674       ,p_scheduled_end_date      => l_proj_completion_date
16675       ,x_pev_schedule_id         => l_pev_schedule_id
16676       ,x_return_status           => l_return_status
16677       ,x_msg_count               => l_msg_count
16678       ,x_msg_data                => l_msg_data);
16679 
16680       --Check if there is any error.
16681       l_msg_count := FND_MSG_PUB.count_msg;
16682       IF l_msg_count > 0 THEN
16683         x_msg_count := l_msg_count;
16684         IF x_msg_count = 1 THEN
16685           x_msg_data := l_msg_data;
16686         END IF;
16687         RAISE FND_API.G_EXC_ERROR;
16688       END IF;
16689 
16690       IF (l_template_flag = 'Y') THEN
16691         l_status_code := 'STRUCTURE_WORKING';
16692         l_baseline_flag := 'N';
16693         l_latest_eff_pub_flag := 'N';
16694         l_effective_date := NULL;
16695       ELSE
16696         l_status_code := 'STRUCTURE_PUBLISHED';
16697         l_baseline_flag := 'Y';
16698         l_latest_eff_pub_flag := 'Y';
16699         l_effective_date := sysdate;
16700       END IF;
16701 
16702       --create structure version
16703       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
16704       (p_validate_only               => FND_API.G_FALSE
16705       ,p_structure_version_id        => l_structure_version_id
16706       ,p_structure_version_name      => l_name
16707       ,p_structure_version_desc      => NULL
16708       ,p_effective_date              => l_effective_date
16709       ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
16710       ,p_locked_status_code          => 'UNLOCKED'
16711       ,p_struct_version_status_code  => l_status_code
16712       ,p_baseline_current_flag       => l_baseline_flag
16713       ,p_baseline_original_flag      => 'N'
16714       ,x_pev_structure_id            => l_pev_structure_id
16715       ,x_return_status               => l_return_status
16716       ,x_msg_count                   => l_msg_count
16717       ,x_msg_data                    => l_msg_data );
16718 
16719       --Check if there is any error.
16720       l_msg_count := FND_MSG_PUB.count_msg;
16721       IF l_msg_count > 0 THEN
16722         x_msg_count := l_msg_count;
16723         IF x_msg_count = 1 THEN
16724           x_msg_data := l_msg_data;
16725         END IF;
16726         RAISE FND_API.G_EXC_ERROR;
16727       END IF;
16728 
16729       NULL;
16730     ELSIF (p_workplan_enabled_flag = 'N' ) THEN
16731       NULL;
16732     END IF;
16733 
16734   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
16735     --disable financial (enable workplan)
16736     --call disable financial structure API
16737     --get structure id
16738     OPEN sel_wp_structure_id;
16739     FETCH sel_wp_structure_id INTO l_structure_id;
16740     CLOSE sel_wp_structure_id;
16741 
16742     update pa_proj_elements
16743     set name = l_wp_name,
16744         element_number = l_wp_name
16745     where proj_element_id = l_structure_id;
16746 
16747     --Need delete financial tasks API
16748     PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
16749      p_validate_only     => FND_API.G_FALSE
16750     ,p_project_id        => p_project_id
16751     ,x_return_status     => l_return_status
16752     ,x_msg_count         => l_msg_count
16753     ,x_msg_data          => l_msg_data);
16754 
16755     --Check if there is any error.
16756     l_msg_count := FND_MSG_PUB.count_msg;
16757     IF l_msg_count > 0 THEN
16758       x_msg_count := l_msg_count;
16759       IF x_msg_count = 1 THEN
16760         x_msg_data := l_msg_data;
16761       END IF;
16762       RAISE FND_API.G_EXC_ERROR;
16763     END IF;
16764 
16765     --clear financial Flag API
16766     OPEN sel_all_wp_structure_ver(l_structure_id);
16767     LOOP
16768       FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16769       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16770 
16771       PA_PROJECT_STRUCTURE_PUB1.CLEAR_FINANCIAL_FLAG(
16772        p_validate_only => FND_API.G_FALSE
16773       ,p_project_id    => p_project_id
16774       ,p_task_version_id => NULL
16775       ,p_structure_version_id => l_structure_version_id
16776       ,x_return_status     => l_return_status
16777       ,x_msg_count         => l_msg_count
16778       ,x_msg_data          => l_msg_data);
16779 
16780       --Check if there is any error.
16781       l_msg_count := FND_MSG_PUB.count_msg;
16782       IF l_msg_count > 0 THEN
16783         x_msg_count := l_msg_count;
16784         IF x_msg_count = 1 THEN
16785           x_msg_data := l_msg_data;
16786         END IF;
16787         RAISE FND_API.G_EXC_ERROR;
16788       END IF;
16789 
16790     END LOOP;
16791     CLOSE sel_all_wp_structure_ver;
16792 
16793   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_PARTIAL') THEN
16794     --partial share; no action required
16795     NULL;
16796   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_FULL') THEN
16797     --full share; no action required
16798     NULL;
16799   END IF;
16800 
16801 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SPLIT_MAPPING') THEN
16802   --currently split with mapping
16803   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') OR
16804      (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') OR
16805      (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
16806     --disabled both/workplan/financial
16807     --remove mapping APIs
16808     PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
16809        p_project_id        => p_project_id
16810       ,x_return_status     => l_return_status
16811       ,x_msg_count         => l_msg_count
16812       ,x_msg_data          => l_msg_data);
16813 
16814     --Check if there is any error.
16815     l_msg_count := FND_MSG_PUB.count_msg;
16816     IF l_msg_count > 0 THEN
16817       x_msg_count := l_msg_count;
16818       IF x_msg_count = 1 THEN
16819         x_msg_data := l_msg_data;
16820       END IF;
16821       RAISE FND_API.G_EXC_ERROR;
16822     END IF;
16823 
16824     IF (p_workplan_enabled_flag = 'N') THEN
16825       --disable workplan
16826       --get structure_id
16827       OPEN sel_wp_structure_id;
16828       FETCH sel_wp_structure_id INTO l_structure_id;
16829       CLOSE sel_wp_structure_id;
16830 
16831       --delete workplan structure
16832       OPEN sel_all_wp_structure_ver(l_structure_id);
16833       LOOP
16834         FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
16835                                           l_struc_ver_rvn;
16836         EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16837         PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16838                        p_project_id,
16839                        l_del_struc_ver_id,
16840                        l_return_status,
16841                        l_err_msg_code);
16842         IF (l_return_status <> 'S') THEN
16843           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16844           x_msg_data := l_err_msg_code;
16845           RAISE FND_API.G_EXC_ERROR;
16846         END IF;
16847 
16848         --get top tasks
16849         OPEN get_top_tasks(l_del_struc_ver_id);
16850         LOOP
16851           FETCH get_top_tasks into l_task_ver_id;
16852           EXIT WHEN get_top_tasks%NOTFOUND;
16853 
16854           PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16855                p_project_id                   => p_project_id
16856               ,p_task_version_id              => l_task_ver_id
16857               ,p_parent_structure_ver_id      => l_del_struc_ver_id
16858               ,x_return_status                => l_return_status
16859               ,x_error_message_code           => l_err_msg_code );
16860 
16861           IF (l_return_status <> 'S') THEN
16862             x_return_status := l_return_status;
16863             PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16864             l_msg_data := l_err_msg_code;
16865             CLOSE get_top_tasks;
16866             RAISE FND_API.G_EXC_ERROR;
16867           END IF;
16868         END LOOP;
16869         CLOSE get_top_tasks;
16870 
16871         PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16872               p_structure_version_id => l_del_struc_ver_id
16873              ,p_record_version_number => l_struc_ver_rvn
16874              ,x_return_status => l_return_status
16875              ,x_msg_count => l_msg_count
16876              ,x_msg_data => l_msg_data);
16877 
16878         --Check if there is any error.
16879         l_msg_count := FND_MSG_PUB.count_msg;
16880         IF l_msg_count > 0 THEN
16881           x_msg_count := l_msg_count;
16882           IF x_msg_count = 1 THEN
16883             x_msg_data := l_msg_data;
16884           END IF;
16885           CLOSE sel_all_wp_structure_ver;
16886           RAISE FND_API.G_EXC_ERROR;
16887         END IF;
16888       END LOOP;
16889       CLOSE sel_all_wp_structure_ver;
16890     END IF;
16891 
16892     IF (p_financial_enabled_flag = 'N') THEN
16893       --disable financial structure API
16894       PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
16895        p_validate_only     => FND_API.G_FALSE
16896       ,p_project_id        => p_project_id
16897       ,x_return_status     => l_return_status
16898       ,x_msg_count         => l_msg_count
16899       ,x_msg_data          => l_msg_data);
16900 
16901       --Check if there is any error.
16902       l_msg_count := FND_MSG_PUB.count_msg;
16903       IF l_msg_count > 0 THEN
16904         x_msg_count := l_msg_count;
16905         IF x_msg_count = 1 THEN
16906           x_msg_data := l_msg_data;
16907         END IF;
16908         RAISE FND_API.G_EXC_ERROR;
16909       END IF;
16910     END IF;
16911 
16912   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
16913     --partial share/full share
16914     --remove mapping APIs
16915     PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
16916        p_project_id        => p_project_id
16917       ,x_return_status     => l_return_status
16918       ,x_msg_count         => l_msg_count
16919       ,x_msg_data          => l_msg_data);
16920 
16921     --loop and delete all workplan versions
16922     OPEN sel_wp_structure_id;
16923     FETCH sel_wp_structure_id INTO l_structure_id;
16924     CLOSE sel_wp_structure_id;
16925 
16926     OPEN sel_all_wp_structure_ver(l_structure_id);
16927     LOOP
16928       FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
16929                                           l_struc_ver_rvn;
16930       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16931       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16932                        p_project_id,
16933                        l_del_struc_ver_id,
16934                        l_return_status,
16935                        l_err_msg_code);
16936       IF (l_return_status <> 'S') THEN
16937         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16938         x_msg_data := l_err_msg_code;
16939         RAISE FND_API.G_EXC_ERROR;
16940       END IF;
16941 
16942       --get top tasks
16943       OPEN get_top_tasks(l_del_struc_ver_id);
16944       LOOP
16945         FETCH get_top_tasks into l_task_ver_id;
16946         EXIT WHEN get_top_tasks%NOTFOUND;
16947 
16948         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16949                p_project_id                   => p_project_id
16950               ,p_task_version_id              => l_task_ver_id
16951               ,p_parent_structure_ver_id      => l_del_struc_ver_id
16952               ,x_return_status                => l_return_status
16953               ,x_error_message_code           => l_err_msg_code );
16954 
16955 
16956         IF (l_return_status <> 'S') THEN
16957           x_return_status := l_return_status;
16958           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16959           l_msg_data := l_err_msg_code;
16960           CLOSE get_top_tasks;
16961           RAISE FND_API.G_EXC_ERROR;
16962         END IF;
16963       END LOOP;
16964       CLOSE get_top_tasks;
16965 
16966       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16967               p_structure_version_id => l_del_struc_ver_id
16968              ,p_record_version_number => l_struc_ver_rvn
16969              ,x_return_status => l_return_status
16970              ,x_msg_count => l_msg_count
16971              ,x_msg_data => l_msg_data
16972       );
16973 
16974       --Check if there is any error.
16975       l_msg_count := FND_MSG_PUB.count_msg;
16976       IF l_msg_count > 0 THEN
16977         x_msg_count := l_msg_count;
16978         IF x_msg_count = 1 THEN
16979           x_msg_data := l_msg_data;
16980         END IF;
16981         CLOSE sel_all_wp_structure_ver;
16982         RAISE FND_API.G_EXC_ERROR;
16983       END IF;
16984     END LOOP;
16985     CLOSE sel_all_wp_structure_ver;
16986 
16987     --Add structure type to financial
16988     OPEN sel_fin_structure_id;
16989     FETCH sel_fin_structure_id into l_structure_id;
16990     CLOSE sel_fin_structure_id;
16991 
16992     OPEN sel_struc_type_id;
16993     FETCH sel_struc_type_id INTO l_struc_type_id;
16994     CLOSE sel_struc_type_id;
16995 
16996     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
16997               X_ROWID                  => l_rowid
16998              ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
16999              ,X_PROJ_ELEMENT_ID        => l_structure_id
17000              ,X_STRUCTURE_TYPE_ID      => l_struc_type_id
17001              ,X_RECORD_VERSION_NUMBER  => 1
17002              ,X_ATTRIBUTE_CATEGORY     => NULL
17003              ,X_ATTRIBUTE1             => NULL
17004              ,X_ATTRIBUTE2             => NULL
17005              ,X_ATTRIBUTE3             => NULL
17006              ,X_ATTRIBUTE4             => NULL
17007              ,X_ATTRIBUTE5             => NULL
17008              ,X_ATTRIBUTE6             => NULL
17009              ,X_ATTRIBUTE7             => NULL
17010              ,X_ATTRIBUTE8             => NULL
17011              ,X_ATTRIBUTE9             => NULL
17012              ,X_ATTRIBUTE10            => NULL
17013              ,X_ATTRIBUTE11            => NULL
17014              ,X_ATTRIBUTE12            => NULL
17015              ,X_ATTRIBUTE13            => NULL
17016              ,X_ATTRIBUTE14            => NULL
17017              ,X_ATTRIBUTE15            => NULL);
17018 
17019     l_proj_prog_attr_id := NULL;
17020     PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
17021      p_validate_only       => FND_API.G_FALSE
17022     ,p_project_id          => p_project_id
17023     ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
17024     ,P_OBJECT_ID           => l_structure_id
17025     ,p_action_set_id       => NULL
17026     ,p_structure_type      => 'WORKPLAN' --Amit
17027     ,x_proj_progress_attr_id => l_proj_prog_attr_id
17028     ,x_return_status       => l_return_status
17029     ,x_msg_count           => x_msg_count
17030     ,x_msg_data            => x_msg_data);
17031 
17032     --get structure version id
17033     OPEN sel_struc_ver(l_structure_id);
17034     FETCH sel_struc_ver into l_structure_version_id;
17035     CLOSE sel_struc_ver;
17036 
17037     --add planning transaction to the shared structure version
17038     --add financial planning
17039     /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
17040     /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block        */
17041     BEGIN
17042         PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
17043                       p_context                => 'WORKPLAN'
17044                      ,p_project_id             => p_project_id
17045                      ,p_struct_elem_version_id => l_structure_version_id
17046                      ,x_return_status          => l_return_status
17047                      ,x_msg_count              => x_msg_count
17048                      ,x_Msg_data               => x_msg_data);
17049     EXCEPTION
17050         WHEN OTHERS THEN
17051              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
17052                                      p_procedure_name => 'update_structures_setup_attr',
17053                                      p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
17054         RAISE FND_API.G_EXC_ERROR;
17055     END;
17056     --Check if there is any error.
17057     l_msg_count := FND_MSG_PUB.count_msg;
17058     IF l_msg_count > 0 THEN
17059       x_msg_count := l_msg_count;
17060       IF x_msg_count = 1 THEN
17061         x_msg_data := l_msg_data;
17062       END IF;
17063       RAISE FND_API.G_EXC_ERROR;
17064     END IF;
17065 
17066     --create schedule row for each task
17067     INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
17068           pev_schedule_id,
17069           element_version_id,
17070           project_id,
17071           proj_element_id,
17072           creation_date,
17073           created_by,
17074           last_update_date,
17075           last_updated_by,
17076           scheduled_start_date,
17077           scheduled_finish_date,
17078           milestone_flag,
17079           critical_flag,
17080           calendar_id,
17081           record_version_number,
17082           last_update_login,
17083       source_object_id,
17084       source_object_type)
17085     SELECT
17086           pa_proj_elem_ver_schedule_s.nextval,
17087           PPEV.element_version_id,
17088           PPEV.project_id,
17089           PPEV.proj_element_id,
17090           SYSDATE,
17091           FND_GLOBAL.USER_ID,
17092           SYSDATE,
17093           FND_GLOBAL.USER_ID,
17094           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.START_DATE), trunc(l_proj_start_date))),
17095           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_proj_completion_date))),
17096           'N',
17097           'N',
17098           NULL,
17099           0,
17100           FND_GLOBAL.LOGIN_ID,
17101       PPEV.project_id,
17102       'PA_PROJECTS'
17103     FROM PA_TASKS PT,
17104          PA_PROJ_ELEMENT_VERSIONS PPEV
17105     WHERE
17106          PPEV.parent_structure_version_id = l_structure_version_id
17107     AND  PPEV.proj_element_id = PT.task_id (+);
17108 
17109     OPEN sel_struc_and_task_vers(l_structure_version_id);
17110     LOOP
17111       FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
17112       EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
17113       /* Bug 2790703 Begin */
17114       --Add to array for rollup
17115       l_index := l_index + 1;
17116       l_task_ver_ids_tbl(l_index) := l_element_version_id;
17117       /* Bug 2790703 End */
17118       END LOOP;
17119     CLOSE sel_struc_and_task_vers;
17120 
17121     IF (l_task_ver_ids_tbl.count > 0) THEN
17122       --rollup
17123       PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
17124        p_commit => FND_API.G_FALSE,
17125        p_element_versions => l_task_ver_ids_tbl,
17126        x_return_status => l_return_status,
17127        x_msg_count => l_msg_count,
17128        x_msg_data => l_msg_data);
17129 
17130       --Check if there is any error.
17131       l_msg_count := FND_MSG_PUB.count_msg;
17132       IF l_msg_count > 0 THEN
17133         x_msg_count := l_msg_count;
17134         IF x_msg_count = 1 THEN
17135           x_msg_data := l_msg_data;
17136         END IF;
17137         RAISE FND_API.G_EXC_ERROR;
17138       END IF;
17139     END IF;
17140 
17141     --Check if there is any error.
17142     l_msg_count := FND_MSG_PUB.count_msg;
17143     IF l_msg_count > 0 THEN
17144       x_msg_count := l_msg_count;
17145       IF x_msg_count = 1 THEN
17146         x_msg_data := l_msg_data;
17147       END IF;
17148       RAISE FND_API.G_EXC_ERROR;
17149     END IF;
17150 
17151 
17152     -- Bug # 5077599.
17153 
17154     -- If the project is version disabled, then baseline the structure version.
17155 
17156     if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'N') then
17157 
17158         update pa_proj_elem_ver_structure ppevs
17159         set ppevs.current_flag = 'Y'
17160             , ppevs.original_flag = 'Y'
17161             , ppevs.record_version_number = (ppevs.record_version_number+1)
17162         where ppevs.project_id = p_project_id
17163         and ppevs.element_version_id = l_structure_version_id;
17164 
17165         PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION
17166         (p_commit                 => p_commit
17167         ,p_validate_only          => p_validate_only
17168         ,p_validation_level       => p_validation_level
17169         ,p_calling_module         => p_calling_module
17170         ,p_debug_mode             => p_debug_mode
17171         ,p_max_msg_count          => p_max_msg_count
17172         ,p_structure_version_id   => l_structure_version_id
17173         ,x_return_status          => x_return_status
17174         ,x_msg_count              => x_msg_count
17175         ,x_msg_data               => x_msg_data);
17176 
17177     end if;
17178 
17179     -- Bug # 5077599.
17180 
17181 
17182     IF (p_sharing_option_code = 'SHARE_FULL') THEN
17183       NULL;
17184     ELSIF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
17185       NULL;
17186     END IF;
17187   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_MAPPING') THEN
17188     --split mapping; no action required
17189     NULL;
17190   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
17191     --split no mapping
17192     --remove mapping APIs
17193     PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
17194        p_project_id        => p_project_id
17195       ,x_return_status     => l_return_status
17196       ,x_msg_count         => l_msg_count
17197       ,x_msg_data          => l_msg_data);
17198 
17199     --Check if there is any error.
17200     l_msg_count := FND_MSG_PUB.count_msg;
17201     IF l_msg_count > 0 THEN
17202       x_msg_count := l_msg_count;
17203       IF x_msg_count = 1 THEN
17204         x_msg_data := l_msg_data;
17205       END IF;
17206       RAISE FND_API.G_EXC_ERROR;
17207     END IF;
17208 
17209   END IF;
17210 
17211 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SPLIT_NO_MAPPING') THEN
17212   --currently split no mapping
17213   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') OR
17214      (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') OR
17215      (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
17216     --disabled both/delete workplan structure/disable financial structure API
17217 
17218     IF (p_workplan_enabled_flag = 'N') THEN
17219       --delete workplan structure
17220       --get structure_id
17221       OPEN sel_wp_structure_id;
17222       FETCH sel_wp_structure_id INTO l_structure_id;
17223       CLOSE sel_wp_structure_id;
17224 
17225       --delete workplan structure
17226       OPEN sel_all_wp_structure_ver(l_structure_id);
17227       LOOP
17228         FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17229                                           l_struc_ver_rvn;
17230         EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17231         PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17232                        p_project_id,
17233                        l_del_struc_ver_id,
17234                        l_return_status,
17235                        l_err_msg_code);
17236         IF (l_return_status <> 'S') THEN
17237           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17238           x_msg_data := l_err_msg_code;
17239           RAISE FND_API.G_EXC_ERROR;
17240         END IF;
17241 
17242         --get top tasks
17243         OPEN get_top_tasks(l_del_struc_ver_id);
17244         LOOP
17245           FETCH get_top_tasks into l_task_ver_id;
17246           EXIT WHEN get_top_tasks%NOTFOUND;
17247 
17248           PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17249                p_project_id                   => p_project_id
17250               ,p_task_version_id              => l_task_ver_id
17251               ,p_parent_structure_ver_id      => l_del_struc_ver_id
17252               ,x_return_status                => l_return_status
17253               ,x_error_message_code           => l_err_msg_code );
17254 
17255           IF (l_return_status <> 'S') THEN
17256             x_return_status := l_return_status;
17257             PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17258             l_msg_data := l_err_msg_code;
17259             CLOSE get_top_tasks;
17260             RAISE FND_API.G_EXC_ERROR;
17261           END IF;
17262         END LOOP;
17263         CLOSE get_top_tasks;
17264 
17265         PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17266               p_structure_version_id => l_del_struc_ver_id
17267              ,p_record_version_number => l_struc_ver_rvn
17268              ,x_return_status => l_return_status
17269              ,x_msg_count => l_msg_count
17270              ,x_msg_data => l_msg_data);
17271 
17272         --Check if there is any error.
17273         l_msg_count := FND_MSG_PUB.count_msg;
17274         IF l_msg_count > 0 THEN
17275           x_msg_count := l_msg_count;
17276           IF x_msg_count = 1 THEN
17277             x_msg_data := l_msg_data;
17278           END IF;
17279           CLOSE sel_all_wp_structure_ver;
17280           RAISE FND_API.G_EXC_ERROR;
17281         END IF;
17282       END LOOP;
17283       CLOSE sel_all_wp_structure_ver;
17284     END IF;
17285 
17286     IF (p_financial_enabled_flag = 'N') THEN
17287       --disable financial structure API
17288       PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
17289        p_validate_only     => FND_API.G_FALSE
17290       ,p_project_id        => p_project_id
17291       ,x_return_status     => l_return_status
17292       ,x_msg_count         => l_msg_count
17293       ,x_msg_data          => l_msg_data);
17294 
17295       --Check if there is any error.
17296       l_msg_count := FND_MSG_PUB.count_msg;
17297       IF l_msg_count > 0 THEN
17298         x_msg_count := l_msg_count;
17299         IF x_msg_count = 1 THEN
17300           x_msg_data := l_msg_data;
17301         END IF;
17302         RAISE FND_API.G_EXC_ERROR;
17303       END IF;
17304     END IF;
17305   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
17306     --partial share/full share
17307     --remove financial structure row in pa_proj_workplan_attr
17308     --delete all workplan dependencies
17309     --delete workplan structure
17310     --add schedule rows for financial structure and tasks
17311     --add workplan structure type
17312 
17313     --loop and delete all workplan versions
17314     OPEN sel_wp_structure_id;
17315     FETCH sel_wp_structure_id INTO l_structure_id;
17316     CLOSE sel_wp_structure_id;
17317 
17318     OPEN sel_all_wp_structure_ver(l_structure_id);
17319     LOOP
17320       FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17321                                           l_struc_ver_rvn;
17322       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17323       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17324                        p_project_id,
17325                        l_del_struc_ver_id,
17326                        l_return_status,
17327                        l_err_msg_code);
17328       IF (l_return_status <> 'S') THEN
17329         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17330         x_msg_data := l_err_msg_code;
17331         RAISE FND_API.G_EXC_ERROR;
17332       END IF;
17333 
17334       --get top tasks
17335       OPEN get_top_tasks(l_del_struc_ver_id);
17336       LOOP
17337         FETCH get_top_tasks into l_task_ver_id;
17338         EXIT WHEN get_top_tasks%NOTFOUND;
17339 
17340         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17341                p_project_id                   => p_project_id
17342               ,p_task_version_id              => l_task_ver_id
17343               ,p_parent_structure_ver_id      => l_del_struc_ver_id
17344               ,x_return_status                => l_return_status
17345               ,x_error_message_code           => l_err_msg_code );
17346 
17347 
17348         IF (l_return_status <> 'S') THEN
17349           x_return_status := l_return_status;
17350           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17351           l_msg_data := l_err_msg_code;
17352           CLOSE get_top_tasks;
17353           RAISE FND_API.G_EXC_ERROR;
17354         END IF;
17355       END LOOP;
17356       CLOSE get_top_tasks;
17357 
17358       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17359               p_structure_version_id => l_del_struc_ver_id
17360              ,p_record_version_number => l_struc_ver_rvn
17361              ,x_return_status => l_return_status
17362              ,x_msg_count => l_msg_count
17363              ,x_msg_data => l_msg_data
17364       );
17365 
17366       --Check if there is any error.
17367       l_msg_count := FND_MSG_PUB.count_msg;
17368       IF l_msg_count > 0 THEN
17369         x_msg_count := l_msg_count;
17370         IF x_msg_count = 1 THEN
17371           x_msg_data := l_msg_data;
17372         END IF;
17373         CLOSE sel_all_wp_structure_ver;
17374         RAISE FND_API.G_EXC_ERROR;
17375       END IF;
17376     END LOOP;
17377     CLOSE sel_all_wp_structure_ver;
17378 
17379     --Add structure type to financial
17380     OPEN sel_fin_structure_id;
17381     FETCH sel_fin_structure_id into l_structure_id;
17382     CLOSE sel_fin_structure_id;
17383 
17384     OPEN sel_struc_type_id;
17385     FETCH sel_struc_type_id INTO l_struc_type_id;
17386     CLOSE sel_struc_type_id;
17387 
17388     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
17389               X_ROWID                  => l_rowid
17390              ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
17391              ,X_PROJ_ELEMENT_ID        => l_structure_id
17392              ,X_STRUCTURE_TYPE_ID      => l_struc_type_id
17393              ,X_RECORD_VERSION_NUMBER  => 1
17394              ,X_ATTRIBUTE_CATEGORY     => NULL
17395              ,X_ATTRIBUTE1             => NULL
17396              ,X_ATTRIBUTE2             => NULL
17397              ,X_ATTRIBUTE3             => NULL
17398              ,X_ATTRIBUTE4             => NULL
17399              ,X_ATTRIBUTE5             => NULL
17400              ,X_ATTRIBUTE6             => NULL
17401              ,X_ATTRIBUTE7             => NULL
17402              ,X_ATTRIBUTE8             => NULL
17403              ,X_ATTRIBUTE9             => NULL
17404              ,X_ATTRIBUTE10            => NULL
17405              ,X_ATTRIBUTE11            => NULL
17406              ,X_ATTRIBUTE12            => NULL
17407              ,X_ATTRIBUTE13            => NULL
17408              ,X_ATTRIBUTE14            => NULL
17409              ,X_ATTRIBUTE15            => NULL);
17410 
17411     l_proj_prog_attr_id := NULL;
17412     PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
17413      p_validate_only       => FND_API.G_FALSE
17414     ,p_project_id          => p_project_id
17415     ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
17416     ,P_OBJECT_ID           => l_structure_id
17417     ,p_action_set_id       => NULL
17418     ,p_structure_type      => 'WORKPLAN' --Amit
17419     ,x_proj_progress_attr_id => l_proj_prog_attr_id
17420     ,x_return_status       => l_return_status
17421     ,x_msg_count           => x_msg_count
17422     ,x_msg_data            => x_msg_data);
17423 
17424     --get structure version id
17425     OPEN sel_struc_ver(l_structure_id);
17426     FETCH sel_struc_ver into l_structure_version_id;
17427     CLOSE sel_struc_ver;
17428 
17429     --add financial planning
17430     /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
17431     /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block        */
17432     BEGIN
17433         PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
17434                       p_context                => 'WORKPLAN'
17435                      ,p_project_id             => p_project_id
17436                      ,p_struct_elem_version_id => l_structure_version_id
17437                      ,x_return_status          => l_return_status
17438                      ,x_msg_count              => x_msg_count
17439                      ,x_Msg_data               => x_msg_data);
17440     EXCEPTION
17441         WHEN OTHERS THEN
17442              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
17443                                      p_procedure_name => 'update_structures_setup_attr',
17444                                      p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
17445         RAISE FND_API.G_EXC_ERROR;
17446     END;
17447     --Check if there is any error.
17448     l_msg_count := FND_MSG_PUB.count_msg;
17449     IF l_msg_count > 0 THEN
17450       x_msg_count := l_msg_count;
17451       IF x_msg_count = 1 THEN
17452         x_msg_data := l_msg_data;
17453       END IF;
17454       RAISE FND_API.G_EXC_ERROR;
17455     END IF;
17456 
17457     --create schedule row for each task
17458     INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
17459           pev_schedule_id,
17460           element_version_id,
17461           project_id,
17462           proj_element_id,
17463           creation_date,
17464           created_by,
17465           last_update_date,
17466           last_updated_by,
17467           scheduled_start_date,
17468           scheduled_finish_date,
17469           milestone_flag,
17470           critical_flag,
17471           calendar_id,
17472           record_version_number,
17473           last_update_login,
17474       source_object_id,
17475       source_object_type
17476 )
17477     SELECT
17478           pa_proj_elem_ver_schedule_s.nextval,
17479           PPEV.element_version_id,
17480           PPEV.project_id,
17481           PPEV.proj_element_id,
17482           SYSDATE,
17483           FND_GLOBAL.USER_ID,
17484           SYSDATE,
17485           FND_GLOBAL.USER_ID,
17486           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.START_DATE), trunc(l_proj_start_date))),
17487           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_proj_completion_date))),
17488           'N',
17489           'N',
17490           NULL,
17491           0,
17492           FND_GLOBAL.LOGIN_ID,
17493       PPEV.project_id,
17494       'PA_PROJECTS'
17495     FROM PA_TASKS PT,
17496          PA_PROJ_ELEMENT_VERSIONS PPEV
17497     WHERE
17498          PPEV.parent_structure_version_id = l_structure_version_id
17499     AND  PPEV.proj_element_id = PT.task_id (+);
17500 
17501     OPEN sel_struc_and_task_vers(l_structure_version_id);
17502     LOOP
17503       FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
17504       EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
17505       /* Bug 2790703 Begin */
17506       --Add to array for rollup
17507       l_index := l_index + 1;
17508       l_task_ver_ids_tbl(l_index) := l_element_version_id;
17509       /* Bug 2790703 End */
17510       END LOOP;
17511     CLOSE sel_struc_and_task_vers;
17512 
17513     IF (l_task_ver_ids_tbl.count > 0) THEN
17514       --rollup
17515       PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
17516        p_commit => FND_API.G_FALSE,
17517        p_element_versions => l_task_ver_ids_tbl,
17518        x_return_status => l_return_status,
17519        x_msg_count => l_msg_count,
17520        x_msg_data => l_msg_data);
17521 
17522       --Check if there is any error.
17523       l_msg_count := FND_MSG_PUB.count_msg;
17524       IF l_msg_count > 0 THEN
17525         x_msg_count := l_msg_count;
17526         IF x_msg_count = 1 THEN
17527           x_msg_data := l_msg_data;
17528         END IF;
17529         RAISE FND_API.G_EXC_ERROR;
17530       END IF;
17531     END IF;
17532 
17533     --Check if there is any error.
17534     l_msg_count := FND_MSG_PUB.count_msg;
17535     IF l_msg_count > 0 THEN
17536       x_msg_count := l_msg_count;
17537       IF x_msg_count = 1 THEN
17538         x_msg_data := l_msg_data;
17539       END IF;
17540       RAISE FND_API.G_EXC_ERROR;
17541     END IF;
17542 
17543     -- Bug # 5077599.
17544 
17545     -- If the project is version disabled, then baseline the structure version.
17546 
17547     if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'N') then
17548 
17549         update pa_proj_elem_ver_structure ppevs
17550         set ppevs.current_flag = 'Y'
17551             , ppevs.original_flag = 'Y'
17552             , ppevs.record_version_number = (ppevs.record_version_number+1)
17553         where ppevs.project_id = p_project_id
17554         and ppevs.element_version_id = l_structure_version_id;
17555 
17556         PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION
17557         (p_commit                 => p_commit
17558         ,p_validate_only          => p_validate_only
17559         ,p_validation_level       => p_validation_level
17560         ,p_calling_module         => p_calling_module
17561         ,p_debug_mode             => p_debug_mode
17562         ,p_max_msg_count          => p_max_msg_count
17563         ,p_structure_version_id   => l_structure_version_id
17564         ,x_return_status          => x_return_status
17565         ,x_msg_count              => x_msg_count
17566         ,x_msg_data               => x_msg_data);
17567 
17568     end if;
17569 
17570     -- Bug # 5077599.
17571 
17572 
17573   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_MAPPING') THEN
17574     --split mapping; no action required
17575     NULL;
17576   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
17577     --split no mapping; no action required
17578     NULL;
17579   END IF;
17580 
17581 END IF;
17582 
17583 IF (p_workplan_enabled_flag = 'N' or p_financial_enabled_flag = 'N') THEN
17584   --clear sharing option
17585   l_new_share_code := NULL;
17586 ELSE
17587   l_new_share_code := p_sharing_option_code;
17588 END IF;
17589 
17590 update pa_projects_all
17591 set structure_sharing_code = l_new_share_code
17592 where project_id = p_project_id;
17593 
17594 IF l_delv_enabled = 'Y' THEN
17595   --currently enabled
17596   IF (p_deliverables_enabled_flag = 'N') THEN
17597     PA_DELIVERABLE_PUB.DELETE_DELIVERABLE_STRUCTURE
17598     (p_project_id => p_project_id
17599     ,x_return_status           => l_return_status
17600     ,x_msg_count               => l_msg_count
17601     ,x_msg_data                => l_msg_data );
17602 
17603     --Check if there is any error.
17604     l_msg_count := FND_MSG_PUB.count_msg;
17605     IF l_msg_count > 0 THEN
17606       x_msg_count := l_msg_count;
17607       IF x_msg_count = 1 THEN
17608         x_msg_data := l_msg_data;
17609       END IF;
17610       RAISE FND_API.G_EXC_ERROR;
17611     END IF;
17612   END IF;
17613 ELSE  --l_delv_enabled = 'N'
17614   --currently disabled
17615   IF (p_deliverables_enabled_flag = 'Y') THEN
17616     --enable deliverable
17617     --get suffix
17618     select meaning
17619     into l_suffix
17620     from pa_lookups
17621     where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
17622     and lookup_code = 'DELIVERABLE';
17623     --get deliverable name
17624     l_del_name := substrb(l_name||l_append||l_suffix, 1, 240);
17625 
17626     --create workplan structure
17627     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
17628     (p_validate_only           => FND_API.G_FALSE
17629     ,p_project_id              => p_project_id
17630     ,p_structure_number        => l_del_name
17631     ,p_structure_name          => l_del_name
17632     ,p_calling_flag            => 'DELIVERABLE'
17633     ,x_structure_id            => l_structure_id
17634     ,x_return_status           => l_return_status
17635     ,x_msg_count               => l_msg_count
17636     ,x_msg_data                => l_msg_data );
17637 
17638     --Check if there is any error.
17639     l_msg_count := FND_MSG_PUB.count_msg;
17640     IF l_msg_count > 0 THEN
17641       x_msg_count := l_msg_count;
17642       IF x_msg_count = 1 THEN
17643         x_msg_data := l_msg_data;
17644       END IF;
17645       RAISE FND_API.G_EXC_ERROR;
17646     END IF;
17647 
17648     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
17649     (p_validate_only         => FND_API.G_FALSE
17650     ,p_structure_id          => l_structure_id
17651     ,x_structure_version_id  => l_structure_version_id
17652     ,x_return_status         => l_return_status
17653     ,x_msg_count             => l_msg_count
17654     ,x_msg_data              => l_msg_data );
17655 
17656     --Check if there is any error.
17657     l_msg_count := FND_MSG_PUB.count_msg;
17658     IF l_msg_count > 0 THEN
17659       x_msg_count := l_msg_count;
17660       IF x_msg_count = 1 THEN
17661         x_msg_data := l_msg_data;
17662       END IF;
17663       RAISE FND_API.G_EXC_ERROR;
17664     END IF;
17665 
17666     PA_TASK_PUB1.Create_Schedule_Version(
17667      p_element_version_id      => l_structure_version_id
17668     ,p_scheduled_start_date    => l_proj_start_date
17669     ,p_scheduled_end_date      => l_proj_completion_date
17670     ,x_pev_schedule_id         => l_pev_schedule_id
17671     ,x_return_status           => l_return_status
17672     ,x_msg_count               => l_msg_count
17673     ,x_msg_data                => l_msg_data);
17674 
17675     --Check if there is any error.
17676     l_msg_count := FND_MSG_PUB.count_msg;
17677     IF l_msg_count > 0 THEN
17678       x_msg_count := l_msg_count;
17679       IF x_msg_count = 1 THEN
17680         x_msg_data := l_msg_data;
17681       END IF;
17682       RAISE FND_API.G_EXC_ERROR;
17683     END IF;
17684 
17685     IF (l_template_flag = 'Y') THEN
17686       l_status_code := 'STRUCTURE_WORKING';
17687       l_baseline_flag := 'N';
17688       l_latest_eff_pub_flag := 'N';
17689       l_effective_date := NULL;
17690     ELSE
17691       l_status_code := 'STRUCTURE_PUBLISHED';
17692       l_baseline_flag := 'N';
17693       l_latest_eff_pub_flag := 'Y';
17694       l_effective_date := sysdate;
17695     END IF;
17696 
17697     --create structure version
17698     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
17699     (p_validate_only               => FND_API.G_FALSE
17700     ,p_structure_version_id        => l_structure_version_id
17701     ,p_structure_version_name      => l_del_name
17702     ,p_structure_version_desc      => NULL
17703     ,p_effective_date              => l_effective_date
17704     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
17705     ,p_locked_status_code          => 'UNLOCKED'
17706     ,p_struct_version_status_code  => l_status_code
17707     ,p_baseline_current_flag       => l_baseline_flag
17708     ,p_baseline_original_flag      => 'N'
17709     ,x_pev_structure_id            => l_pev_structure_id
17710     ,x_return_status               => l_return_status
17711     ,x_msg_count                   => l_msg_count
17712     ,x_msg_data                    => l_msg_data );
17713 
17714     --Check if there is any error.
17715     l_msg_count := FND_MSG_PUB.count_msg;
17716     IF l_msg_count > 0 THEN
17717       x_msg_count := l_msg_count;
17718       IF x_msg_count = 1 THEN
17719         x_msg_data := l_msg_data;
17720       END IF;
17721       RAISE FND_API.G_EXC_ERROR;
17722     END IF;
17723 
17724   END IF;
17725 END IF;
17726 
17727  -- FP.M changes below
17728     If p_sys_program_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17729          l_sys_program_flag := null;
17730     else
17731          l_sys_program_flag := p_sys_program_flag;
17732     end if;
17733 
17734     If p_allow_multi_prog_rollup = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
17735          l_allow_multi_program_rollup :=null;
17736     else
17737          l_allow_multi_program_rollup :=p_allow_multi_prog_rollup;
17738     end if;
17739 
17740 --bug 4275096
17741     IF l_sys_program_flag = 'N' AND l_allow_multi_program_rollup = 'Y'
17742     THEN
17743           Pa_Utils.ADD_MESSAGE
17744                 ( p_app_short_name => 'PA',
17745                   p_msg_name     =>'PA_PS_EN_SYS_PROG_ERR');
17746            RAISE FND_API.G_EXC_ERROR;
17747     END IF;
17748 --end bug 4275096
17749 
17750     IF (l_proj_sys_program_flag='Y' and nvl(l_sys_program_flag,'N')='N' ) then
17751         l_flag := PA_RELATIONSHIP_UTILS.DISABLE_SYS_PROG_OK(p_project_id);
17752          If l_flag='N' Then
17753           Pa_Utils.ADD_MESSAGE
17754                 ( p_app_short_name => 'PA',
17755                   p_msg_name     =>'PA_PS_DIS_SYS_PROG_ERR');
17756            RAISE FND_API.G_EXC_ERROR;
17757         END IF;
17758     END IF;
17759 
17760     IF (l_proj_allow_program_rollup='Y' and nvl(l_allow_multi_program_rollup,'N')='N' ) then
17761         l_flag := PA_RELATIONSHIP_UTILS.DISABLE_MULTI_PROG_OK(p_project_id);
17762           IF l_flag ='N' Then
17763            Pa_Utils.ADD_MESSAGE
17764                 ( p_app_short_name => 'PA',
17765                   p_msg_name     =>'PA_PS_DIS_MULTI_PROG_ERR');
17766            RAISE FND_API.G_EXC_ERROR;
17767         END IF;
17768     END IF;
17769 
17770 --    IF NOT FND_API.TO_BOOLEAN(p_validate_only) THEN
17771       UPDATE pa_projects_all
17772       SET
17773           sys_program_flag      = nvl(l_sys_program_flag,'N'),
17774           allow_multi_program_rollup = nvl(l_allow_multi_program_rollup,'N')
17775       WHERE project_id = p_project_id;
17776 --    END IF;
17777   -- end of FP.M changes
17778 
17779     x_return_status := FND_API.G_RET_STS_SUCCESS;
17780 
17781     IF (p_debug_mode = 'Y') THEN
17782       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr end');
17783     END IF;
17784 
17785   EXCEPTION
17786     WHEN FND_API.G_EXC_ERROR THEN
17787       IF (p_commit = FND_API.G_TRUE) THEN
17788         ROLLBACK to update_struc_setup_attr_pvt;
17789       END IF;
17790       x_msg_count := FND_MSG_PUB.count_msg;
17791       x_return_status := FND_API.G_RET_STS_ERROR;
17792     WHEN OTHERS THEN
17793       IF (p_commit = FND_API.G_TRUE) THEN
17794         ROLLBACK to update_struc_setup_attr_pvt;
17795       END IF;
17796       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17797       x_msg_count := FND_MSG_PUB.count_msg;
17798       --put message
17799       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
17800                               p_procedure_name => 'update_structures_setup_attr',
17801                               p_error_text     => SUBSTRB(SQLERRM,1,240));
17802       RAISE;
17803   END update_structures_setup_attr;
17804 
17805 end PA_PROJECT_STRUCTURE_PVT1;