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.31.12020000.6 2013/03/28 11:13:22 bpottipa ship $*/
3 
4 -- API name                      : Create_Structure
5 -- Type                          : Private Procedure
6 -- Pre-reqs                      : None
7 -- Return Value                  : N/A
8 -- Parameters
9 --   p_api_version                       IN  NUMBER      := 1.0
10 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
11 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
12 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
13 --   p_validation_level                  IN  VARCHAR2    := 100
14 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
15 --   p_debug_mode                        IN  VARCHAR2    := 'N'
16 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17 --   p_project_id    IN  NUMBER
18 --   p_structure_number  IN  VARCHAR2 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19 --   p_structure_name    IN  VARCHAR2
20 --   p_calling_flag  IN  VARCHAR2 := 'WORKPLAN'
21 --   p_structure_description     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
23 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
26 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38 --   x_structure_id  OUT     NUMBER
39 --   x_return_status     OUT     VARCHAR2
40 --   x_msg_count     OUT     NUMBER
41 --   x_msg_data  OUT     VARCHAR2
42 --
43 --  History
44 --
45 --  25-JUN-01   HSIU             -Created
46 --
47 --
48 
49 
50   procedure Create_Structure
51   (
52    p_api_version                       IN  NUMBER      := 1.0
53    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
54    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
55    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
56    ,p_validation_level                  IN  VARCHAR2    := 100
57    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
58    ,p_debug_mode                        IN  VARCHAR2    := 'N'
59    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
60    ,p_project_id                        IN  NUMBER
61    ,p_structure_number                  IN  VARCHAR2 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
62    ,p_structure_name                    IN  VARCHAR2
63    ,p_calling_flag                      IN  VARCHAR2 := 'WORKPLAN'
64    ,p_structure_description             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
65    ,p_attribute_category                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
66    ,p_attribute1                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
67    ,p_attribute2                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
68    ,p_attribute3                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
69    ,p_attribute4                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
70    ,p_attribute5                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
71    ,p_attribute6                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
72    ,p_attribute7                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
73    ,p_attribute8                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
74    ,p_attribute9                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
75    ,p_attribute10                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
76    ,p_attribute11                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
77    ,p_attribute12                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
78    ,p_attribute13                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
79    ,p_attribute14                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
80    ,p_attribute15                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
81    ,p_approval_reqd_flag            IN VARCHAR2 := 'N'
82    ,p_auto_publish_flag             IN VARCHAR2 := 'N'
83    ,p_approver_source_id            IN NUMBER   := FND_API.G_MISS_NUM
84    ,p_approver_source_type          IN NUMBER   := FND_API.G_MISS_NUM
85    ,p_default_display_lvl           IN NUMBER   := 0
86    ,p_enable_wp_version_flag        IN VARCHAR2 := 'N'
87    ,p_auto_pub_upon_creation_flag   IN VARCHAR2 := 'N'
88    ,p_auto_sync_txn_date_flag       IN VARCHAR2 := 'N'
89    ,p_txn_date_sync_buf_days        IN NUMBER   := FND_API.G_MISS_NUM
90    ,p_lifecycle_version_id          IN NUMBER   := FND_API.G_MISS_NUM
91    ,p_current_phase_version_id      IN NUMBER   := FND_API.G_MISS_NUM
92    ,p_progress_cycle_id             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
93    ,p_wq_enable_flag                IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
94    ,p_remain_effort_enable_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
95    ,p_percent_comp_enable_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
96    ,p_next_progress_update_date     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
97    ,p_action_set_id                 IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
98    ,p_task_weight_basis_code        IN VARCHAR2 := 'DURATION'
99    ,x_structure_id                      OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
100    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
101    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
102    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
103   )
104   IS
105     l_msg_count            NUMBER;
106     l_msg_data             VARCHAR2(250);
107     l_return_status        VARCHAR2(2);
108     l_error_message_code   VARCHAR2(250);
109 
110     l_rowid                VARCHAR2(255);
111     l_proj_element_id      PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
112     l_structure_type_id    PA_STRUCTURE_TYPES.STRUCTURE_TYPE_ID%TYPE;
113     l_proj_structure_type_id PA_PROJ_STRUCTURE_TYPES.PROJ_STRUCTURE_TYPE_ID%TYPE;
114     l_structure_type       PA_STRUCTURE_TYPES.STRUCTURE_TYPE_CLASS_CODE%TYPE;
115 
116     l_workplan_license     VARCHAR2(1);
117     l_financial_license      VARCHAR2(1);
118     l_multi_struc_license  VARCHAR2(1);
119 
120     l_split_flag          VARCHAR2(1);
121     l_split_flag2         VARCHAR2(1);
122 
123     l_attribute_category VARCHAR2(30) := NULL;
124     l_attribute1         VARCHAR2(150) := NULL;
125     l_attribute2         VARCHAR2(150) := NULL;
126     l_attribute3         VARCHAR2(150) := NULL;
127     l_attribute4         VARCHAR2(150) := NULL;
128     l_attribute5         VARCHAR2(150) := NULL;
129     l_attribute6         VARCHAR2(150) := NULL;
130     l_attribute7         VARCHAR2(150) := NULL;
131     l_attribute8         VARCHAR2(150) := NULL;
132     l_attribute9         VARCHAR2(150) := NULL;
133     l_attribute10        VARCHAR2(150) := NULL;
134     l_attribute11        VARCHAR2(150) := NULL;
135     l_attribute12        VARCHAR2(150) := NULL;
136     l_attribute13        VARCHAR2(150) := NULL;
137     l_attribute14        VARCHAR2(150) := NULL;
138     l_attribute15        VARCHAR2(150) := NULL;
139 
140     l_proj_prog_attr_id  NUMBER;
141     l_structure_description VARCHAR2(2000);
142 
143     cursor get_split_flag IS
144     select split_cost_from_workplan_flag, SPLIT_COST_FROM_BILL_FLAG
145       from pa_projects_all
146      where project_id = p_project_id;
147 
148     cursor get_licensed(p_workplan VARCHAR2,
149                       p_financial  VARCHAR2,
150                       p_deliverable VARCHAR2)  IS
151     select structure_type_id, structure_type_class_code
152       from pa_structure_types
153      where (structure_type_class_code = 'WORKPLAN' and 'Y' = p_workplan)
154         or (structure_type_class_code = 'FINANCIAL' and 'Y' = p_financial)
155         or (structure_type_class_code = 'DELIVERABLE' and 'Y' = p_deliverable);
156     l_deliverable_license VARCHAR2(1) := 'N';
157 
158   BEGIN
159     IF (p_debug_mode = 'Y') THEN
160       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE BEGIN');
161     END IF;
162 
163     IF (p_commit = FND_API.G_TRUE) THEN
164       savepoint CREATE_STRUC_PRIVATE;
165     END IF;
166 
167     IF (p_debug_mode = 'Y') THEN
168       pa_debug.debug('Performing validations');
169     END IF;
170 
171     --Check if the structure name is unique within the project
172     If (pa_project_structure_utils.check_structure_name_unique(p_structure_name,
173                                                                NULL,
174                                                                p_project_id) <> 'Y') THEN
175       --Name is not unique
176       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_STRUC_NAME_UNIQUE');
177       x_msg_data := 'PA_PS_STRUC_NAME_UNIQUE';
178       RAISE FND_API.G_EXC_ERROR;
179     END IF;
180 
181     --Check what is licensed.
182     l_workplan_license := nvl(pa_install.is_pjt_licensed, 'N');
183     l_financial_license  := nvl(pa_install.is_costing_licensed, 'N');
184 
185     IF (p_calling_flag IS NOT NULL) THEN
186       IF (p_calling_flag = 'WORKPLAN') THEN
187         l_financial_license := 'N';
188         IF (l_workplan_license = 'N') THEN
189           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_PROJ_MANAG_NOT_LIC');
190           x_msg_data := 'PA_PS_PROD_MANAG_NOT_LIC';
191           RAISE FND_API.G_EXC_ERROR;
192         END IF;
193       ELSIF (p_calling_flag = 'FINANCIAL') THEN
194         l_workplan_license := 'N';
195         IF (l_financial_license <> 'Y') THEN
196           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_COSTING_NOT_LIC');
197           RAISE FND_API.G_EXC_ERROR;
198         END IF;
199       ELSIF (p_calling_flag = 'DELIVERABLE') THEN
200         l_workplan_license := 'N';
201         l_financial_license := 'N';
202         l_deliverable_license := 'Y';
203       END IF;
204     END IF;
205 
206 /*
207     --Check if we should split structure types into different structure
208     open get_split_flag;
209     fetch get_split_flag into l_split_flag, l_split_flag2;
210     IF get_split_flag%NOTFOUND THEN
211       PA_UTILS.ADD_MESSAGE('PA', 'PA_INVALID_PROJECT_ID');
212       x_msg_data := 'PA_INVALID_PROJECT_ID';
213       RAISE FND_API.G_EXC_ERROR;
214     END IF;
215     close get_split_flag;
216 
217     --Check if there is any error.
218     l_msg_count := FND_MSG_PUB.count_msg;
219     IF l_msg_count > 0 THEN
220       x_msg_count := l_msg_count;
221       IF x_msg_count = 1 THEN
222         x_msg_data := l_msg_data;
223       END IF;
224       RAISE FND_API.G_EXC_ERROR;
225     END IF;
226 
227     --If splitting structure types, check if one structure type is selected
228     If (l_split_flag <> 'N') THEN
229       IF (p_calling_flag = 'WORKPLAN') THEN
230         l_costing_license := 'N';
231         l_billing_license := 'N';
232         If (l_workplan_license <> 'Y') THEN
233           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_PROJ_MANAG_NOT_LIC');
234           x_msg_data := 'PA_PS_PROD_MANAG_NOT_LIC';
235           RAISE FND_API.G_EXC_ERROR;
236         END IF;
237       ELSIf (p_calling_flag = 'COSTING') THEN
238         IF (l_costing_license <> 'Y') THEN
239           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_COSTING_NOT_LIC');
240           x_msg_data := 'PA_PS_COSTING_NOT_LIC';
241           RAISE FND_API.G_EXC_ERROR;
242         END IF;
243         l_workplan_license := 'N';
244         If (l_split_flag2 <> 'N') THEN
245           l_billing_license := 'N';
246         END IF;
247       ELSIf (p_calling_flag = 'BILLING') THEN
248         IF (l_billing_license <> 'Y') THEN
249           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_BILLING_NOT_LIC');
250           x_msg_data := 'PA_PS_BILLING_NOT_LIC';
251           RAISE FND_API.G_EXC_ERROR;
252         END IF;
253         l_workplan_license := 'N';
254         If (l_split_flag2 <> 'N') THEN
255           l_costing_license := 'N';
256         END IF;
257       ELSIf (p_calling_flag IS NULL) THEN
258         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_CALLING_PAGE_SEL');
259         x_msg_data := 'PA_PS_NO_CALLING_PAGE_SEL';
260         RAISE FND_API.G_EXC_ERROR;
261       END IF;
262     END IF;
263 */
264 
265     --Check if multistructure is licensed.
266     l_multi_struc_license := 'Y'; --pa_install.is_product_licensed('PA_MULTISTRUCTURE_LICENSED');
267 
268 
269     --Replace dff values with null if not entered.
270     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL) THEN
271       l_attribute_category := p_attribute_category;
272     END IF;
273     IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN
274       l_attribute1 := p_attribute1;
275     END IF;
276     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN
277       l_attribute2 := p_attribute2;
278     END IF;
279     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN
280       l_attribute3 := p_attribute3;
281     END IF;
282     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN
283       l_attribute4 := p_attribute4;
284     END IF;
285     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN
286       l_attribute5 := p_attribute5;
287     END IF;
288     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN
289       l_attribute6 := p_attribute6;
290     END IF;
291     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN
292       l_attribute7 := p_attribute7;
293     END IF;
294     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN
295       l_attribute8 := p_attribute8;
296     END IF;
297     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN
298       l_attribute9 := p_attribute9;
299     END IF;
300     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN
301       l_attribute10 := p_attribute10;
302     END IF;
303     IF (p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute11 IS NULL) THEN
304       l_attribute11 := p_attribute11;
305     END IF;
306     IF (p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute12 IS NULL) THEN
307       l_attribute12 := p_attribute12;
308     END IF;
309     IF (p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute13 IS NULL) THEN
310       l_attribute13 := p_attribute13;
311     END IF;
312     IF (p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute14 IS NULL) THEN
313       l_attribute14 := p_attribute14;
314     END IF;
315     IF (p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute15 IS NULL) THEN
316       l_attribute15 := p_attribute15;
317     END IF;
318     --rtarway,3655698
319     IF (p_structure_description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
320           l_structure_description := null;
321     else
322           l_structure_description :=  p_structure_description;
323     END IF;
324 
325     --Check if there is any error.
326     l_msg_count := FND_MSG_PUB.count_msg;
327     IF l_msg_count > 0 THEN
328       x_msg_count := l_msg_count;
329       IF x_msg_count = 1 THEN
330         x_msg_data := l_msg_data;
331       END IF;
332       RAISE FND_API.G_EXC_ERROR;
333     END IF;
334 
335     --Insert into pa_proj_elements
336     select PA_TASKS_S.NEXTVAL into l_proj_element_id from sys.dual;
337 
338     PA_PROJ_ELEMENTS_PKG.insert_row(
339      X_ROW_ID              => l_rowid
340     ,X_PROJ_ELEMENT_ID     => l_proj_element_id
341     ,X_PROJECT_ID          => p_project_id
342     ,X_OBJECT_TYPE     => 'PA_STRUCTURES'
343     ,X_ELEMENT_NUMBER      => to_char(l_proj_element_id)
344     ,X_NAME                => p_structure_name
345     ,X_DESCRIPTION     => l_structure_description--rtarway,3655698
346     ,X_STATUS_CODE     => NULL
347     ,X_WF_STATUS_CODE      => NULL
348     ,X_PM_PRODUCT_CODE     => NULL
349     ,X_PM_TASK_REFERENCE   => NULL
350     ,X_CLOSED_DATE     => NULL
351     ,X_LOCATION_ID     => NULL
352     ,X_MANAGER_PERSON_ID   => NULL
353     ,X_CARRYING_OUT_ORGANIZATION_ID => NULL
354     ,X_TYPE_ID               => NULL
355     ,X_PRIORITY_CODE       => NULL
356     ,X_INC_PROJ_PROGRESS_FLAG   => 'N'
357     ,X_REQUEST_ID            => NULL
358     ,X_PROGRAM_APPLICATION_ID => NULL
359     ,X_PROGRAM_ID            => NULL
360     ,X_PROGRAM_UPDATE_DATE => NULL
361     ,X_LINK_TASK_FLAG      => 'N'
362     ,X_ATTRIBUTE_CATEGORY  => l_attribute_category
363     ,X_ATTRIBUTE1            => l_attribute1
364     ,X_ATTRIBUTE2            => l_attribute2
365     ,X_ATTRIBUTE3            => l_attribute3
366     ,X_ATTRIBUTE4            => l_attribute4
367     ,X_ATTRIBUTE5            => l_attribute5
368     ,X_ATTRIBUTE6            => l_attribute6
369     ,X_ATTRIBUTE7            => l_attribute7
370     ,X_ATTRIBUTE8            => l_attribute8
371     ,X_ATTRIBUTE9            => l_attribute9
372     ,X_ATTRIBUTE10         => l_attribute10
373     ,X_ATTRIBUTE11         => l_attribute11
374     ,X_ATTRIBUTE12         => l_attribute12
375     ,X_ATTRIBUTE13         => l_attribute13
376     ,X_ATTRIBUTE14         => l_attribute14
377     ,X_ATTRIBUTE15         => l_attribute15
378     ,X_TASK_WEIGHTING_DERIV_CODE => NULL
379     ,X_WORK_ITEM_CODE            => NULL
380     ,X_UOM_CODE                  => NULL
381     ,X_WQ_ACTUAL_ENTRY_CODE      => NULL
382     ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
383     ,X_PARENT_STRUCTURE_ID => NULL
384     ,X_PHASE_CODE          => NULL
385     ,X_PHASE_VERSION_ID    => NULL
386         ,X_SOURCE_OBJECT_ID    => p_project_id
387     ,X_SOURCE_OBJECT_TYPE  => 'PA_PROJECTS'
388     );
389 
390     x_structure_id := l_proj_element_id;
391 
392 --dbms_output.put_line('done inserting to pa_proj_element');
393 
394     Open get_licensed(l_workplan_license, l_financial_license, l_deliverable_license);
395     IF (p_debug_mode = 'Y') THEN
396       pa_debug.debug('workplan license = '||l_workplan_license);
397       pa_debug.debug('financial license = '||l_financial_license);
398     END IF;
399 
400     LOOP
401       FETCH get_licensed into l_structure_type_id, l_structure_type;
402       EXIT WHEN get_licensed%NOTFOUND;
403 --dbms_output.put_line('begin inserting to struture type tbl');
404       IF (p_debug_mode = 'Y') THEN
405         pa_debug.debug('structure_type = '||l_structure_type);
406       END IF;
407       --check if structure type exists
408 
409       pa_project_structure_utils.Check_structure_Type_Exists(p_project_id,
410                                   l_structure_type,
411                                   l_return_status,
412                                   l_error_message_code);
413 --dbms_output.put_line(l_return_status||', '||l_error_message_code);
414       If (l_return_status <> 'S') THEN
415         PA_UTILS.ADD_MESSAGE('PA',l_error_message_code);
416         x_msg_data := l_error_message_code;
417         CLOSE get_licensed;
418         RAISE FND_API.G_EXC_ERROR;
419       END IF;
420 
421       IF (l_structure_type IN ('WORKPLAN','DELIVERABLE')) THEN
422         --Add pa_proj_workplan_attr row
423         PA_WORKPLAN_ATTR_PVT.CREATE_PROJ_WORKPLAN_ATTRS(
424            p_validate_only               => FND_API.G_FALSE
425           ,p_project_id                  => p_project_id
426           ,p_proj_element_id             => l_proj_element_id
427           ,p_approval_reqd_flag          => p_approval_reqd_flag
428           ,p_auto_publish_flag           => p_auto_publish_flag
429           ,p_approver_source_id          => p_approver_source_id
430           ,p_approver_source_type        => p_approver_source_type
431           ,p_default_display_lvl         => p_default_display_lvl
432           ,p_enable_wp_version_flag      => p_enable_wp_version_flag
433           ,p_auto_pub_upon_creation_flag => p_auto_pub_upon_creation_flag
434           ,p_auto_sync_txn_date_flag     => p_auto_sync_txn_date_flag
435           ,p_txn_date_sync_buf_days      => p_txn_date_sync_buf_days
436           ,p_lifecycle_version_id        => p_lifecycle_version_id
437           ,p_current_phase_version_id    => p_current_phase_version_id
438           ,x_return_status               => l_return_status
439           ,x_msg_count                   => x_msg_count
440           ,x_msg_data                    => x_msg_data
441         );
442 
443         IF (l_return_status <> 'S') THEN
444           RAISE FND_API.G_EXC_ERROR;
445         END IF;
446     /* Amit : Moving this code below as it will create project progress attribute records for Delievrables too
447         PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
448            p_validate_only       => FND_API.G_FALSE
449           ,p_project_id          => p_project_id
450           ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
451           ,P_OBJECT_ID           => l_proj_element_id
452           ,p_wq_enable_flag      => p_wq_enable_flag
453           ,p_progress_cycle_id   => p_progress_cycle_id
454           ,p_remain_effort_enable_flag => p_remain_effort_enable_flag
455           ,p_percent_comp_enable_flag => p_percent_comp_enable_flag
456           ,p_next_progress_update_date => p_next_progress_update_date
457           ,p_action_set_id       => p_action_set_id
458           ,p_task_weight_basis_code => p_task_weight_basis_code
459       ,p_structure_type        => l_structure_type  -- Amit
460           ,x_proj_progress_attr_id => l_proj_prog_attr_id
461           ,x_return_status       => l_return_status
462           ,x_msg_count           => x_msg_count
463           ,x_msg_data            => x_msg_data
464         );
465 
466         IF (l_return_status <> 'S') THEN
467           RAISE FND_API.G_EXC_ERROR;
468         END IF;
469     */
470 
471       END IF;
472 
473       IF (l_structure_type = 'WORKPLAN') THEN -- NOt Adding financial here as progress attr created thru enable_financial_structure
474         PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
475            p_validate_only       => FND_API.G_FALSE
476           ,p_project_id          => p_project_id
477           ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
478           ,P_OBJECT_ID           => l_proj_element_id
479           ,p_wq_enable_flag      => p_wq_enable_flag
480           ,p_progress_cycle_id   => p_progress_cycle_id
481           ,p_remain_effort_enable_flag => p_remain_effort_enable_flag
482           ,p_percent_comp_enable_flag => p_percent_comp_enable_flag
483           ,p_next_progress_update_date => p_next_progress_update_date
484           ,p_action_set_id       => p_action_set_id
485           ,p_task_weight_basis_code => p_task_weight_basis_code
486       ,p_structure_type        => l_structure_type  -- Amit
487           ,x_proj_progress_attr_id => l_proj_prog_attr_id
488           ,x_return_status       => l_return_status
489           ,x_msg_count           => x_msg_count
490           ,x_msg_data            => x_msg_data
491         );
492 
493         IF (l_return_status <> 'S') THEN
494           RAISE FND_API.G_EXC_ERROR;
495         END IF;
496       END IF;
497 
498       --Insert into pa_proj_structure_types
499       BEGIN
500       l_proj_structure_type_id := NULL;
501       PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
502        X_ROWID                   => l_rowid
503       , X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
504       , X_PROJ_ELEMENT_ID        => l_proj_element_id
505       , X_STRUCTURE_TYPE_ID      => l_structure_type_id
506       , X_RECORD_VERSION_NUMBER  => 1
507       , X_ATTRIBUTE_CATEGORY     => NULL
508       , X_ATTRIBUTE1             => NULL
509       , X_ATTRIBUTE2             => NULL
510       , X_ATTRIBUTE3             => NULL
511       , X_ATTRIBUTE4             => NULL
512       , X_ATTRIBUTE5             => NULL
513       , X_ATTRIBUTE6             => NULL
514       , X_ATTRIBUTE7             => NULL
515       , X_ATTRIBUTE8             => NULL
516       , X_ATTRIBUTE9             => NULL
517       , X_ATTRIBUTE10            => NULL
518       , X_ATTRIBUTE11            => NULL
519       , X_ATTRIBUTE12            => NULL
520       , X_ATTRIBUTE13            => NULL
521       , X_ATTRIBUTE14            => NULL
522       , X_ATTRIBUTE15            => NULL
523       );
524       EXCEPTION
525         WHEN OTHERS THEN
526           CLOSE get_licensed;
527           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
528       END;
529     END LOOP;
530 --dbms_output.put_line('done inserting to struture type tbl');
531 
532     CLOSE get_licensed;
533 
534     x_return_status := FND_API.G_RET_STS_SUCCESS;
535 
536     IF (p_debug_mode = 'Y') THEN
537       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE end');
538     END IF;
539 
540   EXCEPTION
541     WHEN FND_API.G_EXC_ERROR THEN
542       IF (p_commit = FND_API.G_TRUE) THEN
543         ROLLBACK to CREATE_STRUC_PRIVATE;
544       END IF;
545       x_msg_count := FND_MSG_PUB.count_msg;
546       x_return_status := FND_API.G_RET_STS_ERROR;
547     WHEN OTHERS THEN
548       IF (p_commit = FND_API.G_TRUE) THEN
549         ROLLBACK to CREATE_STRUC_PRIVATE;
550       END IF;
551       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
552       x_msg_count := FND_MSG_PUB.count_msg;
553       --put message
554       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
555                               p_procedure_name => 'Create_Structure',
556                               p_error_text     => SUBSTRB(SQLERRM,1,240));
557       RAISE;
558   END CREATE_STRUCTURE;
559 
560 
561 -- API name                      : Create_Structure_Version
562 -- Type                          : Private Procedure
563 -- Pre-reqs                      : None
564 -- Return Value                  : N/A
565 -- Parameters
566 --   p_api_version                       IN  NUMBER      := 1.0
567 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
568 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
569 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
570 --   p_validation_level                  IN  VARCHAR2    := 100
571 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
572 --   p_debug_mode                        IN  VARCHAR2    := 'N'
573 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
574 --   p_structure_id                      IN  NUMBER
575 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
576 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
577 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
578 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
579 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
580 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
581 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
582 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
583 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
584 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
585 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
586 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
587 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
588 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
589 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
590 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
591 --   x_structure_version_id  OUT  NUMBER
592 --   x_return_status     OUT     VARCHAR2
593 --   x_msg_count     OUT     NUMBER
594 --   x_msg_data  OUT     VARCHAR2
595 --
596 --  History
597 --
598 --  25-JUN-01   HSIU             -Created
599 --
600 --
601 
602 
603   procedure Create_Structure_Version
604   (
605    p_api_version                       IN  NUMBER      := 1.0
606    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
607    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
608    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
609    ,p_validation_level                  IN  VARCHAR2    := 100
610    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
611    ,p_debug_mode                        IN  VARCHAR2    := 'N'
612    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
613    ,p_structure_id                      IN  NUMBER
614    ,p_attribute_category                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
615    ,p_attribute1                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
616    ,p_attribute2                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
617    ,p_attribute3                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
618    ,p_attribute4                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
619    ,p_attribute5                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
620    ,p_attribute6                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
621    ,p_attribute7                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
622    ,p_attribute8                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
623    ,p_attribute9                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
624    ,p_attribute10                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
625    ,p_attribute11                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
626    ,p_attribute12                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
627    ,p_attribute13                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
628    ,p_attribute14                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
629    ,p_attribute15                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
630    ,x_structure_version_id              OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
631    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
632    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
633    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
634   )
635   IS
636      l_rowid VARCHAR2(255);
637      l_project_id PA_PROJECTS_ALL.PROJECT_ID%TYPE;
638 
639      l_msg_count NUMBER;
640      l_msg_data VARCHAR2(250);
641      -- added ofr Bug Fix: 4537865
642      l_new_structure_version_id     NUMBER;
643      -- added for Bug fix: 4537865
644 
645     l_attribute_category VARCHAR2(30) := NULL;
646     l_attribute1         VARCHAR2(150) := NULL;
647     l_attribute2         VARCHAR2(150) := NULL;
648     l_attribute3         VARCHAR2(150) := NULL;
649     l_attribute4         VARCHAR2(150) := NULL;
650     l_attribute5         VARCHAR2(150) := NULL;
651     l_attribute6         VARCHAR2(150) := NULL;
652     l_attribute7         VARCHAR2(150) := NULL;
653     l_attribute8         VARCHAR2(150) := NULL;
654     l_attribute9         VARCHAR2(150) := NULL;
655     l_attribute10        VARCHAR2(150) := NULL;
656     l_attribute11        VARCHAR2(150) := NULL;
657     l_attribute12        VARCHAR2(150) := NULL;
658     l_attribute13        VARCHAR2(150) := NULL;
659     l_attribute14        VARCHAR2(150) := NULL;
660     l_attribute15        VARCHAR2(150) := NULL;
661 
662     l_dummy              number;
663 
664     CURSOR getid is select project_id from pa_proj_elements
665                      where proj_element_id = p_structure_id;
666 
667     CURSOR cur_elem_ver_seq IS
668     SELECT pa_proj_element_versions_s.nextval
669       FROM sys.dual;
670 
671   BEGIN
672     IF (p_debug_mode = 'Y') THEN
673       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION begin');
674     END IF;
675 
676     IF (p_commit = FND_API.G_TRUE) THEN
677       savepoint CREATE_STRUC_VER_PVT;
678     END IF;
679 
680     IF (p_debug_mode = 'Y') THEN
681       pa_debug.debug('Performing validations');
682     END IF;
683 
684     --Get project id
685     OPEN getid;
686     FETCH getid into l_project_id;
687     IF (getid%NOTFOUND) THEN
688       CLOSE getid;
689       Raise NO_DATA_FOUND;
690     END IF;
691     CLOSE getid;
692 
693 
694     --Replace dff values
695     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL) THEN
696       l_attribute_category := p_attribute_category;
697     END IF;
698     IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN
699       l_attribute1 := p_attribute1;
700     END IF;
701     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN
702       l_attribute2 := p_attribute2;
703     END IF;
704     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN
705       l_attribute3 := p_attribute3;
706     END IF;
707     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN
708       l_attribute4 := p_attribute4;
709     END IF;
710     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN
711       l_attribute5 := p_attribute5;
712     END IF;
713     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN
714       l_attribute6 := p_attribute6;
715     END IF;
716     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN
717       l_attribute7 := p_attribute7;
718     END IF;
719     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN
720       l_attribute8 := p_attribute8;
721     END IF;
722     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN
723       l_attribute9 := p_attribute9;
724     END IF;
725     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN
726       l_attribute10 := p_attribute10;
727     END IF;
728     IF (p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute11 IS NULL) THEN
729       l_attribute11 := p_attribute11;
730     END IF;
731     IF (p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute12 IS NULL) THEN
732       l_attribute12 := p_attribute12;
733     END IF;
734     IF (p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute13 IS NULL) THEN
735       l_attribute13 := p_attribute13;
736     END IF;
737     IF (p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute14 IS NULL) THEN
738       l_attribute14 := p_attribute14;
739     END IF;
740     IF (p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute15 IS NULL) THEN
741       l_attribute15 := p_attribute15;
742     END IF;
743 
744     --Check if there is any error.
745     l_msg_count := FND_MSG_PUB.count_msg;
746     IF l_msg_count > 0 THEN
747       x_msg_count := l_msg_count;
748       IF x_msg_count = 1 THEN
749         x_msg_data := l_msg_data;
750       END IF;
751       RAISE FND_API.G_EXC_ERROR;
752     END IF;
753 
754 
755     --If no error,
756     --Get structure version id
757     OPEN cur_elem_ver_seq;
758     FETCH cur_elem_ver_seq INTO x_structure_version_id;
759     CLOSE cur_elem_ver_seq;
760 
761     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
762     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_new_structure_version_id
763     -- to  x_structure_version_id
764 
765     l_new_structure_version_id := x_structure_version_id ;
766 
767     -- End 4657794
768 
769 --    error_msg(x_structure_version_id||' new structure version id, '||p_structure_id||', '||l_project_id);
770     --Insert
771     PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
772        X_ROW_ID                       => l_rowid
773     --,X_ELEMENT_VERSION_ID           => x_structure_version_id         * Commenmted for Bug Fix: 4537865
774       ,X_ELEMENT_VERSION_ID       => l_new_structure_version_id     -- added for bug bug Fix: 4537865
775       ,X_PROJ_ELEMENT_ID              => p_structure_id
776       ,X_OBJECT_TYPE                  => 'PA_STRUCTURES'
777       ,X_PROJECT_ID                   => l_project_id
778       ,X_PARENT_STRUCTURE_VERSION_ID  => x_structure_version_id
779       ,X_DISPLAY_SEQUENCE             => NULL
780       ,X_WBS_LEVEL                    => NULL
781       ,X_WBS_NUMBER                   => '0'
782       ,X_ATTRIBUTE_CATEGORY           => l_attribute_category
783       ,X_ATTRIBUTE1                   => l_attribute1
784       ,X_ATTRIBUTE2                   => l_attribute2
785       ,X_ATTRIBUTE3                   => l_attribute3
786       ,X_ATTRIBUTE4                   => l_attribute4
787       ,X_ATTRIBUTE5                   => l_attribute5
788       ,X_ATTRIBUTE6                   => l_attribute6
789       ,X_ATTRIBUTE7                   => l_attribute7
790       ,X_ATTRIBUTE8                   => l_attribute8
791       ,X_ATTRIBUTE9                   => l_attribute9
792       ,X_ATTRIBUTE10                  => l_attribute10
793       ,X_ATTRIBUTE11                  => l_attribute11
794       ,X_ATTRIBUTE12                  => l_attribute12
795       ,X_ATTRIBUTE13                  => l_attribute13
796       ,X_ATTRIBUTE14                  => l_attribute14
797       ,X_ATTRIBUTE15                  => l_attribute15
798       ,X_TASK_UNPUB_VER_STATUS_CODE   => NULL
799             ,X_SOURCE_OBJECT_ID             => l_project_id
800       ,X_SOURCE_OBJECT_TYPE           => 'PA_PROJECTS'
801     );
802     -- added for bug bug Fix: 4537865
803     x_structure_version_id := l_new_structure_version_id;
804     -- added for bug bug Fix: 4537865
805 
806     select element_version_id into l_dummy from pa_proj_element_versions where element_version_id = x_structure_version_id;
807 --    error_msg('element_version_id = '||l_dummy);
808 --    error_msg('rowid = '||l_rowid);
809    -- Added by skannoji
810    -- added for doosan customer to add the planning transaction
811      IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(x_structure_version_id, 'WORKPLAN') = 'Y') THEN
812         /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
813         /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block        */
814         BEGIN
815             PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions
816               (
817                 p_context                => 'WORKPLAN'
818                ,p_project_id             => l_project_id
819                ,p_struct_elem_version_id => x_structure_version_id
820                ,x_return_status          => x_return_status
821                ,x_msg_count              => x_msg_count
822                ,x_Msg_data               => x_msg_data
823               );
824          EXCEPTION
825             WHEN OTHERS THEN
826                  fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
827                                          p_procedure_name => 'CREATE_STRUCTURE_VERSION',
828                                          p_error_text => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
829             RAISE FND_API.G_EXC_ERROR;
830          END;
831       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
832          RAISE FND_API.G_EXC_ERROR;
833       END IF;
834      END IF;
835      -- till here by skannoji
836 
837     x_return_status := FND_API.G_RET_STS_SUCCESS;
838 
839     IF (p_debug_mode = 'Y') THEN
840       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION end');
841     END IF;
842 
843   EXCEPTION
844     WHEN FND_API.G_EXC_ERROR THEN
845       if p_commit = FND_API.G_TRUE THEN
846         rollback to CREATE_STRUC_VER_PVT;
847       end if;
848       x_msg_count := FND_MSG_PUB.count_msg;
849       x_return_status := FND_API.G_RET_STS_ERROR;
850     WHEN NO_DATA_FOUND THEN
851       if p_commit = FND_API.G_TRUE THEN
852         rollback to CREATE_STRUC_VER_PVT;
853       end if;
854       x_return_status := FND_API.G_RET_STS_ERROR;
855 
856     WHEN OTHERS THEN
857       if p_commit = FND_API.G_TRUE THEN
858         rollback to CREATE_STRUC_VER_PVT;
859       end if;
860       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
861       fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
862                               p_procedure_name => 'CREATE_STRUCTURE_VERSION',
863                               p_error_text => SUBSTRB(SQLERRM,1,240));
864       RAISE;
865   END CREATE_STRUCTURE_VERSION;
866 
867 
868 -- API name                      : Create_Structure_Version_Attr
869 -- Type                          : Private Procedure
870 -- Pre-reqs                      : None
871 -- Return Value                  : N/A
872 -- Parameters
873 --   p_api_version                       IN  NUMBER      := 1.0
874 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
875 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
876 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
877 --   p_validation_level                  IN  VARCHAR2    := 100
878 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
879 --   p_debug_mode                        IN  VARCHAR2    := 'N'
880 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
881 --   p_structure_version_id IN  NUMBER
882 --   p_structure_version_name   IN  VARCHAR2
883 --   p_structure_version_desc   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
884 --   p_effective_date   IN  DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
885 --   p_latest_eff_published_flag    IN  VARCHAR2 := 'N'
886 --   p_published_flag   IN  VARCHAR2 := 'N'
887 --   p_locked_status_code   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
888 --   p_struct_version_status_code   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
889 --   p_baseline_current_flag    IN  VARCHAR2 := 'N'
890 --   p_baseline_original_flag   IN  VARCHAR2 := 'N'
891 --   x_pev_structure_id OUT NUMBER
892 --   x_return_status     OUT     VARCHAR2
893 --   x_msg_count     OUT     NUMBER
894 --   x_msg_data  OUT     VARCHAR2
895 --
896 --  History
897 --
898 --  25-JUN-01   HSIU             -Created
899 --  21-JUN-02   HSIU             Added change_reason_code
900 --
901 
902 
903   procedure Create_Structure_Version_Attr
904   (
905    p_api_version                       IN  NUMBER      := 1.0
906    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
907    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
908    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
909    ,p_validation_level                  IN  VARCHAR2    := 100
910    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
911    ,p_debug_mode                        IN  VARCHAR2    := 'N'
912    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
913    ,p_structure_version_id              IN  NUMBER
914    ,p_structure_version_name            IN  VARCHAR2
915    ,p_structure_version_desc            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
916    ,p_effective_date                    IN  DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
917    ,p_latest_eff_published_flag         IN  VARCHAR2 := 'N'
918    ,p_published_flag                    IN  VARCHAR2 := 'N'
919    ,p_locked_status_code                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
920    ,p_struct_version_status_code        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
921    ,p_baseline_current_flag             IN  VARCHAR2 := 'N'
922    ,p_baseline_original_flag              IN  VARCHAR2 := 'N'
923    ,p_change_reason_code                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
924    ,x_pev_structure_id                  OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
925    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
926    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
927    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
928   )
929   IS
930 
931     l_rowid              VARCHAR2(255);
932     l_project_id         PA_PROJECTS_ALL.PROJECT_ID%TYPE;
933     l_proj_element_id    PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
934     l_return_status      VARCHAR2(1);
935     l_msg_count          NUMBER;
936     l_msg_data           VARCHAR2(250);
937 
938 
939     l_status_code                VARCHAR2(30) := 'STRUCTURE_WORKING';
940 
941     l_latest_eff_published_flag  VARCHAR2(1)  := 'N';
942     l_published_date             DATE         := NULL;
943     l_published_person_id        NUMBER;
944     l_effective_date             DATE         := NULL;
945     l_current_baseline_date      DATE         := NULL;
946     l_cur_baseline_person_id     NUMBER;
947     l_current_flag               VARCHAR2(1)  := 'N';
948     l_original_baseline_date     DATE         := NULL;
949     l_orig_baseline_person_id    NUMBER;
950     l_original_flag              VARCHAR2(1)  := 'N';
951     l_struc_ver_number           NUMBER;
952     l_change_reason_code         PA_PROJ_ELEM_VER_STRUCTURE.CHANGE_REASON_CODE%TYPE;
953     l_dummy                      VARCHAR2(1);
954     --rtarway, 3655698
955     l_structure_version_desc     VARCHAR2(2000);
956 
957     cursor get_person_id(p_user_id NUMBER) IS
958     select p.person_id
959       from per_all_people_f p, fnd_user f
960      where f.employee_id = p.person_id
961        and sysdate between p.effective_start_date and p.effective_end_date
962        and f.user_id = p_user_id;
963 
964     cursor getids is select project_id, proj_element_id from pa_proj_element_versions
965                      where element_version_id = p_structure_version_id;
966 
967     cursor get_published_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
968     select nvl(max(version_number),0)+1
969       from pa_proj_elem_ver_structure
970      where project_id = c_project_id
971        and proj_element_id = c_proj_element_id
972        and status_code = 'STRUCTURE_PUBLISHED';
973 
974     cursor get_working_ver_num(c_project_id NUMBER, c_proj_element_id NUMBER) IS
975     select nvl(max(version_number),0)+1
976       from pa_proj_elem_ver_structure
977      where project_id = c_project_id
978        and proj_element_id = c_proj_element_id
979        and status_code <> 'STRUCTURE_PUBLISHED';
980 
981      CURSOR check_financial_type(c_structure_id NUMBER) IS
982      select '1'
983        from pa_proj_structure_types p, pa_structure_types s
984       where s.structure_type_class_code IN ('FINANCIAL')
985         and s.structure_type_id = p.structure_type_id
986         and p.proj_element_id = c_structure_id;
987 
988      CURSOR check_working_ver_exists(c_project_id NUMBER, c_structure_id NUMBER) IS
989      select '1'
990        from pa_proj_elem_ver_structure
991       where project_id = c_project_id
992         and proj_element_id = c_structure_id
993         and status_code <> 'STRUCTURE_PUBLISHED';
994 
995     l_current_working_ver_flag   VARCHAR2(1);  --FPM bug 3301192
996 
997   BEGIN
998     IF (p_debug_mode = 'Y') THEN
999       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION_ATTR begin');
1000     END IF;
1001 
1002     IF (p_commit = FND_API.G_TRUE) THEN
1003       savepoint CREATE_STRUC_VER_ATTR_PVT;
1004     END IF;
1005 
1006     IF (p_debug_mode = 'Y') THEN
1007       pa_debug.debug('Performing validations');
1008     END IF;
1009 
1010     OPEN getids;
1011     FETCH getids into l_project_id, l_proj_element_id;
1012     IF (getids%NOTFOUND) THEN
1013       CLOSE getids;
1014       Raise NO_DATA_FOUND;
1015     END IF;
1016     CLOSE getids;
1017 
1018 
1019     --Check if name unique
1020     IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(p_structure_version_name,
1021                                                                       null,
1022                                                                       l_project_id,
1023                                                                       l_proj_element_id)) THEN
1024       PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
1025       x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
1026       RAISE FND_API.G_EXC_ERROR;
1027     END IF;
1028 
1029   IF (p_published_flag = 'Y' or p_struct_version_status_code =
1030       'STRUCTURE_PUBLISHED') THEN
1031       --Creating a publish structure
1032 
1033       --Get structure version number
1034       OPEN get_published_ver_num(l_project_id, l_proj_element_id);
1035       FETCH get_published_ver_num INTO l_struc_ver_number;
1036       CLOSE get_published_ver_num;
1037 
1038 --      IF (p_published_flag = 'Y') THEN
1039       l_status_code := 'STRUCTURE_PUBLISHED';
1040       l_published_date := sysdate;
1041 
1042       --get published person id
1043       open get_person_id(FND_GLOBAL.USER_ID);
1044       fetch get_person_id into l_published_person_id;
1045       IF get_person_id%NOTFOUND then
1046         l_published_person_id := -1;
1047       END IF;
1048       close get_person_id;
1049 
1050       l_effective_date := l_published_date;
1051       l_latest_eff_published_flag := 'Y';
1052 
1053       --set others with lastest_eff_published_flag to 'N'
1054       update pa_proj_elem_ver_structure
1055       set latest_eff_published_flag = 'N',
1056           record_version_number = record_version_number + 1
1057       where project_id = l_project_id
1058         and proj_element_id = l_proj_element_id
1059         and latest_eff_published_flag = 'Y';
1060 
1061       IF (p_baseline_current_flag = 'Y') THEN
1062         --set date, person_id, flag
1063         l_current_baseline_date := l_published_date;
1064         l_current_flag := 'Y';
1065         l_cur_baseline_person_id := l_published_person_id;
1066 
1067         --clear flags in other versions.
1068         update pa_proj_elem_ver_structure
1069         set current_flag = 'N',
1070             current_baseline_date = NULL,
1071             current_baseline_person_id = NULL,
1072             record_version_number = record_version_number + 1
1073         where project_id = l_project_id
1074           and proj_element_id = l_proj_element_id
1075           and current_flag = 'Y';
1076 
1077 
1078         --Call baseline_structure_version API if workplan
1079         IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
1080           PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
1081                        p_commit => FND_API.G_FALSE,
1082                        p_structure_version_id => p_structure_version_id,
1083                        x_return_status => l_return_status,
1084                        x_msg_count => l_msg_count,
1085                        x_msg_data => l_msg_data);
1086 
1087           If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1088             x_msg_count := FND_MSG_PUB.count_msg;
1089             if x_msg_count = 1 then
1090               x_msg_data := l_msg_data;
1091             end if;
1092             raise FND_API.G_EXC_ERROR;
1093           end if;
1094 
1095         END IF;
1096 
1097 
1098 
1099 
1100       END IF;
1101       IF (p_baseline_original_flag = 'Y') THEN
1102         --set date, person_id, flag
1103         l_original_baseline_date := l_published_date;
1104         l_original_flag := 'Y';
1105         l_orig_baseline_person_id := l_published_person_id;
1106 
1107         --clear flags in other versions.
1108         update pa_proj_elem_ver_structure
1109         set original_flag = 'N',
1110             original_baseline_date = NULL,
1111             original_baseline_person_id = NULL,
1112             record_version_number = record_version_number + 1
1113         where project_id = l_project_id
1114           and proj_element_id = l_proj_element_id
1115           and original_flag = 'Y';
1116 
1117       END IF;
1118 
1119 /*
1120       ELSE
1121         l_status_code := p_struct_version_status_code;
1122         l_current_flag := p_baseline_current_flag;
1123         l_original_flag := p_baseline_original_flag;
1124         l_latest_eff_published_flag := p_latest_eff_published_flag;
1125         l_published_date := sysdate;
1126         l_published_person_id := NULL;
1127         l_effective_date := sysdate;
1128 
1129         IF (l_status_code = 'STRUCTURE_PUBLISHED') THEN
1130           open get_person_id(FND_GLOBAL.USER_ID);
1131           fetch get_person_id into l_published_person_id;
1132           IF get_person_id%NOTFOUND then
1133             l_published_person_id := NULL;
1134           END IF;
1135           close get_person_id;
1136 
1137           --set others with lastest_eff_published_flag to 'N'
1138           update pa_proj_elem_ver_structure
1139           set latest_eff_published_flag = 'N',
1140               record_version_number = record_version_number + 1
1141           where project_id = l_project_id
1142             and proj_element_id = l_proj_element_id
1143             and latest_eff_published_flag = 'Y';
1144 
1145           IF (p_baseline_current_flag = 'Y') THEN
1146             --set date, person_id, flag
1147             l_current_baseline_date := l_published_date;
1148             l_current_flag := 'Y';
1149             l_cur_baseline_person_id := l_published_person_id;
1150 
1151             --clear flags in other versions.
1152             update pa_proj_elem_ver_structure
1153             set current_flag = 'N',
1154                 current_baseline_date = NULL,
1155                 current_baseline_person_id = NULL,
1156                 record_version_number = record_version_number + 1
1157             where project_id = l_project_id
1158               and proj_element_id = l_proj_element_id
1159               and current_flag = 'Y';
1160 
1161 
1162             --Call baseline_structure_version API if workplan
1163             IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
1164               PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
1165                        p_commit => FND_API.G_FALSE,
1166                        p_structure_version_id => p_structure_version_id,
1167                        x_return_status => l_return_status,
1168                        x_msg_count => l_msg_count,
1169                        x_msg_data => l_msg_data);
1170 
1171               If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1172                 x_msg_count := FND_MSG_PUB.count_msg;
1173                 if x_msg_count = 1 then
1174                   x_msg_data := l_msg_data;
1175                 end if;
1176                 raise FND_API.G_EXC_ERROR;
1177               end if;
1178 
1179             END IF;
1180           END IF;
1181 
1182 
1183         END IF;
1184       END IF;
1185 */
1186     ELSE
1187       --Creating a non-published structure
1188 
1189       --Check if this structure contains financial structure type
1190       OPEN check_financial_type(l_proj_element_id);
1191       FETCH check_financial_type INTO l_dummy;
1192       --If not found, then this is not a financial structure. Continue.
1193       IF check_financial_type%FOUND THEN
1194 
1195         --this is a financial structure. Check if there is a non published version
1196         OPEN check_working_ver_exists(l_project_id, l_proj_element_id);
1197         FETCH check_working_ver_exists into l_dummy;
1198         If check_working_ver_exists%FOUND THEN
1199 
1200           --another non-published version exists for structure with type = costing/billing.
1201           --Error.
1202           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_ONE_WORK_VER_ALLOWED');
1203           x_msg_data := 'PA_PS_ONE_WORK_VER_ALLOWED';
1204           RAISE FND_API.G_EXC_ERROR;
1205         END IF;
1206         CLOSE check_working_ver_exists;
1207       END IF;
1208 
1209     CLOSE check_financial_type;
1210 
1211 
1212       --Get structure version number
1213       OPEN get_working_ver_num(l_project_id, l_proj_element_id);
1214       FETCH get_working_ver_num INTO l_struc_ver_number;
1215       CLOSE get_working_ver_num;
1216       l_status_code := 'STRUCTURE_WORKING';
1217     END IF;
1218 
1219     --Check if there is any error.
1220     l_msg_count := FND_MSG_PUB.count_msg;
1221     IF l_msg_count > 0 THEN
1222       x_msg_count := l_msg_count;
1223       IF x_msg_count = 1 THEN
1224         x_msg_data := l_msg_data;
1225       END IF;
1226       RAISE FND_API.G_EXC_ERROR;
1227     END IF;
1228 
1229     IF (p_change_reason_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1230       l_change_reason_code := NULL;
1231     ELSE
1232       l_change_reason_code := p_change_reason_code;
1233     END IF;
1234 
1235 
1236     --FPM bug 3301192
1237     --Find out if there is already a working version( a structure with status other PUBLISHED is a working version)?
1238     OPEN check_working_ver_exists(l_project_id, l_proj_element_id);
1239     FETCH check_working_ver_exists INTO l_current_working_ver_flag;
1240     IF check_working_ver_exists%FOUND
1241     THEN
1242        l_current_working_ver_flag := 'N';
1243     ELSE
1244        l_current_working_ver_flag := 'Y';
1245     END IF;
1246     CLOSE check_working_ver_exists;
1247     --End FPM bug 3301192
1248 
1249     --rtarway,3655698
1250     IF ( p_structure_version_desc = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1251     THEN
1252           l_structure_version_desc := null;
1253     ELSE
1254           l_structure_version_desc  :=  p_structure_version_desc;
1255     end if;
1256 
1257     PA_PROJ_ELEM_VER_STRUCTURE_PKG.insert_row(
1258      X_ROWID                       => l_rowid
1259    , X_PEV_STRUCTURE_ID            => x_pev_structure_id
1260    , X_ELEMENT_VERSION_ID          => p_structure_version_id
1261    , X_VERSION_NUMBER              => l_struc_ver_number
1262    , X_NAME                        => p_structure_version_name
1263    , X_PROJECT_ID                  => l_project_id
1264    , X_PROJ_ELEMENT_ID             => l_proj_element_id
1265    , X_DESCRIPTION                 => l_structure_version_desc  -- rtarway, 3655698
1266    , X_EFFECTIVE_DATE              => l_effective_date
1267    , X_PUBLISHED_DATE              => l_published_date
1268    , X_PUBLISHED_BY                => l_published_person_id
1269    , X_CURRENT_BASELINE_DATE       => l_current_baseline_date
1270    , X_CURRENT_BASELINE_FLAG       => l_current_flag
1271    , X_CURRENT_BASELINE_BY         => l_cur_baseline_person_id
1272    , X_ORIGINAL_BASELINE_DATE      => l_original_baseline_date
1273    , X_ORIGINAL_BASELINE_FLAG      => l_original_flag
1274    , X_ORIGINAL_BASELINE_BY        => l_orig_baseline_person_id
1275    , X_LOCK_STATUS_CODE            => NULL
1276    , X_LOCKED_BY                   => NULL
1277    , X_LOCKED_DATE                 => NULL
1278    , X_STATUS_CODE                 => l_status_code
1279    , X_WF_STATUS_CODE              => NULL
1280    , X_LATEST_EFF_PUBLISHED_FLAG   => l_latest_eff_published_flag
1281    , X_CHANGE_REASON_CODE          => l_change_reason_code
1282    , X_RECORD_VERSION_NUMBER       => 1
1283    , X_CURRENT_WORKING_FLAG        => l_current_working_ver_flag   --FPM bug 3301192
1284      , X_SOURCE_OBJECT_ID            => l_project_id
1285    , X_SOURCE_OBJECT_TYPE          => 'PA_PROJECTS'
1286     );
1287 
1288     --bug 3010538
1289     --set update flag to Y if weighting basis is DURATION or EFFORT
1290 /*  --not necessary when empty
1291     IF (PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_project_id) <> 'MANUAL') THEN
1292       --need to set update flag to Y
1293       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
1294                                p_project_id => l_project_id,
1295                                p_structure_version_id => p_structure_version_id,
1296                                p_update_wbs_flag => 'Y',
1297                                x_return_status => l_return_status,
1298                                x_msg_count => l_msg_count,
1299                                x_msg_data => l_msg_data
1300                              );
1301       If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1302         x_msg_count := FND_MSG_PUB.count_msg;
1303         if x_msg_count = 1 then
1304           x_msg_data := l_msg_data;
1305         end if;
1306         raise FND_API.G_EXC_ERROR;
1307       end if;
1308     END IF;
1309 */
1310     --end bug 3010538
1311 
1312     x_return_status := FND_API.G_RET_STS_SUCCESS;
1313 
1314     IF (p_debug_mode = 'Y') THEN
1315       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE_VERSION_ATTR end');
1316     END IF;
1317 
1318   EXCEPTION
1319     WHEN FND_API.G_EXC_ERROR THEN
1320       if p_commit = FND_API.G_TRUE THEN
1321         rollback to CREATE_STRUC_VER_ATTR_PVT;
1322       end if;
1323       x_msg_count := FND_MSG_PUB.count_msg;
1324       x_return_status := FND_API.G_RET_STS_ERROR;
1325     WHEN NO_DATA_FOUND THEN
1326       if p_commit = FND_API.G_TRUE THEN
1327         rollback to CREATE_STRUC_VER_ATTR_PVT;
1328       end if;
1329       x_return_status := FND_API.G_RET_STS_ERROR;
1330     WHEN OTHERS THEN
1331       if p_commit = FND_API.G_TRUE THEN
1332         rollback to CREATE_STRUC_VER_ATTR_PVT;
1333       end if;
1334       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1335       fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_STRUCTURE_PVT1',
1336                               p_procedure_name => 'CREATE_STRUCTURE_VERSION_ATTR',
1337                               p_error_text => SUBSTRB(SQLERRM,1,240));
1338       RAISE;
1339   END CREATE_STRUCTURE_VERSION_ATTR;
1340 
1341 
1342 -- API name                      : Update_Structure
1343 -- Type                          : Private Procedure
1344 -- Pre-reqs                      : None
1345 -- Return Value                  : N/A
1346 -- Parameters
1347 --   p_api_version                       IN  NUMBER      := 1.0
1348 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1349 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1350 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1351 --   p_validation_level                  IN  VARCHAR2    := 100
1352 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1353 --   p_debug_mode                        IN  VARCHAR2    := 'N'
1354 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1355 --   p_structure_id  IN  NUMBER
1356 --   p_structure_number  IN  VARCHAR2 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1357 --   p_structure_name    IN  VARCHAR2
1358 --   p_description   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1359 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1360 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1361 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1362 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1363 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1364 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1365 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1366 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1367 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1368 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1369 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1370 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1371 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1372 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1373 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1374 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1375 --   p_record_version_number  IN  NUMBER
1376 --   x_return_status     OUT     VARCHAR2
1377 --   x_msg_count     OUT     NUMBER
1378 --   x_msg_data  OUT     VARCHAR2
1379 --
1380 --  History
1381 --
1382 --  25-JUN-01   HSIU             -Created
1383 --
1384 --
1385 
1386 
1387   procedure Update_Structure
1388   (
1389    p_api_version                       IN  NUMBER      := 1.0
1390    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1391    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1392    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1393    ,p_validation_level                  IN  VARCHAR2    := 100
1394    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1395    ,p_debug_mode                        IN  VARCHAR2    := 'N'
1396    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1397    ,p_structure_id                      IN  NUMBER
1398    ,p_structure_number                  IN  VARCHAR2 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1399    ,p_structure_name                    IN  VARCHAR2
1400    ,p_description                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1401    ,p_attribute_category                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1402    ,p_attribute1                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1403    ,p_attribute2                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1404    ,p_attribute3                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1405    ,p_attribute4                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1406    ,p_attribute5                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1407    ,p_attribute6                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1408    ,p_attribute7                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1409    ,p_attribute8                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1410    ,p_attribute9                        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1411    ,p_attribute10                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1412    ,p_attribute11                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1413    ,p_attribute12                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1414    ,p_attribute13                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1415    ,p_attribute14                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1416    ,p_attribute15                       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1417    ,p_record_version_number             IN  NUMBER
1418    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1419    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
1420    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1421   )
1422   IS
1423 
1424     l_rowid              VARCHAR2(255);
1425     l_project_id         PA_PROJECTS_ALL.PROJECT_ID%TYPE;
1426     l_proj_element_id    PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1427     l_msg_count          NUMBER;
1428     l_msg_data           VARCHAR2(250);
1429 
1430 
1431     l_element_number     PA_PROJ_ELEMENTS.element_number%TYPE;
1432     l_name               PA_PROJ_ELEMENTS.name%TYPE;
1433     l_description        PA_PROJ_ELEMENTS.description%TYPE;
1434     l_attribute_category VARCHAR2(30);
1435     l_attribute1         VARCHAR2(150);
1436     l_attribute2         VARCHAR2(150);
1437     l_attribute3         VARCHAR2(150);
1438     l_attribute4         VARCHAR2(150);
1439     l_attribute5         VARCHAR2(150);
1440     l_attribute6         VARCHAR2(150);
1441     l_attribute7         VARCHAR2(150);
1442     l_attribute8         VARCHAR2(150);
1443     l_attribute9         VARCHAR2(150);
1444     l_attribute10        VARCHAR2(150);
1445     l_attribute11        VARCHAR2(150);
1446     l_attribute12        VARCHAR2(150);
1447     l_attribute13        VARCHAR2(150);
1448     l_attribute14        VARCHAR2(150);
1449     l_attribute15        VARCHAR2(150);
1450 
1451 
1452     CURSOR get_struc IS
1453       select rowid,
1454              project_id,
1455              element_number,
1456              name,
1457              description,
1458              attribute_category,
1459              attribute1,
1460              attribute2,
1461              attribute3,
1462              attribute4,
1463              attribute5,
1464              attribute6,
1465              attribute7,
1466              attribute8,
1467              attribute9,
1468              attribute10,
1469              attribute11,
1470              attribute12,
1471              attribute13,
1472              attribute14,
1473              attribute15
1474         from pa_proj_elements
1475        where proj_element_id = p_structure_id;
1476   BEGIN
1477     IF (p_debug_mode = 'Y') THEN
1478       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE begin');
1479     END IF;
1480 
1481     IF (p_commit = FND_API.G_TRUE) then
1482       savepoint update_structure_pvt;
1483     END IF;
1484 
1485     --Get existing values.
1486     OPEN get_struc;
1487     FETCH get_struc into l_rowid,
1488                          l_project_id,
1489                          l_element_number,
1490                          l_name,
1491                          l_description,
1492                          l_attribute_category,
1493                          l_attribute1,
1494                          l_attribute2,
1495                          l_attribute3,
1496                          l_attribute4,
1497                          l_attribute5,
1498                          l_attribute6,
1499                          l_attribute7,
1500                          l_attribute8,
1501                          l_attribute9,
1502                          l_attribute10,
1503                          l_attribute11,
1504                          l_attribute12,
1505                          l_attribute13,
1506                          l_attribute14,
1507                          l_attribute15;
1508     IF (get_struc%NOTFOUND) THEN
1509       PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_NOT_EXIST');
1510       x_msg_data := 'PA_PS_STRUC_NOT_EXIST';
1511       RAISE FND_API.G_EXC_ERROR;
1512     END IF;
1513     CLOSE get_struc;
1514 
1515 
1516     --Check if there is any error.
1517     l_msg_count := FND_MSG_PUB.count_msg;
1518     IF l_msg_count > 0 THEN
1519       x_msg_count := l_msg_count;
1520       IF x_msg_count = 1 THEN
1521         x_msg_data := l_msg_data;
1522       END IF;
1523       RAISE FND_API.G_EXC_ERROR;
1524     END IF;
1525 
1526     IF (p_debug_mode = 'Y') THEN
1527       pa_debug.debug('l_name = '||l_name);
1528       pa_debug.debug('p_structure_name = '||p_structure_name);
1529     END IF;
1530 
1531     --Check if structure name is unique, if changed.
1532     IF (l_name <> p_structure_name) then
1533       IF (p_debug_mode = 'Y') THEN
1534         pa_debug.debug('different!!');
1535       END IF;
1536       IF ('Y' <> pa_project_structure_utils.Check_Structure_Name_Unique(p_structure_name,
1537                                                p_structure_id,
1538                                                l_project_id)) THEN
1539         --name not unique.
1540         PA_UTILS.ADD_MESSAGE('PA', 'PS_STRUC_NAME_UNIQUE');
1541         x_msg_data := 'PA_PS_STRUC_NAME_UNIQUE';
1542         RAISE FND_API.G_EXC_ERROR;
1543       ELSE
1544         l_name := p_structure_name;
1545       END IF;
1546     END IF;
1547 
1548     --Replace values, if entered.
1549     IF (p_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_description IS NULL) THEN
1550       l_description := p_description;
1551     END IF;
1552     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL) THEN
1553       l_attribute_category := p_attribute_category;
1554     END IF;
1555     IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN
1556       l_attribute1 := p_attribute1;
1557     END IF;
1558     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN
1559       l_attribute2 := p_attribute2;
1560     END IF;
1561     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN
1562       l_attribute3 := p_attribute3;
1563     END IF;
1564     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN
1565       l_attribute4 := p_attribute4;
1566     END IF;
1567     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN
1568       l_attribute5 := p_attribute5;
1569     END IF;
1570     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN
1571       l_attribute6 := p_attribute6;
1572     END IF;
1573     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN
1574       l_attribute7 := p_attribute7;
1575     END IF;
1576     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN
1577       l_attribute8 := p_attribute8;
1578     END IF;
1579     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN
1580       l_attribute9 := p_attribute9;
1581     END IF;
1582     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN
1583       l_attribute10 := p_attribute10;
1584     END IF;
1585     IF (p_attribute11 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute11 IS NULL) THEN
1586       l_attribute11 := p_attribute11;
1587     END IF;
1588     IF (p_attribute12 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute12 IS NULL) THEN
1589       l_attribute12 := p_attribute12;
1590     END IF;
1591     IF (p_attribute13 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute13 IS NULL) THEN
1592       l_attribute13 := p_attribute13;
1593     END IF;
1594     IF (p_attribute14 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute14 IS NULL) THEN
1595       l_attribute14 := p_attribute14;
1596     END IF;
1597     IF (p_attribute15 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute15 IS NULL) THEN
1598       l_attribute15 := p_attribute15;
1599     END IF;
1600 
1601     --Check if there is any error.
1602     l_msg_count := FND_MSG_PUB.count_msg;
1603     IF l_msg_count > 0 THEN
1604       x_msg_count := l_msg_count;
1605       IF x_msg_count = 1 THEN
1606         x_msg_data := l_msg_data;
1607       END IF;
1608       RAISE FND_API.G_EXC_ERROR;
1609     END IF;
1610 
1611     PA_PROJ_ELEMENTS_PKG.UPDATE_ROW(
1612        X_ROW_ID                  => l_rowid
1613       ,X_PROJ_ELEMENT_ID         => p_structure_id
1614       ,X_PROJECT_ID              => l_project_id
1615       ,X_OBJECT_TYPE             => 'PA_STRUCTURES'
1616       ,X_ELEMENT_NUMBER          => to_char(p_structure_id)
1617       ,X_NAME                    => l_name
1618       ,X_DESCRIPTION             => l_description
1619       ,X_STATUS_CODE             => NULL
1620       ,X_WF_STATUS_CODE          => NULL
1621       ,X_PM_PRODUCT_CODE         => NULL
1622       ,X_PM_TASK_REFERENCE       => NULL
1623       ,X_CLOSED_DATE             => NULL
1624       ,X_LOCATION_ID             => NULL
1625       ,X_MANAGER_PERSON_ID       => NULL
1626       ,X_CARRYING_OUT_ORGANIZATION_ID => NULL
1627       ,X_TYPE_ID                 => NULL
1628       ,X_PRIORITY_CODE           => NULL
1629       ,X_INC_PROJ_PROGRESS_FLAG  => NULL
1630       ,X_RECORD_VERSION_NUMBER   => p_record_version_number
1631       ,X_REQUEST_ID              => NULL
1632       ,X_PROGRAM_APPLICATION_ID  => NULL
1633       ,X_PROGRAM_ID              => NULL
1634       ,X_PROGRAM_UPDATE_DATE     => NULL
1635       ,X_ATTRIBUTE_CATEGORY      => l_attribute_category
1636       ,X_ATTRIBUTE1              => l_attribute1
1637       ,X_ATTRIBUTE2              => l_attribute2
1638       ,X_ATTRIBUTE3              => l_attribute3
1639       ,X_ATTRIBUTE4              => l_attribute4
1640       ,X_ATTRIBUTE5              => l_attribute5
1641       ,X_ATTRIBUTE6              => l_attribute6
1642       ,X_ATTRIBUTE7              => l_attribute7
1643       ,X_ATTRIBUTE8              => l_attribute8
1644       ,X_ATTRIBUTE9              => l_attribute9
1645       ,X_ATTRIBUTE10             => l_attribute10
1646       ,X_ATTRIBUTE11             => l_attribute11
1647       ,X_ATTRIBUTE12             => l_attribute12
1648       ,X_ATTRIBUTE13             => l_attribute13
1649       ,X_ATTRIBUTE14             => l_attribute14
1650       ,X_ATTRIBUTE15             => l_attribute15
1651       ,X_TASK_WEIGHTING_DERIV_CODE => NULL
1652       ,X_WORK_ITEM_CODE            => NULL
1653       ,X_UOM_CODE                  => NULL
1654       ,X_WQ_ACTUAL_ENTRY_CODE      => NULL
1655       ,X_TASK_PROGRESS_ENTRY_PAGE_ID => NULL
1656       ,X_PARENT_STRUCTURE_ID         => NULL
1657       ,X_PHASE_CODE                  => NULL
1658       ,X_PHASE_VERSION_ID            => NULL
1659     );
1660 
1661     x_return_status := FND_API.G_RET_STS_SUCCESS;
1662 
1663     IF (p_debug_mode = 'Y') THEN
1664       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE end');
1665     END IF;
1666 
1667   EXCEPTION
1668     when FND_API.G_EXC_ERROR then
1669       if p_commit = FND_API.G_TRUE then
1670          rollback to update_structure_pvt;
1671       end if;
1672       x_return_status := FND_API.G_RET_STS_ERROR;
1673     when others then
1674       if p_commit = FND_API.G_TRUE then
1675          rollback to update_structure_pvt;
1676       end if;
1677       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1678       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
1679                               p_procedure_name => 'UPDATE_STRUCTURE',
1680                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1681       RAISE;
1682   END update_structure;
1683 
1684 
1685 
1686 -- API name                      : Update_Structure_Version_Attr
1687 -- Type                          : Private Procedure
1688 -- Pre-reqs                      : None
1689 -- Return Value                  : N/A
1690 -- Parameters
1691 --   p_api_version                       IN  NUMBER      := 1.0
1692 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1693 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1694 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1695 --   p_validation_level                  IN  VARCHAR2    := 100
1696 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1697 --   p_debug_mode                        IN  VARCHAR2    := 'N'
1698 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1699 --   p_pev_structure_id       IN    NUMBER
1700 --   p_structure_version_name   IN  VARCHAR2
1701 --   p_structure_version_desc   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1702 --   p_effective_date   IN  DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1703 --   p_latest_eff_published_flag    IN  VARCHAR2 := 'N'
1704 --   p_locked_status_code   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1705 --   p_struct_version_status_code   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1706 --   p_baseline_current_flag    IN  VARCHAR2 := 'N'
1707 --   p_baseline_original_flag   IN  VARCHAR2 := 'N'
1708 --   p_record_version_number  IN    NUMBER
1709 --   x_return_status     OUT     VARCHAR2
1710 --   x_msg_count     OUT     NUMBER
1711 --   x_msg_data  OUT     VARCHAR2
1712 --
1713 --  History
1714 --
1715 --  25-JUN-01   HSIU             -Created
1716 --  21-JUN-02   HSIU             Added change_reason_code
1717 --
1718 
1719 
1720   procedure Update_Structure_Version_Attr
1721   (
1722    p_api_version                       IN  NUMBER      := 1.0
1723    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1724    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1725    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1726    ,p_validation_level                  IN  VARCHAR2    := 100
1727    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1728    ,p_debug_mode                        IN  VARCHAR2    := 'N'
1729    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1730    ,p_pev_structure_id        IN    NUMBER
1731    ,p_structure_version_name    IN  VARCHAR2
1732    ,p_structure_version_desc    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1733    ,p_effective_date    IN  DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1734    ,p_latest_eff_published_flag IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1735    ,p_locked_status_code    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1736    ,p_struct_version_status_code    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1737    ,p_baseline_current_flag IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1738    ,p_baseline_original_flag    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1739    ,p_change_reason_code        IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1740    ,p_record_version_number  IN    NUMBER
1741     --FP M changes bug 3301192
1742    ,p_current_working_ver_flag          IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1743     --end FP M changes bug 3301192
1744    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1745    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
1746    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1747   )
1748   IS
1749 
1750     l_rowid                        VARCHAR2(255);
1751     l_structure_version_id         PA_PROJ_ELEM_VER_STRUCTURE.ELEMENT_VERSION_ID%TYPE;
1752     l_project_id                   PA_PROJ_ELEM_VER_STRUCTURE.PROJECT_ID%TYPE;
1753     l_proj_element_id              PA_PROJ_ELEM_VER_STRUCTURE.PROJ_ELEMENT_ID%TYPE;
1754     l_version_number               PA_PROJ_ELEM_VER_STRUCTURE.VERSION_NUMBER%TYPE;
1755     l_name                         PA_PROJ_ELEM_VER_STRUCTURE.NAME%TYPE;
1756     l_description                  PA_PROJ_ELEM_VER_STRUCTURE.DESCRIPTION%TYPE;
1757     l_effective_date               PA_PROJ_ELEM_VER_STRUCTURE.effective_date%TYPE;
1758     l_published_date               PA_PROJ_ELEM_VER_STRUCTURE.published_date%TYPE;
1759     l_published_by_person_id       PA_PROJ_ELEM_VER_STRUCTURE.published_by_person_id%TYPE;
1760     l_current_baseline_date        PA_PROJ_ELEM_VER_STRUCTURE.current_baseline_date%TYPE;
1761     l_current_flag                 PA_PROJ_ELEM_VER_STRUCTURE.current_flag%TYPE;
1762     l_current_baseline_person_id   PA_PROJ_ELEM_VER_STRUCTURE.current_baseline_person_id%TYPE;
1763     l_original_baseline_date       PA_PROJ_ELEM_VER_STRUCTURE.original_baseline_date%TYPE;
1764     l_original_flag                PA_PROJ_ELEM_VER_STRUCTURE.original_flag%TYPE;
1765     l_original_baseline_person_id  PA_PROJ_ELEM_VER_STRUCTURE.original_baseline_person_id%TYPE;
1766     l_lock_status_code             PA_PROJ_ELEM_VER_STRUCTURE.lock_status_code%TYPE;
1767     l_locked_by_person_id          PA_PROJ_ELEM_VER_STRUCTURE.locked_by_person_id%TYPE;
1768     l_locked_date                  PA_PROJ_ELEM_VER_STRUCTURE.locked_date%TYPE;
1769     l_status_code                  PA_PROJ_ELEM_VER_STRUCTURE.status_code%TYPE;
1770     l_wf_status_code               PA_PROJ_ELEM_VER_STRUCTURE.wf_status_code%TYPE;
1771     l_latest_eff_published_flag    PA_PROJ_ELEM_VER_STRUCTURE.latest_eff_published_flag%TYPE;
1772     l_pm_source_code               PA_PROJ_ELEM_VER_STRUCTURE.pm_source_code%TYPE;
1773     l_pm_source_reference          PA_PROJ_ELEM_VER_STRUCTURE.pm_source_reference%TYPE;
1774     l_change_reason_code           VARCHAR2(30);
1775 
1776 
1777     l_return_status                VARCHAR2(1);
1778     l_msg_count                    NUMBER;
1779     l_msg_count_int                NUMBER; /*bug# 6414944*/
1780     l_msg_data                     VARCHAR2(250);
1781     l_get_lock                     VARCHAR2(1);
1782     l_person_id                    NUMBER;
1783 
1784     cursor get_person_id(p_user_id NUMBER) IS
1785     select p.person_id
1786       from per_all_people_f p, fnd_user f
1787      where f.employee_id = p.person_id
1788        and sysdate between p.effective_start_date and p.effective_end_date
1789        and f.user_id = p_user_id;
1790 
1791 
1792     cursor getids is select rowid,
1793                             element_version_id,
1794                             version_number,
1795                             name,
1796                             project_id,
1797                             proj_element_id,
1798                             description,
1799                             effective_date,
1800                             published_date,
1801                             published_by_person_id,
1802                             CURRENT_BASELINE_DATE,
1803                             CURRENT_FLAG,
1804                             CURRENT_BASELINE_PERSON_ID,
1805                             ORIGINAL_BASELINE_DATE,
1806                             ORIGINAL_FLAG,
1807                             ORIGINAL_BASELINE_PERSON_ID,
1808                             LOCK_STATUS_CODE,
1809                             LOCKED_BY_PERSON_ID,
1810                             LOCKED_DATE,
1811                             STATUS_CODE,
1812                             WF_STATUS_CODE,
1813                             LATEST_EFF_PUBLISHED_FLAG,
1814                             PM_SOURCE_CODE,
1815                             PM_SOURCE_REFERENCE,
1816                             CHANGE_REASON_CODE,
1817                             CURRENT_WORKING_FLAG
1818                        from pa_proj_elem_ver_structure
1819                      where pev_structure_id = p_pev_structure_id;
1820 
1821   l_current_working_ver_flag  VARCHAR2(1);    --FPM bug 3301192
1822 
1823     -- Begin Fix For Bug # 4297556.
1824 
1825         cursor cur_relationship_ids(c_structure_version_id NUMBER, c_project_id NUMBER)
1826     is select por.object_relationship_id, por.record_version_number
1827     , por2.object_id_from1, por.object_id_from2, por.comments, ppa.name -- Bug # 4556844.
1828     from pa_object_relationships por, pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
1829     , pa_projects_all ppa, pa_object_relationships por2 -- Bug # 4556844.
1830     where ppevs.element_version_id = ppev.parent_structure_version_id
1831     and ppevs.project_id = ppev.project_id
1832     and ppev.element_version_id = por.object_id_to1
1833     and ppev.project_id = por.object_id_to2
1834     and ppa.project_id = ppev.project_id -- Bug # 4556844.
1835     and por.relationship_type = 'LW'
1836     and ppevs.element_version_id <> c_structure_version_id
1837     and ppevs.project_id = c_project_id
1838     and ppevs.status_code = 'STRUCTURE_WORKING'
1839     and por2.object_id_to1 = por.object_id_from1 -- Bug # 4556844.
1840     and por2.object_type_from in ('PA_STRUCTURES','PA_TASKS') --Bug 6429275
1841     and por2.object_type_to = 'PA_TASKS' -- Bug 6429275
1842     and por2.relationship_type = 'S'; -- Bug # 4556844.
1843 
1844 
1845     cur_rel_ids_rec cur_relationship_ids%rowtype;
1846 
1847     -- End Fix For Bug # 4297556.
1848 
1849   BEGIN
1850     l_msg_count_int := FND_MSG_PUB.count_msg; /*Bug#6414944*/
1851     IF (p_debug_mode = 'Y') THEN
1852       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE_VERSION_ATTR begin');
1853     END IF;
1854 
1855     IF (p_commit = FND_API.G_TRUE) THEN
1856       savepoint UPDATE_STRUC_VER_ATTR_PVT;
1857     END IF;
1858 
1859     IF (p_debug_mode = 'Y') THEN
1860       pa_debug.debug('Performing validations');
1861     END IF;
1862 
1863     OPEN getids;
1864     FETCH getids into l_rowid,
1865                       l_structure_version_id,
1866                       l_version_number,
1867                       l_name,
1868                       l_project_id,
1869                       l_proj_element_id,
1870                       l_description,
1871                       l_effective_date,
1872                       l_published_date,
1873                       l_published_by_person_id,
1874                       l_current_baseline_date,
1875                       l_current_flag,
1876                       l_current_baseline_person_id,
1877                       l_original_baseline_date,
1878                       l_original_flag,
1879                       l_original_baseline_person_id,
1880                       l_lock_status_code,
1881                       l_locked_by_person_id,
1882                       l_locked_date,
1883                       l_status_code,
1884                       l_wf_status_code,
1885                       l_latest_eff_published_flag,
1886                       l_pm_source_code,
1887                       l_pm_source_reference,
1888                       l_change_reason_code,
1889                       l_current_working_ver_flag;
1890 
1891     IF (getids%NOTFOUND) THEN
1892       CLOSE getids;
1893       Raise NO_DATA_FOUND;
1894     END IF;
1895     CLOSE getids;
1896 
1897     --get person id
1898     open get_person_id(FND_GLOBAL.USER_ID);
1899     fetch get_person_id into l_person_id;
1900     IF get_person_id%NOTFOUND then
1901       l_person_id := -1;
1902     END IF;
1903     close get_person_id;
1904 
1905    IF p_calling_module <> 'PA_UPD_WBS_ATTR' AND p_calling_module <> 'PA_UPD_WBS_ATTR_UN'/*bug# 4582750 ,Bug#6414944*/
1906    THEN
1907     --bug 3940853
1908         DECLARE
1909           l_rowid  VARCHAR2(255);
1910         BEGIN
1911         select rowid into l_rowid
1912           from pa_proj_elem_ver_structure
1913          where pev_structure_id = p_pev_structure_id
1914            and record_version_number = p_record_version_number
1915            for update NOWAIT;
1916         EXCEPTION
1917           when TIMEOUT_ON_RESOURCE then
1918             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1919                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1920             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1921          when NO_DATA_FOUND then
1922             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1923                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
1924             l_msg_data := 'PA_XC_RECORD_CHANGED';
1925          when OTHERS then
1926             if SQLCODE = -54 then
1927               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1928                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1929               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1930             else
1931               raise;
1932             end if;
1933         END;
1934 
1935         x_msg_count := FND_MSG_PUB.count_msg;
1936         if x_msg_count > 0 then
1937           x_msg_data := l_msg_data;
1938           raise FND_API.G_EXC_ERROR;
1939         end if;
1940     --end bug 3940853
1941    END IF;  --p_calling_module <> 'PA_UPD_WBS_ATTR'
1942 
1943     --Check if published
1944 --hsiu
1945 --changed for versioning
1946 --    IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published(l_project_id,
1947 --                                                         l_structure_version_id)) THEN
1948     IF ('N' = PA_PROJECT_STRUCTURE_UTILS.check_edit_wp_ok(l_project_id,
1949                                                           l_structure_version_id)) THEN
1950       --If published
1951       IF (p_debug_mode = 'Y') THEN
1952         pa_debug.debug('Published');
1953       END IF;
1954 
1955       --if set current baseline flag
1956       IF (p_baseline_current_flag = 'Y') THEN
1957         l_current_flag := 'Y';
1958         l_current_baseline_date := sysdate;
1959         l_current_baseline_person_id := l_person_id;
1960 
1961         --clear other flags
1962         update pa_proj_elem_ver_structure
1963         set current_flag = 'N',
1964             current_baseline_date = NULL,
1965             current_baseline_person_id = NULL,
1966             record_version_number = record_version_number + 1
1967         where project_id = l_project_id
1968           and proj_element_id = l_proj_element_id
1969           and pev_structure_id <> p_pev_structure_id
1970           and current_flag = 'Y';
1971 
1972         --Call baseline_structure_version API if workplan
1973         IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id, 'WORKPLAN') = 'Y') THEN
1974           PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
1975                        p_commit => FND_API.G_FALSE,
1976                        p_structure_version_id => l_structure_version_id,
1977                        x_return_status => l_return_status,
1978                        x_msg_count => l_msg_count,
1979                        x_msg_data => l_msg_data);
1980 
1981           If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
1982             x_msg_count := FND_MSG_PUB.count_msg;
1983             if x_msg_count = 1 then
1984               x_msg_data := l_msg_data;
1985             end if;
1986             raise FND_API.G_EXC_ERROR;
1987           end if;
1988 
1989         END IF;
1990 
1991       END IF;
1992 
1993       --if set original baseline flag
1994       IF (p_baseline_original_flag = 'Y') THEN
1995         l_original_flag := 'Y';
1996         l_original_baseline_date := sysdate;
1997         l_original_baseline_person_id := l_person_id;
1998 
1999         --clear other flags.
2000         update pa_proj_elem_ver_structure
2001         set original_flag = 'N',
2002             original_baseline_date = NULL,
2003             original_baseline_person_id = NULL,
2004             record_version_number = record_version_number + 1
2005         where project_id = l_project_id
2006           and proj_element_id = l_proj_element_id
2007           and pev_structure_id <> p_pev_structure_id
2008           and original_flag = 'Y';
2009 
2010       END IF;
2011     END IF;
2012 --hsiu
2013 --changed for versioning
2014 --    ELSE
2015     IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_edit_wp_ok(l_project_id,
2016                                                           l_structure_version_id)) THEN
2017       --If not published
2018       IF (p_debug_mode = 'Y') THEN
2019         pa_debug.debug('Not Published');
2020       END IF;
2021 
2022       --Check lock
2023       l_get_lock := PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,
2024                                                              l_structure_version_id);
2025 
2026       IF (p_debug_mode = 'Y') THEN
2027         pa_debug.debug('l_get_lock value = '||l_get_lock);
2028       END IF;
2029 
2030       --bug 3071008
2031       IF (l_get_lock <> 'Y') THEN
2032         IF (PA_SECURITY_PVT.check_user_privilege('PA_UNLOCK_ANY_STRUCTURE'
2033                                              ,NULL
2034                                              ,to_number(NULL))
2035            = FND_API.G_TRUE) THEN
2036           l_get_lock := 'Y';
2037         END IF;
2038       END IF;
2039       --end bug 3071008
2040 
2041       IF (l_get_lock = 'O') THEN
2042         --lock by other user. Error.
2043         PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_STRUC_VER_LOCKED');
2044         x_msg_data := 'PA_PS_STRUC_VER_LOCKED';
2045         RAISE FND_API.G_EXC_ERROR;
2046       END IF;
2047 
2048       IF (p_locked_status_code = 'LOCKED') THEN
2049         l_lock_status_code := 'LOCKED';
2050         l_locked_by_person_id := l_person_id;
2051         l_locked_date := sysdate;
2052       ELSIF (p_locked_status_code = 'UNLOCKED') THEN
2053         l_lock_status_code := 'UNLOCKED';
2054         l_locked_by_person_id := null;
2055         l_locked_date := null;
2056       END IF;
2057 
2058       --Check if structure version name is unique if modified
2059       IF (p_structure_version_name <> l_name) THEN
2060         IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(p_structure_version_name,
2061                                                p_pev_structure_id,
2062                                                l_project_id,
2063                                                l_proj_element_id)) THEN
2064           PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
2065           x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
2066           RAISE FND_API.G_EXC_ERROR;
2067         ELSE
2068           l_name := p_structure_version_name;
2069         END IF;
2070       END IF;
2071 
2072     END IF;
2073 
2074     -- Bug 10101426: Added following code to handle call from financial breakdown structure update page.
2075     IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id, 'FINANCIAL') = 'Y'
2076        AND PA_PROJECT_STRUCTURE_UTILS.check_edit_fin_ok(l_project_id,l_structure_version_id) = 'Y') THEN
2077       --Check if structure version name is unique if modified
2078       IF (p_structure_version_name <> l_name) THEN
2079         IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(p_structure_version_name,
2080                                                p_pev_structure_id,
2081                                                l_project_id,
2082                                                l_proj_element_id)) THEN
2083           PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
2084           x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
2085           RAISE FND_API.G_EXC_ERROR;
2086         ELSE
2087           l_name := p_structure_version_name;
2088         END IF;
2089       END IF;
2090     END IF;
2091     -- Bug 10101426: End
2092 
2093     --other attributes
2094     If (p_struct_version_status_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR   OR
2095         p_struct_version_status_code IS NULL) THEN
2096       l_status_code := p_struct_version_status_code;
2097     END IF;
2098     IF (p_structure_version_desc <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2099         p_structure_version_desc IS NULL) THEN
2100       l_description := p_structure_version_desc;
2101     END IF;
2102 
2103     IF (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2104         p_change_reason_code IS NULL) THEN
2105       l_change_reason_code := p_change_reason_code;
2106     END IF;
2107 
2108     --FPM bug 3301192
2109     IF (p_current_working_ver_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
2110         p_current_working_ver_flag IS NULL) THEN
2111       NULL;
2112     ELSE
2113       l_current_working_ver_flag := p_current_working_ver_flag;
2114     END IF;
2115     --end FPM bug 3301192
2116 
2117     --Check if there is any error.
2118     l_msg_count := FND_MSG_PUB.count_msg;
2119 --    IF p_calling_module = 'PA_UPD_WBS_ATTR_UN' THEN   Commented for Bug 6372780
2120       IF l_msg_count > l_msg_count_int THEN
2121         x_msg_count := l_msg_count;
2122         IF x_msg_count = 1 THEN
2123           x_msg_data := l_msg_data;
2124         END IF;
2125         RAISE FND_API.G_EXC_ERROR;
2126       END IF;/*Bug# 6414944*/
2127 /* Commented for Bug 6372780
2128     ELSIF l_msg_count > 0 THEN
2129       x_msg_count := l_msg_count;
2130       IF x_msg_count = 1 THEN
2131         x_msg_data := l_msg_data;
2132       END IF;
2133       RAISE FND_API.G_EXC_ERROR;
2134     END IF;
2135 */
2136 
2137     PA_PROJ_ELEM_VER_STRUCTURE_PKG.update_row(
2138      X_ROWID                      => l_rowid
2139    , X_PEV_STRUCTURE_ID           => p_pev_structure_id
2140    , X_ELEMENT_VERSION_ID         => l_structure_version_id
2141    , X_VERSION_NUMBER             => l_version_number
2142    , X_NAME                       => l_name
2143    , X_PROJECT_ID                 => l_project_id
2144    , X_PROJ_ELEMENT_ID            => l_proj_element_id
2145    , X_DESCRIPTION                => l_description
2146    , X_EFFECTIVE_DATE             => l_effective_date
2147    , X_PUBLISHED_DATE             => l_published_date
2148    , X_PUBLISHED_BY               => l_published_by_person_id
2149    , X_CURRENT_BASELINE_DATE      => l_current_baseline_date
2150    , X_CURRENT_BASELINE_FLAG      => l_current_flag
2151    , X_CURRENT_BASELINE_BY        => l_current_baseline_person_id
2152    , X_ORIGINAL_BASELINE_DATE     => l_original_baseline_date
2153    , X_ORIGINAL_BASELINE_FLAG     => l_original_flag
2154    , X_ORIGINAL_BASELINE_BY       => l_original_baseline_person_id
2155    , X_LOCK_STATUS_CODE           => l_lock_status_code
2156    , X_LOCKED_BY                  => l_locked_by_person_id
2157    , X_LOCKED_DATE                => l_locked_date
2158    , X_STATUS_CODE                => l_status_code
2159    , X_WF_STATUS_CODE             => l_wf_status_code
2160    , X_LATEST_EFF_PUBLISHED_FLAG  => l_latest_eff_published_flag
2161    , X_CHANGE_REASON_CODE         => l_change_reason_code
2162    , X_RECORD_VERSION_NUMBER      => p_record_version_number
2163    , X_CURRENT_WORKING_FLAG       => l_current_working_ver_flag    --FPM bug 3301192
2164     );
2165 
2166 
2167     --FPM bug 3301192
2168     --now set the current working flag for the other working versions to 'N'
2169     IF l_current_working_ver_flag = 'Y'
2170     THEN
2171         UPDATE pa_proj_elem_ver_structure
2172            SET current_working_flag = 'N'
2173         where project_id = l_project_id
2174           and proj_element_id = l_proj_element_id
2175           and pev_structure_id <> p_pev_structure_id
2176           and current_working_flag = 'Y';
2177 
2178         -- Begin Fix For Bug # 4297556.
2179 
2180         -- For a split structure, we delete all subproject relationships where any of the other working
2181     -- workplan versions is the child entity.
2182 
2183         for l_cur_rel_ids_rec in cur_relationship_ids(l_structure_version_id, l_project_id)
2184 
2185         loop
2186 
2187                         PA_RELATIONSHIP_PVT.Delete_SubProject_Association(
2188                                  p_commit                  =>  p_commit
2189                                 ,p_validate_only           =>  p_validate_only
2190                                 ,p_debug_mode              =>  p_debug_mode
2191                                 ,p_object_relationships_id =>  l_cur_rel_ids_rec.object_relationship_id
2192                                 ,p_record_version_number   =>  l_cur_rel_ids_rec.record_version_number
2193                                 ,x_return_status           =>  x_return_status
2194                                 ,x_msg_count               =>  x_msg_count
2195                                 ,x_msg_data                =>  x_msg_data);
2196 
2197             if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2198 
2199                     raise FND_API.G_EXC_ERROR;
2200 
2201                 end if;
2202 
2203             -- Begin Bug # 4556844.
2204 
2205                         PA_RELATIONSHIP_PVT.Create_SubProject_Association(
2206                                  p_commit                  =>  p_commit
2207                                 ,p_validate_only           =>  p_validate_only
2208                                 ,p_debug_mode              =>  p_debug_mode
2209                                 ,p_src_proj_id         =>  l_cur_rel_ids_rec.object_id_from2
2210                                 ,p_task_ver_id         =>  l_cur_rel_ids_rec.object_id_from1
2211                                 ,p_dest_proj_id        =>  l_project_id
2212                                 ,p_dest_proj_name      =>  l_cur_rel_ids_rec.name
2213                                 ,p_comment             =>  l_cur_rel_ids_rec.comments
2214                                 ,x_return_status           =>  x_return_status
2215                                 ,x_msg_count               =>  x_msg_count
2216                                 ,x_msg_data                =>  x_msg_data);
2217 
2218                         if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2219 
2220                                 raise FND_API.G_EXC_ERROR;
2221 
2222                         end if;
2223 
2224             -- End Bug # 4556844.
2225 
2226         end loop;
2227 
2228         -- End Fix For Bug # 4297556.
2229 
2230     END IF;
2231     --end FPM bug 3301192
2232 
2233     x_return_status := FND_API.G_RET_STS_SUCCESS;
2234 
2235     IF (p_debug_mode = 'Y') THEN
2236       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_STRUCTURE_VERSION_ATTR end');
2237     END IF;
2238 
2239   EXCEPTION
2240     WHEN NO_DATA_FOUND THEN
2241       if p_commit = FND_API.G_TRUE THEN
2242         rollback to UPDATE_STRUC_VER_ATTR_PVT;
2243       end if;
2244       x_return_status := FND_API.G_RET_STS_ERROR;
2245     WHEN FND_API.G_EXC_ERROR THEN
2246       IF (p_commit = FND_API.G_TRUE) THEN
2247         ROLLBACK to UPDATE_STRUC_VER_ATTR_PVT;
2248       END IF;
2249       x_msg_count := FND_MSG_PUB.count_msg;
2250       x_return_status := FND_API.G_RET_STS_ERROR;
2251     WHEN OTHERS THEN
2252       IF (p_commit = FND_API.G_TRUE) THEN
2253         ROLLBACK to UPDATE_STRUC_VER_ATTR_PVT;
2254       END IF;
2255       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2256       x_msg_count := FND_MSG_PUB.count_msg;
2257       --put message
2258       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2259                               p_procedure_name => 'Update_Structure_Version_Attr',
2260                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2261       RAISE;
2262   END Update_Structure_Version_Attr;
2263 
2264 
2265 
2266 -- API name                      : Delete_Structure
2267 -- Type                           : Private Procedure
2268 -- Pre-reqs                      : None
2269 -- Return Value                  : N/A
2270 -- Parameters
2271 --   p_api_version                       IN  NUMBER      := 1.0
2272 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2273 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2274 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2275 --   p_validation_level                  IN  VARCHAR2    := 100
2276 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2277 --   p_debug_mode                        IN  VARCHAR2    := 'N'
2278 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2279 --   p_structure_id                      IN  NUMBER
2280 --   p_record_version_number             IN  NUMBER
2281 --   x_return_status     OUT     VARCHAR2
2282 --   x_msg_count     OUT     NUMBER
2283 --   x_msg_data  OUT     VARCHAR2
2284 --
2285 --  History
2286 --
2287 --  25-JUN-01   HSIU             -Created
2288 --
2289 --
2290 
2291 
2292   procedure Delete_Structure
2293   (
2294    p_api_version                       IN  NUMBER      := 1.0
2295    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2296    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2297    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2298    ,p_validation_level                  IN  VARCHAR2    := 100
2299    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2300    ,p_debug_mode                        IN  VARCHAR2    := 'N'
2301    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2302    ,p_structure_id                      IN  NUMBER
2303    ,p_record_version_number             IN  NUMBER
2304    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2305    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2306    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2307   )
2308   IS
2309     l_rowid  VARCHAR2(255);
2310 
2311     l_return_status                 VARCHAR2(1);
2312     l_msg_count                     NUMBER;
2313     l_msg_data                      VARCHAR2(250);
2314 
2315     cursor sel_struct_type IS
2316       select rowid
2317         from pa_proj_structure_types
2318        where proj_element_id = p_structure_id;
2319 
2320     -- Begin fix for Bug # 4506308.
2321 
2322     cursor l_cur_projects_all(c_structure_id NUMBER) is
2323     select ppa.project_id, ppa.record_version_number
2324     from pa_projects_all ppa, pa_proj_elements ppe
2325     where ppa.project_id = ppe.project_id
2326     and ppe.proj_element_id = c_structure_id;
2327 
2328     l_project_id     NUMBER;
2329     l_rec_ver_number NUMBER;
2330     l_is_wp_str      VARCHAR2(1);
2331 
2332     -- End fix for Bug # 4506308.
2333 
2334   BEGIN
2335     IF (p_debug_mode = 'Y') THEN
2336       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE begin');
2337     END IF;
2338 
2339     if p_commit = FND_API.G_TRUE then
2340        savepoint delete_structure_pvt;
2341     end if;
2342 
2343     -- Begin fix for Bug # 4506308.
2344 
2345     l_is_wp_str := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(p_structure_id, 'WORKPLAN');
2346 
2347     if (l_is_wp_str = 'Y') then
2348 
2349         open l_cur_projects_all(p_structure_id);
2350         fetch l_cur_projects_all into l_project_id, l_rec_ver_number;
2351         close l_cur_projects_all;
2352 
2353         PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
2354         p_validate_only          => FND_API.G_FALSE
2355         ,p_project_id             => l_project_id
2356         ,p_date_type              => 'SCHEDULED'
2357         ,p_start_date             => null
2358         ,p_finish_date            => null
2359         ,p_record_version_number  => l_rec_ver_number
2360         ,x_return_status          => x_return_status
2361         ,x_msg_count              => x_msg_count
2362         ,x_msg_data               => x_msg_data );
2363 
2364         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2365             RAISE FND_API.G_EXC_ERROR;
2366         END IF;
2367 
2368     end if;
2369 
2370     -- End fix for Bug # 4506308.
2371 
2372     --Delete detail rows (structure types)
2373     OPEN sel_struct_type;
2374     LOOP
2375       FETCH sel_struct_type into l_rowid;
2376       EXIT WHEN sel_struct_type%NOTFOUND;
2377       PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
2378     END LOOP;
2379     CLOSE sel_struct_type;
2380 
2381     --Lock record
2382     IF (p_validate_only <> FND_API.G_TRUE) THEN
2383       BEGIN
2384         --lock
2385         select rowid into l_rowid
2386           from pa_proj_elements
2387          where proj_element_id = p_structure_id
2388            and record_version_number = p_record_version_number
2389            for update of record_version_number NOWAIT;
2390       EXCEPTION
2391          when TIMEOUT_ON_RESOURCE then
2392             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2393                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2394             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2395          when NO_DATA_FOUND then
2396             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2397                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2398             l_msg_data := 'PA_XC_RECORD_CHANGED';
2399          when OTHERS then
2400             if SQLCODE = -54 then
2401               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2402                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2403               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2404             else
2405               raise;
2406             end if;
2407       END;
2408     ELSE
2409       BEGIN
2410         select rowid into l_rowid
2411           from pa_proj_elements
2412          where proj_element_id = p_structure_id
2413            and record_version_number = p_record_version_number;
2414       EXCEPTION
2415          when NO_DATA_FOUND then
2416             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2417                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2418             l_msg_data := 'PA_XC_RECORD_CHANGED';
2419          when OTHERS then
2420             raise;
2421       END;
2422     END IF;
2423 
2424     l_msg_count := FND_MSG_PUB.count_msg;
2425     if l_msg_count > 0 then
2426       x_msg_count := l_msg_count;
2427       if x_msg_count = 1 then
2428         x_msg_data := l_msg_data;
2429       end if;
2430       raise FND_API.G_EXC_ERROR;
2431     end if;
2432 
2433 
2434     PA_PROJ_ELEMENTS_PKG.DELETE_ROW(
2435       X_ROW_ID => l_rowid
2436     );
2437 
2438     x_return_status := FND_API.G_RET_STS_SUCCESS;
2439 
2440     IF (p_debug_mode = 'Y') THEN
2441       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE end');
2442     END IF;
2443 
2444   EXCEPTION
2445    when FND_API.G_EXC_ERROR then
2446       if p_commit = FND_API.G_TRUE then
2447          rollback to delete_structure_pvt;
2448       end if;
2449       x_return_status := FND_API.G_RET_STS_ERROR;
2450    when others then
2451       if p_commit = FND_API.G_TRUE then
2452          rollback to delete_structure_pvt;
2453       end if;
2454       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2455       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2456                               p_procedure_name => 'Delete_Structure',
2457                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2458       raise;
2459   END Delete_Structure;
2460 
2461 
2462 -- API name                      : Delete_Structure_Version
2463 -- Type                          : Private Procedure
2464 -- Pre-reqs                      : None
2465 -- Return Value                  : N/A
2466 -- Parameters
2467 --   p_api_version                       IN  NUMBER      := 1.0
2468 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2469 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2470 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2471 --   p_validation_level                  IN  VARCHAR2    := 100
2472 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2473 --   p_debug_mode                        IN  VARCHAR2    := 'N'
2474 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2475 --   p_structure_version_id              IN  NUMBER
2476 --   p_record_version_number             IN  NUMBER
2477 --   x_return_status     OUT     VARCHAR2
2478 --   x_msg_count     OUT     NUMBER
2479 --   x_msg_data  OUT     VARCHAR2
2480 --
2481 --  History
2482 --
2483 --  25-JUN-01   HSIU             -Created
2484 --
2485 --
2486 
2487 
2488   procedure Delete_Structure_Version
2489   (
2490    p_api_version                       IN  NUMBER      := 1.0
2491    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2492    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2493    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2494    ,p_validation_level                  IN  VARCHAR2    := 100
2495    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2496    ,p_debug_mode                        IN  VARCHAR2    := 'N'
2497    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2498    ,p_structure_version_id              IN  NUMBER
2499    ,p_record_version_number             IN  NUMBER
2500    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2501    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2502    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2503   )
2504   IS
2505     l_rowid  VARCHAR2(255);
2506 
2507     l_Project_ID    NUMBER;
2508 
2509     l_return_status                 VARCHAR2(1);
2510     l_msg_count                     NUMBER;
2511     l_msg_data                      VARCHAR2(250);
2512 
2513 -- Begin fix for Bug # 4483222.
2514 
2515 cursor l_cur_rel_id(p_str_ver_id NUMBER) is
2516 select por.object_relationship_id, por.record_version_number
2517 from pa_object_relationships por
2518 where por.object_id_to1 = p_str_ver_id
2519 and por.relationship_type in ('LW', 'LF');
2520 
2521 l_rec_rel_id l_cur_rel_id%ROWTYPE;
2522 
2523 -- End fix for Bug # 4483222.
2524 
2525   BEGIN
2526     IF (p_debug_mode = 'Y') THEN
2527       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION begin');
2528     END IF;
2529 
2530     if p_commit = FND_API.G_TRUE then
2531        savepoint delete_structure_version_pvt;
2532     end if;
2533 
2534     --Lock record
2535     IF (p_debug_mode = 'Y') THEN
2536       pa_debug.debug('locking record '||p_structure_version_id||', '||p_record_Version_number);
2537     END IF;
2538     IF (p_validate_only <> FND_API.G_TRUE) THEN
2539       BEGIN
2540         --lock
2541         select rowid into l_rowid
2542           from pa_proj_element_versions
2543          where element_version_id = p_structure_version_id
2544            and record_version_number = p_record_version_number
2545            for update of record_version_number NOWAIT;
2546       EXCEPTION
2547          when TIMEOUT_ON_RESOURCE then
2548             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2549                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2550             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2551          when NO_DATA_FOUND then
2552             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2553                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2554             l_msg_data := 'PA_XC_RECORD_CHANGED';
2555          when OTHERS then
2556             if SQLCODE = -54 then
2557               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2558                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2559               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2560             else
2561               raise;
2562             end if;
2563       END;
2564     ELSE
2565       BEGIN
2566         select rowid into l_rowid
2567           from pa_proj_element_versions
2568          where element_version_id = p_structure_version_id
2569            and record_version_number = p_record_version_number;
2570       EXCEPTION
2571          when NO_DATA_FOUND then
2572             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2573                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2574             l_msg_data := 'PA_XC_RECORD_CHANGED';
2575          when OTHERS then
2576             raise;
2577       END;
2578     END IF;
2579 
2580 
2581     l_msg_count := FND_MSG_PUB.count_msg;
2582     if l_msg_count > 0 then
2583       x_msg_count := l_msg_count;
2584       if x_msg_count = 1 then
2585         x_msg_data := l_msg_data;
2586       end if;
2587       raise FND_API.G_EXC_ERROR;
2588     end if;
2589 
2590     IF (p_debug_mode = 'Y') THEN
2591       pa_debug.debug('deleting structure versionn');
2592     END IF;
2593 
2594 
2595     -- Added by skannoji
2596     -- Added for doosan customer to delete structure version id for workplan
2597     DECLARE
2598       /* Bug #: 3305199 SMukka                                                         */
2599       /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
2600       /* l_struct_version_id_tbl     PA_PLSQL_DATATYPES.IdTabTyp;                      */
2601       l_struct_version_id_tbl     SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
2602     BEGIN
2603      IF ( PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
2604        l_struct_version_id_tbl.extend(1); /* Venky */
2605        l_struct_version_id_tbl(1) := p_structure_version_id;
2606        /*Smukka Bug No. 3474141 Date 03/01/2004                                  */
2607        /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block        */
2608        BEGIN
2609            PA_FIN_PLAN_PVT.delete_wp_budget_versions
2610                   (
2611                      p_struct_elem_version_id_tbl    => l_struct_version_id_tbl
2612                     ,x_return_status                 => x_return_status
2613                     ,x_msg_count                     => x_msg_count
2614                     ,x_Msg_data                      => x_msg_data
2615                     );
2616        EXCEPTION
2617            WHEN OTHERS THEN
2618                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2619                                         p_procedure_name => 'Delete_Structure_Version',
2620                                         p_error_text     => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_budget_versions:'||SQLERRM,1,240));
2621            RAISE FND_API.G_EXC_ERROR;
2622        END;
2623        -- Added for FP_M Changes -- Bhumesh
2624        BEGIN
2625            SELECT project_id INTO l_Project_ID
2626        FROM   pa_proj_element_versions
2627            WHERE  element_version_id = p_structure_version_id and rownum < 2;
2628 
2629            PA_PROGRESS_PUB.delete_working_wp_progress (
2630              P_Project_ID       => l_Project_ID
2631                     ,P_Structure_Version_ID     => P_Structure_Version_ID
2632                     ,x_return_status        => x_return_status
2633                     ,x_msg_count            => x_msg_count
2634                     ,x_Msg_data             => x_msg_data
2635                     );
2636        EXCEPTION
2637            WHEN OTHERS THEN
2638                 fnd_msg_pub.add_exc_msg(
2639             p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2640                     p_procedure_name => 'Delete_Structure_Version',
2641                     p_error_text     => SUBSTRB('PA_PROGRESS_PUB.delete_working_wp_progress:'||SQLERRM,1,240));
2642            RAISE FND_API.G_EXC_ERROR;
2643        END;
2644       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2645          RAISE FND_API.G_EXC_ERROR;
2646       END IF;
2647      END IF;
2648     END;
2649     -- till here by skannoji
2650 
2651 -- Begin fix for Bug # 4483222.
2652 
2653 -- delete all sub-project relationships where this structure is the child of another structure.
2654 
2655   for l_rec_rel_id in l_cur_rel_id(p_structure_version_id)
2656   loop
2657 
2658     /*
2659 
2660         pa_relationship_pub.delete_relationship
2661         (p_api_version                        => p_api_version
2662          ,p_init_msg_list                     => p_init_msg_list
2663          ,p_commit                            => p_commit
2664          ,p_validate_only                     => p_validate_only
2665          ,p_validation_level                  => p_validation_level
2666          ,p_calling_module                    => p_calling_module
2667          ,p_debug_mode                        => p_debug_mode
2668          ,p_max_msg_count                     => p_max_msg_count
2669          ,p_object_relationship_id            => l_rec_rel_id.object_relationship_id
2670          ,p_record_version_number             => l_rec_rel_id.record_version_number
2671          ,x_return_status                     => x_return_status
2672          ,x_msg_count                         => x_msg_count
2673          ,x_msg_data                          => x_msg_data);
2674 
2675     */
2676 
2677     pa_relationship_pvt.delete_subproject_association
2678         (p_commit                   =>  p_commit
2679          ,p_validate_only           =>  p_validate_only
2680          ,p_debug_mode              =>  p_debug_mode
2681          ,p_object_relationships_id =>  l_rec_rel_id.object_relationship_id
2682          ,p_record_version_number   =>  l_rec_rel_id.record_version_number
2683          ,x_return_status           =>  x_return_status
2684          ,x_msg_count               =>  x_msg_count
2685          ,x_msg_data                =>  x_msg_data);
2686 
2687          if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
2688 
2689             raise FND_API.G_EXC_ERROR;
2690 
2691          end if;
2692 
2693   end loop;
2694 
2695 -- End fix for Bug # 4483222.
2696 
2697     PA_PROJ_ELEMENT_VERSIONS_PKG.DELETE_ROW(
2698       X_ROW_ID => l_rowid
2699     );
2700 
2701    x_return_status := FND_API.G_RET_STS_SUCCESS;
2702 
2703     IF (p_debug_mode = 'Y') THEN
2704       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION end');
2705     END IF;
2706 
2707   EXCEPTION
2708    when FND_API.G_EXC_ERROR then
2709       if p_commit = FND_API.G_TRUE then
2710          rollback to delete_structure_version_pvt;
2711       end if;
2712       x_return_status := FND_API.G_RET_STS_ERROR;
2713    when others then
2714       if p_commit = FND_API.G_TRUE then
2715          rollback to delete_structure_version_pvt;
2716       end if;
2717       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2718       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2719                               p_procedure_name => 'Delete_Structure_Version',
2720                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2721       raise;
2722   END DELETE_STRUCTURE_VERSION;
2723 
2724 
2725 -- API name                      : Delete_Structure_Version_Attr
2726 -- Type                          : Private Procedure
2727 -- Pre-reqs                      : None
2728 -- Return Value                  : N/A
2729 -- Parameters
2730 --   p_api_version                       IN  NUMBER      := 1.0
2731 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2732 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2733 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2734 --   p_validation_level                  IN  VARCHAR2    := 100
2735 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2736 --   p_debug_mode                        IN  VARCHAR2    := 'N'
2737 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2738 --   p_pev_structure_id                  IN  NUMBER
2739 --   p_record_version_number             IN  NUMBER
2740 --   x_return_status     OUT     VARCHAR2
2741 --   x_msg_count     OUT     NUMBER
2742 --   x_msg_data  OUT     VARCHAR2
2743 --
2744 --  History
2745 --
2746 --  25-JUN-01   HSIU             -Created
2747 --
2748 --
2749 
2750 
2751   procedure Delete_Structure_Version_Attr
2752   (
2753    p_api_version                       IN  NUMBER      := 1.0
2754    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2755    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2756    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2757    ,p_validation_level                  IN  VARCHAR2    := 100
2758    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2759    ,p_debug_mode                        IN  VARCHAR2    := 'N'
2760    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2761    ,p_pev_structure_id                  IN  NUMBER
2762    ,p_record_version_number             IN  NUMBER
2763    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2764    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2765    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2766   )
2767   IS
2768     l_rowid                         VARCHAR2(255);
2769 
2770     l_return_status                 VARCHAR2(1);
2771     l_msg_count                     NUMBER;
2772     l_msg_data                      VARCHAR2(250);
2773 
2774     --FP M bug 3301192
2775     CURSOR cur_proj_str
2776     IS
2777       SELECT proj_element_id, project_id
2778         FROM pa_proj_elem_ver_structure
2779        WHERE pev_structure_id = p_pev_structure_id;
2780 
2781     l_structure_id               NUMBER;
2782     l_project_id                 NUMBER;
2783     l_current_working_ver_id     NUMBER;
2784 
2785     --end FPM bug 3301192
2786 
2787     -- 3804437 Added below cursor to retrieve last updated working version
2788     CURSOR cur_last_working_ver( p_structure_id NUMBER )
2789     IS
2790       select str.element_version_id
2791         from pa_proj_elem_ver_structure str,
2792               pa_proj_elements ppe
2793         where ppe.proj_element_id = p_structure_id
2794           and ppe.project_id = str.project_id
2795           and ppe.proj_element_id = str.proj_element_id
2796           and str.status_code = 'STRUCTURE_WORKING'
2797           and str.current_working_flag = 'N'
2798           order by str.last_update_date desc;
2799     -- 3804437
2800 
2801   BEGIN
2802     IF (p_debug_mode = 'Y') THEN
2803       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION_ATTR begin');
2804     END IF;
2805 
2806     if p_commit = FND_API.G_TRUE then
2807        savepoint delete_structure_ver_attr_pvt;
2808     end if;
2809 
2810     --Lock record
2811     IF (p_validate_only <> FND_API.G_TRUE) THEN
2812       BEGIN
2813         --lock
2814         select rowid into l_rowid
2815           from pa_proj_elem_ver_structure
2816          where pev_structure_id = p_pev_structure_id
2817            and record_version_number = p_record_version_number
2818            for update of record_version_number NOWAIT;
2819       EXCEPTION
2820          when TIMEOUT_ON_RESOURCE then
2821             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2822                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2823             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2824          when NO_DATA_FOUND then
2825             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2826                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2827             l_msg_data := 'PA_XC_RECORD_CHANGED';
2828          when OTHERS then
2829             if SQLCODE = -54 then
2830               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2831                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2832               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2833             else
2834               raise;
2835             end if;
2836       END;
2837     ELSE
2838       BEGIN
2839         select rowid into l_rowid
2840           from pa_proj_elem_ver_structure
2841          where pev_structure_id = p_pev_structure_id
2842            and record_version_number = p_record_version_number;
2843       EXCEPTION
2844          when NO_DATA_FOUND then
2845             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2846                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
2847             l_msg_data := 'PA_XC_RECORD_CHANGED';
2848          when OTHERS then
2849             raise;
2850       END;
2851     END IF;
2852 
2853     l_msg_count := FND_MSG_PUB.count_msg;
2854     if l_msg_count > 0 then
2855       x_msg_count := l_msg_count;
2856       if x_msg_count = 1 then
2857         x_msg_data := l_msg_data;
2858       end if;
2859       raise FND_API.G_EXC_ERROR;
2860     end if;
2861 
2862     --FPM bug 3301192
2863     OPEN cur_proj_str;
2864     FETCH cur_proj_str INTO l_structure_id, l_project_id;
2865     CLOSE cur_proj_str;
2866 
2867     -- 3804437 Commented below code to retrieve last updated working version
2868     -- because below code is retrieving the current working version only
2869 
2870     --l_current_working_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
2871 
2872     -- Added code to retrieve last updated working version
2873 
2874     OPEN cur_last_working_ver(l_structure_id);
2875     FETCH cur_last_working_ver INTO l_current_working_ver_id;
2876     CLOSE cur_last_working_ver;
2877 
2878     -- 3804437 end
2879 
2880     --update the latest updated working version as current working version.
2881       UPDATE pa_proj_elem_ver_structure
2882          SET current_working_flag = 'Y'
2883        WHERE element_version_id = l_current_working_ver_id
2884          AND project_id = l_project_id;
2885 
2886     --end FPM bug 3301192
2887 
2888     /* Added for bug 8708651 */
2889     if PJI_PA_DEL_MAIN.g_from_conc is null then
2890     PA_PROJ_ELEM_VER_STRUCTURE_PKG.delete_row(
2891       X_ROWID => l_rowid
2892     );
2893     else
2894         update PA_PROJ_ELEM_VER_STRUCTURE
2895         set PURGED_FLAG = 'Y',
2896             last_update_date = sysdate,
2897             last_updated_by = FND_GLOBAL.USER_ID,
2898             conc_request_id = FND_GLOBAL.CONC_REQUEST_ID /* Added for bug 9049425 */
2899         WHERE ROWID = l_rowid;
2900     end if;
2901     /* Added for bug 8708651 */
2902 
2903     IF (p_debug_mode = 'Y') THEN
2904       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUCTURE_VERSION_ATTR end');
2905     END IF;
2906 
2907     x_return_status := FND_API.G_RET_STS_SUCCESS;
2908 
2909   EXCEPTION
2910    when FND_API.G_EXC_ERROR then
2911       if p_commit = FND_API.G_TRUE then
2912          rollback to delete_structure_ver_attr_pvt;
2913       end if;
2914       x_return_status := FND_API.G_RET_STS_ERROR;
2915    when others then
2916       if p_commit = FND_API.G_TRUE then
2917          rollback to delete_structure_ver_attr_pvt;
2918       end if;
2919       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2920       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
2921                               p_procedure_name => 'Delete_Structure',
2922                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2923       raise;
2924   END Delete_Structure_Version_Attr;
2925 
2926 
2927 -- API name                      : Publish_Structure
2928 -- Type                          : Private Procedure
2929 -- Pre-reqs                      : None
2930 -- Return Value                  : N/A
2931 -- Parameters
2932 --   p_api_version                       IN  NUMBER      := 1.0
2933 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2934 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2935 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2936 --   p_validation_level                  IN  VARCHAR2    := 100
2937 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2938 --   p_debug_mode                        IN  VARCHAR2    := 'N'
2939 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2940 --   p_responsibility_id                 IN  NUMBER      := 0
2941 --   p_structure_version_id              IN  NUMBER
2942 --   p_publish_structure_ver_name        IN  VARCHAR2
2943 --   p_structure_ver_desc                IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2944 --   p_effective_date                    IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2945 --   p_original_baseline_flag            IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2946 --   p_current_baseline_flag             IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2947 --   x_published_struct_ver_id           OUT  NUMBER
2948 --   x_return_status                     OUT  VARCHAR2
2949 --   x_msg_count                         OUT  NUMBER
2950 --   x_msg_data                          OUT  VARCHAR2
2951 --
2952 --  History
2953 --
2954 --  25-JUN-01   HSIU             -Created
2955 --
2956 
2957 
2958 
2959   procedure Publish_Structure
2960   (
2961    p_api_version                       IN  NUMBER      := 1.0
2962    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
2963    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
2964    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
2965    ,p_validation_level                  IN  VARCHAR2    := 100
2966    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
2967    ,p_debug_mode                        IN  VARCHAR2    := 'N'
2968    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2969    ,p_responsibility_id                 IN  NUMBER      := 0
2970    ,p_user_id                           IN  NUMBER      := NULL
2971    ,p_structure_version_id              IN  NUMBER
2972    ,p_publish_structure_ver_name        IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2973    ,p_structure_ver_desc                IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2974    ,p_effective_date                    IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2975    ,p_original_baseline_flag            IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2976    ,p_current_baseline_flag             IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2977    ,p_pub_prog_flag             IN  VARCHAR2    DEFAULT 'Y'  -- FP_M changes
2978    ,x_published_struct_ver_id           OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2979    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2980    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
2981    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2982   )
2983   IS
2984     l_api_name                      CONSTANT VARCHAR(30) := 'Publish_Structure';
2985     l_api_version                   CONSTANT NUMBER      := 1.0;
2986 
2987     l_return_status                 VARCHAR2(1);
2988     l_msg_count                     NUMBER;
2989     l_msg_data                      VARCHAR2(250);
2990     l_data                          VARCHAR2(250);
2991     l_msg_index_out                 NUMBER;
2992     l_apps_name                     VARCHAR2(2000) := 'PA';
2993 
2994     l_dummy                         VARCHAR2(1);
2995     l_dummy_name                    PA_PROJ_ELEM_VER_STRUCTURE.NAME%TYPE;
2996 
2997     l_project_id                    PA_PROJ_ELEM_VER_STRUCTURE.PROJECT_ID%TYPE;
2998     l_proj_element_id               PA_PROJ_ELEM_VER_STRUCTURE.PROJ_ELEMENT_ID%TYPE;
2999     l_element_version_id            PA_PROJ_ELEM_VER_STRUCTURE.ELEMENT_VERSION_ID%TYPE;
3000     l_pev_structure_id              PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
3001 
3002 
3003     l_new_struct_ver_id             NUMBER;
3004     -- added for Bug Fix: 4537865
3005     l_tmp_struct_ver_id         NUMBER;
3006     -- added for Bug fix: 4537865
3007     l_new_pev_structure_id          PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
3008     l_new_pev_schedule_id           PA_PROJ_ELEM_VER_SCHEDULE.PEV_SCHEDULE_ID%TYPE;
3009     l_new_obj_rel_id                PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
3010 
3011     l_original_baseline_flag        VARCHAR2(1);
3012     l_current_baseline_flag         VARCHAR2(1);
3013 
3014     l_new_struct_ver_name           PA_PROJ_ELEM_VER_STRUCTURE.name%TYPE;
3015     l_new_struct_ver_desc           PA_PROJ_ELEM_VER_STRUCTURE.description%TYPE;
3016 
3017     -- anlee
3018     -- Dates changes
3019     l_scheduled_start_date          DATE;
3020     l_scheduled_finish_date         DATE;
3021     l_proj_record_ver_number        NUMBER;
3022 
3023     l_user_id                       NUMBER;
3024 
3025   ----------------------------------- FP_M changes : Begin
3026   -- Refer to tracking bug 3305199
3027   /* Bug #: 3305199 SMukka                                                         */
3028   /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3029   /*  l_Old_Task_Versions_Tab        PA_PLSQL_DATATYPES.IdTabTyp;                  */
3030   /*  l_New_Task_Versions_Tab        PA_PLSQL_DATATYPES.IdTabTyp;                  */
3031     l_Old_Task_Versions_Tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3032     l_New_Task_Versions_Tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3033   ----------------------------------- FP_M changes : End
3034 
3035     CURSOR get_scheduled_dates(c_project_id NUMBER, c_structure_version_id NUMBER)
3036     IS
3037     SELECT scheduled_start_date, scheduled_finish_date
3038     FROM pa_proj_elem_ver_schedule
3039     WHERE project_id = c_project_id
3040     AND   element_version_id = c_structure_version_id;
3041 
3042     CURSOR get_proj_rec_ver_number(c_project_id NUMBER)
3043     IS
3044     SELECT record_version_number
3045     FROM pa_projects_all
3046     WHERE project_id = c_project_id;
3047     -- End of changes
3048 
3049 
3050 --Bug 2189657
3051 --Added for linking tasks with no display sequence.
3052     Type T_EquivElemVerTable IS TABLE OF NUMBER
3053       Index by BINARY_INTEGER;
3054     t_equiv_elem_ver_id T_EquivElemVerTable;
3055 --Bug 2189657 end;
3056 
3057     cursor get_from_id(c_element_version_id NUMBER) IS
3058       select object_relationship_id, object_id_from1 object_id_from,
3059              object_type_from, record_version_number
3060         from pa_object_relationships
3061        where relationship_type = 'L'
3062          and object_id_to1 = c_element_version_id
3063          and object_type_to IN ('PA_TASKS','PA_STRUCTURES');
3064     l_from_object_info        get_from_id%ROWTYPE;
3065 
3066     cursor get_to_id(c_element_version_id NUMBER) IS
3067       select object_relationship_id, object_id_to1 object_id_to, object_id_to2,
3068              object_type_to, record_version_number
3069         from pa_object_relationships
3070        where relationship_type IN ('LW', 'LF')
3071          and object_id_from1 = c_element_version_id
3072          and object_type_from IN ('PA_TASKS','PA_STRUCTURES');
3073     l_to_object_info          get_to_id%ROWTYPE;
3074     l_working_ver_fg          VARCHAR2(1);
3075 
3076     cursor get_task_version_info(c_task_version_id NUMBER) IS
3077       select v1.project_id project_id, v2.proj_element_id structure_id,
3078              v1.parent_structure_version_id structure_version_id,
3079              v1.element_version_id task_version_id
3080         from pa_proj_element_versions v1,
3081              pa_proj_element_versions v2
3082        where v1.element_version_id = c_task_version_id
3083          and v1.parent_structure_version_id = v2.element_version_id;
3084     l_info_task_ver_rec       get_task_version_info%ROWTYPE;
3085 
3086     cursor get_structure_version_info(c_structure_version_id NUMBER) IS
3087       select v1.project_id project_id, v1.proj_element_id structure_id,
3088              v1.element_version_id structure_version_id
3089         from pa_proj_element_versions v1
3090        where v1.element_version_id = c_structure_version_id;
3091     l_info_struc_ver_rec      get_structure_version_info%ROWTYPE;
3092 
3093 
3094     cursor get_struc_ver_name IS
3095       select pevs.name, pevs.project_id, pevs.proj_element_id,
3096              pevs.element_version_id, pevs.pev_structure_id
3097         from pa_proj_elem_ver_structure pevs,
3098              pa_proj_element_versions pev
3099        where pev.element_version_id = p_structure_version_id
3100          and pevs.project_id = pev.project_id
3101          and pevs.element_version_id = pev.element_version_id;
3102 
3103     CURSOR get_structure_ver_csr(c_structure_version_id NUMBER) IS
3104       SELECT *
3105       FROM PA_PROJ_ELEMENT_VERSIONS
3106       WHERE element_version_id = c_structure_version_id;
3107     l_struc_ver_rec          get_structure_ver_csr%ROWTYPE;
3108 
3109     CURSOR get_structure_ver_attr_csr(c_structure_version_id NUMBER, c_project_id NUMBER) IS
3110       SELECT *
3111       FROM PA_PROJ_ELEM_VER_STRUCTURE
3112       WHERE ELEMENT_VERSION_ID = c_structure_version_id
3113         AND project_id = c_project_id;
3114     l_struc_ver_attr_rec     get_structure_ver_attr_csr%ROWTYPE;
3115 
3116     CURSOR get_ver_schedule_attr_csr(c_element_version_id NUMBER, c_project_id NUMBER) IS
3117       SELECT *
3118       FROM PA_PROJ_ELEM_VER_SCHEDULE
3119       WHERE element_version_id = c_element_version_id
3120         AND project_id = c_project_id;
3121     l_ver_sch_attr_rec       get_ver_schedule_attr_csr%ROWTYPE;
3122 
3123 --hsiu: task version status change. Added task version status.
3124     CURSOR get_task_versions_csr(c_structure_version_id NUMBER) IS
3125       SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
3126              a.project_id, b.object_id_from1 parent_element_version_id,
3127              a.TASK_UNPUB_VER_STATUS_CODE, a.parent_structure_version_id
3128         FROM PA_PROJ_ELEMENT_VERSIONS a,
3129              PA_OBJECT_RELATIONSHIPS b
3130        WHERE a.object_type = 'PA_TASKS'
3131          AND a.parent_structure_version_id = c_structure_version_id
3132          AND a.element_version_id = b.object_id_to1
3133          AND b.relationship_type = 'S'
3134        ORDER BY a.display_sequence;
3135 
3136     l_task_versions_rec      get_task_versions_csr%ROWTYPE;
3137 
3138     Cursor get_linking_tasks IS
3139       select a.element_version_id
3140         from pa_proj_element_versions a,
3141              pa_proj_elements b
3142        where a.proj_element_id = b.proj_element_id
3143          and a.parent_structure_version_id = p_structure_version_id
3144          and b.link_task_flag = 'Y';
3145     l_linking_task_rec       get_linking_tasks%ROWTYPE;
3146 
3147     l_ref_task_ver_id        NUMBER;
3148     l_peer_or_sub            VARCHAR2(10);
3149     l_last_wbs_level         NUMBER;
3150     l_task_version_id        NUMBER;
3151     l_pev_schedule_id        NUMBER;
3152 
3153     l_i_msg_count            NUMBER;
3154     l_i_msg_data             PA_VC_1000_2000:= PA_VC_1000_2000(1);
3155     l_i_return_status        VARCHAR2(1);
3156 
3157     TYPE reference_tasks IS TABLE OF NUMBER
3158        INDEX BY BINARY_INTEGER;
3159     l_outline_task_ref reference_tasks;
3160 
3161     l_proj_start_date        DATE;
3162     l_proj_completion_date   DATE;
3163     l_prefix                 VARCHAR2(80);
3164 
3165 --Hsiu added for date rollup
3166     l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3167 
3168 --hsiu added for advanced structure changes
3169     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
3170       select b.element_version_id, b.record_version_number
3171         from pa_proj_element_versions a,
3172              pa_proj_element_versions b,
3173              pa_proj_elem_ver_structure c
3174        where a.element_version_id = c_keep_struc_ver_id
3175          and a.project_id = b.project_id
3176          and a.proj_element_id = b.proj_element_id
3177          and b.element_version_id <> c_keep_struc_ver_id
3178          and b.object_type = 'PA_STRUCTURES'
3179          and b.project_id = c.project_id
3180          and b.element_version_id = c.element_version_id
3181          and c.status_code <> 'STRUCTURE_PUBLISHED';
3182     l_del_struc_ver_id       NUMBER;
3183     l_del_struc_ver_rvn      NUMBER;
3184 
3185   CURSOR get_task_ver_weighting(p_task_ver_id NUMBER)
3186   IS
3187   select weighting_percentage
3188     from pa_object_relationships
3189    where object_id_to1 = p_task_ver_id
3190      and object_type_to = 'PA_TASKS'
3191      and object_type_from in ('PA_STRUCTURES','PA_TASKS')
3192      and object_type_to = 'PA_TASKS' -- Bug 6429275
3193      and relationship_type = 'S';
3194   l_weighting_percentage     NUMBER;
3195 
3196 --hsiu added for task status
3197   l_error_message_code  VARCHAR2(250);
3198   l_create_task_ver_flag varchar2(1);
3199 
3200   -- Bug # 4691749.
3201   -- Replacing this varray PA_NUM_1000_NUM with t_TBDtasksTable index table.
3202   TYPE t_TBD_tasksTable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3203   --l_tbd_task_ver_id     PA_NUM_1000_NUM := PA_NUM_1000_NUM(); --replacing this varray with t_TBDtasksTable index table.
3204   l_tbd_task_ver_id       t_TBD_tasksTable;
3205   l_tbd_index             NUMBER := 0;
3206   -- Bug # 4691749.
3207 
3208   -- Added for  4096218
3209   -- This VARRAY will hold the list of to_be_deleted tasks' proj_element_ids
3210   l_tbd_task_id         PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3211 
3212   l_del_task_cnt        NUMBER;
3213 
3214   CURSOR get_tbd_tasks_info(c_task_ver_id NUMBER) IS
3215     select parent_structure_version_id, element_version_id,
3216            record_version_number
3217       from pa_proj_element_versions
3218      where element_version_id = c_task_ver_id;
3219   l_tbd_tasks_info_rec   get_tbd_tasks_info%ROWTYPE;
3220 
3221   CURSOR get_parent_id(c_task_ver_id NUMBER) IS
3222     select object_id_from1
3223       from pa_object_relationships
3224      where object_id_to1 = c_task_ver_id
3225        and object_type_to = 'PA_TASKS'
3226        and relationship_type = 'S';
3227   l_parent_id NUMBER;
3228   l_parent_ver_id NUMBER;
3229   TYPE t_parentTable IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
3230   l_parent_tbl t_parentTable;
3231 
3232 --bug 2662139
3233   CURSOR is_summary_elem(c_elem_ver_id NUMBER) IS
3234     SELECT '1'
3235       from pa_object_relationships
3236      where object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
3237        and object_id_from1 = c_elem_ver_id
3238        and relationship_type = 'S';
3239 
3240 --bug
3241     l_err_code         NUMBER:= 0;
3242     l_err_stack        VARCHAR2(630);
3243     l_err_stage        VARCHAR2(80);
3244 
3245     l_messages         PA_PROJECT_STRUCTURE_PVT1.PA_PUBLISH_ERR_TBL_TYPE;
3246     l_page_content_id  NUMBER;
3247     l_item_key         VARCHAR2(240);
3248 
3249 --added for performace improvement
3250     X_Row_id  VARCHAR2(255);
3251 
3252 --added for performance improvement
3253     l_workplan_type    VARCHAR2(1);
3254     l_financial_type   VARCHAR2(1);
3255 
3256     --maansari
3257     i NUMBER := 1;
3258 --    l_user_id    NUMBER := FND_GLOBAL.USER_ID;
3259     l_login_id   NUMBER := FND_GLOBAL.LOGIN_ID;
3260     --maansari
3261 
3262 --bug 3047602
3263   l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
3264   cursor get_all_new_childs(c_new_struc_ver_id NUMBER) IS
3265     select element_version_id
3266     from pa_proj_element_versions
3267     where parent_structure_version_id = c_new_struc_ver_id
3268     and object_type = 'PA_TASKS';
3269 --end bug 3047602
3270 
3271   l_rowid VARCHAR2(255);
3272   CURSOR cur_elem_ver_seq IS
3273     SELECT pa_proj_element_versions_s.nextval
3274       FROM sys.dual;
3275 
3276   l_last_pub_str_ver_id   NUMBER;            --Bug No. 3450684  Smukka 01/03/2004
3277   l_chk_deliverable       VARCHAR2(80);      --Summuka For checking deliverables
3278 
3279   --bug 3822112
3280   l_share_flag            VARCHAR2(1)  := 'N';
3281   l_copy_actuals_flag     VARCHAR2(1)  := 'Y';
3282   -- Bug 3839288 Begin
3283   l_task_weight_basis_code pa_proj_progress_attr.task_weight_basis_code%TYPE;
3284   l_as_of_date             DATE;
3285   -- Bug 3839288 End
3286   l_upd_new_elem_ver_id_flag VARCHAR2(1) := 'Y'; --rtarway, 3951024
3287 
3288   l_debug_mode             VARCHAR2(1);
3289 
3290   -- 9072357
3291   l_structure_id           pa_proj_elem_ver_structure.proj_element_id%TYPE;
3292 
3293   CURSOR get_structure_id(c_structure_version_id pa_proj_elem_ver_structure.element_version_id%TYPE)
3294   IS
3295     SELECT proj_element_id
3296     FROM pa_proj_elem_ver_structure
3297     WHERE element_version_id = c_structure_version_id;
3298 
3299   BEGIN
3300 
3301     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
3302 
3303     IF (p_debug_mode = 'Y') THEN
3304       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE begin');
3305     END IF;
3306 
3307     IF (p_commit = FND_API.G_TRUE) THEN
3308       savepoint publish_structure_pvt;
3309     END IF;
3310 
3311     PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
3312 
3313     ----------
3314     -- code --
3315     IF p_user_id IS NULL THEN
3316       l_user_id := FND_GLOBAL.USER_ID;
3317     ELSE
3318       l_user_id := p_user_id;
3319     END IF;
3320 
3321     l_workplan_type    := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
3322     l_financial_type   := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
3323 
3324     select project_id
3325     into l_project_id
3326     from pa_proj_element_versions
3327     where element_version_id = p_structure_version_id;
3328 
3329     --bug 3840509
3330     IF 'Y' = nvl(PA_PROJECT_STRUCTURE_UTILS.Get_Sch_Dirty_fl(l_project_id,
3331                                                              p_structure_version_id), 'N') THEN
3332       --need to reschedule
3333       PA_UTILS.ADD_MESSAGE('PA','PA_PS_NEED_THIRD_PT_SCH');
3334       x_msg_data := 'PA_PS_NEED_THIRD_PT_SCH';
3335       RAISE FND_API.G_EXC_ERROR;
3336     END IF;
3337     --end bug 3840509
3338 
3339     l_share_flag       := PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_project_id);   --bug 3822112
3340 
3341     --Set the baseline flags
3342     l_original_baseline_flag := p_original_baseline_flag;
3343     l_current_baseline_flag  := p_current_baseline_flag;
3344 
3345     /* Smukka 01/03/2004 Bug No. 3450684                                                   */
3346     /* Added the following if block for getting the lastest published structure version id */
3347     IF l_workplan_type = 'Y' THEN
3348        l_last_pub_str_ver_id:=PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(l_project_id);
3349     ELSIF l_financial_type = 'Y' THEN
3350           l_last_pub_str_ver_id:=PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_FIN_STRUC_VER_ID(l_project_id);
3351     END IF;
3352 
3353     --hsiu: changes for checking transaction currency difference
3354     --for bug 3786612
3355     PA_PROGRESS_UTILS.check_txn_currency_diff
3356     (
3357       p_structure_version_id => p_structure_version_id,
3358       p_context => 'PUBLISH_STRUCTURE',
3359       x_return_status => l_return_status
3360     );
3361 
3362     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3363       RAISE FND_API.G_EXC_ERROR;
3364     END IF;
3365     --end changes for bug 3786612
3366 
3367     --hsiu: bug 2684465
3368     --Check if this structure missing tasks with transactions
3369 --    IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
3370 --      PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
3371 --      x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
3372 --      RAISE FND_API.G_EXC_ERROR;
3373 --    END IF;
3374     PA_PROJECT_STRUCTURE_UTILS.CHECK_MISS_TRANSACTION_TASKS(p_structure_version_id,
3375                                                             l_return_status,
3376                                                             l_msg_count,
3377                                                             l_msg_data);
3378     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3379       RAISE FND_API.G_EXC_ERROR;
3380     END IF;
3381 
3382     --Check if task statuses are consistent
3383     PA_PROJECT_STRUCTURE_UTILS.check_tasks_statuses_valid(
3384       p_structure_version_id
3385      ,l_return_status
3386      ,l_msg_count
3387      ,l_msg_data
3388     );
3389     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3390       RAISE FND_API.G_EXC_ERROR;
3391     END IF;
3392 
3393     --Check if any new summary task has transactions
3394     PA_PROJECT_STRUCTURE_UTILS.Check_txn_on_summary_tasks(
3395       p_structure_version_id
3396      ,l_return_status
3397      ,l_msg_count
3398      ,l_msg_data
3399     );
3400     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3401       PA_UTILS.ADD_MESSAGE('PA',l_error_message_code);
3402       x_msg_data := l_error_message_code;
3403       RAISE FND_API.G_EXC_ERROR;
3404     END IF;
3405     --end bug 2684465
3406 
3407     -- 9072357
3408     OPEN get_structure_id(p_structure_version_id);
3409     FETCH get_structure_id INTO l_structure_id;
3410     CLOSE get_structure_id;
3411 
3412     IF ((PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_structure_id) = 'Y') AND
3413         (PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_project_id) = 'Y')) THEN
3414 
3415       PA_PROJECT_STRUCTURE_UTILS.check_exp_item_dates(
3416         p_project_id           => l_project_id,
3417         p_structure_version_id => p_structure_version_id,
3418         x_return_status        => l_return_status,
3419         x_msg_count            => l_msg_count,
3420         x_msg_data             => l_msg_data
3421       );
3422 
3423       IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3424         RAISE FND_API.G_EXC_ERROR;
3425       END IF;
3426     END IF;
3427 
3428     --Check if this structure can be published (ie, if linked structures are published)
3429 --    IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Publish_Struc_Ver_Ok(p_structure_version_id)) THEN
3430 --      PA_UTILS.ADD_MESSAGE('PA','PA_PS_LINK_STRUC_NOT_PUB');
3431 --      x_msg_data := 'PA_PS_LINK_STRUC_NOT_PUB';
3432 --      RAISE FND_API.G_EXC_ERROR;
3433 --    END IF;
3434 
3435     --Check if this structure missing tasks with transactions
3436 --    IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
3437 --      PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
3438 --      x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
3439 --      RAISE FND_API.G_EXC_ERROR;
3440 --    END IF;
3441 
3442     --For rollups
3443 --    IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
3444 --      OPEN get_linking_tasks;
3445 --      LOOP
3446 --        FETCH get_linking_tasks INTO l_linking_task_rec;
3447 --        EXIT WHEN get_linking_tasks%NOTFOUND;
3448 --        l_tasks_ver_ids.extend;
3449 --        l_tasks_ver_ids(l_tasks_ver_ids.count) := l_linking_task_rec.element_version_id;
3450 --      END LOOP;
3451 --      CLOSE get_linking_tasks;
3452 --
3453 --      IF (l_tasks_ver_ids.count > 0) THEN
3454 --        PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
3455 --                       p_commit => FND_API.G_FALSE,
3456 --                       p_element_versions => l_tasks_ver_ids,
3457 --                       x_return_status => l_return_status,
3458 --                       x_msg_count => l_msg_count,
3459 --                       x_msg_data => l_msg_data);
3460 --
3461 --        if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
3462 --          x_msg_count := FND_MSG_PUB.count_msg;
3463 --          if x_msg_count = 1 then
3464 --            x_msg_data := l_msg_data;
3465 --          end if;
3466 --          raise FND_API.G_EXC_ERROR;
3467 --        end if;
3468 --
3469 --      END IF;
3470 --    END IF;
3471 
3472     --Check if any linked structure is workplan type and if publishing structure is
3473     --  financial only
3474 
3475     --dbms_output.put_line('1');
3476     OPEN get_struc_ver_name;
3477 --dbms_output.put_line('open  get_struc_ver_name');
3478     FETCH get_struc_ver_name into l_dummy_name, l_project_id,
3479                                   l_proj_element_id, l_element_version_id,
3480                                   l_pev_structure_id;
3481     IF get_struc_ver_name%NOTFOUND THEN
3482 --dbms_output.put_line('close get_struc_ver_name');
3483       CLOSE get_struc_ver_name;
3484       RAISE NO_DATA_FOUND;
3485     END IF;
3486 --dbms_output.put_line('close get_struc_ver_name');
3487     CLOSE get_struc_ver_name;
3488     --dbms_output.put_line('1b');
3489 
3490     --Set baseline flags if this is the first published version
3491     IF ('N' = PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(l_project_id, l_proj_element_id)) THEN
3492       l_current_baseline_flag := 'Y';
3493       l_original_baseline_flag := 'Y';
3494     END IF;
3495 
3496     --Get Structure Version Attribute Info
3497 --dbms_output.put_line('open get_structure_ver_attr_csr');
3498     OPEN get_structure_ver_attr_csr(p_structure_version_id, l_project_id);
3499     FETCH get_structure_ver_attr_csr INTO l_struc_ver_attr_rec;
3500 --dbms_output.put_line('close get_structure_ver_attr_csr');
3501     CLOSE get_structure_ver_attr_csr;
3502 
3503     --Copy structure version name and description
3504     IF (p_publish_structure_ver_name IS NULL) OR (p_publish_structure_ver_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3505       l_new_struct_ver_name := l_struc_ver_attr_rec.name;
3506     ELSE
3507       l_new_struct_ver_name := p_publish_structure_ver_name;
3508     END IF;
3509 
3510     IF (p_structure_ver_desc IS NULL) or (p_structure_ver_desc = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
3511       l_new_struct_ver_desc := l_struc_ver_attr_rec.description;
3512     ELSE
3513       l_new_struct_ver_desc := p_structure_ver_desc;
3514     END IF;
3515 
3516     --l_dummy_name for current structure
3517     --p_publish_structure_ver_name for new publishing structure
3518     --Check if names are the same
3519     IF (l_dummy_name = l_new_struct_ver_name) THEN
3520       -- If same, add Time-Stamp to working version.
3521 --      error_msg('dummyname before '||l_dummy_name);
3522 --      l_dummy_name := substr(fnd_date.date_to_canonical(sysdate)||' - '||
3523 --                             l_dummy_name,0,240);
3524       --select prefix from pa_lookups
3525       select meaning
3526         into l_prefix
3527         from pa_lookups
3528        where lookup_type = 'PA_STRUCTURES_PREFIX'
3529          and lookup_code = 'PA_PREFIX_COPY';
3530 
3531       l_dummy_name := substrb(l_prefix||' '||l_dummy_name,0,240);
3532 
3533       -- Bug Fix 4727737
3534       -- We need to make sure that the name of the newly created working version is unique
3535       -- and not getting collided with the published versions name.
3536       -- Users can create data in such a way that the version name when prefixed with Copy To:
3537       -- will result into an existing published version name.
3538 
3539       -- So adding the following call to avoid the U2 violation due to the following update statement.
3540 
3541            IF (pa_project_structure_utils.check_struc_ver_name_unique(l_dummy_name,
3542                                                                       null,
3543                                                                       l_project_id,
3544                                                                       l_proj_element_id) <> 'Y') THEN
3545 
3546              --Not unique; error.
3547              pa_utils.add_message('PA','PA_PS_NEW_STRUC_VER_NAM_UNIQUE');
3548              x_msg_data := 'PA_PS_NEW_STRUC_VER_NAM_UNIQUE';
3549              RAISE FND_API.G_EXC_ERROR;
3550            END IF;
3551 
3552       -- End of Bug Fix 4727737
3553 
3554 --      error_msg('dummy_name after'||l_dummy_name);
3555       -- update_name
3556       update PA_PROJ_ELEM_VER_STRUCTURE
3557       set name = l_dummy_name,
3558           current_working_flag = 'Y'
3559       where pev_structure_id = l_pev_structure_id;
3560 
3561     END IF;
3562 
3563     --Check if structure version name is unique
3564     If (PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Name_Unique(l_new_struct_ver_name,
3565                                                                null,
3566                                                                l_project_id,
3567                                                                l_proj_element_id) <> 'Y') THEN
3568       --Not unique; error.
3569       PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_VER_NAM_UNIQUE');
3570       x_msg_data := 'PA_PS_STRUC_VER_NAM_UNIQUE';
3571       RAISE FND_API.G_EXC_ERROR;
3572     END IF;
3573     --Bug No 3450684 Smukka Checking for deliverable type
3574     IF  PA_PROJ_ELEMENTS_UTILS.check_sharedstruct_deliv(p_structure_version_id) = 'Y' THEN
3575         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3576                              p_msg_name => 'PA_PS_CHK_DEL_FAIL_PUB_STR');
3577       RAISE FND_API.G_EXC_ERROR;
3578     END IF;
3579 
3580     --Get Structure Version Info
3581     --dbms_output.put_line('2');
3582 --dbms_output.put_line('open get_structure_ver_csr');
3583     OPEN get_structure_ver_csr(p_structure_version_id);
3584     FETCH get_structure_ver_csr INTO l_struc_ver_rec;
3585 --dbms_output.put_line('close get_structure_ver_csr');
3586     CLOSE get_structure_ver_csr;
3587     --dbms_output.put_line('2b');
3588 
3589     OPEN cur_elem_ver_seq;
3590     FETCH cur_elem_ver_seq into l_new_struct_ver_id;
3591     CLOSE cur_elem_ver_seq;
3592 
3593     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
3594     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_tmp_struct_ver_id
3595     -- to l_new_struct_ver_id
3596 
3597     l_tmp_struct_ver_id := l_new_struct_ver_id ;
3598 
3599     -- End 4657794
3600 
3601     PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
3602        X_ROW_ID                       => l_rowid
3603     --,X_ELEMENT_VERSION_ID           => l_new_struct_ver_id        * commented for Bug Fix: 4537865
3604       ,X_ELEMENT_VERSION_ID       => l_tmp_struct_ver_id        -- added for Bug fix: 4537865
3605       ,X_PROJ_ELEMENT_ID              => l_struc_ver_rec.proj_element_id
3606       ,X_OBJECT_TYPE                  => 'PA_STRUCTURES'
3607       ,X_PROJECT_ID                   => l_struc_ver_rec.project_id
3608       ,X_PARENT_STRUCTURE_VERSION_ID  => l_new_struct_ver_id
3609       ,X_DISPLAY_SEQUENCE             => NULL
3610       ,X_WBS_LEVEL                    => NULL
3611       ,X_WBS_NUMBER                   => '0'
3612       ,X_ATTRIBUTE_CATEGORY           => l_struc_ver_rec.attribute_category
3613       ,X_ATTRIBUTE1                   => l_struc_ver_rec.attribute1
3614       ,X_ATTRIBUTE2                   => l_struc_ver_rec.attribute2
3615       ,X_ATTRIBUTE3                   => l_struc_ver_rec.attribute3
3616       ,X_ATTRIBUTE4                   => l_struc_ver_rec.attribute4
3617       ,X_ATTRIBUTE5                   => l_struc_ver_rec.attribute5
3618       ,X_ATTRIBUTE6                   => l_struc_ver_rec.attribute6
3619       ,X_ATTRIBUTE7                   => l_struc_ver_rec.attribute7
3620       ,X_ATTRIBUTE8                   => l_struc_ver_rec.attribute8
3621       ,X_ATTRIBUTE9                   => l_struc_ver_rec.attribute9
3622       ,X_ATTRIBUTE10                  => l_struc_ver_rec.attribute10
3623       ,X_ATTRIBUTE11                  => l_struc_ver_rec.attribute11
3624       ,X_ATTRIBUTE12                  => l_struc_ver_rec.attribute12
3625       ,X_ATTRIBUTE13                  => l_struc_ver_rec.attribute13
3626       ,X_ATTRIBUTE14                  => l_struc_ver_rec.attribute14
3627       ,X_ATTRIBUTE15                  => l_struc_ver_rec.element_version_id
3628       ,X_TASK_UNPUB_VER_STATUS_CODE   => NULL
3629             ,X_SOURCE_OBJECT_ID             => l_struc_ver_rec.project_id
3630             ,X_SOURCE_OBJECT_TYPE           => 'PA_PROJECTS'
3631     );
3632     -- added for Bug fix: 4537865
3633         l_new_struct_ver_id := l_tmp_struct_ver_id;
3634     -- added for Bug fix: 4537865
3635 
3636 /* This API insert into planning txn table if wp. Call table hander instead
3637     --Call Create Structure Version
3638     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
3639      ( p_validate_only         => p_validate_only
3640       ,p_structure_id          => l_struc_ver_rec.proj_element_id
3641       ,p_attribute_category    => l_struc_ver_rec.attribute_category
3642       ,p_attribute1            => l_struc_ver_rec.attribute1
3643       ,p_attribute2            => l_struc_ver_rec.attribute2
3644       ,p_attribute3            => l_struc_ver_rec.attribute3
3645       ,p_attribute4            => l_struc_ver_rec.attribute4
3646       ,p_attribute5            => l_struc_ver_rec.attribute5
3647       ,p_attribute6            => l_struc_ver_rec.attribute6
3648       ,p_attribute7            => l_struc_ver_rec.attribute7
3649       ,p_attribute8            => l_struc_ver_rec.attribute8
3650       ,p_attribute9            => l_struc_ver_rec.attribute9
3651       ,p_attribute10           => l_struc_ver_rec.attribute10
3652       ,p_attribute11           => l_struc_ver_rec.attribute11
3653       ,p_attribute12           => l_struc_ver_rec.attribute12
3654       ,p_attribute13           => l_struc_ver_rec.attribute13
3655       ,p_attribute14           => l_struc_ver_rec.attribute14
3656       ,p_attribute15           => l_struc_ver_rec.element_version_id    --for performacnce to be used later by new structure version
3657       ,x_structure_version_id  => l_new_struct_ver_id
3658       ,x_return_status         => l_return_status
3659       ,x_msg_count             => l_msg_count
3660       ,x_msg_data              => l_msg_data );
3661 --dbms_output.put_line('new struct version id = '||l_new_struct_ver_id);
3662 */
3663 
3664     IF (p_debug_mode = 'Y') THEN
3665       pa_debug.debug('create structure version =>'||l_new_struct_ver_id);
3666     END IF;
3667 
3668     l_msg_count := FND_MSG_PUB.count_msg;
3669     if l_msg_count > 0 then
3670       x_msg_count := l_msg_count;
3671       if x_msg_count = 1 then
3672         x_msg_data := l_msg_data;
3673       end if;
3674       raise FND_API.G_EXC_ERROR;
3675     end if;
3676 
3677     --update links linking from working version to current published version
3678 --    PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS
3679 --    (
3680 --      p_init_msg_list       => FND_API.G_FALSE
3681 --     ,p_commit              => FND_API.G_FALSE
3682 --     ,p_debug_mode          => p_debug_mode
3683 --     ,p_orig_project_id     => l_project_id
3684 --     ,p_orig_structure_id   => l_proj_element_id
3685 --     ,p_orig_struc_ver_id   => p_structure_version_id
3686 --     ,p_orig_task_ver_id    => NULL
3687 --     ,p_new_project_id      => l_project_id
3688 --     ,p_new_structure_id    => l_struc_ver_rec.proj_element_id
3689 --     ,p_new_struc_ver_id    => l_new_struct_ver_id
3690 --     ,p_new_task_ver_id     => NULL
3691 --     ,x_return_status       => l_return_status
3692 --     ,x_msg_count           => l_msg_count
3693 --     ,x_msg_data            => l_msg_data
3694 --    );
3695 --
3696 --    l_msg_count := FND_MSG_PUB.count_msg;
3697 --    if l_msg_count > 0 then
3698 --      x_msg_count := l_msg_count;
3699 --      if x_msg_count = 1 then
3700 --        x_msg_data := l_msg_data;
3701 --      end if;
3702 --      raise FND_API.G_EXC_ERROR;
3703 --    end if;
3704 
3705     --Search for incoming links; update existing links
3706     --dbms_output.put_line('3');
3707 --dbms_output.put_line('open p_structure_version_id');
3708 --    OPEN get_from_id(p_structure_version_id);
3709 --    LOOP
3710 --      IF (p_debug_mode = 'Y') THEN
3711 --        pa_debug.debug('check incoming links for struct');
3712 --      END IF;
3713 --      FETCH get_from_id INTO l_from_object_info;
3714 --      EXIT WHEN get_from_id%NOTFOUND;
3715 --
3716 --      If (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
3717 --        --get element information, then update
3718 --        --dbms_output.put_line('4');
3719 --dbms_output.put_line('open get_structure_version_info');
3720 --        OPEN get_structure_version_info(l_from_object_info.object_id_from);
3721 --        FETCH get_structure_version_info INTO l_info_struc_ver_rec;
3722 --        PA_RELATIONSHIP_PVT.Update_Relationship(
3723 --          p_init_msg_list => FND_API.G_FALSE
3724 --         ,p_commit => FND_API.G_FALSE
3725 --         ,p_debug_mode => p_debug_mode
3726 --         ,p_object_relationship_id    => l_from_object_info.object_relationship_id
3727 --         ,p_project_id_from           => l_info_struc_ver_rec.project_id
3728 --         ,p_structure_id_from         => l_info_struc_ver_rec.structure_id
3729 --         ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
3730 --         ,p_task_version_id_from      => NULL
3731 --         ,p_project_id_to             => l_project_id
3732 --         ,p_structure_id_to           => l_struc_ver_rec.proj_element_id
3733 --         ,p_structure_version_id_to   => l_new_struct_ver_id
3734 --         ,p_task_version_id_to        => NULL
3735 --         ,p_relationship_type         => 'L'
3736 --         ,p_relationship_subtype      => 'READ_WRITE'
3737 --         ,p_record_version_number     => l_from_object_info.record_version_number
3738 --         ,x_return_status             => l_return_status
3739 --         ,x_msg_count                 => l_msg_count
3740 --         ,x_msg_data                  => l_msg_data
3741 --        );
3742 --dbms_output.put_line('close get_structure_version_info');
3743 --        CLOSE get_structure_version_info;
3744 --        --dbms_output.put_line('4b');
3745 --
3746 --
3747 --      ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
3748 --        --get element information, then update
3749 --        --dbms_output.put_line('5');
3750 --dbms_output.put_line('open get_task_version_info');
3751 --        OPEN get_task_version_info(l_from_object_info.object_id_from);
3752 --        FETCH get_task_version_info INTO l_info_task_ver_rec;
3753 --        PA_RELATIONSHIP_PVT.Update_Relationship(
3754 --          p_init_msg_list => FND_API.G_FALSE
3755 --         ,p_commit => FND_API.G_FALSE
3756 --         ,p_debug_mode => p_debug_mode
3757 --         ,p_object_relationship_id    => l_from_object_info.object_relationship_id
3758 --         ,p_project_id_from           => l_info_task_ver_rec.project_id
3759 --         ,p_structure_id_from         => l_info_task_ver_rec.structure_id
3760 --         ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
3761 --         ,p_task_version_id_from      => l_info_task_ver_rec.task_version_id
3762 --         ,p_project_id_to             => l_project_id
3763 --         ,p_structure_id_to           => l_struc_ver_rec.proj_element_id
3764 --         ,p_structure_version_id_to   => l_new_struct_ver_id
3765 --         ,p_task_version_id_to        => NULL
3766 --         ,p_relationship_type         => 'L'
3767 --         ,p_relationship_subtype      => 'READ_WRITE'
3768 --         ,p_record_version_number     => l_from_object_info.record_version_number
3769 --         ,x_return_status             => l_return_status
3770 --         ,x_msg_count                 => l_msg_count
3771 --         ,x_msg_data                  => l_msg_data
3772 --        );
3773 --dbms_output.put_line('close get_task_version_info');
3774 --        CLOSE get_task_version_info;
3775 --        --dbms_output.put_line('5b');
3776 --
3777 --      END IF;
3778 --      If (p_debug_mode = 'Y') THEN
3779 --        pa_debug.debug('update incoming links for struct =>'||l_return_status);
3780 --      END IF;
3781 --
3782 --      --Check error
3783 --      l_msg_count := FND_MSG_PUB.count_msg;
3784 --      if (l_msg_count > 0) then
3785 --        x_msg_count := l_msg_count;
3786 --        if x_msg_count = 1 then
3787 --          x_msg_data := l_msg_data;
3788 --        end if;
3789 --dbms_output.put_line('close get_from_id');
3790 --        CLOSE get_from_id;
3791 --        raise FND_API.G_EXC_ERROR;
3792 --      end if;
3793 --
3794 --
3795 --    END LOOP;
3796 --dbms_output.put_line('close get_from_id');
3797 --    CLOSE get_from_id;
3798     --dbms_output.put_line('5b');
3799 
3800     -----------------------------------------------
3801     --Search for outgoing links; create new Links--
3802     --dbms_output.put_line('6');
3803 --dbms_output.put_line('open get_to_id');
3804 --    OPEN get_to_id(p_structure_version_id);
3805 --    LOOP
3806 --      IF (p_debug_mode = 'Y') THEN
3807 --        pa_debug.debug('check outgoing links for struct');
3808 --      END IF;
3809 --      FETCH get_to_id INTO l_to_object_info;
3810 --      EXIT WHEN get_to_id%NOTFOUND;
3811 --      If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
3812 --        --dbms_output.put_line('7');
3813 --dbms_output.put_line('open get_structure_version_info');
3814 --        OPEN get_structure_version_info(l_to_object_info.object_id_to);
3815 --        FETCH get_structure_version_info INTO l_info_struc_ver_rec;
3816 /*****************************/
3817 --dbms_output.put_line('creating rel: structure out going links for structures');
3818 --        PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
3819 --         p_user_id => FND_GLOBAL.USER_ID
3820 --        ,p_object_type_from => 'PA_STRUCTURES'
3821 --        ,p_object_id_from1 => l_new_struct_ver_id
3822 --        ,p_object_id_from2 => NULL
3823 --        ,p_object_id_from3 => NULL
3824 --        ,p_object_id_from4 => NULL
3825 --        ,p_object_id_from5 => NULL
3826 --        ,p_object_type_to => 'PA_STRUCTURES'
3827 --        ,p_object_id_to1 => l_info_struc_ver_rec.structure_version_id
3828 --        ,p_object_id_to2 => NULL
3829 --        ,p_object_id_to3 => NULL
3830 --        ,p_object_id_to4 => NULL
3831 --        ,p_object_id_to5 => NULL
3832 --        ,p_relationship_type => 'L'
3833 --        ,p_relationship_subtype => 'READ_WRITE'
3834 --        ,p_lag_day => NULL
3835 --        ,p_imported_lag => NULL
3836 --        ,p_priority => NULL
3837 --        ,p_pm_product_code => NULL
3838 --        ,x_object_relationship_id => l_new_obj_rel_id
3839 --        ,x_return_status => l_return_status
3840 --        );
3841 --
3842 /*****************************/
3843 --dbms_output.put_line('close get_structure_version_info');
3844 --        CLOSE get_structure_version_info;
3845 --        --dbms_output.put_line('7b');
3846 --
3847 --      ELSIF(l_to_object_info.object_type_to = 'PA_TASKS') THEN
3848 --        --dbms_output.put_line('8');
3849 --dbms_output.put_line('open get_task_version_info');
3850 --        OPEN get_task_version_info(l_to_object_info.object_id_to);
3851 --        FETCH get_task_version_info INTO l_info_task_ver_rec;
3852 /*****************************/
3853 --dbms_output.put_line('creating rel: structure out going links for tasks');
3854 --        PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
3855 --         p_user_id => FND_GLOBAL.USER_ID
3856 --        ,p_object_type_from => 'PA_STRUCTURES'
3857 --        ,p_object_id_from1 => l_new_struct_ver_id
3858 --        ,p_object_id_from2 => NULL
3859 --        ,p_object_id_from3 => NULL
3860 --        ,p_object_id_from4 => NULL
3861 --        ,p_object_id_from5 => NULL
3862 --        ,p_object_type_to => 'PA_TASKS'
3863 --        ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
3864 --        ,p_object_id_to2 => NULL
3865 --        ,p_object_id_to3 => NULL
3866 --        ,p_object_id_to4 => NULL
3867 --        ,p_object_id_to5 => NULL
3868 --        ,p_relationship_type => 'L'
3869 --        ,p_relationship_subtype => 'READ_WRITE'
3870 --        ,p_lag_day => NULL
3871 --        ,p_imported_lag => NULL
3872 --        ,p_priority => NULL
3873 --        ,p_pm_product_code => NULL
3874 --        ,x_object_relationship_id => l_new_obj_rel_id
3875 --        ,x_return_status => l_return_status
3876 --        );
3877 --
3878 /*****************************/
3879 --dbms_output.put_line('close get_task_version_info');
3880 --        CLOSE get_task_version_info;
3881 --        --dbms_output.put_line('8b');
3882 --
3883 --        If (p_debug_mode = 'Y') THEN
3884 --          pa_debug.debug('update outgoing links for struct =>'||l_return_status);
3885 --        END IF;
3886 --      END IF;
3887 --      --Check error
3888 --      l_msg_count := FND_MSG_PUB.count_msg;
3889 --      if (l_msg_count > 0) then
3890 --        x_msg_count := l_msg_count;
3891 --        if x_msg_count = 1 then
3892 --          x_msg_data := l_msg_data;
3893 --        end if;
3894 --dbms_output.put_line('close get_to_id');
3895 --        CLOSE get_to_id;
3896 --        raise FND_API.G_EXC_ERROR;
3897 --      end if;
3898 
3899 --    END LOOP;
3900 --dbms_output.put_line('close get_to_id');
3901 --    CLOSE get_to_id;
3902     --dbms_output.put_line('6b');
3903 
3904 
3905 --maansari
3906 --initialized the pl/sql table
3907 l_src_tasks_versions_tbl.delete;
3908 --maansari
3909 
3910     --Create the task versions
3911     --Fetch all task versions
3912 --    error_msg('create tasks');
3913 --dbms_output.put_line('open get_Task_versions_csr');
3914     OPEN get_task_versions_csr(p_structure_version_id);
3915     l_last_wbs_level := NULL;
3916     LOOP
3917       IF (p_debug_mode = 'Y') THEN
3918         pa_debug.debug('create task version for published structure');
3919       END IF;
3920 
3921       FETCH get_task_versions_csr INTO l_task_versions_rec;
3922       EXIT WHEN get_task_versions_csr%NOTFOUND;
3923 
3924 --hsiu added for task version status
3925 --Check if this task can be deleted.
3926 --Call PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok
3927 --If ok to be deleted, move on to the next task and don't add this task
3928 --  (goto l_endofloop);
3929 --otherwise add this task and set status to 'CANCELLED'
3930       l_create_task_ver_flag := 'Y';
3931 
3932       --Removing due to changes in publishing
3933       select a.proj_element_id, b.object_id_from1
3934       into   l_parent_id, l_parent_ver_id
3935       from pa_proj_element_versions a,
3936            pa_object_relationships b
3937       where a.element_version_id = b.object_id_from1
3938       and a.object_type = b.object_type_from
3939       and relationship_type = 'S'
3940       and object_id_to1 = l_task_versions_rec.element_version_id
3941       and object_type_to = 'PA_TASKS';
3942 
3943       --If it is financial task, check if this task should be created
3944 
3945 --      PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
3946 --        p_parent_task_ver_id => l_parent_ver_id
3947 --       ,x_return_status => l_return_status
3948 --       ,x_error_message_code => l_error_message_code);
3949 
3950 --bug: 2805602
3951 --hsiu: commented because this has been done in check_txn_on_summary_tasks
3952 --      If (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_parent_id) = 'Y') THEN
3953 --        PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK(x_task_id => l_parent_id,
3954 --          x_err_code => l_err_code,
3955 --          x_err_stack => l_err_stack,
3956 --          x_err_stage => l_err_stage
3957 --          );
3958 --        IF (l_err_code <> 0) THEN
3959 --          l_create_task_ver_flag := 'N';
3960 --        END IF;
3961 --      END IF;
3962 
3963 --      IF (l_return_status <> 'Y') THEN
3964 --        l_create_task_ver_flag := 'N';
3965 --      END IF;
3966 
3967       IF (l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE = 'TO_BE_DELETED') THEN
3968 
3969         PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok(
3970                      p_project_id             => l_task_versions_rec.project_id
3971                     ,p_task_version_id        => l_task_versions_rec.element_version_id
3972                     ,p_parent_structure_ver_id=> l_task_versions_rec.parent_structure_version_id
3973                     ,x_return_status          => l_return_status
3974                     ,x_error_message_code     => l_error_message_code );
3975         IF l_return_status <> 'S' THEN
3976 --Cannot delete this version. Create and set as cancelled
3977           l_create_task_ver_flag := 'Y';
3978         ELSE
3979 --This task version should not be created
3980           l_create_task_ver_flag := 'N';
3981 --delete from working if found
3982 
3983           -- Bug # 4691749.
3984           -- l_tbd_task_ver_id.extend;
3985           -- l_tbd_task_ver_id(l_tbd_task_ver_id.count) := l_task_versions_rec.element_version_id;
3986           l_tbd_index := l_tbd_index + 1;
3987           l_tbd_task_ver_id(l_tbd_index) := l_task_versions_rec.element_version_id;
3988           -- Bug # 4691749.
3989 
3990           -- Start : 4096218
3991           if (l_tbd_task_id.count < 1000) then -- Bug # 4691749.
3992       	 	l_tbd_task_id.extend;
3993          	l_tbd_task_id(l_tbd_task_id.count) := l_task_versions_rec.proj_element_id;
3994           end if; -- Bug # 4691749.
3995           -- End : 4096218
3996 
3997 --prorate this branch; find parent
3998           IF (l_last_wbs_level is NULL) THEN
3999             l_parent_tbl(l_new_struct_ver_id) := l_new_struct_ver_id;
4000             --l_parent_ver_id := l_new_struct_ver_id;
4001           ELSE
4002             IF (l_task_versions_rec.wbs_level > l_last_wbs_level) THEN
4003               l_parent_tbl(l_outline_task_ref(l_last_wbs_level)) := l_outline_task_ref(l_last_wbs_level);
4004               --l_parent_ver_id := l_outline_task_ref(l_last_wbs_level);
4005             ELSE
4006               OPEN get_parent_id(l_outline_task_ref(l_task_versions_rec.wbs_level));
4007               FETCH get_parent_id into l_parent_ver_id;
4008               CLOSE get_parent_id;
4009               l_parent_tbl(l_parent_ver_id) := l_parent_ver_id;
4010             END IF;
4011           END IF;
4012         END IF;
4013         --set task status to cancelled.
4014         UPDATE pa_proj_elements
4015            set status_code = '128',
4016                RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,1)+1,
4017                LAST_UPDATE_DATE = SYSDATE,
4018                LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
4019                LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID
4020          where proj_element_id = l_task_versions_rec.proj_element_id;
4021 
4022         update pa_proj_element_versions
4023            set TASK_UNPUB_VER_STATUS_CODE = 'PUBLISHED'
4024          where element_version_id = l_task_versions_rec.element_version_id;
4025 
4026         -- 3955848 Added code to delete task to dlvr association in publishing flow , version enabled case
4027         -- p_delete_or_validate is passed as 'D' because only deletion should be done
4028 
4029         PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
4030          (
4031              p_task_element_id      => l_task_versions_rec.proj_element_id
4032             ,p_project_id           => l_task_versions_rec.project_id
4033             ,p_task_version_id      => l_task_versions_rec.element_version_id
4034             ,p_delete_or_validate   => 'D'
4035             ,x_return_status        => x_return_status
4036             ,x_msg_count            => x_msg_count
4037             ,x_msg_data             => x_msg_data
4038          );
4039 
4040          IF x_return_status = FND_API.G_RET_STS_ERROR then
4041              RAISE FND_API.G_EXC_ERROR;
4042          End If;
4043 
4044         -- 3955848 end
4045 
4046       ELSE
4047         --if this task is linking to a working structure version
4048         --then do not copy
4049 
4050         --Added by rtarway for bug 4193990
4051         l_working_ver_fg := 'N';
4052 
4053         OPEN get_to_id(l_task_versions_rec.element_version_id);
4054         FETCH get_to_id INTO l_to_object_info;
4055         IF get_to_id%FOUND THEN
4056           --check if this is working version
4057           IF (pa_project_structure_utils.check_struc_ver_published(l_to_object_info.object_id_to2 ,l_to_object_info.object_id_to)
4058               = 'N') THEN
4059             l_working_ver_fg := 'Y';
4060           ELSE
4061             l_working_ver_fg := 'N';
4062           END IF;
4063         --Added by rtarway for bug 4193990
4064         ELSE
4065            l_working_ver_fg := 'N';
4066         --End Added by rtarway for bug 4193990
4067         END IF;
4068         CLOSE get_to_id;
4069 
4070         IF (l_working_ver_fg = 'Y') THEN
4071           l_create_task_ver_flag := 'N';
4072           IF (l_last_wbs_level is NULL) THEN
4073             l_parent_tbl(l_new_struct_ver_id) := l_new_struct_ver_id;
4074             --l_parent_ver_id := l_new_struct_ver_id;
4075           ELSE
4076             IF (l_task_versions_rec.wbs_level > l_last_wbs_level) THEN
4077               l_parent_tbl(l_outline_task_ref(l_last_wbs_level)) := l_outline_task_ref(l_last_wbs_level);
4078               --l_parent_ver_id := l_outline_task_ref(l_last_wbs_level);
4079             ELSE
4080               OPEN get_parent_id(l_outline_task_ref(l_task_versions_rec.wbs_level));
4081               FETCH get_parent_id into l_parent_ver_id;
4082               CLOSE get_parent_id;
4083               l_parent_tbl(l_parent_ver_id) := l_parent_ver_id;
4084             END IF;
4085           END IF;
4086         ELSE --copy
4087           update pa_proj_element_versions
4088              set TASK_UNPUB_VER_STATUS_CODE = 'PUBLISHED'
4089           where element_version_id = l_task_versions_rec.element_version_id;
4090         END IF;
4091       END IF;
4092 
4093 --maansari
4094       l_src_tasks_versions_tbl(i).src_task_version_id         := l_task_versions_rec.element_version_id;
4095       l_src_tasks_versions_tbl(i).src_version_status          := l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE;
4096       l_src_tasks_versions_tbl(i).src_parent_task_version_id  := l_parent_ver_id;
4097       l_src_tasks_versions_tbl(i).copy_flag                   := l_create_task_ver_flag;
4098       i := i + 1;
4099 --maansari
4100 
4101 /*--maansari  --commenting out the following code and replacing it with bulk insert
4102     IF (l_create_task_ver_flag = 'Y') THEN
4103 --dbms_output.put_line('creating task '||l_task_versions_rec.proj_element_id||', '||l_task_versions_rec.element_version_id);
4104       if l_last_wbs_level is null then
4105         -- first task version being created
4106         -- This task should have wbs level = 1
4107         l_ref_task_ver_id := l_new_struct_ver_id;
4108         l_peer_or_sub := 'SUB';
4109       else
4110         if l_task_versions_rec.wbs_level > l_last_wbs_level then
4111           l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
4112           l_peer_or_sub := 'SUB';
4113         else
4114           l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
4115           l_peer_or_sub := 'PEER';
4116         end if;
4117       end if;
4118 --dbms_output.put_line('l_ref_task_ver_id = '||l_ref_task_ver_id);
4119 --dbms_output.put_line('l_peer_or_sub =  '||l_peer_or_sub);
4120 --dbms_output.put_line('parent_element_version_id = '||l_task_versions_rec.parent_element_version_id);
4121 --Bug 2189657
4122 --Added for linking tasks with no display sequence.
4123 --Set correct reference and parent element version id
4124       If (l_task_versions_rec.display_sequence IS NULL) THEN
4125         IF (l_ref_task_ver_id <> l_new_struct_ver_id) THEN
4126           --A task has already been created. Reference task must be a task
4127           IF (l_task_versions_rec.parent_element_version_id = p_structure_version_id) THEN
4128             --this is a link to the structure version. A task has already been created.
4129             --need to use a top level task as peer reference task
4130             l_peer_or_sub := 'PEER';
4131             l_ref_task_ver_id := l_outline_task_ref(1);
4132           ELSE
4133             --this is a link to a task.
4134             l_peer_or_sub := 'SUB';
4135             l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
4136           END IF;
4137         ELSE
4138           --No task has been created. Reference task is structure
4139           l_peer_or_sub := 'SUB';
4140           l_ref_task_ver_id := l_new_struct_ver_id;
4141 --          l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
4142         END IF;
4143       END IF;
4144 --dbms_output.put_line('l_ref_task_ver_id = '||l_ref_task_ver_id);
4145 --dbms_output.put_line('l_peer_or_sub =  '||l_peer_or_sub);
4146 
4147       OPEN get_task_ver_weighting(l_task_versions_rec.element_version_id);
4148       FETCH get_task_ver_weighting into l_weighting_percentage;
4149       CLOSE get_task_ver_weighting;
4150 
4151 --Bug 2189657 end;
4152       PA_TASK_PVT1.CREATE_TASK_VERSION
4153       ( p_validate_only        => FND_API.G_FALSE
4154        ,p_validation_level     => 0
4155        ,p_ref_task_version_id  => l_ref_task_ver_id
4156        ,p_peer_or_sub          => l_peer_or_sub
4157        ,p_task_id              => l_task_versions_rec.proj_element_id
4158        ,p_WEIGHTING_PERCENTAGE => l_weighting_percentage
4159        ,p_TASK_UNPUB_VER_STATUS_CODE => 'PUBLISHED'
4160        ,x_task_version_id      => l_task_version_id
4161        ,x_return_status        => l_return_status
4162        ,x_msg_count            => l_msg_count
4163        ,x_msg_data             => l_msg_data);
4164 
4165       t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
4166 --dbms_output.put_line('elem_ver_id = '||l_task_versions_rec.element_version_id||', new elem_ver_id = '||l_task_version_id);
4167 
4168 --dbms_output.put_line('ref/peer = '||l_ref_task_ver_id||'/'||l_peer_or_sub||'elm Id = '||l_task_versions_rec.proj_element_id||', elm ver Id = '||l_task_version_id);
4169 
4170 --dbms_output.put_line('new task version id = '||l_task_version_id);
4171 
4172 --      error_msg('done create_task_version '||l_msg_count||', '||l_msg_data);
4173       --Check if there is any error.
4174       l_msg_count := FND_MSG_PUB.count_msg;
4175       IF l_msg_count > 0 THEN
4176         x_msg_count := l_msg_count;
4177         IF x_msg_count = 1 THEN
4178           x_msg_data := l_msg_data;
4179         END IF;
4180 --dbms_output.put_line('close get_task_versions_csr');
4181         CLOSE get_task_versions_csr;
4182         RAISE FND_API.G_EXC_ERROR;
4183       END IF;
4184 */ --maansari
4185 
4186 
4187 --      error_msg('before update published links');
4188       --update links linking from working version to current published version
4189 --      IF (p_debug_mode = 'Y') THEN
4190 --        pa_debug.debug('updating links');
4191 --      END IF;
4192 --      PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS
4193 --      (
4194 --        p_init_msg_list       => FND_API.G_FALSE
4195 --       ,p_commit              => FND_API.G_FALSE
4196 --       ,p_debug_mode          => p_debug_mode
4197 --       ,p_orig_project_id     => l_project_id
4198 --       ,p_orig_structure_id   => l_proj_element_id
4199 --       ,p_orig_struc_ver_id   => p_structure_version_id
4200 --       ,p_orig_task_ver_id    => l_task_versions_rec.element_version_id
4201 --       ,p_new_project_id      => l_project_id
4202 --       ,p_new_structure_id    => l_struc_ver_rec.proj_element_id
4203 --       ,p_new_struc_ver_id    => l_new_struct_ver_id
4204 --       ,p_new_task_ver_id     => l_task_version_id
4205 --       ,x_return_status       => l_return_status
4206 --       ,x_msg_count           => l_msg_count
4207 --       ,x_msg_data            => l_msg_data
4208 --      );
4209 --      error_msg('update latest published links');
4210 
4211       --Check if there is any error.
4212 --      l_msg_count := FND_MSG_PUB.count_msg;
4213 --      IF l_msg_count > 0 THEN
4214 --        x_msg_count := l_msg_count;
4215 --        IF x_msg_count = 1 THEN
4216 --          x_msg_data := l_msg_data;
4217 --        END IF;
4218 --dbms_output.put_line('close get_task_versions_csr');
4219 --        CLOSE get_task_versions_csr;
4220 --        RAISE FND_API.G_EXC_ERROR;
4221 --      END IF;
4222 
4223 
4224       --Search for incoming links; update existing links
4225 --dbms_output.put_line('open get_from_id');
4226 --      OPEN get_from_id(l_task_versions_rec.element_version_id);
4227 --      LOOP
4228 --        FETCH get_from_id INTO l_from_object_info;
4229 --        EXIT WHEN get_from_id%NOTFOUND;
4230 --        IF (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
4231 --dbms_output.put_line('open get_structure_version_info');
4232 --          OPEN get_structure_version_info(l_from_object_info.object_id_from);
4233 --          FETCH get_structure_version_info INTO l_info_struc_ver_rec;
4234 --          PA_RELATIONSHIP_PVT.Update_Relationship(
4235 --            p_init_msg_list => FND_API.G_FALSE
4236 --           ,p_commit => FND_API.G_FALSE
4237 --           ,p_debug_mode => p_debug_mode
4238 --           ,p_object_relationship_id    => l_from_object_info.object_relationship_id
4239 --           ,p_project_id_from           => l_info_struc_ver_rec.project_id
4240 --           ,p_structure_id_from         => l_info_struc_ver_rec.structure_id
4241 --           ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
4242 --           ,p_task_version_id_from      => NULL
4243 --           ,p_project_id_to             => l_project_id
4244 --           ,p_structure_id_to           => l_struc_ver_rec.proj_element_id
4245 --           ,p_structure_version_id_to   => l_new_struct_ver_id
4246 --           ,p_task_version_id_to        => l_task_version_id
4247 --           ,p_relationship_type         => 'L'
4248 --           ,p_relationship_subtype      => 'READ_WRITE'
4249 --           ,p_record_version_number     => l_from_object_info.record_version_number
4250 --           ,x_return_status             => l_return_status
4251 --           ,x_msg_count                 => l_msg_count
4252 --           ,x_msg_data                  => l_msg_data
4253 --          );
4254 --dbms_output.put_line('Incoming: From '||l_info_struc_ver_rec.structure_version_id||' To '||l_task_version_id);
4255 --dbms_output.put_line('close get_structure_version_info');
4256 --          CLOSE get_structure_version_info;
4257 --
4258 --        ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
4259 --dbms_output.put_line('get_task_version_info');
4260 --          OPEN get_task_version_info(l_from_object_info.object_id_from);
4261 --          FETCH get_task_version_info INTO l_info_task_ver_rec;
4262 --          PA_RELATIONSHIP_PVT.Update_Relationship(
4263 --            p_init_msg_list => FND_API.G_FALSE
4264 --           ,p_commit => FND_API.G_FALSE
4265 --           ,p_debug_mode => p_debug_mode
4266 --           ,p_object_relationship_id    => l_from_object_info.object_relationship_id
4267 --           ,p_project_id_from           => l_info_task_ver_rec.project_id
4268 --           ,p_structure_id_from         => l_info_task_ver_rec.structure_id
4269 --           ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
4270 --           ,p_task_version_id_from      => l_info_task_ver_rec.task_version_id
4271 --           ,p_project_id_to             => l_project_id
4272 --           ,p_structure_id_to           => l_struc_ver_rec.proj_element_id
4273 --           ,p_structure_version_id_to   => l_new_struct_ver_id
4274 --           ,p_task_version_id_to        => l_task_version_id
4275 --           ,p_relationship_type         => 'L'
4276 --           ,p_relationship_subtype      => 'READ_WRITE'
4277 --           ,p_record_version_number     => l_from_object_info.record_version_number
4278 --           ,x_return_status             => l_return_status
4279 --           ,x_msg_count                 => l_msg_count
4280 --           ,x_msg_data                  => l_msg_data
4281 --          );
4282 --dbms_output.put_line('Incoming: From '||l_info_task_ver_rec.task_version_id||' To '||l_task_version_id);
4283 --dbms_output.put_line('close get_task_version_info');
4284 --          CLOSE get_task_version_info;
4285 --        END IF;
4286 --
4287 --        --Check error
4288 --        l_msg_count := FND_MSG_PUB.count_msg;
4289 --        if (l_msg_count > 0) then
4290 --          x_msg_count := l_msg_count;
4291 --          if x_msg_count = 1 then
4292 --            x_msg_data := l_msg_data;
4293 --          end if;
4294 --dbms_output.put_line('close get_task_versions_csr');
4295 --          CLOSE get_task_versions_csr;
4296 --dbms_output.put_line('close get_from_id');
4297 --          CLOSE get_from_id;
4298 --          raise FND_API.G_EXC_ERROR;
4299 --        end if;
4300 
4301 --      END LOOP;
4302 --dbms_output.put_line('close get_from_id');
4303 --      CLOSE get_from_id;
4304 
4305       --Search for outgoing links; create new Links
4306 --dbms_output.put_line('get_to_id');
4307 --      OPEN get_to_id(l_task_versions_rec.element_version_id);
4308 --      LOOP
4309 --        FETCH get_to_id INTO l_to_object_info;
4310 --        EXIT WHEN get_to_id%NOTFOUND;
4311 --        If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
4312 --dbms_output.put_line('get_structure_version_info');
4313 --          OPEN get_structure_version_info(l_to_object_info.object_id_to);
4314 --          FETCH get_structure_version_info INTO l_info_struc_ver_rec;
4315 /*****************************/
4316 --dbms_output.put_line('creating rel: task out going links for structures');
4317 --dbms_output.put_line(l_project_id||','||l_struc_ver_rec.proj_element_id||','||l_new_struct_ver_id||','||','||l_task_version_id||', TO: '
4318 --||l_info_struc_ver_rec.project_id||','||l_info_struc_ver_rec.structure_id||','||l_info_struc_ver_rec.structure_version_id);
4319 --          PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
4320 --           p_user_id => FND_GLOBAL.USER_ID
4321 --          ,p_object_type_from => 'PA_TASKS'
4322 --          ,p_object_id_from1 => l_task_version_id
4323 --          ,p_object_id_from2 => NULL
4324 --          ,p_object_id_from3 => NULL
4325 --          ,p_object_id_from4 => NULL
4326 --          ,p_object_id_from5 => NULL
4327 --          ,p_object_type_to => 'PA_STRUCTURES'
4328 --          ,p_object_id_to1 => l_info_struc_ver_rec.structure_version_id
4329 --          ,p_object_id_to2 => NULL
4330 --          ,p_object_id_to3 => NULL
4331 --          ,p_object_id_to4 => NULL
4332 --          ,p_object_id_to5 => NULL
4333 --          ,p_relationship_type => 'L'
4334 --          ,p_relationship_subtype => 'READ_WRITE'
4335 --          ,p_lag_day => NULL
4336 --          ,p_imported_lag => NULL
4337 --          ,p_priority => NULL
4338 --          ,p_pm_product_code => NULL
4339 --          ,x_object_relationship_id => l_new_obj_rel_id
4340 --          ,x_return_status => l_return_status
4341 --          );
4342 --dbms_output.put_line('Outgoing: From '||l_task_version_id||' To '||l_info_struc_ver_rec.structure_version_id);
4343 
4344 /*****************************/
4345 --dbms_output.put_line('close get_structure_version_info');
4346 --          CLOSE get_structure_version_info;
4347 
4348 --        ELSIF (l_to_object_info.object_type_to = 'PA_TASKS') THEN
4349 --dbms_output.put_line('open get_task_version_info');
4350 --          OPEN get_task_version_info(l_to_object_info.object_id_to);
4351 --          FETCH get_task_version_info INTO l_info_task_ver_rec;
4352 /*****************************/
4353 --dbms_output.put_line('creating rel: task out going links for tasks');
4354 --          PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
4355 --           p_user_id => FND_GLOBAL.USER_ID
4356 --          ,p_object_type_from => 'PA_TASKS'
4357 --          ,p_object_id_from1 => l_task_version_id
4358 --          ,p_object_id_from2 => NULL
4359 --          ,p_object_id_from3 => NULL
4360 --          ,p_object_id_from4 => NULL
4361 --          ,p_object_id_from5 => NULL
4362 --          ,p_object_type_to => 'PA_TASKS'
4363 --          ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
4364 --          ,p_object_id_to2 => NULL
4365 --          ,p_object_id_to3 => NULL
4366 --          ,p_object_id_to4 => NULL
4367 --          ,p_object_id_to5 => NULL
4368 --          ,p_relationship_type => 'L'
4369 --          ,p_relationship_subtype => 'READ_WRITE'
4370 --          ,p_lag_day => NULL
4371 --          ,p_imported_lag => NULL
4372 --          ,p_priority => NULL
4373 --          ,p_pm_product_code => NULL
4374 --          ,x_object_relationship_id => l_new_obj_rel_id
4375 --          ,x_return_status => l_return_status
4376 --          );
4377 --dbms_output.put_line('Outgoing: From '||l_task_version_id||' To '||l_info_task_ver_rec.task_version_id);
4378 
4379 /*****************************/
4380 --dbms_output.put_line('close get_task_version_info');
4381 --          CLOSE get_task_version_info;
4382 --
4383 --        END IF;
4384 --
4385         --Check error
4386 --        l_msg_count := FND_MSG_PUB.count_msg;
4387 --        if (l_msg_count > 0) then
4388 --          x_msg_count := l_msg_count;
4389 --          if x_msg_count = 1 then
4390 --            x_msg_data := l_msg_data;
4391 --          end if;
4392 --dbms_output.put_line('close get_task_versions_csr');
4393 --          CLOSE get_task_versions_csr;
4394 --dbms_output.put_line('close get_to_id');
4395 --          CLOSE get_to_id;
4396 --          raise FND_API.G_EXC_ERROR;
4397 --        end if;
4398 --
4399 --      END LOOP;
4400 --dbms_output.put_line('close get_to_id');
4401 --      CLOSE get_to_id;
4402 
4403 
4404 --      IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
4405 /* maansari
4406       IF (l_workplan_type = 'Y') THEN
4407 --dbms_output.put_line('open get_ver_schedule_attr_csr');
4408         OPEN get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id,
4409                                        l_task_versions_rec.project_id);
4410         FETCH get_ver_schedule_attr_csr INTO l_ver_sch_attr_rec;
4411 --dbms_output.put_line('close get_ver_schedule_attr_csr');
4412         CLOSE get_ver_schedule_attr_csr;
4413 */ --maansari
4414 
4415 
4416 /* hsiu: bug 2800553: commented for performance improvement
4417         -- xxlu added DFF attributes
4418         PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
4419         (p_validate_only           => FND_API.G_FALSE
4420         ,p_element_version_id      => l_task_version_id
4421         ,p_calendar_id             => l_ver_sch_attr_rec.calendar_id
4422         ,p_scheduled_start_date    => l_ver_sch_attr_rec.scheduled_start_date
4423         ,p_scheduled_end_date      => l_ver_sch_attr_rec.scheduled_finish_date
4424         ,p_obligation_start_date   => l_ver_sch_attr_rec.obligation_start_date
4425         ,p_obligation_end_date     => l_ver_sch_attr_rec.obligation_finish_date
4426         ,p_actual_start_date       => l_ver_sch_attr_rec.actual_start_date
4427         ,p_actual_finish_date      => l_ver_sch_attr_rec.actual_finish_date
4428         ,p_estimate_start_date     => l_ver_sch_attr_rec.estimated_start_date
4429         ,p_estimate_finish_date    => l_ver_sch_attr_rec.estimated_finish_date
4430         ,p_duration                => l_ver_sch_attr_rec.duration
4431         ,p_early_start_date        => l_ver_sch_attr_rec.early_start_date
4432         ,p_early_end_date          => l_ver_sch_attr_rec.early_finish_date
4433         ,p_late_start_date         => l_ver_sch_attr_rec.late_start_date
4434         ,p_late_end_date           => l_ver_sch_attr_rec.late_finish_date
4435         ,p_milestone_flag          => l_ver_sch_attr_rec.milestone_flag
4436         ,p_critical_flag           => l_ver_sch_attr_rec.critical_flag
4437         ,p_WQ_PLANNED_QUANTITY     => l_ver_sch_attr_rec.WQ_PLANNED_QUANTITY
4438         ,p_PLANNED_EFFORT          => l_ver_sch_attr_rec.PLANNED_EFFORT
4439         ,p_attribute_category        => l_ver_sch_attr_rec.attribute_category
4440         ,p_attribute1                => l_ver_sch_attr_rec.attribute1
4441         ,p_attribute2                => l_ver_sch_attr_rec.attribute2
4442         ,p_attribute3                => l_ver_sch_attr_rec.attribute3
4443         ,p_attribute4                => l_ver_sch_attr_rec.attribute4
4444         ,p_attribute5                => l_ver_sch_attr_rec.attribute5
4445         ,p_attribute6                => l_ver_sch_attr_rec.attribute6
4446         ,p_attribute7                => l_ver_sch_attr_rec.attribute7
4447         ,p_attribute8                => l_ver_sch_attr_rec.attribute8
4448         ,p_attribute9                => l_ver_sch_attr_rec.attribute9
4449         ,p_attribute10             => l_ver_sch_attr_rec.attribute10
4450         ,p_attribute11             => l_ver_sch_attr_rec.attribute11
4451         ,p_attribute12             => l_ver_sch_attr_rec.attribute12
4452         ,p_attribute13             => l_ver_sch_attr_rec.attribute13
4453         ,p_attribute14             => l_ver_sch_attr_rec.attribute14
4454         ,p_attribute15             => l_ver_sch_attr_rec.attribute15
4455         ,x_pev_schedule_id         => l_pev_schedule_id
4456         ,x_return_status           => l_return_status
4457         ,x_msg_count               => l_msg_count
4458         ,x_msg_data                  => l_msg_data );
4459        -- end xxlu changes
4460 */
4461 --hsiu: bug 2800553: added for performance improvement
4462 /* maansari commenting the following code and replacing it with bulk insert
4463        l_new_pev_schedule_id := NULL;
4464        PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
4465          X_ROW_ID                => X_Row_Id
4466         ,X_PEV_SCHEDULE_ID     => l_new_pev_schedule_id
4467         ,X_ELEMENT_VERSION_ID      => l_task_version_id
4468         ,X_PROJECT_ID            => l_ver_sch_attr_rec.PROJECT_ID
4469         ,X_PROJ_ELEMENT_ID     => l_ver_sch_attr_rec.PROJ_ELEMENT_ID
4470         ,X_SCHEDULED_START_DATE  => l_ver_sch_attr_rec.SCHEDULED_START_DATE
4471         ,X_SCHEDULED_FINISH_DATE => l_ver_sch_attr_rec.SCHEDULED_FINISH_DATE
4472         ,X_OBLIGATION_START_DATE => l_ver_sch_attr_rec.OBLIGATION_START_DATE
4473         ,X_OBLIGATION_FINISH_DATE => l_ver_sch_attr_rec.OBLIGATION_FINISH_DATE
4474         ,X_ACTUAL_START_DATE        => l_ver_sch_attr_rec.ACTUAL_START_DATE
4475         ,X_ACTUAL_FINISH_DATE       => l_ver_sch_attr_rec.ACTUAL_FINISH_DATE
4476         ,X_ESTIMATED_START_DATE   => l_ver_sch_attr_rec.ESTIMATED_START_DATE
4477         ,X_ESTIMATED_FINISH_DATE  => l_ver_sch_attr_rec.ESTIMATED_FINISH_DATE
4478         ,X_DURATION           => l_ver_sch_attr_rec.DURATION
4479         ,X_EARLY_START_DATE     => l_ver_sch_attr_rec.EARLY_START_DATE
4480         ,X_EARLY_FINISH_DATE        => l_ver_sch_attr_rec.EARLY_FINISH_DATE
4481         ,X_LATE_START_DATE      => l_ver_sch_attr_rec.LATE_START_DATE
4482         ,X_LATE_FINISH_DATE     => l_ver_sch_attr_rec.LATE_FINISH_DATE
4483         ,X_CALENDAR_ID            => l_ver_sch_attr_rec.CALENDAR_ID
4484         ,X_MILESTONE_FLAG       => l_ver_sch_attr_rec.MILESTONE_FLAG
4485         ,X_CRITICAL_FLAG        => l_ver_sch_attr_rec.CRITICAL_FLAG
4486         ,X_WQ_PLANNED_QUANTITY      => l_ver_sch_attr_rec.wq_planned_quantity
4487         ,X_PLANNED_EFFORT           => l_ver_sch_attr_rec.planned_effort
4488         ,X_ACTUAL_DURATION          => l_ver_sch_attr_rec.actual_duration
4489         ,X_ESTIMATED_DURATION       => l_ver_sch_attr_rec.estimated_duration
4490         ,X_ATTRIBUTE_CATEGORY               => l_ver_sch_attr_rec.ATTRIBUTE_CATEGORY
4491         ,X_ATTRIBUTE1                       => l_ver_sch_attr_rec.ATTRIBUTE1
4492         ,X_ATTRIBUTE2                       => l_ver_sch_attr_rec.ATTRIBUTE2
4493         ,X_ATTRIBUTE3                       => l_ver_sch_attr_rec.ATTRIBUTE3
4494         ,X_ATTRIBUTE4                       => l_ver_sch_attr_rec.ATTRIBUTE4
4495         ,X_ATTRIBUTE5                       => l_ver_sch_attr_rec.ATTRIBUTE5
4496         ,X_ATTRIBUTE6                       => l_ver_sch_attr_rec.ATTRIBUTE6
4497         ,X_ATTRIBUTE7                       => l_ver_sch_attr_rec.ATTRIBUTE7
4498         ,X_ATTRIBUTE8                       => l_ver_sch_attr_rec.ATTRIBUTE8
4499         ,X_ATTRIBUTE9                       => l_ver_sch_attr_rec.ATTRIBUTE9
4500         ,X_ATTRIBUTE10                    => l_ver_sch_attr_rec.ATTRIBUTE10
4501         ,X_ATTRIBUTE11                    => l_ver_sch_attr_rec.ATTRIBUTE11
4502         ,X_ATTRIBUTE12                    => l_ver_sch_attr_rec.ATTRIBUTE12
4503         ,X_ATTRIBUTE13                    => l_ver_sch_attr_rec.ATTRIBUTE13
4504         ,X_ATTRIBUTE14                    => l_ver_sch_attr_rec.ATTRIBUTE14
4505         ,X_ATTRIBUTE15                    => l_ver_sch_attr_rec.ATTRIBUTE15
4506         ,X_SOURCE_OBJECT_ID               => l_ver_sch_attr_rec.PROJECT_ID
4507         ,X_SOURCE_OBJECT_TYPE             => 'PA_PROJECTS'
4508        );
4509 
4510        --Check if there is any error.
4511        l_msg_count := FND_MSG_PUB.count_msg;
4512        IF l_msg_count > 0 THEN
4513          x_msg_count := l_msg_count;
4514          IF x_msg_count = 1 THEN
4515            x_msg_data := l_msg_data;
4516          END IF;
4517 --dbms_output.put_line('close get_task_versions_csr');
4518          CLOSE get_task_versions_csr;
4519          RAISE FND_API.G_EXC_ERROR;
4520        END IF;
4521      END IF;
4522 
4523      l_last_wbs_level := l_task_versions_rec.wbs_level;
4524      l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;
4525 
4526 --hsiu added for task version status
4527 --label for not adding the task version in the published structure version.
4528     END IF; --for l_create_task_ver_flag
4529 */ --maansari
4530 
4531     END LOOP;
4532 --dbms_output.put_line('close get_task_versions_csr');
4533     CLOSE get_task_versions_csr;
4534 
4535     --hsiu
4536     --changes for task status
4537     --tasks might be deleted because childs are also deleted when deleting
4538     -- a task
4539     l_del_task_cnt := 0;
4540     LOOP
4541 
4542       -- Bug # 4691749.
4543       -- EXIT when l_del_task_cnt = l_tbd_task_ver_id.count;
4544       EXIT when l_del_task_cnt = l_tbd_index;
4545       -- Bug # 4691749.
4546 
4547       l_del_task_cnt := l_del_task_cnt + 1;
4548 
4549       OPEN get_tbd_tasks_info(l_tbd_task_ver_id(l_del_task_cnt));
4550       FETCH get_tbd_tasks_info into l_tbd_tasks_info_rec;
4551       IF get_tbd_tasks_info%FOUND THEN
4552         PA_TASK_PVT1.Delete_Task_Ver_wo_val(
4553              p_structure_version_id  => l_tbd_tasks_info_rec.parent_structure_version_id
4554             ,p_task_version_id       => l_tbd_tasks_info_rec.element_version_id
4555             ,p_record_version_number => l_tbd_tasks_info_rec.record_version_number
4556             ,x_return_status         => l_return_status
4557             ,x_msg_count         => l_msg_count
4558             ,x_msg_data              => l_msg_data
4559         );
4560 
4561         if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
4562           x_msg_count := FND_MSG_PUB.count_msg;
4563           if x_msg_count = 1 then
4564             x_msg_data := l_msg_data;
4565           end if;
4566           raise FND_API.G_EXC_ERROR;
4567         end if;
4568 
4569       END IF;
4570       CLOSE get_tbd_tasks_info;
4571     END LOOP;
4572     --end changes for task status
4573 
4574 
4575     --hsiu: create schedule row for structure version after delete so that dates are rolledup properly.
4576 --    IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN') = 'Y') THEN
4577     IF (l_workplan_type = 'Y') THEN
4578       --Get Schedule Version Info, if workplan type
4579       --dbms_output.put_line('9');
4580 --dbms_output.put_line('open get_ver_schedule_attr_csr');
4581       OPEN get_ver_schedule_attr_csr(p_structure_version_id, l_project_id);
4582       FETCH get_ver_schedule_attr_csr INTO l_ver_sch_attr_rec;
4583 --dbms_output.put_line('close get_ver_schedule_attr_csr');
4584       CLOSE get_ver_schedule_attr_csr;
4585       --dbms_output.put_line('10b');
4586 
4587       IF (p_debug_mode = 'Y') THEN
4588         pa_debug.debug('create schedule version for struct');
4589       END IF;
4590       --Call Create_Schedule_Version if workplan type
4591 /* hsiu: bug 2800553: commented for performance improvement
4592       PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
4593       ( p_validate_only           => FND_API.G_FALSE
4594        ,p_element_version_id      => l_new_struct_ver_id
4595        ,p_calendar_id             => l_ver_sch_attr_rec.calendar_id
4596        ,p_scheduled_start_date    => l_ver_sch_attr_rec.scheduled_start_date
4597        ,p_scheduled_end_date      => l_ver_sch_attr_rec.scheduled_finish_date
4598        ,p_obligation_start_date   => l_ver_sch_attr_rec.obligation_start_date
4599        ,p_obligation_end_date     => l_ver_sch_attr_rec.obligation_finish_date
4600        ,p_actual_start_date       => l_ver_sch_attr_rec.actual_start_date
4601        ,p_actual_finish_date      => l_ver_sch_attr_rec.actual_finish_date
4602        ,p_estimate_start_date     => l_ver_sch_attr_rec.estimated_start_date
4603        ,p_estimate_finish_date    => l_ver_sch_attr_rec.estimated_finish_date
4604        ,p_duration                => l_ver_sch_attr_rec.duration
4605        ,p_early_start_date        => l_ver_sch_attr_rec.early_start_date
4606        ,p_early_end_date          => l_ver_sch_attr_rec.early_finish_date
4607        ,p_late_start_date         => l_ver_sch_attr_rec.late_start_date
4608        ,p_late_end_date           => l_ver_sch_attr_rec.late_finish_date
4609        ,p_milestone_flag          => l_ver_sch_attr_rec.milestone_flag
4610        ,p_critical_flag           => l_ver_sch_attr_rec.critical_flag
4611        ,p_WQ_PLANNED_QUANTITY     => l_ver_sch_attr_rec.WQ_PLANNED_QUANTITY
4612        ,p_PLANNED_EFFORT          => l_ver_sch_attr_rec.PLANNED_EFFORT
4613        ,x_pev_schedule_id         => l_new_pev_schedule_id
4614        ,x_return_status           => l_return_status
4615        ,x_msg_count               => l_msg_count
4616        ,x_msg_data                  => l_msg_data );
4617 */
4618 --hsiu: bug 2800553: added for performance improvement
4619       l_new_pev_schedule_id := NULL;
4620       PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
4621          X_ROW_ID                => X_Row_Id
4622         ,X_PEV_SCHEDULE_ID     => l_new_pev_schedule_id
4623         ,X_ELEMENT_VERSION_ID      => l_new_struct_ver_id
4624         ,X_PROJECT_ID            => l_ver_sch_attr_rec.PROJECT_ID
4625         ,X_PROJ_ELEMENT_ID     => l_ver_sch_attr_rec.PROJ_ELEMENT_ID
4626         ,X_SCHEDULED_START_DATE  => l_ver_sch_attr_rec.SCHEDULED_START_DATE
4627         ,X_SCHEDULED_FINISH_DATE => l_ver_sch_attr_rec.SCHEDULED_FINISH_DATE
4628         ,X_OBLIGATION_START_DATE => l_ver_sch_attr_rec.OBLIGATION_START_DATE
4629         ,X_OBLIGATION_FINISH_DATE => l_ver_sch_attr_rec.OBLIGATION_FINISH_DATE
4630         ,X_ACTUAL_START_DATE        => l_ver_sch_attr_rec.ACTUAL_START_DATE
4631         ,X_ACTUAL_FINISH_DATE       => l_ver_sch_attr_rec.ACTUAL_FINISH_DATE
4632         ,X_ESTIMATED_START_DATE   => l_ver_sch_attr_rec.ESTIMATED_START_DATE
4633         ,X_ESTIMATED_FINISH_DATE  => l_ver_sch_attr_rec.ESTIMATED_FINISH_DATE
4634         ,X_DURATION           => l_ver_sch_attr_rec.DURATION
4635         ,X_EARLY_START_DATE     => l_ver_sch_attr_rec.EARLY_START_DATE
4636         ,X_EARLY_FINISH_DATE        => l_ver_sch_attr_rec.EARLY_FINISH_DATE
4637         ,X_LATE_START_DATE      => l_ver_sch_attr_rec.LATE_START_DATE
4638         ,X_LATE_FINISH_DATE     => l_ver_sch_attr_rec.LATE_FINISH_DATE
4639         ,X_CALENDAR_ID            => l_ver_sch_attr_rec.CALENDAR_ID
4640         ,X_MILESTONE_FLAG       => l_ver_sch_attr_rec.MILESTONE_FLAG
4641         ,X_CRITICAL_FLAG        => l_ver_sch_attr_rec.CRITICAL_FLAG
4642         ,X_WQ_PLANNED_QUANTITY      => l_ver_sch_attr_rec.wq_planned_quantity
4643         ,X_PLANNED_EFFORT           => l_ver_sch_attr_rec.planned_effort
4644         ,X_ACTUAL_DURATION          => l_ver_sch_attr_rec.actual_duration
4645         ,X_ESTIMATED_DURATION       => l_ver_sch_attr_rec.estimated_duration
4646         ,X_ATTRIBUTE_CATEGORY               => l_ver_sch_attr_rec.ATTRIBUTE_CATEGORY
4647         ,X_ATTRIBUTE1                       => l_ver_sch_attr_rec.ATTRIBUTE1
4648         ,X_ATTRIBUTE2                       => l_ver_sch_attr_rec.ATTRIBUTE2
4649         ,X_ATTRIBUTE3                       => l_ver_sch_attr_rec.ATTRIBUTE3
4650         ,X_ATTRIBUTE4                       => l_ver_sch_attr_rec.ATTRIBUTE4
4651         ,X_ATTRIBUTE5                       => l_ver_sch_attr_rec.ATTRIBUTE5
4652         ,X_ATTRIBUTE6                       => l_ver_sch_attr_rec.ATTRIBUTE6
4653         ,X_ATTRIBUTE7                       => l_ver_sch_attr_rec.ATTRIBUTE7
4654         ,X_ATTRIBUTE8                       => l_ver_sch_attr_rec.ATTRIBUTE8
4655         ,X_ATTRIBUTE9                       => l_ver_sch_attr_rec.ATTRIBUTE9
4656         ,X_ATTRIBUTE10                    => l_ver_sch_attr_rec.ATTRIBUTE10
4657         ,X_ATTRIBUTE11                    => l_ver_sch_attr_rec.ATTRIBUTE11
4658         ,X_ATTRIBUTE12                    => l_ver_sch_attr_rec.ATTRIBUTE12
4659         ,X_ATTRIBUTE13                    => l_ver_sch_attr_rec.ATTRIBUTE13
4660         ,X_ATTRIBUTE14                    => l_ver_sch_attr_rec.ATTRIBUTE14
4661         ,X_ATTRIBUTE15                    => l_ver_sch_attr_rec.ATTRIBUTE15
4662         ,X_SOURCE_OBJECT_ID               => l_ver_sch_attr_rec.PROJECT_ID
4663         ,X_SOURCE_OBJECT_TYPE             => 'PA_PROJECTS'
4664       );
4665 
4666 
4667       --Check if there is any error.
4668       l_msg_count := FND_MSG_PUB.count_msg;
4669       IF l_msg_count > 0 THEN
4670         x_msg_count := l_msg_count;
4671         IF x_msg_count = 1 THEN
4672           x_msg_data := l_msg_data;
4673         END IF;
4674         RAISE FND_API.G_EXC_ERROR;
4675       END IF;
4676 
4677     END IF;
4678 
4679 
4680 --maansari
4681     --clear up global array
4682     PA_STRUCT_UPGR_PUB.clear_globals;
4683 
4684     INSERT INTO pa_proj_element_versions(
4685                      ELEMENT_VERSION_ID
4686                     ,PROJ_ELEMENT_ID
4687                     ,OBJECT_TYPE
4688                     ,PROJECT_ID
4689                     ,PARENT_STRUCTURE_VERSION_ID
4690                     ,DISPLAY_SEQUENCE
4691                     ,WBS_LEVEL
4692                     ,WBS_NUMBER
4693                     ,CREATION_DATE
4694                     ,CREATED_BY
4695                     ,LAST_UPDATE_DATE
4696                     ,LAST_UPDATED_BY
4697                     ,LAST_UPDATE_LOGIN
4698                     ,RECORD_VERSION_NUMBER
4699                     ,ATTRIBUTE_CATEGORY
4700                      ,ATTRIBUTE1
4701                      ,ATTRIBUTE2
4702                      ,ATTRIBUTE3
4703                      ,ATTRIBUTE4
4704                      ,ATTRIBUTE5
4705                      ,ATTRIBUTE6
4706                      ,ATTRIBUTE7
4707                      ,ATTRIBUTE8
4708                      ,ATTRIBUTE9
4709                      ,ATTRIBUTE10
4710                      ,ATTRIBUTE11
4711                      ,ATTRIBUTE12
4712                      ,ATTRIBUTE13
4713                      ,ATTRIBUTE14
4714                      ,TASK_UNPUB_VER_STATUS_CODE
4715                     ,attribute15          --this column is used to store structure ver id of the source str to be used to created relationships.
4716             ,source_object_id
4717             ,source_object_type
4718                     ,financial_task_flag
4719                     )
4720                   SELECT
4721                      pa_proj_element_versions_s.nextval
4722                     ,ppev.proj_element_id
4723                     ,ppev.object_type
4724                     ,l_project_id
4725                     ,l_new_struct_ver_id
4726                     ,PA_STRUCT_UPGR_PUB.get_disp_sequence(ppev.display_sequence)
4727                     ,ppev.WBS_LEVEL
4728                     ,PA_STRUCT_UPGR_PUB.get_wbs_number(ppev.WBS_LEVEL, NULL)        -- Bug No. 4049574
4729                     ,SYSDATE
4730                     ,l_user_id
4731                     ,SYSDATE
4732                     ,l_user_id
4733                     ,l_login_id
4734                      ,ppev.RECORD_VERSION_NUMBER
4735                      ,ppev.ATTRIBUTE_CATEGORY
4736                      ,ppev.ATTRIBUTE1
4737                      ,ppev.ATTRIBUTE2
4738                      ,ppev.ATTRIBUTE3
4739                      ,ppev.ATTRIBUTE4
4740                      ,ppev.ATTRIBUTE5
4741                      ,ppev.ATTRIBUTE6
4742                      ,ppev.ATTRIBUTE7
4743                      ,ppev.ATTRIBUTE8
4744                      ,ppev.ATTRIBUTE9
4745                      ,ppev.ATTRIBUTE10
4746                      ,ppev.ATTRIBUTE11
4747                      ,ppev.ATTRIBUTE12
4748                      ,ppev.ATTRIBUTE13
4749                      ,ppev.ATTRIBUTE14
4750                      ,ppev.TASK_UNPUB_VER_STATUS_CODE
4751                      ,ppev.element_version_id
4752              ,l_project_id
4753              ,'PA_PROJECTS'
4754                      ,ppev.financial_task_flag
4755                   FROM ( SELECT * from pa_proj_element_versions ppev2
4756                   --,pa_proj_elements ppe  --bug 4573340        commenting out this for bug 4578813
4757                           WHERE --bug#3094283 ppev2.project_id = l_project_id
4758                             ppev2.parent_structure_version_id = p_structure_version_id
4759                             and ppev2.object_type = 'PA_TASKS'
4760                         /*
4761                          --bug 4573340
4762                             and ppe.project_id = ppev2.project_id
4763                             and ppe.proj_element_id = ppev2.proj_element_id
4764                             and ppe.link_task_flag = 'N'
4765                          --bug 4573340
4766                            */
4767                             and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( p_structure_version_id,
4768                                                        ppev2.element_version_id ) = 'Y'
4769                            order by ppev2.display_sequence ) ppev
4770                     ;
4771 
4772                   /*   --cant write order by directly.
4773                   FROM pa_proj_element_versions ppev
4774                   WHERE ppev.project_id = l_project_id
4775                     and ppev.parent_structure_version_id = p_structure_version_id
4776                     and ppev.object_type = 'PA_TASKS'
4777                     and PA_PROJECT_STRUCTURE_PVT1.copy_task_version( p_structure_version_id,
4778                                                        ppev.element_version_id ) = 'Y'
4779                   order by ppev.display_sequence
4780                     ;
4781                    */
4782 
4783         -- Bug 4205167 : Added hint to use Hash Join
4784               INSERT INTO PA_OBJECT_RELATIONSHIPS (
4785                                   object_relationship_id,
4786                                   object_type_from,
4787                                   object_id_from1,
4788                                   object_type_to,
4789                                   object_id_to1,
4790                                   relationship_type,
4791                                   relationship_subtype,
4792                                   Record_Version_Number,
4793                                   CREATED_BY,
4794                                   CREATION_DATE,
4795                                   LAST_UPDATED_BY,
4796                                   LAST_UPDATE_DATE,
4797                                   LAST_UPDATE_LOGIN,
4798                                   weighting_percentage
4799                                   )
4800                  SELECT /*+ USE_HASH(ppev2 ppev1)*/
4801                                pa_object_relationships_s.nextval,
4802                                pobj.object_type_from,
4803                                ppev1.element_version_id,
4804                                pobj.object_type_to,
4805                                ppev2.element_version_id,
4806                                pobj.relationship_type,
4807                                pobj.relationship_subtype,
4808                                pobj.Record_Version_Number,
4809                                l_user_id,
4810                                SYSDATE,
4811                                l_user_id,
4812                                SYSDATE,
4813                                l_login_id,
4814                                pobj.weighting_percentage
4815                     FROM ( SELECT  object_type_from, object_id_from1,
4816                                    object_type_to,   object_id_to1,
4817                                    relationship_type, relationship_subtype,
4818                                    Record_Version_Number, weighting_percentage
4819                              FROM pa_object_relationships
4820                    --bug#3094283         WHERE RELATIONSHIP_TYPE = 'S'
4821                              start with object_id_from1 = p_structure_version_id
4822                                 and RELATIONSHIP_TYPE = 'S'  /* Bug 2881667 - Added this condition */
4823                              connect by  object_id_from1 =  prior object_id_to1
4824                                 and RELATIONSHIP_TYPE = 'S' ) pobj,   /* Bug 2881667 - Added this condition */
4825                          pa_proj_element_versions ppev1,
4826                          pa_proj_element_versions ppev2
4827                  WHERE
4828                    --bug#3094283    ppev1.project_id = l_project_id
4829                    ppev1.attribute15 = pobj.object_id_from1
4830                    --bug#3094283 AND ppev2.project_id = l_project_id
4831                    AND ppev2.attribute15 = pobj.object_id_to1
4832                    and ppev1.parent_structure_version_id = l_new_struct_ver_id
4833                    and ppev2.parent_structure_version_id = l_new_struct_ver_id
4834                    ;
4835 
4836 
4837               INSERT INTO pa_proj_elem_ver_schedule(
4838                             PEV_SCHEDULE_ID
4839                            ,ELEMENT_VERSION_ID
4840                            ,PROJECT_ID
4841                            ,PROJ_ELEMENT_ID
4842                            ,CREATION_DATE
4843                            ,CREATED_BY
4844                            ,LAST_UPDATE_DATE
4845                            ,LAST_UPDATED_BY
4846                            ,SCHEDULED_START_DATE
4847                            ,SCHEDULED_FINISH_DATE
4848                            ,OBLIGATION_START_DATE
4849                            ,OBLIGATION_FINISH_DATE
4850                            ,ACTUAL_START_DATE
4851                            ,ACTUAL_FINISH_DATE
4852                            ,ESTIMATED_START_DATE
4853                            ,ESTIMATED_FINISH_DATE
4854                            ,DURATION
4855                            ,EARLY_START_DATE
4856                            ,EARLY_FINISH_DATE
4857                            ,LATE_START_DATE
4858                            ,LATE_FINISH_DATE
4859                            ,CALENDAR_ID
4860                            ,MILESTONE_FLAG
4861                            ,CRITICAL_FLAG
4862                            ,RECORD_VERSION_NUMBER
4863                            ,LAST_UPDATE_LOGIN
4864                            ,WQ_PLANNED_QUANTITY
4865                            ,PLANNED_EFFORT
4866                            ,ACTUAL_DURATION
4867                            ,ESTIMATED_DURATION
4868                            ,ATTRIBUTE_CATEGORY
4869                            ,ATTRIBUTE1
4870                            ,ATTRIBUTE2
4871                            ,ATTRIBUTE3
4872                            ,ATTRIBUTE4
4873                            ,ATTRIBUTE5
4874                            ,ATTRIBUTE6
4875                            ,ATTRIBUTE7
4876                            ,ATTRIBUTE8
4877                            ,ATTRIBUTE9
4878                            ,ATTRIBUTE10
4879                            ,ATTRIBUTE11
4880                            ,ATTRIBUTE12
4881                            ,ATTRIBUTE13
4882                            ,ATTRIBUTE14
4883                            ,ATTRIBUTE15
4884                            ,source_object_id
4885                            ,source_object_type
4886                            ,CONSTRAINT_TYPE_CODE
4887                            ,CONSTRAINT_DATE
4888                            ,FREE_SLACK
4889                            ,TOTAL_SLACK
4890                            ,EFFORT_DRIVEN_FLAG
4891                            ,LEVEL_ASSIGNMENTS_FLAG
4892                            ,EXT_ACT_DURATION
4893                            ,EXT_REMAIN_DURATION
4894                            ,EXT_SCH_DURATION
4895                            ,DEF_SCH_TOOL_TSK_TYPE_CODE -- 4295770 Added
4896                               )
4897                         SELECT
4898                             pa_proj_elem_ver_schedule_s.nextval
4899                            ,ppev1.ELEMENT_VERSION_ID
4900                            ,l_PROJECT_ID
4901                            ,ppev1.PROJ_ELEMENT_ID
4902                            ,SYSDATE
4903                            ,l_user_id
4904                            ,SYSDATE
4905                            ,l_user_id
4906                            ,ppevs.SCHEDULED_START_DATE
4907                            ,ppevs.SCHEDULED_FINISH_DATE
4908                            ,ppevs.OBLIGATION_START_DATE
4909                            ,ppevs.OBLIGATION_FINISH_DATE
4910                            ,ppevs.ACTUAL_START_DATE
4911                            ,ppevs.ACTUAL_FINISH_DATE
4912                            ,ppevs.ESTIMATED_START_DATE
4913                            ,ppevs.ESTIMATED_FINISH_DATE
4914                            ,ppevs.DURATION
4915                            ,ppevs.EARLY_START_DATE
4916                            ,ppevs.EARLY_FINISH_DATE
4917                            ,ppevs.LATE_START_DATE
4918                            ,ppevs.LATE_FINISH_DATE
4919                            ,ppevs.CALENDAR_ID
4920                            ,ppevs.MILESTONE_FLAG
4921                            ,ppevs.CRITICAL_FLAG
4922                            ,ppevs.RECORD_VERSION_NUMBER
4923                            ,l_login_id
4924                            ,ppevs.WQ_PLANNED_QUANTITY
4925                            ,ppevs.PLANNED_EFFORT
4926                            ,ppevs.ACTUAL_DURATION
4927                            ,ppevs.ESTIMATED_DURATION
4928                            ,ppevs.ATTRIBUTE_CATEGORY
4929                            ,ppevs.ATTRIBUTE1
4930                            ,ppevs.ATTRIBUTE2
4931                            ,ppevs.ATTRIBUTE3
4932                            ,ppevs.ATTRIBUTE4
4933                            ,ppevs.ATTRIBUTE5
4934                            ,ppevs.ATTRIBUTE6
4935                            ,ppevs.ATTRIBUTE7
4936                            ,ppevs.ATTRIBUTE8
4937                            ,ppevs.ATTRIBUTE9
4938                            ,ppevs.ATTRIBUTE10
4939                            ,ppevs.ATTRIBUTE11
4940                            ,ppevs.ATTRIBUTE12
4941                            ,ppevs.ATTRIBUTE13
4942                            ,ppevs.ATTRIBUTE14
4943                            ,ppevs.ATTRIBUTE15
4944                            ,l_PROJECT_ID
4945                            ,'PA_PROJECTS'
4946                            ,ppevs.CONSTRAINT_TYPE_CODE
4947                            ,ppevs.CONSTRAINT_DATE
4948                            ,ppevs.FREE_SLACK
4949                            ,ppevs.TOTAL_SLACK
4950                            ,ppevs.EFFORT_DRIVEN_FLAG
4951                            ,ppevs.LEVEL_ASSIGNMENTS_FLAG
4952                            ,ppevs.EXT_ACT_DURATION
4953                            ,ppevs.EXT_REMAIN_DURATION
4954                            ,ppevs.EXT_SCH_DURATION
4955                            ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE -- 4295770 Added
4956                          FROM pa_proj_elem_ver_schedule ppevs,
4957                               pa_proj_element_versions ppev1
4958                            where ppev1.attribute15 = ppevs.element_version_id
4959                             and  ppevs.project_id = l_project_id
4960                             and  ppev1.project_id = l_project_id
4961                             and  ppev1.parent_structure_version_id = l_new_struct_ver_id
4962                             and  ppev1.object_type = 'PA_TASKS';
4963 
4964     ---------------------------------------------- FP_M changes: Begin
4965     -- Refer to tracking bug 3305199
4966     -- Populate the old and new task version ID in PL/SQL tables
4967 
4968     Select Element_Version_ID, ATTRIBUTE15  Bulk Collect
4969     INTO   l_New_Task_Versions_Tab, l_Old_Task_Versions_Tab
4970     From   pa_proj_element_versions
4971     Where  parent_structure_version_id = l_new_struct_ver_id
4972     and    object_type = 'PA_TASKS'
4973     and    PA_PROJECT_STRUCTURE_PVT1.copy_task_version( l_new_struct_ver_id, element_version_id ) = 'Y'
4974         order by display_sequence;
4975 
4976 --bug 4019845
4977 --comment starts here
4978 /*
4979     PA_Relationship_Pvt.Copy_Intra_Dependency (
4980       P_Source_Ver_Tbl  => l_Old_Task_Versions_Tab,
4981       P_Destin_Ver_Tbl  => l_New_Task_Versions_Tab,
4982       X_Return_Status   => X_Return_Status,
4983       X_Msg_Count       => X_Msg_Count,
4984       X_Msg_Data        => X_Msg_Data
4985     );
4986 
4987         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4988            RAISE FND_API.G_EXC_ERROR;
4989         END IF;
4990 
4991         PA_RELATIONSHIP_PVT.Publish_Inter_Proj_Dep (  -- This API needs to be called
4992         p_publishing_struc_ver_id => p_structure_version_id,
4993         p_previous_pub_struc_ver_id => l_last_pub_str_ver_id,
4994         p_published_struc_ver_id => l_new_struct_ver_id,
4995         X_Return_Status      => X_Return_Status,
4996         X_Msg_Count          => X_Msg_Count,
4997         X_Msg_Data           => X_Msg_Data
4998         );
4999         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5000            RAISE FND_API.G_EXC_ERROR;
5001         END IF;
5002 */
5003 
5004         /* Smukka 01/03/2004 Bug No.3450684                                            */
5005         /* Added call to PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass        */
5006         /* And PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1 API calls to   */
5007         /* copy all the out going and coming in sub project assoications               */
5008 /*
5009         PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
5010                                       p_validate_only           =>  p_validate_only,
5011                                       p_validation_level        =>  p_validation_level,
5012                                       p_calling_module          =>  p_calling_module,
5013                                       p_debug_mode              =>  p_debug_mode,
5014                                       p_max_msg_count           =>  p_max_msg_count,
5015                                       p_commit                  =>  p_commit,
5016                                       p_src_str_version_id      =>  p_structure_version_id,
5017                                       p_dest_str_version_id     =>  l_new_struct_ver_id,  -- Destination Str version id can be of published str also
5018                                       x_return_status           =>  X_Return_Status,
5019                                       x_msg_count               =>  X_Msg_Count,
5020                                       x_msg_data                =>  X_Msg_Data);
5021         IF (X_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
5022            x_msg_count := FND_MSG_PUB.count_msg;
5023            IF x_msg_count = 1 then
5024               pa_interface_utils_pub.get_messages
5025                    (p_encoded        => FND_API.G_TRUE,
5026                     p_msg_index      => 1,
5027                     p_msg_count      => l_msg_count,
5028                     p_msg_data       => l_msg_data,
5029                     p_data           => l_data,
5030                     p_msg_index_out  => l_msg_index_out);
5031                     x_msg_data := l_data;
5032            END IF;
5033            raise FND_API.G_EXC_ERROR;
5034         END IF;
5035         PA_RELATIONSHIP_PVT.Move_CI_Lnk_For_subproj_step1(
5036                                       p_api_version    =>   p_api_version,
5037                                       p_init_msg_list      =>   p_init_msg_list,
5038                                       p_validate_only      =>   p_validate_only,
5039                                       p_validation_level   =>   p_validation_level,
5040                                       p_calling_module     =>   p_calling_module,
5041                                       p_commit             =>   p_commit,
5042                                       p_debug_mode     =>   p_debug_mode,
5043                                       p_max_msg_count      =>   p_max_msg_count,
5044                                       p_src_str_version_id      =>   p_structure_version_id,
5045                                       p_pub_str_version_id      =>   l_new_struct_ver_id,
5046                                       p_last_pub_str_version_id =>   l_last_pub_str_ver_id,
5047                                       x_return_status           =>  x_return_status,
5048                                       x_msg_count               =>  x_msg_count,
5049                                       x_msg_data                =>  x_msg_data);
5050 
5051     --------------------------------------------- FP_M changes: End
5052 */
5053 --end bug 4019845
5054 
5055   update pa_proj_element_versions ppevs1
5056      set attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
5057                           where ppevs2.project_id = l_project_id
5058                             and parent_structure_version_id = p_structure_version_id
5059                             and ppevs2.element_version_id = ppevs1.attribute15
5060                              )
5061    where project_id = l_project_id
5062     and parent_structure_version_id = l_new_struct_ver_id;
5063 
5064 --maansari
5065 
5066     --This has to be done at the end because creating latest version before
5067     --  updating links will break the logic for updating to latest published
5068     --  version.
5069 
5070     --Call Create Structure Version Attr
5071     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
5072      ( p_validate_only               => FND_API.G_FALSE
5073       ,p_structure_version_id        => l_new_struct_ver_id
5074       ,p_structure_version_name      => l_new_struct_ver_name
5075       ,p_structure_version_desc      => l_new_struct_ver_desc
5076       ,p_effective_date              => l_struc_ver_attr_rec.effective_date
5077       ,p_latest_eff_published_flag   => 'Y'
5078       ,p_published_flag              => 'Y'
5079       ,p_locked_status_code          => 'UNLOCK'
5080       ,p_struct_version_status_code  => 'STRUCTURE_PUBLISHED'
5081       ,p_baseline_current_flag       => l_current_baseline_flag
5082       ,p_baseline_original_flag      => l_original_baseline_flag
5083       ,p_change_reason_code          => l_struc_ver_attr_rec.change_reason_code
5084       ,x_pev_structure_id            => l_new_pev_structure_id
5085       ,x_return_status               => l_return_status
5086       ,x_msg_count                   => l_msg_count
5087       ,x_msg_data                    => l_msg_data );
5088 
5089 
5090     l_msg_count := FND_MSG_PUB.count_msg;
5091     if (l_msg_count > 0) then
5092       x_msg_count := l_msg_count;
5093       if x_msg_count = 1 then
5094         x_msg_data := l_msg_data;
5095       end if;
5096       raise FND_API.G_EXC_ERROR;
5097     end if;
5098 
5099 --bug 4019845
5100 /*
5101     --bug 3047602: rollup dates
5102     OPEN get_all_new_childs(l_new_struct_ver_id);
5103     FETCH get_all_new_childs bulk collect into l_task_ver_ids_tbl;
5104     CLOSE get_all_new_childs;
5105 
5106 update pa_proj_elem_ver_structure
5107    set status_code = 'STRUCTURE_WORKING',
5108        LOCKED_BY_PERSON_ID = (select locked_by_person_id
5109                                 from pa_proj_elem_ver_structure
5110                                where project_id = l_project_id
5111                                  and element_version_id = p_structure_version_id),
5112        LOCK_STATUS_CODE = 'LOCKED'
5113  where project_id = l_project_id and element_version_id = l_new_struct_ver_id;
5114 
5115        --3755117 for copying mapping
5116        BEGIN
5117          PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
5118            p_context             => 'PUBLISH_VERSION'
5119           ,p_src_project_id      => l_project_id
5120           ,p_dest_project_id     => l_project_id
5121           ,p_src_str_version_id  => p_structure_version_id
5122           ,p_dest_str_version_id => l_new_struct_ver_id
5123           ,x_return_status       => x_return_status
5124           ,x_msg_count           => x_msg_count
5125           ,x_msg_data            => x_msg_data
5126          );
5127 
5128          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5129             RAISE FND_API.G_EXC_ERROR;
5130          END IF;
5131        EXCEPTION
5132          WHEN OTHERS THEN
5133            fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5134                                            p_procedure_name => 'PUBLISH_STRUCTURE',
5135                                            p_error_text     => SUBSTRB('PA_PROJ_STRUC_MAPPING_PUB.COPY_MAPPING:'||SQLERRM,1,240));
5136            RAISE FND_API.G_EXC_ERROR;
5137        END;
5138 */
5139 --end bug 4019845
5140 
5141        -- Changes added by skannoji
5142        -- Added code for doosan customer
5143          /* Bug #: 3305199 SMukka                                                         */
5144          /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
5145          /* src_versions_tab   PA_PLSQL_DATATYPES.IdTabTyp;                               */
5146          /* dest_versions_tab  PA_PLSQL_DATATYPES.IdTabTyp;                               */
5147 --bug 4019845
5148 /*
5149        Declare
5150          src_versions_tab   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5151          dest_versions_tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5152          prev_pub_tab       SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); --bug 3847386
5153        Begin
5154          src_versions_tab.extend(1);
5155          dest_versions_tab.extend(1);
5156          src_versions_tab(1)  := p_structure_version_id;
5157          dest_versions_tab(1) :=  l_new_struct_ver_id;
5158          prev_pub_tab.extend(1);   --bug 3847386
5159          prev_pub_tab(1) := l_last_pub_str_ver_id;   --bug 3847386
5160          -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
5161          --Smukka Bug No. 3474141 Date 03/01/2004
5162          --moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block
5163          BEGIN
5164              PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
5165               (
5166                 p_source_project_id            => l_project_id
5167                ,p_target_project_id            => l_project_id
5168                ,p_src_sv_ids_tbl               => src_Versions_Tab
5169                ,p_target_sv_ids_tbl            => dest_Versions_Tab
5170                ,p_copy_act_from_str_ids_tbl    => prev_pub_tab --bug 3847386
5171                ,x_return_status                => x_return_status
5172                ,x_msg_count                    => x_msg_count
5173                ,x_Msg_data                     => x_msg_data
5174               );
5175           EXCEPTION
5176               WHEN OTHERS THEN
5177                    fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5178                                            p_procedure_name => 'PUBLISH_STRUCTURE',
5179                                            p_error_text     => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
5180               RAISE FND_API.G_EXC_ERROR;
5181           END;
5182          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5183             RAISE FND_API.G_EXC_ERROR;
5184          END IF;
5185        End;
5186        -- till here by skannoji
5187 */
5188 --end bug 4019845
5189 
5190 
5191 /* Removed for bug 3850488.
5192        BEGIN
5193          PA_TASK_ASSIGNMENTS_PVT.Copy_Missing_Unplanned_Asgmts(
5194             p_project_id => l_project_id
5195            ,p_old_structure_version_id => l_last_pub_str_ver_id
5196            ,p_new_structure_version_id => l_new_struct_ver_id
5197            ,x_msg_count => x_msg_count
5198            ,x_msg_data => x_msg_data
5199            ,x_return_status => x_return_status
5200          );
5201        EXCEPTION
5202          WHEN OTHERS THEN
5203                    fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5204                                            p_procedure_name => 'PUBLISH_STRUCTURE',
5205                                            p_error_text     => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_missing_unplanned_asgmts:'||SQLERRM,1,240));
5206            RAISE FND_API.G_EXC_ERROR;
5207        END;
5208        If (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5209          RAISE FND_API.G_EXC_ERROR;
5210        END IF;
5211 */
5212 
5213 /* --hsiu: no need to rollup since the copied structure version is already rolled-up
5214     IF l_task_ver_ids_tbl.count > 0 THEN
5215       --rollup dates for new published version
5216 
5217       PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
5218                        p_commit => FND_API.G_FALSE,
5219                        p_element_versions => l_task_ver_ids_tbl,
5220                        x_return_status => l_return_status,
5221                        x_msg_count => l_msg_count,
5222                        x_msg_data => l_msg_data);
5223 
5224       l_msg_count := FND_MSG_PUB.count_msg;
5225       if (l_msg_count > 0) then
5226         x_msg_count := l_msg_count;
5227         if x_msg_count = 1 then
5228           x_msg_data := l_msg_data;
5229         end if;
5230         raise FND_API.G_EXC_ERROR;
5231       end if;
5232     END IF;
5233     --end bug 3047602
5234 */
5235 --    error_msg('before progress report');
5236 
5237 
5238 --      IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'FINANCIAL') = 'Y') THEN
5239 
5240 --bug 4019845
5241 /*
5242       IF (l_financial_type = 'Y') THEN
5243 
5244     select start_date, completion_date
5245     into l_proj_start_date, l_proj_completion_date
5246     from pa_projects_all
5247     where project_id = l_project_id;
5248 
5249     --dbms_output.put_line('sycn up api');
5250     --Call sync-up API
5251 --    error_msg('import task');
5252 
5253     PA_XC_PROJECT_PUB.import_task
5254       ( p_project_id               => l_project_id
5255       ,p_task_reference            => NULL
5256       ,p_task_name                 => NULL
5257       ,p_task_start_date           => NULL
5258       ,p_task_end_date             => NULL
5259       ,p_parent_task_reference     => NULL
5260       ,p_task_number               => NULL
5261       ,p_wbs_level                 => NULL
5262       ,p_milestone                 => NULL
5263       ,p_duration                  => NULL
5264       ,p_duration_unit             => NULL
5265       ,p_early_start_date          => NULL
5266       ,p_early_finish_date         => NULL
5267       ,p_late_start_date           => NULL
5268       ,p_late_finish_date          => NULL
5269       ,p_display_seq               => NULL
5270       ,p_login_user_name           => NULL
5271       ,p_critical_path             => NULL
5272       ,p_sub_project_id            => NULL
5273       ,p_attribute7                => NULL
5274       ,p_attribute8                => NULL
5275       ,p_attribute9                => NULL
5276       ,p_attribute10               => NULL
5277       ,p_progress_report           => NULL
5278       ,p_progress_status           => NULL
5279       ,p_progress_comments         => NULL
5280       ,p_progress_asof_date        => NULL
5281       ,p_predecessors              => NULL
5282       ,p_structure_version_id      => l_new_struct_ver_id
5283       ,p_calling_mode              => 'PUBLISH' );
5284 
5285     l_i_msg_count := 0;
5286 --    error_msg('import project');
5287     PA_XC_PROJECT_PUB.import_project
5288       (p_user_id                   => l_user_id
5289       ,p_commit                    => 'N'
5290       ,p_debug_mode                => p_debug_mode
5291       ,p_project_id                => l_project_id
5292       ,p_project_mpx_start_date    => fnd_date.date_to_canonical(l_proj_start_date)
5293       ,p_project_mpx_end_date      => fnd_date.date_to_canonical(l_proj_completion_date)
5294       ,p_task_mgr_override         => NULL
5295       ,p_task_pgs_override         => NULL
5296       ,p_process_id                => NULL
5297       ,p_language                  => NULL
5298       ,p_delimiter                 => NULL
5299       ,p_responsibility_id         => p_responsibility_id
5300       ,p_structure_id              => NULL
5301       ,p_structure_version_id      => l_new_struct_ver_id
5302       ,p_calling_mode              => 'PUBLISH'
5303       ,x_msg_count                 => l_i_msg_count
5304       ,x_msg_data                  => l_i_msg_data
5305       ,x_return_status             => l_i_return_status);
5306 
5307 
5308 --dbms_output.put_line('import proj: '||l_i_return_status);
5309     --Check for error
5310 --    IF (x_msg_count > 0) THEN
5311 --      FOR i IN 1..x_msg_count LOOP
5312 --        PA_UTILS.ADD_MESSAGE('PA',l_i_msg_data(i));
5313 --      END LOOP;
5314 --    END IF;
5315 
5316     l_msg_count := FND_MSG_PUB.count_msg;
5317     if l_msg_count > 0 then
5318       x_msg_count := l_msg_count;
5319       if x_msg_count = 1 then
5320 --        x_msg_data := l_msg_data;
5321             pa_interface_utils_pub.get_messages
5322             (p_encoded        => FND_API.G_TRUE,
5323              p_msg_index      => 1,
5324              p_msg_count      => l_msg_count,
5325              p_msg_data       => l_msg_data,
5326              p_data           => l_data,
5327              p_msg_index_out  => l_msg_index_out);
5328              x_msg_data := l_data;
5329       end if;
5330       raise FND_API.G_EXC_ERROR;
5331     end if;
5332 
5333     END IF; --for checking structure type
5334 */
5335 --bug 4019845
5336 
5337 
5338 /*  removed
5339     IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'WORKPLAN') = 'Y') THEN
5340       --API for progress report.
5341 */
5342 /*  removed
5343       PA_PROGRESS_PUB.CREATE_PROGRESS_FOR_WBS(
5344         p_commit               => FND_API.G_FALSE
5345        ,p_project_id           => l_project_id
5346        ,p_structure_version_id => l_new_struct_ver_id
5347        ,x_return_status        => l_return_status
5348        ,x_msg_count            => l_msg_count
5349        ,x_msg_data             => l_msg_data
5350       );
5351 */
5352 /*  removed
5353       IF (p_debug_mode = 'Y') THEN
5354         pa_debug.debug('progress report api');
5355       END IF;
5356 
5357 
5358       --Check if there is any error.
5359       l_msg_count := FND_MSG_PUB.count_msg;
5360       IF l_msg_count > 0 THEN
5361         x_msg_count := l_msg_count;
5362         IF x_msg_count = 1 THEN
5363           x_msg_data := l_msg_data;
5364         END IF;
5365         RAISE FND_API.G_EXC_ERROR;
5366       END IF;
5367 
5368     END IF;
5369 */
5370 
5371 --bug 4019845
5372 /*
5373 --bug 3830932
5374 --moving before copy project dates so that latest structure version will be selected in the API
5375 update pa_proj_elem_ver_structure
5376    set status_code = 'STRUCTURE_PUBLISHED',
5377        LOCKED_BY_PERSON_ID = NULL,
5378        LOCK_STATUS_CODE = 'UNLOCKED'
5379  where project_id = l_project_id and element_version_id = l_new_struct_ver_id;
5380 --end bug 3830932
5381 
5382 -- anlee
5383 -- Dates changes
5384 --    IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_new_struct_ver_id, 'WORKPLAN') = 'Y') THEN
5385     IF (l_workplan_type = 'Y') THEN
5386       OPEN get_scheduled_dates(l_project_id, l_new_struct_ver_id);
5387       FETCH get_scheduled_dates INTO l_scheduled_start_date, l_scheduled_finish_date;
5388       CLOSE get_scheduled_dates;
5389 
5390       OPEN get_proj_rec_ver_number(l_project_id);
5391       FETCH get_proj_rec_ver_number INTO l_proj_record_ver_number;
5392       CLOSE get_proj_rec_ver_number;
5393 
5394       PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
5395         p_validate_only          => FND_API.G_FALSE
5396        ,p_project_id             => l_project_id
5397        ,p_date_type              => 'SCHEDULED'
5398        ,p_start_date             => l_scheduled_start_date
5399        ,p_finish_date            => l_scheduled_finish_date
5400        ,p_record_version_number  => l_proj_record_ver_number
5401        ,x_return_status          => l_return_status
5402        ,x_msg_count              => l_msg_count
5403        ,x_msg_data               => l_msg_data );
5404 
5405       --Check if there is any error.
5406       l_msg_count := FND_MSG_PUB.count_msg;
5407       IF l_msg_count > 0 THEN
5408         x_msg_count := l_msg_count;
5409         IF x_msg_count = 1 THEN
5410           x_msg_data := l_msg_data;
5411         END IF;
5412         RAISE FND_API.G_EXC_ERROR;
5413       END IF;
5414     END IF;
5415 -- End of changes
5416 
5417 -- hsiu
5418 -- project dates changes
5419 -- copy dates to transaction dates if 1, share structure
5420 --                                    2, auto task update is enabled
5421 --   IF ((PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'WORKPLAN') = 'Y') AND
5422 --      (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'FINANCIAL') = 'Y')) THEN
5423    IF ((l_workplan_type = 'Y') AND
5424       (l_financial_type = 'Y')) THEN
5425      --select workplan attr
5426      IF (PA_WORKPLAN_ATTR_UTILS.CHECK_AUTO_DATE_SYNC_ENABLED(l_proj_element_id) = 'Y') THEN
5427        --Copy to transaction date
5428        PA_PROJECT_DATES_PUB.COPY_PROJECT_DATES(
5429          p_project_id => l_project_id,
5430          x_return_status => l_return_status,
5431          x_msg_count => l_msg_count,
5432          x_msg_data => l_msg_data
5433        );
5434 
5435        if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5436          x_msg_count := FND_MSG_PUB.count_msg;
5437          if x_msg_count = 1 then
5438            x_msg_data := l_msg_data;
5439          end if;
5440          raise FND_API.G_EXC_ERROR;
5441        end if;
5442 
5443      END IF;
5444    END IF;
5445 -- end of changes
5446 */
5447 --end bug 4019845
5448 
5449 --bug 4019845
5450 /*
5451    --hsiu: task status
5452    --push down and rollup
5453    PA_STRUCT_TASK_ROLLUP_PUB.Task_Stat_Pushdown_Rollup(
5454           p_structure_version_id => l_new_struct_ver_id
5455          ,x_return_status => x_return_status
5456          ,x_msg_count => x_msg_count
5457          ,x_msg_data => x_msg_data
5458         );
5459    IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5460      RAISE FND_API.G_EXC_ERROR;
5461    END IF;
5462    --end task status changes
5463 */
5464 --end bug 4019845
5465 
5466 /* remove
5467    --hsiu: prorate tasks for tasks that have to be deleted peer tasks
5468    l_parent_ver_id := l_parent_tbl.FIRST;
5469    FOR i IN 1..l_parent_tbl.COUNT LOOP
5470      --if it has child then prorate
5471 --     IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_parent_ver_id) = 'N') THEN
5472        OPEN is_summary_elem(l_parent_ver_id);
5473        FETCH is_summary_elem INTO l_dummy;
5474        IF is_summary_elem%FOUND THEN
5475          PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
5476               p_task_version_id => l_parent_ver_id
5477              ,x_return_status => x_return_status
5478              ,x_msg_count => x_msg_count
5479              ,x_msg_data => x_msg_data);
5480          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5481            CLOSE is_summary_elem;
5482            RAISE FND_API.G_EXC_ERROR;
5483          END IF;
5484        END IF;
5485        CLOSE is_summary_elem;
5486 --     END IF;
5487      l_parent_ver_id := l_parent_tbl.NEXT(l_parent_ver_id);
5488    END LOOP;
5489 */
5490 
5491 /* --moved before copying tasks
5492     --hsiu
5493     --changes for task status
5494     --tasks might be deleted because childs are also deleted when deleting
5495     -- a task
5496     l_del_task_cnt := 0;
5497     LOOP
5498       EXIT when l_del_task_cnt = l_tbd_task_ver_id.count;
5499       l_del_task_cnt := l_del_task_cnt + 1;
5500 
5501       OPEN get_tbd_tasks_info(l_tbd_task_ver_id(l_del_task_cnt));
5502       FETCH get_tbd_tasks_info into l_tbd_tasks_info_rec;
5503       IF get_tbd_tasks_info%FOUND THEN
5504         PA_TASK_PVT1.Delete_Task_Ver_wo_val(
5505              p_structure_version_id  => l_tbd_tasks_info_rec.parent_structure_version_id
5506             ,p_task_version_id       => l_tbd_tasks_info_rec.element_version_id
5507             ,p_record_version_number => l_tbd_tasks_info_rec.record_version_number
5508             ,x_return_status         => l_return_status
5509             ,x_msg_count         => l_msg_count
5510             ,x_msg_data              => l_msg_data
5511         );
5512 
5513         if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5514           x_msg_count := FND_MSG_PUB.count_msg;
5515           if x_msg_count = 1 then
5516             x_msg_data := l_msg_data;
5517           end if;
5518           raise FND_API.G_EXC_ERROR;
5519         end if;
5520 
5521       END IF;
5522       CLOSE get_tbd_tasks_info;
5523     END LOOP;
5524     --end changes for task status
5525 */
5526 
5527     --Change the status of the working version to 'STRUCTURE_WORKING'
5528     update PA_PROJ_ELEM_VER_STRUCTURE
5529     set status_code = 'STRUCTURE_WORKING',
5530         record_version_number = nvl(record_version_number,0)+1
5531     where pev_structure_id = l_pev_structure_id;
5532 
5533 
5534 --bug 4479392
5535 --Update the wbs_flag for the working version as well.
5536       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
5537                                p_project_id => l_project_id,
5538                                p_structure_version_id => p_structure_version_id,
5539                                p_update_wbs_flag => 'Y',
5540                                x_return_status => l_return_status,
5541                                x_msg_count => l_msg_count,
5542                                x_msg_data => l_msg_data
5543                              );
5544       If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5545         x_msg_count := FND_MSG_PUB.count_msg;
5546         if x_msg_count = 1 then
5547           x_msg_data := l_msg_data;
5548         end if;
5549         raise FND_API.G_EXC_ERROR;
5550       end if;
5551 
5552 --end bug 4479392
5553 
5554     --bug 3035902
5555     --Change the process flag of the published structure version to Y if
5556     --the working version is set to Y
5557     --Bug No 3450684 SMukka Commented if condition
5558     --IF (PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(l_project_id,
5559       --  p_structure_version_id) = 'Y') THEN
5560       --set the flag for the published version
5561       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
5562                                p_project_id => l_project_id,
5563                                p_structure_version_id => l_new_struct_ver_id,
5564                                p_update_wbs_flag => 'Y',
5565                                x_return_status => l_return_status,
5566                                x_msg_count => l_msg_count,
5567                                x_msg_data => l_msg_data
5568                              );
5569       If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5570         x_msg_count := FND_MSG_PUB.count_msg;
5571         if x_msg_count = 1 then
5572           x_msg_data := l_msg_data;
5573         end if;
5574         raise FND_API.G_EXC_ERROR;
5575       end if;
5576     --END IF;
5577     --end bug 3035902
5578 
5579 --bug 4019845
5580 /*
5581  -- Added this for FP_M changes -- Bhumesh
5582   PA_PROGRESS_PUB.Pull_Summarized_Actuals (
5583      P_Project_ID       =>  l_Project_ID
5584     ,p_Calling_Mode     =>  'PUBLISH'
5585     ,x_return_status    =>  x_return_status
5586     ,x_msg_count        =>  x_msg_count
5587     ,x_msg_data         =>  x_msg_data
5588   );
5589 
5590   if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
5591       x_msg_count := FND_MSG_PUB.count_msg;
5592       if x_msg_count = 1 then
5593         x_msg_data := l_msg_data;
5594       end if;
5595       raise FND_API.G_EXC_ERROR;
5596   end if;
5597 
5598 IF p_pub_prog_flag = 'Y' THEN
5599   PA_PROGRESS_PUB.Publish_Progress(
5600      p_project_id               => l_Project_ID
5601     --,p_structure_version_id     => p_structure_version_id -- Bug 3839288
5602     ,p_pub_structure_version_id   => l_new_struct_ver_id  -- Bug 3839288
5603     ,x_upd_new_elem_ver_id_flag   => l_upd_new_elem_ver_id_flag -- added by rtarway for BUG 3951024
5604     ,x_as_of_date         => l_as_of_date -- Bug 3839288
5605     ,x_task_weight_basis_code     => l_task_weight_basis_code -- Bug 3839288
5606     ,x_return_status        => x_return_status
5607     ,x_msg_count            => x_msg_count
5608     ,x_msg_data             => x_msg_data
5609   );
5610 
5611   if (x_return_status <> FND_API.G_RET_STS_SUCCESS) then
5612       x_msg_count := FND_MSG_PUB.count_msg;
5613       if x_msg_count = 1 then
5614         x_msg_data := l_msg_data;
5615       end if;
5616       raise FND_API.G_EXC_ERROR;
5617   end if;
5618 
5619 END IF;
5620 */
5621 --end bug 4019845
5622 
5623  -- End
5624 
5625     IF l_debug_mode = 'Y' THEN
5626         pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'Before opening sel_other_structure_ver p_structure_version_id='||p_structure_version_id, 3);
5627     END IF;
5628 
5629     --hsiu
5630     --changes for advanced structure
5631     --Delete other working structures after publishing
5632     OPEN sel_other_structure_ver(p_structure_version_id);
5633     LOOP
5634       FETCH sel_other_structure_ver into l_del_struc_ver_id, l_del_struc_ver_rvn;
5635       EXIT WHEN sel_other_structure_ver%NOTFOUND;
5636 
5637     IF l_debug_mode = 'Y' THEN
5638         pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'Before calling PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val', 3);
5639         pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'l_del_struc_ver_id='||l_del_struc_ver_id||' l_del_struc_ver_rvn='||l_del_struc_ver_rvn, 3);
5640     END IF;
5641 
5642       PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val(
5643               p_structure_version_id => l_del_struc_ver_id
5644              ,p_record_version_number => l_del_struc_ver_rvn
5645              ,x_return_status => l_return_status
5646              ,x_msg_count => l_msg_count
5647              ,x_msg_data => l_msg_data
5648             );
5649 
5650       --Check if there is any error.
5651       l_msg_count := FND_MSG_PUB.count_msg;
5652 
5653     IF l_debug_mode = 'Y' THEN
5654         pa_debug.write('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE', 'After calling PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_wo_val l_return_status='||l_return_status||' l_msg_count='||l_msg_count, 3);
5655     END IF;
5656 
5657       IF l_msg_count > 0  OR l_return_status ='E' THEN
5658         x_msg_count := l_msg_count;
5659         IF x_msg_count = 1 THEN
5660           x_msg_data := l_msg_data;
5661         END IF;
5662         CLOSE sel_other_structure_ver;
5663         RAISE FND_API.G_EXC_ERROR;
5664       END IF;
5665 
5666     END LOOP;
5667     CLOSE sel_other_structure_ver;
5668     --end changes
5669 
5670 
5671     x_published_struct_ver_id := l_new_struct_ver_id;
5672 
5673     --bug 3010538
5674     IF (p_calling_module = 'SELF_SERVICE') THEN
5675       --called separately if calling from AMG
5676       PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP(
5677         p_calling_context => 'PUBLISH',
5678         p_project_id => l_project_id,
5679 --        p_structure_version_id => l_last_pub_str_ver_id,   --SMukka Commented
5680         p_structure_version_id => p_structure_version_id,   --Smukka Added line
5681         p_pub_struc_ver_id => l_new_struct_ver_id,
5682         p_pub_prog_flag => p_pub_prog_flag,
5683         x_return_status => l_return_status,
5684         x_msg_count => l_msg_count,
5685         x_msg_data => l_msg_data
5686       );
5687 
5688       --Check if there is any error.
5689       l_msg_count := FND_MSG_PUB.count_msg;
5690       IF l_msg_count > 0 THEN
5691         x_msg_count := l_msg_count;
5692         IF x_msg_count = 1 THEN
5693           x_msg_data := l_msg_data;
5694         END IF;
5695         RAISE FND_API.G_EXC_ERROR;
5696       END IF;
5697     END IF;
5698     --end bug 3010538
5699 
5700 --bug 4019845
5701 /*
5702     -- BUg 3627315 Issue 8 : Added following call
5703     --The follwoing api is called to push progress data to PJI for the new
5704     --structure version.
5705     BEGIN
5706          --bug 3822112
5707          if l_share_flag = 'Y'
5708          then
5709             l_copy_actuals_flag := 'N';
5710          end if;
5711     PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC(
5712            p_project_id               => l_Project_ID
5713           ,p_src_str_ver_id           => p_structure_version_id
5714           ,p_dst_str_ver_id           => l_new_struct_ver_id
5715           ,p_pub_wp_with_prog_flag    => p_pub_prog_flag
5716           ,p_calling_context          => 'PUBLISH'
5717           ,p_copy_actuals_flag        => l_copy_actuals_flag    --bug 3822112
5718           ,p_last_pub_str_version_id  => l_last_pub_str_ver_id -- Modified rakragha 28-JUL-2004
5719           ,x_return_status            => x_return_status
5720           ,x_msg_count                => x_msg_count
5721           ,x_msg_data                 => x_msg_data
5722           );
5723     EXCEPTION
5724       WHEN OTHERS THEN
5725           fnd_msg_pub.add_exc_msg(p_pkg_name       =>
5726             'PA_PROJECT_STRUCTURE_PVT1',
5727                     p_procedure_name => 'publish_structure',
5728                     p_error_text     => SUBSTRB('Call PA_PROGRESS_PUB.COPY_PROGRESS_ACT_ETC:'||SQLERRM,1,120));
5729                    RAISE FND_API.G_EXC_ERROR;
5730     END;
5731 
5732     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5733         x_msg_count := FND_MSG_PUB.count_msg;
5734         IF x_msg_count = 1 THEN
5735             x_msg_data := l_msg_data;
5736         END IF;
5737         raise FND_API.G_EXC_ERROR;
5738     END IF;
5739 */
5740 --bug 4019845
5741 
5742 
5743 --bug 4019845
5744 /*
5745     -- Bug 3839288 Begin
5746     IF p_pub_prog_flag = 'Y' AND l_as_of_date IS NOT NULL
5747     THEN
5748     BEGIN
5749 
5750         pa_progress_pub.populate_pji_tab_for_plan(
5751              p_init_msg_list    => FND_API.G_FALSE
5752             ,p_commit       => FND_API.G_FALSE
5753             --,p_calling_module => p_calling_module
5754             ,p_project_id       => l_Project_ID
5755             ,p_structure_version_id => l_new_struct_ver_id
5756             ,p_baselined_str_ver_id => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(l_Project_ID)
5757             ,p_structure_type       => 'WORKPLAN'
5758             ,x_return_status        => x_return_status
5759             ,x_msg_count            => x_msg_count
5760             ,x_msg_data             => x_msg_data
5761             );
5762     EXCEPTION
5763         WHEN OTHERS THEN
5764             fnd_msg_pub.add_exc_msg(p_pkg_name       =>
5765                 'PA_PROJECT_STRUCTURE_PVT1',
5766                     p_procedure_name => 'publish_structure',
5767                     p_error_text     => SUBSTRB('Call pa_progress_pub.populate_pji_tab_for_plan:'||SQLERRM,1,120));
5768             RAISE FND_API.G_EXC_ERROR;
5769     END;
5770 
5771     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5772         x_msg_count := FND_MSG_PUB.count_msg;
5773         IF x_msg_count = 1 THEN
5774             x_msg_data := l_msg_data;
5775         END IF;
5776         raise FND_API.G_EXC_ERROR;
5777     END IF;
5778 
5779     BEGIN
5780            PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
5781                  p_init_msg_list             => FND_API.G_FALSE
5782             --,p_calling_module      => p_calling_module
5783                 ,p_commit                    => FND_API.G_FALSE
5784                 --,p_validate_only             => p_validate_only
5785                 ,p_project_id                => l_Project_ID
5786                 ,p_structure_version_id      => l_new_struct_ver_id
5787                 ,p_as_of_date                => l_as_of_date
5788                 ,p_wp_rollup_method          => l_task_weight_basis_code
5789                 ,p_rollup_entire_wbs         => 'Y'
5790                 ,p_working_wp_prog_flag      => 'N'
5791                 ,p_upd_new_elem_ver_id_flag  => l_upd_new_elem_ver_id_flag --rtarway, 3951024
5792                 ,x_return_status             => x_return_status
5793                 ,x_msg_count                 => x_msg_count
5794                 ,x_msg_data                  => x_msg_data);
5795     EXCEPTION
5796         WHEN OTHERS THEN
5797             fnd_msg_pub.add_exc_msg(p_pkg_name       =>
5798                 'PA_PROJECT_STRUCTURE_PVT1',
5799                     p_procedure_name => 'publish_structure',
5800                     p_error_text     => SUBSTRB('Call PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT:'||SQLERRM,1,120));
5801             RAISE FND_API.G_EXC_ERROR;
5802     END;
5803 
5804 
5805     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5806         x_msg_count := FND_MSG_PUB.count_msg;
5807         IF x_msg_count = 1 THEN
5808             x_msg_data := l_msg_data;
5809         END IF;
5810         raise FND_API.G_EXC_ERROR;
5811     END IF;
5812 
5813        END IF;
5814     -- Bug 3839288 End
5815 */
5816 --end bug 4019845
5817 
5818 --bug 4019845
5819 /*
5820     IF p_pub_prog_flag = 'Y'
5821     THEN
5822   --bug 3851528
5823         BEGIN
5824            PA_PROGRESS_UTILS.clear_prog_outdated_flag(
5825                  p_project_id                => l_Project_ID
5826                 ,p_structure_version_id      => l_new_struct_ver_id
5827                 ,p_object_id                 => null
5828                 ,p_object_type               => null
5829                 ,x_return_status             => x_return_status
5830                 ,x_msg_count                 => x_msg_count
5831                 ,x_msg_data                  => x_msg_data);
5832         EXCEPTION
5833                 WHEN OTHERS THEN
5834                         fnd_msg_pub.add_exc_msg(p_pkg_name       =>
5835                                 'PA_PROJECT_STRUCTURE_PVT1',
5836                                         p_procedure_name => 'publish_structure',
5837                                         p_error_text     => SUBSTRB('Call PA_PROGRESS_UTILS.clear_prog_outdated_flag:'||SQLERRM,1,120));
5838                         RAISE FND_API.G_EXC_ERROR;
5839         END;
5840 
5841 
5842         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5843                 x_msg_count := FND_MSG_PUB.count_msg;
5844                 IF x_msg_count = 1 THEN
5845                         x_msg_data := l_msg_data;
5846                 END IF;
5847                 raise FND_API.G_EXC_ERROR;
5848         END IF;
5849   --bug 3851528
5850 
5851     END IF; -- p_pub_prog_flag = 'Y' THEN
5852 */
5853 --end bug 4019845
5854 
5855     -- Start Bug : 4096218
5856     IF p_calling_module = 'AMG' THEN
5857             /* 4096218 Commenting , as we have changed the global varray name to G_DELETED_TASK_IDS_FROM_OP
5858                        and now we are expected to pass the varray of 'to be deleted' task projelementids ,
5859                not version ids.
5860             PA_PROJECT_PUB.G_DELETED_TASK_VER_IDS_FROM_OP := l_tbd_task_ver_id;
5861         */
5862         PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP := l_tbd_task_id;
5863     END IF;
5864     -- End Bug : 4096218
5865 
5866     x_return_status := FND_API.G_RET_STS_SUCCESS;
5867 
5868     if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
5869       x_msg_count := FND_MSG_PUB.count_msg;
5870       if x_msg_count = 1 then
5871         x_msg_data := l_msg_data;
5872       end if;
5873       raise FND_API.G_EXC_ERROR;
5874     end if;
5875 
5876     IF (p_debug_mode = 'Y') THEN
5877       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.PUBLISH_STRUCTURE end');
5878     END IF;
5879 
5880   EXCEPTION
5881     when FND_API.G_EXC_ERROR then
5882       if p_commit = FND_API.G_TRUE then
5883          rollback to publish_structure_pvt;
5884       else
5885          --need to rollback because generate error page performs a commit
5886          rollback;
5887       end if;
5888       --get errors
5889       FOR i IN 1..FND_MSG_PUB.COUNT_MSG LOOP
5890         FND_MSG_PUB.GET(p_encoded=>'F',
5891                         p_data=>l_messages(i),
5892                         p_msg_index_out => l_msg_index_out);
5893       END LOOP;
5894 
5895       --create error clob
5896       PA_PROJECT_STRUCTURE_PVT1.Generate_Error_Page(
5897         p_structure_version_id => p_structure_version_id,
5898         p_error_tbl            => l_messages,
5899         x_page_content_id      => l_page_content_id,
5900         x_return_status        => l_return_status,
5901         x_msg_count            => l_msg_count,
5902         x_msg_data             => l_msg_data
5903       );
5904 
5905       x_msg_count := FND_MSG_PUB.count_msg;
5906       x_return_status := FND_API.G_RET_STS_ERROR;
5907     when FND_API.G_EXC_UNEXPECTED_ERROR then
5908       if p_commit = FND_API.G_TRUE then
5909          rollback to publish_structure_pvt;
5910       end if;
5911       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5912       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5913                               p_procedure_name => 'PUBLISH_STRUCTURE',
5914                               p_error_text     => SUBSTRB(SQLERRM,1,240));
5915     when OTHERS then
5916       if p_commit = FND_API.G_TRUE then
5917          rollback to publish_structure_pvt;
5918       end if;
5919       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5920       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
5921                               p_procedure_name => 'PUBLISH_STRUCTURE',
5922                               p_error_text     => SUBSTRB(SQLERRM,1,240));
5923       raise;
5924   END Publish_Structure;
5925 
5926 
5927 -- API name                      : UPDATE_LATEST_PUB_LINKS
5928 -- Type                          : Private Procedure
5929 -- Pre-reqs                      : None
5930 -- Return Value                  : N/A
5931 -- Parameters
5932 --   p_api_version                       IN  NUMBER      := 1.0
5933 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
5934 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
5935 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
5936 --   p_validation_level                  IN  VARCHAR2    := 100
5937 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
5938 --   p_debug_mode                        IN  VARCHAR2    := 'N'
5939 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5940 --   p_orig_project_id                   IN  NUMBER
5941 --   p_orig_structure_id                 IN  NUMBER
5942 --   p_orig_struc_ver_id                 IN  NUMBER
5943 --   p_orig_task_ver_id                  IN  NUMBER
5944 --   p_new_project_id                    IN  NUMBER
5945 --   p_new_structure_id                  IN  NUMBER
5946 --   p_new_struc_ver_id                  IN  NUMBER
5947 --   p_new_task_ver_id                   IN  NUMBER
5948 --   x_return_status     OUT     VARCHAR2
5949 --   x_msg_count     OUT     NUMBER
5950 --   x_msg_data  OUT     VARCHAR2
5951 --
5952 --  History
5953 --
5954 --  25-JUN-01   HSIU              -Created
5955 --
5956 --
5957 
5958 
5959   procedure UPDATE_LATEST_PUB_LINKS
5960   (
5961    p_api_version                       IN  NUMBER      := 1.0
5962    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
5963    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
5964    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
5965    ,p_validation_level                  IN  VARCHAR2    := 100
5966    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
5967    ,p_debug_mode                        IN  VARCHAR2    := 'N'
5968    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5969    ,p_orig_project_id                   IN  NUMBER
5970    ,p_orig_structure_id                 IN  NUMBER
5971    ,p_orig_struc_ver_id                 IN  NUMBER
5972    ,p_orig_task_ver_id                  IN  NUMBER
5973    ,p_new_project_id                    IN  NUMBER
5974    ,p_new_structure_id                  IN  NUMBER
5975    ,p_new_struc_ver_id                  IN  NUMBER
5976    ,p_new_task_ver_id                   IN  NUMBER
5977    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5978    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
5979    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5980   )
5981   IS
5982     cursor get_from_id(c_element_version_id NUMBER) IS
5983       select object_relationship_id, object_id_from1 object_id_from,
5984              object_type_from, record_version_number
5985         from pa_object_relationships
5986        where relationship_type = 'L'
5987          and object_id_to1 = c_element_version_id
5988          and object_type_to IN ('PA_TASKS','PA_STRUCTURES');
5989     l_from_object_info        get_from_id%ROWTYPE;
5990 
5991     cursor get_task_version_info(c_task_version_id NUMBER) IS
5992       select v1.project_id project_id, v2.proj_element_id structure_id,
5993              v1.parent_structure_version_id structure_version_id,
5994              v1.element_version_id task_version_id
5995         from pa_proj_element_versions v1,
5996              pa_proj_element_versions v2
5997        where v1.element_version_id = c_task_version_id
5998          and v1.parent_structure_version_id = v2.element_version_id;
5999     l_info_task_ver_rec       get_task_version_info%ROWTYPE;
6000 
6001     cursor get_structure_version_info(c_structure_version_id NUMBER) IS
6002       select v1.project_id project_id, v1.proj_element_id structure_id,
6003              v1.element_version_id structure_version_id
6004         from pa_proj_element_versions v1
6005        where v1.element_version_id = c_structure_version_id;
6006     l_info_struc_ver_rec      get_structure_version_info%ROWTYPE;
6007 
6008     l_return_status                 VARCHAR2(1);
6009     l_msg_count                     NUMBER;
6010     l_msg_data                      VARCHAR2(250);
6011     l_data                          VARCHAR2(250);
6012     l_msg_index_out                 NUMBER;
6013     l_orig_element_version_id       NUMBER;
6014 
6015     l_object_type                   VARCHAR2(30);
6016 
6017     cursor get_latest_struc_ver(c_struc_ver_id NUMBER) IS
6018       select pevs.element_version_id
6019         from pa_proj_element_versions pev,
6020              pa_proj_elem_ver_structure pevs
6021        where pev.element_version_id = c_struc_ver_id
6022          and pev.project_id = pevs.project_id
6023          and pev.proj_element_id = pevs.proj_element_id
6024          and pevs.latest_eff_published_flag = 'Y';
6025 
6026     cursor get_latest_task_ver(c_task_ver_id NUMBER) IS
6027       select pev2.element_version_id task_version_id,
6028              pev2.parent_structure_version_id parent_structure_version_id
6029         from pa_proj_element_versions pev,
6030              pa_proj_element_versions pev1,
6031              pa_proj_elem_ver_structure pevs,
6032              pa_proj_element_versions pev2
6033        where pev.element_version_id = c_task_ver_id
6034          and pev.parent_structure_version_id = pev1.element_version_id
6035          and pev1.project_id = pevs.project_id
6036          and pev1.proj_element_id = pevs.proj_element_id
6037          and pevs.latest_eff_published_flag = 'Y'
6038          and pev.proj_element_id = pev2.proj_element_id
6039          and pev.project_id = pev2.project_id
6040          and pev2.parent_structure_version_id = pevs.element_version_id;
6041 
6042     cursor can_update(c_element_version_id NUMBER) IS
6043       select '1'
6044         from pa_proj_elem_ver_structure pevs,
6045              pa_proj_element_versions pev
6046        where pev.element_version_id = c_element_version_id
6047          and pev.parent_structure_version_id = pevs.element_version_id
6048          and pev.project_id = pevs.project_id
6049          and pevs.status_code IN ('STRUCTURE_WORKING', 'STRUCTURE_REJECTED');
6050     l_dummy  VARCHAR2(1);
6051 
6052     l_latest_elem_ver               NUMBER;
6053     l_latest_parent_struc_ver       NUMBER;
6054 
6055   BEGIN
6056     IF (p_debug_mode = 'Y') THEN
6057       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_LATEST_PUB_LINKS begin');
6058     END IF;
6059 
6060     IF (p_commit = FND_API.G_TRUE) THEN
6061       savepoint update_latest_pub_links_pvt;
6062     END IF;
6063 
6064     IF p_orig_task_ver_id IS NULL THEN
6065       l_object_type := 'PA_STRUCTURES';
6066       l_orig_element_version_id := p_orig_struc_ver_id;
6067     ELSE
6068       l_object_type := 'PA_TASKS';
6069       l_orig_element_version_id := p_orig_task_ver_id;
6070     END IF;
6071 
6072 --    error_msg('in update latest pub links');
6073     --Search for the element version in the latest published version
6074     --  that has a link point to it, and corresponds to the original
6075     --  element.
6076     IF (l_object_type = 'PA_STRUCTURES') THEN
6077       --Get the published element
6078 --dbms_output.put_line('b, Open get_latest_struc_ver');
6079       OPEN get_latest_struc_ver(l_orig_element_version_id);
6080       FETCH get_latest_struc_ver INTO l_latest_elem_ver;
6081       IF get_latest_struc_ver%NOTFOUND THEN
6082         --no publish version. exit;
6083         IF (p_debug_mode = 'Y') THEN
6084           pa_debug.debug('No latest published version found');
6085         END IF;
6086 --dbms_output.put_line('b, Close get_latest_struc_ver');
6087         CLOSE get_latest_struc_ver;
6088         x_return_status := FND_API.G_RET_STS_SUCCESS;
6089         return;
6090       END IF;
6091       l_latest_parent_struc_ver := l_latest_elem_ver;
6092 --dbms_output.put_line('b, Close get_latest_struc_ver');
6093       CLOSE get_latest_struc_ver;
6094     ELSIF (l_object_type = 'PA_TASKS') THEN
6095 --dbms_output.put_line('b, Open get_latest_task_ver');
6096       OPEN get_latest_task_ver(l_orig_element_version_id);
6097       FETCH get_latest_task_ver INTO l_latest_elem_ver,
6098                                      l_latest_parent_struc_ver;
6099       IF get_latest_task_ver%NOTFOUND THEN
6100         --no publish version. exit;
6101         IF (p_debug_mode = 'Y') THEN
6102           pa_debug.debug('No latest published version found');
6103         END IF;
6104 --dbms_output.put_line('b, Close get_latest_task_ver');
6105         CLOSE get_latest_task_ver;
6106         x_return_status := FND_API.G_RET_STS_SUCCESS;
6107         return;
6108       END IF;
6109 --dbms_output.put_line('b, Close get_latest_task_ver');
6110       CLOSE get_latest_task_ver;
6111     END IF;
6112 
6113     --For the element, find all the element versions that links to
6114     --  the publish version which belongs to a working version.
6115 
6116     --Search for incoming links for the latest pub element
6117 --dbms_output.put_line('b, Open get_from_id');
6118     OPEN get_from_id(l_latest_elem_ver);
6119     LOOP
6120       IF (p_debug_mode = 'Y') THEN
6121         pa_debug.debug('getting incoming links');
6122       END IF;
6123       FETCH get_from_id INTO l_from_object_info;
6124       EXIT WHEN get_from_id%NOTFOUND;
6125 
6126 --dbms_output.put_line('b, Open can_update');
6127       OPEN can_update(l_from_object_info.object_id_from);
6128       FETCH can_update INTO l_dummy;
6129       IF (can_update%FOUND) THEN
6130 --dbms_output.put_line('can update found');
6131         --the from object is a working/rejected version. Need to update
6132         IF (l_from_object_info.object_type_from = 'PA_STRUCTURES') THEN
6133 
6134 --dbms_output.put_line('b, Open get_structure_version_info');
6135           OPEN get_structure_version_info(l_from_object_info.object_id_from);
6136           FETCH get_structure_version_info INTO l_info_struc_ver_rec;
6137           PA_RELATIONSHIP_PVT.Update_Relationship(
6138             p_init_msg_list => FND_API.G_FALSE
6139            ,p_commit => FND_API.G_FALSE
6140            ,p_debug_mode => p_debug_mode
6141            ,p_object_relationship_id    => l_from_object_info.object_relationship_id
6142            ,p_project_id_from           => l_info_struc_ver_rec.project_id
6143            ,p_structure_id_from         => l_info_struc_ver_rec.structure_id
6144            ,p_structure_version_id_from => l_info_struc_ver_rec.structure_version_id
6145            ,p_task_version_id_from      => NULL
6146            ,p_project_id_to             => p_new_project_id
6147            ,p_structure_id_to           => p_new_structure_id
6148            ,p_structure_version_id_to   => p_new_struc_ver_id
6149            ,p_task_version_id_to        => p_new_task_ver_id
6150            ,p_relationship_type         => 'L'
6151            ,p_relationship_subtype      => 'READ_WRITE'
6152            ,p_record_version_number     => l_from_object_info.record_version_number
6153            ,x_return_status             => l_return_status
6154            ,x_msg_count                 => l_msg_count
6155            ,x_msg_data                  => l_msg_data
6156           );
6157 --dbms_output.put_line('b, Close get_structure_version_info');
6158           CLOSE get_structure_version_info;
6159 
6160         ELSIF (l_from_object_info.object_type_from = 'PA_TASKS') THEN
6161 --dbms_output.put_line('b, Open get_task_version_info');
6162           OPEN get_task_version_info(l_from_object_info.object_id_from);
6163           FETCH get_task_version_info INTO l_info_task_ver_rec;
6164           PA_RELATIONSHIP_PVT.Update_Relationship(
6165             p_init_msg_list => FND_API.G_FALSE
6166            ,p_commit => FND_API.G_FALSE
6167            ,p_debug_mode => p_debug_mode
6168            ,p_object_relationship_id    => l_from_object_info.object_relationship_id
6169            ,p_project_id_from           => l_info_task_ver_rec.project_id
6170            ,p_structure_id_from         => l_info_task_ver_rec.structure_id
6171            ,p_structure_version_id_from => l_info_task_ver_rec.structure_version_id
6172            ,p_task_version_id_from      => l_info_task_ver_rec.task_version_id
6173            ,p_project_id_to             => p_new_project_id
6174            ,p_structure_id_to           => p_new_structure_id
6175            ,p_structure_version_id_to   => p_new_struc_ver_id
6176            ,p_task_version_id_to        => p_new_task_ver_id
6177            ,p_relationship_type         => 'L'
6178            ,p_relationship_subtype      => 'READ_WRITE'
6179            ,p_record_version_number     => l_from_object_info.record_version_number
6180            ,x_return_status             => l_return_status
6181            ,x_msg_count                 => l_msg_count
6182            ,x_msg_data                  => l_msg_data
6183           );
6184 --dbms_output.put_line('b, Close get_task_version_info');
6185           CLOSE get_task_version_info;
6186 
6187         END IF;
6188       END IF;
6189 --dbms_output.put_line('b, Close can_update');
6190       CLOSE can_update;
6191     END LOOP;
6192 --dbms_output.put_line('b, Close get_from_id');
6193     CLOSE get_from_id;
6194 
6195 
6196     l_msg_count := FND_MSG_PUB.count_msg;
6197     if (l_msg_count > 0) then
6198       x_msg_count := l_msg_count;
6199       if x_msg_count = 1 then
6200         x_msg_data := l_msg_data;
6201       end if;
6202       raise FND_API.G_EXC_ERROR;
6203     end if;
6204 
6205   EXCEPTION
6206     when FND_API.G_EXC_ERROR then
6207       if p_commit = FND_API.G_TRUE then
6208          rollback to update_latest_pub_links_pvt;
6209       end if;
6210       x_msg_count := FND_MSG_PUB.count_msg;
6211       x_return_status := FND_API.G_RET_STS_ERROR;
6212     when FND_API.G_EXC_UNEXPECTED_ERROR then
6213       if p_commit = FND_API.G_TRUE then
6214          rollback to update_latest_pub_links_pvt;
6215       end if;
6216       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6217       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
6218                               p_procedure_name => 'UPDATE_LATEST_PUB_LINKS',
6219                               p_error_text     => SUBSTRB(SQLERRM,1,240));
6220     when OTHERS then
6221       if p_commit = FND_API.G_TRUE then
6222          rollback to update_latest_pub_links_pvt;
6223       end if;
6224       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6225       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
6226                               p_procedure_name => 'UPDATE_LATEST_PUB_LINKS',
6227                               p_error_text     => SUBSTRB(SQLERRM,1,240));
6228       raise;
6229   END UPDATE_LATEST_PUB_LINKS;
6230 
6231 
6232 PROCEDURE COPY_STRUCTURE_VERSION
6233 ( p_commit                        IN VARCHAR2   := FND_API.G_FALSE
6234  ,p_validate_only                 IN VARCHAR2   := FND_API.G_TRUE
6235  ,p_validation_level              IN NUMBER     := FND_API.G_VALID_LEVEL_FULL
6236  ,p_calling_module                IN VARCHAR2   := 'SELF_SERVICE'
6237  ,p_debug_mode                    IN VARCHAR2   := 'N'
6238  ,p_max_msg_count                 IN NUMBER     := FND_API.G_MISS_NUM
6239  ,p_structure_version_id          IN NUMBER
6240  ,p_new_struct_ver_name           IN VARCHAR2
6241  ,p_new_struct_ver_desc           IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6242  ,p_change_reason_code                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6243  ,x_new_struct_ver_id            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6244  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6245  ,x_msg_data                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6246  ,x_return_status                OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
6247 IS
6248   l_new_struct_ver_id             PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
6249   l_return_status                 VARCHAR2(1);
6250   l_msg_count                     NUMBER;
6251   l_msg_data                      VARCHAR2(250);
6252   l_pev_structure_id              NUMBER;
6253 
6254   CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
6255   IS
6256   SELECT *
6257   FROM PA_PROJ_ELEMENT_VERSIONS
6258   WHERE element_version_id = c_structure_version_id;
6259 
6260   l_structure_ver_rec       l_get_structure_ver_csr%ROWTYPE;
6261   l_structure_ver_to_rec    l_get_structure_ver_csr%ROWTYPE;
6262 
6263   CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
6264   IS
6265   SELECT a.*
6266   FROM PA_PROJ_ELEM_VER_STRUCTURE a,
6267        PA_PROJ_ELEMENT_VERSIONS b
6268   WHERE b.element_version_id = c_structure_version_id
6269   AND   b.project_id = a.project_id
6270   AND   b.element_version_id = a.project_id;
6271 
6272   l_structure_ver_attr_rec       l_get_structure_ver_attr_csr%ROWTYPE;
6273 
6274   CURSOR l_get_task_versions_csr(c_structure_version_id NUMBER)
6275   IS
6276   SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
6277          b.object_id_from1 parent_element_version_id,
6278          a.TASK_UNPUB_VER_STATUS_CODE
6279   FROM PA_PROJ_ELEMENT_VERSIONS a,
6280        PA_OBJECT_RELATIONSHIPS b
6281   WHERE a.object_type = 'PA_TASKS'
6282   AND   a.parent_structure_version_id = c_structure_version_id
6283   AND   a.element_version_id = b.object_id_to1
6284   AND   b.relationship_type = 'S'
6285   AND   b.object_type_from in ('PA_STRUCTURES','PA_TASKS') -- Bug 6429275
6286   AND   b.object_type_to = 'PA_TASKS'
6287   ORDER BY a.display_sequence;
6288 
6289   l_task_versions_rec        l_get_task_versions_csr%ROWTYPE;
6290   l_ref_task_ver_id          NUMBER;
6291   l_peer_or_sub              VARCHAR2(10);
6292 
6293   CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
6294   IS
6295   SELECT a.*
6296   FROM PA_PROJ_ELEM_VER_SCHEDULE a,
6297        PA_PROJ_ELEMENT_VERSIONS b
6298   WHERE b.element_version_id = c_element_version_id
6299   AND b.project_id = a.project_id
6300   AND b.element_version_id = a.element_version_id;
6301 
6302   l_ver_schedule_attr_rec       l_get_ver_schedule_attr_csr%ROWTYPE;
6303 
6304   TYPE reference_tasks IS TABLE OF NUMBER
6305        INDEX BY BINARY_INTEGER;
6306 
6307 --Bug 2189657
6308 --Added for linking tasks with no display sequence.
6309   Type T_EquivElemVerTable IS TABLE OF NUMBER
6310       Index by BINARY_INTEGER;
6311   t_equiv_elem_ver_id T_EquivElemVerTable;
6312 --Bug 2189657 end;
6313 
6314 
6315   -- This table stores reference task version IDs for a particular wbs
6316   -- level. This provides a lookup to find the last task version
6317   -- at that level.
6318   l_outline_task_ref reference_tasks;
6319 
6320   l_last_wbs_level          NUMBER;
6321   l_task_version_id         NUMBER;
6322   l_pev_schedule_id         NUMBER;
6323 
6324   CURSOR l_get_structure_type_csr(c_structure_version_id NUMBER)
6325   IS
6326   SELECT pst.structure_type_class_code
6327   FROM   PA_STRUCTURE_TYPES pst,
6328          PA_PROJ_ELEMENT_VERSIONS ppev,
6329          PA_PROJ_STRUCTURE_TYPES ppst
6330   WHERE  ppev.element_version_id = c_structure_version_id
6331   AND    ppev.proj_element_id = ppst.proj_element_id
6332   AND    ppst.structure_type_id = pst.structure_type_id;
6333 
6334   l_structure_type          PA_STRUCTURE_TYPES.structure_type%TYPE;
6335 
6336   CURSOR l_check_working_versions_csr(c_structure_version_id NUMBER)
6337   IS
6338   SELECT 'Y'
6339   FROM  PA_PROJ_ELEMENT_VERSIONS ppev
6340   WHERE ppev.element_version_id = c_structure_version_id
6341   AND   EXISTS
6342         (SELECT 'Y'
6343          FROM   PA_PROJ_ELEMENT_VERSIONS ppev2,
6344                 PA_PROJ_ELEM_VER_STRUCTURE ppevs
6345          WHERE  ppev2.proj_element_id = ppev.proj_element_id
6346          AND    ppev2.project_id = ppev.project_id
6347          AND    ppevs.project_id = ppev2.project_id
6348          AND    ppevs.element_version_id = ppev2.element_version_id
6349          AND    ppevs.status_code <> 'STRUCTURE_PUBLISHED');
6350 
6351   l_dummy                   VARCHAR2(1);
6352 
6353   cursor get_to_id(c_element_version_id NUMBER) IS
6354       select object_relationship_id, object_id_to1 object_id_to,
6355              object_type_to, record_version_number
6356         from pa_object_relationships
6357        where relationship_type = 'L'
6358          and object_id_from1 = c_element_version_id
6359          and object_type_from IN ('PA_TASKS','PA_STRUCTURES');
6360     l_to_object_info          get_to_id%ROWTYPE;
6361 
6362     cursor get_task_version_info(c_task_version_id NUMBER) IS
6363       select v1.project_id project_id, v2.proj_element_id structure_id,
6364              v1.parent_structure_version_id structure_version_id,
6365              v1.element_version_id task_version_id
6366         from pa_proj_element_versions v1,
6367              pa_proj_element_versions v2
6368        where v1.element_version_id = c_task_version_id
6369          and v1.parent_structure_version_id = v2.element_version_id;
6370     l_info_task_ver_rec       get_task_version_info%ROWTYPE;
6371 
6372     l_new_obj_rel_id          PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
6373     l_structure_type1         PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
6374 
6375 --hsiu
6376 --added for task weighting
6377     CURSOR get_cur_task_ver_weighting(c_ver_id NUMBER) IS
6378      select WEIGHTING_PERCENTAGE
6379        from pa_object_relationships
6380       where object_id_to1 = c_ver_id
6381         and object_type_to = 'PA_TASKS'
6382         and relationship_type = 'S';
6383     l_weighting               NUMBER(17,2);
6384 
6385 --end task weighting changes
6386 
6387    X_Row_id  VARCHAR2(255);
6388 BEGIN
6389 
6390   pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION');
6391 
6392   IF (p_debug_mode = 'Y') THEN
6393     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION begin');
6394   END IF;
6395 
6396   IF (p_commit = FND_API.G_TRUE) THEN
6397     savepoint copy_structure_version_pvt;
6398   END IF;
6399 
6400   -- Get structure version info
6401   OPEN l_get_structure_ver_csr(p_structure_version_id);
6402   FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
6403   CLOSE l_get_structure_ver_csr;
6404 
6405   PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
6406   ( p_validate_only         => p_validate_only
6407    ,p_structure_id          => l_structure_ver_rec.proj_element_id
6408    ,p_attribute_category    => l_structure_ver_rec.attribute_category
6409    ,p_attribute1            => l_structure_ver_rec.attribute1
6410    ,p_attribute2            => l_structure_ver_rec.attribute2
6411    ,p_attribute3            => l_structure_ver_rec.attribute3
6412    ,p_attribute4            => l_structure_ver_rec.attribute4
6413    ,p_attribute5            => l_structure_ver_rec.attribute5
6414    ,p_attribute6            => l_structure_ver_rec.attribute6
6415    ,p_attribute7            => l_structure_ver_rec.attribute7
6416    ,p_attribute8            => l_structure_ver_rec.attribute8
6417    ,p_attribute9            => l_structure_ver_rec.attribute9
6418    ,p_attribute10           => l_structure_ver_rec.attribute10
6419    ,p_attribute11           => l_structure_ver_rec.attribute11
6420    ,p_attribute12           => l_structure_ver_rec.attribute12
6421    ,p_attribute13           => l_structure_ver_rec.attribute13
6422    ,p_attribute14           => l_structure_ver_rec.attribute14
6423    ,p_attribute15           => l_structure_ver_rec.attribute15
6424    ,x_structure_version_id  => l_new_struct_ver_id
6425    ,x_return_status         => l_return_status
6426    ,x_msg_count             => l_msg_count
6427    ,x_msg_data              => l_msg_data );
6428 
6429   If (p_debug_mode = 'Y') THEN
6430     pa_debug.debug('Create Structure Version return status: ' || l_return_status);
6431     pa_debug.debug('l_new_struct_ver_id: ' || l_new_struct_ver_id);
6432   END IF;
6433 
6434 
6435   --Check if there is any error.
6436   l_msg_count := FND_MSG_PUB.count_msg;
6437   IF l_msg_count > 0 THEN
6438     x_msg_count := l_msg_count;
6439     IF x_msg_count = 1 THEN
6440       x_msg_data := l_msg_data;
6441     END IF;
6442     RAISE FND_API.G_EXC_ERROR;
6443   END IF;
6444 
6445    -- Get structure version attributes
6446   OPEN l_get_structure_ver_attr_csr(p_structure_version_id);
6447   FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
6448   CLOSE l_get_structure_ver_attr_csr;
6449 
6450   If (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
6451     l_structure_ver_attr_rec.change_reason_code := p_change_reason_code;
6452   END IF;
6453 
6454   PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
6455   ( p_validate_only               => FND_API.G_FALSE
6456    ,p_structure_version_id        => l_new_struct_ver_id
6457    ,p_structure_version_name      => p_new_struct_ver_name
6458    ,p_structure_version_desc      => p_new_struct_ver_desc
6459    ,p_effective_date              => l_structure_ver_attr_rec.effective_date
6460    ,p_latest_eff_published_flag   => l_structure_ver_attr_rec.latest_eff_published_flag
6461    ,p_locked_status_code          => l_structure_ver_attr_rec.lock_status_code
6462    ,p_struct_version_status_code  => l_structure_ver_attr_rec.status_code
6463    ,p_baseline_current_flag       => l_structure_ver_attr_rec.current_flag
6464    ,p_baseline_original_flag      => l_structure_ver_attr_rec.original_flag
6465    ,p_change_reason_code          => l_structure_ver_attr_rec.change_reason_code
6466    ,x_pev_structure_id            => l_pev_structure_id
6467    ,x_return_status               => l_return_status
6468    ,x_msg_count                   => l_msg_count
6469    ,x_msg_data                    => l_msg_data );
6470 
6471   IF (p_debug_mode = 'Y') THEN
6472     pa_debug.debug('Create Structure Version Attr return status: ' || l_return_status);
6473     pa_debug.debug('l_pev_structure_id: ' || l_pev_structure_id);
6474   END IF;
6475 
6476   --Check if there is any error.
6477   l_msg_count := FND_MSG_PUB.count_msg;
6478   IF l_msg_count > 0 THEN
6479     x_msg_count := l_msg_count;
6480     IF x_msg_count = 1 THEN
6481       x_msg_data := l_msg_data;
6482     END IF;
6483     RAISE FND_API.G_EXC_ERROR;
6484   END IF;
6485 
6486   --Search for outgoing links for the structure version; create new Links
6487 /*
6488   OPEN get_to_id(p_structure_version_id);
6489   LOOP
6490     FETCH get_to_id INTO l_to_object_info;
6491     EXIT WHEN get_to_id%NOTFOUND;
6492     If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
6493       OPEN l_get_structure_ver_csr(l_to_object_info.object_id_to);
6494       FETCH l_get_structure_ver_csr INTO l_structure_ver_to_rec;
6495 
6496       SELECT pst.structure_type_class_code
6497       INTO l_structure_type1
6498       FROM PA_STRUCTURE_TYPES pst,
6499            PA_PROJ_STRUCTURE_TYPES ppst
6500       WHERE ppst.proj_element_id = l_structure_ver_to_rec.proj_element_id
6501       AND   pst.structure_type_id = ppst.structure_type_id;
6502 
6503       PA_RELATIONSHIP_PVT.Create_Relationship(
6504          p_init_msg_list                => FND_API.G_FALSE
6505         ,p_commit                       => FND_API.G_FALSE
6506         ,p_debug_mode                   => p_debug_mode
6507         ,p_project_id_from              => l_structure_ver_rec.project_id
6508         ,p_structure_id_from            => l_structure_ver_rec.proj_element_id
6509         ,p_structure_version_id_from    => l_new_struct_ver_id
6510         ,p_task_version_id_from         => NULL
6511         ,p_project_id_to                => l_structure_ver_to_rec.project_id
6512         ,p_structure_id_to              => l_structure_ver_to_rec.proj_element_id
6513         ,p_structure_version_id_to      => l_structure_ver_to_rec.element_version_id
6514         ,p_task_version_id_to           => NULL
6515         ,p_structure_type               => l_structure_type1
6516         ,p_initiating_element           => NULL
6517         ,p_link_to_latest_structure_ver => NULL
6518         ,p_relationship_type            => 'L'
6519         ,p_relationship_subtype         => 'READ_WRITE'
6520         ,x_object_relationship_id       => l_new_obj_rel_id
6521         ,x_return_status                => l_return_status
6522         ,x_msg_count                    => l_msg_count
6523         ,x_msg_data                     => l_msg_data
6524       );
6525       CLOSE l_get_structure_ver_csr;
6526 
6527       IF (p_debug_mode = 'Y') THEN
6528        pa_debug.debug('Create Relationship return status: ' || l_return_status);
6529        pa_debug.debug('l_new_obj_rel_id: ' || l_new_obj_rel_id);
6530       END IF;
6531     ELSIF(l_to_object_info.object_type_to = 'PA_TASKS') THEN
6532       OPEN get_task_version_info(l_to_object_info.object_id_to);
6533       FETCH get_task_version_info INTO l_info_task_ver_rec;
6534 
6535       SELECT pst.structure_type_class_code
6536       INTO l_structure_type1
6537       FROM PA_STRUCTURE_TYPES pst,
6538            PA_PROJ_STRUCTURE_TYPES ppst
6539       WHERE ppst.proj_element_id = l_info_task_ver_rec.structure_id
6540       AND   pst.structure_type_id = ppst.structure_type_id;
6541 
6542       PA_RELATIONSHIP_PVT.Create_Relationship(
6543          p_init_msg_list                => FND_API.G_FALSE
6544         ,p_commit                       => FND_API.G_FALSE
6545         ,p_debug_mode                   => p_debug_mode
6546         ,p_project_id_from              => l_structure_ver_rec.project_id
6547         ,p_structure_id_from            => l_structure_ver_rec.proj_element_id
6548         ,p_structure_version_id_from    => l_new_struct_ver_id
6549         ,p_task_version_id_from         => NULL
6550         ,p_project_id_to                => l_info_task_ver_rec.project_id
6551         ,p_structure_id_to              => l_info_task_ver_rec.structure_id
6552         ,p_structure_version_id_to      => l_info_task_ver_rec.structure_version_id
6553         ,p_task_version_id_to           => l_info_task_ver_rec.task_version_id
6554         ,p_structure_type               => l_structure_type1
6555         ,p_initiating_element           => NULL
6556         ,p_link_to_latest_structure_ver => NULL
6557         ,p_relationship_type            => 'L'
6558         ,p_relationship_subtype         => 'READ_WRITE'
6559         ,x_object_relationship_id       => l_new_obj_rel_id
6560         ,x_return_status                => l_return_status
6561         ,x_msg_count                    => l_msg_count
6562         ,x_msg_data                     => l_msg_data
6563       );
6564       CLOSE get_task_version_info;
6565       IF (p_debug_mode = 'Y') THEN
6566         pa_debug.debug('Create Relationship return status: ' || l_return_status);
6567         pa_debug.debug('l_new_obj_rel_id: ' || l_new_obj_rel_id);
6568       END IF;
6569     END IF;
6570     --Check error
6571     l_msg_count := FND_MSG_PUB.count_msg;
6572     if (l_msg_count > 0) then
6573       x_msg_count := l_msg_count;
6574       if x_msg_count = 1 then
6575         x_msg_data := l_msg_data;
6576       end if;
6577       CLOSE get_to_id;
6578       raise FND_API.G_EXC_ERROR;
6579     end if;
6580 
6581   END LOOP;
6582   CLOSE get_to_id;
6583 */
6584 
6585 
6586   OPEN l_get_structure_type_csr(p_structure_version_id);
6587   FETCH l_get_structure_type_csr INTO l_structure_type;
6588   CLOSE l_get_structure_type_csr;
6589 
6590   -- If structure is workplan type create schedule version record
6591   if l_structure_type = 'WORKPLAN' then
6592 
6593     OPEN l_get_ver_schedule_attr_csr(p_structure_version_id);
6594     FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
6595     CLOSE l_get_ver_schedule_attr_csr;
6596 
6597 /*
6598     PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
6599     ( p_validate_only           => FND_API.G_FALSE
6600      ,p_element_version_id      => l_new_struct_ver_id
6601      ,p_calendar_id             => l_ver_schedule_attr_rec.calendar_id
6602      ,p_scheduled_start_date    => l_ver_schedule_attr_rec.scheduled_start_date
6603      ,p_scheduled_end_date      => l_ver_schedule_attr_rec.scheduled_finish_date
6604      ,p_obligation_start_date   => l_ver_schedule_attr_rec.obligation_start_date
6605      ,p_obligation_end_date     => l_ver_schedule_attr_rec.obligation_finish_date
6606      ,p_actual_start_date       => l_ver_schedule_attr_rec.actual_start_date
6607      ,p_actual_finish_date      => l_ver_schedule_attr_rec.actual_finish_date
6608      ,p_estimate_start_date     => l_ver_schedule_attr_rec.estimated_start_date
6609      ,p_estimate_finish_date    => l_ver_schedule_attr_rec.estimated_finish_date
6610      ,p_duration                => l_ver_schedule_attr_rec.duration
6611      ,p_early_start_date        => l_ver_schedule_attr_rec.early_start_date
6612      ,p_early_end_date          => l_ver_schedule_attr_rec.early_finish_date
6613      ,p_late_start_date         => l_ver_schedule_attr_rec.late_start_date
6614      ,p_late_end_date           => l_ver_schedule_attr_rec.late_finish_date
6615      ,p_milestone_flag          => l_ver_schedule_attr_rec.milestone_flag
6616      ,p_critical_flag           => l_ver_schedule_attr_rec.critical_flag
6617      ,p_WQ_PLANNED_QUANTITY     => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
6618      ,p_PLANNED_EFFORT          => l_ver_schedule_attr_rec.PLANNED_EFFORT
6619      ,x_pev_schedule_id         => l_pev_schedule_id
6620      ,x_return_status           => l_return_status
6621      ,x_msg_count           => l_msg_count
6622      ,x_msg_data            => l_msg_data );
6623 */
6624     l_pev_schedule_id := NULL;
6625     PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
6626          X_ROW_ID                => X_Row_Id
6627         ,X_PEV_SCHEDULE_ID     => l_pev_schedule_id
6628         ,X_ELEMENT_VERSION_ID      => l_new_struct_ver_id
6629         ,X_PROJECT_ID            => l_ver_schedule_attr_rec.PROJECT_ID
6630         ,X_PROJ_ELEMENT_ID     => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
6631         ,X_SCHEDULED_START_DATE  => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
6632         ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
6633         ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
6634         ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
6635         ,X_ACTUAL_START_DATE        => l_ver_schedule_attr_rec.ACTUAL_START_DATE
6636         ,X_ACTUAL_FINISH_DATE       => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
6637         ,X_ESTIMATED_START_DATE   => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
6638         ,X_ESTIMATED_FINISH_DATE  => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
6639         ,X_DURATION           => l_ver_schedule_attr_rec.DURATION
6640         ,X_EARLY_START_DATE     => l_ver_schedule_attr_rec.EARLY_START_DATE
6641         ,X_EARLY_FINISH_DATE        => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
6642         ,X_LATE_START_DATE      => l_ver_schedule_attr_rec.LATE_START_DATE
6643         ,X_LATE_FINISH_DATE     => l_ver_schedule_attr_rec.LATE_FINISH_DATE
6644         ,X_CALENDAR_ID            => l_ver_schedule_attr_rec.CALENDAR_ID
6645         ,X_MILESTONE_FLAG       => l_ver_schedule_attr_rec.MILESTONE_FLAG
6646         ,X_CRITICAL_FLAG        => l_ver_schedule_attr_rec.CRITICAL_FLAG
6647         ,X_WQ_PLANNED_QUANTITY      => l_ver_schedule_attr_rec.wq_planned_quantity
6648         ,X_PLANNED_EFFORT           => l_ver_schedule_attr_rec.planned_effort
6649         ,X_ACTUAL_DURATION          => l_ver_schedule_attr_rec.actual_duration
6650         ,X_ESTIMATED_DURATION       => l_ver_schedule_attr_rec.estimated_duration
6651         ,X_ATTRIBUTE_CATEGORY               => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
6652         ,X_ATTRIBUTE1                       => l_ver_schedule_attr_rec.ATTRIBUTE1
6653         ,X_ATTRIBUTE2                       => l_ver_schedule_attr_rec.ATTRIBUTE2
6654         ,X_ATTRIBUTE3                       => l_ver_schedule_attr_rec.ATTRIBUTE3
6655         ,X_ATTRIBUTE4                       => l_ver_schedule_attr_rec.ATTRIBUTE4
6656         ,X_ATTRIBUTE5                       => l_ver_schedule_attr_rec.ATTRIBUTE5
6657         ,X_ATTRIBUTE6                       => l_ver_schedule_attr_rec.ATTRIBUTE6
6658         ,X_ATTRIBUTE7                       => l_ver_schedule_attr_rec.ATTRIBUTE7
6659         ,X_ATTRIBUTE8                       => l_ver_schedule_attr_rec.ATTRIBUTE8
6660         ,X_ATTRIBUTE9                       => l_ver_schedule_attr_rec.ATTRIBUTE9
6661         ,X_ATTRIBUTE10                    => l_ver_schedule_attr_rec.ATTRIBUTE10
6662         ,X_ATTRIBUTE11                    => l_ver_schedule_attr_rec.ATTRIBUTE11
6663         ,X_ATTRIBUTE12                    => l_ver_schedule_attr_rec.ATTRIBUTE12
6664         ,X_ATTRIBUTE13                    => l_ver_schedule_attr_rec.ATTRIBUTE13
6665         ,X_ATTRIBUTE14                    => l_ver_schedule_attr_rec.ATTRIBUTE14
6666         ,X_ATTRIBUTE15                    => l_ver_schedule_attr_rec.ATTRIBUTE15
6667         ,X_SOURCE_OBJECT_ID               => l_ver_schedule_attr_rec.PROJECT_ID
6668         ,X_SOURCE_OBJECT_TYPE             => 'PA_PROJECTS'
6669     );
6670 
6671 
6672     IF (p_debug_mode = 'Y') THEN
6673       pa_debug.debug('Create Schedule Version return status: ' || l_return_status);
6674       pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
6675     END IF;
6676 
6677     --Check if there is any error.
6678     l_msg_count := FND_MSG_PUB.count_msg;
6679     IF l_msg_count > 0 THEN
6680       x_msg_count := l_msg_count;
6681       IF x_msg_count = 1 THEN
6682         x_msg_data := l_msg_data;
6683       END IF;
6684       RAISE FND_API.G_EXC_ERROR;
6685     END IF;
6686 
6687   ELSIF l_structure_type in ('FINANCIAL') then
6688     -- There can only be one working version any any time for a financial structure
6689     OPEN l_check_working_versions_csr(p_structure_version_id);
6690     FETCH l_check_working_versions_csr INTO l_dummy;
6691     if l_check_working_versions_csr%FOUND then
6692       CLOSE l_check_working_versions_csr;
6693       PA_UTILS.ADD_MESSAGE('PA','PA_PS_WORKING_VER_EXISTS');
6694       x_msg_data := 'PA_PS_WORKING_VER_EXISTS';
6695       RAISE FND_API.G_EXC_ERROR;
6696     end if;
6697     CLOSE l_check_working_versions_csr;
6698   end if;
6699 
6700   -- Fetch all task versions for this structure version
6701   OPEN l_get_task_versions_csr(p_structure_version_id);
6702 
6703   l_last_wbs_level := null;
6704 
6705   LOOP
6706     FETCH l_get_task_versions_csr INTO l_task_versions_rec;
6707     EXIT WHEN l_get_task_versions_csr%NOTFOUND;
6708 
6709     if l_last_wbs_level is null then
6710       -- first task version being created
6711       -- This task should have wbs level = 1
6712       l_ref_task_ver_id := l_new_struct_ver_id; --p_structure_version_id;
6713       l_peer_or_sub := 'SUB';
6714     else
6715       if l_task_versions_rec.wbs_level > l_last_wbs_level then
6716         l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
6717         l_peer_or_sub := 'SUB';
6718       else
6719         l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
6720         l_peer_or_sub := 'PEER';
6721       end if;
6722     end if;
6723 
6724 --Bug 2189657
6725 --Added for linking tasks with no display sequence.
6726 --Set correct reference and parent element version id
6727       If (l_task_versions_rec.display_sequence IS NULL) THEN
6728         IF (l_ref_task_ver_id <> l_new_struct_ver_id) THEN
6729           --A task has already been created. Reference task must be a task
6730           IF (l_task_versions_rec.parent_element_version_id = p_structure_version_id) THEN
6731             --this is a link to the structure version. A task has already been created.
6732             --need to use a top level task as peer reference task
6733             l_peer_or_sub := 'PEER';
6734             l_ref_task_ver_id := l_outline_task_ref(1);
6735           ELSE
6736             --this is a link to a task.
6737             l_peer_or_sub := 'SUB';
6738             l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
6739           END IF;
6740         ELSE
6741           --No task has been created. Reference task is structure
6742           l_peer_or_sub := 'SUB';
6743           l_ref_task_ver_id := l_new_struct_ver_id;
6744 --          l_ref_task_ver_id := t_equiv_elem_ver_id(l_task_versions_rec.parent_element_version_id);
6745         END IF;
6746       END IF;
6747 --Bug 2189657 end;
6748     OPEN get_cur_task_ver_weighting(l_task_versions_rec.element_version_id);
6749     FETCH get_cur_task_ver_weighting INTO l_weighting;
6750     CLOSE get_cur_task_ver_weighting;
6751 
6752     PA_TASK_PVT1.CREATE_TASK_VERSION
6753     ( p_validate_only        => FND_API.G_FALSE
6754      ,p_validation_level     => 0
6755      ,p_ref_task_version_id  => l_ref_task_ver_id
6756      ,p_peer_or_sub          => l_peer_or_sub
6757      ,p_task_id              => l_task_versions_rec.proj_element_id
6758      ,p_WEIGHTING_PERCENTAGE => l_weighting
6759      ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_versions_rec.TASK_UNPUB_VER_STATUS_CODE
6760      ,x_task_version_id      => l_task_version_id
6761      ,x_return_status        => l_return_status
6762      ,x_msg_count            => l_msg_count
6763      ,x_msg_data             => l_msg_data);
6764 
6765     t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
6766 
6767     IF (p_debug_mode = 'Y') THEN
6768       pa_debug.debug('Create Task Version return status: ' || l_return_status);
6769       pa_debug.debug('l_task_version_id: ' || l_task_version_id);
6770       pa_debug.debug('l_msg_count: ' || l_msg_count);
6771     END IF;
6772 
6773     --Check if there is any error.
6774     l_msg_count := FND_MSG_PUB.count_msg;
6775     IF l_msg_count > 0 THEN
6776       x_msg_count := l_msg_count;
6777       IF x_msg_count = 1 THEN
6778         x_msg_data := l_msg_data;
6779       END IF;
6780       RAISE FND_API.G_EXC_ERROR;
6781     END IF;
6782 
6783     if l_structure_type = 'WORKPLAN' then
6784       -- Get task version schedule attributes
6785       OPEN l_get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id);
6786       FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
6787       CLOSE l_get_ver_schedule_attr_csr;
6788 
6789       IF (p_debug_mode = 'Y') THEN
6790         pa_debug.debug('Before Create Schedule Version');
6791       END IF;
6792       -- xxlu added DFF attributes
6793 /*      PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
6794       ( p_validate_only           => FND_API.G_FALSE
6795        ,p_element_version_id      => l_task_version_id
6796        ,p_calendar_id             => l_ver_schedule_attr_rec.calendar_id
6797        ,p_scheduled_start_date    => l_ver_schedule_attr_rec.scheduled_start_date
6798        ,p_scheduled_end_date      => l_ver_schedule_attr_rec.scheduled_finish_date
6799        ,p_obligation_start_date   => l_ver_schedule_attr_rec.obligation_start_date
6800        ,p_obligation_end_date     => l_ver_schedule_attr_rec.obligation_finish_date
6801        ,p_actual_start_date       => l_ver_schedule_attr_rec.actual_start_date
6802        ,p_actual_finish_date      => l_ver_schedule_attr_rec.actual_finish_date
6803        ,p_estimate_start_date     => l_ver_schedule_attr_rec.estimated_start_date
6804        ,p_estimate_finish_date    => l_ver_schedule_attr_rec.estimated_finish_date
6805        ,p_duration                => l_ver_schedule_attr_rec.duration
6806        ,p_early_start_date        => l_ver_schedule_attr_rec.early_start_date
6807        ,p_early_end_date          => l_ver_schedule_attr_rec.early_finish_date
6808        ,p_late_start_date         => l_ver_schedule_attr_rec.late_start_date
6809        ,p_late_end_date           => l_ver_schedule_attr_rec.late_finish_date
6810        ,p_milestone_flag          => l_ver_schedule_attr_rec.milestone_flag
6811        ,p_critical_flag           => l_ver_schedule_attr_rec.critical_flag
6812        ,p_WQ_PLANNED_QUANTITY     => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
6813        ,p_PLANNED_EFFORT          => l_ver_schedule_attr_rec.PLANNED_EFFORT
6814         ,p_attribute_category        => l_ver_schedule_attr_rec.attribute_category
6815         ,p_attribute1                => l_ver_schedule_attr_rec.attribute1
6816         ,p_attribute2                => l_ver_schedule_attr_rec.attribute2
6817         ,p_attribute3                => l_ver_schedule_attr_rec.attribute3
6818         ,p_attribute4                => l_ver_schedule_attr_rec.attribute4
6819         ,p_attribute5                => l_ver_schedule_attr_rec.attribute5
6820         ,p_attribute6                => l_ver_schedule_attr_rec.attribute6
6821         ,p_attribute7                => l_ver_schedule_attr_rec.attribute7
6822         ,p_attribute8                => l_ver_schedule_attr_rec.attribute8
6823         ,p_attribute9                => l_ver_schedule_attr_rec.attribute9
6824         ,p_attribute10             => l_ver_schedule_attr_rec.attribute10
6825         ,p_attribute11             => l_ver_schedule_attr_rec.attribute11
6826         ,p_attribute12             => l_ver_schedule_attr_rec.attribute12
6827         ,p_attribute13             => l_ver_schedule_attr_rec.attribute13
6828         ,p_attribute14             => l_ver_schedule_attr_rec.attribute14
6829         ,p_attribute15             => l_ver_schedule_attr_rec.attribute15
6830        ,x_pev_schedule_id         => l_pev_schedule_id
6831        ,x_return_status           => l_return_status
6832        ,x_msg_count           => l_msg_count
6833        ,x_msg_data            => l_msg_data );
6834       -- end xxlu changes
6835 */
6836       l_pev_schedule_id := NULL;
6837       PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
6838          X_ROW_ID                => X_Row_Id
6839         ,X_PEV_SCHEDULE_ID     => l_pev_schedule_id
6840         ,X_ELEMENT_VERSION_ID      => l_task_version_id
6841         ,X_PROJECT_ID            => l_ver_schedule_attr_rec.PROJECT_ID
6842         ,X_PROJ_ELEMENT_ID     => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
6843         ,X_SCHEDULED_START_DATE  => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
6844         ,X_SCHEDULED_FINISH_DATE => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
6845         ,X_OBLIGATION_START_DATE => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
6846         ,X_OBLIGATION_FINISH_DATE => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
6847         ,X_ACTUAL_START_DATE        => l_ver_schedule_attr_rec.ACTUAL_START_DATE
6848         ,X_ACTUAL_FINISH_DATE       => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
6849         ,X_ESTIMATED_START_DATE   => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
6850         ,X_ESTIMATED_FINISH_DATE  => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
6851         ,X_DURATION           => l_ver_schedule_attr_rec.DURATION
6852         ,X_EARLY_START_DATE     => l_ver_schedule_attr_rec.EARLY_START_DATE
6853         ,X_EARLY_FINISH_DATE        => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
6854         ,X_LATE_START_DATE      => l_ver_schedule_attr_rec.LATE_START_DATE
6855         ,X_LATE_FINISH_DATE     => l_ver_schedule_attr_rec.LATE_FINISH_DATE
6856         ,X_CALENDAR_ID            => l_ver_schedule_attr_rec.CALENDAR_ID
6857         ,X_MILESTONE_FLAG       => l_ver_schedule_attr_rec.MILESTONE_FLAG
6858         ,X_CRITICAL_FLAG        => l_ver_schedule_attr_rec.CRITICAL_FLAG
6859         ,X_WQ_PLANNED_QUANTITY      => l_ver_schedule_attr_rec.wq_planned_quantity
6860         ,X_PLANNED_EFFORT           => l_ver_schedule_attr_rec.planned_effort
6861         ,X_ACTUAL_DURATION          => l_ver_schedule_attr_rec.actual_duration
6862         ,X_ESTIMATED_DURATION       => l_ver_schedule_attr_rec.estimated_duration
6863         ,X_ATTRIBUTE_CATEGORY               => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
6864         ,X_ATTRIBUTE1                       => l_ver_schedule_attr_rec.ATTRIBUTE1
6865         ,X_ATTRIBUTE2                       => l_ver_schedule_attr_rec.ATTRIBUTE2
6866         ,X_ATTRIBUTE3                       => l_ver_schedule_attr_rec.ATTRIBUTE3
6867         ,X_ATTRIBUTE4                       => l_ver_schedule_attr_rec.ATTRIBUTE4
6868         ,X_ATTRIBUTE5                       => l_ver_schedule_attr_rec.ATTRIBUTE5
6869         ,X_ATTRIBUTE6                       => l_ver_schedule_attr_rec.ATTRIBUTE6
6870         ,X_ATTRIBUTE7                       => l_ver_schedule_attr_rec.ATTRIBUTE7
6871         ,X_ATTRIBUTE8                       => l_ver_schedule_attr_rec.ATTRIBUTE8
6872         ,X_ATTRIBUTE9                       => l_ver_schedule_attr_rec.ATTRIBUTE9
6873         ,X_ATTRIBUTE10                    => l_ver_schedule_attr_rec.ATTRIBUTE10
6874         ,X_ATTRIBUTE11                    => l_ver_schedule_attr_rec.ATTRIBUTE11
6875         ,X_ATTRIBUTE12                    => l_ver_schedule_attr_rec.ATTRIBUTE12
6876         ,X_ATTRIBUTE13                    => l_ver_schedule_attr_rec.ATTRIBUTE13
6877         ,X_ATTRIBUTE14                    => l_ver_schedule_attr_rec.ATTRIBUTE14
6878         ,X_ATTRIBUTE15                    => l_ver_schedule_attr_rec.ATTRIBUTE15
6879     ,X_SOURCE_OBJECT_ID               => l_ver_schedule_attr_rec.PROJECT_ID
6880         ,X_SOURCE_OBJECT_TYPE             => 'PA_PROJECTS'
6881       );
6882 
6883       IF (p_debug_mode = 'Y') THEN
6884         pa_debug.debug('Create Schedule Version return status: ' || l_return_status);
6885         pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
6886       END IF;
6887 
6888       --Check if there is any error.
6889       l_msg_count := FND_MSG_PUB.count_msg;
6890       IF l_msg_count > 0 THEN
6891         x_msg_count := l_msg_count;
6892         IF x_msg_count = 1 THEN
6893           x_msg_data := l_msg_data;
6894         END IF;
6895         RAISE FND_API.G_EXC_ERROR;
6896       END IF;
6897     end if;
6898 
6899 /* hsiu: bug 2800553: commented for performance improvement
6900     --Search for outgoing links; create new Links
6901     OPEN get_to_id(l_task_versions_rec.element_version_id);
6902     LOOP
6903       FETCH get_to_id INTO l_to_object_info;
6904       EXIT WHEN get_to_id%NOTFOUND;
6905       If (l_to_object_info.object_type_to = 'PA_STRUCTURES') THEN
6906         OPEN l_get_structure_ver_csr(l_to_object_info.object_id_to);
6907         FETCH l_get_structure_ver_csr INTO l_structure_ver_to_rec;
6908 
6909           PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
6910            p_user_id => FND_GLOBAL.USER_ID
6911           ,p_object_type_from => 'PA_TASKS'
6912           ,p_object_id_from1 => l_task_version_id
6913           ,p_object_id_from2 => NULL
6914           ,p_object_id_from3 => NULL
6915           ,p_object_id_from4 => NULL
6916           ,p_object_id_from5 => NULL
6917           ,p_object_type_to => 'PA_STRUCTURES'
6918           ,p_object_id_to1 => l_structure_ver_to_rec.element_version_id
6919           ,p_object_id_to2 => NULL
6920           ,p_object_id_to3 => NULL
6921           ,p_object_id_to4 => NULL
6922           ,p_object_id_to5 => NULL
6923           ,p_relationship_type => 'L'
6924           ,p_relationship_subtype => 'READ_WRITE'
6925           ,p_lag_day => NULL
6926           ,p_imported_lag => NULL
6927           ,p_priority => NULL
6928           ,p_pm_product_code => NULL
6929           ,x_object_relationship_id => l_new_obj_rel_id
6930           ,x_return_status => l_return_status
6931           );
6932 */
6933 /*
6934         OPEN l_get_structure_type_csr(l_structure_ver_to_rec.element_version_id);
6935         FETCH l_get_structure_type_csr INTO l_structure_type1;
6936         CLOSE l_get_structure_type_csr;
6937 
6938         PA_RELATIONSHIP_PVT.Create_Relationship(
6939            p_init_msg_list                => FND_API.G_FALSE
6940           ,p_commit                       => FND_API.G_FALSE
6941           ,p_debug_mode                   => p_debug_mode
6942           ,p_project_id_from              => l_structure_ver_rec.project_id
6943           ,p_structure_id_from            => l_structure_ver_rec.proj_element_id
6944           ,p_structure_version_id_from    => l_new_struct_ver_id
6945           ,p_task_version_id_from         => l_task_version_id
6946           ,p_project_id_to                => l_structure_ver_to_rec.project_id
6947           ,p_structure_id_to              => l_structure_ver_to_rec.proj_element_id
6948           ,p_structure_version_id_to      => l_structure_ver_to_rec.element_version_id
6949           ,p_task_version_id_to           => NULL
6950           ,p_structure_type               => l_structure_type1
6951           ,p_initiating_element           => NULL
6952           ,p_link_to_latest_structure_ver => NULL
6953           ,p_relationship_type            => 'L'
6954           ,p_relationship_subtype         => 'READ_WRITE'
6955           ,x_object_relationship_id       => l_new_obj_rel_id
6956           ,x_return_status                => l_return_status
6957           ,x_msg_count                    => l_msg_count
6958           ,x_msg_data                     => l_msg_data
6959         );
6960 */
6961 /* hsiu: bug 2800553:  commented for performance improvement
6962         CLOSE l_get_structure_ver_csr;
6963 
6964       ELSIF (l_to_object_info.object_type_to = 'PA_TASKS') THEN
6965         OPEN get_task_version_info(l_to_object_info.object_id_to);
6966         FETCH get_task_version_info INTO l_info_task_ver_rec;
6967 
6968           PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
6969            p_user_id => FND_GLOBAL.USER_ID
6970           ,p_object_type_from => 'PA_TASKS'
6971           ,p_object_id_from1 => l_task_version_id
6972           ,p_object_id_from2 => NULL
6973           ,p_object_id_from3 => NULL
6974           ,p_object_id_from4 => NULL
6975           ,p_object_id_from5 => NULL
6976           ,p_object_type_to => 'PA_TASKS'
6977           ,p_object_id_to1 => l_info_task_ver_rec.task_version_id
6978           ,p_object_id_to2 => NULL
6979           ,p_object_id_to3 => NULL
6980           ,p_object_id_to4 => NULL
6981           ,p_object_id_to5 => NULL
6982           ,p_relationship_type => 'L'
6983           ,p_relationship_subtype => 'READ_WRITE'
6984           ,p_lag_day => NULL
6985           ,p_imported_lag => NULL
6986           ,p_priority => NULL
6987           ,p_pm_product_code => NULL
6988           ,x_object_relationship_id => l_new_obj_rel_id
6989           ,x_return_status => l_return_status
6990           );
6991 */
6992 /*
6993         OPEN l_get_structure_type_csr(l_info_task_ver_rec.structure_version_id);
6994         FETCH l_get_structure_type_csr INTO l_structure_type1;
6995         CLOSE l_get_structure_type_csr;
6996 
6997         PA_RELATIONSHIP_PVT.Create_Relationship(
6998            p_init_msg_list                => FND_API.G_FALSE
6999           ,p_commit                       => FND_API.G_FALSE
7000           ,p_debug_mode                   => p_debug_mode
7001           ,p_project_id_from              => l_structure_ver_rec.project_id
7002           ,p_structure_id_from            => l_structure_ver_rec.proj_element_id
7003           ,p_structure_version_id_from    => l_new_struct_ver_id
7004           ,p_task_version_id_from         => l_task_version_id
7005           ,p_project_id_to                => l_info_task_ver_rec.project_id
7006           ,p_structure_id_to              => l_info_task_ver_rec.structure_id
7007           ,p_structure_version_id_to      => l_info_task_ver_rec.structure_version_id
7008           ,p_task_version_id_to           => l_info_task_ver_rec.task_version_id
7009           ,p_structure_type               => l_structure_type1
7010           ,p_initiating_element           => NULL
7011           ,p_link_to_latest_structure_ver => NULL
7012           ,p_relationship_type            => 'L'
7013           ,p_relationship_subtype         => 'READ_WRITE'
7014           ,x_object_relationship_id       => l_new_obj_rel_id
7015           ,x_return_status                => l_return_status
7016           ,x_msg_count                    => l_msg_count
7017           ,x_msg_data                     => l_msg_data
7018         );
7019 */
7020 /* hsiu: bug 2800553: commented for performance improvement
7021         CLOSE get_task_version_info;
7022 
7023       END IF;
7024 
7025       --Check error
7026       l_msg_count := FND_MSG_PUB.count_msg;
7027       if (l_msg_count > 0) then
7028         x_msg_count := l_msg_count;
7029         if x_msg_count = 1 then
7030           x_msg_data := l_msg_data;
7031         end if;
7032         CLOSE get_to_id;
7033         raise FND_API.G_EXC_ERROR;
7034      end if;
7035     END LOOP;
7036     CLOSE get_to_id;
7037 */
7038     l_last_wbs_level := l_task_versions_rec.wbs_level;
7039     l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;
7040 
7041   END LOOP;
7042 
7043   CLOSE l_get_task_versions_csr;
7044 
7045   x_new_struct_ver_id := l_new_struct_ver_id;
7046   x_return_status := FND_API.G_RET_STS_SUCCESS;
7047 
7048   IF (p_commit = FND_API.G_TRUE) THEN
7049     COMMIT;
7050   END IF;
7051 
7052   IF (p_debug_mode = 'Y') THEN
7053     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION END');
7054   END IF;
7055 
7056 EXCEPTION
7057   when FND_API.G_EXC_ERROR then
7058     if p_commit = FND_API.G_TRUE then
7059       rollback to copy_structure_version_pvt;
7060     end if;
7061     x_return_status := FND_API.G_RET_STS_ERROR;
7062   when FND_API.G_EXC_UNEXPECTED_ERROR then
7063     if p_commit = FND_API.G_TRUE then
7064       rollback to copy_structure_version_pvt;
7065     end if;
7066     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7067     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
7068                             p_procedure_name => 'COPY_STRUCTURE_VERSION',
7069                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7070   when OTHERS then
7071     if p_commit = FND_API.G_TRUE then
7072       rollback to copy_structure_version_pvt;
7073     end if;
7074     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7075     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
7076                             p_procedure_name => 'COPY_STRUCTURE_VERSION',
7077                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7078     raise;
7079 END COPY_STRUCTURE_VERSION;
7080 
7081 
7082 PROCEDURE COPY_STRUCTURE
7083 ( p_commit                        IN VARCHAR2    := FND_API.G_FALSE
7084  ,p_validate_only                 IN VARCHAR2    := FND_API.G_TRUE
7085  ,p_validation_level              IN VARCHAR2    := 100
7086  ,p_calling_module                IN VARCHAR2    := 'SELF_SERVICE'
7087  ,p_debug_mode                    IN VARCHAR2    := 'N'
7088  ,p_max_msg_count                 IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7089  ,p_src_project_id                IN NUMBER
7090  ,p_dest_project_id               IN NUMBER
7091 -- anlee
7092 -- Dates changes
7093  ,p_delta                         IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7094 -- End of changes
7095  ,p_copy_task_flag                IN VARCHAR2    := 'Y'
7096  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7097  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7098  ,x_msg_data                     OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
7099 IS
7100   l_return_status                 VARCHAR2(1);
7101   l_msg_count                     NUMBER;
7102   l_msg_data                      VARCHAR2(250);
7103   l_split_cost_workplan_flag      VARCHAR2(1);
7104   l_structure_id                  NUMBER;
7105   l_structure_type                PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
7106 
7107 --Bug 2189657
7108 --Added for linking tasks with no display sequence.
7109     Type T_EquivElemVerTable IS TABLE OF NUMBER
7110       Index by BINARY_INTEGER;
7111     t_equiv_elem_ver_id T_EquivElemVerTable;
7112 --Bug 2189657 end;
7113 
7114   CURSOR l_get_structure_type_csr(c_proj_element_id NUMBER)
7115   IS
7116   SELECT structure_type_class_code
7117   FROM   PA_STRUCTURE_TYPES pst,
7118          PA_PROJ_STRUCTURE_TYPES ppst
7119   WHERE  ppst.proj_element_id = c_proj_element_id
7120   AND    pst.structure_type_id = ppst.structure_type_id;
7121 
7122   CURSOR l_get_structure_csr(c_project_id NUMBER)
7123   IS
7124   SELECT *
7125   FROM PA_PROJ_ELEMENTS
7126   WHERE project_id = c_project_id
7127   AND   object_type = 'PA_STRUCTURES';
7128 
7129   l_structure_rec                 l_get_structure_csr%ROWTYPE;
7130 
7131   --This cursor will either get all the working versions or the latest published version
7132 --  CURSOR l_get_structure_versions_csr(c_project_id NUMBER, c_structure_id NUMBER, c_pub_status VARCHAR2)
7133 --  IS
7134 --  SELECT b.element_version_id
7135 --  FROM   PA_PROJ_ELEM_VER_STRUCTURE b
7136 --  WHERE  b.proj_element_id = c_structure_id
7137 --  AND    b.project_id = c_project_id
7138 --  AND    (b.STATUS_CODE = 'STRUCTURE_PUBLISHED' AND b.LATEST_EFF_PUBLISHED_FLAG = 'Y' AND c_pub_status = 'Y')
7139 --    UNION
7140 --  SELECT b.element_version_id
7141 --  FROM   PA_PROJ_ELEM_VER_STRUCTURE b
7142 --  WHERE  b.proj_element_id = c_structure_id
7143 --  AND    b.project_id = c_project_id
7144 --  AND    (b.STATUS_CODE <> 'STRUCTURE_PUBLISHED' AND c_pub_status = 'N');
7145 
7146 
7147   l_structure_version_id         NUMBER;
7148   l_new_structure_version_id     NUMBER;
7149 
7150   CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
7151   IS
7152   SELECT *
7153   FROM PA_PROJ_ELEMENT_VERSIONS
7154   WHERE element_version_id = c_structure_version_id;
7155 
7156   l_structure_ver_rec       l_get_structure_ver_csr%ROWTYPE;
7157 
7158 --commented by hsiu for advanced structure changes
7159 --  CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER, c_pub_status VARCHAR2)
7160 --  IS
7161 --  SELECT a.*
7162 --  FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7163 --       PA_PROJ_ELEMENT_VERSIONS b
7164 --  WHERE b.element_version_id = c_structure_version_id
7165 --    AND b.element_version_id = a.element_version_id
7166 --    AND b.project_id = a.project_id
7167 --    AND (a.STATUS_CODE <> 'STRUCTURE_PUBLISHED' AND c_pub_status = 'N')
7168 --  UNION
7169 --  SELECT a.*
7170 --  FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7171 --       PA_PROJ_ELEMENT_VERSIONS b
7172 --  WHERE b.element_version_id = c_structure_version_id
7173 --    AND b.element_version_id = a.element_version_id
7174 --    AND b.project_id = a.project_id
7175 --    AND (a.STATUS_CODE = 'STRUCTURE_PUBLISHED' AND c_pub_status = 'Y' and a.LATEST_EFF_PUBLISHED_FLAG='Y');
7176 
7177   CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
7178   IS
7179   SELECT a.*
7180   FROM PA_PROJ_ELEM_VER_STRUCTURE a,
7181        PA_PROJ_ELEMENT_VERSIONS b
7182   WHERE b.element_version_id = c_structure_version_id
7183     AND b.element_version_id = a.element_version_id
7184     AND b.proj_element_id = a.proj_element_id
7185     AND b.project_id = a.project_id;
7186   l_structure_ver_attr_rec       l_get_structure_ver_attr_csr%ROWTYPE;
7187 
7188   CURSOR l_get_task_versions_csr(c_structure_version_id NUMBER)
7189   IS
7190   SELECT a.element_version_id, a.proj_element_id, a.display_sequence, a.wbs_level,
7191          b.object_id_from1 parent_element_version_id
7192   FROM PA_PROJ_ELEMENT_VERSIONS a,
7193        PA_OBJECT_RELATIONSHIPS b,
7194        pa_proj_elements c
7195   WHERE a.object_type = 'PA_TASKS'
7196   AND   a.parent_structure_version_id = c_structure_version_id
7197   AND   a.element_version_id = b.object_id_to1
7198   AND   b.relationship_type = 'S'
7199   and   c.link_task_flag <> 'Y'
7200   and   c.proj_element_id = a.proj_element_id
7201   ORDER BY a.display_sequence;
7202 
7203   l_task_versions_rec        l_get_task_versions_csr%ROWTYPE;
7204 
7205   CURSOR get_task_ver_weighting(p_task_ver_id NUMBER)
7206   IS
7207   select weighting_percentage
7208     from pa_object_relationships
7209    where object_id_to1 = p_task_ver_id
7210      and object_type_to = 'PA_TASKS'
7211      and relationship_type = 'S';
7212   l_weighting_percentage     NUMBER;
7213 
7214   l_ref_task_ver_id          NUMBER;
7215   l_peer_or_sub              VARCHAR2(10);
7216 
7217   CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
7218   IS
7219   SELECT a.*
7220   FROM PA_PROJ_ELEM_VER_SCHEDULE a,
7221        PA_PROJ_ELEMENT_VERSIONS b
7222   WHERE b.element_version_id = c_element_version_id
7223   AND   b.element_version_id = a.element_version_id
7224   AND   b.project_id = a.project_id;
7225 
7226   l_ver_schedule_attr_rec       l_get_ver_schedule_attr_csr%ROWTYPE;
7227 
7228   TYPE reference_tasks IS TABLE OF NUMBER
7229        INDEX BY BINARY_INTEGER;
7230 
7231   -- This table stores reference task version IDs for a particular wbs
7232   -- level. This provides a lookup to find the last task version
7233   -- at that level.
7234   l_outline_task_ref reference_tasks;
7235 
7236   l_last_wbs_level          NUMBER;
7237   l_task_version_id         NUMBER;
7238   l_pev_schedule_id         NUMBER;
7239 
7240   CURSOR l_get_tasks_csr(c_project_id NUMBER, c_proj_element_id NUMBER)
7241   IS
7242   SELECT a.*, b.task_number PA_TASK_NUMBER
7243   FROM PA_PROJ_ELEMENTS a,
7244        PA_TASKS b
7245   WHERE a.object_type = 'PA_TASKS'
7246   AND   a.project_id = c_project_id
7247   AND   a.proj_element_id = c_proj_element_id
7248   AND   a.LINK_TASK_FLAG <> 'Y'
7249   AND   a.proj_element_id = b.task_id(+);
7250 
7251   CURSOR l_get_pa_tasks_csr(c_project_id NUMBER, c_task_number VARCHAR2)
7252   IS
7253   SELECT task_id
7254   FROM PA_TASKS
7255   WHERE project_id = c_project_id
7256   AND   task_number = c_task_number;
7257 
7258   l_tasks_rec              l_get_tasks_csr%ROWTYPE;
7259   l_task_id                NUMBER;
7260   l_task_id_ref            reference_tasks;
7261   l_pev_structure_id       NUMBER;
7262 
7263   --Bug No 3634334  Commented for performance reasons and rewritten the query.
7264   /*CURSOR l_linking_tasks_csr(c_src_project_id NUMBER, c_dest_project_id NUMBER)
7265   IS
7266   select a.task_id
7267   from pa_tasks a, pa_tasks b, pa_proj_elements c
7268   where a.project_id = c_dest_project_id
7269     and b.project_id = c_src_project_id
7270     and a.task_number = b.task_number
7271     and b.task_id = c.proj_element_id
7272     and c.link_task_flag = 'Y';*/
7273 
7274   CURSOR l_linking_tasks_csr(c_src_project_id NUMBER, c_dest_project_id NUMBER)
7275   IS
7276   select /*+ INDEX(a PA_TASKS_U2) */ a.task_id    --Bug No 3634334
7277   from pa_tasks a, pa_tasks b, pa_proj_elements c
7278   where a.project_id = c_dest_project_id
7279     and b.project_id = c_src_project_id
7280     and a.task_number = b.task_number
7281     and c.project_id = c_src_project_id    --Bug No 3634334
7282     and b.task_id = c.proj_element_id
7283     and c.object_type = 'PA_TASKS'  -- Bug No. 3968095
7284     and c.link_task_flag = 'Y';
7285 
7286   l_task_delete NUMBER;
7287   l_task_delete_rvn NUMBER;
7288   l_task_delete_wbs_rvn NUMBER;
7289 
7290   Type task_match_tbl is Table of NUMBER
7291     INDEX BY BINARY_INTEGER;
7292   l_task_match_tbl task_match_tbl;
7293 
7294   CURSOR l_is_template (c_project_id NUMBER)
7295   IS
7296   SELECT 1 FROM PA_PROJECTS_ALL
7297   WHERE TEMPLATE_FLAG = 'Y'
7298   AND project_id = c_project_id;
7299   l_dummy NUMBER;
7300 
7301 --  l_is_workplan VARCHAR2(1);
7302 --  l_is_billing  VARCHAR2(1);
7303 --  l_is_costing  VARCHAR2(1);
7304   l_structure_pub_status VARCHAR2(1);
7305   l_rowid VARCHAR2(255);
7306   l_name         VARCHAR2(240);
7307   l_project_name VARCHAR2(30);
7308   l_append       VARCHAR2(10) := ': ';
7309   l_suffix       VARCHAR2(80);
7310 -- anlee
7311 -- Dates changes
7312   l_delta        NUMBER;
7313 -- End of changes
7314 
7315 --HSIU
7316 --Added for calculating delta using target date
7317   CURSOR get_target_dates
7318   IS
7319   SELECT target_start_date, target_finish_date
7320   FROM   PA_PROJECTS_ALL
7321   WHERE  PROJECT_ID = p_dest_project_id;
7322   l_target_start_date    DATE;
7323   l_target_finish_date   DATE;
7324   l_scheduled_start_date  DATE;
7325   l_scheduled_finish_date DATE;
7326 -- hsiu
7327 -- Added for advanced structure
7328   l_src_template_flag  VARCHAR2(1);
7329   l_dest_template_flag VARCHAR2(1);
7330   l_select             NUMBER; -- For selecting structure versions:
7331                                -- 1 for last updated working
7332                                -- 2 for all working, baselined and latest published
7333                                -- 3 for latest published only
7334   l_copy               NUMBER; -- For status of copied structure version
7335                                -- 1 for Working
7336                                -- 2 for Published and Baselined
7337                                -- 3 for same as original
7338                                -- 4 for Published only
7339   l_status_code        VARCHAR2(30);
7340   l_baseline_flag      VARCHAR2(1);
7341   l_latest_flag        VARCHAR2(1);
7342 
7343   CURSOR l_get_structure_versions_csr(c_project_id NUMBER, c_structure_id NUMBER,
7344                                       c_option NUMBER)
7345   IS
7346   SELECT distinct(b.element_version_id)
7347   FROM   pa_proj_elements a, pa_proj_elem_ver_structure b
7348   WHERE  a.project_id = c_project_id
7349   AND    a.proj_element_id = c_structure_id
7350   AND    a.project_id = b.project_id
7351   AND    a.proj_element_id = b.proj_element_id
7352   AND    b.status_code <> 'STRUCTURE_PUBLISHED'
7353 --Bug 2643432
7354 --This is a temporary fix. The API returns the first row, but since date
7355 --comparison only compares up to the day, not the second, we can only
7356 --return the first selected row in this API.
7357   AND    b.element_version_id = PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(c_structure_id)
7358 --  AND    b.last_update_date = (
7359 --         SELECT MAX(c.last_update_date)
7360 --         FROM pa_proj_elem_ver_structure c
7361 --         WHERE c.project_id = a.project_id
7362 --         AND c.proj_element_id = a.proj_element_id
7363 --         AND c.status_code <> 'STRUCTURE_PUBLISHED')
7364   AND    1 = (c_option)
7365   UNION
7366   SELECT distinct(b.element_version_id)
7367   FROM   pa_proj_elements a, pa_proj_elem_ver_structure b
7368   WHERE  a.project_id = c_project_id
7369   AND    a.proj_element_id = c_structure_id
7370   AND    a.project_id = b.project_id
7371   AND    a.proj_element_id = b.proj_element_id
7372   AND    ((b.status_code = 'STRUCTURE_PUBLISHED' AND
7373            b.latest_eff_published_flag = 'Y')
7374           OR
7375           (b.status_code = 'STRUCTURE_PUBLISHED' AND
7376            b.current_flag = 'Y')
7377           OR
7378           (b.status_code <> 'STRUCTURE_PUBLISHED'))
7379   AND    2 = (c_option)
7380   UNION
7381   SELECT distinct(b.element_version_id)
7382   FROM   pa_proj_elements a, pa_proj_elem_ver_structure b
7383   WHERE  a.project_id = c_project_id
7384   AND    a.proj_element_id = c_structure_id
7385   AND    a.project_id = b.project_id
7386   AND    a.proj_element_id = b.proj_element_id
7387   AND    b.status_code = 'STRUCTURE_PUBLISHED'
7388   AND    b.latest_eff_published_flag = 'Y'
7389   AND    3 = (c_option);
7390 
7391 
7392   CURSOR get_wp_attr(c_proj_element_id NUMBER) IS
7393     select *
7394     from   pa_proj_workplan_attr
7395     where  proj_element_id = c_proj_element_id;
7396   l_wp_attr_rec get_wp_attr%ROWTYPE;
7397 
7398   CURSOR get_progress_attr(c_proj_element_id NUMBER, c_project_id NUMBER) IS            -- For Bug 3968095
7399     select *
7400     from   pa_proj_progress_attr
7401     where  object_type = 'PA_STRUCTURES'
7402     and    object_id = c_proj_element_id
7403     and project_id = c_project_id;                                      -- For Bug 3968095
7404   l_progress_attr_rec  get_progress_attr%ROWTYPE;
7405 
7406   CURSOR get_proj_rec_ver_number(c_project_id NUMBER) IS
7407     select record_version_number
7408     from pa_projects_all
7409     where project_id = c_project_id;
7410   l_proj_record_ver_number   NUMBER;
7411   l_struc_scheduled_start_date  DATE;
7412   l_struc_scheduled_finish_date DATE;
7413 --hsiu added for task version status
7414   l_task_unpub_ver_status_code    pa_proj_element_versions.TASK_UNPUB_VER_STATUS_CODE%TYPE;
7415 --end task version status changes
7416 
7417 --hsiu: bug 2667527
7418   CURSOR get_init_task_stat(c_task_type_id NUMBER) IS
7419     select INITIAL_STATUS_CODE
7420       from pa_task_types
7421      where task_type_id = c_task_type_id;
7422   l_init_status_code PA_TASK_TYPES.INITIAL_STATUS_CODE%TYPE;
7423 --end bug 2667527
7424 BEGIN
7425   pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE');
7426 
7427   IF (p_debug_mode = 'Y') THEN
7428     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE begin');
7429   END IF;
7430 
7431   IF (p_commit = FND_API.G_TRUE) THEN
7432     savepoint copy_structure_pvt;
7433   END IF;
7434 
7435   -- Check if source and destination project are the same
7436   if p_src_project_id = p_dest_project_id then
7437     x_return_status := FND_API.G_RET_STS_SUCCESS;
7438     return;
7439   end if;
7440 
7441   --Check if the destination project is a template
7442   OPEN l_is_template(p_dest_project_id);
7443   FETCH l_is_template INTO l_dummy;
7444   IF l_is_template%NOTFOUND THEN
7445     l_dest_template_flag := 'N';
7446   ELSE
7447     l_dest_template_flag := 'Y';
7448   END IF;
7449   CLOSE l_is_template;
7450 
7451   --Check if the source project is a template
7452   OPEN l_is_template(p_src_project_id);
7453   FETCH l_is_template INTO l_dummy;
7454   IF l_is_template%NOTFOUND THEN
7455     l_src_template_flag := 'N';
7456   ELSE
7457     l_src_template_flag := 'Y';
7458   END IF;
7459   CLOSE l_is_template;
7460 
7461 /* commented by Hsiu
7462   -- delta is now calculated for each version
7463 
7464   -- anlee
7465   -- Dates changes
7466   if (p_delta = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR (p_delta is NULL) then
7467     l_delta := 0;
7468   else
7469     l_delta := p_delta;
7470   end if;
7471   -- End of changes
7472 */
7473 
7474 /* commented by Hsiu
7475 
7476   -- Check split_cost_from_workplan_flag for source project
7477   SELECT split_cost_from_workplan_flag
7478   INTO l_split_cost_workplan_flag
7479   FROM PA_PROJECTS_ALL
7480   WHERE project_id = p_src_project_id;
7481 
7482   if l_split_cost_workplan_flag = 'N' then
7483     OPEN l_get_structure_csr(p_src_project_id);
7484     FETCH l_get_structure_csr INTO l_structure_rec;
7485     if l_get_structure_csr%NOTFOUND then
7486       CLOSE l_get_structure_csr;
7487       PA_UTILS.ADD_MESSAGE('PA','PA_PS_STRUC_NOT_EXIST');
7488       l_msg_data := 'PA_PS_STRUC_NOT_EXIST';
7489       RAISE FND_API.G_EXC_ERROR;
7490     end if;
7491 
7492     CLOSE l_get_structure_csr;
7493 */
7494 
7495   select name into l_project_name
7496     from pa_projects_all
7497    where project_id = p_dest_project_id;
7498 
7499   select meaning
7500     into l_suffix
7501     from pa_lookups
7502    where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
7503      and lookup_code = 'WORKPLAN';
7504 
7505   --Hsiu start modification
7506   --Get target dates
7507   l_delta := 0;
7508   OPEN get_target_dates;
7509   FETCH get_target_dates into l_target_start_date, l_target_finish_date;
7510   CLOSE get_target_dates;
7511   --end modification
7512 
7513   OPEN l_get_structure_csr(p_src_project_id);
7514   LOOP
7515     FETCH l_get_structure_csr INTO l_structure_rec;
7516     EXIT WHEN l_get_structure_csr%NOTFOUND;
7517 
7518     --check if this is a split project
7519 --    SELECT split_cost_from_workplan_flag
7520 --    INTO l_split_cost_workplan_flag
7521 --    FROM PA_PROJECTS_ALL
7522 --    WHERE project_id = p_src_project_id;
7523 
7524 --    OPEN l_get_structure_type_csr(l_structure_rec.proj_element_id);
7525 --    FETCH l_get_structure_type_csr INTO l_structure_type;
7526 --    CLOSE l_get_structure_type_csr;
7527 
7528 --    IF l_split_cost_workplan_flag = 'N' THEN
7529 --      --there should not be a second structure
7530 --      l_structure_type := NULL;
7531 --    END IF;
7532 
7533 -- Hsiu added
7534 -- For advanced structure
7535 
7536     l_name := substrb(l_project_name, 1, 240);
7537     IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_src_project_id)
7538         = 'N') THEN
7539       --Workplan and financial are separate structures
7540       IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
7541                                      l_structure_rec.proj_element_id, 'WORKPLAN')
7542          = 'Y') THEN
7543 
7544         --Workplan structure
7545         l_structure_type := 'WORKPLAN';
7546 
7547         --Get workplan attributes
7548         OPEN get_wp_attr(l_structure_rec.proj_element_id);
7549         FETCH get_wp_attr into l_wp_attr_rec;
7550         CLOSE get_wp_attr;
7551 
7552         OPEN get_progress_attr(l_structure_rec.proj_element_id, l_structure_rec.project_id);        -- For Bug 3968095
7553         FETCH get_progress_attr into l_progress_attr_rec;
7554         CLOSE get_progress_attr;
7555 
7556         --Modify name; add suffix
7557         l_name := substrb(l_project_name||l_append||l_suffix, 1, 240);
7558 
7559         IF (l_src_template_flag = 'Y') AND
7560            (l_dest_template_flag = 'Y') THEN
7561           l_select := 1;
7562           l_copy := 1;
7563         ELSIF (l_src_template_flag = 'Y') AND
7564               (l_dest_template_flag = 'N') THEN
7565           l_select := 1;
7566           IF (l_wp_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y' AND
7567               l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N') THEN
7568             l_copy := 1;
7569           ELSE
7570             l_copy := 2;
7571           END IF;
7572         ELSIF (l_src_template_flag = 'N') AND
7573               (l_dest_template_flag = 'N') THEN
7574           l_select := 2;
7575           l_copy := 3;
7576         ELSIF (l_src_template_flag = 'N') AND
7577               (l_dest_template_flag = 'Y') THEN
7578           IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7579                           l_structure_rec.proj_element_id) = 'Y') THEN
7580             l_select := 3;
7581           ELSE
7582             l_select := 1;
7583           END IF;
7584           l_copy := 1;
7585         END IF;
7586       END IF;
7587       IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(
7588                                      l_structure_rec.proj_element_id, 'FINANCIAL')
7589          = 'Y') THEN
7590 
7591         --Financial structure
7592         l_structure_type := 'FINANCIAL';
7593 
7594         IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7595                         l_structure_rec.proj_element_id) = 'Y') THEN
7596           l_select := 3;
7597         ELSE
7598           l_select := 1;
7599         END IF;
7600         IF (l_dest_template_flag = 'Y') THEN
7601           l_copy := 1;
7602         ELSE
7603           l_copy := 4;
7604         END IF;
7605 
7606       END IF;
7607     ELSE--share flag is 'Y' for source project
7608 
7609       --Workplan and financial as 1 structure
7610       l_structure_type := NULL; --for share structure
7611 
7612       --Get workplan attributes
7613       OPEN get_wp_attr(l_structure_rec.proj_element_id);
7614       FETCH get_wp_attr into l_wp_attr_rec;
7615       CLOSE get_wp_attr;
7616 
7617       OPEN get_progress_attr(l_structure_rec.proj_element_id, l_structure_rec.project_id);      -- For Bug 3968095
7618       FETCH get_progress_attr into l_progress_attr_rec;
7619       CLOSE get_progress_attr;
7620 
7621       IF (l_src_template_flag = 'Y') AND
7622          (l_dest_template_flag = 'Y') THEN
7623         l_select := 1;
7624         l_copy := 1;
7625       ELSIF (l_src_template_flag = 'Y') AND
7626             (l_dest_template_flag = 'N') THEN
7627         l_select := 1;
7628         IF (l_wp_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y' AND
7629             l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N') THEN
7630           l_copy := 1;
7631         ELSE
7632           l_copy := 2;
7633         END IF;
7634       ELSIF (l_src_template_flag = 'N') AND
7635             (l_dest_template_flag = 'N') THEN
7636         l_select := 2;
7637         l_copy := 3;
7638       ELSIF (l_src_template_flag = 'N') AND
7639             (l_dest_template_flag = 'Y') THEN
7640         IF (PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_src_project_id,
7641                         l_structure_rec.proj_element_id) = 'Y') THEN
7642           l_select := 3;
7643         ELSE
7644           l_select := 1;
7645         END IF;
7646         l_copy := 1;
7647       END IF;
7648     END IF;
7649 -- end advanced structure changes
7650 
7651 /*
7652     IF (l_structure_type = 'WORKPLAN') THEN
7653       l_name := substr(l_project_name||l_append||l_suffix, 1, 240);
7654     ELSE
7655       l_name := substr(l_project_name, 1, 240);
7656     END IF;
7657 */
7658     IF (p_debug_mode = 'Y') THEN
7659       pa_debug.debug('create structure');
7660     END IF;
7661 
7662 --Commented by hsiu
7663 --  IF (l_dest_template_flag = 'Y' AND l_structure_type = 'WORKPLAN') THEN
7664 --Create new structure
7665 --    PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
7666 --    ( p_validate_only           => FND_API.G_FALSE
7667 --     ,p_project_id              => p_dest_project_id
7668 --     ,p_structure_number        => l_name
7669 --     ,p_structure_name          => l_name
7670 --     ,p_calling_flag            => l_structure_type
7671 --     ,x_structure_id            => l_structure_id
7672 --     ,x_return_status           => l_return_status
7673 --     ,x_msg_count               => l_msg_count
7674 --     ,x_msg_data                => l_msg_data );
7675 
7676 --    --Check if there is any error.
7677 --    l_msg_count := FND_MSG_PUB.count_msg;
7678 --    IF l_msg_count > 0 THEN
7679 --      x_msg_count := l_msg_count;
7680 --      IF x_msg_count = 1 THEN
7681 --        x_msg_data := l_msg_data;
7682 --      END IF;
7683 --      RAISE FND_API.G_EXC_ERROR;
7684 --    END IF;
7685 
7686 --    IF (p_debug_mode = 'Y') THEN
7687 --      pa_debug.debug('create structure version');
7688 --    END IF;
7689 --    PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
7690 --    ( p_validate_only         => FND_API.G_FALSE
7691 --     ,p_structure_id          => l_structure_id
7692 --     ,x_structure_version_id  => l_new_structure_version_id
7693 --     ,x_return_status         => l_return_status
7694 --     ,x_msg_count             => l_msg_count
7695 --     ,x_msg_data              => l_msg_data );
7696 
7697 --    --Check if there is any error.
7698 --    l_msg_count := FND_MSG_PUB.count_msg;
7699 --    IF l_msg_count > 0 THEN
7700 --      x_msg_count := l_msg_count;
7701 --      IF x_msg_count = 1 THEN
7702 --        x_msg_data := l_msg_data;
7703 --      END IF;
7704 --      RAISE FND_API.G_EXC_ERROR;
7705 --    END IF;
7706 
7707 --    IF (p_debug_mode = 'Y') THEN
7708 --      pa_debug.debug('create structure version attr');
7709 --    END IF;
7710 --    PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
7711 --    ( p_validate_only               => FND_API.G_FALSE
7712 --     ,p_structure_version_id        => l_new_structure_version_id
7713 --     ,p_structure_version_name      => l_name
7714 --     ,p_structure_version_desc      => NULL
7715 --     ,p_effective_date              => NULL
7716 --     ,p_latest_eff_published_flag   => 'N'
7717 --     ,p_locked_status_code          => 'UNLOCKED'
7718 --     ,p_struct_version_status_code  => 'STRUCTURE_WORKING'
7719 --     ,p_baseline_current_flag       => 'N'
7720 --     ,p_baseline_original_flag      => 'N'
7721 --     ,x_pev_structure_id            => l_pev_structure_id
7722 --     ,x_return_status               => l_return_status
7723 --     ,x_msg_count                   => l_msg_count
7724 --     ,x_msg_data                    => l_msg_data );
7725 
7726 --    --Check if there is any error.
7727 --    l_msg_count := FND_MSG_PUB.count_msg;
7728 --    IF l_msg_count > 0 THEN
7729 --      x_msg_count := l_msg_count;
7730 --      IF x_msg_count = 1 THEN
7731 --        x_msg_data := l_msg_data;
7732 --      END IF;
7733 --      RAISE FND_API.G_EXC_ERROR;
7734 --    END IF;
7735 
7736 --    IF (p_debug_mode = 'Y') THEN
7737 --      pa_debug.debug('create schedule version');
7738 --    END IF;
7739 --    PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
7740 --    ( p_validate_only           => FND_API.G_FALSE
7741 --     ,p_element_version_id      => l_new_structure_version_id
7742 --     ,p_scheduled_start_date    => SYSDATE
7743 --     ,p_scheduled_end_date      => SYSDATE
7744 --     ,x_pev_schedule_id         => l_pev_schedule_id
7745 --     ,x_return_status           => l_return_status
7746 --     ,x_msg_count             => l_msg_count
7747 --     ,x_msg_data              => l_msg_data );
7748 
7749 --    --Check if there is any error.
7750 --    l_msg_count := FND_MSG_PUB.count_msg;
7751 --    IF l_msg_count > 0 THEN
7752 --      x_msg_count := l_msg_count;
7753 --      IF x_msg_count = 1 THEN
7754 --        x_msg_data := l_msg_data;
7755 --      END IF;
7756 --      RAISE FND_API.G_EXC_ERROR;
7757 --    END IF;
7758 
7759 --  ELSE
7760 --copy from
7761 --end commented code by hsiu
7762 
7763     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
7764     ( p_validate_only           => FND_API.G_FALSE
7765      ,p_project_id              => p_dest_project_id
7766      ,p_structure_number        => l_name
7767      ,p_structure_name          => l_name
7768      ,p_calling_flag            => l_structure_type
7769      ,p_structure_description   => l_structure_rec.description
7770      ,p_attribute_category      => l_structure_rec.attribute_category
7771      ,p_attribute1              => l_structure_rec.attribute1
7772      ,p_attribute2              => l_structure_rec.attribute2
7773      ,p_attribute3              => l_structure_rec.attribute3
7774      ,p_attribute4              => l_structure_rec.attribute4
7775      ,p_attribute5              => l_structure_rec.attribute5
7776      ,p_attribute6              => l_structure_rec.attribute6
7777      ,p_attribute7              => l_structure_rec.attribute7
7778      ,p_attribute8              => l_structure_rec.attribute8
7779      ,p_attribute9              => l_structure_rec.attribute9
7780      ,p_attribute10             => l_structure_rec.attribute10
7781      ,p_attribute11             => l_structure_rec.attribute11
7782      ,p_attribute12             => l_structure_rec.attribute12
7783      ,p_attribute13             => l_structure_rec.attribute13
7784      ,p_attribute14             => l_structure_rec.attribute14
7785      ,p_attribute15             => l_structure_rec.attribute15
7786    ,p_approval_reqd_flag          =>l_wp_attr_rec.WP_APPROVAL_REQD_FLAG
7787    ,p_auto_publish_flag           =>l_wp_attr_rec.WP_AUTO_PUBLISH_FLAG
7788    ,p_approver_source_id          =>l_wp_attr_rec.WP_APPROVER_SOURCE_ID
7789    ,p_approver_source_type        =>l_wp_attr_rec.WP_APPROVER_SOURCE_TYPE
7790    ,p_default_display_lvl         =>l_wp_attr_rec.WP_DEFAULT_DISPLAY_LVL
7791    ,p_enable_wp_version_flag      =>l_wp_attr_rec.WP_ENABLE_VERSION_FLAG
7792    ,p_auto_pub_upon_creation_flag =>l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
7793    ,p_auto_sync_txn_date_flag     =>l_wp_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
7794    ,p_txn_date_sync_buf_days      =>l_wp_attr_rec.TXN_DATE_SYNC_BUF_DAYS
7795 --LDENG
7796    ,p_lifecycle_version_id         => l_wp_attr_rec.LIFECYCLE_VERSION_ID
7797    ,p_current_phase_version_id     => l_wp_attr_rec.CURRENT_PHASE_VERSION_ID
7798 --END LDENG
7799    ,p_PROGRESS_CYCLE_ID           =>l_progress_attr_rec.PROGRESS_CYCLE_ID
7800    ,p_wq_enable_flag              =>l_progress_attr_rec.WQ_ENABLE_FLAG
7801    ,p_remain_effort_enable_flag   =>l_progress_attr_rec.REMAIN_EFFORT_ENABLE_FLAG
7802    ,p_percent_comp_enable_flag    =>l_progress_attr_rec.PERCENT_COMP_ENABLE_FLAG
7803    ,p_next_progress_update_date   =>l_progress_attr_rec.NEXT_PROGRESS_UPDATE_DATE
7804      ,x_structure_id            => l_structure_id
7805      ,x_return_status           => l_return_status
7806      ,x_msg_count               => l_msg_count
7807      ,x_msg_data                => l_msg_data );
7808 
7809     IF (p_debug_mode = 'Y') THEN
7810       pa_debug.debug('done: '||l_return_status);
7811     END IF;
7812 
7813     --Check if there is any error.
7814     l_msg_count := FND_MSG_PUB.count_msg;
7815     IF l_msg_count > 0 THEN
7816       x_msg_count := l_msg_count;
7817       IF x_msg_count = 1 THEN
7818         x_msg_data := l_msg_data;
7819       END IF;
7820       RAISE FND_API.G_EXC_ERROR;
7821     END IF;
7822 
7823 
7824 /*
7825     -- Get all of the tasks for the source project
7826     OPEN l_get_tasks_csr(p_src_project_id);
7827     LOOP
7828       FETCH l_get_tasks_csr INTO l_tasks_rec;
7829       EXIT WHEN l_get_tasks_csr%NOTFOUND;
7830 
7831       -- CREATE_TASK
7832       PA_TASK_PUB1.CREATE_TASK
7833       ( p_validate_only          => FND_API.G_FALSE
7834        ,p_object_type            => 'PA_TASKS'
7835        ,p_project_id             => p_dest_project_id
7836        ,p_structure_id           => l_structure_id
7837        ,p_task_number            => l_tasks_rec.element_number
7838        ,p_task_name              => l_tasks_rec.name
7839        ,p_task_manager_id        => l_tasks_rec.manager_person_id
7840        ,p_scheduled_start_date   => sysdate
7841        ,p_scheduled_finish_date  => sysdate
7842        ,x_task_id                => l_task_id
7843        ,x_return_status          => l_return_status
7844        ,x_msg_count              => l_msg_count
7845        ,x_msg_data               => l_msg_data);
7846 
7847       --Check if there is any error.
7848       l_msg_count := FND_MSG_PUB.count_msg;
7849       IF l_msg_count > 0 THEN
7850         x_msg_count := l_msg_count;
7851         IF x_msg_count = 1 THEN
7852           x_msg_data := l_msg_data;
7853         END IF;
7854         RAISE FND_API.G_EXC_ERROR;
7855       END IF;
7856 
7857       -- Store the newly created task ID
7858       l_task_id_ref(l_tasks_rec.proj_element_id) := l_task_id;
7859     END LOOP;
7860     CLOSE l_get_tasks_csr;
7861 */
7862 
7863 --commented by hsiu
7864     --Get structure type
7865 --  l_is_workplan := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'WORKPLAN');
7866 --  l_is_billing  := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'BILLING');
7867 --  l_is_costing  := pa_project_structure_utils.Get_Struc_Type_For_Structure(l_structure_id,'COSTING');
7868 
7869 --  IF (l_is_billing = 'Y') OR (l_is_costing = 'Y') THEN
7870 --    --Check if it has any published version.
7871 --    If (pa_project_structure_utils.CHECK_PUBLISHED_VER_EXISTS(
7872 --            p_src_project_id, l_structure_rec.proj_element_id) = 'Y') THEN
7873 --      l_structure_pub_status := 'Y';
7874 --    ELSE
7875 --      l_structure_pub_status := 'N';
7876 --    END IF;
7877 --  ELSE
7878 --    l_structure_pub_status := 'N';
7879 --  END IF;
7880 --end commented code by hsiu
7881 
7882     -- Copy all of the structure versions, either published or unpublished from the source structure
7883     -- depending on the flag
7884     OPEN l_get_structure_versions_csr(p_src_project_id,
7885                                       l_structure_rec.proj_element_id,
7886                                       l_select);
7887     LOOP
7888       FETCH l_get_structure_versions_csr INTO l_structure_version_id;
7889       EXIT WHEN l_get_structure_versions_csr%NOTFOUND;
7890 
7891       -- Get structure version info
7892       OPEN l_get_structure_ver_csr(l_structure_version_id);
7893       FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
7894       CLOSE l_get_structure_ver_csr;
7895 
7896 
7897       IF (p_debug_mode = 'Y') THEN
7898         pa_debug.debug('create structure version');
7899       END IF;
7900       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
7901       ( p_validate_only         => p_validate_only
7902        ,p_structure_id          => l_structure_id
7903        ,p_attribute_category    => l_structure_ver_rec.attribute_category
7904        ,p_attribute1            => l_structure_ver_rec.attribute1
7905        ,p_attribute2            => l_structure_ver_rec.attribute2
7906        ,p_attribute3            => l_structure_ver_rec.attribute3
7907        ,p_attribute4            => l_structure_ver_rec.attribute4
7908        ,p_attribute5            => l_structure_ver_rec.attribute5
7909        ,p_attribute6            => l_structure_ver_rec.attribute6
7910        ,p_attribute7            => l_structure_ver_rec.attribute7
7911        ,p_attribute8            => l_structure_ver_rec.attribute8
7912        ,p_attribute9            => l_structure_ver_rec.attribute9
7913        ,p_attribute10           => l_structure_ver_rec.attribute10
7914        ,p_attribute11           => l_structure_ver_rec.attribute11
7915        ,p_attribute12           => l_structure_ver_rec.attribute12
7916        ,p_attribute13           => l_structure_ver_rec.attribute13
7917        ,p_attribute14           => l_structure_ver_rec.attribute14
7918        ,p_attribute15           => l_structure_ver_rec.attribute15
7919        ,x_structure_version_id  => l_new_structure_version_id
7920        ,x_return_status         => l_return_status
7921        ,x_msg_count             => l_msg_count
7922        ,x_msg_data              => l_msg_data );
7923 
7924       --Check if there is any error.
7925       l_msg_count := FND_MSG_PUB.count_msg;
7926       IF l_msg_count > 0 THEN
7927         x_msg_count := l_msg_count;
7928         IF x_msg_count = 1 THEN
7929           x_msg_data := l_msg_data;
7930         END IF;
7931         RAISE FND_API.G_EXC_ERROR;
7932       END IF;
7933 
7934       --Structure version attributes creates after tasks are created
7935 
7936       -- If structure is workplan type create schedule version record
7937       if (l_structure_type = 'WORKPLAN') OR (l_structure_type IS NULL) THEN
7938 
7939         OPEN l_get_ver_schedule_attr_csr(l_structure_version_id);
7940         FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
7941         CLOSE l_get_ver_schedule_attr_csr;
7942 
7943         --Hsiu added
7944         --Project Dates changes: Calculate delta
7945         IF (l_target_start_date IS NULL) THEN
7946           l_delta := 0;
7947         ELSE
7948           l_delta := l_target_start_date - l_ver_schedule_attr_rec.scheduled_start_date;
7949         END IF;
7950 
7951         --calcuate scheduled start and finish dates
7952         IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_start_date + l_delta) THEN
7953           l_scheduled_start_date := l_target_finish_date;
7954         ELSE
7955           l_scheduled_start_date := l_ver_schedule_attr_rec.scheduled_start_date + l_delta;
7956         END IF;
7957 
7958         IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_finish_date + l_delta) THEN
7959           l_scheduled_finish_date := l_target_finish_date;
7960         ELSE
7961           l_scheduled_finish_date := l_ver_schedule_attr_rec.scheduled_finish_date + l_delta;
7962         END IF;
7963         -- end calculate scheduled start and finish dates
7964 
7965 
7966         IF (p_debug_mode = 'Y') THEN
7967           pa_debug.debug('create schedule version for structure');
7968         END IF;
7969 
7970         l_struc_scheduled_start_date  := l_scheduled_start_date;
7971         l_struc_scheduled_finish_date := l_scheduled_finish_date;
7972 
7973         PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
7974         ( p_validate_only           => FND_API.G_FALSE
7975          ,p_element_version_id      => l_new_structure_version_id
7976          ,p_calendar_id             => l_ver_schedule_attr_rec.calendar_id
7977          ,p_scheduled_start_date    => l_scheduled_start_date
7978          ,p_scheduled_end_date      => l_scheduled_finish_date
7979          ,p_obligation_start_date   => l_ver_schedule_attr_rec.obligation_start_date
7980          ,p_obligation_end_date     => l_ver_schedule_attr_rec.obligation_finish_date
7981          ,p_actual_start_date       => l_ver_schedule_attr_rec.actual_start_date
7982          ,p_actual_finish_date      => l_ver_schedule_attr_rec.actual_finish_date
7983          ,p_estimate_start_date     => l_ver_schedule_attr_rec.estimated_start_date
7984          ,p_estimate_finish_date    => l_ver_schedule_attr_rec.estimated_finish_date
7985          ,p_duration                => l_ver_schedule_attr_rec.duration
7986          ,p_early_start_date        => l_ver_schedule_attr_rec.early_start_date
7987          ,p_early_end_date          => l_ver_schedule_attr_rec.early_finish_date
7988          ,p_late_start_date         => l_ver_schedule_attr_rec.late_start_date
7989          ,p_late_end_date           => l_ver_schedule_attr_rec.late_finish_date
7990          ,p_milestone_flag          => l_ver_schedule_attr_rec.milestone_flag
7991          ,p_critical_flag           => l_ver_schedule_attr_rec.critical_flag
7992          ,p_WQ_PLANNED_QUANTITY     => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
7993          ,p_PLANNED_EFFORT          => l_ver_schedule_attr_rec.PLANNED_EFFORT
7994          ,x_pev_schedule_id         => l_pev_schedule_id
7995          ,x_return_status           => l_return_status
7996          ,x_msg_count               => l_msg_count
7997          ,x_msg_data                => l_msg_data );
7998 
7999         --Check if there is any error.
8000         l_msg_count := FND_MSG_PUB.count_msg;
8001         IF l_msg_count > 0 THEN
8002           x_msg_count := l_msg_count;
8003           IF x_msg_count = 1 THEN
8004             x_msg_data := l_msg_data;
8005           END IF;
8006           RAISE FND_API.G_EXC_ERROR;
8007         END IF;
8008 
8009       end if;
8010 
8011 
8012       -- Fetch all task versions for this structure version
8013       OPEN l_get_task_versions_csr(l_structure_version_id);
8014 
8015       l_last_wbs_level := null;
8016 
8017       LOOP
8018         FETCH l_get_task_versions_csr INTO l_task_versions_rec;
8019         EXIT WHEN l_get_task_versions_csr%NOTFOUND or p_copy_task_flag = 'N';
8020 
8021         if l_last_wbs_level is null then
8022           -- first task version being created
8023           -- This task should have wbs level = 1
8024           l_ref_task_ver_id := l_new_structure_version_id;
8025           l_peer_or_sub := 'SUB';
8026         else
8027           if l_task_versions_rec.wbs_level > l_last_wbs_level then
8028             l_ref_task_ver_id := l_outline_task_ref(l_last_wbs_level);
8029             l_peer_or_sub := 'SUB';
8030           else
8031             l_ref_task_ver_id := l_outline_task_ref(l_task_versions_rec.wbs_level);
8032             l_peer_or_sub := 'PEER';
8033           end if;
8034         end if;
8035 
8036 
8037         --check if task already exist; if it does, then skip
8038         -- CREATE_TASK
8039         IF (p_debug_mode = 'Y') THEN
8040           pa_debug.debug('l_task_versions_rec.proj_elemnet_id = '||l_task_versions_rec.proj_element_id);
8041         END IF;
8042 
8043         If (NOT (l_task_match_tbl.exists(l_task_versions_rec.proj_element_id))) THEN
8044 
8045           OPEN l_get_tasks_csr(p_src_project_id, l_task_versions_rec.proj_element_id);
8046           FETCH l_get_tasks_csr INTO l_tasks_rec;
8047           CLOSE l_get_tasks_csr;
8048 
8049 --commented by hsiu
8050 --          If (l_is_workplan = 'Y') AND (l_is_billing = 'N') AND (l_is_costing = 'N') THEN
8051           l_task_id := NULL;
8052           IF (l_structure_type = 'WORKPLAN') THEN
8053             --get new id
8054             select PA_TASKS_S.NEXTVAL into l_task_id from sys.dual;
8055           ELSE
8056             --id exists in pa_tasks. Need to find matching id by using task_number
8057             OPEN l_get_pa_tasks_csr(p_dest_project_id, l_tasks_rec.PA_TASK_NUMBER);
8058             FETCH l_get_pa_tasks_csr into l_task_id;
8059             CLOSE l_get_pa_tasks_csr;
8060           END IF;
8061 
8062           IF (p_debug_mode = 'Y') THEN
8063             pa_debug.debug('inserting into task with id'||l_task_id);
8064           END IF;
8065 
8066           OPEN get_init_task_stat(l_tasks_rec.TYPE_ID);
8067           FETCH get_init_task_stat into l_init_status_code;
8068           CLOSE get_init_task_stat;
8069 
8070           PA_PROJ_ELEMENTS_PKG.Insert_Row(
8071                  X_ROW_ID                               => l_rowid
8072                 ,X_PROJ_ELEMENT_ID                      => l_task_id
8073                 ,X_PROJECT_ID                           => p_dest_project_id
8074                 ,X_OBJECT_TYPE                          => 'PA_TASKS'
8075                 ,X_ELEMENT_NUMBER                       => l_tasks_rec.ELEMENT_NUMBER
8076                 ,X_NAME                                 => l_tasks_rec.NAME
8077                 ,X_DESCRIPTION                          => l_tasks_rec.DESCRIPTION
8078                 ,X_STATUS_CODE                          => l_init_status_code
8079                 ,X_WF_STATUS_CODE                       => l_tasks_rec.WF_STATUS_CODE
8080                 ,X_PM_PRODUCT_CODE                      => l_tasks_rec.PM_SOURCE_CODE
8081                 ,X_PM_TASK_REFERENCE                    => l_tasks_rec.PM_SOURCE_REFERENCE
8082                 ,X_CLOSED_DATE                          => l_tasks_rec.CLOSED_DATE
8083                 ,X_LOCATION_ID                          => l_tasks_rec.LOCATION_ID
8084                 ,X_MANAGER_PERSON_ID                    => l_tasks_rec.MANAGER_PERSON_ID
8085                 ,X_CARRYING_OUT_ORGANIZATION_ID         => l_tasks_rec.CARRYING_OUT_ORGANIZATION_ID
8086                 ,X_TYPE_ID                              => l_tasks_rec.TYPE_ID
8087                 ,X_PRIORITY_CODE                    => l_tasks_rec.PRIORITY_CODE
8088                 ,X_INC_PROJ_PROGRESS_FLAG               => l_tasks_rec.INC_PROJ_PROGRESS_FLAG
8089                 ,X_REQUEST_ID                           => l_tasks_rec.REQUEST_ID
8090                 ,X_PROGRAM_APPLICATION_ID               => l_tasks_rec.PROGRAM_APPLICATION_ID
8091                 ,X_PROGRAM_ID                           => l_tasks_rec.PROGRAM_ID
8092                 ,X_PROGRAM_UPDATE_DATE                  => l_tasks_rec.PROGRAM_UPDATE_DATE
8093                 ,X_LINK_TASK_FLAG                       => l_tasks_rec.LINK_TASK_FLAG
8094                 ,X_ATTRIBUTE_CATEGORY                   => l_tasks_rec.ATTRIBUTE_CATEGORY
8095                 ,X_ATTRIBUTE1                           => l_tasks_rec.ATTRIBUTE1
8096                 ,X_ATTRIBUTE2                           => l_tasks_rec.ATTRIBUTE2
8097                 ,X_ATTRIBUTE3                           => l_tasks_rec.ATTRIBUTE3
8098                 ,X_ATTRIBUTE4                           => l_tasks_rec.ATTRIBUTE4
8099                 ,X_ATTRIBUTE5                           => l_tasks_rec.ATTRIBUTE5
8100                 ,X_ATTRIBUTE6                           => l_tasks_rec.ATTRIBUTE6
8101                 ,X_ATTRIBUTE7                           => l_tasks_rec.ATTRIBUTE7
8102                 ,X_ATTRIBUTE8                           => l_tasks_rec.ATTRIBUTE8
8103                 ,X_ATTRIBUTE9                           => l_tasks_rec.ATTRIBUTE9
8104                 ,X_ATTRIBUTE10                          => l_tasks_rec.ATTRIBUTE10
8105                 ,X_ATTRIBUTE11                          => l_tasks_rec.ATTRIBUTE11
8106                 ,X_ATTRIBUTE12                          => l_tasks_rec.ATTRIBUTE12
8107                 ,X_ATTRIBUTE13                          => l_tasks_rec.ATTRIBUTE13
8108                 ,X_ATTRIBUTE14                          => l_tasks_rec.ATTRIBUTE14
8109                 ,X_ATTRIBUTE15                          => l_tasks_rec.ATTRIBUTE15
8110                 ,X_TASK_WEIGHTING_DERIV_CODE       => NULL
8111                 ,X_WORK_ITEM_CODE                  => l_tasks_rec.WQ_ITEM_CODE
8112                 ,X_UOM_CODE                        => l_tasks_rec.WQ_UOM_CODE
8113                 ,X_WQ_ACTUAL_ENTRY_CODE            => l_tasks_rec.WQ_ACTUAL_ENTRY_CODE
8114                 ,X_TASK_PROGRESS_ENTRY_PAGE_ID     =>l_tasks_rec.TASK_PROGRESS_ENTRY_PAGE_ID
8115                 ,X_PARENT_STRUCTURE_ID             => l_structure_id
8116                 ,X_PHASE_CODE                      => l_tasks_rec.PHASE_CODE
8117                 ,X_PHASE_VERSION_ID                => l_tasks_rec.PHASE_VERSION_ID
8118         ,X_SOURCE_OBJECT_ID                => p_dest_project_id
8119                 ,X_SOURCE_OBJECT_TYPE              => 'PA_PROJECTS'
8120           );
8121 
8122           -- insert task id into table so task will not be duplicated.
8123           l_task_match_tbl(l_tasks_rec.proj_element_id) := l_task_id;
8124 
8125         ELSE
8126           --copy the id into l_task_id;
8127           l_task_id := l_task_match_tbl(l_task_versions_rec.proj_element_id);
8128         END IF;
8129 
8130         IF (p_debug_mode = 'Y') THEN
8131           pa_debug.debug('l_task_id = '||l_task_id);
8132         END IF;
8133 
8134 
8135         IF (p_debug_mode = 'Y') THEN
8136           pa_debug.debug('before creating version:'||l_ref_task_ver_id||','||l_peer_or_sub);
8137         END IF;
8138 
8139         OPEN get_task_ver_weighting(l_task_versions_rec.element_version_id);
8140         FETCH get_task_ver_weighting into l_weighting_percentage;
8141         CLOSE get_task_ver_weighting;
8142 
8143 --hsiu: task version status changes
8144         IF (l_dest_template_flag = 'N') THEN
8145           --check if structure is shared
8146           --  if shared, check if versioned
8147           --    'WORKING' if versioned; 'PUBLISHED' if not
8148           --  if split, check if 'FINANCIAL'
8149           --    'PUBLISHED' if financial
8150           --    check if versioned
8151           --    'WORKING' if versioend; 'PUBLISHED' if not
8152           IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_dest_project_id)) THEN
8153             IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_dest_project_id) AND (l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N')) THEN
8154               l_task_unpub_ver_status_code := 'WORKING';
8155             ELSE
8156               l_task_unpub_ver_status_code := 'PUBLISHED';
8157             END IF;
8158           ELSE --split
8159             IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL')  AND
8160                 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
8161               l_task_unpub_ver_status_code := 'PUBLISHED';
8162             ELSE --workplan only
8163               IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_dest_project_id) AND (l_wp_attr_rec.AUTO_PUB_UPON_CREATION_FLAG = 'N')) THEN
8164                 l_task_unpub_ver_status_code := 'WORKING';
8165               ELSE
8166                 l_task_unpub_ver_status_code := 'PUBLISHED';
8167               END IF;
8168             END IF;
8169           END IF;
8170         ELSE
8171           l_task_unpub_ver_status_code := 'WORKING';
8172         END IF;
8173 --end task version status changes
8174 
8175         PA_TASK_PUB1.CREATE_TASK_VERSION
8176         ( p_validate_only        => FND_API.G_FALSE
8177          ,p_ref_task_version_id  => l_ref_task_ver_id
8178          ,p_peer_or_sub          => l_peer_or_sub
8179          ,p_task_id              => l_task_id--l_task_id_ref(l_task_versions_rec.proj_element_id)
8180          ,p_WEIGHTING_PERCENTAGE => l_weighting_percentage
8181          ,p_TASK_UNPUB_VER_STATUS_CODE => l_TASK_UNPUB_VER_STATUS_CODE
8182          ,x_task_version_id      => l_task_version_id
8183          ,x_return_status        => l_return_status
8184          ,x_msg_count            => l_msg_count
8185          ,x_msg_data             => l_msg_data);
8186 
8187       t_equiv_elem_ver_id(l_task_versions_rec.element_version_id) := l_task_version_id;
8188 
8189         --Check if there is any error.
8190         l_msg_count := FND_MSG_PUB.count_msg;
8191         IF l_msg_count > 0 THEN
8192           x_msg_count := l_msg_count;
8193           IF x_msg_count = 1 THEN
8194             x_msg_data := l_msg_data;
8195           END IF;
8196           RAISE FND_API.G_EXC_ERROR;
8197         END IF;
8198 
8199         if (l_structure_type = 'WORKPLAN') or (l_structure_type IS NULL) THEN
8200           -- Get task version schedule attributes
8201           OPEN l_get_ver_schedule_attr_csr(l_task_versions_rec.element_version_id);
8202           FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
8203           CLOSE l_get_ver_schedule_attr_csr;
8204 
8205           --calcuate scheduled start and finish dates
8206           IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_start_date + l_delta) THEN
8207             l_scheduled_start_date := l_target_finish_date;
8208           ELSE
8209             l_scheduled_start_date := l_ver_schedule_attr_rec.scheduled_start_date + l_delta;
8210           END IF;
8211 
8212           IF (l_target_finish_date < l_ver_schedule_attr_rec.scheduled_finish_date + l_delta) THEN
8213             l_scheduled_finish_date := l_target_finish_date;
8214           ELSE
8215             l_scheduled_finish_date := l_ver_schedule_attr_rec.scheduled_finish_date + l_delta;
8216           END IF;
8217           -- end calculate scheduled start and finish dates
8218 
8219           -- xxlu added DFF attributes
8220           PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
8221           ( p_validate_only           => FND_API.G_FALSE
8222            ,p_element_version_id      => l_task_version_id
8223            ,p_calendar_id             => l_ver_schedule_attr_rec.calendar_id
8224 -- anlee
8225 -- Dates changes
8226            ,p_scheduled_start_date    => l_scheduled_start_date
8227            ,p_scheduled_end_date      => l_scheduled_finish_date
8228 -- End of changes
8229            ,p_obligation_start_date   => l_ver_schedule_attr_rec.obligation_start_date
8230            ,p_obligation_end_date     => l_ver_schedule_attr_rec.obligation_finish_date
8231            ,p_actual_start_date       => l_ver_schedule_attr_rec.actual_start_date
8232            ,p_actual_finish_date      => l_ver_schedule_attr_rec.actual_finish_date
8233            ,p_estimate_start_date     => l_ver_schedule_attr_rec.estimated_start_date
8234            ,p_estimate_finish_date    => l_ver_schedule_attr_rec.estimated_finish_date
8235            ,p_duration                => l_ver_schedule_attr_rec.duration
8236            ,p_early_start_date        => l_ver_schedule_attr_rec.early_start_date
8237            ,p_early_end_date          => l_ver_schedule_attr_rec.early_finish_date
8238            ,p_late_start_date         => l_ver_schedule_attr_rec.late_start_date
8239            ,p_late_end_date           => l_ver_schedule_attr_rec.late_finish_date
8240            ,p_milestone_flag          => l_ver_schedule_attr_rec.milestone_flag
8241            ,p_critical_flag           => l_ver_schedule_attr_rec.critical_flag
8242            ,p_WQ_PLANNED_QUANTITY     => l_ver_schedule_attr_rec.WQ_PLANNED_QUANTITY
8243            ,p_PLANNED_EFFORT          => l_ver_schedule_attr_rec.PLANNED_EFFORT
8244            ,p_attribute_category         => l_ver_schedule_attr_rec.attribute_category
8245            ,p_attribute1                 => l_ver_schedule_attr_rec.attribute1
8246            ,p_attribute2                 => l_ver_schedule_attr_rec.attribute2
8247            ,p_attribute3                 => l_ver_schedule_attr_rec.attribute3
8248            ,p_attribute4                 => l_ver_schedule_attr_rec.attribute4
8249            ,p_attribute5                 => l_ver_schedule_attr_rec.attribute5
8250            ,p_attribute6                 => l_ver_schedule_attr_rec.attribute6
8251            ,p_attribute7                 => l_ver_schedule_attr_rec.attribute7
8252            ,p_attribute8                 => l_ver_schedule_attr_rec.attribute8
8253            ,p_attribute9                 => l_ver_schedule_attr_rec.attribute9
8254            ,p_attribute10              => l_ver_schedule_attr_rec.attribute10
8255            ,p_attribute11              => l_ver_schedule_attr_rec.attribute11
8256            ,p_attribute12              => l_ver_schedule_attr_rec.attribute12
8257            ,p_attribute13              => l_ver_schedule_attr_rec.attribute13
8258            ,p_attribute14              => l_ver_schedule_attr_rec.attribute14
8259            ,p_attribute15              => l_ver_schedule_attr_rec.attribute15
8260            ,x_pev_schedule_id         => l_pev_schedule_id
8261            ,x_return_status           => l_return_status
8262            ,x_msg_count               => l_msg_count
8263            ,x_msg_data                => l_msg_data );
8264            -- end xxlu changes
8265 
8266           --Check if there is any error.
8267           l_msg_count := FND_MSG_PUB.count_msg;
8268           IF l_msg_count > 0 THEN
8269             x_msg_count := l_msg_count;
8270             IF x_msg_count = 1 THEN
8271               x_msg_data := l_msg_data;
8272             END IF;
8273             RAISE FND_API.G_EXC_ERROR;
8274           END IF;
8275         end if;
8276 
8277         l_last_wbs_level := l_task_versions_rec.wbs_level;
8278         l_outline_task_ref(l_task_versions_rec.wbs_level) := l_task_version_id;--l_task_versions_rec.element_version_id;
8279 
8280       END LOOP;
8281       CLOSE l_get_task_versions_csr;
8282 
8283       --Delete linking tasks in PA_TASKS if this is a financial structure
8284       IF (l_structure_type = 'FINANCIAL' or l_structure_type IS NULL) THEN
8285         OPEN l_linking_tasks_csr(p_src_project_id, p_dest_project_id);
8286         LOOP
8287           FETCH l_linking_tasks_csr into l_task_delete;
8288           EXIT WHEN l_linking_tasks_csr%NOTFOUND;
8289 
8290           select a.record_version_number, 0
8291             INTO l_task_delete_rvn, l_task_delete_wbs_rvn
8292             from pa_tasks a
8293            where a.task_id = l_task_delete;
8294 
8295           PA_TASKS_MAINT_PUB.DELETE_TASK(
8296              p_init_msg_list => FND_API.G_FALSE
8297             ,p_commit => FND_API.G_FALSE
8298             ,p_project_id => p_dest_project_id
8299             ,p_task_id    => l_task_delete
8300             ,p_record_version_number => l_task_delete_rvn
8301             ,p_wbs_record_version_number => l_task_delete_wbs_rvn
8302             ,x_return_status => l_return_status
8303             ,x_msg_count => l_msg_count
8304             ,x_msg_data  => l_msg_data
8305           );
8306           l_msg_count := FND_MSG_PUB.count_msg;
8307           IF l_msg_count > 0 THEN
8308             x_msg_count := l_msg_count;
8309             IF x_msg_count = 1 THEN
8310               x_msg_data := l_msg_data;
8311             END IF;
8312             RAISE FND_API.G_EXC_ERROR;
8313           END IF;
8314 
8315         END LOOP;
8316         CLOSE l_linking_tasks_csr;
8317       END IF;
8318 
8319       -- Get structure version attributes
8320       OPEN l_get_structure_ver_attr_csr(l_structure_version_id);
8321       FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
8322       CLOSE l_get_structure_ver_attr_csr;
8323 
8324       IF (p_debug_mode = 'Y') THEN
8325         pa_debug.debug('create structure version attribute');
8326       END IF;
8327 
8328       IF (l_copy = 1) THEN
8329         l_status_code := 'STRUCTURE_WORKING';
8330         l_baseline_flag := 'N';
8331         l_latest_flag := 'N';
8332       ELSIF (l_copy = 2) THEN
8333         l_status_code := 'STRUCTURE_PUBLISHED';
8334         l_baseline_flag := 'Y';
8335         l_latest_flag := 'Y';
8336       ELSIF (l_copy = 3) THEN
8337         l_status_code := l_structure_ver_attr_rec.status_code;
8338         l_baseline_flag := l_structure_ver_attr_rec.current_flag;
8339         l_latest_flag := l_structure_ver_attr_rec.LATEST_EFF_PUBLISHED_FLAG;
8340       ELSIF (l_copy = 4) THEN
8341         l_status_code := 'STRUCTURE_PUBLISHED';
8342         l_baseline_flag := 'N';
8343         l_latest_flag := 'Y';
8344       END IF;
8345 
8346       --moved here for baseline purpose
8347       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
8348       ( p_validate_only               => FND_API.G_FALSE
8349        ,p_structure_version_id        => l_new_structure_version_id
8350 --       ,p_structure_version_name      => l_name
8351 --hsiu
8352 --fix bug 2640307
8353 --structure version name needs to be unique; copy from source.
8354        ,p_structure_version_name      => l_structure_ver_attr_rec.name
8355 --end bug 2640307 fix
8356        ,p_structure_version_desc      => l_structure_ver_attr_rec.description
8357        ,p_effective_date              => l_structure_ver_attr_rec.effective_date
8358        ,p_latest_eff_published_flag   => l_latest_flag
8359        ,p_locked_status_code          => 'UNLOCKED'
8360        ,p_struct_version_status_code  => l_status_code
8361        ,p_baseline_current_flag       => l_baseline_flag
8362        ,p_baseline_original_flag      => 'N'
8363        ,x_pev_structure_id            => l_pev_structure_id
8364        ,x_return_status               => l_return_status
8365        ,x_msg_count                   => l_msg_count
8366        ,x_msg_data                    => l_msg_data );
8367 
8368       --Check if there is any error.
8369       l_msg_count := FND_MSG_PUB.count_msg;
8370       IF l_msg_count > 0 THEN
8371         x_msg_count := l_msg_count;
8372         IF x_msg_count = 1 THEN
8373           x_msg_data := l_msg_data;
8374         END IF;
8375         RAISE FND_API.G_EXC_ERROR;
8376       END IF;
8377 
8378       --If status is published and latest version, or template
8379       --update project level schedule dates
8380       IF ((l_status_code = 'STRUCTURE_PUBLISHED') and (l_latest_flag = 'Y')) OR (l_dest_template_flag = 'Y') THEN
8381         OPEN get_proj_rec_ver_number(p_dest_project_id);
8382         FETCH get_proj_rec_ver_number into l_proj_record_ver_number;
8383         CLOSE get_proj_rec_ver_number;
8384 
8385         PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES(
8386           p_validate_only       => FND_API.G_FALSE
8387          ,p_project_id          => p_dest_project_id
8388          ,p_date_type           => 'SCHEDULED'
8389          ,p_start_date          => l_struc_scheduled_start_date
8390          ,p_finish_date         => l_struc_scheduled_finish_date
8391          ,p_record_version_number => l_proj_record_ver_number
8392          ,x_return_status        => l_return_status
8393          ,x_msg_count           => l_msg_count
8394          ,x_msg_data            => l_msg_data
8395         );
8396 
8397         IF l_msg_count > 0 THEN
8398           x_msg_count := l_msg_count;
8399           IF x_msg_count = 1 THEN
8400             x_msg_data := l_msg_data;
8401           END IF;
8402           RAISE FND_API.G_EXC_ERROR;
8403         END IF;
8404       END IF;
8405 
8406     END LOOP;
8407     CLOSE l_get_structure_versions_csr;
8408 
8409     --Commented by hsiu
8410     --END IF;
8411     --END IF for check if project is template and if type = WORKPLAN
8412   END LOOP;
8413   CLOSE l_get_structure_csr;
8414 --  HSiu: commented old code
8415 --  end if;
8416 
8417 
8418   x_return_status := FND_API.G_RET_STS_SUCCESS;
8419 
8420   IF (p_commit = FND_API.G_TRUE) THEN
8421     COMMIT;
8422   END IF;
8423 
8424   IF (p_debug_mode = 'Y') THEN
8425     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE END');
8426   END IF;
8427 
8428 EXCEPTION
8429   when FND_API.G_EXC_ERROR then
8430     if p_commit = FND_API.G_TRUE then
8431       rollback to copy_structure_pvt;
8432     end if;
8433     x_return_status := FND_API.G_RET_STS_ERROR;
8434   when FND_API.G_EXC_UNEXPECTED_ERROR then
8435     if p_commit = FND_API.G_TRUE then
8436       rollback to copy_structure_pvt;
8437     end if;
8438     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8439     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8440                             p_procedure_name => 'COPY_STRUCTURE',
8441                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8442   when OTHERS then
8443     if p_commit = FND_API.G_TRUE then
8444       rollback to copy_structure_pvt;
8445     end if;
8446     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8447     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8448                             p_procedure_name => 'COPY_STRUCTURE',
8449                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8450     raise;
8451 END COPY_STRUCTURE;
8452 
8453 -- Added new api below to re-order the display sequence and wbs numbering
8454 -- Added for Huawei enhancement - bug 13923366 by skkoppul
8455 PROCEDURE REFRESH_STRUCTURE_VERSION
8456 ( p_commit                        IN VARCHAR2    := FND_API.G_FALSE
8457  ,p_project_id                    IN NUMBER
8458  ,p_structure_version_id          IN NUMBER
8459  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8460  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8461  ,x_msg_data                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8462 )
8463 IS
8464 
8465 -- Sridhar Huawei 18-Sept Commented this cursor by changing the cursor name to c0
8466 
8467     CURSOR c0( c_project_id NUMBER ) IS
8468       SELECT b.proj_element_id, b.scheduled_start_date,
8469              b.scheduled_finish_date, a.element_version_id, duration,
8470              a.wbs_number, a.wbs_level, a.display_sequence
8471       FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B
8472       WHERE a.parent_structure_version_id = p_structure_version_id
8473         AND a.element_version_id = b.element_version_id
8474         AND a.project_id = b.project_id
8475         AND a.project_id = c_project_id
8476       ORDER BY a.display_sequence asc ,  abs(a.last_updated_by) asc , a.wbs_level asc; -- Huawei changes 14556729
8477 
8478  -- Sridhar Huawei 18-Sept  , replace the C1 cursor with this new code.
8479 /*
8480 CURSOR c1( c_project_id NUMBER ) IS
8481 SELECT    PROJ_ELEMENT_ID,  SCHEDULED_START_DATE,
8482    SCHEDULED_FINISH_DATE, ELEMENT_VERSION_ID, DURATION,  WBS_NUMBER,
8483    OLD_LEVEL ,  DISPLAY_SEQUENCE, LEVEL WBS_LEVEL
8484 FROM
8485 (
8486 select /*+ ordered  use_nl(b a t) index(t pa_tasks_n8) index(a PA_PROJ_ELEMENT_VERSIONS_N1) index(t PA_PROJ_ELEM_VER_SCHEDULE_U2)  */
8487 /*  t.project_id ,   t.task_id ,   t.parent_task_id ,   a.display_sequence ,
8488   a.level_sequence,   a.parent_structure_version_id ,  B.PROJ_ELEMENT_ID,
8489   B.SCHEDULED_START_DATE,   B.SCHEDULED_FINISH_DATE,  A.ELEMENT_VERSION_ID,   DURATION,
8490   A.WBS_NUMBER,   A.WBS_LEVEL OLD_LEVEL
8491   from
8492   PA_TASKS T,  PA_PROJ_ELEMENT_VERSIONS A,   PA_PROJ_ELEM_VER_SCHEDULE B
8493   where
8494   T.PROJECT_ID = p_project_id   AND A.PROJ_ELEMENT_ID = T.TASK_ID
8495   AND A.PROJECT_ID =   T.PROJECT_ID  --AND A.PARENT_STRUCTURE_VERSION_ID = :B1
8496   AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8497 ) r
8498 START WITH  r.PARENT_TASK_ID IS NULL CONNECT BY
8499   PRIOR  r.TASK_ID =  r.PARENT_TASK_ID ORDER SIBLINGS BY  DISPLAY_SEQUENCE ,
8500   LEVEL_SEQUENCE; */
8501 
8502   CURSOR c1
8503   IS
8504 	  SELECT    PROJ_ELEMENT_ID,  SCHEDULED_START_DATE,
8505 	  SCHEDULED_FINISH_DATE, ELEMENT_VERSION_ID, DURATION,  WBS_NUMBER,
8506 	  OLD_LEVEL ,  DISPLAY_SEQUENCE, LEVEL WBS_LEVEL ,
8507 	  SYS_CONNECT_BY_PATH(task_id, '/') connect_path,
8508 	  connect_by_isleaf leaf_node
8509 	  FROM  PA_PROJ_ELEMENTS_TMP r
8510 	  START WITH  r.PARENT_TASK_ID IS NULL CONNECT BY
8511 	  PRIOR  r.TASK_ID =  r.PARENT_TASK_ID ORDER SIBLINGS BY  DISPLAY_SEQUENCE , LEVEL_SEQUENCE;
8512 
8513 
8514 	/* commented for bug#14765516 */
8515     /*TYPE c_array IS TABLE OF c1%ROWTYPE;
8516     l_data c_array;*/
8517 	/* Code change for bug#14765516 - Starts */
8518     l_plsql_max_array_size        CONSTANT NUMBER  := 100;
8519 
8520 	TYPE PROJ_ELEMENT_ID_t IS TABLE OF
8521     PA_PROJ_ELEMENTS_TMP.PROJ_ELEMENT_ID%TYPE;
8522     TYPE SCHEDULED_START_DATE_t IS TABLE OF
8523     PA_PROJ_ELEMENTS_TMP.SCHEDULED_START_DATE%TYPE;
8524     TYPE SCHEDULED_FINISH_DATE_t IS TABLE OF
8525     PA_PROJ_ELEMENTS_TMP.SCHEDULED_FINISH_DATE%TYPE;
8526     TYPE ELEMENT_VERSION_ID_t IS TABLE OF
8527     PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
8528     TYPE duration_t IS TABLE OF PA_PROJ_ELEMENTS_TMP.duration%TYPE;
8529 
8530 	TYPE WBS_NUMBER_T IS TABLE OF PA_PROJ_ELEMENTS_TMP.WBS_NUMBER%TYPE;
8531 	TYPE OLD_LEVEL_T IS TABLE OF PA_PROJ_ELEMENTS_TMP.OLD_LEVEL%TYPE;
8532 	TYPE DISPLAY_SEQUENCE_T IS TABLE OF PA_PROJ_ELEMENTS_TMP.DISPLAY_SEQUENCE%TYPE;
8533 	TYPE WBS_LEVEL_T IS TABLE OF PA_PROJ_ELEMENT_VERSIONS.WBS_LEVEL%TYPE;
8534 
8535 	TYPE connect_path_t IS TABLE OF VARCHAR2(4000);
8536 	TYPE leaf_node_t IS TABLE OF NUMBER;
8537 
8538     v_PROJ_ELEMENT_ID  PROJ_ELEMENT_ID_t;
8539     v_SCHEDULED_START_DATE SCHEDULED_START_DATE_t;
8540     v_SCHEDULED_FINISH_DATE SCHEDULED_FINISH_DATE_t;
8541     v_ELEMENT_VERSION_ID ELEMENT_VERSION_ID_t;
8542     v_duration duration_t;
8543 	v_WBS_NUMBER WBS_NUMBER_T;
8544 	v_OLD_LEVEL OLD_LEVEL_T;
8545 	v_DISPLAY_SEQUENCE DISPLAY_SEQUENCE_T;
8546 	v_WBS_LEVEL WBS_LEVEL_T;
8547 	v_connect_path connect_path_t;
8548 	v_leaf_node leaf_node_t;
8549 /* Code change for bug#14765516 - Ends */
8550 
8551     l_project_id  NUMBER;
8552 
8553     cnt1         NUMBER := 0;
8554     l_wbs_num    VARCHAR2(60);
8555     l_prev_level NUMBER := 0 ;
8556     l_first      NUMBER := 1 ;
8557 
8558     l_return_status VARCHAR2(1);
8559     l_msg_count NUMBER;
8560     l_msg_data VARCHAR2(2000);
8561 BEGIN
8562 
8563     IF (p_commit = FND_API.G_TRUE) THEN
8564       savepoint refresh_structure_ver;
8565     END IF;
8566 
8567     IF p_project_id IS NULL AND p_structure_version_id IS NOT NULL THEN
8568        SELECT PROJECT_ID
8569        INTO l_project_id
8570        FROM PA_PROJ_ELEMENT_VERSIONS
8571        WHERE ELEMENT_VERSION_ID = p_structure_version_id;
8572     ELSIF p_project_id IS NOT NULL THEN
8573        l_project_id := p_project_id;
8574     ELSE
8575        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8576                             p_msg_name => 'PA_INVALID_STR_VERSION_ID');
8577        RAISE FND_API.G_EXC_ERROR;
8578     END IF;
8579 	/* Added below code to improve performance */
8580 	delete PA_PROJ_ELEMENTS_TMP;
8581 
8582 	INSERT INTO PA_PROJ_ELEMENTS_TMP(PROJECT_ID, TASK_ID, PARENT_TASK_ID, DISPLAY_SEQUENCE, LEVEL_SEQUENCE, PARENT_STRUCTURE_VERSION_ID,
8583 	PROJ_ELEMENT_ID, SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE, ELEMENT_VERSION_ID, DURATION, WBS_NUMBER, OLD_LEVEL, DEFER_CODE, TOP_TASK_ID) /* Modified insert statement for bug#14765516 */
8584 	SELECT /*+ ordered  use_nl(b a t) index(t pa_tasks_n8) index(a PA_PROJ_ELEMENT_VERSIONS_N1) index(t PA_PROJ_ELEM_VER_SCHEDULE_U2)  */
8585 	t.project_id ,   t.task_id ,   t.parent_task_id ,   a.display_sequence ,
8586 	a.level_sequence,   a.parent_structure_version_id ,  B.PROJ_ELEMENT_ID,
8587 	B.SCHEDULED_START_DATE,   B.SCHEDULED_FINISH_DATE,  A.ELEMENT_VERSION_ID,   DURATION,
8588 	A.WBS_NUMBER,   A.WBS_LEVEL OLD_LEVEL,a.defer_code, t.top_task_id
8589 	from
8590 	PA_TASKS T,  PA_PROJ_ELEMENT_VERSIONS A,   PA_PROJ_ELEM_VER_SCHEDULE B
8591 	where
8592 	T.PROJECT_ID =  p_project_id AND A.PROJ_ELEMENT_ID = T.TASK_ID
8593 	AND A.PROJECT_ID =   T.PROJECT_ID  --AND A.PARENT_STRUCTURE_VERSION_ID = :B1
8594 	AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID;
8595 
8596     OPEN c1;
8597     LOOP /* Code change for bug#14765516 - Starts */
8598       FETCH c1 BULK COLLECT INTO v_PROJ_ELEMENT_ID,v_SCHEDULED_START_DATE,v_SCHEDULED_FINISH_DATE,v_ELEMENT_VERSION_ID,v_duration,v_WBS_NUMBER,v_OLD_LEVEL,v_DISPLAY_SEQUENCE,v_WBS_LEVEL,v_connect_path,v_leaf_node LIMIT  l_plsql_max_array_size;
8599 
8600       FORALL i in v_PROJ_ELEMENT_ID.first..v_PROJ_ELEMENT_ID.last
8601          UPDATE PA_PROJ_ELEMENTS
8602          SET BASELINE_START_DATE=v_SCHEDULED_START_DATE(i),
8603              BASELINE_FINISH_DATE=v_SCHEDULED_FINISH_DATE(i),
8604              BASELINE_DURATION=v_duration(i),
8605              RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,0) + 1
8606          WHERE PROJ_ELEMENT_ID = v_PROJ_ELEMENT_ID(i);
8607 
8608      FOR i IN v_PROJ_ELEMENT_ID.first..v_PROJ_ELEMENT_ID.last
8609      LOOP
8610              IF ( l_first                       = 1 ) THEN
8611                      l_first                   := 0;
8612                      l_wbs_num                 := '1';
8613                      l_prev_level              := 1;
8614              elsif l_prev_level                 = v_WBS_LEVEL(i) THEN
8615                      IF ( instr(l_wbs_num,'.') <> 0 ) THEN
8616                              l_wbs_num         := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i)-1)-1)
8617                              ||'.'
8618                              ||TO_CHAR(SUBSTR(l_wbs_num,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i)-1)+1,LENGTH(l_wbs_num))+1);
8619                      ELSE
8620                              l_wbs_num := to_number(l_wbs_num)+1;
8621                      END IF;
8622              elsif v_WBS_LEVEL(i) > l_prev_level THEN
8623                      l_wbs_num        := l_wbs_num ||'.1';
8624              elsif v_WBS_LEVEL(i)                  < l_prev_level THEN
8625                      IF ( v_WBS_LEVEL(i)           > 1 ) THEN
8626                              l_wbs_num                 := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i))-1);
8627                              IF ( instr(l_wbs_num,'.') <> 0 ) THEN
8628                                      l_wbs_num         := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i)-1)-1)
8629                                      ||'.'
8630                                      ||TO_CHAR(SUBSTR(l_wbs_num,instr(l_wbs_num,'.',1,v_WBS_LEVEL(i)-1)+1,LENGTH(l_wbs_num))+1);
8631                              ELSE
8632                                      l_wbs_num := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,1)-1)+1;
8633                              END IF;
8634                      ELSE
8635                              l_wbs_num := SUBSTR(l_wbs_num,1,instr(l_wbs_num,'.',1,1)-1)+1;
8636                      END IF;
8637              END IF;
8638 
8639              cnt1                       := cnt1+1;
8640              -- Check if it is structure record and make wbs_number zero and display_sequence null
8641              IF v_ELEMENT_VERSION_ID(i) = p_structure_version_id THEN
8642                 v_WBS_NUMBER(i)       := '0';
8643                 v_DISPLAY_SEQUENCE(i) := NULL;
8644              ELSE
8645                 v_WBS_NUMBER(i)       := l_wbs_num;
8646                 v_DISPLAY_SEQUENCE(i) := cnt1;
8647              END IF;
8648              l_prev_level               := v_WBS_LEVEL(i);
8649      END LOOP ;
8650 
8651       FORALL i in v_PROJ_ELEMENT_ID.first..v_PROJ_ELEMENT_ID.last
8652          UPDATE PA_PROJ_ELEMENT_VERSIONS
8653          SET DISPLAY_SEQUENCE = v_DISPLAY_SEQUENCE(i),
8654              WBS_NUMBER       = v_WBS_NUMBER(i),
8655              WBS_LEVEL        = v_WBS_LEVEL(i),  -- Sridhar Huawei 18-Sept , Add update of  wbs_level
8656              last_updated_by  = 100
8657          WHERE ELEMENT_VERSION_ID = v_ELEMENT_VERSION_ID(i);  /* Code change for bug#14765516 - Ends */
8658 
8659       EXIT WHEN c1%NOTFOUND;
8660     END LOOP;
8661     CLOSE c1;
8662 
8663     x_return_status := FND_API.G_RET_STS_SUCCESS;
8664 
8665 EXCEPTION
8666     WHEN FND_API.G_EXC_ERROR THEN
8667         x_return_status := FND_API.G_RET_STS_ERROR ;
8668         if p_commit = FND_API.G_TRUE then
8669            ROLLBACK TO refresh_structure_ver;
8670         end if;
8671 
8672         FND_MSG_PUB.Count_And_Get
8673       (   p_count    =>  x_msg_count  ,
8674           p_data    =>  x_msg_data  );
8675   when OTHERS then
8676     if p_commit = FND_API.G_TRUE then
8677       rollback to refresh_structure_ver;
8678     end if;
8679     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8680     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8681                             p_procedure_name => 'REFRESH_STRUCTURE_VERSION',
8682                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8683     raise;
8684 END REFRESH_STRUCTURE_VERSION;
8685 
8686 PROCEDURE BASELINE_STRUCTURE_VERSION
8687 ( p_commit                        IN VARCHAR2    := FND_API.G_FALSE
8688  ,p_validate_only                 IN VARCHAR2    := FND_API.G_TRUE
8689  ,p_validation_level              IN VARCHAR2    := 100
8690  ,p_calling_module                IN VARCHAR2    := 'SELF_SERVICE'
8691  ,p_debug_mode                    IN VARCHAR2    := 'N'
8692  ,p_max_msg_count                 IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8693  ,p_structure_version_id          IN NUMBER
8694  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8695  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8696  ,x_msg_data                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8697 )
8698 IS
8699     CURSOR c1( c_project_id NUMBER ) IS
8700       SELECT B.PROJ_ELEMENT_ID, B.SCHEDULED_START_DATE,
8701              B.SCHEDULED_FINISH_DATE, A.ELEMENT_VERSION_ID   , duration
8702       FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B, PA_PROJ_ELEMENTS C
8703       WHERE A.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
8704         AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8705         AND A.PROJ_ELEMENT_ID = C.proj_element_id
8706         AND A.PROJECT_ID = B.PROJECT_ID
8707         AND A.project_id = c_project_id
8708         AND C.PROJECT_ID = A.project_id
8709         AND (B.SCHEDULED_START_DATE <> C.BASELINE_START_DATE OR
8710              B.SCHEDULED_FINISH_DATE <> C.BASELINE_FINISH_DATE);
8711 /* Commented below cursor and replaced with the one above for Huawei enhancement bug 13923366
8712  * bug 13923366 - testing delete_task sceanrio
8713       SELECT B.PROJ_ELEMENT_ID, B.SCHEDULED_START_DATE,
8714              B.SCHEDULED_FINISH_DATE, A.ELEMENT_VERSION_ID   , duration
8715       FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B, PA_PROJ_ELEMENTS C
8716       WHERE A.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
8717         AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8718         AND A.PROJECT_ID = B.PROJECT_ID
8719         AND A.project_id = c_project_id;
8720 */
8721 
8722     --Added for Bug 13836957
8723   --  TYPE c_array IS TABLE OF c1%ROWTYPE; /* commented for bug#14765516 */
8724   --  l_data c_array;		              /* commented for bug#14765516 */
8725      /*bug#14765516 changes starts*/
8726     TYPE PROJ_ELEMENT_ID_t IS TABLE OF
8727     PA_PROJ_ELEM_VER_SCHEDULE.PROJ_ELEMENT_ID%TYPE;
8728     TYPE SCHEDULED_START_DATE_t IS TABLE OF
8729     PA_PROJ_ELEM_VER_SCHEDULE.SCHEDULED_START_DATE%TYPE;
8730     TYPE SCHEDULED_FINISH_DATE_t IS TABLE OF
8731     PA_PROJ_ELEM_VER_SCHEDULE.SCHEDULED_FINISH_DATE%TYPE;
8732     TYPE ELEMENT_VERSION_ID_t IS TABLE OF
8733     PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
8734     TYPE duration_t IS TABLE OF PA_PROJ_ELEM_VER_SCHEDULE.duration%TYPE;
8735 
8736     v_PROJ_ELEMENT_ID  PROJ_ELEMENT_ID_t;
8737     v_SCHEDULED_START_DATE SCHEDULED_START_DATE_t;
8738     v_SCHEDULED_FINISH_DATE SCHEDULED_FINISH_DATE_t;
8739     v_ELEMENT_VERSION_ID ELEMENT_VERSION_ID_t;
8740     v_duration duration_t;
8741      /*bug#14765516 changes ends*/
8742 
8743     l_plsql_max_array_size        CONSTANT NUMBER  := 100;
8744 --    c1_rec c1%ROWTYPE; -- coomented for Bug 13836957
8745     l_project_id  NUMBER;
8746 
8747 -- anlee
8748 -- Dates changes
8749 -- Modified cursor to below and added local variables for bug 13836957
8750     CURSOR c2 (c_project_id NUMBER)
8751     IS
8752       SELECT B.SCHEDULED_START_DATE,
8753              B.SCHEDULED_FINISH_DATE, C.record_version_number
8754       FROM PA_PROJ_ELEMENT_VERSIONS A, PA_PROJ_ELEM_VER_SCHEDULE B,
8755            PA_PROJECTS_ALL C
8756       WHERE A.PARENT_STRUCTURE_VERSION_ID = p_structure_version_id
8757         AND A.ELEMENT_VERSION_ID = p_structure_version_id
8758         AND A.ELEMENT_VERSION_ID = B.ELEMENT_VERSION_ID
8759         AND A.PROJECT_ID = B.PROJECT_ID
8760         AND A.PROJECT_ID = C.PROJECT_ID
8761         AND A.project_id = c_project_id;
8762 
8763     l_scheduled_start_date          DATE;
8764     l_scheduled_finish_date         DATE;
8765 /* Commented for bug 13836957
8766     SELECT record_version_number
8767     FROM pa_projects_all
8768     WHERE project_id = c_project_id; */
8769 
8770     l_proj_record_ver_number NUMBER;
8771     l_return_status VARCHAR2(1);
8772     l_msg_count NUMBER;
8773     l_msg_data VARCHAR2(2000);
8774 -- End of changes
8775 
8776    l_calendar_id   NUMBER;
8777    l_duration      NUMBER;
8778    l_duration_days NUMBER;
8779    cursor get_cal_id IS
8780      select a.calendar_id
8781        from pa_projects_all a, pa_proj_element_versions b
8782       where a.project_id = b.project_id
8783         and b.element_version_id = p_structure_version_id;
8784 BEGIN
8785     IF (p_debug_mode = 'Y') THEN
8786       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION BEGIN');
8787     END IF;
8788 
8789     IF (p_commit = FND_API.G_TRUE) THEN
8790       savepoint baseline_structure_pvt;
8791     END IF;
8792 
8793     SELECT PROJECT_ID
8794     INTO l_project_id
8795     FROM PA_PROJ_ELEMENT_VERSIONS
8796     WHERE ELEMENT_VERSION_ID = p_structure_version_id;
8797 
8798 /*  Commented for bug 13836957
8799     UPDATE PA_PROJ_ELEMENTS
8800     SET BASELINE_START_DATE= NULL ,
8801         BASELINE_FINISH_DATE= NULL ,
8802         RECORD_VERSION_NUMBER=NVL(RECORD_VERSION_NUMBER,0) + 1
8803     WHERE PROJECT_ID = l_project_id; */
8804    -- Added IF condition for bulk add or delete tasks as we are defering updating dates
8805    -- to the end after processing all tasks  - Huawei enhancement bug 13923366
8806    IF (NVL(PA_PROJECT_PUB.G_MASS_ADD_TASKS,'N') = 'N' AND NVL(PA_PROJECT_PUB.G_MASS_DELETE_TASKS,'N') = 'N') THEN
8807 
8808     OPEN c1( l_project_id );
8809     LOOP
8810 /*  Commented for bug 13836957
8811       FETCH c1 into c1_rec;
8812       EXIT WHEN c1%NOTFOUND; */
8813 /* commented below line for bug#14765516
8814       FETCH c1 BULK COLLECT INTO l_data LIMIT  l_plsql_max_array_size; --Added for Bug 13836957
8815 */
8816       FETCH c1 BULK COLLECT INTO v_PROJ_ELEMENT_ID, v_SCHEDULED_START_DATE, v_SCHEDULED_FINISH_DATE, v_ELEMENT_VERSION_ID, v_duration LIMIT l_plsql_max_array_size; --bug#14765516
8817 
8818 
8819 /*      -- Calc duration
8820       OPEN get_cal_id;
8821       FETCH get_cal_id INTO l_calendar_id;
8822       CLOSE get_cal_id;
8823 
8824       PA_DURATION_UTILS.GET_DURATION(
8825        p_calendar_id      => l_calendar_id
8826       ,p_start_date       => c1_rec.scheduled_start_date
8827       ,p_end_date         => c1_rec.scheduled_finish_date
8828       ,x_duration_days    => l_duration_days
8829       ,x_duration_hours   => l_duration
8830       ,x_return_status    => l_return_status
8831       ,x_msg_count        => l_msg_count
8832       ,x_msg_data         => l_msg_data );
8833 
8834       --Check if there is any error.
8835       l_msg_count := FND_MSG_PUB.count_msg;
8836       IF l_msg_count > 0 THEN
8837         x_msg_count := l_msg_count;
8838         IF x_msg_count = 1 THEN
8839           x_msg_data := l_msg_data;
8840         END IF;
8841         RAISE FND_API.G_EXC_ERROR;
8842       END IF;
8843 */
8844 /* Commented for bug 13836957
8845       UPDATE PA_PROJ_ELEMENTS
8846       SET BASELINE_START_DATE=c1_rec.scheduled_start_date,
8847           BASELINE_FINISH_DATE=c1_rec.scheduled_finish_date, -- pa
8848           BASELINE_DURATION=c1_rec.duration,
8849           RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,0) + 1
8850       WHERE PROJ_ELEMENT_ID = c1_rec.proj_element_id;
8851 */
8852 /*  commented FORALL code for bug 14765516
8853       --Added for Bug13836957
8854       FORALL i in l_data.first..l_data.last
8855          UPDATE PA_PROJ_ELEMENTS
8856          SET BASELINE_START_DATE=l_data(i).SCHEDULED_START_DATE,
8857              BASELINE_FINISH_DATE=l_data(i).SCHEDULED_FINISH_DATE, -- pa
8858              BASELINE_DURATION=l_data(i).duration,
8859              RECORD_VERSION_NUMBER = NVL(RECORD_VERSION_NUMBER,0) + 1
8860          WHERE PROJ_ELEMENT_ID = l_data(i).PROJ_ELEMENT_ID;
8861 */
8862 /*Added below FORALL code for bug#14765516*/
8863       FORALL i in v_PROJ_ELEMENT_ID.first..v_PROJ_ELEMENT_ID.last
8864          UPDATE PA_PROJ_ELEMENTS
8865          SET BASELINE_START_DATE=v_SCHEDULED_START_DATE(i),
8866              BASELINE_FINISH_DATE=v_SCHEDULED_FINISH_DATE(i), -- pa
8867              BASELINE_DURATION=v_duration(i),
8868              RECORD_VERSION_NUMBER =  NVL(RECORD_VERSION_NUMBER,0) + 1
8869          WHERE PROJ_ELEMENT_ID = v_PROJ_ELEMENT_ID(i);
8870 
8871       EXIT WHEN c1%NOTFOUND;
8872      END LOOP;
8873      CLOSE c1;
8874  END IF; -- end of changes for bug 13923366
8875       -- anlee
8876       -- Dates changes
8877 --      if c1_rec.element_version_id = p_structure_version_id then -- commented for bug 13836957
8878         OPEN c2(l_project_id);
8879         FETCH c2 INTO l_scheduled_start_date,l_scheduled_finish_date,l_proj_record_ver_number; -- modified for bug 13836957
8880         CLOSE c2;
8881 
8882         PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
8883          p_validate_only          => FND_API.G_FALSE
8884         ,p_project_id             => l_project_id
8885         ,p_date_type              => 'BASELINE'
8886         ,p_start_date             => l_scheduled_start_date
8887         ,p_finish_date            => l_scheduled_finish_date
8888         ,p_record_version_number  => l_proj_record_ver_number
8889         ,x_return_status          => l_return_status
8890         ,x_msg_count              => l_msg_count
8891         ,x_msg_data               => l_msg_data );
8892 
8893         --Check if there is any error.
8894         l_msg_count := FND_MSG_PUB.count_msg;
8895         IF l_msg_count > 0 THEN
8896           x_msg_count := l_msg_count;
8897           IF x_msg_count = 1 THEN
8898             x_msg_data := l_msg_data;
8899           END IF;
8900           RAISE FND_API.G_EXC_ERROR;
8901         END IF;
8902 -- End of changes
8903 
8904     IF (p_debug_mode = 'Y') THEN
8905       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION end');
8906     END IF;
8907 
8908     x_return_status := FND_API.G_RET_STS_SUCCESS;
8909 
8910 EXCEPTION
8911   when FND_API.G_EXC_ERROR then
8912     if p_commit = FND_API.G_TRUE then
8913       rollback to baseline_structure_pvt;
8914     end if;
8915     x_return_status := FND_API.G_RET_STS_ERROR;
8916   when FND_API.G_EXC_UNEXPECTED_ERROR then
8917     if p_commit = FND_API.G_TRUE then
8918       rollback to baseline_structure_pvt;
8919     end if;
8920     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8921     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8922                             p_procedure_name => 'BASELINE_STRUCTURE_VERSION',
8923                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8924   when OTHERS then
8925     if p_commit = FND_API.G_TRUE then
8926       rollback to baseline_structure_pvt;
8927     end if;
8928     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8929     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
8930                             p_procedure_name => 'BASELINE_STRUCTURE_VERSION',
8931                             p_error_text     => SUBSTRB(SQLERRM,1,240));
8932     raise;
8933 END BASELINE_STRUCTURE_VERSION;
8934 
8935 
8936 PROCEDURE SPLIT_WORKPLAN
8937 ( p_commit                        IN VARCHAR2    := FND_API.G_FALSE
8938  ,p_validate_only                 IN VARCHAR2    := FND_API.G_TRUE
8939  ,p_validation_level              IN VARCHAR2    := 100
8940  ,p_calling_module                IN VARCHAR2    := 'SELF_SERVICE'
8941  ,p_debug_mode                    IN VARCHAR2    := 'N'
8942  ,p_max_msg_count                 IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8943  ,p_project_id                    IN NUMBER
8944  ,p_structure_name                IN VARCHAR2
8945  ,p_structure_number              IN VARCHAR2
8946  ,p_description                   IN VARCHAR2
8947  ,x_structure_id                 OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8948  ,x_structure_version_id         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8949  ,x_return_status                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8950  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8951  ,x_msg_data                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8952 )
8953 IS
8954   cursor c1 IS
8955     select a.proj_element_id
8956       from pa_proj_elements a,
8957            pa_proj_structure_types b,
8958            pa_structure_types c
8959      where a.project_id = p_project_id
8960        and a.object_type = 'PA_STRUCTURES'
8961        and a.proj_element_id = b.proj_element_id
8962        and b.structure_type_id = c.structure_type_id
8963        and c.structure_type_class_code IN ('FINANCIAL');
8964 
8965   cursor sel_struct_type(c_structure_id NUMBER) IS
8966     select a.rowid
8967       from pa_proj_structure_types a, pa_structure_types b
8968      where a.proj_element_id = c_structure_id
8969        and a.structure_type_id = b.structure_type_id
8970        and b.structure_type_class_code = 'WORKPLAN';
8971 
8972 
8973   l_structure_id NUMBER;
8974   l_rowid  VARCHAR2(255);
8975 
8976   l_ret_stat VARCHAR2(1);
8977   l_msg_count            NUMBER;
8978   l_msg_data             VARCHAR2(250);
8979 
8980   l_struc_id           NUMBER;
8981   l_struc_ver_attr_id  NUMBER;
8982   l_struc_ver_id       NUMBER;
8983   l_pev_schedule_id    NUMBER;
8984 
8985 BEGIN
8986     IF (p_debug_mode = 'Y') THEN
8987       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN BEGIN');
8988     END IF;
8989 
8990     IF (p_commit = FND_API.G_TRUE) THEN
8991       savepoint split_workplan;
8992     END IF;
8993 
8994     IF (p_debug_mode = 'Y') THEN
8995       pa_debug.debug('Find existing structure');
8996     END IF;
8997 
8998     --get current costing/billing structure id
8999     OPEN c1;
9000     FETCH c1 INTO l_structure_id;
9001     CLOSE c1;
9002 
9003     --check if there is a published workplan version
9004     IF PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS(p_project_id, l_structure_id) = 'Y' THEN
9005       --cannot split if publish version exists.
9006       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_CANNOT_SPLIT_STRUCT');
9007       x_msg_data := 'PA_PS_CANNOT_SPLIT_STRUCT';
9008       RAISE FND_API.G_EXC_ERROR;
9009     END IF;
9010 
9011     --delete workplan structure type
9012     OPEN sel_struct_type(l_structure_id);
9013     FETCH sel_struct_type INTO l_rowid;
9014     IF sel_struct_type%FOUND THEN
9015       IF (p_debug_mode = 'Y') THEN
9016         pa_debug.debug('Deleting type structure type');
9017       END IF;
9018       PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
9019     END IF;
9020     CLOSE sel_struct_type;
9021 
9022     --create_structure
9023     PA_PROJECT_STRUCTURE_PVT1.Create_Structure(
9024                         p_project_id                        => p_project_id
9025                        ,p_structure_number                  => p_structure_number
9026                        ,p_structure_name                    => p_structure_name
9027                        ,p_structure_description             => p_description
9028                        ,p_calling_flag                      => 'WORKPLAN'
9029                        ,x_structure_id                      => l_struc_id
9030                        ,x_return_status                     => l_ret_stat
9031                        ,x_msg_count                         => l_msg_count
9032                        ,x_msg_data                          => l_msg_data
9033     );
9034 
9035     x_structure_id := l_struc_id;
9036 
9037     --Check if there is any error.
9038     l_msg_count := FND_MSG_PUB.count_msg;
9039     IF l_msg_count > 0 THEN
9040       x_msg_count := l_msg_count;
9041       IF x_msg_count = 1 THEN
9042         x_msg_data := l_msg_data;
9043       END IF;
9044       RAISE FND_API.G_EXC_ERROR;
9045     END IF;
9046 
9047     --delete schedule info for structure versions and tasks
9048     delete from pa_proj_elem_ver_schedule
9049     where project_id = p_project_id;
9050 
9051     --create_structure_version
9052     PA_PROJECT_STRUCTURE_PUB1.create_structure_Version(
9053            p_structure_id                    => l_struc_id,
9054            x_structure_version_id            => l_struc_ver_id,
9055            x_return_status                   => l_ret_stat,
9056            x_msg_count                       => l_msg_count,
9057            x_msg_data                        => l_msg_data
9058     );
9059 
9060     x_structure_version_id := l_struc_ver_id;
9061 
9062     --Check if there is any error.
9063     l_msg_count := FND_MSG_PUB.count_msg;
9064     IF l_msg_count > 0 THEN
9065       x_msg_count := l_msg_count;
9066       IF x_msg_count = 1 THEN
9067         x_msg_data := l_msg_data;
9068       END IF;
9069       RAISE FND_API.G_EXC_ERROR;
9070     END IF;
9071 
9072     --create_structure_version_attr
9073     PA_PROJECT_STRUCTURE_PUB1.create_structure_version_attr(
9074       p_structure_version_id                 => l_struc_ver_id,
9075       p_structure_version_name               => p_structure_name,
9076       p_structure_version_desc               => p_description,
9077       x_return_status                        => l_ret_stat,
9078       x_msg_count                            => l_msg_count,
9079       x_msg_data                             => l_msg_data,
9080       x_pev_structure_id                     => l_struc_ver_attr_id
9081     );
9082 
9083     --Check if there is any error.
9084     l_msg_count := FND_MSG_PUB.count_msg;
9085     IF l_msg_count > 0 THEN
9086       x_msg_count := l_msg_count;
9087       IF x_msg_count = 1 THEN
9088         x_msg_data := l_msg_data;
9089       END IF;
9090       RAISE FND_API.G_EXC_ERROR;
9091     END IF;
9092 
9093     --create_schedule_version
9094     PA_TASK_PUB1.Create_Schedule_Version(
9095                    p_element_version_id      => l_struc_ver_id
9096                   ,p_scheduled_start_date    => SYSDATE
9097                   ,p_scheduled_end_date      => SYSDATE
9098                   ,x_pev_schedule_id         => l_pev_schedule_id
9099                   ,x_return_status           => l_ret_stat
9100                   ,x_msg_count               => l_msg_count
9101                   ,x_msg_data                => l_msg_data
9102     );
9103 
9104     --Check if there is any error.
9105     l_msg_count := FND_MSG_PUB.count_msg;
9106     IF l_msg_count > 0 THEN
9107       x_msg_count := l_msg_count;
9108       IF x_msg_count = 1 THEN
9109         x_msg_data := l_msg_data;
9110       END IF;
9111       RAISE FND_API.G_EXC_ERROR;
9112     END IF;
9113 
9114     x_return_status := FND_API.G_RET_STS_SUCCESS;
9115 
9116     IF (p_debug_mode = 'Y') THEN
9117       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.SPLIT_WORKPLAN end');
9118     END IF;
9119 
9120 EXCEPTION
9121   when FND_API.G_EXC_ERROR then
9122     if p_commit = FND_API.G_TRUE then
9123       rollback to split_workplan;
9124     end if;
9125     x_return_status := FND_API.G_RET_STS_ERROR;
9126   when FND_API.G_EXC_UNEXPECTED_ERROR then
9127     if p_commit = FND_API.G_TRUE then
9128       rollback to split_workplan;
9129     end if;
9130     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9131     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
9132                             p_procedure_name => 'SPLIT_WORKPLAN',
9133                             p_error_text     => SUBSTRB(SQLERRM,1,240));
9134   when OTHERS then
9135     if p_commit = FND_API.G_TRUE then
9136       rollback to split_workplan;
9137     end if;
9138     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9139     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
9140                             p_procedure_name => 'SPLIT_WORKPLAN',
9141                             p_error_text     => SUBSTRB(SQLERRM,1,240));
9142     raise;
9143 END SPLIT_WORKPLAN;
9144 
9145 
9146 procedure SUBMIT_WORKPLAN
9147 (
9148     p_api_version                       IN  NUMBER      := 1.0
9149    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
9150    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
9151    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
9152    ,p_validation_level                  IN  VARCHAR2    := 100
9153    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
9154    ,p_debug_mode                        IN  VARCHAR2    := 'N'
9155    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9156    ,p_project_id                        IN  NUMBER
9157    ,p_structure_id                      IN  NUMBER
9158    ,p_structure_version_id              IN  NUMBER
9159    ,p_responsibility_id                 IN  NUMBER
9160    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9161    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
9162    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9163 )
9164 IS
9165   l_structure_version_name   VARCHAR2(240);
9166   l_structure_version_desc   VARCHAR2(250);
9167   l_auto_pub                 VARCHAR2(1);
9168   l_published_struc_ver_id   NUMBER;
9169   l_dummy                    VARCHAR2(1);
9170   l_item_key                 VARCHAR2(240);
9171   l_wf_enable                VARCHAR2(1);
9172   l_wf_item_type             VARCHAR2(30);
9173   l_wf_process               VARCHAR2(30);
9174   l_wf_success_code          VARCHAR2(30);
9175   l_wf_failure_code          VARCHAR2(30);
9176   l_err_code                 NUMBER;
9177   l_err_stage                VARCHAR2(30);
9178   l_err_stack                VARCHAR2(240);
9179   l_return_status            VARCHAR2(1);
9180   l_msg_count                NUMBER;
9181   l_msg_data                 VARCHAR2(250);
9182   l_error_msg_code           VARCHAR2(250);
9183 
9184   CURSOR checkAutoPub IS
9185     select '1' from pa_proj_workplan_attr
9186       where project_id = p_project_id
9187         and wp_auto_publish_flag = 'Y';
9188 
9189   CURSOR get_wp_info IS
9190     select name, description
9191       from pa_proj_elem_ver_structure
9192      where project_Id = p_project_id
9193        and element_version_id = p_structure_version_id;
9194 
9195  /* Bug 2683138 */
9196  /* CURSOR get_start_wf IS
9197     select 'Y' from dual
9198        where exists (
9199        select 1 from pa_product_installation_v
9200         where product_short_code = 'PJT' AND INSTALLED_FLAG = 'Y'); */
9201 
9202   CURSOR get_start_wf IS
9203     select 'Y' from dual;
9204 
9205   CURSOR get_wf_info(c_status_code VARCHAR2) IS
9206     select enable_wf_flag, workflow_item_type,
9207            workflow_process, wf_success_status_code,
9208            wf_failure_status_code
9209       from pa_project_statuses
9210      where project_status_code = c_status_code;
9211 --status_code can be STRUCTURE_SUBMITTED, STRUCTURE_REJECTED,
9212 --                   STRUCTURE_APPROVED, or STRUCTURE_PUBLISHED
9213 
9214   --check if delete unpublished ok
9215     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
9216       select b.element_version_id
9217         from pa_proj_element_versions a,
9218              pa_proj_element_versions b
9219        where a.element_version_id = c_keep_struc_ver_id
9220          and a.project_id = b.project_id
9221          and a.proj_element_id = b.proj_element_id
9222          and b.element_version_id <> c_keep_struc_ver_id
9223          and b.object_type = 'PA_STRUCTURES';
9224     l_del_struc_ver_id  NUMBER;
9225 
9226 BEGIN
9227   PA_DEBUG.INIT_ERR_STACK('PA_PROJECT_STRUCTURE_PVT1.SUBMIT_WORKPLAN');
9228 
9229   x_return_status := FND_API.G_RET_STS_SUCCESS;
9230 
9231   IF (p_commit = FND_API.G_TRUE) THEN
9232     savepoint SUBMIT_WP_PRIVATE;
9233   END IF;
9234 
9235   OPEN get_wp_info;
9236   FETCH get_wp_info into l_structure_version_name, l_structure_version_desc;
9237   CLOSE get_wp_info;
9238 
9239   --Check if ok to publish workplan version
9240   OPEN checkAutoPub;
9241   FETCH checkAutoPub into l_dummy;
9242   IF checkAutoPub%NOTFOUND THEN
9243     l_auto_pub := 'N';
9244   ELSE
9245     l_auto_pub := 'Y';
9246   END IF;
9247   CLOSE checkAutoPub;
9248 
9249 
9250   --hsiu: bug 2684465
9251   --Check if this structure missing tasks with transactions
9252 --  IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.check_miss_transaction_tasks(p_structure_version_id)) THEN
9253 --    PA_UTILS.ADD_MESSAGE('PA','PA_PS_MISS_TRANSAC_TASK');
9254 --    x_msg_data := 'PA_PS_MISS_TRANSAC_TASK';
9255 --    RAISE FND_API.G_EXC_ERROR;
9256 --  END IF;
9257   PA_PROJECT_STRUCTURE_UTILS.CHECK_MISS_TRANSACTION_TASKS(p_structure_version_id,
9258                                                           l_return_status,
9259                                                           l_msg_count,
9260                                                           l_msg_data);
9261   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9262     RAISE FND_API.G_EXC_ERROR;
9263   END IF;
9264 
9265 
9266 
9267   --Check if task statuses are consistent
9268   PA_PROJECT_STRUCTURE_UTILS.check_tasks_statuses_valid(
9269       p_structure_version_id
9270      ,l_return_status
9271      ,l_msg_count
9272      ,l_msg_data
9273   );
9274   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9275     RAISE FND_API.G_EXC_ERROR;
9276   END IF;
9277 
9278 
9279   --Check if any new summary task has transactions
9280   PA_PROJECT_STRUCTURE_UTILS.Check_txn_on_summary_tasks(
9281     p_structure_version_id
9282    ,l_return_status
9283    ,l_msg_count
9284    ,l_msg_data
9285   );
9286   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9287     RAISE FND_API.G_EXC_ERROR;
9288   END IF;
9289 
9290 
9291   --end bug 2684465
9292 
9293 
9294 
9295   IF (l_auto_pub = 'Y') THEN
9296 
9297 /*
9298     --Check if this structure can be published (ie, if linked structures are published)
9299     IF ('Y' <> PA_PROJECT_STRUCTURE_UTILS.Check_Publish_Struc_Ver_Ok(p_structure_version_id)) THEN
9300       PA_UTILS.ADD_MESSAGE('PA','PA_PS_LINK_STRUC_NOT_PUB');
9301       x_msg_data := 'PA_PS_LINK_STRUC_NOT_PUB';
9302       RAISE FND_API.G_EXC_ERROR;
9303     END IF;
9304 */
9305 
9306 /*
9307     PA_PROGRESS_PUB.CREATE_PROGRESS_FOR_WBS(
9308         p_validate_only        => FND_API.G_TRUE
9309        ,p_commit               => FND_API.G_FALSE
9310        ,p_project_id           => p_project_id
9311        ,p_structure_version_id => p_structure_version_id
9312        ,x_return_status        => l_return_status
9313        ,x_msg_count            => l_msg_count
9314        ,x_msg_data             => l_msg_data
9315     );
9316 */
9317 
9318     --bug 3840509
9319     IF 'Y' = nvl(PA_PROJECT_STRUCTURE_UTILS.Get_Sch_Dirty_fl(p_project_id,
9320                                                              p_structure_version_id), 'N') THEN
9321       --need to reschedule
9322       PA_UTILS.ADD_MESSAGE('PA','PA_PS_NEED_THIRD_PT_SCH');
9323       x_msg_data := 'PA_PS_NEED_THIRD_PT_SCH';
9324       RAISE FND_API.G_EXC_ERROR;
9325     END IF;
9326     --end bug 3840509
9327 
9328       --Check if there is any error.
9329     l_msg_count := FND_MSG_PUB.count_msg;
9330     IF l_msg_count > 0 THEN
9331       x_msg_count := l_msg_count;
9332       IF x_msg_count = 1 THEN
9333         x_msg_data := l_msg_data;
9334       END IF;
9335       RAISE FND_API.G_EXC_ERROR;
9336     END IF;
9337 
9338 /*
9339     savepoint check_workplan;
9340 
9341     PA_PROJECT_STRUCTURE_PVT1.Publish_Structure(
9342       p_responsibility_id                => p_responsibility_id
9343      ,p_structure_version_id             => p_structure_version_id
9344      ,p_publish_structure_ver_name       => l_structure_version_name
9345      ,p_structure_ver_desc               => l_structure_version_desc
9346      ,p_effective_date                   => TRUNC(SYSDATE)
9347      ,p_current_baseline_flag            => 'N'
9348      ,x_published_struct_ver_id          => l_published_struc_ver_id
9349      ,x_return_status                    => x_return_status
9350      ,x_msg_count                        => x_msg_count
9351      ,x_msg_data                         => x_msg_data
9352     );
9353 
9354     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
9355       RAISE FND_API.G_EXC_ERROR;
9356     END IF;
9357     rollback to check_workplan;
9358 */
9359   END IF;
9360 
9361 -- For bug 3045358 : Functionality presently is that we do not require to check for the locking status of other working versions
9362 -- while submitting a particular version for approval.
9363 -- Hence commenting the below code
9364   /*
9365   OPEN sel_other_structure_ver(p_structure_version_id);
9366   LOOP
9367     FETCH sel_other_structure_ver into l_del_struc_ver_id;
9368     EXIT WHEN sel_other_structure_ver%NOTFOUND;
9369     PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
9370       p_project_id => p_project_id
9371      ,p_structure_version_id =>l_del_struc_ver_id
9372      ,x_return_status => l_return_status
9373      ,x_error_message_code => l_msg_data
9374     );
9375 
9376     IF (l_return_status <> 'S') THEN
9377       PA_UTILS.ADD_MESSAGE('PA',l_msg_data);
9378       x_msg_data := l_msg_data;
9379       CLOSE sel_other_structure_ver;
9380       RAISE FND_API.G_EXC_ERROR;
9381     END IF;
9382   END LOOP;
9383   CLOSE sel_other_structure_ver;
9384   */
9385   --Update to submit status
9386   UPDATE PA_PROJ_ELEM_VER_STRUCTURE
9387   set status_code = 'STRUCTURE_SUBMITTED',
9388       lock_status_code = 'UNLOCKED',
9389       locked_by_person_id = NULL,
9390       locked_date = NULL
9391   where project_id = p_project_id
9392   and element_version_id = p_structure_version_id;
9393 
9394   --Submit for approval
9395   IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9396 
9397     OPEN get_start_wf;
9398     FETCH get_start_wf into l_dummy;
9399     IF get_start_wf%FOUND THEN
9400 
9401       OPEN get_wf_info('STRUCTURE_SUBMITTED');
9402       FETCH get_wf_info into l_wf_enable, l_wf_item_type, l_wf_process,
9403                              l_wf_success_code, l_wf_failure_code;
9404       IF (l_wf_enable = 'Y') THEN
9405         PA_WORKPLAN_WORKFLOW.Start_workflow
9406         (
9407           l_wf_item_type
9408          ,l_wf_process
9409          ,p_structure_version_id
9410          ,p_responsibility_id
9411          ,FND_GLOBAL.USER_ID
9412          ,l_item_key
9413          ,x_msg_count
9414          ,x_msg_data
9415          ,x_return_status
9416         );
9417 
9418         IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9419           --update pa_wf_process_table
9420           PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES
9421           (
9422              p_wf_type_code =>      'WORKPLAN'
9423             ,p_item_type    =>      l_wf_item_type
9424             ,p_item_key     =>      l_item_key
9425             ,p_entity_key1  =>      p_project_id
9426             ,p_entity_key2  =>      p_structure_version_id
9427             ,p_description  =>      NULL
9428             ,p_err_code     =>      l_err_code
9429             ,p_err_stage    =>      l_err_stage
9430             ,p_err_stack    =>      l_err_stack
9431           );
9432           IF (l_err_code <> 0) THEN
9433             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9434                                  p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9435             x_return_status := FND_API.G_RET_STS_ERROR;
9436           END IF;
9437         ELSE
9438           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9439                                p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9440           x_return_status := FND_API.G_RET_STS_ERROR;
9441         END IF;
9442       END IF;
9443       CLOSE get_wf_info;
9444     END IF;
9445     CLOSE get_start_wf;
9446 
9447   END IF;
9448 
9449 EXCEPTION
9450     WHEN FND_API.G_EXC_ERROR THEN
9451       IF (p_commit = FND_API.G_TRUE) THEN
9452         ROLLBACK to SUBMIT_WP_PRIVATE;
9453       END IF;
9454       x_msg_count := FND_MSG_PUB.count_msg;
9455       x_return_status := FND_API.G_RET_STS_ERROR;
9456     WHEN OTHERS THEN
9457       IF (p_commit = FND_API.G_TRUE) THEN
9458         ROLLBACK to SUBMIT_WP_PRIVATE;
9459       END IF;
9460       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9461       x_msg_count := FND_MSG_PUB.count_msg;
9462       --put message
9463       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
9464                               p_procedure_name => 'Submit_Workplan',
9465                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9466       RAISE;
9467 END SUBMIT_WORKPLAN;
9468 
9469 
9470 procedure CHANGE_WORKPLAN_STATUS
9471 (
9472    p_api_version                 IN     NUMBER :=  1.0,
9473    p_init_msg_list               IN     VARCHAR2 := fnd_api.g_true,
9474    p_commit                      IN     VARCHAR2 := FND_API.g_false,
9475    p_validate_only               IN     VARCHAR2 := FND_API.g_false,
9476    p_max_msg_count               IN     NUMBER := FND_API.g_miss_num,
9477    p_project_id                  IN     NUMBER := NULL,
9478    p_structure_version_id        IN     NUMBER := NULL,
9479    p_status_code                 IN     VARCHAR2 := NULL,
9480    p_record_version_number       IN     NUMBER := NULL,
9481    x_return_status               OUT    NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
9482    x_msg_count                   OUT    NOCOPY NUMBER, --File.Sql.39 bug 4440895
9483    x_msg_data                    OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9484 )
9485 IS
9486       l_wf_enable VARCHAR2(1);
9487       l_wf_item_type VARCHAR2(30);
9488       l_wf_process VARCHAR2(30);
9489       l_success_code VARCHAR2(30);
9490       l_failure_code VARCHAR2(30);
9491       l_err_code NUMBER;
9492       l_err_stage VARCHAR2(30);
9493       l_err_stack VARCHAR2(240);
9494       l_dummy     VARCHAR2(1);
9495       l_item_key  NUMBER;
9496       l_pev_struc_id  NUMBER;
9497       l_msg_count    NUMBER;
9498       l_msg_data     VARCHAR2(250);
9499 
9500   /* Bug 2683138 */
9501   /* CURSOR get_start_wf IS
9502       select 'Y' from dual
9503        where exists (
9504          select 1 from pa_product_installation_v
9505           where product_short_code = 'PJT' AND INSTALLED_FLAG = 'Y');   */
9506 
9507     CURSOR get_start_wf IS
9508       select 'Y' from dual;
9509 
9510   CURSOR get_wf_info(c_status_code VARCHAR2) IS
9511     select enable_wf_flag, workflow_item_type,
9512            workflow_process, wf_success_status_code,
9513            wf_failure_status_code
9514       from pa_project_statuses
9515      where project_status_code = c_status_code;
9516 
9517   CURSOR get_status_code(c_status_code VARCHAR2) IS
9518     select '1' from pa_project_statuses
9519      where project_status_code = c_status_code
9520        and status_type = 'STRUCTURE';
9521 
9522 BEGIN
9523     PA_DEBUG.init_err_stack('PA_PROJECT_STRUCTURE_PVT1.CHANGE_WORKPLAN_STATUS');
9524 
9525     -- Initialize the return status to success
9526     x_return_status := FND_API.G_RET_STS_SUCCESS;
9527 
9528     --
9529     BEGIN
9530       select pev_structure_id into l_pev_struc_id
9531         from pa_proj_elem_ver_structure
9532        where project_id = p_project_id
9533          and element_version_id = p_structure_version_id
9534          and record_version_number = p_record_version_number
9535          for update of record_version_number NOWAIT;
9536     EXCEPTION
9537          when TIMEOUT_ON_RESOURCE then
9538             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9539                                  p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
9540             l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
9541          when NO_DATA_FOUND then
9542             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9543                                  p_msg_name       => 'PA_XC_RECORD_CHANGED');
9544             l_msg_data := 'PA_XC_RECORD_CHANGED';
9545          when OTHERS then
9546             if SQLCODE = -54 then
9547               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9548                                    p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
9549               l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
9550             else
9551               raise;
9552             end if;
9553     END;
9554 
9555     l_msg_count := FND_MSG_PUB.count_msg;
9556     if l_msg_count > 0 then
9557       x_msg_count := l_msg_count;
9558       if x_msg_count = 1 then
9559         x_msg_data := l_msg_data;
9560       end if;
9561       raise FND_API.G_EXC_ERROR;
9562     end if;
9563 
9564     --check if status if valid
9565     OPEN get_status_code(p_status_code);
9566     FETCH get_status_code INTO l_dummy ;
9567     IF (get_status_code%NOTFOUND) THEN
9568       CLOSE get_status_code;
9569       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9570                            p_msg_name       => 'PA_PS_STRUC_STAT_INVAL');
9571               x_msg_data := 'PA_PS_STRUC_STAT_INVAL';
9572       RAISE FND_API.G_EXC_ERROR;
9573     END IF;
9574     CLOSE get_status_code;
9575     --end validation
9576 
9577     update pa_proj_elem_ver_structure
9578     set status_code = p_status_code,
9579         record_version_number = record_version_number + 1
9580     where pev_structure_id = l_pev_struc_id;
9581 
9582     OPEN get_start_wf;
9583     FETCH get_start_wf INTO  l_dummy;
9584     IF (get_start_wf%found) THEN
9585       OPEN get_wf_info(p_status_code);
9586       FETCH get_wf_info INTO l_wf_enable, l_wf_item_type, l_wf_process,
9587                              l_success_code,l_failure_code;
9588       IF (get_wf_info%found) then
9589         IF (l_wf_enable = 'Y') THEN
9590           PA_WORKPLAN_WORKFLOW.Start_workflow
9591           (
9592             l_wf_item_type
9593            ,l_wf_process
9594            ,p_structure_version_id
9595            ,FND_GLOBAL.RESP_ID -- NULL Added for bug 5372586
9596            ,FND_GLOBAL.USER_ID -- NULL Added for bug 5372586
9597            ,l_item_key
9598            ,x_msg_count
9599            ,x_msg_data
9600            ,x_return_status
9601           );
9602 
9603           IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9604             --update pa_wf_process_table
9605             PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES
9606             (
9607                p_wf_type_code =>      'WORKPLAN'
9608               ,p_item_type    =>      l_wf_item_type
9609               ,p_item_key     =>      l_item_key
9610               ,p_entity_key1  =>      p_project_id
9611               ,p_entity_key2  =>      p_structure_version_id
9612               ,p_description  =>      NULL
9613               ,p_err_code     =>      l_err_code
9614               ,p_err_stage    =>      l_err_stage
9615               ,p_err_stack    =>      l_err_stack
9616             );
9617             IF (l_err_code <> 0) THEN
9618               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9619                                    p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9620               x_return_status := FND_API.G_RET_STS_ERROR;
9621             END IF;
9622           ELSE
9623             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9624                                  p_msg_name => 'PA_PS_CREATE_WF_FAILED');
9625             x_return_status := FND_API.G_RET_STS_ERROR;
9626 
9627           END IF;
9628         END IF;
9629       END IF;
9630       CLOSE get_wf_info;
9631 
9632     END IF;
9633     CLOSE get_start_wf;
9634 
9635 EXCEPTION
9636     WHEN FND_API.G_EXC_ERROR THEN
9637       x_msg_count := FND_MSG_PUB.count_msg;
9638       x_return_status := FND_API.G_RET_STS_ERROR;
9639     WHEN OTHERS THEN
9640       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9641       x_msg_count := FND_MSG_PUB.count_msg;
9642       --put message
9643       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
9644                               p_procedure_name => 'Change_Workplan_Status',
9645                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9646       RAISE;
9647 END CHANGE_WORKPLAN_STATUS;
9648 
9649 
9650   PROCEDURE rework_workplan
9651   (
9652     p_api_version                       IN  NUMBER      := 1.0
9653    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
9654    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
9655    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
9656    ,p_validation_level                  IN  VARCHAR2    := 100
9657    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
9658    ,p_debug_mode                        IN  VARCHAR2    := 'N'
9659    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9660    ,p_project_id                        IN  NUMBER
9661    ,p_structure_version_id              IN  NUMBER
9662    ,p_record_version_number             IN  NUMBER
9663    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9664    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
9665    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9666   )
9667   IS
9668     l_item_key      VARCHAR2(240);
9669     l_approve_req   VARCHAR2(1);
9670     l_item_type     VARCHAR2(30);
9671     l_wf_status     VARCHAR2(30);
9672     l_msg_count     NUMBER;
9673     l_msg_data      VARCHAR2(300);
9674 
9675     CURSOR check_approve_req IS
9676       select nvl(wp_approval_reqd_flag,'N') from pa_proj_workplan_attr
9677        where project_id = p_project_id;
9678 
9679 /* Bug 2680486 -- Performance changes -- Added the join of wf_type_code to avoid full table scan on pa_wf_processes*/
9680 
9681     CURSOR get_item_key IS
9682       select MAX(pwp.item_key), max(pwp.item_type)
9683         from pa_wf_processes pwp, pa_project_statuses pps
9684        where pwp.item_type = pps.workflow_item_type
9685          and pps.status_type = 'STRUCTURE'
9686          and pps.project_status_code = 'STRUCTURE_SUBMITTED'
9687          and entity_key2 = p_structure_version_id
9688      and pwp.wf_type_code = 'WORKPLAN';
9689 
9690     CURSOR get_wf_status IS
9691       select 'Y'
9692         from wf_item_activity_statuses wias, pa_project_statuses pps
9693        where wias.item_type = pps.WORKFLOW_ITEM_TYPE
9694          and wias.item_key = l_item_key
9695          and wias.activity_status = 'ACTIVE'
9696          and pps.status_type = 'STRUCTURE'
9697          and pps.project_status_code = 'STRUCTURE_SUBMITTED';
9698 
9699   BEGIN
9700     PA_DEBUG.init_err_stack('PA_PROJECT_STRUCTURE_PVT1.REWORK_WORKPLAN');
9701     x_return_status := FND_API.G_RET_STS_SUCCESS;
9702 
9703     IF (p_commit = FND_API.G_TRUE) THEN
9704       savepoint rework_workplan_pvt;
9705     END IF;
9706 
9707     change_workplan_status(
9708       p_project_id => p_project_id
9709      ,p_structure_version_id => p_structure_version_id
9710      ,p_status_code => 'STRUCTURE_WORKING'
9711      ,p_record_version_number => p_record_version_number
9712      ,x_return_status => x_return_status
9713      ,x_msg_count => l_msg_count
9714      ,x_msg_data => l_msg_data
9715     );
9716 
9717       --Check if there is any error.
9718     l_msg_count := FND_MSG_PUB.count_msg;
9719     IF l_msg_count > 0 THEN
9720       x_msg_count := l_msg_count;
9721       IF x_msg_count = 1 THEN
9722         x_msg_data := l_msg_data;
9723       END IF;
9724       RAISE FND_API.G_EXC_ERROR;
9725     END IF;
9726 
9727     IF (x_return_status = FND_API.G_RET_STS_SUCCESS) THEN
9728       OPEN check_approve_req;
9729       FETCH check_approve_req into l_approve_req;
9730       IF check_approve_req%NOTFOUND THEN
9731         l_approve_req := 'N';
9732       END IF;
9733       CLOSE check_approve_req;
9734 
9735       OPEN get_item_key;
9736       FETCH get_item_key into l_item_key, l_item_type;
9737       IF (get_item_key%FOUND) THEN
9738 
9739         --process exist
9740         OPEN get_wf_status;
9741         FETCH get_wf_status INTO l_wf_status;
9742         IF (get_wf_status%NOTFOUND or l_wf_status <> 'Y') THEN
9743 --          IF (l_approve_req = 'Y') THEN
9744 --            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
9745 --                                ,p_msg_name => 'PA_PR_CANCEL_WORKFLOW_INV');
9746 --            x_return_status := FND_API.G_RET_STS_ERROR;
9747 --            x_msg_count := FND_MSG_PUB.count_msg;
9748 --            if x_msg_count = 1 then
9749 --              x_msg_data := 'PA_PR_CANCEL_WORKFLOW_INV';
9750 --            end if;
9751 --            raise FND_API.G_EXC_ERROR;
9752 --          END IF;
9753             NULL;
9754         ELSE
9755           --cancel process
9756           PA_WORKPLAN_WORKFLOW.cancel_workflow(
9757             l_item_type
9758            ,l_item_key
9759            ,x_msg_count
9760            ,x_msg_data
9761            ,x_return_status
9762           );
9763         END IF;
9764         CLOSE get_wf_status;
9765 
9766       ELSE
9767         IF (l_approve_req = 'Y') THEN
9768           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
9769                               ,p_msg_name => 'PA_PR_CANCEL_WORKFLOW_INV');
9770           x_return_status := FND_API.G_RET_STS_ERROR;
9771           x_msg_count := FND_MSG_PUB.count_msg;
9772           if x_msg_count = 1 then
9773             x_msg_data := 'PA_PR_CANCEL_WORKFLOW_INV';
9774           end if;
9775           raise FND_API.G_EXC_ERROR;
9776         END IF;
9777       END IF;
9778       CLOSE get_item_key;
9779     END IF;
9780 EXCEPTION
9781     WHEN FND_API.G_EXC_ERROR THEN
9782       IF (p_commit = FND_API.G_TRUE) THEN
9783         ROLLBACK to rework_workplan_pvt;
9784       END IF;
9785       x_msg_count := FND_MSG_PUB.count_msg;
9786       x_return_status := FND_API.G_RET_STS_ERROR;
9787     WHEN OTHERS THEN
9788       IF (p_commit = FND_API.G_TRUE) THEN
9789         ROLLBACK to rework_workplan_pvt;
9790       END IF;
9791       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9792       x_msg_count := FND_MSG_PUB.count_msg;
9793       --put message
9794       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
9795                               p_procedure_name => 'rework_Workplan',
9796                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9797       RAISE;
9798   END rework_workplan;
9799 
9800 
9801 -- API name                      : update_structures_setup_attr
9802 -- Type                             : Update API
9803 -- Pre-reqs                       : None
9804 -- Return Value                 : Update_structures_setup_attr
9805 --
9806 -- Parameters
9807 --  p_project_id                IN NUMBER
9808 --  p_workplan_enabled_flag IN VARCHAR2
9809 --  p_financial_enabled_flag IN VARCHAR2
9810 --  p_sharing_enabled_flag IN VARCHAR2
9811 --  x_return_status OUT VARCHAR2
9812 --  x_msg_count OUT NUMBER
9813 --  x_msg_data  OUT VARCHAR2
9814 --
9815 --  History
9816 --
9817 --  26-JUL-02   HSIU             -Created
9818 --  15-JAN-04   HSIU             -rewrite API with sharing code changes
9819 
9820   PROCEDURE update_structures_setup_old
9821   (  p_api_version      IN  NUMBER     := 1.0
9822     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
9823     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
9824     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
9825     ,p_validation_level IN  VARCHAR2   := 100
9826     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
9827     ,p_debug_mode       IN  VARCHAR2   := 'N'
9828     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9829     ,p_project_id IN NUMBER
9830     ,p_workplan_enabled_flag IN VARCHAR2
9831     ,p_financial_enabled_flag IN VARCHAR2
9832     ,p_sharing_enabled_flag IN VARCHAR2
9833     --FP M changes bug 3301192
9834     ,p_deliverables_enabled_flag       IN VARCHAR2
9835     ,p_sharing_option_code             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9836     --End FP M changes bug 3301192
9837     ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9838     ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9839     ,x_msg_data  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9840   )
9841   IS
9842     l_ret_stat           VARCHAR2(1);
9843     l_err_msg_code       VARCHAR2(30);
9844     l_suffix             VARCHAR2(80);
9845     l_name               VARCHAR2(240);
9846     l_append             VARCHAR2(10) := ': ';
9847     l_return_status      VARCHAR2(1);
9848     l_msg_count          NUMBER;
9849     l_msg_data           VARCHAR2(250);
9850     l_structure_id       NUMBER;
9851     l_structure_version_id NUMBER;
9852     l_template_flag      VARCHAR2(1);
9853     l_status_code        VARCHAR2(30);
9854     l_baseline_flag      VARCHAR2(1);
9855     l_latest_eff_pub_flag VARCHAR2(1);
9856     l_effective_date     DATE;
9857     l_wp_attr_rvn        NUMBER;
9858     l_rowid              VARCHAR2(255);
9859     l_keep_structure_ver_id NUMBER;
9860     l_del_struc_ver_id   NUMBER;
9861     l_struc_ver_rvn      NUMBER;
9862     l_pev_structure_id   NUMBER;
9863     l_pev_schedule_id    NUMBER;
9864     l_struc_ver_attr_rvn NUMBER;
9865     l_struc_type_id      NUMBER;
9866     l_proj_structure_type_id NUMBER;
9867     l_task_id            NUMBER;
9868     l_element_version_id NUMBER;
9869     l_start_date         DATE;
9870     l_completion_date    DATE;
9871     l_object_type        VARCHAR2(30);
9872     l_task_ver_id        NUMBER;
9873    /* Bug 2790703 Begin */
9874     -- l_task_ver_ids       PA_NUM_1000_NUM := PA_NUM_1000_NUM();
9875     l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
9876     l_index number :=0 ;
9877 /* Bug 2790703 End */
9878 
9879     l_proj_start_Date DATE;
9880     l_proj_completion_date DATE;
9881     l_proj_prog_attr_id NUMBER;
9882 
9883     CURSOR get_project_info IS
9884       select name, target_start_date, target_finish_date
9885         from pa_projects_all
9886        where project_id = p_project_id;
9887 
9888 --bug 2843569: added record_version_number
9889     CURSOR get_template_flag IS
9890       select template_flag, record_version_number
9891         from pa_projects_all
9892        where project_id = p_project_id;
9893 
9894     CURSOR get_wp_attr_rvn IS
9895       select b.proj_element_id, a.record_version_number
9896         from pa_proj_workplan_attr a,
9897              pa_proj_elements b,
9898              pa_proj_structure_types c,
9899              pa_structure_types d
9900        where a.project_id = b.project_id
9901          and a.proj_element_id = b.proj_element_id
9902          and b.project_id = p_project_id
9903          and b.proj_element_id = c.proj_element_id
9904          and c.structure_type_id = d.structure_type_id
9905          and d.structure_type_class_code = 'WORKPLAN';
9906 
9907     cursor sel_wp_struct_type(c_structure_id NUMBER) IS
9908       select a.rowid
9909         from pa_proj_structure_types a,
9910              pa_structure_types b
9911        where a.proj_element_id = c_structure_id
9912          and a.structure_type_id = b.structure_type_id
9913          and b.structure_type_class_code = 'WORKPLAN';
9914 
9915     cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
9916       select element_version_id
9917         from pa_proj_elem_ver_structure
9918        where proj_element_id = c_structure_id
9919          and project_id = p_project_id
9920          and status_code = 'STRUCTURE_PUBLISHED'
9921          and LATEST_EFF_PUBLISHED_FLAG = 'Y';
9922 
9923     cursor sel_wp_structure_id IS
9924       select a.proj_element_id
9925         from pa_proj_elements a,
9926              pa_proj_structure_types b,
9927              pa_structure_types c
9928        where a.project_id = p_project_id
9929          and a.object_type = 'PA_STRUCTURES'
9930          and a.proj_element_id = b.proj_element_id
9931          and b.structure_type_id = c.structure_type_id
9932          and c.structure_type_class_code = 'WORKPLAN';
9933 
9934     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
9935       select b.element_version_id, b.record_version_number
9936         from pa_proj_element_versions a,
9937              pa_proj_element_versions b
9938        where a.element_version_id = c_keep_struc_ver_id
9939          and a.project_id = b.project_id
9940          and a.proj_element_id = b.proj_element_id
9941          and b.element_version_id <> c_keep_struc_ver_id
9942          and b.object_type = 'PA_STRUCTURES';
9943 
9944     cursor sel_all_wp_structure_ver(c_struc_id NUMBER) IS
9945       select a.element_version_id, a.record_version_number
9946         from pa_proj_element_versions a,
9947              pa_proj_elements b
9948        where a.proj_element_id = b.proj_element_id
9949          and a.project_id = b.project_id
9950          and b.proj_element_id = c_struc_id;
9951 
9952     cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
9953       select PEV_STRUCTURE_ID, record_version_number
9954         from pa_proj_elem_ver_structure
9955        where project_id = p_project_id
9956          and element_version_id = c_struc_ver_id;
9957 
9958     cursor sel_proj_workplan_attr(c_struc_id NUMBER) is
9959       select *
9960         from pa_proj_workplan_attr
9961        where proj_element_id = c_struc_id;
9962     l_proj_workplan_attr_rec  sel_proj_workplan_attr%ROWTYPE;
9963 
9964     cursor sel_proj_progress_attr(c_struc_id NUMBER) IS
9965       select *
9966         from pa_proj_progress_attr
9967        where project_id = p_project_id
9968          and object_type = 'PA_STRUCTURES'
9969          and object_id = c_struc_id;
9970     l_proj_progress_attr_rec  sel_proj_progress_attr%ROWTYPE;
9971 
9972     cursor sel_fin_structure_id IS
9973       select a.proj_element_id
9974         from pa_proj_elements a,
9975              pa_proj_structure_types b,
9976              pa_structure_types c
9977        where a.project_id = p_project_id
9978          and a.object_type = 'PA_STRUCTURES'
9979          and a.proj_element_id = b.proj_element_id
9980          and b.structure_type_id = c.structure_type_id
9981          and c.structure_type_class_code = 'FINANCIAL';
9982 
9983     CURSOR sel_struc_type_id IS
9984       select structure_type_id
9985         from pa_structure_types
9986        where structure_type_class_code = 'WORKPLAN';
9987 
9988     cursor sel_struc_ver(c_structure_id NUMBER) IS
9989       select element_version_id
9990         from pa_proj_element_versions
9991        where project_id = p_project_id
9992          and proj_element_id = c_structure_id
9993          and object_type = 'PA_STRUCTURES';
9994 
9995 --hsiu: commented for performance
9996 --    cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
9997 --      select object_type, proj_element_id, element_version_id
9998 --        from pa_proj_element_versions
9999 --       where parent_structure_version_id = c_struc_ver_id;
10000     cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
10001       select pev.object_type, pev.proj_element_id, pev.element_version_id
10002         from pa_proj_element_versions pev, pa_object_relationships rel
10003        where pev.parent_structure_version_id = c_struc_ver_id
10004          and rel.object_id_to1 = pev.element_version_id
10005          and rel.relationship_type = 'S'
10006          and NOT EXISTS (
10007                select 1
10008                  from pa_object_Relationships
10009                 where object_id_from1 = pev.element_version_id
10010                   and relationship_type = 'S'
10011              );
10012 
10013 
10014     cursor sel_task_dates(c_task_id NUMBER) IS
10015       select start_date, completion_date
10016         from pa_tasks
10017        where task_id = c_task_id;
10018 
10019 --hsiu added for bug 2634029
10020     cursor sel_target_dates IS
10021       select target_start_date, target_finish_date, calendar_id
10022         from pa_projects_all
10023        where project_id = p_project_id;
10024 
10025     CURSOR get_top_tasks(c_structure_version_id NUMBER) IS
10026            select v.element_version_id
10027              from pa_proj_element_versions v,
10028                   pa_object_relationships r
10029             where v.element_version_id = r.object_id_to1
10030               and r.object_id_from1 = c_structure_version_id
10031               and r.object_type_from = 'PA_STRUCTURES';
10032 
10033 --bug 2843569
10034     CURSOR get_scheduled_dates(c_project_Id NUMBER,
10035                                 c_element_version_id NUMBER) IS
10036            select a.scheduled_start_date, a.scheduled_finish_date
10037              from pa_proj_elem_ver_schedule a
10038             where a.project_id = c_project_id
10039               and a.element_version_id = c_element_version_id;
10040     l_get_sch_dates_cur get_scheduled_dates%ROWTYPE;
10041     l_proj_rec_ver_num      NUMBER;
10042 --end bug 2843569
10043 
10044     l_target_start_date     DATE;
10045     l_target_finish_date    DATE;
10046     l_calendar_id           NUMBER;
10047 --end changes for bug 2634029
10048 
10049 --bug 3010538
10050     l_task_weight_basis_code VARCHAR2(30);
10051     l_update_proc_wbs_flag VARCHAR2(1);
10052 --end bug 3010538
10053 
10054     l_wp_name               VARCHAR2(240);
10055   BEGIN
10056     IF (p_debug_mode = 'Y') THEN
10057       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr');
10058     END IF;
10059 
10060     IF (p_commit = FND_API.G_TRUE) THEN
10061       savepoint update_struc_setup_attr_pvt;
10062     END IF;
10063 
10064     IF (p_debug_mode = 'Y') THEN
10065       pa_debug.debug('Performing validations');
10066     END IF;
10067 
10068 /*
10069     --For enabling workplan
10070     IF (p_workplan_enabled_flag <>
10071         PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id)) THEN
10072       --BEGIN ENABLING WP CODE
10073 
10074       IF (p_workplan_enabled_flag = 'Y') THEN
10075         --Validation
10076         PA_PROJECT_STRUCTURE_UTILS.check_enable_wp_ok(p_project_id,
10077                                                       l_ret_stat,
10078                                                       l_err_msg_code);
10079         IF (l_ret_stat = 'N') THEN
10080           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10081           x_msg_data := l_err_msg_code;
10082           RAISE FND_API.G_EXC_ERROR;
10083         END IF;
10084         --enable WP
10085         --get project name
10086         OPEN get_project_info;
10087         FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date;
10088         CLOSE get_project_info;
10089 
10090         IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
10091           l_proj_completion_date := l_proj_start_date;
10092         ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
10093           l_proj_completion_date := sysdate;
10094           l_proj_start_date := sysdate;
10095         END IF;
10096 
10097         --get suffix
10098         select meaning
10099           into l_suffix
10100           from pa_lookups
10101          where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
10102            and lookup_code = 'WORKPLAN';
10103 
10104         l_name := substrb(l_name||l_append||l_suffix, 1, 240);
10105         --Create new structure
10106         PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
10107          ( p_validate_only           => FND_API.G_FALSE
10108           ,p_project_id              => p_project_id
10109           ,p_structure_number        => l_name
10110           ,p_structure_name          => l_name
10111           ,p_calling_flag            => 'WORKPLAN'
10112           ,x_structure_id            => l_structure_id
10113           ,x_return_status           => l_return_status
10114           ,x_msg_count               => l_msg_count
10115           ,x_msg_data                => l_msg_data );
10116 
10117         --Check if there is any error.
10118         l_msg_count := FND_MSG_PUB.count_msg;
10119         IF l_msg_count > 0 THEN
10120           x_msg_count := l_msg_count;
10121           IF x_msg_count = 1 THEN
10122             x_msg_data := l_msg_data;
10123           END IF;
10124           RAISE FND_API.G_EXC_ERROR;
10125         END IF;
10126 
10127         PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
10128         ( p_validate_only         => FND_API.G_FALSE
10129          ,p_structure_id          => l_structure_id
10130          ,x_structure_version_id  => l_structure_version_id
10131          ,x_return_status         => l_return_status
10132          ,x_msg_count             => l_msg_count
10133          ,x_msg_data              => l_msg_data );
10134 
10135         --Check if there is any error.
10136         l_msg_count := FND_MSG_PUB.count_msg;
10137         IF l_msg_count > 0 THEN
10138           x_msg_count := l_msg_count;
10139           IF x_msg_count = 1 THEN
10140             x_msg_data := l_msg_data;
10141           END IF;
10142           RAISE FND_API.G_EXC_ERROR;
10143         END IF;
10144 
10145         PA_TASK_PUB1.Create_Schedule_Version(
10146           p_element_version_id      => l_structure_version_id
10147          ,p_scheduled_start_date    => l_proj_start_date
10148          ,p_scheduled_end_date      => l_proj_completion_date
10149          ,x_pev_schedule_id         => l_pev_schedule_id
10150          ,x_return_status           => l_return_status
10151          ,x_msg_count               => l_msg_count
10152          ,x_msg_data                => l_msg_data
10153         );
10154 
10155         --Check if there is any error.
10156         l_msg_count := FND_MSG_PUB.count_msg;
10157         IF l_msg_count > 0 THEN
10158           x_msg_count := l_msg_count;
10159           IF x_msg_count = 1 THEN
10160             x_msg_data := l_msg_data;
10161           END IF;
10162           RAISE FND_API.G_EXC_ERROR;
10163         END IF;
10164 
10165         OPEN get_template_flag;
10166         FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10167         CLOSE get_template_flag;
10168 
10169         IF (l_template_flag = 'Y') THEN
10170           l_status_code := 'STRUCTURE_WORKING';
10171           l_baseline_flag := 'N';
10172           l_latest_eff_pub_flag := 'N';
10173           l_effective_date := NULL;
10174         ELSE
10175           l_status_code := 'STRUCTURE_PUBLISHED';
10176           l_baseline_flag := 'Y';
10177           l_latest_eff_pub_flag := 'Y';
10178           l_effective_date := sysdate;
10179         END IF;
10180 
10181         PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
10182         ( p_validate_only               => FND_API.G_FALSE
10183          ,p_structure_version_id        => l_structure_version_id
10184          ,p_structure_version_name      => l_name
10185          ,p_structure_version_desc      => NULL
10186          ,p_effective_date              => l_effective_date
10187          ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
10188          ,p_locked_status_code          => 'UNLOCKED'
10189          ,p_struct_version_status_code  => l_status_code
10190          ,p_baseline_current_flag       => l_baseline_flag
10191          ,p_baseline_original_flag      => 'N'
10192          ,x_pev_structure_id            => l_pev_structure_id
10193          ,x_return_status               => l_return_status
10194          ,x_msg_count                   => l_msg_count
10195          ,x_msg_data                    => l_msg_data );
10196 
10197         --Check if there is any error.
10198         l_msg_count := FND_MSG_PUB.count_msg;
10199         IF l_msg_count > 0 THEN
10200           x_msg_count := l_msg_count;
10201           IF x_msg_count = 1 THEN
10202             x_msg_data := l_msg_data;
10203           END IF;
10204           RAISE FND_API.G_EXC_ERROR;
10205         END IF;
10206 
10207         --end enable WP
10208       ELSE
10209         --Validation
10210         PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
10211                                                        l_ret_stat,
10212                                                        l_err_msg_code);
10213         IF (l_ret_stat = 'N') THEN
10214           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10215           x_msg_data := l_err_msg_code;
10216           RAISE FND_API.G_EXC_ERROR;
10217         END IF;
10218         --disable WP
10219 
10220         --get structure_id
10221         OPEN sel_wp_structure_id;
10222         FETCH sel_wp_structure_id INTO l_structure_id;
10223         CLOSE sel_wp_structure_id;
10224 
10225         IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id)
10226             = 'Y') THEN
10227           --Shared
10228           --Select version to be kept
10229           OPEN sel_latest_pub_ver(l_structure_id);
10230           FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
10231           IF sel_latest_pub_ver%NOTFOUND THEN
10232             l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
10233           END IF;
10234           CLOSE sel_latest_pub_ver;
10235 
10236           --Delete all other structure versions
10237           OPEN sel_other_structure_ver(l_keep_structure_ver_id);
10238           LOOP
10239             FETCH sel_other_structure_ver into l_del_struc_ver_id,
10240                                                l_struc_ver_rvn;
10241             EXIT WHEN sel_other_structure_ver%NOTFOUND;
10242 -----hsiu: bug 2800553: added for sharing/splitting performance
10243             PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10244                        p_project_id,
10245                        l_del_struc_ver_id,
10246                        l_return_status,
10247                        l_err_msg_code);
10248             IF (l_return_status <> 'S') THEN
10249               PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10250               x_msg_data := l_err_msg_code;
10251               RAISE FND_API.G_EXC_ERROR;
10252             END IF;
10253 
10254             --get top tasks
10255             OPEN get_top_tasks(l_del_struc_ver_id);
10256             LOOP
10257               FETCH get_top_tasks into l_task_ver_id;
10258               EXIT WHEN get_top_tasks%NOTFOUND;
10259 
10260               PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10261                p_project_id                   => p_project_id
10262               ,p_task_version_id              => l_task_ver_id
10263               ,p_parent_structure_ver_id      => l_del_struc_ver_id
10264               ,x_return_status                => l_return_status
10265               ,x_error_message_code           => l_err_msg_code );
10266 
10267               IF (l_return_status <> 'S') THEN
10268                 x_return_status := l_return_status;
10269                 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10270                 l_msg_data := l_err_msg_code;
10271                 CLOSE get_top_tasks;
10272                 RAISE FND_API.G_EXC_ERROR;
10273               END IF;
10274             END LOOP;
10275             CLOSE get_top_tasks;
10276 
10277 --            PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10278             PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
10279               p_structure_version_id => l_del_struc_ver_id
10280              ,p_record_version_number => l_struc_ver_rvn
10281              ,x_return_status => l_return_status
10282              ,x_msg_count => l_msg_count
10283              ,x_msg_data => l_msg_data
10284             );
10285 ----end changes
10286 
10287             --Check if there is any error.
10288             l_msg_count := FND_MSG_PUB.count_msg;
10289             IF l_msg_count > 0 THEN
10290               x_msg_count := l_msg_count;
10291               IF x_msg_count = 1 THEN
10292                 x_msg_data := l_msg_data;
10293               END IF;
10294               CLOSE sel_other_structure_ver;
10295               RAISE FND_API.G_EXC_ERROR;
10296             END IF;
10297 
10298           END LOOP;
10299           CLOSE sel_other_structure_ver;
10300 
10301           --NULL all baseline dates
10302           UPDATE pa_proj_elements
10303              SET baseline_start_date = NULL,
10304                  baseline_finish_date = NULL,
10305                  record_version_number = record_version_number+1
10306            WHERE project_id = p_project_id;
10307 
10308           --Delete all schedule rows
10309           DELETE FROM pa_proj_elem_ver_schedule
10310           WHERE project_id = p_project_id;
10311 
10312           --Delete wp attr row
10313           OPEN get_wp_attr_rvn;
10314           FETCH get_wp_attr_rvn into l_structure_id, l_wp_attr_rvn;
10315           CLOSE get_wp_attr_rvn;
10316 
10317           PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
10318             p_validate_only               => FND_API.G_FALSE
10319            ,p_project_id => p_project_id
10320            ,p_proj_element_id => l_structure_id
10321            ,p_record_version_number => l_wp_attr_rvn
10322            ,x_return_status => l_return_status
10323            ,x_msg_count => l_msg_count
10324            ,x_msg_data => l_msg_data
10325           );
10326 
10327           --Check if there is any error.
10328           l_msg_count := FND_MSG_PUB.count_msg;
10329           IF l_msg_count > 0 THEN
10330             x_msg_count := l_msg_count;
10331             IF x_msg_count = 1 THEN
10332               x_msg_data := l_msg_data;
10333             END IF;
10334             RAISE FND_API.G_EXC_ERROR;
10335           END IF;
10336 
10337           PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
10338             p_validate_only        => FND_API.G_FALSE
10339            ,p_project_id           => p_project_id
10340            ,P_OBJECT_TYPE          => 'PA_STRUCTURES'
10341            ,p_object_id            => l_structure_id
10342            ,x_return_status        => l_return_status
10343            ,x_msg_count            => l_msg_count
10344            ,x_msg_data             => l_msg_data
10345           );
10346 
10347           --Check if there is any error.
10348           l_msg_count := FND_MSG_PUB.count_msg;
10349           IF l_msg_count > 0 THEN
10350             x_msg_count := l_msg_count;
10351             IF x_msg_count = 1 THEN
10352               x_msg_data := l_msg_data;
10353             END IF;
10354             RAISE FND_API.G_EXC_ERROR;
10355           END IF;
10356 
10357           --Delete structure type
10358           OPEN sel_wp_struct_type(l_structure_id);
10359           FETCH sel_wp_struct_type into l_rowid;
10360           PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
10361           CLOSE sel_wp_struct_type;
10362 
10363           --Update structure status to published if project;
10364           --  working if template
10365           OPEN get_template_flag;
10366           FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10367           CLOSE get_template_flag;
10368 
10369           OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
10370           FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
10371                                             l_struc_ver_attr_rvn;
10372           CLOSE sel_struc_ver_attr_rvn;
10373 
10374           IF (l_template_flag = 'Y') THEN
10375             l_status_code := 'STRUCTURE_WORKING';
10376             l_latest_eff_pub_flag := 'N';
10377             l_effective_date := NULL;
10378           ELSE
10379             l_status_code := 'STRUCTURE_PUBLISHED';
10380             l_latest_eff_pub_flag := 'Y';
10381             l_effective_date := sysdate;
10382           END IF;
10383 
10384           --Change status
10385           UPDATE pa_proj_elem_ver_structure
10386           set status_code = l_status_code,
10387               current_flag = 'N',
10388               current_baseline_date = NULL,
10389               current_baseline_person_id = NULL,
10390               latest_eff_published_flag = l_latest_eff_pub_flag,
10391               effective_date = l_effective_date,
10392               record_version_number = record_version_number + 1
10393           where pev_structure_id = l_pev_structure_id;
10394 
10395         ELSE
10396           --Not Shared
10397           --Delete all structure versions
10398           OPEN sel_all_wp_structure_ver(l_structure_id);
10399           LOOP
10400             FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
10401                                              l_struc_ver_rvn;
10402             EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
10403             PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10404                        p_project_id,
10405                        l_del_struc_ver_id,
10406                        l_return_status,
10407                        l_err_msg_code);
10408             IF (l_return_status <> 'S') THEN
10409               PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10410               x_msg_data := l_err_msg_code;
10411               RAISE FND_API.G_EXC_ERROR;
10412             END IF;
10413 
10414             --get top tasks
10415             OPEN get_top_tasks(l_del_struc_ver_id);
10416             LOOP
10417               FETCH get_top_tasks into l_task_ver_id;
10418               EXIT WHEN get_top_tasks%NOTFOUND;
10419 
10420               PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10421                p_project_id                   => p_project_id
10422               ,p_task_version_id              => l_task_ver_id
10423               ,p_parent_structure_ver_id      => l_del_struc_ver_id
10424               ,x_return_status                => l_return_status
10425               ,x_error_message_code           => l_err_msg_code );
10426 
10427               IF (l_return_status <> 'S') THEN
10428                 x_return_status := l_return_status;
10429                 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10430                 l_msg_data := l_err_msg_code;
10431                 CLOSE get_top_tasks;
10432                 RAISE FND_API.G_EXC_ERROR;
10433               END IF;
10434             END LOOP;
10435             CLOSE get_top_tasks;
10436 
10437 --            PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10438             PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10439               p_structure_version_id => l_del_struc_ver_id
10440              ,p_record_version_number => l_struc_ver_rvn
10441              ,x_return_status => l_return_status
10442              ,x_msg_count => l_msg_count
10443              ,x_msg_data => l_msg_data
10444             );
10445 ----end changes
10446 
10447             --Check if there is any error.
10448             l_msg_count := FND_MSG_PUB.count_msg;
10449             IF l_msg_count > 0 THEN
10450               x_msg_count := l_msg_count;
10451               IF x_msg_count = 1 THEN
10452                 x_msg_data := l_msg_data;
10453               END IF;
10454               CLOSE sel_all_wp_structure_ver;
10455               RAISE FND_API.G_EXC_ERROR;
10456             END IF;
10457           END LOOP;
10458           CLOSE sel_all_wp_structure_ver;
10459 
10460         END IF;
10461         --end disable WP
10462       END IF;
10463       --END ENABLING WP CODE
10464     END IF;
10465 
10466     --For sharing workplan
10467     IF (p_sharing_enabled_flag <>
10468         PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(p_project_id)) THEN
10469       --get structure_id
10470       OPEN sel_wp_structure_id;
10471       FETCH sel_wp_structure_id INTO l_structure_id;
10472       CLOSE sel_wp_structure_id;
10473 
10474       --select current proj wp attributes
10475       OPEN sel_proj_workplan_attr(l_structure_id);
10476       FETCH sel_proj_workplan_attr INTO l_proj_workplan_attr_rec;
10477       CLOSE sel_proj_workplan_attr;
10478 
10479       OPEN sel_proj_progress_attr(l_structure_id);
10480       FETCH sel_proj_progress_attr INTO l_proj_progress_attr_rec;
10481       CLOSE sel_proj_progress_attr;
10482 
10483       --BEGIN SHARING CODE
10484       IF (p_sharing_enabled_flag = 'Y' AND
10485           PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id) = 'Y') THEN
10486         --Validation
10487         PA_PROJECT_STRUCTURE_UTILS.check_sharing_on_ok(p_project_id,
10488                                                        l_ret_stat,
10489                                                        l_err_msg_code);
10490         IF (l_ret_stat = 'N') THEN
10491           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10492           x_msg_data := l_err_msg_code;
10493           RAISE FND_API.G_EXC_ERROR;
10494         END IF;
10495 
10496         --hsiu: bug 2634029; get target dates
10497         OPEN sel_target_dates;
10498         FETCH sel_target_dates into l_target_start_date, l_target_finish_date, l_calendar_id;
10499         CLOSE sel_target_dates;
10500         IF (l_target_start_date IS NULL or l_target_finish_date IS NULL) THEN
10501           l_target_start_date := sysdate;
10502           l_target_finish_date := sysdate;
10503         END IF;
10504         --end bug 2634029 changes
10505 
10506         --sharing on
10507         --loop and delete all workplan versions
10508         OPEN sel_all_wp_structure_ver(l_structure_id);
10509         LOOP
10510           FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
10511                                               l_struc_ver_rvn;
10512           EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
10513             PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10514                        p_project_id,
10515                        l_del_struc_ver_id,
10516                        l_return_status,
10517                        l_err_msg_code);
10518             IF (l_return_status <> 'S') THEN
10519               PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10520               x_msg_data := l_err_msg_code;
10521               RAISE FND_API.G_EXC_ERROR;
10522             END IF;
10523 
10524             --get top tasks
10525             OPEN get_top_tasks(l_del_struc_ver_id);
10526             LOOP
10527               FETCH get_top_tasks into l_task_ver_id;
10528               EXIT WHEN get_top_tasks%NOTFOUND;
10529 
10530               PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10531                p_project_id                   => p_project_id
10532               ,p_task_version_id              => l_task_ver_id
10533               ,p_parent_structure_ver_id      => l_del_struc_ver_id
10534               ,x_return_status                => l_return_status
10535               ,x_error_message_code           => l_err_msg_code );
10536 
10537 
10538               IF (l_return_status <> 'S') THEN
10539                 x_return_status := l_return_status;
10540                 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10541                 l_msg_data := l_err_msg_code;
10542                 CLOSE get_top_tasks;
10543                 RAISE FND_API.G_EXC_ERROR;
10544               END IF;
10545             END LOOP;
10546             CLOSE get_top_tasks;
10547 
10548 --          PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10549             PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10550               p_structure_version_id => l_del_struc_ver_id
10551              ,p_record_version_number => l_struc_ver_rvn
10552              ,x_return_status => l_return_status
10553              ,x_msg_count => l_msg_count
10554              ,x_msg_data => l_msg_data
10555           );
10556 
10557 ----end changes
10558 
10559           --Check if there is any error.
10560           l_msg_count := FND_MSG_PUB.count_msg;
10561           IF l_msg_count > 0 THEN
10562             x_msg_count := l_msg_count;
10563             IF x_msg_count = 1 THEN
10564               x_msg_data := l_msg_data;
10565             END IF;
10566             CLOSE sel_all_wp_structure_ver;
10567             RAISE FND_API.G_EXC_ERROR;
10568           END IF;
10569         END LOOP;
10570         CLOSE sel_all_wp_structure_ver;
10571 
10572         --Add structure type to financial
10573         OPEN sel_fin_structure_id;
10574         FETCH sel_fin_structure_id into l_structure_id;
10575         CLOSE sel_fin_structure_id;
10576 
10577         OPEN sel_struc_type_id;
10578         FETCH sel_struc_type_id INTO l_struc_type_id;
10579         CLOSE sel_struc_type_id;
10580 
10581         PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
10582               X_ROWID                  => l_rowid
10583              ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
10584              ,X_PROJ_ELEMENT_ID        => l_structure_id
10585              ,X_STRUCTURE_TYPE_ID      => l_struc_type_id
10586              ,X_RECORD_VERSION_NUMBER  => 1
10587              ,X_ATTRIBUTE_CATEGORY     => NULL
10588              ,X_ATTRIBUTE1             => NULL
10589              ,X_ATTRIBUTE2             => NULL
10590              ,X_ATTRIBUTE3             => NULL
10591              ,X_ATTRIBUTE4             => NULL
10592              ,X_ATTRIBUTE5             => NULL
10593              ,X_ATTRIBUTE6             => NULL
10594              ,X_ATTRIBUTE7             => NULL
10595              ,X_ATTRIBUTE8             => NULL
10596              ,X_ATTRIBUTE9             => NULL
10597              ,X_ATTRIBUTE10            => NULL
10598              ,X_ATTRIBUTE11            => NULL
10599              ,X_ATTRIBUTE12            => NULL
10600              ,X_ATTRIBUTE13            => NULL
10601              ,X_ATTRIBUTE14            => NULL
10602              ,X_ATTRIBUTE15            => NULL
10603         );
10604 
10605         --add proj_wp attr
10606         PA_WORKPLAN_ATTR_PVT.CREATE_PROJ_WORKPLAN_ATTRS(
10607           p_validate_only               => FND_API.G_FALSE
10608          ,p_project_id                   => p_project_id
10609          ,p_proj_element_id              => l_structure_id
10610          ,p_approval_reqd_flag           => l_proj_workplan_attr_rec.WP_APPROVAL_REQD_FLAG
10611          ,p_auto_publish_flag            => l_proj_workplan_attr_rec.WP_AUTO_PUBLISH_FLAG
10612          ,p_approver_source_id           => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_ID
10613          ,p_approver_source_type         => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_TYPE
10614          ,p_default_display_lvl          => l_proj_workplan_attr_rec.WP_DEFAULT_DISPLAY_LVL
10615          ,p_enable_wp_version_flag       => l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG
10616          ,p_auto_pub_upon_creation_flag  => l_proj_workplan_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
10617          ,p_auto_sync_txn_date_flag      => l_proj_workplan_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
10618          ,p_txn_date_sync_buf_days       => l_proj_workplan_attr_rec.TXN_DATE_SYNC_BUF_DAYS
10619 --LDENG
10620          ,p_lifecycle_version_id         => l_proj_workplan_attr_rec.LIFECYCLE_VERSION_ID
10621          ,p_current_phase_version_id     => l_proj_workplan_attr_rec.CURRENT_PHASE_VERSION_ID
10622 --END LDENG
10623          ,x_return_status                => l_return_status
10624          ,x_msg_count                    => l_msg_count
10625          ,x_msg_data                     => l_msg_data
10626         );
10627 
10628         --Check if there is any error.
10629         l_msg_count := FND_MSG_PUB.count_msg;
10630         IF l_msg_count > 0 THEN
10631           x_msg_count := l_msg_count;
10632           IF x_msg_count = 1 THEN
10633             x_msg_data := l_msg_data;
10634           END IF;
10635           RAISE FND_API.G_EXC_ERROR;
10636         END IF;
10637 
10638         --bug 3010538
10639         --copy task weighting basis
10640         PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
10641            p_validate_only       => FND_API.G_FALSE
10642           ,p_project_id          => p_project_id
10643           ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
10644           ,P_OBJECT_ID           => l_structure_id
10645           ,p_PROGRESS_CYCLE_ID   => l_proj_progress_attr_rec.PROGRESS_CYCLE_ID
10646           ,p_wq_enable_flag      => l_proj_progress_attr_rec.wq_enable_flag
10647           ,p_remain_effort_enable_flag => l_proj_progress_attr_rec.remain_effort_enable_flag
10648           ,p_percent_comp_enable_flag => l_proj_progress_attr_rec.percent_comp_enable_flag
10649           ,p_next_progress_update_date => l_proj_progress_attr_rec.next_progress_update_date
10650           ,p_action_set_id       => NULL
10651           ,p_TASK_WEIGHT_BASIS_CODE => l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE
10652           ,x_proj_progress_attr_id => l_proj_prog_attr_id
10653           ,x_return_status       => l_return_status
10654           ,x_msg_count           => x_msg_count
10655           ,x_msg_data            => x_msg_data
10656         );
10657 
10658         --Check if there is any error.
10659         l_msg_count := FND_MSG_PUB.count_msg;
10660         IF l_msg_count > 0 THEN
10661           x_msg_count := l_msg_count;
10662           IF x_msg_count = 1 THEN
10663             x_msg_data := l_msg_data;
10664           END IF;
10665           RAISE FND_API.G_EXC_ERROR;
10666         END IF;
10667 
10668         --Loop schedule version to structure version and task versions
10669         OPEN sel_struc_ver(l_structure_id);
10670         FETCH sel_struc_ver into l_structure_version_id;
10671         CLOSE sel_struc_ver;
10672 
10673         --3035902: process update flag changes
10674         IF (l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE = 'EFFORT') THEN
10675           --set process flag to Y
10676           --get structure version id
10677           PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
10678                                p_project_id => p_project_id,
10679                                p_structure_version_id => l_structure_version_id,
10680                                p_update_wbs_flag => 'Y',
10681                                x_return_status => l_return_status,
10682                                x_msg_count => l_msg_count,
10683                                x_msg_data => l_msg_data
10684                              );
10685           If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
10686             x_msg_count := FND_MSG_PUB.count_msg;
10687             if x_msg_count = 1 then
10688               x_msg_data := l_msg_data;
10689             end if;
10690             raise FND_API.G_EXC_ERROR;
10691           end if;
10692 
10693         END IF;
10694          --3035902: end process update flag changes
10695 
10696 
10697         OPEN sel_struc_and_task_vers(l_structure_version_id);
10698         LOOP
10699           FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
10700           EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
10701 --hsiu: commented for performance enhancement
10702 --          l_start_date := sysdate;
10703 --          l_completion_date := sysdate;
10704 
10705           --If it is lowest task, get dates
10706 --hsiu: commented for performance
10707 --          IF (l_object_type = 'PA_TASKS' AND
10708 --              PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(l_element_version_id) = 'Y') THEN
10709 --            OPEN sel_task_dates(l_task_id);
10710 --            FETCH sel_task_dates into l_start_date, l_completion_date;
10711 --            CLOSE sel_task_dates;
10712 
10713         --  Bug 2790703 Begin
10714             --Add to array for rollup
10715             --l_task_ver_ids.extend;
10716             --l_task_ver_ids(l_task_ver_ids.count) := l_element_version_id;
10717         l_index := l_index + 1;
10718         l_task_ver_ids_tbl(l_index) := l_element_version_id;
10719         --  Bug 2790703 End
10720 
10721 --hsiu: commented for performance
10722 --            IF (l_start_date IS NULL) OR (l_completion_date IS NULL) THEN
10723 --              CLOSE sel_struc_and_task_vers;
10724 --              PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_FIN_TK_DATE_MISS');
10725 --              x_msg_data := 'PA_PS_FIN_TK_DATE_MISS';
10726 --              RAISE FND_API.G_EXC_ERROR;
10727 --hsiu: 2634029
10728 --      Default sysdate or project target dates if transaction dates
10729 --      are missing.
10730 --              l_start_date := l_target_start_date;
10731 --              l_completion_date := l_target_finish_date;
10732 --            END IF;
10733 --          END IF;
10734 
10735           -- anlee
10736           --   Commented out for performance
10737           --   Will use bulk insert into schedule table instead
10738           -- anlee end of comment
10739 
10740         END LOOP;
10741         CLOSE sel_struc_and_task_vers;
10742 
10743         INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
10744           pev_schedule_id,
10745           element_version_id,
10746           project_id,
10747           proj_element_id,
10748           creation_date,
10749           created_by,
10750           last_update_date,
10751           last_updated_by,
10752           scheduled_start_date,
10753           scheduled_finish_date,
10754           milestone_flag,
10755           critical_flag,
10756           calendar_id,
10757           record_version_number,
10758           last_update_login,
10759       source_object_id,
10760       source_object_type
10761       )
10762         SELECT
10763           pa_proj_elem_ver_schedule_s.nextval,
10764           PPEV.element_version_id,
10765           PPEV.project_id,
10766           PPEV.proj_element_id,
10767           SYSDATE,
10768           FND_GLOBAL.USER_ID,
10769           SYSDATE,
10770           FND_GLOBAL.USER_ID,
10771           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', decode(PT.COMPLETION_DATE, NULL, trunc(l_target_start_date), trunc(PT.START_DATE))),
10772           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_target_finish_date))),
10773           'N',
10774           'N',
10775           l_calendar_id,
10776           0,
10777           FND_GLOBAL.LOGIN_ID,
10778       PPEV.project_id,
10779       'PA_PROJECTS'
10780         FROM PA_TASKS PT,
10781              PA_PROJ_ELEMENT_VERSIONS PPEV
10782         WHERE
10783              PPEV.parent_structure_version_id = l_structure_version_id
10784         AND  PPEV.proj_element_id = PT.task_id (+);
10785         -- anlee end of bulk insert
10786 
10787     -- Bug 2790703 Begin
10788       IF (l_task_ver_ids_tbl.count > 0) THEN
10789         --rollup
10790         PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
10791                        p_commit => FND_API.G_FALSE,
10792                        p_element_versions => l_task_ver_ids_tbl,
10793                        x_return_status => l_return_status,
10794                        x_msg_count => l_msg_count,
10795                        x_msg_data => l_msg_data);
10796 
10797     -- Bug 2790703 End
10798 
10799           --Check if there is any error.
10800           l_msg_count := FND_MSG_PUB.count_msg;
10801           IF l_msg_count > 0 THEN
10802             x_msg_count := l_msg_count;
10803             IF x_msg_count = 1 THEN
10804               x_msg_data := l_msg_data;
10805             END IF;
10806             RAISE FND_API.G_EXC_ERROR;
10807           END IF;
10808         END IF;
10809 
10810         --check if project or template; set status
10811         OPEN get_template_flag;
10812         FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
10813         CLOSE get_template_flag;
10814 
10815         --bug 3010538
10816         --set update flag to 'Y' for all working versions (or published
10817         --  if versioning is disabled
10818         IF (l_template_flag = 'Y') THEN
10819           l_status_code := 'STRUCTURE_WORKING';
10820           l_baseline_flag := 'N';
10821           l_latest_eff_pub_flag := 'N';
10822           l_effective_date := NULL;
10823         ELSE
10824           l_status_code := 'STRUCTURE_PUBLISHED';
10825           l_baseline_flag := 'Y';
10826           l_latest_eff_pub_flag := 'Y';
10827           l_effective_date := sysdate;
10828         END IF;
10829 
10830         --Change status
10831         OPEN sel_struc_ver_attr_rvn(l_structure_version_id);
10832         FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
10833                                           l_struc_ver_attr_rvn;
10834         CLOSE sel_struc_ver_attr_rvn;
10835 
10836 --bug 3010538
10837 --added process_update_wbs_flag
10838         UPDATE pa_proj_elem_ver_structure
10839         set status_code = l_status_code,
10840             current_flag = l_baseline_flag,
10841             current_baseline_date = l_effective_date,
10842             current_baseline_person_id = NULL,
10843             latest_eff_published_flag = l_latest_eff_pub_flag,
10844             effective_date = l_effective_date,
10845 --            PROCESS_UPDATE_WBS_FLAG = l_update_proc_wbs_flag,
10846             record_version_number = record_version_number + 1
10847         where pev_structure_id = l_pev_structure_id;
10848 
10849 --bug 2843569
10850         IF (l_status_code = 'STRUCTURE_PUBLISHED') OR
10851            (l_template_flag = 'Y') THEN
10852           OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
10853           FETCH get_scheduled_dates into l_get_sch_dates_cur;
10854           CLOSE get_scheduled_dates;
10855 
10856           PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
10857             p_validate_only        => FND_API.G_FALSE
10858            ,p_project_id           => p_project_id
10859            ,p_date_type            => 'SCHEDULED'
10860            ,p_start_date           => l_get_sch_dates_cur.scheduled_start_date
10861            ,p_finish_date          => l_get_sch_dates_cur.scheduled_finish_date
10862            ,p_record_version_number=> l_proj_rec_ver_num
10863            ,x_return_status        => x_return_status
10864            ,x_msg_count            => x_msg_count
10865            ,x_msg_data             => x_msg_data );
10866 
10867           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10868             RAISE FND_API.G_EXC_ERROR;
10869           END IF;
10870         END IF;
10871 --bug 2843569
10872 
10873         IF (l_baseline_flag = 'Y') THEN
10874           --baseline structure
10875           PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
10876                        p_commit => FND_API.G_FALSE,
10877                        p_structure_version_id => l_structure_version_id,
10878                        x_return_status => l_return_status,
10879                        x_msg_count => l_msg_count,
10880                        x_msg_data => l_msg_data);
10881 
10882           --Check if there is any error.
10883           l_msg_count := FND_MSG_PUB.count_msg;
10884           IF l_msg_count > 0 THEN
10885             x_msg_count := l_msg_count;
10886             IF x_msg_count = 1 THEN
10887               x_msg_data := l_msg_data;
10888             END IF;
10889             RAISE FND_API.G_EXC_ERROR;
10890           END IF;
10891 
10892         END IF;
10893     -- Bug 2758343 -- Added the following call to recalculate the weightings for existing tasks
10894     RECALC_FIN_TASK_WEIGHTS(  p_structure_version_id    => l_structure_version_id
10895                 , p_project_id          => p_project_id
10896                 , x_msg_count           => l_msg_count
10897                 , x_msg_data            => l_msg_data
10898                 , x_return_status       => l_return_status);
10899 
10900     IF  l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10901             raise FND_API.G_EXC_UNEXPECTED_ERROR;
10902     END IF;
10903 
10904         --end sharing on
10905       ELSIF (p_sharing_enabled_flag = 'Y' AND
10906           PA_PROJECT_STRUCTURE_UTILS.CHECK_WORKPLAN_ENABLED(p_project_id) = 'N') THEN
10907         PA_UTILS.ADD_MESSAGE('PA','PA_PS_WP_NOT_EN_SHR_ERR');
10908         x_msg_data := 'PA_PS_WP_NOT_EN_SHR_ERR';
10909         RAISE FND_API.G_EXC_ERROR;
10910       ELSIF (p_sharing_enabled_flag = 'N') THEN
10911         --Validation
10912         PA_PROJECT_STRUCTURE_UTILS.check_sharing_off_ok(p_project_id,
10913                                                         l_ret_stat,
10914                                                         l_err_msg_code);
10915         IF (l_ret_stat = 'N') THEN
10916           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10917           x_msg_data := l_err_msg_code;
10918           RAISE FND_API.G_EXC_ERROR;
10919         END IF;
10920         --sharing off
10921         --Select version to be kept
10922         OPEN sel_latest_pub_ver(l_structure_id);
10923         FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
10924         IF sel_latest_pub_ver%NOTFOUND THEN
10925           l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
10926         END IF;
10927         CLOSE sel_latest_pub_ver;
10928 
10929         --Delete all other structure versions
10930         OPEN sel_other_structure_ver(l_keep_structure_ver_id);
10931         LOOP
10932           FETCH sel_other_structure_ver into l_del_struc_ver_id,
10933                                              l_struc_ver_rvn;
10934           EXIT WHEN sel_other_structure_ver%NOTFOUND;
10935             PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
10936                        p_project_id,
10937                        l_del_struc_ver_id,
10938                        l_return_status,
10939                        l_err_msg_code);
10940             IF (l_return_status <> 'S') THEN
10941               PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10942               x_msg_data := l_err_msg_code;
10943               RAISE FND_API.G_EXC_ERROR;
10944             END IF;
10945 
10946             --get top tasks
10947             OPEN get_top_tasks(l_del_struc_ver_id);
10948             LOOP
10949               FETCH get_top_tasks into l_task_ver_id;
10950               EXIT WHEN get_top_tasks%NOTFOUND;
10951 
10952               PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
10953                p_project_id                   => p_project_id
10954               ,p_task_version_id              => l_task_ver_id
10955               ,p_parent_structure_ver_id      => l_del_struc_ver_id
10956               ,x_return_status                => l_return_status
10957               ,x_error_message_code           => l_err_msg_code );
10958 
10959               IF (l_return_status <> 'S') THEN
10960                 x_return_status := l_return_status;
10961                 PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
10962                 l_msg_data := l_err_msg_code;
10963                 CLOSE get_top_tasks;
10964                 RAISE FND_API.G_EXC_ERROR;
10965               END IF;
10966             END LOOP;
10967             CLOSE get_top_tasks;
10968 
10969 --          PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
10970             PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
10971               p_structure_version_id => l_del_struc_ver_id
10972              ,p_record_version_number => l_struc_ver_rvn
10973              ,x_return_status => l_return_status
10974              ,x_msg_count => l_msg_count
10975              ,x_msg_data => l_msg_data
10976           );
10977 ----end changes
10978 
10979           --Check if there is any error.
10980           l_msg_count := FND_MSG_PUB.count_msg;
10981           IF l_msg_count > 0 THEN
10982             x_msg_count := l_msg_count;
10983             IF x_msg_count = 1 THEN
10984               x_msg_data := l_msg_data;
10985             END IF;
10986             CLOSE sel_other_structure_ver;
10987             RAISE FND_API.G_EXC_ERROR;
10988           END IF;
10989 
10990         END LOOP;
10991         CLOSE sel_other_structure_ver;
10992 
10993         --NULL all baseline dates
10994         UPDATE pa_proj_elements
10995            SET baseline_start_date = NULL,
10996                baseline_finish_date = NULL,
10997                record_version_number = record_version_number+1
10998          WHERE project_id = p_project_id;
10999 
11000         --Delete all schedule rows
11001         DELETE FROM pa_proj_elem_ver_schedule
11002         WHERE project_id = p_project_id;
11003 
11004         --Delete wp attr row
11005         OPEN get_wp_attr_rvn;
11006         FETCH get_wp_attr_rvn into l_structure_id, l_wp_attr_rvn;
11007         CLOSE get_wp_attr_rvn;
11008 
11009         PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
11010             p_validate_only               => FND_API.G_FALSE
11011            ,p_project_id => p_project_id
11012            ,p_proj_element_id => l_structure_id
11013            ,p_record_version_number => l_wp_attr_rvn
11014            ,x_return_status => l_return_status
11015            ,x_msg_count => l_msg_count
11016            ,x_msg_data => l_msg_data
11017         );
11018 
11019         --Check if there is any error.
11020         l_msg_count := FND_MSG_PUB.count_msg;
11021         IF l_msg_count > 0 THEN
11022           x_msg_count := l_msg_count;
11023           IF x_msg_count = 1 THEN
11024             x_msg_data := l_msg_data;
11025           END IF;
11026           RAISE FND_API.G_EXC_ERROR;
11027         END IF;
11028 
11029         PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
11030            p_validate_only       => FND_API.G_FALSE
11031           ,p_project_id          => p_project_id
11032           ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
11033           ,P_OBJECT_ID           => l_structure_id
11034           ,x_return_status       => l_return_status
11035           ,x_msg_count           => x_msg_count
11036           ,x_msg_data            => x_msg_data
11037         );
11038 
11039         --Check if there is any error.
11040         l_msg_count := FND_MSG_PUB.count_msg;
11041         IF l_msg_count > 0 THEN
11042           x_msg_count := l_msg_count;
11043           IF x_msg_count = 1 THEN
11044             x_msg_data := l_msg_data;
11045           END IF;
11046           RAISE FND_API.G_EXC_ERROR;
11047         END IF;
11048 
11049         --Delete structure type
11050         OPEN sel_wp_struct_type(l_structure_id);
11051         FETCH sel_wp_struct_type into l_rowid;
11052         PA_PROJ_STRUCTURE_TYPES_PKG.delete_row(l_rowid);
11053         CLOSE sel_wp_struct_type;
11054 
11055         --Update structure status to published if project;
11056         --  working if template
11057         OPEN get_template_flag;
11058         FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
11059         CLOSE get_template_flag;
11060 
11061         OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
11062         FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
11063                                           l_struc_ver_attr_rvn;
11064         CLOSE sel_struc_ver_attr_rvn;
11065 
11066         IF (l_template_flag = 'Y') THEN
11067           l_status_code := 'STRUCTURE_WORKING';
11068           l_latest_eff_pub_flag := 'N';
11069           l_effective_date := NULL;
11070         ELSE
11071           l_status_code := 'STRUCTURE_PUBLISHED';
11072           l_latest_eff_pub_flag := 'Y';
11073           l_effective_date := sysdate;
11074         END IF;
11075 
11076         --Change status
11077         UPDATE pa_proj_elem_ver_structure
11078         set status_code = l_status_code,
11079             current_flag = 'N',
11080             current_baseline_date = NULL,
11081             current_baseline_person_id = NULL,
11082             latest_eff_published_flag = l_latest_eff_pub_flag,
11083             effective_date = l_effective_date,
11084             record_version_number = record_version_number + 1
11085         where pev_structure_id = l_pev_structure_id;
11086 
11087         --Create structure
11088         --get project name
11089         OPEN get_project_info;
11090         FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date;
11091         CLOSE get_project_info;
11092 
11093         IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
11094           l_proj_completion_date := l_proj_start_date;
11095         ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
11096           l_proj_completion_date := sysdate;
11097           l_proj_start_date := sysdate;
11098         END IF;
11099 
11100         --get suffix
11101         select meaning
11102           into l_suffix
11103           from pa_lookups
11104          where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
11105            and lookup_code = 'WORKPLAN';
11106 
11107         l_name := substrb(l_name||l_append||l_suffix, 1, 240);
11108         --Create new structure
11109         PA_PROJECT_STRUCTURE_PVT1.CREATE_STRUCTURE
11110          ( p_validate_only           => FND_API.G_FALSE
11111           ,p_project_id              => p_project_id
11112           ,p_structure_number        => l_name
11113           ,p_structure_name          => l_name
11114           ,p_calling_flag            => 'WORKPLAN'
11115           ,p_approval_reqd_flag      => l_proj_workplan_attr_rec.WP_APPROVAL_REQD_FLAG
11116           ,p_auto_publish_flag       => l_proj_workplan_attr_rec.WP_AUTO_PUBLISH_FLAG
11117           ,p_approver_source_id      => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_ID
11118           ,p_approver_source_type    => l_proj_workplan_attr_rec.WP_APPROVER_SOURCE_TYPE
11119           ,p_default_display_lvl     => l_proj_workplan_attr_rec.WP_DEFAULT_DISPLAY_LVL
11120           ,p_enable_wp_version_flag  => l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG
11121           ,p_auto_pub_upon_creation_flag => l_proj_workplan_attr_rec.AUTO_PUB_UPON_CREATION_FLAG
11122           ,p_auto_sync_txn_date_flag => l_proj_workplan_attr_rec.AUTO_SYNC_TXN_DATE_FLAG
11123           ,p_txn_date_sync_buf_days  => l_proj_workplan_attr_rec.TXN_DATE_SYNC_BUF_DAYS
11124 --LDENG
11125       ,p_lifecycle_version_id         => l_proj_workplan_attr_rec.LIFECYCLE_VERSION_ID
11126       ,p_current_phase_version_id     => l_proj_workplan_attr_rec.CURRENT_PHASE_VERSION_ID
11127 --END LDENG
11128           ,p_progress_cycle_id => l_proj_progress_attr_rec.PROGRESS_CYCLE_ID
11129           ,p_wq_enable_flag => l_proj_progress_attr_rec.wq_enable_flag
11130           ,p_remain_effort_enable_flag => l_proj_progress_attr_rec.remain_effort_enable_flag
11131           ,p_percent_comp_enable_flag => l_proj_progress_attr_rec.percent_comp_enable_flag
11132           ,p_next_progress_update_date => l_proj_progress_attr_rec.next_progress_update_date
11133           ,p_action_set_id       => NULL
11134           ,p_task_weight_basis_code => l_proj_progress_attr_rec.TASK_WEIGHT_BASIS_CODE
11135           ,x_structure_id            => l_structure_id
11136           ,x_return_status           => l_return_status
11137           ,x_msg_count               => l_msg_count
11138           ,x_msg_data                => l_msg_data );
11139 
11140         --Check if there is any error.
11141         l_msg_count := FND_MSG_PUB.count_msg;
11142         IF l_msg_count > 0 THEN
11143           x_msg_count := l_msg_count;
11144           IF x_msg_count = 1 THEN
11145             x_msg_data := l_msg_data;
11146           END IF;
11147           RAISE FND_API.G_EXC_ERROR;
11148         END IF;
11149 
11150         PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
11151         ( p_validate_only         => FND_API.G_FALSE
11152          ,p_structure_id          => l_structure_id
11153          ,x_structure_version_id  => l_structure_version_id
11154          ,x_return_status         => l_return_status
11155          ,x_msg_count             => l_msg_count
11156          ,x_msg_data              => l_msg_data );
11157 
11158         --Check if there is any error.
11159         l_msg_count := FND_MSG_PUB.count_msg;
11160         IF l_msg_count > 0 THEN
11161           x_msg_count := l_msg_count;
11162           IF x_msg_count = 1 THEN
11163             x_msg_data := l_msg_data;
11164           END IF;
11165           RAISE FND_API.G_EXC_ERROR;
11166         END IF;
11167 
11168         PA_TASK_PUB1.Create_Schedule_Version(
11169           p_element_version_id      => l_structure_version_id
11170          ,p_scheduled_start_date    => l_proj_start_date
11171          ,p_scheduled_end_date      => l_proj_completion_date
11172          ,x_pev_schedule_id         => l_pev_schedule_id
11173          ,x_return_status           => l_return_status
11174          ,x_msg_count               => l_msg_count
11175          ,x_msg_data                => l_msg_data
11176         );
11177 
11178         --Check if there is any error.
11179         l_msg_count := FND_MSG_PUB.count_msg;
11180         IF l_msg_count > 0 THEN
11181           x_msg_count := l_msg_count;
11182           IF x_msg_count = 1 THEN
11183             x_msg_data := l_msg_data;
11184           END IF;
11185           RAISE FND_API.G_EXC_ERROR;
11186         END IF;
11187 
11188         --Check versioning flag, project or template
11189         OPEN get_template_flag;
11190         FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
11191         CLOSE get_template_flag;
11192 
11193         IF (l_template_flag = 'Y') OR
11194            (l_template_flag = 'N' AND l_proj_workplan_attr_rec.WP_ENABLE_VERSION_FLAG = 'Y') THEN
11195           l_status_code := 'STRUCTURE_WORKING';
11196           l_baseline_flag := 'N';
11197           l_latest_eff_pub_flag := 'N';
11198           l_effective_date := NULL;
11199         ELSE
11200           l_status_code := 'STRUCTURE_PUBLISHED';
11201           l_baseline_flag := 'Y';
11202           l_latest_eff_pub_flag := 'Y';
11203           l_effective_date := sysdate;
11204         END IF;
11205 
11206         IF (l_template_flag = 'Y') THEN
11207           --update project dates
11208           OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
11209           FETCH get_scheduled_dates into l_get_sch_dates_cur;
11210           CLOSE get_scheduled_dates;
11211 
11212           PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
11213             p_validate_only        => FND_API.G_FALSE
11214            ,p_project_id           => p_project_id
11215            ,p_date_type            => 'SCHEDULED'
11216            ,p_start_date           => l_get_sch_dates_cur.scheduled_start_date
11217            ,p_finish_date          => l_get_sch_dates_cur.scheduled_finish_date
11218            ,p_record_version_number=> l_proj_rec_ver_num
11219            ,x_return_status        => x_return_status
11220            ,x_msg_count            => x_msg_count
11221            ,x_msg_data             => x_msg_data );
11222 
11223           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11224             RAISE FND_API.G_EXC_ERROR;
11225           END IF;
11226         ELSE
11227           IF (l_status_code = 'STRUCTURE_WORKING') THEN
11228             --clear previously set dates
11229             UPDATE PA_PROJECTS_ALL
11230             SET baseline_start_date          = NULL,
11231                 baseline_finish_date         = NULL,
11232                 baseline_duration            = NULL,
11233                 baseline_as_of_date          = NULL,
11234                 scheduled_start_date         = NULL,
11235                 scheduled_finish_date        = NULL,
11236                 scheduled_duration           = NULL,
11237                 scheduled_as_of_date         = NULL
11238             WHERE Project_id = p_project_id;
11239           END IF;
11240         END IF;
11241 
11242         PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
11243         ( p_validate_only               => FND_API.G_FALSE
11244          ,p_structure_version_id        => l_structure_version_id
11245          ,p_structure_version_name      => l_name
11246          ,p_structure_version_desc      => NULL
11247          ,p_effective_date              => l_effective_date
11248          ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
11249          ,p_locked_status_code          => 'UNLOCKED'
11250          ,p_struct_version_status_code  => l_status_code
11251          ,p_baseline_current_flag       => l_baseline_flag
11252          ,p_baseline_original_flag      => 'N'
11253          ,x_pev_structure_id            => l_pev_structure_id
11254          ,x_return_status               => l_return_status
11255          ,x_msg_count                   => l_msg_count
11256          ,x_msg_data                    => l_msg_data );
11257 
11258         --Check if there is any error.
11259         l_msg_count := FND_MSG_PUB.count_msg;
11260         IF l_msg_count > 0 THEN
11261           x_msg_count := l_msg_count;
11262           IF x_msg_count = 1 THEN
11263             x_msg_data := l_msg_data;
11264           END IF;
11265           RAISE FND_API.G_EXC_ERROR;
11266         END IF;
11267 
11268         --end sharing off
11269       END IF;
11270       --END SHARING CODE
11271     END IF;
11272 */
11273 
11274     x_return_status := FND_API.G_RET_STS_SUCCESS;
11275 
11276     IF (p_debug_mode = 'Y') THEN
11277       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr end');
11278     END IF;
11279 
11280   EXCEPTION
11281     WHEN FND_API.G_EXC_ERROR THEN
11282       IF (p_commit = FND_API.G_TRUE) THEN
11283         ROLLBACK to update_struc_setup_attr_pvt;
11284       END IF;
11285       x_msg_count := FND_MSG_PUB.count_msg;
11286       x_return_status := FND_API.G_RET_STS_ERROR;
11287     WHEN OTHERS THEN
11288       IF (p_commit = FND_API.G_TRUE) THEN
11289         ROLLBACK to update_struc_setup_attr_pvt;
11290       END IF;
11291       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11292       x_msg_count := FND_MSG_PUB.count_msg;
11293       --put message
11294       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
11295                               p_procedure_name => 'update_structures_setup_attr',
11296                               p_error_text     => SUBSTRB(SQLERRM,1,240));
11297       RAISE;
11298   END update_structures_setup_old;
11299 
11300   PROCEDURE update_workplan_versioning
11301   ( p_api_version      IN  NUMBER     := 1.0
11302     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
11303     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
11304     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
11305     ,p_validation_level IN  VARCHAR2   := 100
11306     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
11307     ,p_debug_mode       IN  VARCHAR2   := 'N'
11308     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11309     ,p_proj_element_id  IN  NUMBER
11310     ,p_enable_wp_version_flag IN VARCHAR2
11311     ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11312     ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11313     ,x_msg_data  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11314   )
11315   IS
11316     l_return_status      VARCHAR2(1);
11317     l_msg_count          NUMBER;
11318     l_msg_data           VARCHAR2(250);
11319     l_ret_stat           VARCHAR2(1);
11320     l_err_msg_code       VARCHAR2(30);
11321     l_keep_structure_ver_id NUMBER;
11322     l_template_flag      VARCHAR2(1);
11323     l_pev_structure_id   NUMBER;
11324     l_struc_ver_attr_rvn NUMBER;
11325     l_del_struc_ver_id   NUMBER;
11326     l_struc_ver_rvn      NUMBER;
11327 
11328     --bug 3125813
11329     l_project_id         NUMBER;
11330     l_struc_ver_id       NUMBER;
11331     --end bug 3125813
11332 
11333     cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
11334       select a.element_version_id
11335         from pa_proj_elem_ver_structure a,
11336              pa_proj_elements b
11337        where b.proj_element_id = c_structure_id
11338          and b.project_id = a.project_id
11339          and b.proj_element_id = a.proj_element_id
11340          and a.status_code = 'STRUCTURE_PUBLISHED'
11341          and a.LATEST_EFF_PUBLISHED_FLAG = 'Y';
11342 
11343     CURSOR get_template_flag IS
11344       select a.template_flag
11345         from pa_projects_all a,
11346              pa_proj_elements b
11347        where a.project_id = b.project_id
11348          and b.proj_element_id = p_proj_element_id;
11349 
11350     cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
11351       select a.PEV_STRUCTURE_ID, a.record_version_number
11352         from pa_proj_elem_ver_structure a,
11353              pa_proj_element_versions b
11354        where b.project_id = a.project_id
11355          and b.element_version_id = c_struc_ver_id
11356          and a.element_version_id = b.element_version_id;
11357 
11358     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
11359       select b.element_version_id, b.record_version_number
11360         from pa_proj_element_versions a,
11361              pa_proj_element_versions b
11362        where a.element_version_id = c_keep_struc_ver_id
11363          and a.project_id = b.project_id
11364          and a.proj_element_id = b.proj_element_id
11365          and b.element_version_id <> c_keep_struc_ver_id
11366          and b.object_type = 'PA_STRUCTURES';
11367 
11368     --bug 3125813
11369     cursor sel_one_struc_ver(c_structure_id NUMBER) IS
11370       select b.project_id, b.element_version_id
11371         from pa_proj_elements a,
11372              pa_proj_element_versions b
11373        where a.proj_element_id = c_structure_id
11374          and a.project_id = b.project_id
11375          and a.proj_element_id = b.proj_element_id;
11376     --end bug 3125813
11377 
11378    --bug 4263266
11379    CURSOR cur_chk_tasks(c_project_id NUMBER, c_structure_version_id NUMBER)
11380    IS
11381      SELECT 'x' from pa_proj_element_versions
11382      WHERE project_id = c_project_id
11383        AND parent_structure_version_id = c_structure_version_id
11384        AND object_type = 'PA_TASKS'
11385      ;
11386    l_dummy     VARCHAR2(1);
11387    --end bug 4263266
11388 
11389    --BUG 4330926
11390    l_curr_wp_ver_flag PA_PROJ_WORKPLAN_ATTR.WP_ENABLE_VERSION_FLAG%TYPE;
11391 
11392    CURSOR get_curr_wp_flag (l_proj_element_id NUMBER, l_project_id NUMBER )IS
11393    SELECT WP_ENABLE_VERSION_FLAG
11394    FROM   PA_PROJ_WORKPLAN_ATTR
11395    WHERE  PROJ_ELEMENT_ID = l_proj_element_id
11396    AND    PROJECT_ID = l_project_id;
11397 
11398    --BUG 4330926
11399 
11400    --bug 4546607
11401    CURSOR sub_projects ( c_project_id NUMBER, c_relationship_type VARCHAR2)
11402    IS
11403         SELECT *
11404           from pa_structures_links_v
11405         where parent_project_id= c_project_id
11406           and relationship_type = c_relationship_type
11407           ;
11408    --end bug 4546607
11409 
11410   BEGIN
11411     IF (p_debug_mode = 'Y') THEN
11412       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_workplan_versioning');
11413     END IF;
11414 
11415     IF (p_commit = FND_API.G_TRUE) THEN
11416       savepoint update_wp_versioning_pvt;
11417     END IF;
11418 
11419     IF (p_debug_mode = 'Y') THEN
11420       pa_debug.debug('Performing validations');
11421     END IF;
11422 
11423     IF (p_enable_wp_version_flag = 'Y') THEN
11424       --enable versioning
11425       PA_PROJECT_STRUCTURE_UTILS.check_versioning_on_ok(
11426         p_proj_element_id
11427        ,l_ret_stat
11428        ,l_err_msg_code);
11429        IF (l_ret_stat = 'N') THEN
11430           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
11431           x_msg_data := l_err_msg_code;
11432           RAISE FND_API.G_EXC_ERROR;
11433        END IF;
11434        --enable versioning
11435        --do not need to do anything
11436 
11437        --bug 3125813
11438        --need to update weightings (if necessary) when enable versiong because
11439        --structure will become published.
11440        OPEN sel_one_struc_ver(p_proj_element_id);
11441        FETCH sel_one_struc_ver into l_project_id, l_struc_ver_id;
11442        CLOSE sel_one_struc_ver;
11443 
11444 --bug 4546607
11445        --Delete all LW links without checking bcoz versioning is always allowed
11446        --for workplan.
11447        FOR sub_projects_rec in sub_projects(l_project_id, 'LW') LOOP
11448            IF PA_PROJECT_STRUCTURE_UTILS.Check_Struc_Ver_Published(sub_projects_rec.sub_project_id, sub_projects_rec.sub_structure_ver_id) = 'N'
11449            THEN
11450                PA_RELATIONSHIP_PUB.Delete_SubProject_Association(
11451                                         p_object_relationships_id => sub_projects_rec.object_relationship_id,
11452                                         p_record_version_number   => sub_projects_rec.record_version_number,
11453                                         x_return_status => l_return_status,
11454                                         x_msg_count => l_msg_count,
11455                                         x_msg_data => l_msg_data
11456                                         );
11457                --Check if there is any error.
11458                l_msg_count := FND_MSG_PUB.count_msg;
11459                IF l_msg_count > 0 THEN
11460                    x_msg_count := l_msg_count;
11461                  IF x_msg_count = 1 THEN
11462                     x_msg_data := l_msg_data;
11463                  END IF;
11464                  RAISE FND_API.G_EXC_ERROR;
11465               END IF;
11466            END IF;
11467        END LOOP;
11468 --end bug 4546607
11469 
11470        --bug 4263266
11471        --call process wbs updates only if there is atleast one task.
11472       OPEN cur_chk_tasks(l_project_id,l_struc_ver_id);
11473       FETCH cur_chk_tasks INTO l_dummy;
11474       IF cur_chk_tasks%FOUND
11475       THEN
11476        --end bug 4263266
11477        PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP(
11478          p_project_id => l_project_id,
11479          p_structure_version_id => l_struc_ver_id,
11480          x_return_status => l_return_status,
11481          x_msg_count => l_msg_count,
11482          x_msg_data => l_msg_data
11483        );
11484 
11485        --Check if there is any error.
11486        l_msg_count := FND_MSG_PUB.count_msg;
11487        IF l_msg_count > 0 THEN
11488          x_msg_count := l_msg_count;
11489          IF x_msg_count = 1 THEN
11490            x_msg_data := l_msg_data;
11491          END IF;
11492 --         CLOSE sel_other_structure_ver;      --Bug 3793128
11493          RAISE FND_API.G_EXC_ERROR;
11494        END IF;
11495        --end bug 3125813
11496       --bug 4263266
11497       END IF; --if cur_chk_tasks%FOUND
11498       CLOSE cur_chk_tasks;
11499       --end bug 4263266
11500 
11501       --Added by rtarway for BUG 4330926
11502       OPEN  get_template_flag;
11503       FETCH get_template_flag into l_template_flag;
11504       CLOSE get_template_flag;
11505 
11506       OPEN  get_curr_wp_flag(p_proj_element_id ,l_project_id);
11507       FETCH get_curr_wp_flag into l_curr_wp_ver_flag;
11508       CLOSE get_curr_wp_flag;
11509 
11510       IF ( l_curr_wp_ver_flag ='N' AND l_template_flag = 'N'   ) THEN
11511         UPDATE pa_proj_elem_ver_structure
11512         SET    current_working_flag = 'N'
11513         WHERE  element_version_id = l_struc_ver_id
11514         and    project_id = l_project_id;
11515       END IF;
11516       --End Added by rtarway for BUG 4330926
11517 
11518        --end enable versioning
11519     ELSIF (p_enable_wp_version_flag = 'N') THEN
11520       --disable versioning
11521       PA_PROJECT_STRUCTURE_UTILS.check_versioning_off_ok(
11522         p_proj_element_id
11523        ,l_ret_stat
11524        ,l_err_msg_code);
11525       IF (l_ret_stat = 'N') THEN
11526          PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
11527          x_msg_data := l_err_msg_code;
11528          RAISE FND_API.G_EXC_ERROR;
11529       END IF;
11530       --disable versioning
11531       --Applies to project only
11532       OPEN get_template_flag;
11533       FETCH get_template_flag into l_template_flag;
11534       CLOSE get_template_flag;
11535 
11536       IF (l_template_flag = 'N') THEN
11537         --Select version to be kept
11538         OPEN sel_latest_pub_ver(p_proj_element_id);
11539         FETCH sel_latest_pub_ver into l_keep_structure_ver_id;
11540         IF sel_latest_pub_ver%NOTFOUND THEN
11541           l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(p_proj_element_id);
11542         END IF;
11543         CLOSE sel_latest_pub_ver;
11544 
11545         --Delete all versions except the keep version
11546         OPEN sel_other_structure_ver(l_keep_structure_ver_id);
11547         LOOP
11548           FETCH sel_other_structure_ver into l_del_struc_ver_id,
11549                                              l_struc_ver_rvn;
11550           EXIT WHEN sel_other_structure_ver%NOTFOUND;
11551           PA_PROJECT_STRUCTURE_PUB1.Delete_Structure_Version(
11552               p_structure_version_id => l_del_struc_ver_id
11553              ,p_record_version_number => l_struc_ver_rvn
11554 	     ,p_calling_from => 'DEL_WP_STRUC_DISABLE_VERSION' ---Added for bug 6023347
11555              ,x_return_status => l_return_status
11556              ,x_msg_count => l_msg_count
11557              ,x_msg_data => l_msg_data
11558           );
11559 
11560           --Check if there is any error.
11561           l_msg_count := FND_MSG_PUB.count_msg;
11562           IF l_msg_count > 0 THEN
11563             x_msg_count := l_msg_count;
11564             IF x_msg_count = 1 THEN
11565               x_msg_data := l_msg_data;
11566             END IF;
11567             CLOSE sel_other_structure_ver;
11568             RAISE FND_API.G_EXC_ERROR;
11569           END IF;
11570 
11571         END LOOP;
11572         CLOSE sel_other_structure_ver;
11573 
11574         --Change status
11575         OPEN sel_struc_ver_attr_rvn(l_keep_structure_ver_id);
11576         FETCH sel_struc_ver_attr_rvn into l_pev_structure_id,
11577                                           l_struc_ver_attr_rvn;
11578         CLOSE sel_struc_ver_attr_rvn;
11579 
11580         --set status to latest published and baselined
11581 
11582         UPDATE pa_proj_elem_ver_structure
11583         set status_code = 'STRUCTURE_PUBLISHED',
11584             published_date = sysdate,
11585             current_flag = 'Y',
11586             current_baseline_date = sysdate,
11587             current_baseline_person_id = NULL,
11588             latest_eff_published_flag = 'Y',
11589             effective_date = sysdate,
11590             LOCK_STATUS_CODE = 'UNLOCKED',
11591             LOCKED_BY_PERSON_ID = NULL,
11592             LOCKED_DATE = NULL,
11593             record_version_number = record_version_number + 1
11594         where pev_structure_id = l_pev_structure_id;
11595 
11596         --baseline structure
11597         PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION(
11598                        p_commit => FND_API.G_FALSE,
11599                        p_structure_version_id => l_keep_structure_ver_id,
11600                        x_return_status => l_return_status,
11601                        x_msg_count => l_msg_count,
11602                        x_msg_data => l_msg_data);
11603 
11604         --Check if there is any error.
11605         l_msg_count := FND_MSG_PUB.count_msg;
11606         IF l_msg_count > 0 THEN
11607           x_msg_count := l_msg_count;
11608           IF x_msg_count = 1 THEN
11609             x_msg_data := l_msg_data;
11610           END IF;
11611           RAISE FND_API.G_EXC_ERROR;
11612         END IF;
11613 
11614        END IF; --for project
11615 
11616        --end disable versioning
11617     END IF;
11618 
11619     x_return_status := FND_API.G_RET_STS_SUCCESS;
11620 
11621     IF (p_debug_mode = 'Y') THEN
11622       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_workplan_versioning end');
11623     END IF;
11624 
11625   EXCEPTION
11626     WHEN FND_API.G_EXC_ERROR THEN
11627       IF (p_commit = FND_API.G_TRUE) THEN
11628         ROLLBACK to update_wp_versioning_pvt;
11629       END IF;
11630       x_msg_count := FND_MSG_PUB.count_msg;
11631       x_return_status := FND_API.G_RET_STS_ERROR;
11632     WHEN OTHERS THEN
11633       IF (p_commit = FND_API.G_TRUE) THEN
11634         ROLLBACK to update_wp_versioning_pvt;
11635       END IF;
11636       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11637       x_msg_count := FND_MSG_PUB.count_msg;
11638       --put message
11639       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
11640                               p_procedure_name => 'update_workplan_versioning',
11641                               p_error_text     => SUBSTRB(SQLERRM,1,240));
11642       RAISE;
11643   END update_workplan_versioning;
11644 
11645 
11646   PROCEDURE update_wp_calendar
11647   (
11648      p_api_version      IN  NUMBER     := 1.0
11649     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
11650     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
11651     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
11652     ,p_validation_level IN  VARCHAR2   := 100
11653     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
11654     ,p_debug_mode       IN  VARCHAR2   := 'N'
11655     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11656     ,p_project_id       IN  NUMBER
11657     ,p_calendar_id      IN  NUMBER
11658     ,x_return_status    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11659     ,x_msg_count        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11660     ,x_msg_data         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11661   )
11662   IS
11663     l_opt                     VARCHAR2(1);
11664 
11665     cursor get_wp_versions IS
11666       select ppevs.element_version_id
11667         from pa_proj_elem_ver_structure ppevs,
11668              pa_proj_elements ppe,
11669              pa_proj_structure_types ppst,
11670              pa_structure_types pst
11671        where ppevs.status_code <> 'STRUCTURE_PUBLISHED'
11672          and ppevs.project_id = ppe.project_id
11673          and ppevs.proj_element_id = ppe.proj_element_id
11674          and ppe.object_type = 'PA_STRUCTURES'
11675          and ppe.proj_element_id = ppst.proj_element_id
11676          and ppst.structure_type_id = pst.structure_type_id
11677          and pst.structure_type_class_code = 'WORKPLAN'
11678          and ppe.project_id = p_project_id
11679          and '1' = l_opt
11680       union all
11681       select ppevs.element_version_id
11682         from pa_proj_elem_ver_structure ppevs,
11683              pa_proj_elements ppe,
11684              pa_proj_structure_types ppst,
11685              pa_structure_types pst
11686        where ppevs.status_code = 'STRUCTURE_PUBLISHED'
11687          and ppevs.project_id = ppe.project_id
11688          and ppevs.proj_element_id = ppe.proj_element_id
11689          and ppe.object_type = 'PA_STRUCTURES'
11690          and ppe.proj_element_id = ppst.proj_element_id
11691          and ppst.structure_type_id = pst.structure_type_id
11692          and pst.structure_type_class_code = 'WORKPLAN'
11693          and ppe.project_id = p_project_id
11694          and '2' = l_opt;
11695 
11696     l_structure_version_id    NUMBER;
11697     l_return_status           VARCHAR2(1);
11698     l_msg_count               NUMBER;
11699     l_msg_data                VARCHAR2(250);
11700     l_sch_hours                   NUMBER;
11701     l_bsl_hours                   NUMBER;
11702     l_act_hours                   NUMBER;
11703     l_days                    NUMBER;
11704     l_start_date              DATE;
11705     l_finish_date             DATE;
11706     l_template_flag           VARCHAR2(1);
11707 
11708     --Bug 3010538.
11709     l_weight_basis            pa_proj_progress_attr.task_weight_basis_code%TYPE;
11710 
11711     CURSOR c1 IS
11712       select template_flag
11713         from pa_projects_all where project_id = p_project_id;
11714 
11715     CURSOR c2 IS
11716       select SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE
11717         from pa_projects_all where project_id = p_project_id;
11718 
11719     CURSOR c3 IS
11720       select ACTUAL_START_DATE, ACTUAL_FINISH_DATE
11721         from pa_projects_all where project_id = p_project_id;
11722 
11723     CURSOR c4 IS
11724       select BASELINE_START_DATE, BASELINE_FINISH_DATE
11725         from pa_projects_all where project_id = p_project_id;
11726 --
11727     l_sch_dur   NUMBER;          -- Bug 3657808
11728     l_act_dur   NUMBER;          -- Bug 3657808
11729     l_bsl_dur   NUMBER;          -- Bug 3657808
11730 --
11731   BEGIN
11732     IF (p_debug_mode = 'Y') THEN
11733       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_WP_CALENDAR BEGIN');
11734     END IF;
11735 
11736     IF (p_commit = FND_API.G_TRUE) THEN
11737       savepoint update_wp_calendar;
11738     END IF;
11739 
11740     OPEN c1;
11741     FETCH c1 into l_template_flag;
11742     CLOSE c1;
11743 
11744     IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id) = 'N') THEN
11745       -- Bug 3010538. Task Weighting enhancement.
11746       -- For a template even if the versioning flag is enabled, we will have only a
11747       -- working version and not a published version. Hence setting the option to 1 always
11748       -- in case of a template so that the working version is queried.
11749       IF nvl(l_template_flag,'N') = 'Y' THEN
11750         l_opt := '1';
11751       ELSE
11752         l_opt := '2';
11753       END IF;
11754       --need to modify
11755       --SCHEDULED_DURATION (template and project)
11756       --BASELINE_DURATION (project only)
11757       --ACTUAL_DURATION   (project only)
11758       OPEN c2;
11759       FETCH c2 into l_start_date, l_finish_date;
11760       CLOSE c2;
11761 
11762       IF (l_start_date IS NOT NULL AND
11763           l_finish_date IS NOT NULL) THEN
11764          -- Bug 3657808 Remove duration calculation using calendar
11765      --Storing in days
11766           l_sch_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11767         /*PA_DURATION_UTILS.get_duration(
11768           p_calendar_id => p_calendar_id
11769          ,p_start_date => l_start_date
11770          ,p_end_date => l_finish_date
11771          ,x_duration_days => l_days
11772          ,x_duration_hours => l_sch_hours
11773          ,x_return_status => l_return_status
11774          ,x_msg_count => l_msg_count
11775          ,x_msg_data => l_msg_data
11776         );
11777 
11778         If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11779           x_msg_count := FND_MSG_PUB.count_msg;
11780           if x_msg_count = 1 then
11781             x_msg_data := l_msg_data;
11782           end if;
11783           raise FND_API.G_EXC_ERROR;
11784         END IF;*/
11785 
11786       END IF;
11787 
11788       IF (l_template_flag = 'N') THEN
11789         OPEN c3;
11790         FETCH c3 into l_start_date, l_finish_date;
11791         CLOSE c3;
11792 
11793         IF (l_start_date IS NOT NULL AND
11794             l_finish_date IS NOT NULL) THEN
11795          -- Bug 3657808 Remove duration calculation using calendar
11796      --Storing in days
11797           l_act_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11798           /*PA_DURATION_UTILS.get_duration(
11799             p_calendar_id => p_calendar_id
11800            ,p_start_date => l_start_date
11801            ,p_end_date => l_finish_date
11802            ,x_duration_days => l_days
11803            ,x_duration_hours => l_act_hours
11804            ,x_return_status => l_return_status
11805            ,x_msg_count => l_msg_count
11806            ,x_msg_data => l_msg_data
11807           );
11808 
11809          If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11810             x_msg_count := FND_MSG_PUB.count_msg;
11811             if x_msg_count = 1 then
11812               x_msg_data := l_msg_data;
11813             end if;
11814             raise FND_API.G_EXC_ERROR;
11815           END IF;*/
11816         END IF;
11817 
11818 
11819         OPEN c4;
11820         FETCH c4 into l_start_date, l_finish_date;
11821         CLOSE c4;
11822 
11823         IF (l_start_date IS NOT NULL AND
11824             l_finish_date IS NOT NULL) THEN
11825          -- Bug 3657808 Remove duration calculation using calendar
11826      --Storing in days
11827           l_bsl_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11828           /*PA_DURATION_UTILS.get_duration(
11829             p_calendar_id => p_calendar_id
11830            ,p_start_date => l_start_date
11831            ,p_end_date => l_finish_date
11832            ,x_duration_days => l_days
11833            ,x_duration_hours => l_bsl_hours
11834            ,x_return_status => l_return_status
11835            ,x_msg_count => l_msg_count
11836            ,x_msg_data => l_msg_data
11837           );
11838 
11839          If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11840             x_msg_count := FND_MSG_PUB.count_msg;
11841             if x_msg_count = 1 then
11842               x_msg_data := l_msg_data;
11843             end if;
11844             raise FND_API.G_EXC_ERROR;
11845           END IF;*/
11846         END IF;
11847 
11848 --hsiu: removed record version number for Forms changes
11849         update pa_projects_all
11850            /*set SCHEDULED_DURATION = l_sch_hours,
11851                BASELINE_DURATION = l_bsl_hours,
11852                ACTUAL_DURATION = l_act_hours*/
11853            set SCHEDULED_DURATION = l_sch_dur,
11854                BASELINE_DURATION = l_bsl_dur,
11855                ACTUAL_DURATION = l_act_dur
11856          where project_id = p_project_id;
11857 
11858       END IF;
11859     ELSE
11860       l_opt := '1';
11861 
11862       IF (l_template_flag =  'Y') THEN
11863         OPEN c2;
11864         FETCH c2 into l_start_date, l_finish_date;
11865         CLOSE c2;
11866 
11867         IF (l_start_date IS NOT NULL AND
11868             l_finish_date IS NOT NULL) THEN
11869          -- Bug 3657808 Remove duration calculation using calendar
11870      --Storing in days
11871           l_sch_dur:=trunc(l_finish_date) - trunc(l_start_date) + 1;
11872           /*PA_DURATION_UTILS.get_duration(
11873             p_calendar_id => p_calendar_id
11874            ,p_start_date => l_start_date
11875            ,p_end_date => l_finish_date
11876            ,x_duration_days => l_days
11877            ,x_duration_hours => l_sch_hours
11878            ,x_return_status => l_return_status
11879            ,x_msg_count => l_msg_count
11880            ,x_msg_data => l_msg_data
11881           );
11882 
11883          If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11884             x_msg_count := FND_MSG_PUB.count_msg;
11885             if x_msg_count = 1 then
11886               x_msg_data := l_msg_data;
11887             end if;
11888             raise FND_API.G_EXC_ERROR;
11889           END IF;*/
11890         END IF;
11891 
11892 --hsiu: removed record version number for Forms changes
11893         update pa_projects_all
11894           -- set SCHEDULED_DURATION = l_sch_hours
11895            set SCHEDULED_DURATION = l_sch_dur
11896          where project_id = p_project_id;
11897 
11898       END IF;
11899     END IF;
11900 
11901     -- Bug 3010538. Task Weighting enhancement.
11902     -- Obtain the task weighting basis for the project.
11903     l_weight_basis  := pa_progress_utils.get_task_weighting_basis(p_project_id => p_project_id);
11904 
11905 --get all working versions
11906     OPEN get_wp_versions;
11907     LOOP
11908       FETCH get_wp_versions into l_structure_version_id;
11909       EXIT WHEN get_wp_versions%NOTFOUND;
11910 
11911       -- Bug 3010538. Task Weighting enhancement.
11912       -- The weightage needs to be recalculated for the structure version(s), if the task
11913       -- weighting basis is DURATION. Recalculation has to be done for the only version(that
11914       -- is published) if versioning is disabled and for all the non published versions when
11915       -- versioning is enabled in case of a project and for the working version in case of a
11916       -- template.
11917       IF l_weight_basis = 'DURATION' THEN
11918           -- Always call this API as the cursor would have taken care to select the appropriate
11919           -- structure version for processing.
11920                pa_proj_task_struc_pub.set_update_wbs_flag(
11921                      p_project_id            => p_project_id
11922                     ,p_structure_version_id  => l_structure_version_id
11923                     ,x_return_status         => l_return_status
11924                     ,x_msg_count             => l_msg_count
11925                     ,x_msg_data              => l_msg_data
11926                );
11927 
11928                 If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11929                   x_msg_count := FND_MSG_PUB.count_msg;
11930                   if x_msg_count = 1 then
11931                     x_msg_data := l_msg_data;
11932                   end if;
11933                   raise FND_API.G_EXC_ERROR;
11934                 END IF;
11935       END IF;
11936 
11937       PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION(
11938          p_structure_version_id => l_structure_version_id
11939         ,p_calendar_id          => p_calendar_id
11940         ,x_return_status        => l_return_status
11941         ,x_msg_count            => l_msg_count
11942         ,x_msg_data             => l_msg_data
11943       );
11944 
11945       If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
11946         x_msg_count := FND_MSG_PUB.count_msg;
11947         if x_msg_count = 1 then
11948           x_msg_data := l_msg_data;
11949         end if;
11950         raise FND_API.G_EXC_ERROR;
11951       END IF;
11952 
11953 --update duration for all working structure versions
11954     END LOOP;
11955     CLOSE get_wp_versions;
11956 
11957     x_return_status := FND_API.G_RET_STS_SUCCESS;
11958 
11959     IF (p_debug_mode = 'Y') THEN
11960       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_WP_CALENDAR end');
11961     END IF;
11962 
11963   EXCEPTION
11964     WHEN FND_API.G_EXC_ERROR THEN
11965       IF (p_commit = FND_API.G_TRUE) THEN
11966         ROLLBACK to update_wp_calendar;
11967       END IF;
11968       x_msg_count := FND_MSG_PUB.count_msg;
11969       x_return_status := FND_API.G_RET_STS_ERROR;
11970     WHEN OTHERS THEN
11971       IF (p_commit = FND_API.G_TRUE) THEN
11972         ROLLBACK to update_wp_calendar;
11973       END IF;
11974       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11975       x_msg_count := FND_MSG_PUB.count_msg;
11976       --put message
11977       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
11978                               p_procedure_name => 'Update_wp_calendar',
11979                               p_error_text     => SUBSTRB(SQLERRM,1,240));
11980       RAISE;
11981   END update_wp_calendar;
11982 
11983   PROCEDURE update_all_wp_calendar
11984   (
11985      p_api_version      IN  NUMBER     := 1.0
11986     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
11987     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
11988     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
11989     ,p_validation_level IN  VARCHAR2   := 100
11990     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
11991     ,p_debug_mode       IN  VARCHAR2   := 'N'
11992     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11993     ,p_calendar_id      IN  NUMBER
11994     ,x_return_status    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11995     ,x_msg_count        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
11996     ,x_msg_data         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
11997   )
11998   is
11999     Cursor c_calendar_projects
12000     IS
12001     Select project_id
12002     from pa_projects_all
12003     where calendar_id = p_calendar_id;
12004   BEGIN
12005     IF (p_debug_mode = 'Y') THEN
12006       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_ALL_WP_CALENDAR BEGIN');
12007     END IF;
12008 
12009     IF (p_commit = FND_API.G_TRUE) THEN
12010       savepoint update_all_wp_calendar;
12011     END IF;
12012 
12013     FOR c_rec IN c_calendar_projects
12014     LOOP
12015         PA_PROJECT_STRUCTURE_PVT1.update_wp_calendar
12016                (
12017                 p_api_version       => p_api_version
12018                 ,p_init_msg_list    => p_init_msg_list
12019                 ,p_commit           => p_commit
12020                 ,p_validate_only    => p_validate_only
12021                 ,p_validation_level => p_validation_level
12022                 ,p_calling_module   => p_calling_module
12023                 ,p_debug_mode       => p_debug_mode
12024                 ,p_max_msg_count    => p_max_msg_count
12025                 ,p_project_id       => c_rec.project_id
12026                 ,p_calendar_id      => p_calendar_id
12027                 ,x_return_status    => x_return_status
12028                 ,x_msg_count        => x_msg_count
12029                 ,x_msg_data         => x_msg_data
12030                 );
12031    END LOOP;
12032    x_return_status := FND_API.G_RET_STS_SUCCESS;
12033 
12034     IF (p_debug_mode = 'Y') THEN
12035       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.UPDATE_ALL_WP_CALENDAR END');
12036     END IF;
12037 
12038   EXCEPTION
12039       WHEN OTHERS THEN
12040         IF (p_commit = FND_API.G_TRUE) THEN
12041           ROLLBACK to update_all_wp_calendar;
12042         END IF;
12043         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12044         x_msg_count := FND_MSG_PUB.count_msg;
12045         --put message
12046         fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
12047                               p_procedure_name => 'Update_all_wp_calendar',
12048                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12049       RAISE;
12050   END UPDATE_ALL_WP_CALENDAR;
12051 
12052 
12053   PROCEDURE RECALC_STRUC_VER_DURATION(
12054      p_api_version      IN  NUMBER     := 1.0
12055     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
12056     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
12057     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
12058     ,p_validation_level IN  VARCHAR2   := 100
12059     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
12060     ,p_debug_mode       IN  VARCHAR2   := 'N'
12061     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12062     ,p_structure_version_id IN NUMBER
12063     ,p_calendar_id      IN  NUMBER
12064     ,x_return_status    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12065     ,x_msg_count        OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12066     ,x_msg_data         OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12067   )
12068   IS
12069     CURSOR get_dates IS
12070       select ppvsch.pev_schedule_id,
12071              ppvsch.scheduled_start_date, ppvsch.scheduled_finish_date,
12072              ppvsch.estimated_start_date, ppvsch.estimated_finish_date,
12073              ppvsch.actual_start_date, ppvsch.actual_finish_date
12074         from pa_proj_elem_ver_schedule ppvsch,
12075              pa_proj_element_versions ppv
12076        where ppv.parent_structure_version_id = p_structure_version_id
12077          and ppv.project_id = ppvsch.project_id
12078          and ppv.proj_element_id = ppvsch.proj_element_id
12079          and ppv.element_version_id = ppvsch.element_version_id;
12080 
12081     l_pev_schedule_id       NUMBER;
12082     l_days                  NUMBER;
12083     l_hours                 NUMBER;
12084     l_scheduled_start_date  DATE;
12085     l_scheduled_finish_date DATE;
12086     l_estimated_start_date  DATE;
12087     l_estimated_finish_date DATE;
12088     l_actual_start_date     DATE;
12089     l_actual_finish_date    DATE;
12090 
12091     l_return_status         VARCHAR2(1);
12092     l_msg_count             NUMBER;
12093     l_msg_data              VARCHAR2(250);
12094     l_act_days              NUMBER;                -- Bug 3657808
12095     l_sch_days              NUMBER;                -- Bug 3657808
12096     l_est_days              NUMBER;                -- Bug 3657808
12097   BEGIN
12098 
12099     IF (p_debug_mode = 'Y') THEN
12100       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION BEGIN');
12101     END IF;
12102 
12103     IF (p_commit = FND_API.G_TRUE) THEN
12104       savepoint RECALC_STRUC_VER_DURATION;
12105     END IF;
12106 
12107     OPEN get_dates;
12108     LOOP
12109       FETCH get_dates INTO l_pev_schedule_id,
12110                            l_scheduled_start_date,
12111                            l_scheduled_finish_date,
12112                            l_estimated_start_date,
12113                            l_estimated_finish_date,
12114                            l_actual_start_date,
12115                            l_actual_finish_date;
12116       EXIT WHEN get_dates%NOTFOUND;
12117 
12118 --Update calendar id
12119       UPDATE PA_PROJ_ELEM_VER_SCHEDULE
12120          SET calendar_id = p_calendar_id
12121        WHERE pev_schedule_id = l_pev_schedule_id;
12122 
12123 --Update schedule dates
12124       IF (l_scheduled_start_date IS NOT NULL AND
12125           l_scheduled_finish_date IS NOT NULL) THEN
12126         -- Bug 3657808 Remove duration calculation using calendar
12127         --Storing in days
12128         l_sch_days:=trunc(l_scheduled_finish_date) - trunc(l_scheduled_start_date) + 1;
12129         /*PA_DURATION_UTILS.get_duration(
12130           p_calendar_id => p_calendar_id
12131          ,p_start_date => l_scheduled_start_date
12132          ,p_end_date => l_scheduled_finish_date
12133          ,x_duration_days => l_days
12134          ,x_duration_hours => l_hours
12135          ,x_return_status => l_return_status
12136          ,x_msg_count => l_msg_count
12137          ,x_msg_data => l_msg_data
12138         );
12139 
12140         If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12141           x_msg_count := FND_MSG_PUB.count_msg;
12142           if x_msg_count = 1 then
12143             x_msg_data := l_msg_data;
12144           end if;
12145           raise FND_API.G_EXC_ERROR;
12146         END IF;*/
12147 
12148         UPDATE PA_PROJ_ELEM_VER_SCHEDULE
12149            --SET DURATION = l_hours
12150            SET DURATION = l_sch_days
12151          WHERE pev_schedule_id = l_pev_schedule_id;
12152       END IF;
12153 
12154 --Update estimated dates
12155       IF (l_estimated_start_date IS NOT NULL AND
12156           l_estimated_finish_date IS NOT NULL) THEN
12157         -- Bug 3657808 Remove duration calculation using calendar
12158         --Storing in days
12159     /* Commented call to API for 4210634 - It was missed during code fix for bug 3657808 */
12160         l_est_days:=trunc(l_estimated_finish_date) - trunc(l_estimated_start_date) + 1;
12161         /* PA_DURATION_UTILS.get_duration(
12162           p_calendar_id => p_calendar_id
12163          ,p_start_date => l_estimated_start_date
12164          ,p_end_date => l_estimated_finish_date
12165          ,x_duration_days => l_days
12166          ,x_duration_hours => l_hours
12167          ,x_return_status => l_return_status
12168          ,x_msg_count => l_msg_count
12169          ,x_msg_data => l_msg_data
12170         );
12171 
12172         If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12173           x_msg_count := FND_MSG_PUB.count_msg;
12174           if x_msg_count = 1 then
12175             x_msg_data := l_msg_data;
12176           end if;
12177           raise FND_API.G_EXC_ERROR;
12178         END IF; */
12179 
12180         UPDATE PA_PROJ_ELEM_VER_SCHEDULE
12181            --SET ESTIMATED_DURATION = l_hours
12182            SET ESTIMATED_DURATION = l_est_days
12183          WHERE pev_schedule_id = l_pev_schedule_id;
12184       END IF;
12185 
12186 --Update actual dates
12187       IF (l_actual_start_date IS NOT NULL AND
12188           l_actual_finish_date IS NOT NULL) THEN
12189         -- Bug 3657808 Remove duration calculation using calendar
12190         --Storing in days
12191         l_act_days:=trunc(l_actual_finish_date) - trunc(l_actual_start_date) + 1;
12192         /*PA_DURATION_UTILS.get_duration(
12193           p_calendar_id => p_calendar_id
12194          ,p_start_date => l_actual_start_date
12195          ,p_end_date => l_actual_finish_date
12196          ,x_duration_days => l_days
12197          ,x_duration_hours => l_hours
12198          ,x_return_status => l_return_status
12199          ,x_msg_count => l_msg_count
12200          ,x_msg_data => l_msg_data
12201         );
12202 
12203         If (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
12204           x_msg_count := FND_MSG_PUB.count_msg;
12205           if x_msg_count = 1 then
12206             x_msg_data := l_msg_data;
12207           end if;
12208           raise FND_API.G_EXC_ERROR;
12209         END IF;*/
12210 
12211         UPDATE PA_PROJ_ELEM_VER_SCHEDULE
12212 --           SET ACTUAL_DURATION = l_hours
12213            SET ACTUAL_DURATION = l_act_days
12214          WHERE pev_schedule_id = l_pev_schedule_id;
12215       END IF;
12216 
12217     END LOOP;
12218     CLOSE get_dates;
12219 
12220     IF (p_debug_mode = 'Y') THEN
12221       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.RECALC_STRUC_VER_DURATION end');
12222     END IF;
12223 
12224   EXCEPTION
12225     WHEN FND_API.G_EXC_ERROR THEN
12226       IF (p_commit = FND_API.G_TRUE) THEN
12227         ROLLBACK to RECALC_STRUC_VER_DURATION;
12228       END IF;
12229       x_msg_count := FND_MSG_PUB.count_msg;
12230       x_return_status := FND_API.G_RET_STS_ERROR;
12231     WHEN OTHERS THEN
12232       IF (p_commit = FND_API.G_TRUE) THEN
12233         ROLLBACK to RECALC_STRUC_VER_DURATION;
12234       END IF;
12235       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12236       x_msg_count := FND_MSG_PUB.count_msg;
12237       --put message
12238       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
12239                               p_procedure_name => 'RECALC_STRUC_VER_DURATION',
12240                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12241       RAISE;
12242   END RECALC_STRUC_VER_DURATION;
12243 
12244 
12245   procedure Delete_Struc_Ver_Wo_Val
12246   (
12247    p_api_version                       IN  NUMBER      := 1.0
12248    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
12249    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
12250    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
12251    ,p_validation_level                  IN  VARCHAR2    := 100
12252    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
12253    ,p_debug_mode                        IN  VARCHAR2    := 'N'
12254    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12255    ,p_structure_version_id              IN  NUMBER
12256    ,p_record_version_number             IN  NUMBER
12257    ,x_return_status                     OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12258    ,x_msg_count                         OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
12259    ,x_msg_data                          OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12260   )
12261   IS
12262     l_api_name                      CONSTANT VARCHAR(30) := 'Delete_Struc_Ver_Wo_Val';
12263     l_api_version                   CONSTANT NUMBER      := 1.0;
12264 
12265     l_return_status                 VARCHAR2(1);
12266     l_msg_count                     NUMBER;
12267     l_msg_data                      VARCHAR2(250);
12268     l_data                          VARCHAR2(250);
12269     l_msg_index_out                 NUMBER;
12270 
12271     l_dummy                VARCHAR2(1);
12272     l_error_message_code   VARCHAR2(250);
12273 
12274     CURSOR get_struc_ver IS
12275            select pev.project_id, pe.proj_element_id, pe.record_version_number,
12276                   pev.element_version_id, pev.record_version_number,
12277                   pevs.pev_structure_id, pevs.record_version_number,
12278                   pevsh.pev_schedule_id, pevsh.record_version_number,
12279                   pevsh.rowid
12280              from pa_proj_elements pe,
12281                   pa_proj_element_versions pev,
12282                   pa_proj_elem_ver_structure pevs,
12283                   pa_proj_elem_ver_schedule pevsh
12284             where pev.element_version_id = p_structure_version_id and
12285                   pev.proj_element_id = pe.proj_element_id and
12286                   pev.project_id = pevs.project_id and
12287                   pev.element_version_id = pevs.element_version_id and
12288                   pev.project_id = pevsh.project_id (+) and
12289                   pev.element_version_id = pevsh.element_version_id (+);
12290 
12291     CURSOR is_last_version(p_structure_id NUMBER) IS
12292            select 'N'
12293              from pa_proj_element_versions
12294             where proj_element_id = p_structure_id;
12295 
12296     CURSOR get_top_tasks IS
12297            select v.element_version_id
12298              from pa_proj_element_versions v,
12299                   pa_object_relationships r
12300             where v.element_version_id = r.object_id_to1
12301               and r.object_id_from1 = p_structure_version_id
12302               and r.object_type_from = 'PA_STRUCTURES';
12303 
12304     cursor sel_wp_attr(c_proj_element_id NUMBER) IS
12305       select record_version_number
12306         from pa_proj_workplan_attr
12307        where proj_element_id = c_proj_element_id;
12308 
12309     l_project_id          PA_PROJ_ELEMENT_VERSIONS.PROJECT_ID%TYPE;
12310     l_proj_element_id     PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
12311     l_pe_rvn              PA_PROJ_ELEMENTS.RECORD_VERSION_NUMBER%TYPE;
12312     l_element_version_id  PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
12313     l_pev_rvn             PA_PROJ_ELEMENT_VERSIONS.RECORD_VERSION_NUMBER%TYPE;
12314     l_pev_structure_id    PA_PROJ_ELEM_VER_STRUCTURE.PEV_STRUCTURE_ID%TYPE;
12315     l_pevs_rvn            PA_PROJ_ELEM_VER_STRUCTURE.RECORD_VERSION_NUMBER%TYPE;
12316     l_pev_schedule_id     PA_PROJ_ELEM_VER_SCHEDULE.PEV_SCHEDULE_ID%TYPE;
12317     l_pevsh_rvn           PA_PROJ_ELEM_VER_SCHEDULE.RECORD_VERSION_NUMBER%TYPE;
12318     l_pevsh_rowid         VARCHAR2(255);
12319 
12320     l_task_version_id     PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
12321     l_task_rvn            PA_PROJ_ELEMENT_VERSIONS.RECORD_VERSION_NUMBER%TYPE;
12322     l_wp_attr_rvn         PA_PROJ_WORKPLAN_ATTR.RECORD_VERSION_NUMBER%TYPE;
12323 
12324     l_parent_struc_ver_id PA_PROJ_ELEMENT_VERSIONS.PARENT_STRUCTURE_VERSION_ID%TYPE;
12325 
12326   BEGIN
12327     IF (p_debug_mode = 'Y') THEN
12328       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL begin');
12329     END IF;
12330 
12331     IF (p_commit = FND_API.G_TRUE) THEN
12332       savepoint delete_struc_ver_wo_val;
12333     END IF;
12334 
12335     IF (p_debug_mode = 'Y') THEN
12336       pa_debug.debug('get structure version_info');
12337     END IF;
12338 
12339     --Delete logic
12340     --Get structure version information
12341     OPEN get_struc_ver;
12342     FETCH get_struc_ver INTO l_project_id,
12343                              l_proj_element_id,
12344                              l_pe_rvn,
12345                              l_element_version_id,
12346                              l_pev_rvn,
12347                              l_pev_structure_id,
12348                              l_pevs_rvn,
12349                              l_pev_schedule_id,
12350                              l_pevsh_rvn,
12351                              l_pevsh_rowid;
12352     IF (get_struc_ver%NOTFOUND) THEN
12353       CLOSE get_struc_ver;
12354       RAISE NO_DATA_FOUND;
12355     END IF;
12356     CLOSE get_struc_ver;
12357 
12358     --NO ERROR, call delete_task_ver_wo_val
12359     --select all top level tasks
12360     OPEN get_top_tasks;
12361     LOOP
12362       FETCH get_top_tasks into l_task_version_id;
12363       EXIT WHEN get_top_tasks%NOTFOUND;
12364       IF (p_debug_mode = 'Y') THEN
12365         pa_debug.debug('deleting task version '||to_char(l_task_version_id));
12366       END IF;
12367 
12368       --Get record version number for task, as it will change everytime
12369       --a task is deleted.
12370       select record_version_number, parent_structure_version_id
12371       into l_task_rvn, l_parent_struc_ver_id
12372       from pa_proj_element_versions
12373       where element_version_id = l_task_version_id;
12374 
12375 
12376       PA_TASK_PVT1.DELETE_TASK_VER_WO_VAL(p_commit => 'N',
12377                                        p_debug_mode => p_debug_mode,
12378                                        p_calling_module => 'DEL_STRUCT',
12379                                        p_structure_version_id => l_parent_struc_ver_id,
12380                                        p_task_version_id => l_task_version_id,
12381                                        p_record_version_number => l_task_rvn,
12382                                        x_return_status => l_return_status,
12383                                        x_msg_count => l_msg_count,
12384                                        x_msg_data => l_msg_data);
12385 
12386       IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12387         x_msg_count := FND_MSG_PUB.count_msg;
12388         IF x_msg_count = 1 then
12389            pa_interface_utils_pub.get_messages
12390            (p_encoded        => FND_API.G_TRUE,
12391             p_msg_index      => 1,
12392             p_data           => l_data,
12393             p_msg_index_out  => l_msg_index_out);
12394            x_msg_data := l_data;
12395         END IF;
12396         CLOSE get_top_tasks;
12397         raise FND_API.G_EXC_ERROR;
12398       END IF;
12399 
12400     END LOOP;
12401     CLOSE get_top_tasks;
12402 
12403     IF (p_debug_mode = 'Y') THEN
12404       pa_debug.debug('done deleting tasks');
12405     END IF;
12406     --If all tasks are deleted, delete schedule if workplan
12407     --Check if this is workplan
12408     If ('Y' = PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN')) THEN
12409        --Structure type exists. Delete from schedule table
12410        IF (p_debug_mode = 'Y') THEN
12411          pa_debug.debug('WORKPLAN type');
12412        END IF;
12413        PA_PROJ_ELEMENT_SCH_PKG.Delete_Row(l_pevsh_rowid);
12414 
12415        --bug 4172646
12416        --remove the code to call PA_FIN_PLAN_PVT.delete_wp_budget_versions as its also called from
12417        --PA_PROJECT_STRUCTURE_PVT1.delete_structure_versions API.
12418        --
12419 
12420     END IF;
12421 
12422     --check for errors.
12423     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12424       x_msg_count := FND_MSG_PUB.count_msg;
12425       IF x_msg_count = 1 then
12426          pa_interface_utils_pub.get_messages
12427          (p_encoded        => FND_API.G_TRUE,
12428           p_msg_index      => 1,
12429 --          p_msg_count      => l_msg_count,
12430 --          p_msg_data       => l_msg_data,
12431           p_data           => l_data,
12432           p_msg_index_out  => l_msg_index_out);
12433          x_msg_data := l_data;
12434       END IF;
12435       raise FND_API.G_EXC_ERROR;
12436     END IF;
12437 
12438     IF (p_debug_mode = 'Y') THEN
12439       pa_debug.debug('del structure version attr');
12440     END IF;
12441     --Delete structure version attribute
12442     PA_PROJECT_STRUCTURE_PVT1.Delete_Structure_Version_Attr(
12443                         p_commit => p_commit,
12444                         p_debug_mode => p_debug_mode,
12445                         p_pev_structure_id => l_pev_structure_id,
12446                         p_record_version_number => l_pevs_rvn,
12447                         x_return_status => l_return_status,
12448                         x_msg_count => l_msg_count,
12449                         x_msg_data => l_msg_data);
12450     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12451       x_msg_count := FND_MSG_PUB.count_msg;
12452       IF x_msg_count = 1 then
12453          pa_interface_utils_pub.get_messages
12454          (p_encoded        => FND_API.G_TRUE,
12455           p_msg_index      => 1,
12456 --          p_msg_count      => l_msg_count,
12457 --          p_msg_data       => l_msg_data,
12458           p_data           => l_data,
12459           p_msg_index_out  => l_msg_index_out);
12460          x_msg_data := l_data;
12461       END IF;
12462       raise FND_API.G_EXC_ERROR;
12463     END IF;
12464 
12465 
12466     IF (p_debug_mode = 'Y') THEN
12467       pa_debug.debug('del structure version');
12468     END IF;
12469 
12470     --Delete structure version
12471     PA_PROJECT_STRUCTURE_PVT1.Delete_Structure_Version(
12472                         p_commit => p_commit,
12473                         p_debug_mode => p_debug_mode,
12474                         p_structure_version_id => l_element_version_id,
12475                         p_record_version_number => l_pev_rvn,
12476                         x_return_status => l_return_status,
12477                         x_msg_count => l_msg_count,
12478                         x_msg_data => l_msg_data);
12479 
12480     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12481       x_msg_count := FND_MSG_PUB.count_msg;
12482       IF x_msg_count = 1 then
12483          pa_interface_utils_pub.get_messages
12484          (p_encoded        => FND_API.G_TRUE,
12485           p_msg_index      => 1,
12486 --          p_msg_count      => l_msg_count,
12487 --          p_msg_data       => l_msg_data,
12488           p_data           => l_data,
12489           p_msg_index_out  => l_msg_index_out);
12490          x_msg_data := l_data;
12491       END IF;
12492       raise FND_API.G_EXC_ERROR;
12493     END IF;
12494 
12495 
12496     --Delete structure if this is the last version
12497     OPEN is_last_version(l_proj_element_id);
12498     FETCH is_last_version into l_dummy;
12499     IF is_last_version%NOTFOUND THEN
12500       --We are deleting the last version. Delete structure
12501       IF (p_debug_mode = 'Y') THEN
12502         pa_debug.debug('delete non-versioned structure');
12503       END IF;
12504 
12505 
12506       IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Structure(l_proj_element_id, 'WORKPLAN') = 'Y') THEN
12507         --delete workplan attribute
12508         OPEN sel_wp_attr(l_proj_element_id);
12509         FETCH sel_wp_attr into l_wp_attr_rvn;
12510         CLOSE sel_wp_attr;
12511 
12512         PA_WORKPLAN_ATTR_PUB.DELETE_PROJ_WORKPLAN_ATTRS(
12513           p_validate_only => FND_API.G_FALSE
12514          ,p_project_id => l_project_id
12515          ,p_proj_element_id => l_proj_element_id
12516          ,p_record_version_number => l_wp_attr_rvn
12517          ,x_return_status => l_return_status
12518          ,x_msg_count => l_msg_count
12519          ,x_msg_data => l_msg_data
12520         );
12521 
12522         --Check error
12523         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12524           x_msg_count := FND_MSG_PUB.count_msg;
12525           IF x_msg_count = 1 then
12526              pa_interface_utils_pub.get_messages
12527              (p_encoded        => FND_API.G_TRUE,
12528               p_msg_index      => 1,
12529               p_data           => l_data,
12530               p_msg_index_out  => l_msg_index_out);
12531              x_msg_data := l_data;
12532           END IF;
12533           raise FND_API.G_EXC_ERROR;
12534         END IF;
12535 
12536         PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
12537           p_validate_only        => FND_API.G_FALSE
12538          ,p_project_id           => l_project_id
12539          ,P_OBJECT_TYPE          => 'PA_STRUCTURES'
12540          ,p_object_id            => l_proj_element_id
12541      ,p_structure_type       => 'WORKPLAN' --Amit
12542          ,x_return_status        => l_return_status
12543          ,x_msg_count            => l_msg_count
12544          ,x_msg_data             => l_msg_data
12545         );
12546 
12547         --Check error
12548         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12549           x_msg_count := FND_MSG_PUB.count_msg;
12550           IF x_msg_count = 1 then
12551              pa_interface_utils_pub.get_messages
12552              (p_encoded        => FND_API.G_TRUE,
12553               p_msg_index      => 1,
12554               p_data           => l_data,
12555               p_msg_index_out  => l_msg_index_out);
12556              x_msg_data := l_data;
12557           END IF;
12558           raise FND_API.G_EXC_ERROR;
12559         END IF;
12560 
12561       END IF;
12562 
12563       select record_version_number into l_pe_rvn
12564       from pa_proj_elements where proj_element_id = l_proj_element_id;
12565       PA_PROJECT_STRUCTURE_PVT1.Delete_Structure(
12566                         p_commit => p_commit,
12567                         p_debug_mode => p_debug_mode,
12568                         p_structure_id => l_proj_element_id,
12569                         p_record_version_number => l_pe_rvn,
12570                         x_return_status => l_return_status,
12571                         x_msg_count => l_msg_count,
12572                         x_msg_data => l_msg_data);
12573 
12574     END IF;
12575     CLOSE is_last_version;
12576 
12577     --Check error
12578     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12579       x_msg_count := FND_MSG_PUB.count_msg;
12580       IF x_msg_count = 1 then
12581          pa_interface_utils_pub.get_messages
12582          (p_encoded        => FND_API.G_TRUE,
12583           p_msg_index      => 1,
12584           p_data           => l_data,
12585           p_msg_index_out  => l_msg_index_out);
12586          x_msg_data := l_data;
12587       END IF;
12588       raise FND_API.G_EXC_ERROR;
12589     END IF;
12590 
12591     x_return_status := FND_API.G_RET_STS_SUCCESS;
12592 
12593     IF (p_debug_mode = 'Y') THEN
12594       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL end');
12595     END IF;
12596 
12597   EXCEPTION
12598     when FND_API.G_EXC_ERROR then
12599       if p_commit = FND_API.G_TRUE then
12600         rollback to delete_struc_ver_wo_val;
12601       end if;
12602       x_msg_count := FND_MSG_PUB.count_msg;
12603       x_return_status := FND_API.G_RET_STS_ERROR;
12604     when FND_API.G_EXC_UNEXPECTED_ERROR then
12605       if p_commit = FND_API.G_TRUE then
12606         rollback to delete_struc_ver_wo_val;
12607       end if;
12608       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12609       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
12610                               p_procedure_name => 'Delete_Struc_Ver_Wo_Val',
12611                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12612     when OTHERS then
12613       if p_commit = FND_API.G_TRUE then
12614          rollback to delete_struc_ver_wo_val;
12615       end if;
12616       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12617       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
12618                               p_procedure_name => 'Delete_Struc_Ver_Wo_Val',
12619                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12620       raise;
12621   END DELETE_STRUC_VER_WO_VAL;
12622 
12623   procedure Generate_Error_Page
12624   (
12625     p_api_version                      IN  NUMBER     := 1.0
12626    ,p_commit                           IN  VARCHAR2   := 'N'
12627    ,p_calling_module                   IN  VARCHAR2   := 'SELF_SERVICE'
12628    ,p_debug_mode                       IN  VARCHAR2   := 'N'
12629    ,p_max_msg_count                    IN  NUMBER     := NULL
12630    ,p_structure_version_id             IN  NUMBER
12631    ,p_error_tbl                        IN  PA_PUBLISH_ERR_TBL_TYPE
12632    ,x_page_content_id                  OUT NOCOPY NUMBER
12633    ,x_return_status                    OUT NOCOPY VARCHAR2
12634    ,x_msg_count                        OUT NOCOPY NUMBER
12635    ,x_msg_data                         OUT NOCOPY VARCHAR2
12636   )
12637   IS PRAGMA AUTONOMOUS_TRANSACTION;
12638     CURSOR get_struct_ver_info IS
12639       select a.name, a.version_number, c.scheduled_start_date,
12640              c.scheduled_finish_date, b.project_id
12641         from pa_proj_elem_ver_structure a,
12642              pa_proj_element_versions b,
12643              pa_proj_elem_ver_schedule c
12644        where b.element_version_id = p_structure_version_id
12645          and b.project_id = a.project_id
12646          and b.proj_element_id = a.proj_element_id
12647          and b.element_version_id = a.element_version_id
12648          and b.project_id = c.project_id
12649          and b.proj_element_id = c.proj_element_id
12650          and b.element_version_id = c.element_version_id;
12651     l_struc_ver_info_rec get_struct_ver_info%ROWTYPE;
12652 
12653     CURSOR get_project_info(c_project_id NUMBER) IS
12654       select ppa.name name, ppa.segment1,
12655              hou.name carrying_out_org_name, ppl.full_name
12656         from pa_projects_all ppa,
12657              hr_all_organization_units hou,
12658              per_all_people_f ppl,
12659              pa_project_parties ppp
12660        where ppa.carrying_out_organization_id = hou.organization_id
12661          and ppa.project_id = ppp.project_id (+)
12662          and ppa.project_id = c_project_id
12663          and 1 = ppp.project_role_id (+)
12664          and sysdate between ppp.start_date_active(+)
12665              and nvl(ppp.end_date_active(+), sysdate)
12666          and ppp.resource_source_id = ppl.person_id (+)
12667          and sysdate between ppl.effective_start_date(+)
12668              and nvl(ppl.effective_end_date (+), sysdate);
12669     l_proj_info_rec get_project_info%ROWTYPE;
12670 
12671     CURSOR get_lookup_meaning(c_lookup_code VARCHAR2) IS
12672       select meaning
12673         from pa_lookups
12674        where lookup_type = 'PA_WORKPLAN_ERROR_NOTIF'
12675          and lookup_code = c_lookup_code;
12676     l_workplan_version_err      varchar2(80);
12677     l_err_instruction           varchar2(80);
12678     l_project_info              varchar2(80);
12679     l_project_name              varchar2(80);
12680     l_project_num               varchar2(80);
12681     l_project_mgr               varchar2(80);
12682     l_project_org               varchar2(80);
12683     l_workplan_ver_info         varchar2(80);
12684     l_workplan_ver_name         varchar2(80);
12685     l_workplan_ver_num          varchar2(80);
12686     l_wp_sch_start_date         varchar2(80);
12687     l_wp_sch_finish_date        varchar2(80);
12688     l_error_header              varchar2(80);
12689     l_error                     varchar2(80);
12690 
12691     l_page_content_id           NUMBER;
12692     l_clob                      clob;
12693     l_text                      VARCHAR2(32767);
12694     l_index                     NUMBER;
12695     l_item_key                  VARCHAR2(240);
12696     l_return_status             VARCHAR2(1);
12697     l_msg_count                 NUMBER;
12698     l_msg_data                  VARCHAR2(250);
12699     l_err_code                  NUMBER:= 0;
12700     l_err_stack                 VARCHAR2(630);
12701     l_err_stage                 VARCHAR2(80);
12702 
12703   BEGIN
12704 
12705     OPEN get_struct_ver_info;
12706     FETCH get_struct_ver_info INTO l_struc_ver_info_rec;
12707     CLOSE get_struct_ver_info;
12708 
12709     OPEN get_project_info(l_struc_ver_info_rec.project_id);
12710     FETCH get_project_info INTO l_proj_info_rec;
12711     CLOSE get_project_info;
12712 
12713     --get headers and prompts
12714     OPEN get_lookup_meaning('PA_WORKPLAN_VERSION_ERR');
12715     FETCH get_lookup_meaning into l_workplan_version_err;
12716     CLOSE get_lookup_meaning;
12717 
12718     OPEN get_lookup_meaning('PA_ERR_INSTRUCTION');
12719     FETCH get_lookup_meaning into l_err_instruction;
12720     CLOSE get_lookup_meaning;
12721 
12722     OPEN get_lookup_meaning('PA_PROJECT_INFO');
12723     FETCH get_lookup_meaning into l_project_info;
12724     CLOSE get_lookup_meaning;
12725 
12726     OPEN get_lookup_meaning('PA_PROJECT_NAME');
12727     FETCH get_lookup_meaning into l_project_name;
12728     CLOSE get_lookup_meaning;
12729 
12730     OPEN get_lookup_meaning('PA_PROJECT_NUM');
12731     FETCH get_lookup_meaning into l_project_num;
12732     CLOSE get_lookup_meaning;
12733 
12734     OPEN get_lookup_meaning('PA_PROJECT_MGR');
12735     FETCH get_lookup_meaning into l_project_mgr;
12736     CLOSE get_lookup_meaning;
12737 
12738     OPEN get_lookup_meaning('PA_PROJECT_ORG');
12739     FETCH get_lookup_meaning into l_project_org;
12740     CLOSE get_lookup_meaning;
12741 
12742     OPEN get_lookup_meaning('PA_WORKPLAN_VER_INFO');
12743     FETCH get_lookup_meaning into l_workplan_ver_info;
12744     CLOSE get_lookup_meaning;
12745 
12746     OPEN get_lookup_meaning('PA_WORKPLAN_VER_NAME');
12747     FETCH get_lookup_meaning into l_workplan_ver_name;
12748     CLOSE get_lookup_meaning;
12749 
12750     OPEN get_lookup_meaning('PA_WORKPLAN_VER_NUM');
12751     FETCH get_lookup_meaning into l_workplan_ver_num;
12752     CLOSE get_lookup_meaning;
12753 
12754     OPEN get_lookup_meaning('PA_WP_SCH_START_DATE');
12755     FETCH get_lookup_meaning into l_wp_sch_start_date;
12756     CLOSE get_lookup_meaning;
12757 
12758     OPEN get_lookup_meaning('PA_WP_SCH_FINISH_DATE');
12759     FETCH get_lookup_meaning into l_wp_sch_finish_date;
12760     CLOSE get_lookup_meaning;
12761 
12762     OPEN get_lookup_meaning('PA_ERROR_HEADER');
12763     FETCH get_lookup_meaning into l_error_header;
12764     CLOSE get_lookup_meaning;
12765 
12766     OPEN get_lookup_meaning('PA_ERROR');
12767     FETCH get_lookup_meaning into l_error;
12768     CLOSE get_lookup_meaning;
12769     --done getting header and prompt
12770 
12771     --create record in pa_page_layouts
12772     PA_PAGE_CONTENTS_PUB.CREATE_PAGE_CONTENTS(
12773       p_init_msg_list   => fnd_api.g_false
12774      ,p_validate_only   => fnd_api.g_false
12775      ,p_object_type     => 'PA_STRUCTURES'
12776      ,p_pk1_value       => p_structure_version_id
12777      ,p_pk2_value       => 1
12778      ,x_page_content_id => x_page_content_id
12779      ,x_return_status   => x_return_status
12780      ,x_msg_count       => x_msg_count
12781      ,x_msg_data        => x_msg_data
12782     );
12783 
12784     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12785       RAISE FND_API.G_EXC_ERROR;
12786     END IF;
12787 
12788     --create notification page
12789     select page_content
12790     into l_clob
12791     from pa_page_contents
12792     where page_content_id = x_page_content_id for update;
12793 
12794     --print title
12795     l_text := '<table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary="">';
12796     l_text := l_text||'<tbody><tr><td width="100%"><font class="OraHeader" face="Tahoma,Arial,Helvetica,Geneva,sans-serif" color="#3c3c3c" size="5">';
12797     l_text := l_text||l_workplan_version_err||': ';
12798     l_text := l_text||l_struc_ver_info_rec.name;
12799     l_text := l_text||' ('||l_struc_ver_info_rec.version_number||')';
12800 
12801     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12802       l_text
12803      ,l_clob);
12804 
12805     --print instruction text
12806     l_text := '</font></td></tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table><table cellspacing=0 cellpadding=0 width="100%" border=0 summary="">';
12807     l_text := l_text||'<tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr><td></td><td><span>';
12808     l_text := l_text||'<font face="Tahoma,Arial,Helvetica,Geneva,sans-serif" color="#000000" size="2">';
12809     l_text := l_text||l_err_instruction||'</font></span></td>';
12810 
12811     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12812       l_text
12813      ,l_clob);
12814 
12815     --print project info
12816     l_text := '</tr></tbody></table><table cellspacing=10 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td valign=top width="100%">';
12817     l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td height=17></td></tr><tr><td width=20 rowspan=3>';
12818     l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12819     l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12820     l_text := l_text||l_project_info||'</b></font></td>';
12821 
12822     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12823       l_text
12824      ,l_clob);
12825 
12826     --print project name
12827     l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12828     l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary="">';
12829     l_text := l_text||'<tbody><tr><td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary="">';
12830     l_text := l_text||'<tbody><tr><td noWrap align=right><span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2>';
12831     l_text := l_text||'<label>';
12832     l_text := l_text||l_project_name||'</label></font></span></td><td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12833     l_text := l_text||l_proj_info_rec.name||'</b></font></td>';
12834 
12835     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12836       l_text
12837      ,l_clob);
12838 
12839     --print project number
12840     l_text := '</tr><tr><td height=3></td><td></td><td></td></tr><tr><td noWrap align=right><span align="right">';
12841     l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12842     l_text := l_text||l_project_num||'</label></font></span></td><td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12843     l_text := l_text||l_proj_info_rec.segment1||'</b></font></td>';
12844 
12845     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12846       l_text
12847      ,l_clob);
12848 
12849     --print project manager
12850     l_text := '</tr><tr><td height=3></td><td></td><td></td></tr></tbody></table></td><td width="5%"></td><td valign=top>';
12851     l_text := l_text||'<table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr><td noWrap align=right><span align="right">';
12852     l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12853     l_text := l_text||l_project_mgr||'</label></font></span></td>';
12854     l_text := l_text||'<td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12855     l_text := l_text||l_proj_info_rec.full_name||'</b></font></td>';
12856 
12857     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12858       l_text
12859      ,l_clob);
12860 
12861     --print organization
12862     l_text := '</tr><tr><td height=3></td><td></td><td></td></tr><tr><td noWrap align=right><span align="right">';
12863     l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12864     l_text := l_text||l_project_org||'</label></font></span></td><td width=12></td><td><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12865     l_text := l_text||l_proj_info_rec.carrying_out_org_name;
12866     l_text := l_text||'</b></font></td></tr><tr><td height=3></td><td></td><td></td></tr></tbody></table></td></tr></tbody></table>';
12867     l_text := l_text||'</td></tr></tbody></table></td></tr></tbody></table>';
12868 
12869     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12870       l_text
12871      ,l_clob);
12872 
12873     --print workplan version information
12874     l_text := '<div><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td height=17></td></tr><tr><td width=20 rowspan=3>';
12875     l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12876     l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12877     l_text := l_text||l_workplan_ver_info||'</b></font></td>';
12878 
12879     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12880       l_text
12881      ,l_clob);
12882 
12883     --print version name
12884     l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12885     l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td><table cellspacing=0 cellpadding=0 border=0 summary="" width="319">';
12886     l_text := l_text||'<tbody><tr><td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary="" width="419">';
12887     l_text := l_text||'<tbody><tr><td noWrap align=right width="177"><span align="right">';
12888     l_text := l_text||'<font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12889     l_text := l_text||l_workplan_ver_name||'</label></font></span></td><td width=12></td><td width="198">';
12890     l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12891     l_text := l_text||l_struc_ver_info_rec.name||'</b></font></td>';
12892 
12893     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12894       l_text
12895      ,l_clob);
12896 
12897     --print version number
12898     l_text := '</tr><tr><td height=3 width="177"></td><td width="12"></td><td width="198"></td></tr><tr><td noWrap align=right width="177">';
12899     l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12900     l_text := l_text||l_workplan_ver_num||'</label></font></span></td>';
12901     l_text := l_text||'<td width=12></td><td width="198"><font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12902     l_text := l_text||l_struc_ver_info_rec.version_number||'</b></font></td>';
12903 
12904     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12905       l_text
12906      ,l_clob);
12907 
12908     l_text := '</tr><tr><td height=3 width="177"></td><td width="12"></td><td width="198"></td></tr><tr><td noWrap align=right width="177">';
12909     l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12910     l_text := l_text||l_wp_sch_start_date||'</label></font></span></td><td width=12></td><td width="198">';
12911     l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12912     l_text := l_text||l_struc_ver_info_rec.scheduled_start_date||'</b></font></td>';
12913 
12914     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12915       l_text
12916      ,l_clob);
12917 
12918     --print scheduled finish date
12919     l_text := '</tr><tr><td height=3 width="177"></td><td width="12"></td><td width="198"></td></tr><tr><td noWrap align=right width="177">';
12920     l_text := l_text||'<span align="right"><font class=OraPromptText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><label>';
12921     l_text := l_text||l_wp_sch_finish_date||'</label></font></span></td><td width=12></td><td width="198">';
12922     l_text := l_text||'<font class=OraDataText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><b>';
12923     l_text := l_text||l_struc_ver_info_rec.scheduled_finish_date||'</b></font></td></tr></tbody></table></td></tr></tbody></table><div></div></td>';
12924     l_text := l_text||'</tr></tbody></table></td></tr></tbody></table></div><div></div>';
12925 
12926     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12927       l_text
12928      ,l_clob);
12929 
12930     --print error header
12931     l_text := '<div><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td height=17></td></tr><tr><td width=20 rowspan=3>';
12932     l_text := l_text||'</td><td><table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td width="100%">';
12933     l_text := l_text||'<font class=OraHeaderSub face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c><b>';
12934     l_text := l_text||l_error_header||'</b></font></td>';
12935 
12936     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12937       l_text
12938      ,l_clob);
12939 
12940     --print error table
12941 
12942     l_text := '</tr><tr><td class=OraBGAccentDark bgcolor=#cfe0f1></td></tr></tbody></table></td></tr><tr><td height=2></td></tr><tr><td>';
12943     l_text := l_text||'<table cellspacing=0 cellpadding=0 width="100%" border=0 summary=""><tbody><tr><td><table cellspacing=0 cellpadding=0 width=0 border=0 summary="">';
12944     l_text := l_text||' <tbody><tr><td class=OraTable bgcolor=#999966><table style="BORDER-COLLAPSE: collapse" cellspacing=0 cellpadding=1 width="100%" border=0 summary="">';
12945     l_text := l_text||'<tbody><tr><th style="BORDER-LEFT: #f2f2f5 1px solid" valign=bottom align=left bgcolor=#cfe0f1 scope="col">';
12946     l_text := l_text||'<font class=OraTableColumnHeader face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#3c3c3c size=2>';
12947     l_text := l_text||'<b><span class=OraTableHeaderLink bgcolor="#cfe0f1">';
12948     l_text := l_text||l_error||'</span></b></font></th></tr>';
12949 
12950     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12951       l_text
12952      ,l_clob);
12953 
12954     --print errors
12955     --loop
12956     l_index := p_error_tbl.FIRST;
12957     LOOP
12958       l_text := '<tr><td style="BORDER-RIGHT: #cfe0f1 1px solid; BORDER-TOP: #cfe0f1 1px solid; BORDER-LEFT: #cfe0f1 1px solid; BORDER-BOTTOM: #cfe0f1 1px solid" valign=baseline noWrap bgcolor=#f2f2f5>';
12959       l_text := l_text||'<font class=OraTableCellText face=Tahoma,Arial,Helvetica,Geneva,sans-serif color=#000000 size=2><span>';
12960       l_text := l_text||p_error_tbl(l_index)||'</span></font></td></tr>';
12961 
12962       PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12963         l_text
12964        ,l_clob);
12965 
12966       EXIT WHEN l_index = p_error_tbl.LAST;
12967       l_index := p_error_tbl.next(l_index);
12968 
12969     END LOOP;
12970     --end loop
12971     --print end
12972 
12973     l_text := '</tbody></table></td></tr></tbody></table><div></div><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody><tr>';
12974     l_text := l_text||'<td width="5%"></td><td valign=top><table cellspacing=0 cellpadding=0 border=0 summary=""><tbody></tbody></table></td>';
12975     l_text := l_text||'</tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table></td>';
12976     l_text := l_text||'</tr></tbody></table><p></p><p></p></td></tr></table>';
12977 
12978     PA_PROJECT_STRUCTURE_PVT1.APPEND_VARCHAR_TO_CLOB(
12979       l_text
12980      ,l_clob);
12981 
12982     --send notification
12983     PA_WORKPLAN_WORKFLOW.START_WORKFLOW(
12984           'PAWFPPWP'
12985          ,'PA_WORKPLAN_ERRORS'
12986          ,p_structure_version_id
12987          ,NULL
12988          ,NULL
12989          ,l_item_key
12990          ,l_msg_count
12991          ,l_msg_data
12992          ,l_return_status
12993         );
12994     IF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
12995       PA_WORKFLOW_UTILS.INSERT_WF_PROCESSES(
12996              p_wf_type_code =>      'WORKPLAN'
12997             ,p_item_type    =>      'PAWFPPWP'
12998             ,p_item_key     =>      l_item_key
12999             ,p_entity_key1  =>      l_struc_ver_info_rec.project_id
13000             ,p_entity_key2  =>      p_structure_version_id
13001             ,p_description  =>      NULL
13002             ,p_err_code     =>      l_err_code
13003             ,p_err_stage    =>      l_err_stage
13004             ,p_err_stack    =>      l_err_stack
13005           );
13006       IF (l_err_code <> 0) THEN
13007         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
13008                                  p_msg_name => 'PA_PS_CREATE_WF_FAILED');
13009         RAISE FND_API.G_EXC_ERROR;
13010       END IF;
13011     ELSE
13012       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
13013                                p_msg_name => 'PA_PS_CREATE_WF_FAILED');
13014       RAISE FND_API.G_EXC_ERROR;
13015     END IF;
13016 
13017 
13018     x_return_status := FND_API.G_RET_STS_SUCCESS;
13019     COMMIT;
13020 
13021   EXCEPTION
13022     when FND_API.G_EXC_ERROR then
13023       ROLLBACK;
13024       x_msg_count := FND_MSG_PUB.count_msg;
13025       x_return_status := FND_API.G_RET_STS_ERROR;
13026     when OTHERS then
13027       ROLLBACK;
13028       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13029       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
13030                               p_procedure_name => 'Generate_Error_Page',
13031                               p_error_text     => SUBSTRB(SQLERRM,1,240));
13032       raise;
13033   END Generate_Error_Page;
13034 
13035 
13036   PROCEDURE APPEND_VARCHAR_TO_CLOB(p_varchar IN varchar2,
13037                                    p_clob    IN OUT NOCOPY CLOB)
13038   IS
13039     l_chunkSize   INTEGER;
13040     v_offset      INTEGER := 0;
13041     l_clob        clob;
13042     l_length      INTEGER;
13043 
13044     v_size        NUMBER;
13045     v_text        VARCHAR2(3000);  -- Bug 3634909. Increased to 3000 from 1000
13046   BEGIN
13047     l_chunksize := length(p_varchar);
13048     l_length := dbms_lob.getlength(p_clob);
13049 
13050     dbms_lob.write(p_clob,
13051                    l_chunksize,
13052                    l_length+1,
13053                    p_varchar);
13054     v_size := 1000;
13055     dbms_lob.read(p_clob, v_size, 1, v_text);
13056   END APPEND_VARCHAR_TO_CLOB;
13057 
13058 -- Following procedure is added for Bug 2758343
13059 -- It will recalculate the task weightings based on
13060 -- duration for a given project and structure version id
13061 
13062 PROCEDURE RECALC_FIN_TASK_WEIGHTS
13063 ( p_structure_version_id IN NUMBER
13064  ,p_project_id           IN NUMBER
13065  ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13066  ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13067  ,x_return_status        OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
13068 
13069 IS
13070 
13071 CURSOR c_get_task_ver IS
13072     SELECT element_version_id
13073          , wbs_level
13074     FROM   pa_proj_element_versions
13075     WHERE  project_id = p_project_id
13076     AND    parent_structure_version_id = p_structure_version_id
13077     AND    object_type = 'PA_TASKS';
13078 
13079 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
13080     SELECT ptt.prog_entry_enable_flag
13081     FROM   pa_task_types ptt
13082          , pa_proj_element_versions ppev
13083          , pa_proj_elements ppe
13084     WHERE  ppev.element_version_id = c_element_version_id
13085     AND    ppev.proj_element_id = ppe.proj_element_id
13086     AND    ptt.object_type ='PA_TASKS'              /* bug 3279978 FP M Enhancement */
13087     AND    ppe.TYPE_ID   = ptt.task_type_id;
13088 
13089 CURSOR get_parent(c_element_version_id NUMBER) IS
13090     SELECT object_id_from1
13091     FROM   pa_object_relationships
13092     WHERE  object_id_to1 = c_element_version_id
13093     AND    object_type_to = 'PA_TASKS'
13094     AND    relationship_type = 'S'
13095     AND    object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
13096 
13097  CURSOR get_summed_duration(c_parent_element_version_id NUMBER) IS
13098     SELECT sum(ppevs.duration)
13099     FROM   pa_proj_elem_ver_schedule ppevs
13100          , pa_object_relationships por
13101          , pa_proj_element_versions ppev
13102          , pa_proj_elements ppe
13103          , pa_task_types ptt
13104     WHERE  por.object_id_from1 = c_parent_element_version_id
13105     AND    por.object_type_to = 'PA_TASKS'
13106     AND    por.relationship_type = 'S'
13107     AND    por.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
13108     AND    por.object_id_to1 = ppevs.element_version_id
13109     AND    por.object_id_to1 = ppev.element_version_id
13110     AND    ppev.proj_element_id = ppe.proj_element_id
13111     AND    ppevs.project_id     = ppe.project_id
13112     AND    ppe.TYPE_ID   = ptt.task_type_id
13113     AND    ptt.object_type ='PA_TASKS'              /* bug 3279978 FP M Enhancement */
13114     AND    ptt.prog_entry_enable_flag = 'Y';
13115 
13116  CURSOR get_task_duration(c_element_version_id NUMBER, c_project_id NUMBER) IS
13117     SELECT duration
13118     FROM   pa_proj_elem_ver_schedule
13119     WHERE  element_version_id = c_element_version_id
13120     AND    project_id = c_project_id;
13121 
13122  CURSOR get_existing_weights(c_parent_element_version_id NUMBER) IS
13123     SELECT sum(weighting_percentage)
13124     FROM   PA_OBJECT_RELATIONSHIPS
13125     WHERE  object_id_from1 = c_parent_element_version_id
13126     AND    object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
13127     AND    object_type_to = 'PA_TASKS'
13128     AND    relationship_type = 'S';
13129 
13130 
13131 l_element_version_id NUMBER;
13132 l_parent_element_version_id NUMBER;
13133 l_outline_level NUMBER;
13134 l_progress_allowed VARCHAR2(1);
13135 
13136 TYPE durations IS TABLE OF NUMBER
13137        INDEX BY BINARY_INTEGER;
13138 
13139 l_durations durations;
13140 l_total_duration NUMBER;
13141 l_task_weight PA_OBJECT_RELATIONSHIPS.weighting_percentage%TYPE;
13142 l_task_duration  NUMBER;
13143 l_existing_weight NUMBER;
13144 l_remaining_weight NUMBER;
13145 
13146 BEGIN
13147 
13148 For l_get_task_ver IN c_get_task_ver LOOP
13149 
13150     l_element_version_id := l_get_task_ver.element_version_id;
13151     l_outline_level  := l_get_task_ver.wbs_level;
13152 
13153     OPEN check_progress_allowed(l_element_version_id);
13154     FETCH check_progress_allowed INTO l_progress_allowed;
13155     CLOSE check_progress_allowed;
13156 
13157     OPEN get_parent(l_element_version_id);
13158     FETCH get_parent INTO l_parent_element_version_id;
13159     CLOSE get_parent;
13160 
13161 
13162     IF l_progress_allowed = 'N' THEN
13163           -- Populate task weight as zero
13164           UPDATE PA_OBJECT_RELATIONSHIPS
13165           SET weighting_percentage = 0
13166           WHERE object_id_from1 = l_parent_element_version_id
13167           AND   object_id_to1 = l_element_version_id
13168           AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
13169           AND   object_type_to = 'PA_TASKS'
13170           AND   relationship_type = 'S';
13171     ELSE
13172 
13173           IF l_durations.exists(l_parent_element_version_id) then
13174               NULL;
13175           ELSE
13176           OPEN get_summed_duration(l_parent_element_version_id);
13177               FETCH get_summed_duration INTO l_total_duration;
13178               CLOSE get_summed_duration;
13179 
13180           l_durations(l_parent_element_version_id) := l_total_duration;
13181           END IF;
13182 
13183       OPEN get_task_duration(l_element_version_id, p_project_id);
13184           FETCH get_task_duration INTO l_task_duration;
13185           CLOSE get_task_duration;
13186 
13187           IF (l_durations(l_parent_element_version_id) IS NULL) OR (l_durations(l_parent_element_version_id) = 0) THEN
13188           l_task_weight := 0;
13189           ELSE
13190               OPEN get_existing_weights(l_parent_element_version_id);
13191           FETCH get_existing_weights INTO l_existing_weight;
13192               CLOSE get_existing_weights;
13193 
13194           l_remaining_weight := 100 - l_existing_weight;
13195               l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
13196 
13197           IF(abs(l_remaining_weight - l_task_weight) <= .05) THEN
13198             l_task_weight := l_remaining_weight;
13199           END IF;
13200           IF(abs(l_remaining_weight) <= .01) THEN
13201             l_task_weight := l_task_weight+l_remaining_weight;
13202           END IF;
13203       END IF;
13204 
13205           UPDATE PA_OBJECT_RELATIONSHIPS
13206           SET weighting_percentage = l_task_weight
13207           WHERE object_id_from1 = l_parent_element_version_id
13208           AND   object_id_to1 = l_element_version_id
13209           AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
13210           AND   object_type_to = 'PA_TASKS'
13211           AND   relationship_type = 'S';
13212     END IF;
13213 END LOOP;
13214 
13215 x_return_status := FND_API.G_RET_STS_SUCCESS;
13216 
13217 EXCEPTION
13218 WHEN OTHERS THEN
13219   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13220   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
13221                           p_procedure_name => 'RECALC_FIN_TASK_WEIGHTS',
13222                           p_error_text     => SUBSTRB(SQLERRM,1,240));
13223 END RECALC_FIN_TASK_WEIGHTS;
13224 
13225 --maansari
13226 FUNCTION copy_task_version( p_structure_version_id NUMBER, p_task_version_id NUMBER ) RETURN VARCHAR2 IS
13227    l_copy_task_flag VARCHAR2(1) := 'Y';
13228    l_parent_task_version_id NUMBER;
13229 BEGIN
13230 
13231    FOR i in 1..l_src_tasks_versions_tbl.count LOOP
13232        IF p_task_version_id = l_src_tasks_versions_tbl(i).src_task_version_id
13233        THEN
13234           l_copy_task_flag := l_src_tasks_versions_tbl(i).copy_flag;
13235           l_parent_task_version_id := l_src_tasks_versions_tbl(i).src_parent_task_version_id;
13236           --loop thru untill top of the hierarchy.
13237           WHILE l_parent_task_version_id <> p_structure_version_id LOOP
13238             FOR i in 1..l_src_tasks_versions_tbl.count LOOP
13239              IF l_parent_task_version_id = l_src_tasks_versions_tbl(i).src_task_version_id
13240              THEN
13241 --bug 2863836
13242                 IF l_src_tasks_versions_tbl(i).copy_flag = 'N' THEN
13243                   l_copy_task_flag := l_src_tasks_versions_tbl(i).copy_flag;
13244                 END IF;
13245 --end bug 2863836
13246                 l_parent_task_version_id := l_src_tasks_versions_tbl(i).src_parent_task_version_id;
13247                 exit;
13248              END IF;
13249             END LOOP;
13250           END LOOP;
13251           exit;
13252        END IF;
13253    END LOOP;
13254 
13255    return l_copy_task_flag;
13256 END copy_task_version;
13257 --maansari
13258 
13259 -- Performance changes : added this API. It is bulk version of COPY_STRUCTURE_VERSION
13260 
13261 PROCEDURE COPY_STRUCTURE_VERSION_BULK
13262 ( p_commit                        IN VARCHAR2   := FND_API.G_FALSE
13263  ,p_validate_only                 IN VARCHAR2   := FND_API.G_TRUE
13264  ,p_validation_level              IN NUMBER     := FND_API.G_VALID_LEVEL_FULL
13265  ,p_calling_module                IN VARCHAR2   := 'SELF_SERVICE'
13266  ,p_debug_mode                    IN VARCHAR2   := 'N'
13267  ,p_max_msg_count                 IN NUMBER     := FND_API.G_MISS_NUM
13268  ,p_structure_version_id          IN NUMBER
13269  ,p_new_struct_ver_name           IN VARCHAR2
13270  ,p_new_struct_ver_desc           IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13271  ,p_change_reason_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13272  ,x_new_struct_ver_id            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13273  ,x_msg_count                    OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
13274  ,x_msg_data                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13275  ,x_return_status                OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
13276 IS
13277   l_new_struct_ver_id             PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
13278   -- added for Bug Fix: 4537865
13279   l_tmp_struct_ver_id         PA_PROJ_ELEMENT_VERSIONS.ELEMENT_VERSION_ID%TYPE;
13280   -- added for Bug Fix: 4537865
13281   l_return_status                 VARCHAR2(1);
13282   l_msg_count                     NUMBER;
13283   l_msg_data                      VARCHAR2(250);
13284   l_data                          VARCHAR2(2000);
13285   l_msg_index_out                 NUMBER;
13286   l_pev_structure_id              NUMBER;
13287 
13288   CURSOR l_get_structure_ver_csr(c_structure_version_id NUMBER)
13289   IS
13290   SELECT *
13291   FROM PA_PROJ_ELEMENT_VERSIONS
13292   WHERE element_version_id = c_structure_version_id;
13293 
13294   l_structure_ver_rec       l_get_structure_ver_csr%ROWTYPE;
13295   l_structure_ver_to_rec    l_get_structure_ver_csr%ROWTYPE;
13296 
13297   CURSOR l_get_structure_ver_attr_csr(c_structure_version_id NUMBER)
13298   IS
13299   SELECT a.*
13300   FROM PA_PROJ_ELEM_VER_STRUCTURE a,
13301        PA_PROJ_ELEMENT_VERSIONS b
13302   WHERE b.element_version_id = c_structure_version_id
13303   AND   b.project_id = a.project_id
13304   AND   b.element_version_id = a.project_id;
13305 
13306   l_structure_ver_attr_rec       l_get_structure_ver_attr_csr%ROWTYPE;
13307 
13308   l_ref_task_ver_id          NUMBER;
13309   l_peer_or_sub              VARCHAR2(10);
13310 
13311   CURSOR l_get_ver_schedule_attr_csr(c_element_version_id NUMBER)
13312   IS
13313   SELECT a.*
13314   FROM PA_PROJ_ELEM_VER_SCHEDULE a,
13315        PA_PROJ_ELEMENT_VERSIONS b
13316   WHERE b.element_version_id = c_element_version_id
13317   AND b.project_id = a.project_id
13318   AND b.element_version_id = a.element_version_id;
13319 
13320   l_ver_schedule_attr_rec       l_get_ver_schedule_attr_csr%ROWTYPE;
13321 
13322   l_last_wbs_level          NUMBER;
13323   l_task_version_id         NUMBER;
13324   l_pev_schedule_id         NUMBER;
13325 
13326   CURSOR l_get_structure_type_csr(c_structure_version_id NUMBER)
13327   IS
13328   SELECT pst.structure_type_class_code
13329   FROM   PA_STRUCTURE_TYPES pst,
13330          PA_PROJ_ELEMENT_VERSIONS ppev,
13331          PA_PROJ_STRUCTURE_TYPES ppst
13332   WHERE  ppev.element_version_id = c_structure_version_id
13333   AND    ppev.proj_element_id = ppst.proj_element_id
13334   AND    ppst.structure_type_id = pst.structure_type_id;
13335 
13336   l_structure_type          PA_STRUCTURE_TYPES.structure_type%TYPE;
13337 
13338   CURSOR l_check_working_versions_csr(c_structure_version_id NUMBER)
13339   IS
13340   SELECT 'Y'
13341   FROM  PA_PROJ_ELEMENT_VERSIONS ppev
13342   WHERE ppev.element_version_id = c_structure_version_id
13343   AND   EXISTS
13344         (SELECT 'Y'
13345          FROM   PA_PROJ_ELEMENT_VERSIONS ppev2,
13346                 PA_PROJ_ELEM_VER_STRUCTURE ppevs
13347          WHERE  ppev2.proj_element_id = ppev.proj_element_id
13348          AND    ppev2.project_id = ppev.project_id
13349          AND    ppevs.project_id = ppev2.project_id
13350          AND    ppevs.element_version_id = ppev2.element_version_id
13351          AND    ppevs.status_code <> 'STRUCTURE_PUBLISHED');
13352 
13353   l_dummy                   VARCHAR2(1);
13354 
13355 
13356     l_new_obj_rel_id          PA_OBJECT_RELATIONSHIPS.OBJECT_RELATIONSHIP_ID%TYPE;
13357     l_structure_type1         PA_STRUCTURE_TYPES.structure_type_class_code%TYPE;
13358 
13359 --Added by rtarway
13360 l_rowid VARCHAR2(255);
13361 
13362    X_Row_id  VARCHAR2(255);
13363    l_project_id number;
13364    l_user_id number;
13365    l_login_id number;
13366 
13367     CURSOR cur_elem_ver_seq IS
13368     SELECT pa_proj_element_versions_s.nextval
13369       FROM sys.dual;
13370 
13371   l_wp_struc VARCHAR2(1);
13372   l_fin_struc VARCHAR2(1);
13373 
13374 BEGIN
13375 
13376   pa_debug.init_err_stack ('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK');
13377 
13378   IF (p_debug_mode = 'Y') THEN
13379     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK begin');
13380   END IF;
13381 
13382   IF (p_commit = FND_API.G_TRUE) THEN
13383     savepoint copy_structure_version_pvt_blk;
13384   END IF;
13385 
13386   -- Get structure version info
13387   OPEN l_get_structure_ver_csr(p_structure_version_id);
13388   FETCH l_get_structure_ver_csr INTO l_structure_ver_rec;
13389   CLOSE l_get_structure_ver_csr;
13390 
13391   l_project_id := l_structure_ver_rec.project_id;
13392 
13393   OPEN cur_elem_ver_seq;
13394   FETCH cur_elem_ver_seq INTO l_new_struct_ver_id;
13395   CLOSE cur_elem_ver_seq;
13396 
13397     -- Fix for 4657794 :- This is fix for regression introduced by 4537865
13398     -- As X_ELEMENT_VERSION_ID is an IN OUT parameter ,we need to initialize, its value l_tmp_struct_ver_id
13399     -- to l_new_struct_ver_id
13400 
13401     l_tmp_struct_ver_id := l_new_struct_ver_id ;
13402 
13403     -- End 4657794
13404 
13405     PA_PROJ_ELEMENT_VERSIONS_PKG.INSERT_ROW(
13406        X_ROW_ID                       => l_rowid
13407     --,X_ELEMENT_VERSION_ID           => l_new_struct_ver_id        * commented for Bug Fix: 453786
13408       ,X_ELEMENT_VERSION_ID       => l_tmp_struct_ver_id        --  added for bug Fix: 4537865
13409       ,X_PROJ_ELEMENT_ID              => l_structure_ver_rec.proj_element_id
13410       ,X_OBJECT_TYPE                  => 'PA_STRUCTURES'
13411       ,X_PROJECT_ID                   => l_project_id
13412       ,X_PARENT_STRUCTURE_VERSION_ID  => l_new_struct_ver_id
13413       ,X_DISPLAY_SEQUENCE             => NULL
13414       ,X_WBS_LEVEL                    => NULL
13415       ,X_WBS_NUMBER                   => '0'
13416       ,X_ATTRIBUTE_CATEGORY           => l_structure_ver_rec.attribute_category
13417       ,X_ATTRIBUTE1                   => l_structure_ver_rec.attribute1
13418       ,X_ATTRIBUTE2                   => l_structure_ver_rec.attribute2
13419       ,X_ATTRIBUTE3                   => l_structure_ver_rec.attribute3
13420       ,X_ATTRIBUTE4                   => l_structure_ver_rec.attribute4
13421       ,X_ATTRIBUTE5                   => l_structure_ver_rec.attribute5
13422       ,X_ATTRIBUTE6                   => l_structure_ver_rec.attribute6
13423       ,X_ATTRIBUTE7                   => l_structure_ver_rec.attribute7
13424       ,X_ATTRIBUTE8                   => l_structure_ver_rec.attribute8
13425       ,X_ATTRIBUTE9                   => l_structure_ver_rec.attribute9
13426       ,X_ATTRIBUTE10                  => l_structure_ver_rec.attribute10
13427       ,X_ATTRIBUTE11                  => l_structure_ver_rec.attribute11
13428       ,X_ATTRIBUTE12                  => l_structure_ver_rec.attribute12
13429       ,X_ATTRIBUTE13                  => l_structure_ver_rec.attribute13
13430       ,X_ATTRIBUTE14                  => l_structure_ver_rec.attribute14
13431       ,X_ATTRIBUTE15                  => l_structure_ver_rec.element_version_id
13432       ,X_TASK_UNPUB_VER_STATUS_CODE   => NULL
13433             ,X_SOURCE_OBJECT_ID             => l_project_id
13434       ,X_SOURCE_OBJECT_TYPE           => 'PA_PROJECTS'
13435     );
13436       -- added for bug Fix: 4537865
13437      l_new_struct_ver_id := l_tmp_struct_ver_id;
13438       -- added for bug Fix: 4537865
13439 
13440 /*
13441   PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
13442   ( p_validate_only         => p_validate_only
13443    ,p_structure_id          => l_structure_ver_rec.proj_element_id
13444    ,p_attribute_category    => l_structure_ver_rec.attribute_category
13445    ,p_attribute1            => l_structure_ver_rec.attribute1
13446    ,p_attribute2            => l_structure_ver_rec.attribute2
13447    ,p_attribute3            => l_structure_ver_rec.attribute3
13448    ,p_attribute4            => l_structure_ver_rec.attribute4
13449    ,p_attribute5            => l_structure_ver_rec.attribute5
13450    ,p_attribute6            => l_structure_ver_rec.attribute6
13451    ,p_attribute7            => l_structure_ver_rec.attribute7
13452    ,p_attribute8            => l_structure_ver_rec.attribute8
13453    ,p_attribute9            => l_structure_ver_rec.attribute9
13454    ,p_attribute10           => l_structure_ver_rec.attribute10
13455    ,p_attribute11           => l_structure_ver_rec.attribute11
13456    ,p_attribute12           => l_structure_ver_rec.attribute12
13457    ,p_attribute13           => l_structure_ver_rec.attribute13
13458    ,p_attribute14           => l_structure_ver_rec.attribute14
13459    ,p_attribute15           => l_structure_ver_rec.element_version_id  --fix bug 2833989: replaced l_structure_ver_rec.attribute15
13460    ,x_structure_version_id  => l_new_struct_ver_id
13461    ,x_return_status         => l_return_status
13462    ,x_msg_count             => l_msg_count
13463    ,x_msg_data              => l_msg_data );
13464 */
13465 
13466   If (p_debug_mode = 'Y') THEN
13467     pa_debug.debug('Create Structure Version Bulk return status: ' || l_return_status);
13468     pa_debug.debug('l_new_struct_ver_id: ' || l_new_struct_ver_id);
13469   END IF;
13470 
13471 
13472   --Check if there is any error.
13473   l_msg_count := FND_MSG_PUB.count_msg;
13474   IF l_msg_count > 0 THEN
13475     x_msg_count := l_msg_count;
13476     IF x_msg_count = 1 THEN
13477       x_msg_data := l_msg_data;
13478     END IF;
13479     RAISE FND_API.G_EXC_ERROR;
13480   END IF;
13481 
13482    -- Get structure version attributes
13483   OPEN l_get_structure_ver_attr_csr(p_structure_version_id);
13484   FETCH l_get_structure_ver_attr_csr INTO l_structure_ver_attr_rec;
13485   CLOSE l_get_structure_ver_attr_csr;
13486 
13487   If (p_change_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
13488     l_structure_ver_attr_rec.change_reason_code := p_change_reason_code;
13489   END IF;
13490 
13491   PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
13492   ( p_validate_only               => FND_API.G_FALSE
13493    ,p_structure_version_id        => l_new_struct_ver_id
13494    ,p_structure_version_name      => p_new_struct_ver_name
13495    ,p_structure_version_desc      => p_new_struct_ver_desc
13496    ,p_effective_date              => l_structure_ver_attr_rec.effective_date
13497    ,p_latest_eff_published_flag   => l_structure_ver_attr_rec.latest_eff_published_flag
13498    ,p_locked_status_code          => l_structure_ver_attr_rec.lock_status_code
13499    ,p_struct_version_status_code  => l_structure_ver_attr_rec.status_code
13500    ,p_baseline_current_flag       => l_structure_ver_attr_rec.current_flag
13501    ,p_baseline_original_flag      => l_structure_ver_attr_rec.original_flag
13502    ,p_change_reason_code          => l_structure_ver_attr_rec.change_reason_code
13503    ,x_pev_structure_id            => l_pev_structure_id
13504    ,x_return_status               => l_return_status
13505    ,x_msg_count                   => l_msg_count
13506    ,x_msg_data                    => l_msg_data );
13507 
13508   IF (p_debug_mode = 'Y') THEN
13509     pa_debug.debug('Create Structure Version Bulk Attr return status: ' || l_return_status);
13510     pa_debug.debug('l_pev_structure_id: ' || l_pev_structure_id);
13511   END IF;
13512 
13513   --Check if there is any error.
13514   l_msg_count := FND_MSG_PUB.count_msg;
13515   IF l_msg_count > 0 THEN
13516     x_msg_count := l_msg_count;
13517     IF x_msg_count = 1 THEN
13518       x_msg_data := l_msg_data;
13519     END IF;
13520     RAISE FND_API.G_EXC_ERROR;
13521   END IF;
13522 
13523   --Search for outgoing links for the structure version; create new Links
13524   -- Amit: Code(get_to_id) which was commented earlier is removed. If needed it can be found from COPY_STRUCTURE_VERSION
13525 
13526   --hsiu: added to check for structure type
13527   l_wp_struc := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
13528   l_fin_struc:= PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'FINANCIAL');
13529 
13530   OPEN l_get_structure_type_csr(p_structure_version_id);
13531   FETCH l_get_structure_type_csr INTO l_structure_type;
13532   CLOSE l_get_structure_type_csr;
13533 
13534   -- If structure is workplan type create schedule version record
13535 --  if l_structure_type = 'WORKPLAN' then
13536   IF (l_wp_struc = 'Y') THEN
13537 
13538     OPEN l_get_ver_schedule_attr_csr(p_structure_version_id);
13539     FETCH l_get_ver_schedule_attr_csr INTO l_ver_schedule_attr_rec;
13540     CLOSE l_get_ver_schedule_attr_csr;
13541 
13542   -- Amit: Code(PA_TASK_PUB1.CREATE_SCHEDULE_VERSION) which was commented earlier is removed.
13543   -- If needed it can be found from COPY_STRUCTURE_VERSION
13544 
13545     l_pev_schedule_id := NULL;
13546     PA_PROJ_ELEMENT_SCH_PKG.Insert_Row(
13547          X_ROW_ID               => X_Row_Id
13548         ,X_PEV_SCHEDULE_ID          => l_pev_schedule_id
13549         ,X_ELEMENT_VERSION_ID           => l_new_struct_ver_id
13550         ,X_PROJECT_ID               => l_ver_schedule_attr_rec.PROJECT_ID
13551         ,X_PROJ_ELEMENT_ID          => l_ver_schedule_attr_rec.PROJ_ELEMENT_ID
13552         ,X_SCHEDULED_START_DATE         => l_ver_schedule_attr_rec.SCHEDULED_START_DATE
13553         ,X_SCHEDULED_FINISH_DATE        => l_ver_schedule_attr_rec.SCHEDULED_FINISH_DATE
13554         ,X_OBLIGATION_START_DATE        => l_ver_schedule_attr_rec.OBLIGATION_START_DATE
13555         ,X_OBLIGATION_FINISH_DATE       => l_ver_schedule_attr_rec.OBLIGATION_FINISH_DATE
13556         ,X_ACTUAL_START_DATE            => l_ver_schedule_attr_rec.ACTUAL_START_DATE
13557         ,X_ACTUAL_FINISH_DATE           => l_ver_schedule_attr_rec.ACTUAL_FINISH_DATE
13558         ,X_ESTIMATED_START_DATE         => l_ver_schedule_attr_rec.ESTIMATED_START_DATE
13559         ,X_ESTIMATED_FINISH_DATE        => l_ver_schedule_attr_rec.ESTIMATED_FINISH_DATE
13560         ,X_DURATION             => l_ver_schedule_attr_rec.DURATION
13561         ,X_EARLY_START_DATE         => l_ver_schedule_attr_rec.EARLY_START_DATE
13562         ,X_EARLY_FINISH_DATE            => l_ver_schedule_attr_rec.EARLY_FINISH_DATE
13563         ,X_LATE_START_DATE          => l_ver_schedule_attr_rec.LATE_START_DATE
13564         ,X_LATE_FINISH_DATE         => l_ver_schedule_attr_rec.LATE_FINISH_DATE
13565         ,X_CALENDAR_ID              => l_ver_schedule_attr_rec.CALENDAR_ID
13566         ,X_MILESTONE_FLAG           => l_ver_schedule_attr_rec.MILESTONE_FLAG
13567         ,X_CRITICAL_FLAG            => l_ver_schedule_attr_rec.CRITICAL_FLAG
13568         ,X_WQ_PLANNED_QUANTITY          => l_ver_schedule_attr_rec.wq_planned_quantity
13569         ,X_PLANNED_EFFORT           => l_ver_schedule_attr_rec.planned_effort
13570         ,X_ACTUAL_DURATION          => l_ver_schedule_attr_rec.actual_duration
13571         ,X_ESTIMATED_DURATION           => l_ver_schedule_attr_rec.estimated_duration
13572         ,X_ATTRIBUTE_CATEGORY           => l_ver_schedule_attr_rec.ATTRIBUTE_CATEGORY
13573         ,X_ATTRIBUTE1               => l_ver_schedule_attr_rec.ATTRIBUTE1
13574         ,X_ATTRIBUTE2               => l_ver_schedule_attr_rec.ATTRIBUTE2
13575         ,X_ATTRIBUTE3               => l_ver_schedule_attr_rec.ATTRIBUTE3
13576         ,X_ATTRIBUTE4               => l_ver_schedule_attr_rec.ATTRIBUTE4
13577         ,X_ATTRIBUTE5               => l_ver_schedule_attr_rec.ATTRIBUTE5
13578         ,X_ATTRIBUTE6               => l_ver_schedule_attr_rec.ATTRIBUTE6
13579         ,X_ATTRIBUTE7               => l_ver_schedule_attr_rec.ATTRIBUTE7
13580         ,X_ATTRIBUTE8               => l_ver_schedule_attr_rec.ATTRIBUTE8
13581         ,X_ATTRIBUTE9               => l_ver_schedule_attr_rec.ATTRIBUTE9
13582         ,X_ATTRIBUTE10              => l_ver_schedule_attr_rec.ATTRIBUTE10
13583         ,X_ATTRIBUTE11              => l_ver_schedule_attr_rec.ATTRIBUTE11
13584         ,X_ATTRIBUTE12              => l_ver_schedule_attr_rec.ATTRIBUTE12
13585         ,X_ATTRIBUTE13              => l_ver_schedule_attr_rec.ATTRIBUTE13
13586         ,X_ATTRIBUTE14              => l_ver_schedule_attr_rec.ATTRIBUTE14
13587         ,X_ATTRIBUTE15              => l_ver_schedule_attr_rec.ATTRIBUTE15
13588     ,X_SOURCE_OBJECT_ID   => l_ver_schedule_attr_rec.PROJECT_ID
13589         ,X_SOURCE_OBJECT_TYPE => 'PA_PROJECTS'
13590     );
13591 
13592 
13593     IF (p_debug_mode = 'Y') THEN
13594       pa_debug.debug('Create Schedule Version Bulk return status: ' || l_return_status);
13595       pa_debug.debug('l_pev_schedule_id: ' || l_pev_schedule_id);
13596     END IF;
13597 
13598     --Check if there is any error.
13599     l_msg_count := FND_MSG_PUB.count_msg;
13600     IF l_msg_count > 0 THEN
13601       x_msg_count := l_msg_count;
13602       IF x_msg_count = 1 THEN
13603         x_msg_data := l_msg_data;
13604       END IF;
13605       RAISE FND_API.G_EXC_ERROR;
13606     END IF;
13607   END IF;
13608 
13609 --  ELSIF l_structure_type in ('FINANCIAL') then
13610   IF l_wp_struc = 'N' and l_fin_struc = 'Y' THEN
13611     -- There can only be one working version any any time for a financial structure
13612     OPEN l_check_working_versions_csr(p_structure_version_id);
13613     FETCH l_check_working_versions_csr INTO l_dummy;
13614     if l_check_working_versions_csr%FOUND then
13615       CLOSE l_check_working_versions_csr;
13616       PA_UTILS.ADD_MESSAGE('PA','PA_PS_WORKING_VER_EXISTS');
13617       x_msg_data := 'PA_PS_WORKING_VER_EXISTS';
13618       RAISE FND_API.G_EXC_ERROR;
13619     end if;
13620     CLOSE l_check_working_versions_csr;
13621   end if;
13622 
13623   -- Amit The code to get all the task versions and then create task versions one by one is commented
13624   -- Now we are using bulk insert for this purpose.
13625 
13626     l_user_id := FND_GLOBAl.user_id;
13627     l_login_id := FND_GLOBAl.login_id;
13628 
13629     INSERT INTO pa_proj_element_versions(
13630                      ELEMENT_VERSION_ID
13631                     ,PROJ_ELEMENT_ID
13632                     ,OBJECT_TYPE
13633                     ,PROJECT_ID
13634                     ,PARENT_STRUCTURE_VERSION_ID
13635                     ,DISPLAY_SEQUENCE
13636                     ,WBS_LEVEL
13637                     ,WBS_NUMBER
13638                     ,CREATION_DATE
13639                     ,CREATED_BY
13640                     ,LAST_UPDATE_DATE
13641                     ,LAST_UPDATED_BY
13642                     ,LAST_UPDATE_LOGIN
13643                     ,RECORD_VERSION_NUMBER
13644                     ,ATTRIBUTE_CATEGORY
13645                      ,ATTRIBUTE1
13646                      ,ATTRIBUTE2
13647                      ,ATTRIBUTE3
13648                      ,ATTRIBUTE4
13649                      ,ATTRIBUTE5
13650                      ,ATTRIBUTE6
13651                      ,ATTRIBUTE7
13652                      ,ATTRIBUTE8
13653                      ,ATTRIBUTE9
13654                      ,ATTRIBUTE10
13655                      ,ATTRIBUTE11
13656                      ,ATTRIBUTE12
13657                      ,ATTRIBUTE13
13658                      ,ATTRIBUTE14
13659                      ,TASK_UNPUB_VER_STATUS_CODE
13660                      ,FINANCIAL_TASK_FLAG
13661                     ,attribute15          --this column is used to store structure ver id of the source str to be used to created relationships.
13662             ,source_object_id
13663                     ,source_object_type
13664                     )
13665                   SELECT
13666                      pa_proj_element_versions_s.nextval
13667                     ,ppev.proj_element_id
13668                     ,ppev.object_type
13669                     ,l_project_id
13670                     ,l_new_struct_ver_id
13671                     ,ppev.display_sequence
13672                     ,ppev.WBS_LEVEL
13673                     ,ppev.WBS_NUMBER
13674                     ,SYSDATE
13675                     ,l_user_id
13676                     ,SYSDATE
13677                     ,l_user_id
13678                     ,l_login_id
13679                      ,ppev.RECORD_VERSION_NUMBER
13680                      ,ppev.ATTRIBUTE_CATEGORY
13681                      ,ppev.ATTRIBUTE1
13682                      ,ppev.ATTRIBUTE2
13683                      ,ppev.ATTRIBUTE3
13684                      ,ppev.ATTRIBUTE4
13685                      ,ppev.ATTRIBUTE5
13686                      ,ppev.ATTRIBUTE6
13687                      ,ppev.ATTRIBUTE7
13688                      ,ppev.ATTRIBUTE8
13689                      ,ppev.ATTRIBUTE9
13690                      ,ppev.ATTRIBUTE10
13691                      ,ppev.ATTRIBUTE11
13692                      ,ppev.ATTRIBUTE12
13693                      ,ppev.ATTRIBUTE13
13694                      ,ppev.ATTRIBUTE14
13695                      ,ppev.TASK_UNPUB_VER_STATUS_CODE
13696                      ,ppev.FINANCIAL_TASK_FLAG
13697                      ,ppev.element_version_id
13698              ,l_project_id
13699              ,'PA_PROJECTS'
13700                   FROM ( SELECT ppev2.* from pa_proj_element_versions ppev2
13701                   ,pa_proj_elements ppe  --bug 4573340
13702                           WHERE -- bug#3094283 ppev2.project_id = l_project_id
13703                             ppev2.parent_structure_version_id = p_structure_version_id
13704                          --bug 4573340
13705                             and ppe.project_id = ppev2.project_id
13706                             and ppe.proj_element_id = ppev2.proj_element_id
13707                             and ppe.link_task_flag = 'N'
13708                          --bug 4573340
13709                             and ppev2.object_type = 'PA_TASKS'
13710                            order by ppev2.display_sequence ) ppev
13711                     ;
13712            -- Bug 4205167 : Added hint to use Hash Join
13713               INSERT INTO PA_OBJECT_RELATIONSHIPS (
13714                                   object_relationship_id,
13715                                   object_type_from,
13716                                   object_id_from1,
13717                                   object_type_to,
13718                                   object_id_to1,
13719                                   relationship_type,
13720                                   relationship_subtype,
13721                                   Record_Version_Number,
13722                                   CREATED_BY,
13723                                   CREATION_DATE,
13724                                   LAST_UPDATED_BY,
13725                                   LAST_UPDATE_DATE,
13726                                   LAST_UPDATE_LOGIN,
13727                                   weighting_percentage
13728                                   )
13729                  SELECT /*+ USE_HASH(ppev2 ppev1)*/
13730                                pa_object_relationships_s.nextval,
13731                                pobj.object_type_from,
13732                            ppev1.element_version_id,
13733                    pobj.object_type_to,
13734                    ppev2.element_version_id,
13735                    pobj.relationship_type,
13736                    pobj.relationship_subtype,
13737                                pobj.Record_Version_Number,
13738                                l_user_id,
13739                                SYSDATE,
13740                                l_user_id,
13741                                SYSDATE,
13742                                l_login_id,
13743                                pobj.weighting_percentage
13744                     FROM ( SELECT  object_type_from, object_id_from1,
13745                                    object_type_to,   object_id_to1,
13746                                    relationship_type, relationship_subtype,
13747                                    Record_Version_Number, weighting_percentage
13748                              FROM pa_object_relationships
13749                      --bug#3094283       WHERE RELATIONSHIP_TYPE = 'S'
13750                              start with object_id_from1 = p_structure_version_id
13751                   and RELATIONSHIP_TYPE = 'S'  /* Bug 2881667 - Added this condition */
13752                              connect by  object_id_from1 =  prior object_id_to1
13753                               and RELATIONSHIP_TYPE = 'S' ) pobj,   /* Bug 2881667 - Added this condition */
13754                          pa_proj_element_versions ppev1,
13755                          pa_proj_element_versions ppev2
13756                  WHERE
13757                    --bug#3094283    ppev1.project_id = l_project_id
13758                    ppev1.attribute15 = pobj.object_id_from1
13759                    --bug#3094283 AND ppev2.project_id = l_project_id
13760                    AND ppev2.attribute15 = pobj.object_id_to1
13761                    and ppev1.parent_structure_version_id = l_new_struct_ver_id
13762                    and ppev2.parent_structure_version_id = l_new_struct_ver_id
13763                    ;
13764 
13765 
13766               INSERT INTO pa_proj_elem_ver_schedule(
13767                             PEV_SCHEDULE_ID
13768                            ,ELEMENT_VERSION_ID
13769                            ,PROJECT_ID
13770                            ,PROJ_ELEMENT_ID
13771                            ,CREATION_DATE
13772                            ,CREATED_BY
13773                            ,LAST_UPDATE_DATE
13774                            ,LAST_UPDATED_BY
13775                            ,SCHEDULED_START_DATE
13776                            ,SCHEDULED_FINISH_DATE
13777                            ,OBLIGATION_START_DATE
13778                            ,OBLIGATION_FINISH_DATE
13779                            ,ACTUAL_START_DATE
13780                            ,ACTUAL_FINISH_DATE
13781                            ,ESTIMATED_START_DATE
13782                            ,ESTIMATED_FINISH_DATE
13783                            ,DURATION
13784                            ,EARLY_START_DATE
13785                            ,EARLY_FINISH_DATE
13786                            ,LATE_START_DATE
13787                            ,LATE_FINISH_DATE
13788                            ,CALENDAR_ID
13789                            ,MILESTONE_FLAG
13790                            ,CRITICAL_FLAG
13791                            ,RECORD_VERSION_NUMBER
13792                            ,LAST_UPDATE_LOGIN
13793                            ,WQ_PLANNED_QUANTITY
13794                            ,PLANNED_EFFORT
13795                            ,ACTUAL_DURATION
13796                            ,ESTIMATED_DURATION
13797                            ,ATTRIBUTE_CATEGORY
13798                            ,ATTRIBUTE1
13799                            ,ATTRIBUTE2
13800                            ,ATTRIBUTE3
13801                            ,ATTRIBUTE4
13802                            ,ATTRIBUTE5
13803                            ,ATTRIBUTE6
13804                            ,ATTRIBUTE7
13805                            ,ATTRIBUTE8
13806                            ,ATTRIBUTE9
13807                            ,ATTRIBUTE10
13808                            ,ATTRIBUTE11
13809                            ,ATTRIBUTE12
13810                            ,ATTRIBUTE13
13811                            ,ATTRIBUTE14
13812                            ,ATTRIBUTE15
13813                ,source_object_id
13814                ,source_object_type
13815                ,CONSTRAINT_TYPE_CODE
13816                ,CONSTRAINT_DATE
13817                ,FREE_SLACK
13818                ,TOTAL_SLACK
13819                ,EFFORT_DRIVEN_FLAG
13820                ,LEVEL_ASSIGNMENTS_FLAG
13821                ,EXT_ACT_DURATION
13822                ,EXT_REMAIN_DURATION
13823                ,EXT_SCH_DURATION
13824            ,DEF_SCH_TOOL_TSK_TYPE_CODE -- Fix For Bug # 4321287.
13825                               )
13826                         SELECT
13827                             pa_proj_elem_ver_schedule_s.nextval
13828                            ,ppev1.ELEMENT_VERSION_ID
13829                            ,l_PROJECT_ID
13830                            ,ppev1.PROJ_ELEMENT_ID
13831                            ,SYSDATE
13832                            ,l_user_id
13833                            ,SYSDATE
13834                            ,l_user_id
13835                            ,ppevs.SCHEDULED_START_DATE
13836                            ,ppevs.SCHEDULED_FINISH_DATE
13837                            ,ppevs.OBLIGATION_START_DATE
13838                            ,ppevs.OBLIGATION_FINISH_DATE
13839                            ,ppevs.ACTUAL_START_DATE
13840                            ,ppevs.ACTUAL_FINISH_DATE
13841                            ,ppevs.ESTIMATED_START_DATE
13842                            ,ppevs.ESTIMATED_FINISH_DATE
13843                            ,ppevs.DURATION
13844                            ,ppevs.EARLY_START_DATE
13845                            ,ppevs.EARLY_FINISH_DATE
13846                            ,ppevs.LATE_START_DATE
13847                            ,ppevs.LATE_FINISH_DATE
13848                            ,ppevs.CALENDAR_ID
13849                            ,ppevs.MILESTONE_FLAG
13850                            ,ppevs.CRITICAL_FLAG
13851                            ,ppevs.RECORD_VERSION_NUMBER
13852                            ,l_login_id
13853                            ,ppevs.WQ_PLANNED_QUANTITY
13854                            ,ppevs.PLANNED_EFFORT
13855                            ,ppevs.ACTUAL_DURATION
13856                            ,ppevs.ESTIMATED_DURATION
13857                            ,ppevs.ATTRIBUTE_CATEGORY
13858                            ,ppevs.ATTRIBUTE1
13859                            ,ppevs.ATTRIBUTE2
13860                            ,ppevs.ATTRIBUTE3
13861                            ,ppevs.ATTRIBUTE4
13862                            ,ppevs.ATTRIBUTE5
13863                            ,ppevs.ATTRIBUTE6
13864                            ,ppevs.ATTRIBUTE7
13865                            ,ppevs.ATTRIBUTE8
13866                            ,ppevs.ATTRIBUTE9
13867                            ,ppevs.ATTRIBUTE10
13868                            ,ppevs.ATTRIBUTE11
13869                            ,ppevs.ATTRIBUTE12
13870                            ,ppevs.ATTRIBUTE13
13871                            ,ppevs.ATTRIBUTE14
13872                            ,ppevs.ATTRIBUTE15
13873                ,l_PROJECT_ID
13874                ,'PA_PROJECTS'
13875                ,ppevs.CONSTRAINT_TYPE_CODE
13876                ,ppevs.CONSTRAINT_DATE
13877                ,ppevs.FREE_SLACK
13878                ,ppevs.TOTAL_SLACK
13879                ,ppevs.EFFORT_DRIVEN_FLAG
13880                ,ppevs.LEVEL_ASSIGNMENTS_FLAG
13881                ,ppevs.EXT_ACT_DURATION
13882                ,ppevs.EXT_REMAIN_DURATION
13883                ,ppevs.EXT_SCH_DURATION
13884            ,ppevs.DEF_SCH_TOOL_TSK_TYPE_CODE -- Fix For Bug # 4321287.
13885                          FROM pa_proj_elem_ver_schedule ppevs,
13886                               pa_proj_element_versions ppev1
13887                            where ppev1.attribute15 = ppevs.element_version_id
13888                             and  ppevs.project_id = l_project_id
13889                             and  ppev1.project_id = l_project_id
13890                             and  ppev1.parent_structure_version_id = l_new_struct_ver_id
13891                             and  ppev1.object_type = 'PA_TASKS';
13892 
13893     -----------------------------------------FP_M Changes : Begin
13894     -- Refer to tracking bug 3305199
13895     --
13896     Declare
13897           /* Bug #: 3305199 SMukka                                                         */
13898           /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13899       /* Old_Versions_Tab  PA_PLSQL_DATATYPES.IdTabTyp;                                */
13900       /* New_Versions_Tab  PA_PLSQL_DATATYPES.IdTabTyp;                                */
13901       Old_Versions_Tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13902       New_Versions_Tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13903     Begin
13904       Select Element_Version_ID, attribute15 BULK COLLECT
13905       INTO   New_Versions_Tab, Old_Versions_Tab
13906       From   PA_Proj_Element_Versions
13907       Where  Project_ID = l_project_id
13908       AND    parent_structure_version_id = l_new_struct_ver_id;
13909 
13910       PA_Relationship_Pvt.Copy_Intra_Dependency (
13911         P_Source_Ver_Tbl  => Old_Versions_Tab,
13912         P_Destin_Ver_Tbl  => New_Versions_Tab,
13913         X_Return_Status   => X_Return_Status,
13914         X_Msg_Count     => X_Msg_Count,
13915         X_Msg_Data      => X_Msg_Data
13916       );
13917 
13918           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13919              RAISE FND_API.G_EXC_ERROR;
13920           END IF;
13921 
13922           PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
13923         P_Source_Ver_Tbl     => Old_Versions_Tab,
13924         P_Destin_Ver_Tbl     => New_Versions_Tab,
13925         X_Return_Status      => X_Return_Status,
13926         X_Msg_Count          => X_Msg_Count,
13927         X_Msg_Data           => X_Msg_Data
13928           );
13929           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13930              RAISE FND_API.G_EXC_ERROR;
13931           END IF;
13932     End;
13933         /* SMukka 01-Mar-04 Bug No. 3450684                                            */
13934         /* Added call to PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass               */
13935         /* API to copy all the out going sub project assoication                       */
13936 
13937     -- Begin fix for Bug # 4530436.
13938 
13939     -- The out going sub-project association links will not copied into the new structure version
13940     -- if the new structure version created is a working structure version.
13941 
13942     if
13943       (pa_project_structure_utils.Check_Struc_Ver_Published(l_project_id, l_new_struct_ver_id) = 'Y')
13944     then
13945 
13946     -- End fix for Bug # 4530436.
13947 
13948         PA_RELATIONSHIP_PVT.Copy_OG_Lnk_For_Subproj_Ass(
13949                                       p_validate_only           =>  p_validate_only,
13950                                       p_validation_level        =>  p_validation_level,
13951                                       p_calling_module          =>  p_calling_module,
13952                                       p_debug_mode              =>  p_debug_mode,
13953                                       p_max_msg_count           =>  p_max_msg_count,
13954                                       p_commit                  =>  p_commit,
13955                                       p_src_str_version_id      =>  p_structure_version_id,
13956                                       p_dest_str_version_id     =>  l_new_struct_ver_id,  -- Destination Str version id can be of published str also
13957                                       x_return_status           =>  X_Return_Status,
13958                                       x_msg_count               =>  X_Msg_Count,
13959                                       x_msg_data                =>  X_Msg_Data);
13960         IF (X_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
13961            x_msg_count := FND_MSG_PUB.count_msg;
13962            IF x_msg_count = 1 then
13963               pa_interface_utils_pub.get_messages
13964                    (p_encoded        => FND_API.G_TRUE,
13965                     p_msg_index      => 1,
13966                     p_msg_count      => l_msg_count,
13967                     p_msg_data       => l_msg_data,
13968                     p_data           => l_data,
13969                     p_msg_index_out  => l_msg_index_out);
13970                     x_msg_data := l_data;
13971            END IF;
13972            raise FND_API.G_EXC_ERROR;
13973         END IF;
13974 
13975     end if; -- Fix for Bug # 4530436.
13976 
13977       --3755117 for copying mapping
13978       BEGIN
13979         PA_PROJ_STRUC_MAPPING_PUB.copy_mapping(
13980            p_context             => 'CREATE_WORKING_VERSION'
13981           ,p_src_project_id      => l_project_id
13982           ,p_dest_project_id     => l_project_id
13983           ,p_src_str_version_id  => p_structure_version_id
13984           ,p_dest_str_version_id => l_new_struct_ver_id
13985           ,x_return_status       => x_return_status
13986           ,x_msg_count           => x_msg_count
13987           ,x_msg_data            => x_msg_data
13988         );
13989 
13990         IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13991            RAISE FND_API.G_EXC_ERROR;
13992         END IF;
13993       EXCEPTION
13994         WHEN OTHERS THEN
13995           fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
13996                                   p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
13997                                   p_error_text     => SUBSTRB('PA_PROJ_STRUC_MAPPING_PUB.copy_mapping:'||SQLERRM,1,240));
13998         RAISE FND_API.G_EXC_ERROR;
13999       END;
14000 
14001         -- Changes added by skannoji
14002         -- Added code for doosan customer
14003       IF (l_wp_struc = 'Y') THEN
14004         Declare
14005       /* Bug #: 3305199 SMukka                                                         */
14006           /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
14007           /* src_versions_tab   PA_PLSQL_DATATYPES.IdTabTyp;                               */
14008           /* dest_versions_tab  PA_PLSQL_DATATYPES.IdTabTyp;                               */
14009           src_versions_tab   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
14010           dest_versions_tab  SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
14011         Begin
14012            src_versions_tab.extend(1); /* Venky */
14013            dest_versions_tab.extend(1); /* Venky */
14014            src_versions_tab(1)  :=  p_structure_version_id;
14015            dest_versions_tab(1) :=  l_new_struct_ver_id;
14016 
14017           -- Copies budget versions, resource assignments and budget lines as required for the workplan version.
14018            /*Smukka Bug No. 3474141 Date 03/01/2004                                    */
14019            /*moved PA_FP_COPY_FROM_PKG.copy_wp_budget_versions into plsql block        */
14020            BEGIN
14021                PA_FP_COPY_FROM_PKG.copy_wp_budget_versions
14022                (
14023                  p_source_project_id            => l_project_id
14024                 ,p_target_project_id            => l_project_id
14025                 ,p_src_sv_ids_tbl               => src_Versions_Tab /* Workplan version id tbl */
14026                 ,p_target_sv_ids_tbl            => dest_Versions_Tab /* Workplan version id tbl */
14027                 ,p_copy_mode                    => 'V'     --bug  5118313
14028                 ,x_return_status                => x_return_status
14029                 ,x_msg_count                    => x_msg_count
14030                 ,x_Msg_data                     => x_msg_data
14031                );
14032            EXCEPTION
14033                WHEN OTHERS THEN
14034                     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
14035                                             p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
14036                                             p_error_text     => SUBSTRB('PA_FP_COPY_FROM_PKG.copy_wp_budget_versions:'||SQLERRM,1,240));
14037                RAISE FND_API.G_EXC_ERROR;
14038            END;
14039           IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
14040              RAISE FND_API.G_EXC_ERROR;
14041           END IF;
14042         End;
14043       END IF;
14044         -- till here by skannoji
14045 
14046     -----------------------------------------FP_M Changes : End
14047 
14048       UPDATE pa_proj_element_versions ppevs1
14049          SET attribute15 = ( select attribute15 from pa_proj_element_versions ppevs2
14050                           where ppevs2.project_id = l_project_id
14051                             and parent_structure_version_id = p_structure_version_id
14052                             and ppevs2.element_version_id = ppevs1.attribute15
14053                              )
14054           WHERE project_id = l_project_id
14055         AND parent_structure_version_id = l_new_struct_ver_id
14056        ;
14057 
14058 
14059   x_new_struct_ver_id := l_new_struct_ver_id;
14060   x_return_status := FND_API.G_RET_STS_SUCCESS;
14061 
14062   IF (p_commit = FND_API.G_TRUE) THEN
14063     COMMIT;
14064   END IF;
14065 
14066   IF (p_debug_mode = 'Y') THEN
14067     pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.COPY_STRUCTURE_VERSION_BULK END');
14068   END IF;
14069 
14070 EXCEPTION
14071   when FND_API.G_EXC_ERROR then
14072     if p_commit = FND_API.G_TRUE then
14073       rollback to copy_structure_version_pvt_blk;
14074     end if;
14075     x_return_status := FND_API.G_RET_STS_ERROR;
14076   when FND_API.G_EXC_UNEXPECTED_ERROR then
14077     if p_commit = FND_API.G_TRUE then
14078       rollback to copy_structure_version_pvt_blk;
14079     end if;
14080     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14081     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
14082                             p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
14083                             p_error_text     => SUBSTRB(SQLERRM,1,240));
14084   when OTHERS then
14085     if p_commit = FND_API.G_TRUE then
14086       rollback to copy_structure_version_pvt_blk;
14087     end if;
14088     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14089     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
14090                             p_procedure_name => 'COPY_STRUCTURE_VERSION_BULK',
14091                             p_error_text     => SUBSTRB(SQLERRM,1,240));
14092     raise;
14093 END COPY_STRUCTURE_VERSION_BULK;
14094 
14095 procedure update_sch_dirty_flag(
14096      p_project_id           IN NUMBER := NULL
14097     ,p_structure_version_id IN NUMBER
14098     ,p_dirty_flag           IN VARCHAR2 := 'N'
14099     ,x_return_status        OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14100     ,x_msg_count            OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
14101     ,x_msg_data             OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14102 )
14103 IS
14104   l_dirty_flag    VARCHAR2(1);
14105   l_return_status VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
14106 
14107    --Bug No 3634334
14108    --Commented the following query for performance reason and rewritten the same.
14109    --Getting the project_id from pa_proj_element_versions table instead of getting
14110    --it from pa_proj_elem_ver_structure table, in this optimizer will be using the
14111    --unique index on element_version_id and functionally the process is fetching
14112    --project_id
14113 /*  CURSOR get_proj_id(cp_structure_version_id NUMBER) IS
14114   SELECT project_id
14115     FROM pa_proj_elem_ver_structure
14116    WHERE element_version_id = cp_structure_version_id;*/
14117 
14118   CURSOR get_proj_id(cp_structure_version_id NUMBER) IS
14119   SELECT project_id
14120     FROM pa_proj_element_versions
14121    WHERE element_version_id = cp_structure_version_id;
14122    l_proj_id   NUMBER;
14123 BEGIN
14124 
14125 /*  IF (p_dirty_flag = 'N') THEN
14126     l_dirty_flag := 'N';
14127   ELSE
14128     l_dirty_flag := 'Y';
14129   END IF;*/
14130 
14131   IF (p_dirty_flag IS NULL) THEN
14132     l_dirty_flag := 'N';
14133   ELSE
14134     l_dirty_flag := p_dirty_flag;
14135   END IF;
14136 --
14137   IF p_project_id IS NULL THEN
14138      OPEN get_proj_id(p_structure_version_id);
14139      FETCH get_proj_id INTO l_proj_id;
14140      CLOSE get_proj_id;
14141 --
14142      UPDATE pa_proj_elem_ver_structure
14143         SET SCHEDULE_DIRTY_FLAG = l_dirty_flag
14144       WHERE element_version_id = p_structure_version_id
14145          AND project_id = l_proj_id;
14146   ELSE
14147      UPDATE pa_proj_elem_ver_structure
14148         SET SCHEDULE_DIRTY_FLAG = l_dirty_flag
14149       WHERE element_version_id = p_structure_version_id
14150         AND project_id = p_project_id;
14151   END IF;
14152 
14153   x_return_status := l_return_status;
14154 EXCEPTION
14155   WHEN OTHERS THEN
14156     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14157     x_msg_count := FND_MSG_PUB.count_msg;
14158     --put message
14159     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
14160                             p_procedure_name => 'update_sch_dirty_flag',
14161                             p_error_text     => SUBSTRB(SQLERRM,1,240));
14162     RAISE;
14163 END update_sch_dirty_flag;
14164 
14165 --bug 3305199
14166 --Please refer to update_structures_setup_old for old code
14167   PROCEDURE update_structures_setup_attr
14168   (  p_api_version      IN  NUMBER     := 1.0
14169     ,p_init_msg_list    IN  VARCHAR2   := FND_API.G_TRUE
14170     ,p_commit           IN  VARCHAR2   := FND_API.G_FALSE
14171     ,p_validate_only    IN  VARCHAR2   := FND_API.G_TRUE
14172     ,p_validation_level IN  VARCHAR2   := 100
14173     ,p_calling_module   IN  VARCHAR2   := 'SELF_SERVICE'
14174     ,p_debug_mode       IN  VARCHAR2   := 'N'
14175     ,p_max_msg_count    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14176     ,p_project_id IN NUMBER
14177     ,p_workplan_enabled_flag IN VARCHAR2
14178     ,p_financial_enabled_flag IN VARCHAR2
14179     ,p_sharing_enabled_flag IN VARCHAR2
14180     --FP M changes bug 3301192
14181     ,p_deliverables_enabled_flag       IN VARCHAR2
14182     ,p_sharing_option_code             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14183     --End FP M changes bug 3301192
14184     ,p_sys_program_flag  IN varchar2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14185     ,p_allow_multi_prog_rollup IN varchar2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14186     ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14187     ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
14188     ,x_msg_data  OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14189 	,p_cbs_version_id IN NUMBER default NULL --added for CBS 15834912
14190  	,p_cbs_enable_flag IN VARCHAR2 default 'N' --Bug16083858
14191   )
14192   IS
14193     l_ret_stat           VARCHAR2(1);
14194     l_err_msg_code       VARCHAR2(250);
14195     l_suffix             VARCHAR2(80);
14196     l_name               VARCHAR2(240);
14197     l_append             VARCHAR2(10) := ': ';
14198     l_return_status      VARCHAR2(1);
14199     l_msg_count          NUMBER;
14200     l_msg_data           VARCHAR2(250);
14201     l_structure_id       NUMBER;
14202     l_structure_version_id NUMBER;
14203     l_template_flag      VARCHAR2(1);
14204     l_status_code        VARCHAR2(30);
14205     l_baseline_flag      VARCHAR2(1);
14206     l_latest_eff_pub_flag VARCHAR2(1);
14207     l_effective_date     DATE;
14208     l_wp_attr_rvn        NUMBER;
14209     l_rowid              VARCHAR2(255);
14210     l_keep_structure_ver_id NUMBER;
14211     l_del_struc_ver_id   NUMBER;
14212     l_struc_ver_rvn      NUMBER;
14213     l_pev_structure_id   NUMBER;
14214     l_pev_schedule_id    NUMBER;
14215     l_struc_ver_attr_rvn NUMBER;
14216     l_struc_type_id      NUMBER;
14217     l_proj_structure_type_id NUMBER;
14218     l_task_id            NUMBER;
14219     l_element_version_id NUMBER;
14220     l_start_date         DATE;
14221     l_completion_date    DATE;
14222     l_object_type        VARCHAR2(30);
14223     l_task_ver_id        NUMBER;
14224    /* Bug 2790703 Begin */
14225     -- l_task_ver_ids       PA_NUM_1000_NUM := PA_NUM_1000_NUM();
14226     l_task_ver_ids_tbl PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
14227     l_index number :=0 ;
14228 /* Bug 2790703 End */
14229 
14230     l_proj_start_Date DATE;
14231     l_proj_completion_date DATE;
14232     l_proj_prog_attr_id NUMBER;
14233 
14234     -- FP.M Changes below
14235     l_sys_program_flag        PA_PROJECTS_ALL.sys_program_flag%TYPE;
14236     l_allow_multi_program_rollup    PA_PROJECTS_ALL.allow_multi_program_rollup%TYPE;
14237     l_proj_sys_program_flag        PA_PROJECTS_ALL.sys_program_flag%TYPE;
14238     l_proj_allow_program_rollup    PA_PROJECTS_ALL.allow_multi_program_rollup%TYPE;
14239     l_flag                    VARCHAR2(1);
14240 
14241     -- NYU
14242     l_del_trans_exist VARCHAR2(1);
14243 
14244     CURSOR get_project_info IS
14245       select name, target_start_date, target_finish_date, sys_program_flag, allow_multi_program_rollup
14246         from pa_projects_all
14247        where project_id = p_project_id;
14248 
14249 --bug 2843569: added record_version_number
14250     CURSOR get_template_flag IS
14251       select template_flag, record_version_number
14252         from pa_projects_all
14253        where project_id = p_project_id;
14254 
14255     CURSOR get_wp_attr_rvn IS
14256       select b.proj_element_id, a.record_version_number
14257         from pa_proj_workplan_attr a,
14258              pa_proj_elements b,
14259              pa_proj_structure_types c,
14260              pa_structure_types d
14261        where a.project_id = b.project_id
14262          and a.proj_element_id = b.proj_element_id
14263          and b.project_id = p_project_id
14264          and b.proj_element_id = c.proj_element_id
14265          and c.structure_type_id = d.structure_type_id
14266          and d.structure_type_class_code = 'WORKPLAN';
14267 
14268     cursor sel_wp_struct_type(c_structure_id NUMBER) IS
14269       select a.rowid
14270         from pa_proj_structure_types a,
14271              pa_structure_types b
14272        where a.proj_element_id = c_structure_id
14273          and a.structure_type_id = b.structure_type_id
14274          and b.structure_type_class_code = 'WORKPLAN';
14275 
14276     cursor sel_latest_pub_ver(c_structure_id NUMBER) IS
14277       select element_version_id
14278         from pa_proj_elem_ver_structure
14279        where proj_element_id = c_structure_id
14280          and project_id = p_project_id
14281          and status_code = 'STRUCTURE_PUBLISHED'
14282          and LATEST_EFF_PUBLISHED_FLAG = 'Y';
14283 
14284     --bug 4054587, replace literal with bind variable
14285     l_wp_structure_code VARCHAR2(10) := 'WORKPLAN';
14286     cursor sel_wp_structure_id IS
14287       select a.proj_element_id
14288         from pa_proj_elements a,
14289              pa_proj_structure_types b,
14290              pa_structure_types c
14291        where a.project_id = p_project_id
14292          and a.object_type = 'PA_STRUCTURES'
14293          and a.proj_element_id = b.proj_element_id
14294          and b.structure_type_id = c.structure_type_id
14295          --and c.structure_type_class_code = 'WORKPLAN';
14296          and c.structure_type_class_code = l_wp_structure_code;
14297 
14298     cursor sel_other_structure_ver(c_keep_struc_ver_id NUMBER) IS
14299       select b.element_version_id, b.record_version_number
14300         from pa_proj_element_versions a,
14301              pa_proj_element_versions b
14302        where a.element_version_id = c_keep_struc_ver_id
14303          and a.project_id = b.project_id
14304          and a.proj_element_id = b.proj_element_id
14305          and b.element_version_id <> c_keep_struc_ver_id
14306          and b.object_type = 'PA_STRUCTURES';
14307 
14308     cursor sel_all_wp_structure_ver(c_struc_id NUMBER) IS
14309       select a.element_version_id, a.record_version_number
14310         from pa_proj_element_versions a,
14311              pa_proj_elements b
14312        where a.proj_element_id = b.proj_element_id
14313          and a.project_id = b.project_id
14314          and b.proj_element_id = c_struc_id;
14315 
14316     cursor sel_struc_ver_attr_rvn(c_struc_ver_id NUMBER) IS
14317       select PEV_STRUCTURE_ID, record_version_number
14318         from pa_proj_elem_ver_structure
14319        where project_id = p_project_id
14320          and element_version_id = c_struc_ver_id;
14321 
14322     cursor sel_proj_workplan_attr(c_struc_id NUMBER) is
14323       select *
14324         from pa_proj_workplan_attr
14325        where proj_element_id = c_struc_id;
14326     l_proj_workplan_attr_rec  sel_proj_workplan_attr%ROWTYPE;
14327 
14328     cursor sel_proj_progress_attr(c_struc_id NUMBER) IS
14329       select *
14330         from pa_proj_progress_attr
14331        where project_id = p_project_id
14332          and object_type = 'PA_STRUCTURES'
14333          and object_id = c_struc_id;
14334     l_proj_progress_attr_rec  sel_proj_progress_attr%ROWTYPE;
14335 
14336     --bug 4054587, replace literal with bind variable
14337     l_fin_structure_code VARCHAR2(10) := 'FINANCIAL';
14338     cursor sel_fin_structure_id IS
14339       select a.proj_element_id
14340         from pa_proj_elements a,
14341              pa_proj_structure_types b,
14342              pa_structure_types c
14343        where a.project_id = p_project_id
14344          and a.object_type = 'PA_STRUCTURES'
14345          and a.proj_element_id = b.proj_element_id
14346          and b.structure_type_id = c.structure_type_id
14347          --and c.structure_type_class_code = 'FINANCIAL';
14348          and c.structure_type_class_code = l_fin_structure_code;
14349 
14350     CURSOR sel_struc_type_id IS
14351       select structure_type_id
14352         from pa_structure_types
14353        where structure_type_class_code = 'WORKPLAN';
14354 
14355     cursor sel_struc_ver(c_structure_id NUMBER) IS
14356       select element_version_id
14357         from pa_proj_element_versions
14358        where project_id = p_project_id
14359          and proj_element_id = c_structure_id
14360          and object_type = 'PA_STRUCTURES';
14361 
14362 --hsiu: commented for performance
14363 --    cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
14364 --      select object_type, proj_element_id, element_version_id
14365 --        from pa_proj_element_versions
14366 --       where parent_structure_version_id = c_struc_ver_id;
14367     cursor sel_struc_and_task_vers(c_struc_ver_id NUMBER) IS
14368       select pev.object_type, pev.proj_element_id, pev.element_version_id
14369         from pa_proj_element_versions pev, pa_object_relationships rel
14370        where pev.parent_structure_version_id = c_struc_ver_id
14371          and rel.object_id_to1 = pev.element_version_id
14372          and rel.relationship_type = 'S'
14373          and NOT EXISTS (
14374                select 1
14375                  from pa_object_Relationships
14376                 where object_id_from1 = pev.element_version_id
14377                   and relationship_type = 'S'
14378              );
14379 
14380 
14381     cursor sel_task_dates(c_task_id NUMBER) IS
14382       select start_date, completion_date
14383         from pa_tasks
14384        where task_id = c_task_id;
14385 
14386 --hsiu added for bug 2634029
14387     cursor sel_target_dates IS
14388       select target_start_date, target_finish_date, calendar_id
14389         from pa_projects_all
14390        where project_id = p_project_id;
14391 
14392     CURSOR get_top_tasks(c_structure_version_id NUMBER) IS
14393            select v.element_version_id
14394              from pa_proj_element_versions v,
14395                   pa_object_relationships r
14396             where v.element_version_id = r.object_id_to1
14397               and r.object_id_from1 = c_structure_version_id
14398               and r.object_type_from = 'PA_STRUCTURES';
14399 
14400 --bug 2843569
14401     CURSOR get_scheduled_dates(c_project_Id NUMBER,
14402                                 c_element_version_id NUMBER) IS
14403            select a.scheduled_start_date, a.scheduled_finish_date
14404              from pa_proj_elem_ver_schedule a
14405             where a.project_id = c_project_id
14406               and a.element_version_id = c_element_version_id;
14407     l_get_sch_dates_cur get_scheduled_dates%ROWTYPE;
14408     l_proj_rec_ver_num      NUMBER;
14409 --end bug 2843569
14410 
14411     l_target_start_date     DATE;
14412     l_target_finish_date    DATE;
14413     l_calendar_id           NUMBER;
14414 --end changes for bug 2634029
14415 
14416 --bug 3010538
14417     l_task_weight_basis_code VARCHAR2(30);
14418     l_update_proc_wbs_flag VARCHAR2(1);
14419 --end bug 3010538
14420 
14421     l_wp_name               VARCHAR2(240);
14422 
14423     CURSOR sel_fin_struc_type_id IS
14424       select structure_type_id
14425         from pa_structure_types
14426        where structure_type_class_code = 'FINANCIAL';
14427     l_fin_struc_type_id NUMBER;
14428     l_del_name          VARCHAR2(240);
14429     l_wp_enabled        VARCHAR2(1);
14430     l_fin_enabled       VARCHAR2(1);
14431     l_delv_enabled      VARCHAR2(1);
14432     l_share_code        VARCHAR2(30);
14433     l_new_share_code    VARCHAR2(30);
14434 
14435     l_struct_version_id_tbl SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
14436 
14437 /*  Bug # 3420093. Progress Management changes. */
14438 
14439     l_proj_progress_attr_id     NUMBER;
14440 
14441 /*      Bug # 3420093. Progress Management changes.     */
14442 
14443 -- Begin fix for Bug # 4426392.
14444 
14445    cursor cur_program (c_project_id NUMBER) is
14446    select 'Y'
14447    from pa_object_relationships por
14448    where (por.object_id_from2 = c_project_id
14449           or por.object_id_to2 = c_project_id)
14450    and por.relationship_type in ('LW', 'LF');
14451 
14452    l_program    VARCHAR2(1) := null;
14453 
14454    cursor cur_links (c_project_id NUMBER) is
14455    -- Select links from the working structure version of all parent projects
14456    -- with sharing enabled to the given project.
14457    select por1.object_relationship_id obj_rel_id
14458           , por1.object_id_from2 src_proj_id
14459           , por2.object_id_from1 task_ver_id
14460           , c_project_id dest_proj_id
14461           , ppev.parent_structure_version_id src_str_ver_id
14462           , por1.record_version_number rec_ver_number
14463    from pa_object_relationships por1
14464         , pa_object_relationships por2
14465         , pa_projects_all ppa
14466         , pa_proj_element_versions ppev
14467         , pa_proj_elem_ver_structure ppevs
14468    where por1.object_id_to2 = c_project_id
14469          and por1.relationship_type in ('LW', 'LF')
14470          and por1.object_id_from1 = por2.object_id_to1
14471          and por2.relationship_type = 'S'
14472          and por1.object_id_from2 = ppa.project_id
14473          and ppa.structure_sharing_code in ('SHARE_FULL', 'SHARE_PARTIAL')
14474          and por2.object_id_from1 = ppev.element_version_id
14475          -- Bug Fix 4868867
14476          -- Ram Namburi
14477          -- adding the following additional project id join to avoid the Full Table Scan on
14478          --  pa_proj_elem_ver_structure table and to use N1.
14479          and ppev.project_id = ppevs.project_id
14480          and ppev.parent_structure_version_id = ppevs.element_version_id
14481          and ppevs.current_working_flag = 'Y'
14482    union
14483    -- Select links from the working structure version of the given project to all child projects
14484    -- with sharing enabled.
14485     select por1.object_relationship_id obj_rel_id
14486           , c_project_id src_proj_id
14487           , por2.object_id_from1 task_ver_id
14488           , por1.object_id_to2 dest_proj_id
14489           , ppev.parent_structure_version_id src_str_ver_id
14490           , por1.record_version_number rec_ver_number
14491    from pa_object_relationships por1
14492         , pa_object_relationships por2
14493         , pa_projects_all ppa
14494         , pa_proj_element_versions ppev
14495         , pa_proj_elem_ver_structure ppevs
14496    where por1.object_id_from2 = c_project_id
14497          and por1.relationship_type in ('LW', 'LF')
14498          and por1.object_id_from1 = por2.object_id_to1
14499          and por2.relationship_type = 'S'
14500          and por1.object_id_to2 = ppa.project_id
14501          and ppa.structure_sharing_code in ('SHARE_FULL', 'SHARE_PARTIAL')
14502          and por2.object_id_from1 = ppev.element_version_id
14503          -- Bug Fix 4868867
14504          -- Ram Namburi
14505          -- adding the following additional project id join to avoid the Full Table Scan on
14506          --  pa_proj_elem_ver_structure table and to use N1.
14507          and ppev.project_id = ppevs.project_id
14508          and ppev.parent_structure_version_id = ppevs.element_version_id
14509          and ppevs.current_working_flag = 'Y';
14510 
14511    l_cur_links_rec      cur_links%rowtype;
14512 
14513    l_comment            VARCHAR2(30) := null;
14514 
14515    l_dest_proj_name     VARCHAR2(30) := null;
14516 
14517 -- End fix for Bug # 4426392.
14518 
14519   BEGIN
14520     IF (p_debug_mode = 'Y') THEN
14521       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr');
14522     END IF;
14523 
14524     IF (p_commit = FND_API.G_TRUE) THEN
14525       savepoint update_struc_setup_attr_pvt;
14526     END IF;
14527 
14528     IF (p_debug_mode = 'Y') THEN
14529       pa_debug.debug('Performing validations');
14530     END IF;
14531 
14532 l_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_workplan_enabled(p_project_id);
14533 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_financial_enabled(p_project_id);
14534 l_share_code := PA_PROJECT_STRUCTURE_UTILS.Get_Structure_sharing_code(p_project_id);
14535 l_delv_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_deliverable_enabled(p_project_id);
14536 
14537 
14538 --get template flag
14539 OPEN get_template_flag;
14540 FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
14541 CLOSE get_template_flag;
14542 
14543 --get project name
14544 OPEN get_project_info;
14545 FETCH get_project_info into l_name, l_proj_start_date, l_proj_completion_date, l_proj_sys_program_flag, l_proj_allow_program_rollup;
14546 CLOSE get_project_info;
14547 
14548 -- Begin fix for Bug # 4426392.
14549 
14550 -- If a project is part of a program then the user cannot disable its project structures
14551 -- or change its structure integration option from split tp shared or vice-versa.
14552 
14553 -- Please ensure that this code s always the first check in this API.
14554 
14555 open cur_program(p_project_id);
14556 fetch cur_program into l_program;
14557 close cur_program;
14558 
14559 if (
14560      (nvl(l_program,'N') = 'Y')
14561      and (((l_wp_enabled = 'Y') and (p_workplan_enabled_flag = 'N'))
14562          or ((l_fin_enabled = 'Y') and (p_financial_enabled_flag = 'N'))
14563          or ((l_share_code in ('SHARE_FULL','SHARE_PARTIAL'))
14564              and (p_sharing_option_code in ('SPLIT_MAPPING','SPLIT_NO_MAPPING')))
14565          or ((l_share_code in ('SPLIT_MAPPING','SPLIT_NO_MAPPING'))
14566              and (p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL'))))
14567     ) then
14568 
14569         PA_UTILS.ADD_MESSAGE('PA', 'PA_WP_PROG_CANT_CHG_STR');
14570 
14571         RAISE FND_API.G_EXC_ERROR;
14572 
14573 end if;
14574 
14575 -- End fix for Bug # 4426392.
14576 
14577 --check if ok to enable workplan
14578 If (l_wp_enabled <> p_workplan_enabled_flag AND p_workplan_enabled_flag = 'Y') THEN
14579   -- Bug 6832737 Changed check_disable_wp_ok to check_enable_wp_ok
14580   --PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
14581   PA_PROJECT_STRUCTURE_UTILS.check_enable_wp_ok(p_project_id,
14582                                                        l_ret_stat,
14583                                                        l_err_msg_code);
14584   IF (l_ret_stat = 'N') THEN
14585     PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14586     x_msg_data := l_err_msg_code;
14587     RAISE FND_API.G_EXC_ERROR;
14588   END IF;
14589 END IF;
14590 
14591 --check if ok to disable workplan
14592 IF (l_wp_enabled <> p_workplan_enabled_flag AND p_workplan_enabled_flag = 'N') THEN
14593   PA_PROJECT_STRUCTURE_UTILS.check_disable_wp_ok(p_project_id,
14594                                                        l_ret_stat,
14595                                                        l_err_msg_code);
14596   IF (l_ret_stat = 'N') THEN
14597     PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14598     x_msg_data := l_err_msg_code;
14599     RAISE FND_API.G_EXC_ERROR;
14600   END IF;
14601 END IF;
14602 
14603 --check if ok to share
14604     IF (l_share_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING') and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
14605         PA_PROJECT_STRUCTURE_UTILS.check_sharing_on_ok(p_project_id,
14606                                                        l_ret_stat,
14607                                                        l_err_msg_code);
14608         IF (l_ret_stat = 'N') THEN
14609             PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14610             x_msg_data := l_err_msg_code;
14611             RAISE FND_API.G_EXC_ERROR;
14612         END IF;
14613     END IF;
14614 
14615 --check if ok to split
14616   IF (l_share_code IN ('SHARE_FULL','SHARE_PARTIAL') and p_sharing_option_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING')) THEN
14617     PA_PROJECT_STRUCTURE_UTILS.check_sharing_off_ok(p_project_id,
14618                                                         l_ret_stat,
14619                                                         l_err_msg_code);
14620     IF (l_ret_stat = 'N') THEN
14621       PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
14622       x_msg_data := l_err_msg_code;
14623       RAISE FND_API.G_EXC_ERROR;
14624     END IF;
14625   END IF;
14626 
14627 IF (l_proj_completion_date IS NULL AND l_proj_start_date IS NOT NULL) THEN
14628   l_proj_completion_date := l_proj_start_date;
14629 ELSIF (l_proj_completion_date IS NULL AND l_proj_start_date IS NULL) THEN
14630   l_proj_completion_date := sysdate;
14631   l_proj_start_date := sysdate;
14632 END IF;
14633 
14634 --get suffix
14635 select meaning
14636 into l_suffix
14637 from pa_lookups
14638 where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
14639 and lookup_code = 'WORKPLAN';
14640 --get workplan name
14641 l_wp_name := substrb(l_name||l_append||l_suffix, 1, 240);
14642 
14643 --check for
14644 IF (l_wp_enabled = 'N' and l_fin_enabled = 'N') THEN
14645   --both currently disabled
14646   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
14647     --disabled both
14648     NULL;
14649   ELSIF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
14650     --disable workplan (enable financial)
14651     --create financial structure API
14652     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14653     (p_validate_only => FND_API.G_FALSE
14654     ,p_project_id    => p_project_id
14655     ,p_structure_number => l_name
14656     ,p_structure_name   => l_name
14657     ,p_calling_flag     => 'FINANCIAL'
14658     ,x_structure_id     => l_structure_id
14659     ,x_return_status    => l_return_status
14660     ,x_msg_count        => l_msg_count
14661     ,x_msg_data         => l_msg_data);
14662 
14663     --Check if there is any error.
14664     l_msg_count := FND_MSG_PUB.count_msg;
14665     IF l_msg_count > 0 THEN
14666       x_msg_count := l_msg_count;
14667       IF x_msg_count = 1 THEN
14668         x_msg_data := l_msg_data;
14669       END IF;
14670       RAISE FND_API.G_EXC_ERROR;
14671     END IF;
14672 
14673     --create row in pa_proj_workplan_attr
14674     PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
14675     (p_validate_only => FND_API.G_FALSE
14676     ,p_project_id => p_project_id
14677     ,p_proj_element_id => l_structure_id
14678     ,x_return_status    => l_return_status
14679     ,x_msg_count        => l_msg_count
14680     ,x_msg_data         => l_msg_data);
14681 
14682     --Check if there is any error.
14683     l_msg_count := FND_MSG_PUB.count_msg;
14684     IF l_msg_count > 0 THEN
14685       x_msg_count := l_msg_count;
14686       IF x_msg_count = 1 THEN
14687         x_msg_data := l_msg_data;
14688       END IF;
14689       RAISE FND_API.G_EXC_ERROR;
14690     END IF;
14691 
14692     --create structure version
14693     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14694     (p_validate_only         => FND_API.G_FALSE
14695     ,p_structure_id          => l_structure_id
14696     ,x_structure_version_id  => l_structure_version_id
14697     ,x_return_status         => l_return_status
14698     ,x_msg_count             => l_msg_count
14699     ,x_msg_data              => l_msg_data );
14700 
14701     --Check if there is any error.
14702     l_msg_count := FND_MSG_PUB.count_msg;
14703     IF l_msg_count > 0 THEN
14704       x_msg_count := l_msg_count;
14705       IF x_msg_count = 1 THEN
14706         x_msg_data := l_msg_data;
14707       END IF;
14708       RAISE FND_API.G_EXC_ERROR;
14709     END IF;
14710 
14711     IF (l_template_flag = 'Y') THEN
14712       l_status_code := 'STRUCTURE_WORKING';
14713       l_baseline_flag := 'N';
14714       l_latest_eff_pub_flag := 'N';
14715       l_effective_date := NULL;
14716     ELSE
14717       l_status_code := 'STRUCTURE_PUBLISHED';
14718       l_baseline_flag := 'N';
14719       l_latest_eff_pub_flag := 'Y';
14720       l_effective_date := sysdate;
14721     END IF;
14722 
14723     --create structure version
14724     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14725     (p_validate_only               => FND_API.G_FALSE
14726     ,p_structure_version_id        => l_structure_version_id
14727     ,p_structure_version_name      => l_name
14728     ,p_structure_version_desc      => NULL
14729     ,p_effective_date              => l_effective_date
14730     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
14731     ,p_locked_status_code          => 'UNLOCKED'
14732     ,p_struct_version_status_code  => l_status_code
14733     ,p_baseline_current_flag       => l_baseline_flag
14734     ,p_baseline_original_flag      => 'N'
14735     ,x_pev_structure_id            => l_pev_structure_id
14736     ,x_return_status               => l_return_status
14737     ,x_msg_count                   => l_msg_count
14738     ,x_msg_data                    => l_msg_data );
14739 
14740     --Check if there is any error.
14741     l_msg_count := FND_MSG_PUB.count_msg;
14742     IF l_msg_count > 0 THEN
14743       x_msg_count := l_msg_count;
14744       IF x_msg_count = 1 THEN
14745         x_msg_data := l_msg_data;
14746       END IF;
14747       RAISE FND_API.G_EXC_ERROR;
14748     END IF;
14749 
14750   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
14751     --disable financial (enable workplan)
14752     --create workplan structure
14753     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14754     (p_validate_only           => FND_API.G_FALSE
14755     ,p_project_id              => p_project_id
14756     ,p_structure_number        => l_wp_name
14757     ,p_structure_name          => l_wp_name
14758     ,p_calling_flag            => 'WORKPLAN'
14759     ,x_structure_id            => l_structure_id
14760     ,x_return_status           => l_return_status
14761     ,x_msg_count               => l_msg_count
14762     ,x_msg_data                => l_msg_data );
14763 
14764     --Check if there is any error.
14765     l_msg_count := FND_MSG_PUB.count_msg;
14766     IF l_msg_count > 0 THEN
14767       x_msg_count := l_msg_count;
14768       IF x_msg_count = 1 THEN
14769         x_msg_data := l_msg_data;
14770       END IF;
14771       RAISE FND_API.G_EXC_ERROR;
14772     END IF;
14773 
14774     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14775     (p_validate_only         => FND_API.G_FALSE
14776     ,p_structure_id          => l_structure_id
14777     ,x_structure_version_id  => l_structure_version_id
14778     ,x_return_status         => l_return_status
14779     ,x_msg_count             => l_msg_count
14780     ,x_msg_data              => l_msg_data );
14781 
14782     --Check if there is any error.
14783     l_msg_count := FND_MSG_PUB.count_msg;
14784     IF l_msg_count > 0 THEN
14785       x_msg_count := l_msg_count;
14786       IF x_msg_count = 1 THEN
14787         x_msg_data := l_msg_data;
14788       END IF;
14789       RAISE FND_API.G_EXC_ERROR;
14790     END IF;
14791 
14792     PA_TASK_PUB1.Create_Schedule_Version(
14793      p_element_version_id      => l_structure_version_id
14794     ,p_scheduled_start_date    => l_proj_start_date
14795     ,p_scheduled_end_date      => l_proj_completion_date
14796     ,x_pev_schedule_id         => l_pev_schedule_id
14797     ,x_return_status           => l_return_status
14798     ,x_msg_count               => l_msg_count
14799     ,x_msg_data                => l_msg_data);
14800 
14801     --Check if there is any error.
14802     l_msg_count := FND_MSG_PUB.count_msg;
14803     IF l_msg_count > 0 THEN
14804       x_msg_count := l_msg_count;
14805       IF x_msg_count = 1 THEN
14806         x_msg_data := l_msg_data;
14807       END IF;
14808       RAISE FND_API.G_EXC_ERROR;
14809     END IF;
14810 
14811     IF (l_template_flag = 'Y') THEN
14812       l_status_code := 'STRUCTURE_WORKING';
14813       l_baseline_flag := 'N';
14814       l_latest_eff_pub_flag := 'N';
14815       l_effective_date := NULL;
14816     ELSE
14817       l_status_code := 'STRUCTURE_PUBLISHED';
14818       l_baseline_flag := 'Y';
14819       l_latest_eff_pub_flag := 'Y';
14820       l_effective_date := sysdate;
14821     END IF;
14822 
14823     --create structure version
14824     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14825     (p_validate_only               => FND_API.G_FALSE
14826     ,p_structure_version_id        => l_structure_version_id
14827     ,p_structure_version_name      => l_name
14828     ,p_structure_version_desc      => NULL
14829     ,p_effective_date              => l_effective_date
14830     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
14831     ,p_locked_status_code          => 'UNLOCKED'
14832     ,p_struct_version_status_code  => l_status_code
14833     ,p_baseline_current_flag       => l_baseline_flag
14834     ,p_baseline_original_flag      => 'N'
14835     ,x_pev_structure_id            => l_pev_structure_id
14836     ,x_return_status               => l_return_status
14837     ,x_msg_count                   => l_msg_count
14838     ,x_msg_data                    => l_msg_data );
14839 
14840     --Check if there is any error.
14841     l_msg_count := FND_MSG_PUB.count_msg;
14842     IF l_msg_count > 0 THEN
14843       x_msg_count := l_msg_count;
14844       IF x_msg_count = 1 THEN
14845         x_msg_data := l_msg_data;
14846       END IF;
14847       RAISE FND_API.G_EXC_ERROR;
14848     END IF;
14849 
14850   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL', 'SHARE_FULL')) THEN
14851     --partial share/full share
14852     --enable workplan structure API
14853     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
14854     (p_validate_only           => FND_API.G_FALSE
14855     ,p_project_id              => p_project_id
14856     ,p_structure_number        => l_name
14857     ,p_structure_name          => l_name
14858     ,p_calling_flag            => 'WORKPLAN'
14859     ,x_structure_id            => l_structure_id
14860     ,x_return_status           => l_return_status
14861     ,x_msg_count               => l_msg_count
14862     ,x_msg_data                => l_msg_data );
14863 
14864     --Check if there is any error.
14865     l_msg_count := FND_MSG_PUB.count_msg;
14866     IF l_msg_count > 0 THEN
14867       x_msg_count := l_msg_count;
14868       IF x_msg_count = 1 THEN
14869         x_msg_data := l_msg_data;
14870       END IF;
14871       RAISE FND_API.G_EXC_ERROR;
14872     END IF;
14873 
14874     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
14875     (p_validate_only         => FND_API.G_FALSE
14876     ,p_structure_id          => l_structure_id
14877     ,x_structure_version_id  => l_structure_version_id
14878     ,x_return_status         => l_return_status
14879     ,x_msg_count             => l_msg_count
14880     ,x_msg_data              => l_msg_data );
14881 
14882     --Check if there is any error.
14883     l_msg_count := FND_MSG_PUB.count_msg;
14884     IF l_msg_count > 0 THEN
14885       x_msg_count := l_msg_count;
14886       IF x_msg_count = 1 THEN
14887         x_msg_data := l_msg_data;
14888       END IF;
14889       RAISE FND_API.G_EXC_ERROR;
14890     END IF;
14891 
14892     PA_TASK_PUB1.Create_Schedule_Version(
14893      p_element_version_id      => l_structure_version_id
14894     ,p_scheduled_start_date    => l_proj_start_date
14895     ,p_scheduled_end_date      => l_proj_completion_date
14896     ,x_pev_schedule_id         => l_pev_schedule_id
14897     ,x_return_status           => l_return_status
14898     ,x_msg_count               => l_msg_count
14899     ,x_msg_data                => l_msg_data);
14900 
14901     --Check if there is any error.
14902     l_msg_count := FND_MSG_PUB.count_msg;
14903     IF l_msg_count > 0 THEN
14904       x_msg_count := l_msg_count;
14905       IF x_msg_count = 1 THEN
14906         x_msg_data := l_msg_data;
14907       END IF;
14908       RAISE FND_API.G_EXC_ERROR;
14909     END IF;
14910 
14911     IF (l_template_flag = 'Y') THEN
14912       l_status_code := 'STRUCTURE_WORKING';
14913       l_baseline_flag := 'N';
14914       l_latest_eff_pub_flag := 'N';
14915       l_effective_date := NULL;
14916     ELSE
14917       l_status_code := 'STRUCTURE_PUBLISHED';
14918       l_baseline_flag := 'Y';
14919       l_latest_eff_pub_flag := 'Y';
14920       l_effective_date := sysdate;
14921     END IF;
14922 
14923     --create structure version
14924     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
14925     (p_validate_only               => FND_API.G_FALSE
14926     ,p_structure_version_id        => l_structure_version_id
14927     ,p_structure_version_name      => l_name
14928     ,p_structure_version_desc      => NULL
14929     ,p_effective_date              => l_effective_date
14930     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
14931     ,p_locked_status_code          => 'UNLOCKED'
14932     ,p_struct_version_status_code  => l_status_code
14933     ,p_baseline_current_flag       => l_baseline_flag
14934     ,p_baseline_original_flag      => 'N'
14935     ,x_pev_structure_id            => l_pev_structure_id
14936     ,x_return_status               => l_return_status
14937     ,x_msg_count                   => l_msg_count
14938     ,x_msg_data                    => l_msg_data );
14939 
14940     --Check if there is any error.
14941     l_msg_count := FND_MSG_PUB.count_msg;
14942     IF l_msg_count > 0 THEN
14943       x_msg_count := l_msg_count;
14944       IF x_msg_count = 1 THEN
14945         x_msg_data := l_msg_data;
14946       END IF;
14947       RAISE FND_API.G_EXC_ERROR;
14948     END IF;
14949 
14950     --create financial type
14951     OPEN sel_fin_struc_type_id;
14952     FETCH sel_fin_struc_type_id INTO l_fin_struc_type_id;
14953     CLOSE sel_fin_struc_type_id;
14954 
14955     l_proj_structure_type_id := NULL;
14956     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
14957      X_ROWID                  => l_rowid
14958     ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
14959     ,X_PROJ_ELEMENT_ID        => l_structure_id
14960     ,X_STRUCTURE_TYPE_ID      => l_fin_struc_type_id
14961     ,X_RECORD_VERSION_NUMBER  => 1
14962     ,X_ATTRIBUTE_CATEGORY     => NULL
14963     ,X_ATTRIBUTE1             => NULL
14964     ,X_ATTRIBUTE2             => NULL
14965     ,X_ATTRIBUTE3             => NULL
14966     ,X_ATTRIBUTE4             => NULL
14967     ,X_ATTRIBUTE5             => NULL
14968     ,X_ATTRIBUTE6             => NULL
14969     ,X_ATTRIBUTE7             => NULL
14970     ,X_ATTRIBUTE8             => NULL
14971     ,X_ATTRIBUTE9             => NULL
14972     ,X_ATTRIBUTE10            => NULL
14973     ,X_ATTRIBUTE11            => NULL
14974     ,X_ATTRIBUTE12            => NULL
14975     ,X_ATTRIBUTE13            => NULL
14976     ,X_ATTRIBUTE14            => NULL
14977     ,X_ATTRIBUTE15            => NULL
14978     );
14979 
14980     IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
14981       NULL;
14982     ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
14983       NULL;
14984     END IF;
14985 
14986 /*  Bug # 3420093. Progress Management changes. */
14987 
14988   --create row in pa_proj_progress_attr
14989   PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
14990   p_project_id                  => p_project_id
14991  ,P_OBJECT_TYPE                 => 'PA_STRUCTURES'
14992  ,P_OBJECT_ID                   => l_structure_id
14993  ,P_PROGRESS_CYCLE_ID           => to_number(null)
14994  ,P_WQ_ENABLE_FLAG              => 'N'
14995  ,P_REMAIN_EFFORT_ENABLE_FLAG       => 'N'
14996  ,P_PERCENT_COMP_ENABLE_FLAG        => 'Y'
14997  ,P_NEXT_PROGRESS_UPDATE_DATE       => to_date(null)
14998  ,p_TASK_WEIGHT_BASIS_CODE          => 'COST'
14999  ,X_PROJ_PROGRESS_ATTR_ID           => l_proj_progress_attr_id
15000  ,P_ALLOW_COLLAB_PROG_ENTRY         => 'N'
15001  ,P_ALLW_PHY_PRCNT_CMP_OVERRIDES    => 'Y'
15002  ,p_structure_type                      => 'FINANCIAL' --Amit
15003  ,x_return_status                   => l_return_status
15004  ,x_msg_count                   => l_msg_count
15005  ,x_msg_data                    => l_msg_data
15006 );
15007 
15008 /*      Bug # 3420093. Progress Management changes.     */
15009 
15010 
15011   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_MAPPING','SPLIT_NO_MAPPING')) THEN
15012     --split mapping/split no mapping
15013     --enable financial structure API
15014     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15015     (p_validate_only => FND_API.G_FALSE
15016     ,p_project_id    => p_project_id
15017     ,p_structure_number => l_name
15018     ,p_structure_name   => l_name
15019     ,p_calling_flag     => 'FINANCIAL'
15020     ,x_structure_id     => l_structure_id
15021     ,x_return_status    => l_return_status
15022     ,x_msg_count        => l_msg_count
15023     ,x_msg_data         => l_msg_data);
15024 
15025     --Check if there is any error.
15026     l_msg_count := FND_MSG_PUB.count_msg;
15027     IF l_msg_count > 0 THEN
15028       x_msg_count := l_msg_count;
15029       IF x_msg_count = 1 THEN
15030         x_msg_data := l_msg_data;
15031       END IF;
15032       RAISE FND_API.G_EXC_ERROR;
15033     END IF;
15034 
15035     --create row in pa_proj_workplan_attr
15036     PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
15037     (p_validate_only => FND_API.G_FALSE
15038     ,p_project_id => p_project_id
15039     ,p_proj_element_id => l_structure_id
15040     ,x_return_status    => l_return_status
15041     ,x_msg_count        => l_msg_count
15042     ,x_msg_data         => l_msg_data);
15043 
15044     --Check if there is any error.
15045     l_msg_count := FND_MSG_PUB.count_msg;
15046     IF l_msg_count > 0 THEN
15047       x_msg_count := l_msg_count;
15048       IF x_msg_count = 1 THEN
15049         x_msg_data := l_msg_data;
15050       END IF;
15051       RAISE FND_API.G_EXC_ERROR;
15052     END IF;
15053 
15054     --create structure version
15055     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15056     (p_validate_only         => FND_API.G_FALSE
15057     ,p_structure_id          => l_structure_id
15058     ,x_structure_version_id  => l_structure_version_id
15059     ,x_return_status         => l_return_status
15060     ,x_msg_count             => l_msg_count
15061     ,x_msg_data              => l_msg_data );
15062 
15063     --Check if there is any error.
15064     l_msg_count := FND_MSG_PUB.count_msg;
15065     IF l_msg_count > 0 THEN
15066       x_msg_count := l_msg_count;
15067       IF x_msg_count = 1 THEN
15068         x_msg_data := l_msg_data;
15069       END IF;
15070       RAISE FND_API.G_EXC_ERROR;
15071     END IF;
15072 
15073     IF (l_template_flag = 'Y') THEN
15074       l_status_code := 'STRUCTURE_WORKING';
15075       l_baseline_flag := 'N';
15076       l_latest_eff_pub_flag := 'N';
15077       l_effective_date := NULL;
15078     ELSE
15079       l_status_code := 'STRUCTURE_PUBLISHED';
15080       l_baseline_flag := 'N';
15081       l_latest_eff_pub_flag := 'Y';
15082       l_effective_date := sysdate;
15083     END IF;
15084 
15085     --create structure version
15086     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15087     (p_validate_only               => FND_API.G_FALSE
15088     ,p_structure_version_id        => l_structure_version_id
15089     ,p_structure_version_name      => l_name
15090     ,p_structure_version_desc      => NULL
15091     ,p_effective_date              => l_effective_date
15092     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
15093     ,p_locked_status_code          => 'UNLOCKED'
15094     ,p_struct_version_status_code  => l_status_code
15095     ,p_baseline_current_flag       => l_baseline_flag
15096     ,p_baseline_original_flag      => 'N'
15097     ,x_pev_structure_id            => l_pev_structure_id
15098     ,x_return_status               => l_return_status
15099     ,x_msg_count                   => l_msg_count
15100     ,x_msg_data                    => l_msg_data );
15101 
15102     --Check if there is any error.
15103     l_msg_count := FND_MSG_PUB.count_msg;
15104     IF l_msg_count > 0 THEN
15105       x_msg_count := l_msg_count;
15106       IF x_msg_count = 1 THEN
15107         x_msg_data := l_msg_data;
15108       END IF;
15109       RAISE FND_API.G_EXC_ERROR;
15110     END IF;
15111 
15112     --create workplan structure
15113     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15114     (p_validate_only           => FND_API.G_FALSE
15115     ,p_project_id              => p_project_id
15116     ,p_structure_number        => l_wp_name
15117     ,p_structure_name          => l_wp_name
15118     ,p_calling_flag            => 'WORKPLAN'
15119     ,x_structure_id            => l_structure_id
15120     ,x_return_status           => l_return_status
15121     ,x_msg_count               => l_msg_count
15122     ,x_msg_data                => l_msg_data );
15123 
15124     --Check if there is any error.
15125     l_msg_count := FND_MSG_PUB.count_msg;
15126     IF l_msg_count > 0 THEN
15127       x_msg_count := l_msg_count;
15128       IF x_msg_count = 1 THEN
15129         x_msg_data := l_msg_data;
15130       END IF;
15131       RAISE FND_API.G_EXC_ERROR;
15132     END IF;
15133 
15134     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15135     (p_validate_only         => FND_API.G_FALSE
15136     ,p_structure_id          => l_structure_id
15137     ,x_structure_version_id  => l_structure_version_id
15138     ,x_return_status         => l_return_status
15139     ,x_msg_count             => l_msg_count
15140     ,x_msg_data              => l_msg_data );
15141 
15142     --Check if there is any error.
15143     l_msg_count := FND_MSG_PUB.count_msg;
15144     IF l_msg_count > 0 THEN
15145       x_msg_count := l_msg_count;
15146       IF x_msg_count = 1 THEN
15147         x_msg_data := l_msg_data;
15148       END IF;
15149       RAISE FND_API.G_EXC_ERROR;
15150     END IF;
15151 
15152     PA_TASK_PUB1.Create_Schedule_Version(
15153      p_element_version_id      => l_structure_version_id
15154     ,p_scheduled_start_date    => l_proj_start_date
15155     ,p_scheduled_end_date      => l_proj_completion_date
15156     ,x_pev_schedule_id         => l_pev_schedule_id
15157     ,x_return_status           => l_return_status
15158     ,x_msg_count               => l_msg_count
15159     ,x_msg_data                => l_msg_data);
15160 
15161     --Check if there is any error.
15162     l_msg_count := FND_MSG_PUB.count_msg;
15163     IF l_msg_count > 0 THEN
15164       x_msg_count := l_msg_count;
15165       IF x_msg_count = 1 THEN
15166         x_msg_data := l_msg_data;
15167       END IF;
15168       RAISE FND_API.G_EXC_ERROR;
15169     END IF;
15170 
15171     IF (l_template_flag = 'Y') THEN
15172       l_status_code := 'STRUCTURE_WORKING';
15173       l_baseline_flag := 'N';
15174       l_latest_eff_pub_flag := 'N';
15175       l_effective_date := NULL;
15176     ELSE
15177       l_status_code := 'STRUCTURE_PUBLISHED';
15178       l_baseline_flag := 'Y';
15179       l_latest_eff_pub_flag := 'Y';
15180       l_effective_date := sysdate;
15181     END IF;
15182 
15183     --create structure version
15184     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15185     (p_validate_only               => FND_API.G_FALSE
15186     ,p_structure_version_id        => l_structure_version_id
15187     ,p_structure_version_name      => l_name
15188     ,p_structure_version_desc      => NULL
15189     ,p_effective_date              => l_effective_date
15190     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
15191     ,p_locked_status_code          => 'UNLOCKED'
15192     ,p_struct_version_status_code  => l_status_code
15193     ,p_baseline_current_flag       => l_baseline_flag
15194     ,p_baseline_original_flag      => 'N'
15195     ,x_pev_structure_id            => l_pev_structure_id
15196     ,x_return_status               => l_return_status
15197     ,x_msg_count                   => l_msg_count
15198     ,x_msg_data                    => l_msg_data );
15199 
15200     --Check if there is any error.
15201     l_msg_count := FND_MSG_PUB.count_msg;
15202     IF l_msg_count > 0 THEN
15203       x_msg_count := l_msg_count;
15204       IF x_msg_count = 1 THEN
15205         x_msg_data := l_msg_data;
15206       END IF;
15207       RAISE FND_API.G_EXC_ERROR;
15208     END IF;
15209 
15210     IF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
15211       NULL;
15212     ELSIF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
15213       NULL;
15214     END IF;
15215 
15216   END IF;
15217 
15218 ELSIF (l_wp_enabled = 'N' and l_fin_enabled = 'Y') THEN
15219   --workplan currently disabled (financial enabled)
15220   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
15221     --disabled both
15222     --disable financial structure API
15223     PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
15224      p_validate_only     => FND_API.G_FALSE
15225     ,p_project_id        => p_project_id
15226     ,x_return_status     => l_return_status
15227     ,x_msg_count         => l_msg_count
15228     ,x_msg_data          => l_msg_data);
15229 
15230     --Check if there is any error.
15231     l_msg_count := FND_MSG_PUB.count_msg;
15232     IF l_msg_count > 0 THEN
15233       x_msg_count := l_msg_count;
15234       IF x_msg_count = 1 THEN
15235         x_msg_data := l_msg_data;
15236       END IF;
15237       RAISE FND_API.G_EXC_ERROR;
15238     END IF;
15239 
15240   ELSIF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
15241     --disable workplan (enable financial)
15242     NULL;
15243   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
15244     --disable financial (enable workplan)
15245     --disable financial structure API
15246     PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
15247      p_validate_only     => FND_API.G_FALSE
15248     ,p_project_id        => p_project_id
15249     ,x_return_status     => l_return_status
15250     ,x_msg_count         => l_msg_count
15251     ,x_msg_data          => l_msg_data);
15252 
15253     --Check if there is any error.
15254     l_msg_count := FND_MSG_PUB.count_msg;
15255     IF l_msg_count > 0 THEN
15256       x_msg_count := l_msg_count;
15257       IF x_msg_count = 1 THEN
15258         x_msg_data := l_msg_data;
15259       END IF;
15260       RAISE FND_API.G_EXC_ERROR;
15261     END IF;
15262 
15263     --create workplan structure
15264     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15265     (p_validate_only           => FND_API.G_FALSE
15266     ,p_project_id              => p_project_id
15267     ,p_structure_number        => l_wp_name
15268     ,p_structure_name          => l_wp_name
15269     ,p_calling_flag            => 'WORKPLAN'
15270     ,x_structure_id            => l_structure_id
15271     ,x_return_status           => l_return_status
15272     ,x_msg_count               => l_msg_count
15273     ,x_msg_data                => l_msg_data );
15274 
15275     --Check if there is any error.
15276     l_msg_count := FND_MSG_PUB.count_msg;
15277     IF l_msg_count > 0 THEN
15278       x_msg_count := l_msg_count;
15279       IF x_msg_count = 1 THEN
15280         x_msg_data := l_msg_data;
15281       END IF;
15282       RAISE FND_API.G_EXC_ERROR;
15283     END IF;
15284 
15285     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15286     (p_validate_only         => FND_API.G_FALSE
15287     ,p_structure_id          => l_structure_id
15288     ,x_structure_version_id  => l_structure_version_id
15289     ,x_return_status         => l_return_status
15290     ,x_msg_count             => l_msg_count
15291     ,x_msg_data              => l_msg_data );
15292 
15293     --Check if there is any error.
15294     l_msg_count := FND_MSG_PUB.count_msg;
15295     IF l_msg_count > 0 THEN
15296       x_msg_count := l_msg_count;
15297       IF x_msg_count = 1 THEN
15298         x_msg_data := l_msg_data;
15299       END IF;
15300       RAISE FND_API.G_EXC_ERROR;
15301     END IF;
15302 
15303     PA_TASK_PUB1.Create_Schedule_Version(
15304      p_element_version_id      => l_structure_version_id
15305     ,p_scheduled_start_date    => l_proj_start_date
15306     ,p_scheduled_end_date      => l_proj_completion_date
15307     ,x_pev_schedule_id         => l_pev_schedule_id
15308     ,x_return_status           => l_return_status
15309     ,x_msg_count               => l_msg_count
15310     ,x_msg_data                => l_msg_data);
15311 
15312     --Check if there is any error.
15313     l_msg_count := FND_MSG_PUB.count_msg;
15314     IF l_msg_count > 0 THEN
15315       x_msg_count := l_msg_count;
15316       IF x_msg_count = 1 THEN
15317         x_msg_data := l_msg_data;
15318       END IF;
15319       RAISE FND_API.G_EXC_ERROR;
15320     END IF;
15321 
15322     IF (l_template_flag = 'Y') THEN
15323       l_status_code := 'STRUCTURE_WORKING';
15324       l_baseline_flag := 'N';
15325       l_latest_eff_pub_flag := 'N';
15326       l_effective_date := NULL;
15327     ELSE
15328       l_status_code := 'STRUCTURE_PUBLISHED';
15329       l_baseline_flag := 'Y';
15330       l_latest_eff_pub_flag := 'Y';
15331       l_effective_date := sysdate;
15332     END IF;
15333 
15334     --create structure version
15335     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15336     (p_validate_only               => FND_API.G_FALSE
15337     ,p_structure_version_id        => l_structure_version_id
15338     ,p_structure_version_name      => l_wp_name
15339     ,p_structure_version_desc      => NULL
15340     ,p_effective_date              => l_effective_date
15341     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
15342     ,p_locked_status_code          => 'UNLOCKED'
15343     ,p_struct_version_status_code  => l_status_code
15344     ,p_baseline_current_flag       => l_baseline_flag
15345     ,p_baseline_original_flag      => 'N'
15346     ,x_pev_structure_id            => l_pev_structure_id
15347     ,x_return_status               => l_return_status
15348     ,x_msg_count                   => l_msg_count
15349     ,x_msg_data                    => l_msg_data );
15350 
15351     --Check if there is any error.
15352     l_msg_count := FND_MSG_PUB.count_msg;
15353     IF l_msg_count > 0 THEN
15354       x_msg_count := l_msg_count;
15355       IF x_msg_count = 1 THEN
15356         x_msg_data := l_msg_data;
15357       END IF;
15358       RAISE FND_API.G_EXC_ERROR;
15359     END IF;
15360 
15361   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL', 'SHARE_FULL')) THEN
15362     --partial share
15363     --add workplan structure type
15364     OPEN sel_fin_structure_id;
15365     FETCH sel_fin_structure_id into l_structure_id;
15366     CLOSE sel_fin_structure_id;
15367 
15368     OPEN sel_struc_type_id;
15369     FETCH sel_struc_type_id INTO l_struc_type_id;
15370     CLOSE sel_struc_type_id;
15371 
15372     l_proj_structure_type_id := NULL;
15373     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
15374      X_ROWID                  => l_rowid
15375     ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
15376     ,X_PROJ_ELEMENT_ID        => l_structure_id
15377     ,X_STRUCTURE_TYPE_ID      => l_struc_type_id
15378     ,X_RECORD_VERSION_NUMBER  => 1
15379     ,X_ATTRIBUTE_CATEGORY     => NULL
15380     ,X_ATTRIBUTE1             => NULL
15381     ,X_ATTRIBUTE2             => NULL
15382     ,X_ATTRIBUTE3             => NULL
15383     ,X_ATTRIBUTE4             => NULL
15384     ,X_ATTRIBUTE5             => NULL
15385     ,X_ATTRIBUTE6             => NULL
15386     ,X_ATTRIBUTE7             => NULL
15387     ,X_ATTRIBUTE8             => NULL
15388     ,X_ATTRIBUTE9             => NULL
15389     ,X_ATTRIBUTE10            => NULL
15390     ,X_ATTRIBUTE11            => NULL
15391     ,X_ATTRIBUTE12            => NULL
15392     ,X_ATTRIBUTE13            => NULL
15393     ,X_ATTRIBUTE14            => NULL
15394     ,X_ATTRIBUTE15            => NULL);
15395 
15396     --add progress row
15397     l_proj_prog_attr_id := NULL;
15398     PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
15399      p_validate_only       => FND_API.G_FALSE
15400     ,p_project_id          => p_project_id
15401     ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
15402     ,P_OBJECT_ID           => l_structure_id
15403     ,p_action_set_id       => NULL
15404     ,p_structure_type      => 'WORKPLAN' -- Amit
15405     ,x_proj_progress_attr_id => l_proj_prog_attr_id
15406     ,x_return_status       => l_return_status
15407     ,x_msg_count           => x_msg_count
15408     ,x_msg_data            => x_msg_data);
15409 
15410     --Check if there is any error.
15411     l_msg_count := FND_MSG_PUB.count_msg;
15412     IF l_msg_count > 0 THEN
15413       x_msg_count := l_msg_count;
15414       IF x_msg_count = 1 THEN
15415         x_msg_data := l_msg_data;
15416       END IF;
15417       RAISE FND_API.G_EXC_ERROR;
15418     END IF;
15419 
15420     OPEN sel_struc_ver(l_structure_id);
15421     FETCH sel_struc_ver into l_structure_version_id;
15422     CLOSE sel_struc_ver;
15423 
15424     --add financial planning
15425     /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
15426     /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block        */
15427     BEGIN
15428         PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
15429                       p_context                => 'WORKPLAN'
15430                      ,p_project_id             => p_project_id
15431                      ,p_struct_elem_version_id => l_structure_version_id
15432                      ,x_return_status          => l_return_status
15433                      ,x_msg_count              => x_msg_count
15434                      ,x_Msg_data               => x_msg_data);
15435     EXCEPTION
15436        WHEN OTHERS THEN
15437             fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
15438                                     p_procedure_name => 'update_structures_setup_attr',
15439                                     p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
15440        RAISE FND_API.G_EXC_ERROR;
15441     END;
15442     --Check if there is any error.
15443     l_msg_count := FND_MSG_PUB.count_msg;
15444     IF l_msg_count > 0 THEN
15445       x_msg_count := l_msg_count;
15446       IF x_msg_count = 1 THEN
15447         x_msg_data := l_msg_data;
15448       END IF;
15449       RAISE FND_API.G_EXC_ERROR;
15450     END IF;
15451 
15452 
15453     --create schedule row for each task
15454     INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
15455           pev_schedule_id,
15456           element_version_id,
15457           project_id,
15458           proj_element_id,
15459           creation_date,
15460           created_by,
15461           last_update_date,
15462           last_updated_by,
15463           scheduled_start_date,
15464           scheduled_finish_date,
15465           milestone_flag,
15466           critical_flag,
15467           calendar_id,
15468           record_version_number,
15469           last_update_login,
15470       source_object_id,
15471       source_object_type)
15472     SELECT
15473           pa_proj_elem_ver_schedule_s.nextval,
15474           PPEV.element_version_id,
15475           PPEV.project_id,
15476           PPEV.proj_element_id,
15477           SYSDATE,
15478           FND_GLOBAL.USER_ID,
15479           SYSDATE,
15480           FND_GLOBAL.USER_ID,
15481           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.START_DATE), trunc(l_proj_start_date))),
15482           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_proj_completion_date))),
15483           'N',
15484           'N',
15485           NULL,
15486           0,
15487           FND_GLOBAL.LOGIN_ID,
15488       PPEV.project_id,
15489       'PA_PROJECTS'
15490     FROM PA_TASKS PT,
15491          PA_PROJ_ELEMENT_VERSIONS PPEV
15492     WHERE
15493          PPEV.parent_structure_version_id = l_structure_version_id
15494     AND  PPEV.proj_element_id = PT.task_id (+);
15495 
15496     OPEN sel_struc_and_task_vers(l_structure_version_id);
15497     LOOP
15498       FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
15499       EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
15500       /* Bug 2790703 Begin */
15501       --Add to array for rollup
15502       l_index := l_index + 1;
15503       l_task_ver_ids_tbl(l_index) := l_element_version_id;
15504       /* Bug 2790703 End */
15505       END LOOP;
15506     CLOSE sel_struc_and_task_vers;
15507 
15508     IF (l_task_ver_ids_tbl.count > 0) THEN
15509       --rollup
15510       PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
15511        p_commit => FND_API.G_FALSE,
15512        p_element_versions => l_task_ver_ids_tbl,
15513        x_return_status => l_return_status,
15514        x_msg_count => l_msg_count,
15515        x_msg_data => l_msg_data);
15516 
15517       --Check if there is any error.
15518       l_msg_count := FND_MSG_PUB.count_msg;
15519       IF l_msg_count > 0 THEN
15520         x_msg_count := l_msg_count;
15521         IF x_msg_count = 1 THEN
15522           x_msg_data := l_msg_data;
15523         END IF;
15524         RAISE FND_API.G_EXC_ERROR;
15525       END IF;
15526     END IF;
15527 
15528     IF (l_status_code = 'STRUCTURE_PUBLISHED') OR
15529        (l_template_flag = 'Y') THEN
15530       OPEN get_scheduled_dates(p_project_id, l_structure_version_id);
15531       FETCH get_scheduled_dates into l_get_sch_dates_cur;
15532       CLOSE get_scheduled_dates;
15533 
15534       /* the record version number contained in the variabe l_proj_rec_ver_num is
15535         no more latest bcoz there was an update done by some other api by now.
15536         selcting latest record version number to avoid concurrency issue. maansari*/
15537       OPEN get_template_flag;
15538       FETCH get_template_flag into l_template_flag, l_proj_rec_ver_num;
15539       CLOSE get_template_flag;
15540 
15541       PA_PROJECT_DATES_PUB.UPDATE_PROJECT_DATES (
15542             p_validate_only        => FND_API.G_FALSE
15543            ,p_project_id           => p_project_id
15544            ,p_date_type            => 'SCHEDULED'
15545            ,p_start_date           => l_get_sch_dates_cur.scheduled_start_date
15546            ,p_finish_date          => l_get_sch_dates_cur.scheduled_finish_date
15547            ,p_record_version_number=> l_proj_rec_ver_num
15548            ,x_return_status        => x_return_status
15549            ,x_msg_count            => x_msg_count
15550            ,x_msg_data             => x_msg_data );
15551 
15552       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15553         RAISE FND_API.G_EXC_ERROR;
15554       END IF;
15555     END IF;
15556 
15557     RECALC_FIN_TASK_WEIGHTS(
15558        p_structure_version_id => l_structure_version_id
15559      , p_project_id           => p_project_id
15560      , x_msg_count            => l_msg_count
15561      , x_msg_data             => l_msg_data
15562      , x_return_status        => l_return_status);
15563 
15564     l_msg_count := FND_MSG_PUB.count_msg;
15565     IF l_msg_count > 0 THEN
15566       x_msg_count := l_msg_count;
15567       IF x_msg_count = 1 THEN
15568         x_msg_data := l_msg_data;
15569       END IF;
15570       RAISE FND_API.G_EXC_ERROR;
15571     END IF;
15572 
15573 -- Begin fix for Bug # 4426392.
15574 
15575 -- For a FINANCIAL structure only project that is part of a program, if WORKPLAN structure is enabled
15576 -- and the structures are SHARED.
15577 
15578 if (nvl(l_program, 'N') = 'Y') then
15579 
15580         for l_cur_links_rec in cur_links (p_project_id)
15581         loop
15582 
15583                 -- Delete the 'LW' or 'LF' links that currently exist from the task version.
15584 
15585                 pa_relationship_pub.delete_subproject_association
15586                 (p_api_version                   =>     p_api_version
15587                 ,p_init_msg_list                 =>     p_init_msg_list
15588                 ,p_commit                        =>     p_commit
15589                 ,p_validate_only                 =>     p_validate_only
15590                 ,p_validation_level              =>     p_validation_level
15591                 ,p_calling_module                =>     p_calling_module
15592                 ,p_debug_mode                    =>     p_debug_mode
15593                 ,p_max_msg_count                 =>     p_max_msg_count
15594                 ,p_object_relationships_id       =>     l_cur_links_rec.obj_rel_id
15595                 ,p_record_version_number         =>     l_cur_links_rec.rec_ver_number
15596                 ,x_return_status                 =>     x_return_status
15597                 ,x_msg_count                     =>     x_msg_count
15598                 ,x_msg_data                      =>     x_msg_data);
15599 
15600                 -- Create both the 'LW' and 'LF' links anew from the task version.
15601 
15602                 pa_relationship_pub.create_subproject_association
15603                 (p_api_version                   =>     p_api_version
15604                 ,p_init_msg_list                 =>     p_init_msg_list
15605                 ,p_commit                        =>     p_commit
15606                 ,p_validate_only                 =>     p_validate_only
15607                 ,p_validation_level              =>     p_validation_level
15608                 ,p_calling_module                =>     p_calling_module
15609                 ,p_debug_mode                    =>     p_debug_mode
15610                 ,p_max_msg_count                 =>     p_max_msg_count
15611                 ,p_src_proj_id                   =>     l_cur_links_rec.src_proj_id
15612                 ,p_task_ver_id                   =>     l_cur_links_rec.task_ver_id
15613                 ,p_dest_proj_id                  =>     l_cur_links_rec.dest_proj_id
15614                 ,p_dest_proj_name                =>     l_dest_proj_name
15615                 ,p_comment                       =>     l_comment
15616                 ,x_return_status                 =>     x_return_status
15617                 ,x_msg_count                     =>     x_msg_count
15618                 ,x_msg_data                      =>     x_msg_data);
15619 
15620                 -- Set the process update flag for the source structure version to 'Y'.
15621 
15622                 update pa_proj_elem_ver_structure ppevs
15623                 set ppevs.process_update_wbs_flag = 'Y'
15624                 where ppevs.element_version_id = l_cur_links_rec.src_str_ver_id
15625                 and ppevs.project_id = l_cur_links_rec.src_proj_id;
15626 
15627         end loop;
15628 
15629 end if;
15630 
15631 -- End fix for Bug # 4426392.
15632 
15633     IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
15634       --extra code for partial share
15635       NULL;
15636     ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
15637       --extra code for full share
15638       NULL;
15639     END IF;
15640 
15641   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING', 'SPLIT_MAPPING')) THEN
15642     --split mapping
15643     --Create default workplan structure
15644     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15645     (p_validate_only           => FND_API.G_FALSE
15646     ,p_project_id              => p_project_id
15647     ,p_structure_number        => l_wp_name
15648     ,p_structure_name          => l_wp_name
15649     ,p_calling_flag            => 'WORKPLAN'
15650     ,x_structure_id            => l_structure_id
15651     ,x_return_status           => l_return_status
15652     ,x_msg_count               => l_msg_count
15653     ,x_msg_data                => l_msg_data );
15654 
15655     --Check if there is any error.
15656     l_msg_count := FND_MSG_PUB.count_msg;
15657     IF l_msg_count > 0 THEN
15658       x_msg_count := l_msg_count;
15659       IF x_msg_count = 1 THEN
15660         x_msg_data := l_msg_data;
15661       END IF;
15662       RAISE FND_API.G_EXC_ERROR;
15663     END IF;
15664 
15665     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15666     (p_validate_only         => FND_API.G_FALSE
15667     ,p_structure_id          => l_structure_id
15668     ,x_structure_version_id  => l_structure_version_id
15669     ,x_return_status         => l_return_status
15670     ,x_msg_count             => l_msg_count
15671     ,x_msg_data              => l_msg_data );
15672 
15673     --Check if there is any error.
15674     l_msg_count := FND_MSG_PUB.count_msg;
15675     IF l_msg_count > 0 THEN
15676       x_msg_count := l_msg_count;
15677       IF x_msg_count = 1 THEN
15678         x_msg_data := l_msg_data;
15679       END IF;
15680       RAISE FND_API.G_EXC_ERROR;
15681     END IF;
15682 
15683     PA_TASK_PUB1.Create_Schedule_Version(
15684      p_element_version_id      => l_structure_version_id
15685     ,p_scheduled_start_date    => l_proj_start_date
15686     ,p_scheduled_end_date      => l_proj_completion_date
15687     ,x_pev_schedule_id         => l_pev_schedule_id
15688     ,x_return_status           => l_return_status
15689     ,x_msg_count               => l_msg_count
15690     ,x_msg_data                => l_msg_data);
15691 
15692     --Check if there is any error.
15693     l_msg_count := FND_MSG_PUB.count_msg;
15694     IF l_msg_count > 0 THEN
15695       x_msg_count := l_msg_count;
15696       IF x_msg_count = 1 THEN
15697         x_msg_data := l_msg_data;
15698       END IF;
15699       RAISE FND_API.G_EXC_ERROR;
15700     END IF;
15701 
15702     IF (l_template_flag = 'Y') THEN
15703       l_status_code := 'STRUCTURE_WORKING';
15704       l_baseline_flag := 'N';
15705       l_latest_eff_pub_flag := 'N';
15706       l_effective_date := NULL;
15707     ELSE
15708       l_status_code := 'STRUCTURE_PUBLISHED';
15709       l_baseline_flag := 'Y';
15710       l_latest_eff_pub_flag := 'Y';
15711       l_effective_date := sysdate;
15712     END IF;
15713 
15714     --create structure version
15715     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15716     (p_validate_only               => FND_API.G_FALSE
15717     ,p_structure_version_id        => l_structure_version_id
15718     ,p_structure_version_name      => l_name
15719     ,p_structure_version_desc      => NULL
15720     ,p_effective_date              => l_effective_date
15721     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
15722     ,p_locked_status_code          => 'UNLOCKED'
15723     ,p_struct_version_status_code  => l_status_code
15724     ,p_baseline_current_flag       => l_baseline_flag
15725     ,p_baseline_original_flag      => 'N'
15726     ,x_pev_structure_id            => l_pev_structure_id
15727     ,x_return_status               => l_return_status
15728     ,x_msg_count                   => l_msg_count
15729     ,x_msg_data                    => l_msg_data );
15730 
15731     --Check if there is any error.
15732     l_msg_count := FND_MSG_PUB.count_msg;
15733     IF l_msg_count > 0 THEN
15734       x_msg_count := l_msg_count;
15735       IF x_msg_count = 1 THEN
15736         x_msg_data := l_msg_data;
15737       END IF;
15738       RAISE FND_API.G_EXC_ERROR;
15739     END IF;
15740 
15741     IF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
15742       NULL;
15743     ELSIF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
15744       NULL;
15745     END IF;
15746   END IF;
15747 
15748 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'N') THEN
15749   --financial currently disabled
15750   IF (p_workplan_enabled_flag = 'N') THEN
15751     --disabled both
15752     --delete all dependencies
15753     --disable workplan
15754 
15755     --get structure_id
15756     OPEN sel_wp_structure_id;
15757     FETCH sel_wp_structure_id INTO l_structure_id;
15758     CLOSE sel_wp_structure_id;
15759 
15760     --delete workplan structure
15761     OPEN sel_all_wp_structure_ver(l_structure_id);
15762     LOOP
15763       FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
15764                                           l_struc_ver_rvn;
15765       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
15766       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
15767                        p_project_id,
15768                        l_del_struc_ver_id,
15769                        l_return_status,
15770                        l_err_msg_code);
15771       IF (l_return_status <> 'S') THEN
15772         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15773         x_msg_data := l_err_msg_code;
15774         RAISE FND_API.G_EXC_ERROR;
15775       END IF;
15776 
15777       --get top tasks
15778       OPEN get_top_tasks(l_del_struc_ver_id);
15779       LOOP
15780         FETCH get_top_tasks into l_task_ver_id;
15781         EXIT WHEN get_top_tasks%NOTFOUND;
15782 
15783         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
15784                p_project_id                   => p_project_id
15785               ,p_task_version_id              => l_task_ver_id
15786               ,p_parent_structure_ver_id      => l_del_struc_ver_id
15787               ,x_return_status                => l_return_status
15788               ,x_error_message_code           => l_err_msg_code );
15789 
15790         IF (l_return_status <> 'S') THEN
15791           x_return_status := l_return_status;
15792           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
15793           l_msg_data := l_err_msg_code;
15794           CLOSE get_top_tasks;
15795           RAISE FND_API.G_EXC_ERROR;
15796         END IF;
15797       END LOOP;
15798       CLOSE get_top_tasks;
15799 
15800       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
15801               p_structure_version_id => l_del_struc_ver_id
15802              ,p_record_version_number => l_struc_ver_rvn
15803              ,x_return_status => l_return_status
15804              ,x_msg_count => l_msg_count
15805              ,x_msg_data => l_msg_data);
15806 
15807       --Check if there is any error.
15808       l_msg_count := FND_MSG_PUB.count_msg;
15809       IF l_msg_count > 0 THEN
15810         x_msg_count := l_msg_count;
15811         IF x_msg_count = 1 THEN
15812           x_msg_data := l_msg_data;
15813         END IF;
15814         CLOSE sel_all_wp_structure_ver;
15815         RAISE FND_API.G_EXC_ERROR;
15816       END IF;
15817     END LOOP;
15818     CLOSE sel_all_wp_structure_ver;
15819 
15820     IF (p_financial_enabled_flag = 'N') THEN
15821       NULL;
15822     ELSIF (p_financial_enabled_flag = 'Y') THEN
15823       --call enable financial structure API
15824       --enable financial structure API
15825       PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
15826       (p_validate_only => FND_API.G_FALSE
15827       ,p_project_id    => p_project_id
15828       ,p_structure_number => l_name
15829       ,p_structure_name   => l_name
15830       ,p_calling_flag     => 'FINANCIAL'
15831       ,x_structure_id     => l_structure_id
15832       ,x_return_status    => l_return_status
15833       ,x_msg_count        => l_msg_count
15834       ,x_msg_data         => l_msg_data);
15835 
15836       --Check if there is any error.
15837       l_msg_count := FND_MSG_PUB.count_msg;
15838       IF l_msg_count > 0 THEN
15839         x_msg_count := l_msg_count;
15840         IF x_msg_count = 1 THEN
15841           x_msg_data := l_msg_data;
15842         END IF;
15843         RAISE FND_API.G_EXC_ERROR;
15844       END IF;
15845 
15846       --create row in pa_proj_workplan_attr
15847       PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
15848       (p_validate_only => FND_API.G_FALSE
15849       ,p_project_id => p_project_id
15850       ,p_proj_element_id => l_structure_id
15851       ,x_return_status    => l_return_status
15852       ,x_msg_count        => l_msg_count
15853       ,x_msg_data         => l_msg_data);
15854 
15855       --Check if there is any error.
15856       l_msg_count := FND_MSG_PUB.count_msg;
15857       IF l_msg_count > 0 THEN
15858         x_msg_count := l_msg_count;
15859         IF x_msg_count = 1 THEN
15860           x_msg_data := l_msg_data;
15861         END IF;
15862         RAISE FND_API.G_EXC_ERROR;
15863       END IF;
15864 
15865       --create structure version
15866       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
15867       (p_validate_only         => FND_API.G_FALSE
15868       ,p_structure_id          => l_structure_id
15869       ,x_structure_version_id  => l_structure_version_id
15870       ,x_return_status         => l_return_status
15871       ,x_msg_count             => l_msg_count
15872       ,x_msg_data              => l_msg_data );
15873 
15874       --Check if there is any error.
15875       l_msg_count := FND_MSG_PUB.count_msg;
15876       IF l_msg_count > 0 THEN
15877         x_msg_count := l_msg_count;
15878         IF x_msg_count = 1 THEN
15879           x_msg_data := l_msg_data;
15880         END IF;
15881         RAISE FND_API.G_EXC_ERROR;
15882       END IF;
15883 
15884       IF (l_template_flag = 'Y') THEN
15885         l_status_code := 'STRUCTURE_WORKING';
15886         l_baseline_flag := 'N';
15887         l_latest_eff_pub_flag := 'N';
15888         l_effective_date := NULL;
15889       ELSE
15890         l_status_code := 'STRUCTURE_PUBLISHED';
15891         l_baseline_flag := 'N';
15892         l_latest_eff_pub_flag := 'Y';
15893         l_effective_date := sysdate;
15894       END IF;
15895 
15896       --create structure version
15897       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
15898       (p_validate_only               => FND_API.G_FALSE
15899       ,p_structure_version_id        => l_structure_version_id
15900       ,p_structure_version_name      => l_name
15901       ,p_structure_version_desc      => NULL
15902       ,p_effective_date              => l_effective_date
15903       ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
15904       ,p_locked_status_code          => 'UNLOCKED'
15905       ,p_struct_version_status_code  => l_status_code
15906       ,p_baseline_current_flag       => l_baseline_flag
15907       ,p_baseline_original_flag      => 'N'
15908       ,x_pev_structure_id            => l_pev_structure_id
15909       ,x_return_status               => l_return_status
15910       ,x_msg_count                   => l_msg_count
15911       ,x_msg_data                    => l_msg_data );
15912 
15913       --Check if there is any error.
15914       l_msg_count := FND_MSG_PUB.count_msg;
15915       IF l_msg_count > 0 THEN
15916         x_msg_count := l_msg_count;
15917         IF x_msg_count = 1 THEN
15918           x_msg_data := l_msg_data;
15919         END IF;
15920         RAISE FND_API.G_EXC_ERROR;
15921       END IF;
15922 
15923     END IF;
15924 
15925   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
15926     --disable financial (enable workplan), do nothing
15927     NULL;
15928   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_PARTIAL','SHARE_FULL')) THEN
15929     --partial share
15930     --add financial structure type
15931     OPEN sel_wp_structure_id;
15932     FETCH sel_wp_structure_id INTO l_structure_id;
15933     CLOSE sel_wp_structure_id;
15934 
15935     --create financial type
15936     OPEN sel_fin_struc_type_id;
15937     FETCH sel_fin_struc_type_id INTO l_fin_struc_type_id;
15938     CLOSE sel_fin_struc_type_id;
15939 
15940     l_proj_structure_type_id := NULL;
15941     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
15942      X_ROWID                  => l_rowid
15943     ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
15944     ,X_PROJ_ELEMENT_ID        => l_structure_id
15945     ,X_STRUCTURE_TYPE_ID      => l_fin_struc_type_id
15946     ,X_RECORD_VERSION_NUMBER  => 1
15947     ,X_ATTRIBUTE_CATEGORY     => NULL
15948     ,X_ATTRIBUTE1             => NULL
15949     ,X_ATTRIBUTE2             => NULL
15950     ,X_ATTRIBUTE3             => NULL
15951     ,X_ATTRIBUTE4             => NULL
15952     ,X_ATTRIBUTE5             => NULL
15953     ,X_ATTRIBUTE6             => NULL
15954     ,X_ATTRIBUTE7             => NULL
15955     ,X_ATTRIBUTE8             => NULL
15956     ,X_ATTRIBUTE9             => NULL
15957     ,X_ATTRIBUTE10            => NULL
15958     ,X_ATTRIBUTE11            => NULL
15959     ,X_ATTRIBUTE12            => NULL
15960     ,X_ATTRIBUTE13            => NULL
15961     ,X_ATTRIBUTE14            => NULL
15962     ,X_ATTRIBUTE15            => NULL
15963     );
15964 
15965     --get structure version id
15966     OPEN sel_struc_ver(l_structure_id);
15967     FETCH sel_struc_ver into l_structure_version_id;
15968     CLOSE sel_struc_ver;
15969 
15970     -- Bug 3938654 : Additional Fix that will go as a part of this bug
15971     --               This fix is not related to main issue reported in the bug
15972 
15973     -- The present case is when WP is already enabled (l_wp_enabled = Y) and Fin. is disabled(l_fin_enabled = N)
15974     --  But Now,We have enabled Fin. (i.e) p_financial_enabled_flag = Y and made in a shared structure(may be full / partial)
15975 
15976     -- In this Case ,The Already Existing Structure Name will be of the format l_name : Workplan
15977     -- (Because earlier itself WP was enabled and the structure name hence would be of above format)
15978 
15979     -- While we are going to 'SHARE' it now ,We have to reset the Structure Name Format to : l_name
15980     -- This is needed because : Later If we try to Split the structure ,It will again try to create an empty
15981     -- WP Structure with the structure name in the format l_name : Workplan
15982 
15983     -- Hence ,the structure split will not be allowed as "name not unique error will be thrown"
15984     -- To avoid this Problem , We are resetting the structure name before Sharing
15985 
15986     UPDATE pa_proj_elements
15987        SET name = l_name
15988           ,element_number = l_name
15989      WHERE proj_element_id = l_structure_id ;
15990 
15991     -- End of Fix : 3938654
15992 
15993     --bug 4114101
15994     --insert progress attr row for financial struc
15995     PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
15996      p_validate_only            => FND_API.G_FALSE
15997     ,p_project_id               => p_project_id
15998     ,P_OBJECT_TYPE              => 'PA_STRUCTURES'
15999     ,P_OBJECT_ID                => l_structure_id
16000     ,P_PROGRESS_CYCLE_ID        => to_number(null)
16001     ,P_WQ_ENABLE_FLAG           => 'N'
16002     ,P_REMAIN_EFFORT_ENABLE_FLAG    => 'N'
16003     ,P_PERCENT_COMP_ENABLE_FLAG     => 'Y'
16004     ,P_NEXT_PROGRESS_UPDATE_DATE    => to_date(null)
16005     ,p_TASK_WEIGHT_BASIS_CODE       => 'COST'
16006     ,X_PROJ_PROGRESS_ATTR_ID        => l_proj_progress_attr_id
16007     ,P_ALLOW_COLLAB_PROG_ENTRY      => 'N'
16008     ,P_ALLW_PHY_PRCNT_CMP_OVERRIDES     => 'Y'
16009     ,p_structure_type                   => 'FINANCIAL' --Amit
16010     ,x_return_status                => l_return_status
16011     ,x_msg_count                => l_msg_count
16012     ,x_msg_data                     => l_msg_data
16013     );
16014 
16015     l_msg_count := FND_MSG_PUB.count_msg;
16016     IF l_msg_count > 0 THEN
16017       x_msg_count := l_msg_count;
16018       IF x_msg_count = 1 THEN
16019         x_msg_data := l_msg_data;
16020       END IF;
16021       RAISE FND_API.G_EXC_ERROR;
16022     END IF;
16023     --end bug 4114101
16024 
16025     IF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
16026       NULL;
16027     ELSIF (p_sharing_option_code = 'SHARE_FULL') THEN
16028       --set financial task flag to Y for all tasks
16029       update pa_proj_element_versions
16030          set financial_task_flag = 'Y'
16031        where parent_structure_version_id = l_structure_version_id
16032          and object_type = 'PA_TASKS'
16033          and proj_element_id NOT IN
16034              (select proj_element_id
16035                 from pa_proj_elements
16036                where project_id = p_project_id
16037                  and object_type = 'PA_TASKS'
16038                  and link_task_flag = 'Y');
16039     END IF;
16040 
16041     --need to call sync up API
16042     PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN
16043      (p_patask_record_version_number   => NULL
16044      ,p_parent_task_version_id         => NULL
16045      ,p_project_id                     => p_project_id
16046      ,p_syncup_all_tasks               => 'Y'
16047      ,p_task_version_id                => NULL
16048      ,p_structure_version_id           => l_structure_version_id
16049      ,p_check_for_transactions         => 'N'
16050      ,p_checked_flag                   => FND_API.G_MISS_CHAR
16051      ,p_mode                           => 'ALL'
16052      ,x_return_status                  => l_return_status
16053      ,x_msg_count                      => l_msg_count
16054      ,x_msg_data                       => l_msg_data);
16055 
16056     --Check if there is any error.
16057     l_msg_count := FND_MSG_PUB.count_msg;
16058     IF l_msg_count > 0 THEN
16059       x_msg_count := l_msg_count;
16060       IF x_msg_count = 1 THEN
16061         x_msg_data := l_msg_data;
16062       END IF;
16063       RAISE FND_API.G_EXC_ERROR;
16064     END IF;
16065 
16066 -- Begin fix for Bug # 4426392.
16067 
16068 -- For a WORKPLAN structure only project that is part of a program, if a FINANCIAL structure is enabled
16069 -- and the structures are SHARED.
16070 
16071 if (nvl(l_program, 'N') = 'Y') then
16072 
16073         for l_cur_links_rec in cur_links (p_project_id)
16074         loop
16075 
16076                 -- Delete the 'LW' or 'LF' links that currently exist from the task version.
16077 
16078                 pa_relationship_pub.delete_subproject_association
16079                 (p_api_version                   =>     p_api_version
16080                 ,p_init_msg_list                 =>     p_init_msg_list
16081                 ,p_commit                        =>     p_commit
16082                 ,p_validate_only                 =>     p_validate_only
16083                 ,p_validation_level              =>     p_validation_level
16084                 ,p_calling_module                =>     p_calling_module
16085                 ,p_debug_mode                    =>     p_debug_mode
16086                 ,p_max_msg_count                 =>     p_max_msg_count
16087                 ,p_object_relationships_id       =>     l_cur_links_rec.obj_rel_id
16088                 ,p_record_version_number         =>     l_cur_links_rec.rec_ver_number
16089                 ,x_return_status                 =>     x_return_status
16090                 ,x_msg_count                     =>     x_msg_count
16091                 ,x_msg_data                      =>     x_msg_data);
16092 
16093                 -- Create both the 'LW' and 'LF' links anew from the task version.
16094 
16095                 pa_relationship_pub.create_subproject_association
16096                 (p_api_version                   =>     p_api_version
16097                 ,p_init_msg_list                 =>     p_init_msg_list
16098                 ,p_commit                        =>     p_commit
16099                 ,p_validate_only                 =>     p_validate_only
16100                 ,p_validation_level              =>     p_validation_level
16101                 ,p_calling_module                =>     p_calling_module
16102                 ,p_debug_mode                    =>     p_debug_mode
16103                 ,p_max_msg_count                 =>     p_max_msg_count
16104                 ,p_src_proj_id                   =>     l_cur_links_rec.src_proj_id
16105                 ,p_task_ver_id                   =>     l_cur_links_rec.task_ver_id
16106                 ,p_dest_proj_id                  =>     l_cur_links_rec.dest_proj_id
16107                 ,p_dest_proj_name                =>     l_dest_proj_name
16108                 ,p_comment                       =>     l_comment
16109                 ,x_return_status                 =>     x_return_status
16110                 ,x_msg_count                     =>     x_msg_count
16111                 ,x_msg_data                      =>     x_msg_data);
16112 
16113                 -- Set the process update flag for the source structure version to 'Y'.
16114 
16115                 update pa_proj_elem_ver_structure ppevs
16116                 set ppevs.process_update_wbs_flag = 'Y'
16117                 where ppevs.element_version_id = l_cur_links_rec.src_str_ver_id
16118                 and ppevs.project_id = l_cur_links_rec.src_proj_id;
16119 
16120         end loop;
16121 
16122 end if;
16123 
16124 -- End fix for Bug # 4426392.
16125 
16126     -- Amit : Add progress attr fro Financial here
16127   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
16128     --split mapping/ no mapping
16129     --call enable financial structure API
16130     --create financial structure API
16131     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
16132     (p_validate_only => FND_API.G_FALSE
16133     ,p_project_id    => p_project_id
16134     ,p_structure_number => l_name
16135     ,p_structure_name   => l_name
16136     ,p_calling_flag     => 'FINANCIAL'
16137     ,x_structure_id     => l_structure_id
16138     ,x_return_status    => l_return_status
16139     ,x_msg_count        => l_msg_count
16140     ,x_msg_data         => l_msg_data);
16141 
16142     --Check if there is any error.
16143     l_msg_count := FND_MSG_PUB.count_msg;
16144     IF l_msg_count > 0 THEN
16145       x_msg_count := l_msg_count;
16146       IF x_msg_count = 1 THEN
16147         x_msg_data := l_msg_data;
16148       END IF;
16149       RAISE FND_API.G_EXC_ERROR;
16150     END IF;
16151 
16152     --create row in pa_proj_workplan_attr
16153     PA_PROJECT_STRUCTURE_PUB1.ENABLE_FINANCIAL_STRUCTURE
16154     (p_validate_only => FND_API.G_FALSE
16155     ,p_project_id => p_project_id
16156     ,p_proj_element_id => l_structure_id
16157     ,x_return_status    => l_return_status
16158     ,x_msg_count        => l_msg_count
16159     ,x_msg_data         => l_msg_data);
16160 
16161     --Check if there is any error.
16162     l_msg_count := FND_MSG_PUB.count_msg;
16163     IF l_msg_count > 0 THEN
16164       x_msg_count := l_msg_count;
16165       IF x_msg_count = 1 THEN
16166         x_msg_data := l_msg_data;
16167       END IF;
16168       RAISE FND_API.G_EXC_ERROR;
16169     END IF;
16170 
16171     --create structure version
16172     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
16173     (p_validate_only         => FND_API.G_FALSE
16174     ,p_structure_id          => l_structure_id
16175     ,x_structure_version_id  => l_structure_version_id
16176     ,x_return_status         => l_return_status
16177     ,x_msg_count             => l_msg_count
16178     ,x_msg_data              => l_msg_data );
16179 
16180     --Check if there is any error.
16181     l_msg_count := FND_MSG_PUB.count_msg;
16182     IF l_msg_count > 0 THEN
16183       x_msg_count := l_msg_count;
16184       IF x_msg_count = 1 THEN
16185         x_msg_data := l_msg_data;
16186       END IF;
16187       RAISE FND_API.G_EXC_ERROR;
16188     END IF;
16189 
16190     IF (l_template_flag = 'Y') THEN
16191       l_status_code := 'STRUCTURE_WORKING';
16192       l_baseline_flag := 'N';
16193       l_latest_eff_pub_flag := 'N';
16194       l_effective_date := NULL;
16195     ELSE
16196       l_status_code := 'STRUCTURE_PUBLISHED';
16197       l_baseline_flag := 'N';
16198       l_latest_eff_pub_flag := 'Y';
16199       l_effective_date := sysdate;
16200     END IF;
16201 
16202     --create structure version
16203     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
16204     (p_validate_only               => FND_API.G_FALSE
16205     ,p_structure_version_id        => l_structure_version_id
16206     ,p_structure_version_name      => l_name
16207     ,p_structure_version_desc      => NULL
16208     ,p_effective_date              => l_effective_date
16209     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
16210     ,p_locked_status_code          => 'UNLOCKED'
16211     ,p_struct_version_status_code  => l_status_code
16212     ,p_baseline_current_flag       => l_baseline_flag
16213     ,p_baseline_original_flag      => 'N'
16214     ,x_pev_structure_id            => l_pev_structure_id
16215     ,x_return_status               => l_return_status
16216     ,x_msg_count                   => l_msg_count
16217     ,x_msg_data                    => l_msg_data );
16218 
16219     --Check if there is any error.
16220     l_msg_count := FND_MSG_PUB.count_msg;
16221     IF l_msg_count > 0 THEN
16222       x_msg_count := l_msg_count;
16223       IF x_msg_count = 1 THEN
16224         x_msg_data := l_msg_data;
16225       END IF;
16226       RAISE FND_API.G_EXC_ERROR;
16227     END IF;
16228 
16229     IF (p_sharing_option_code = 'SPLIT_MAPPING') THEN
16230       NULL;
16231     ELSIF (p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
16232       NULL;
16233     END IF;
16234   END IF;
16235 
16236 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_PARTIAL') THEN
16237   --currently partial share
16238   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
16239     --disabled both
16240     --delete all dependencies
16241     --delete Financial structure API
16242     --get structure id
16243     OPEN sel_wp_structure_id;
16244     FETCH sel_wp_structure_id INTO l_structure_id;
16245     CLOSE sel_wp_structure_id;
16246 
16247     OPEN sel_all_wp_structure_ver(l_structure_id);
16248     LOOP
16249       FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16250       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16251 
16252       PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
16253               p_structure_version_id => l_structure_version_id
16254              ,p_record_version_number => l_struc_ver_rvn
16255              ,x_return_status => l_return_status
16256              ,x_msg_count => l_msg_count
16257              ,x_msg_data => l_msg_data
16258       );
16259 
16260       IF (l_return_status <> 'S') THEN
16261         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16262         x_msg_data := l_err_msg_code;
16263         RAISE FND_API.G_EXC_ERROR;
16264       END IF;
16265 
16266     END LOOP;
16267     CLOSE sel_all_wp_structure_ver;
16268 
16269   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_NO_MAPPING', 'SPLIT_MAPPING')) OR (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
16270     --split mapping/split no mapping/disable workplan
16271     --delete all tasks not marked as financial
16272     --get structure id
16273     OPEN sel_wp_structure_id;
16274     FETCH sel_wp_structure_id INTO l_structure_id;
16275     CLOSE sel_wp_structure_id;
16276 
16277     --get structure version id
16278     OPEN sel_latest_pub_ver(l_structure_id);
16279     FETCH sel_latest_pub_ver into l_structure_version_id;
16280     IF sel_latest_pub_ver%NOTFOUND THEN
16281       l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16282     ELSE
16283       l_keep_structure_ver_id := l_structure_version_id;
16284     END IF;
16285     CLOSE sel_latest_pub_ver;
16286 
16287 /*  Bug 3597178 Commented the call to PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS
16288     As we can change from a shared to split,mapped etc even though deliverable transactions exist
16289     --NYU
16290     --Check if deliverable transactions exist.  If so, we cannot change the structure sharing to SPLIT
16291     l_del_trans_exist := PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS(
16292         p_project_id => p_project_id,
16293         x_return_status => l_return_status,
16294         x_msg_count => x_msg_count,
16295         x_msg_data => x_msg_data);
16296     IF l_del_trans_exist = 'Y' THEN
16297         RAISE FND_API.G_EXC_ERROR;
16298     END IF;
16299 */
16300     --delete wp budget for the version we keep
16301     l_struct_version_id_tbl.extend(1); /* Venky */
16302     l_struct_version_id_tbl(1) := l_keep_structure_ver_id;
16303     /*Smukka Bug No. 3474141 Date 03/01/2004                                  */
16304     /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block        */
16305     BEGIN
16306          /*Commented call to this API and replaced with pa_fin_plan_pvt.Delete_wp_option
16307           for Bug 3954050
16308         PA_FIN_PLAN_PVT.delete_wp_budget_versions(
16309                      p_struct_elem_version_id_tbl    => l_struct_version_id_tbl
16310                     ,x_return_status                 => l_return_status
16311                     ,x_msg_count                     => x_msg_count
16312                     ,x_Msg_data                      => x_msg_data);
16313        */
16314         PA_FIN_PLAN_PVT.delete_wp_option
16315         (
16316                 p_project_id        =>  p_project_id,
16317                 x_return_status     => l_return_status,
16318                 x_msg_count         => x_msg_count,
16319                 x_msg_data          => x_msg_data
16320         );
16321     EXCEPTION
16322         WHEN OTHERS THEN
16323              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
16324                                      p_procedure_name => 'update_structures_setup_attr',
16325                                      p_error_text     => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_options :'||SQLERRM,1,240));
16326         RAISE FND_API.G_EXC_ERROR;
16327     END;
16328     l_msg_count := FND_MSG_PUB.count_msg;
16329     IF l_msg_count > 0 THEN
16330       x_msg_count := l_msg_count;
16331       IF x_msg_count = 1 THEN
16332         x_msg_data := l_msg_data;
16333       END IF;
16334       RAISE FND_API.G_EXC_ERROR;
16335     END IF;
16336 
16337     --Delete all other structure versions
16338     OPEN sel_other_structure_ver(l_keep_structure_ver_id);
16339     LOOP
16340       FETCH sel_other_structure_ver into l_del_struc_ver_id,
16341                                          l_struc_ver_rvn;
16342       EXIT WHEN sel_other_structure_ver%NOTFOUND;
16343       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16344                        p_project_id,
16345                        l_del_struc_ver_id,
16346                        l_return_status,
16347                        l_err_msg_code);
16348       IF (l_return_status <> 'S') THEN
16349         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16350         x_msg_data := l_err_msg_code;
16351         RAISE FND_API.G_EXC_ERROR;
16352       END IF;
16353 
16354       --get top tasks
16355       OPEN get_top_tasks(l_del_struc_ver_id);
16356       LOOP
16357         FETCH get_top_tasks into l_task_ver_id;
16358         EXIT WHEN get_top_tasks%NOTFOUND;
16359 
16360         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16361                p_project_id                   => p_project_id
16362               ,p_task_version_id              => l_task_ver_id
16363               ,p_parent_structure_ver_id      => l_del_struc_ver_id
16364               ,x_return_status                => l_return_status
16365               ,x_error_message_code           => l_err_msg_code );
16366 
16367         IF (l_return_status <> 'S') THEN
16368           x_return_status := l_return_status;
16369           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16370           l_msg_data := l_err_msg_code;
16371           CLOSE get_top_tasks;
16372           RAISE FND_API.G_EXC_ERROR;
16373         END IF;
16374       END LOOP;
16375       CLOSE get_top_tasks;
16376 
16377       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16378               p_structure_version_id => l_del_struc_ver_id
16379              ,p_record_version_number => l_struc_ver_rvn
16380              ,x_return_status => l_return_status
16381              ,x_msg_count => l_msg_count
16382              ,x_msg_data => l_msg_data);
16383       --Check if there is any error.
16384       l_msg_count := FND_MSG_PUB.count_msg;
16385       IF l_msg_count > 0 THEN
16386         x_msg_count := l_msg_count;
16387         IF x_msg_count = 1 THEN
16388           x_msg_data := l_msg_data;
16389         END IF;
16390         CLOSE sel_other_structure_ver;
16391         RAISE FND_API.G_EXC_ERROR;
16392       END IF;
16393     END LOOP;
16394     CLOSE sel_other_structure_ver;
16395 
16396     --delete from pa_proj_progress_attr
16397     PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
16398             p_validate_only        => FND_API.G_FALSE
16399            ,p_project_id           => p_project_id
16400            ,P_OBJECT_TYPE          => 'PA_STRUCTURES'
16401            ,p_object_id            => l_structure_id
16402        ,p_structure_type       => 'WORKPLAN'
16403            ,x_return_status        => l_return_status
16404            ,x_msg_count            => l_msg_count
16405            ,x_msg_data             => l_msg_data
16406           );
16407 
16408     --Check if there is any error.
16409     l_msg_count := FND_MSG_PUB.count_msg;
16410     IF l_msg_count > 0 THEN
16411       x_msg_count := l_msg_count;
16412       IF x_msg_count = 1 THEN
16413         x_msg_data := l_msg_data;
16414       END IF;
16415       RAISE FND_API.G_EXC_ERROR;
16416     END IF;
16417 
16418     --delete all tasks not marked as financial in the structure keeping
16419     --delete schedule versions
16420     delete from pa_proj_elem_ver_schedule
16421     where project_id =p_project_id       --Bug No 3634334
16422       and element_version_id IN (
16423       select element_version_id
16424       from pa_proj_element_versions
16425       where project_id = p_project_id    --Bug No 3634334
16426       and parent_structure_version_id = l_keep_structure_ver_id
16427       and object_type IN ('PA_TASKS', 'PA_STRUCTURES'));
16428 
16429     --delete relationships
16430     --Bug No 3634334 Commented for performance tuning and rewritten the query.
16431 /*    delete from pa_object_relationships rel
16432     where rel.relationship_type IN ('D','S')
16433     and EXISTS (
16434       select 1 from pa_proj_element_versions
16435       where (rel.object_id_from1 = element_version_id OR
16436       rel.object_id_to1 = element_version_id ) and
16437       parent_structure_version_id = l_keep_structure_ver_id and
16438       financial_task_flag = 'N'); */
16439 
16440     --Bug No 3634334 Created for performance tuning for the above query.
16441 
16442     delete from pa_object_relationships rel
16443     where OBJECT_RELATIONSHIP_ID IN (
16444          select OBJECT_RELATIONSHIP_ID
16445            from pa_object_relationships rel,
16446                 pa_proj_element_versions
16447           where rel.relationship_type IN ('D','S')
16448             and object_type_to = 'PA_TASKS'
16449             and rel.object_id_to1 = element_version_id
16450             and parent_structure_version_id = l_keep_structure_ver_id
16451             and financial_task_flag = 'N'
16452           UNION
16453          select OBJECT_RELATIONSHIP_ID
16454            from pa_object_relationships rel,
16455                 pa_proj_element_versions
16456           where rel.relationship_type IN ('D','S')
16457             and object_type_from = 'PA_TASKS'
16458             and rel.object_id_from1 = element_version_id
16459             and parent_structure_version_id = l_keep_structure_ver_id
16460             and financial_task_flag = 'N');
16461 
16462 /*   Bug 3906015 Just moved the existing code after the delete statements
16463      to this position
16464 */
16465     -- NYU
16466     -- delete deliverable associations
16467     PA_DELIVERABLE_PUB.delete_dlv_associations
16468         (p_project_id=>p_project_id,
16469         x_return_status=>l_return_status,
16470         x_msg_count=>l_msg_count,
16471         x_msg_data=>l_msg_data);
16472 
16473     --delete elements
16474     delete from pa_proj_elements ppe
16475     where proj_element_ID in (
16476       select proj_element_id
16477       from pa_proj_element_versions
16478       where parent_structure_version_id = l_keep_structure_ver_id
16479       and object_type = 'PA_TASKS'
16480       and financial_task_flag = 'N');
16481 
16482     --delete element versions
16483     Delete from pa_proj_element_versions
16484     where parent_structure_version_id = l_keep_structure_ver_id
16485     and object_type = 'PA_TASKS'
16486     and financial_task_flag = 'N';
16487 
16488     --delete from pa_proj_structure_types
16489     DELETe FROM pa_proj_structure_types
16490     where proj_element_id = l_structure_id
16491     and structure_type_id = (
16492       select structure_type_id from pa_structure_types
16493       where structure_type = 'WORKPLAN');
16494 
16495 /*   Bug 3906015
16496      Moved this code to above (i.e) before deleting the elements (Before deleting task)
16497      This is necessary because : delete_dlv_associations API has been modified
16498      in such a way that it retrives the tasks from pa_proj_element_versions table for the passed project_id
16499      and then for those values ,it performs deliverable related validations for Workplan Task Deletion
16500 
16501      If this call,is after delete statement on pa_proj_element_versions tables,the logic written
16502      in delete_dlv_associations APi will fail .Hence moved the code up.
16503 
16504     -- NYU
16505     -- delete deliverable associations
16506     PA_DELIVERABLE_PUB.delete_dlv_associations
16507         (p_project_id=>p_project_id,
16508         x_return_status=>l_return_status,
16509         x_msg_count=>l_msg_count,
16510         x_msg_data=>l_msg_data);
16511 */
16512 
16513     --Check if there is any error.
16514     l_msg_count := FND_MSG_PUB.count_msg;
16515     IF l_msg_count > 0 THEN
16516       x_msg_count := l_msg_count;
16517       IF x_msg_count = 1 THEN
16518         x_msg_data := l_msg_data;
16519       END IF;
16520       RAISE FND_API.G_EXC_ERROR;
16521     END IF;
16522 
16523     --bug 3894059
16524     --set versioning disable for financial structure, and structure version as published if it is a project
16525     update pa_proj_workplan_attr
16526        set WP_ENABLE_VERSION_FLAG = 'N'
16527      where proj_element_id = l_structure_id;
16528 
16529     IF (l_template_flag <> 'Y') THEN
16530       --project
16531       update pa_proj_elem_ver_structure
16532          set status_code = 'STRUCTURE_PUBLISHED',
16533              latest_eff_published_flag = 'Y',
16534              published_date = sysdate
16535       where project_id = p_project_id
16536         and element_version_id = l_keep_structure_ver_id;
16537     END IF;
16538     --end bug 3894059
16539 
16540     IF (p_workplan_enabled_flag = 'Y' AND p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
16541         --Create empty workplan structure
16542       l_structure_id := NULL;
16543       PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
16544       (p_validate_only           => FND_API.G_FALSE
16545       ,p_project_id              => p_project_id
16546       ,p_structure_number        => l_wp_name
16547       ,p_structure_name          => l_wp_name
16548       ,p_calling_flag            => 'WORKPLAN'
16549       ,x_structure_id            => l_structure_id
16550       ,x_return_status           => l_return_status
16551       ,x_msg_count               => l_msg_count
16552       ,x_msg_data                => l_msg_data );
16553 
16554       --Check if there is any error.
16555       l_msg_count := FND_MSG_PUB.count_msg;
16556       IF l_msg_count > 0 THEN
16557         x_msg_count := l_msg_count;
16558         IF x_msg_count = 1 THEN
16559           x_msg_data := l_msg_data;
16560         END IF;
16561         RAISE FND_API.G_EXC_ERROR;
16562       END IF;
16563 
16564       l_structure_version_id := NULL;
16565       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
16566        (p_validate_only         => FND_API.G_FALSE
16567        ,p_structure_id          => l_structure_id
16568        ,x_structure_version_id  => l_structure_version_id
16569        ,x_return_status         => l_return_status
16570        ,x_msg_count             => l_msg_count
16571        ,x_msg_data              => l_msg_data );
16572 
16573       --Check if there is any error.
16574       l_msg_count := FND_MSG_PUB.count_msg;
16575       IF l_msg_count > 0 THEN
16576         x_msg_count := l_msg_count;
16577         IF x_msg_count = 1 THEN
16578           x_msg_data := l_msg_data;
16579         END IF;
16580         RAISE FND_API.G_EXC_ERROR;
16581       END IF;
16582 
16583       PA_TASK_PUB1.Create_Schedule_Version(
16584        p_element_version_id      => l_structure_version_id
16585       ,p_scheduled_start_date    => l_proj_start_date
16586       ,p_scheduled_end_date      => l_proj_completion_date
16587       ,x_pev_schedule_id         => l_pev_schedule_id
16588       ,x_return_status           => l_return_status
16589       ,x_msg_count               => l_msg_count
16590       ,x_msg_data                => l_msg_data);
16591 
16592       --Check if there is any error.
16593       l_msg_count := FND_MSG_PUB.count_msg;
16594       IF l_msg_count > 0 THEN
16595         x_msg_count := l_msg_count;
16596         IF x_msg_count = 1 THEN
16597           x_msg_data := l_msg_data;
16598         END IF;
16599         RAISE FND_API.G_EXC_ERROR;
16600       END IF;
16601 
16602       IF (l_template_flag = 'Y') THEN
16603         l_status_code := 'STRUCTURE_WORKING';
16604         l_baseline_flag := 'N';
16605         l_latest_eff_pub_flag := 'N';
16606         l_effective_date := NULL;
16607       ELSE
16608         l_status_code := 'STRUCTURE_PUBLISHED';
16609         l_baseline_flag := 'Y';
16610         l_latest_eff_pub_flag := 'Y';
16611         l_effective_date := sysdate;
16612       END IF;
16613 
16614       --create structure version
16615       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
16616       (p_validate_only               => FND_API.G_FALSE
16617       ,p_structure_version_id        => l_structure_version_id
16618       ,p_structure_version_name      => l_name
16619       ,p_structure_version_desc      => NULL
16620       ,p_effective_date              => l_effective_date
16621       ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
16622       ,p_locked_status_code          => 'UNLOCKED'
16623       ,p_struct_version_status_code  => l_status_code
16624       ,p_baseline_current_flag       => l_baseline_flag
16625       ,p_baseline_original_flag      => 'N'
16626       ,x_pev_structure_id            => l_pev_structure_id
16627       ,x_return_status               => l_return_status
16628       ,x_msg_count                   => l_msg_count
16629       ,x_msg_data                    => l_msg_data );
16630 
16631       --Check if there is any error.
16632       l_msg_count := FND_MSG_PUB.count_msg;
16633       IF l_msg_count > 0 THEN
16634         x_msg_count := l_msg_count;
16635         IF x_msg_count = 1 THEN
16636           x_msg_data := l_msg_data;
16637         END IF;
16638         RAISE FND_API.G_EXC_ERROR;
16639       END IF;
16640 
16641       NULL;
16642     ELSIF (p_workplan_enabled_flag = 'N' ) THEN
16643       NULL;
16644     END IF;
16645 
16646   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
16647     --disable financial (enable workplan)
16648     --get structure id
16649     OPEN sel_wp_structure_id;
16650     FETCH sel_wp_structure_id INTO l_structure_id;
16651     CLOSE sel_wp_structure_id;
16652 
16653     update pa_proj_elements
16654     set name = l_wp_name,
16655         element_number = l_wp_name
16656     where proj_element_id = l_structure_id;
16657 
16658     --Need delete financial tasks API
16659     PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
16660      p_validate_only     => FND_API.G_FALSE
16661     ,p_project_id        => p_project_id
16662     ,x_return_status     => l_return_status
16663     ,x_msg_count         => l_msg_count
16664     ,x_msg_data          => l_msg_data);
16665 
16666     --Check if there is any error.
16667     l_msg_count := FND_MSG_PUB.count_msg;
16668     IF l_msg_count > 0 THEN
16669       x_msg_count := l_msg_count;
16670       IF x_msg_count = 1 THEN
16671         x_msg_data := l_msg_data;
16672       END IF;
16673       RAISE FND_API.G_EXC_ERROR;
16674     END IF;
16675 
16676     --clear financial Flag API
16677     OPEN sel_all_wp_structure_ver(l_structure_id);
16678     LOOP
16679       FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16680       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16681 
16682       PA_PROJECT_STRUCTURE_PUB1.CLEAR_FINANCIAL_FLAG(
16683        p_validate_only => FND_API.G_FALSE
16684       ,p_project_id    => p_project_id
16685       ,p_task_version_id => NULL
16686       ,p_structure_version_id => l_structure_version_id
16687       ,x_return_status     => l_return_status
16688       ,x_msg_count         => l_msg_count
16689       ,x_msg_data          => l_msg_data);
16690 
16691       --Check if there is any error.
16692       l_msg_count := FND_MSG_PUB.count_msg;
16693       IF l_msg_count > 0 THEN
16694         x_msg_count := l_msg_count;
16695         IF x_msg_count = 1 THEN
16696           x_msg_data := l_msg_data;
16697         END IF;
16698         RAISE FND_API.G_EXC_ERROR;
16699       END IF;
16700 
16701     END LOOP;
16702     CLOSE sel_all_wp_structure_ver;
16703 
16704   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_PARTIAL') THEN
16705     --partial share; no action required
16706     NULL;
16707   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_FULL') THEN
16708     --full share
16709     --Need to call sync up API
16710     --get structure id
16711     OPEN sel_wp_structure_id;
16712     FETCH sel_wp_structure_id INTO l_structure_id;
16713     CLOSE sel_wp_structure_id;
16714 
16715     --get structure version id
16716     OPEN sel_latest_pub_ver(l_structure_id);
16717     FETCH sel_latest_pub_ver into l_structure_version_id;
16718     IF sel_latest_pub_ver%NOTFOUND THEN
16719       l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16720     ELSE
16721       l_keep_structure_ver_id := l_structure_version_id;
16722     END IF;
16723     CLOSE sel_latest_pub_ver;
16724 
16725     update pa_proj_element_versions
16726        set financial_task_flag = 'Y'
16727      where parent_structure_version_id = l_structure_version_id
16728        and object_type = 'PA_TASKS'
16729        and proj_element_id NOT IN
16730            (select proj_element_id
16731               from pa_proj_elements
16732              where project_id = p_project_id
16733                and object_type = 'PA_TASKS'
16734                and link_task_flag = 'Y');
16735 
16736     --need to call sync up API
16737     PA_TASKS_MAINT_PUB.SYNC_UP_WP_TASKS_WITH_FIN
16738      (p_patask_record_version_number   => NULL
16739      ,p_parent_task_version_id         => NULL
16740      ,p_project_id                     => p_project_id
16741      ,p_syncup_all_tasks               => 'Y'
16742      ,p_task_version_id                => NULL
16743      ,p_structure_version_id           => l_structure_version_id
16744      ,p_check_for_transactions         => 'N'
16745      ,p_checked_flag                   => FND_API.G_MISS_CHAR
16746      ,p_mode                           => 'ALL'
16747       ,x_return_status     => l_return_status
16748       ,x_msg_count         => l_msg_count
16749       ,x_msg_data          => l_msg_data);
16750 
16751     --Check if there is any error.
16752     l_msg_count := FND_MSG_PUB.count_msg;
16753     IF l_msg_count > 0 THEN
16754       x_msg_count := l_msg_count;
16755       IF x_msg_count = 1 THEN
16756         x_msg_data := l_msg_data;
16757       END IF;
16758       RAISE FND_API.G_EXC_ERROR;
16759     END IF;
16760 
16761   END IF;
16762 
16763 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_FULL') THEN
16764   --currently full share
16765   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') THEN
16766     --disabled both
16767     --delete all dependencies
16768     --delete Financial structure API
16769     --get structure id
16770     OPEN sel_wp_structure_id;
16771     FETCH sel_wp_structure_id INTO l_structure_id;
16772     CLOSE sel_wp_structure_id;
16773 
16774     OPEN sel_all_wp_structure_ver(l_structure_id);
16775     LOOP
16776       FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
16777       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
16778 
16779       PA_PROJECT_STRUCTURE_PVT1.Delete_Struc_Ver_Wo_Val(
16780               p_structure_version_id => l_structure_version_id
16781              ,p_record_version_number => l_struc_ver_rvn
16782              ,x_return_status => l_return_status
16783              ,x_msg_count => l_msg_count
16784              ,x_msg_data => l_msg_data
16785       );
16786 
16787       IF (l_return_status <> 'S') THEN
16788         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16789         x_msg_data := l_err_msg_code;
16790         RAISE FND_API.G_EXC_ERROR;
16791       END IF;
16792 
16793     END LOOP;
16794     CLOSE sel_all_wp_structure_ver;
16795 
16796   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SPLIT_MAPPING', 'SPLIT_NO_MAPPING')) OR (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') THEN
16797     --split mapping/split no mapping/disable workplan
16798     --get structure id
16799     OPEN sel_wp_structure_id;
16800     FETCH sel_wp_structure_id INTO l_structure_id;
16801     CLOSE sel_wp_structure_id;
16802 
16803     --get structure version id
16804     OPEN sel_latest_pub_ver(l_structure_id);
16805     FETCH sel_latest_pub_ver into l_structure_version_id;
16806     IF sel_latest_pub_ver%NOTFOUND THEN
16807       l_keep_structure_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_structure_id);
16808     ELSE
16809       l_keep_structure_ver_id := l_structure_version_id;
16810     END IF;
16811     CLOSE sel_latest_pub_ver;
16812 
16813     -- Bug 3938654 : Additional Fix that will go as a part of this bug
16814     --               This fix is not related to main issue reported in the bug
16815 
16816     -- Actually this call should not be present .This fix should have been
16817     -- done long back as a part of 3597178
16818     -- For the case l_wp_enabled_flag=Y,l_fin_enabled_flag=Y,l_share_code=SHARE_PARTIAL ,this fix
16819     -- has already been done .For this case (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SHARE_FULL')
16820     -- It had been missed.
16821 
16822    /*  Hence doing the commenting
16823     --NYU
16824     --Check if deliverable transactions exist.  If so, we cannot change the structure sharing to SPLIT
16825     l_del_trans_exist := PA_DELIVERABLE_UTILS.CHECK_PROJ_DLV_TXN_EXISTS(
16826         p_project_id => p_project_id,
16827         x_return_status => l_return_status,
16828         x_msg_count => x_msg_count,
16829         x_msg_data => x_msg_data);
16830     IF l_del_trans_exist = 'Y' THEN
16831         RAISE FND_API.G_EXC_ERROR;
16832     END IF;
16833    */
16834 
16835     --delete wp budget for the version we keep
16836     l_struct_version_id_tbl.extend(1); /* Venky */
16837     l_struct_version_id_tbl(1) := l_keep_structure_ver_id;
16838     /*Smukka Bug No. 3474141 Date 03/01/2004                                  */
16839     /*moved PA_FIN_PLAN_PVT.delete_wp_budget_versions into plsql block        */
16840     BEGIN
16841         /*Commented call to this API and replaced with pa_fin_plan_pvt.Delete_wp_option
16842           for Bug 3954050
16843         PA_FIN_PLAN_PVT.delete_wp_budget_versions(
16844                      p_struct_elem_version_id_tbl    => l_struct_version_id_tbl
16845                     ,x_return_status                 => l_return_status
16846                     ,x_msg_count                     => x_msg_count
16847                     ,x_Msg_data                      => x_msg_data);
16848         */
16849         PA_FIN_PLAN_PVT.delete_wp_option
16850         (
16851                 p_project_id        =>  p_project_id,
16852                 x_return_status     => l_return_status,
16853                 x_msg_count         => x_msg_count,
16854                 x_msg_data          => x_msg_data
16855         );
16856     EXCEPTION
16857         WHEN OTHERS THEN
16858              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
16859                                      p_procedure_name => 'update_structures_setup_attr',
16860                                      p_error_text     => SUBSTRB('PA_FIN_PLAN_PVT.delete_wp_option:'||SQLERRM,1,240));
16861         RAISE FND_API.G_EXC_ERROR;
16862     END;
16863     l_msg_count := FND_MSG_PUB.count_msg;
16864     IF l_msg_count > 0 THEN
16865       x_msg_count := l_msg_count;
16866       IF x_msg_count = 1 THEN
16867         x_msg_data := l_msg_data;
16868       END IF;
16869       RAISE FND_API.G_EXC_ERROR;
16870     END IF;
16871 
16872     --Delete all other structure versions
16873     OPEN sel_other_structure_ver(l_keep_structure_ver_id);
16874     LOOP
16875       FETCH sel_other_structure_ver into l_del_struc_ver_id,
16876                                          l_struc_ver_rvn;
16877       EXIT WHEN sel_other_structure_ver%NOTFOUND;
16878       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
16879                        p_project_id,
16880                        l_del_struc_ver_id,
16881                        l_return_status,
16882                        l_err_msg_code);
16883       IF (l_return_status <> 'S') THEN
16884         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16885         x_msg_data := l_err_msg_code;
16886         RAISE FND_API.G_EXC_ERROR;
16887       END IF;
16888 
16889       --get top tasks
16890       OPEN get_top_tasks(l_del_struc_ver_id);
16891       LOOP
16892         FETCH get_top_tasks into l_task_ver_id;
16893         EXIT WHEN get_top_tasks%NOTFOUND;
16894 
16895         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
16896                p_project_id                   => p_project_id
16897               ,p_task_version_id              => l_task_ver_id
16898               ,p_parent_structure_ver_id      => l_del_struc_ver_id
16899               ,x_return_status                => l_return_status
16900               ,x_error_message_code           => l_err_msg_code );
16901 
16902         IF (l_return_status <> 'S') THEN
16903           x_return_status := l_return_status;
16904           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
16905           l_msg_data := l_err_msg_code;
16906           CLOSE get_top_tasks;
16907           RAISE FND_API.G_EXC_ERROR;
16908         END IF;
16909       END LOOP;
16910       CLOSE get_top_tasks;
16911 
16912       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
16913               p_structure_version_id => l_del_struc_ver_id
16914              ,p_record_version_number => l_struc_ver_rvn
16915              ,x_return_status => l_return_status
16916              ,x_msg_count => l_msg_count
16917              ,x_msg_data => l_msg_data);
16918       --Check if there is any error.
16919       l_msg_count := FND_MSG_PUB.count_msg;
16920       IF l_msg_count > 0 THEN
16921         x_msg_count := l_msg_count;
16922         IF x_msg_count = 1 THEN
16923           x_msg_data := l_msg_data;
16924         END IF;
16925         CLOSE sel_other_structure_ver;
16926         RAISE FND_API.G_EXC_ERROR;
16927       END IF;
16928     END LOOP;
16929     CLOSE sel_other_structure_ver;
16930 
16931     --delete from pa_proj_progress_attr
16932     PA_PROGRESS_PUB.DELETE_PROJ_PROG_ATTR(
16933             p_validate_only        => FND_API.G_FALSE
16934            ,p_project_id           => p_project_id
16935            ,P_OBJECT_TYPE          => 'PA_STRUCTURES'
16936            ,p_object_id            => l_structure_id
16937        ,p_structure_type       => 'WORKPLAN' --Amit
16938            ,x_return_status        => l_return_status
16939            ,x_msg_count            => l_msg_count
16940            ,x_msg_data             => l_msg_data
16941           );
16942 
16943     --Check if there is any error.
16944     l_msg_count := FND_MSG_PUB.count_msg;
16945     IF l_msg_count > 0 THEN
16946       x_msg_count := l_msg_count;
16947       IF x_msg_count = 1 THEN
16948         x_msg_data := l_msg_data;
16949       END IF;
16950       RAISE FND_API.G_EXC_ERROR;
16951     END IF;
16952 
16953     --delete all tasks not marked as financial in the structure keeping
16954     --delete schedule versions
16955     delete from pa_proj_elem_ver_schedule
16956     where project_id =p_project_id                                     --Bug No 3634334
16957       and element_version_id IN (
16958       select element_version_id
16959       from pa_proj_element_versions
16960       where project_id =p_project_id                                   --Bug No 3634334
16961       and parent_structure_version_id = l_keep_structure_ver_id
16962       and object_type IN ('PA_TASKS', 'PA_STRUCTURES'));
16963 
16964     --delete from pa_proj_structure_types
16965     DELETe FROM pa_proj_structure_types
16966     where proj_element_id = l_structure_id
16967     and structure_type_id = (
16968       select structure_type_id from pa_structure_types
16969       where structure_type = 'WORKPLAN');
16970 
16971     -- NYU
16972     -- delete deliverable associations
16973     PA_DELIVERABLE_PUB.delete_dlv_associations
16974         (p_project_id=>p_project_id,
16975         x_return_status=>l_return_status,
16976         x_msg_count=>l_msg_count,
16977         x_msg_data=>l_msg_data);
16978 
16979     --Check if there is any error.
16980     l_msg_count := FND_MSG_PUB.count_msg;
16981     IF l_msg_count > 0 THEN
16982       x_msg_count := l_msg_count;
16983       IF x_msg_count = 1 THEN
16984         x_msg_data := l_msg_data;
16985       END IF;
16986       RAISE FND_API.G_EXC_ERROR;
16987     END IF;
16988 
16989     --bug 3894059
16990     --set versioning disable for financial structure, and structure version as published if it is a project
16991     update pa_proj_workplan_attr
16992        set WP_ENABLE_VERSION_FLAG = 'N'
16993      where proj_element_id = l_structure_id;
16994 
16995     IF (l_template_flag <> 'Y') THEN
16996       --project
16997       update pa_proj_elem_ver_structure
16998          set status_code = 'STRUCTURE_PUBLISHED',
16999              latest_eff_published_flag = 'Y',
17000              published_date = sysdate
17001       where project_id = p_project_id
17002         and element_version_id = l_keep_structure_ver_id;
17003     END IF;
17004     --end bug 3894059
17005 
17006     IF (p_workplan_enabled_flag = 'Y' AND p_sharing_option_code IN ('SPLIT_NO_MAPPING','SPLIT_MAPPING')) THEN
17007         --Create empty workplan structure
17008       PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
17009       (p_validate_only           => FND_API.G_FALSE
17010       ,p_project_id              => p_project_id
17011       ,p_structure_number        => l_wp_name
17012       ,p_structure_name          => l_wp_name
17013       ,p_calling_flag            => 'WORKPLAN'
17014       ,x_structure_id            => l_structure_id
17015       ,x_return_status           => l_return_status
17016       ,x_msg_count               => l_msg_count
17017       ,x_msg_data                => l_msg_data );
17018 
17019       --Check if there is any error.
17020       l_msg_count := FND_MSG_PUB.count_msg;
17021       IF l_msg_count > 0 THEN
17022         x_msg_count := l_msg_count;
17023         IF x_msg_count = 1 THEN
17024           x_msg_data := l_msg_data;
17025         END IF;
17026         RAISE FND_API.G_EXC_ERROR;
17027       END IF;
17028 
17029       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
17030        (p_validate_only         => FND_API.G_FALSE
17031        ,p_structure_id          => l_structure_id
17032        ,x_structure_version_id  => l_structure_version_id
17033        ,x_return_status         => l_return_status
17034        ,x_msg_count             => l_msg_count
17035        ,x_msg_data              => l_msg_data );
17036 
17037       --Check if there is any error.
17038       l_msg_count := FND_MSG_PUB.count_msg;
17039       IF l_msg_count > 0 THEN
17040         x_msg_count := l_msg_count;
17041         IF x_msg_count = 1 THEN
17042           x_msg_data := l_msg_data;
17043         END IF;
17044         RAISE FND_API.G_EXC_ERROR;
17045       END IF;
17046 
17047       PA_TASK_PUB1.Create_Schedule_Version(
17048        p_element_version_id      => l_structure_version_id
17049       ,p_scheduled_start_date    => l_proj_start_date
17050       ,p_scheduled_end_date      => l_proj_completion_date
17051       ,x_pev_schedule_id         => l_pev_schedule_id
17052       ,x_return_status           => l_return_status
17053       ,x_msg_count               => l_msg_count
17054       ,x_msg_data                => l_msg_data);
17055 
17056       --Check if there is any error.
17057       l_msg_count := FND_MSG_PUB.count_msg;
17058       IF l_msg_count > 0 THEN
17059         x_msg_count := l_msg_count;
17060         IF x_msg_count = 1 THEN
17061           x_msg_data := l_msg_data;
17062         END IF;
17063         RAISE FND_API.G_EXC_ERROR;
17064       END IF;
17065 
17066       IF (l_template_flag = 'Y') THEN
17067         l_status_code := 'STRUCTURE_WORKING';
17068         l_baseline_flag := 'N';
17069         l_latest_eff_pub_flag := 'N';
17070         l_effective_date := NULL;
17071       ELSE
17072         l_status_code := 'STRUCTURE_PUBLISHED';
17073         l_baseline_flag := 'Y';
17074         l_latest_eff_pub_flag := 'Y';
17075         l_effective_date := sysdate;
17076       END IF;
17077 
17078       --create structure version
17079       PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
17080       (p_validate_only               => FND_API.G_FALSE
17081       ,p_structure_version_id        => l_structure_version_id
17082       ,p_structure_version_name      => l_name
17083       ,p_structure_version_desc      => NULL
17084       ,p_effective_date              => l_effective_date
17085       ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
17086       ,p_locked_status_code          => 'UNLOCKED'
17087       ,p_struct_version_status_code  => l_status_code
17088       ,p_baseline_current_flag       => l_baseline_flag
17089       ,p_baseline_original_flag      => 'N'
17090       ,x_pev_structure_id            => l_pev_structure_id
17091       ,x_return_status               => l_return_status
17092       ,x_msg_count                   => l_msg_count
17093       ,x_msg_data                    => l_msg_data );
17094 
17095       --Check if there is any error.
17096       l_msg_count := FND_MSG_PUB.count_msg;
17097       IF l_msg_count > 0 THEN
17098         x_msg_count := l_msg_count;
17099         IF x_msg_count = 1 THEN
17100           x_msg_data := l_msg_data;
17101         END IF;
17102         RAISE FND_API.G_EXC_ERROR;
17103       END IF;
17104 
17105       NULL;
17106     ELSIF (p_workplan_enabled_flag = 'N' ) THEN
17107       NULL;
17108     END IF;
17109 
17110   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
17111     --disable financial (enable workplan)
17112     --call disable financial structure API
17113     --get structure id
17114     OPEN sel_wp_structure_id;
17115     FETCH sel_wp_structure_id INTO l_structure_id;
17116     CLOSE sel_wp_structure_id;
17117 
17118     update pa_proj_elements
17119     set name = l_wp_name,
17120         element_number = l_wp_name
17121     where proj_element_id = l_structure_id;
17122 
17123     --Need delete financial tasks API
17124     PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
17125      p_validate_only     => FND_API.G_FALSE
17126     ,p_project_id        => p_project_id
17127     ,x_return_status     => l_return_status
17128     ,x_msg_count         => l_msg_count
17129     ,x_msg_data          => l_msg_data);
17130 
17131     --Check if there is any error.
17132     l_msg_count := FND_MSG_PUB.count_msg;
17133     IF l_msg_count > 0 THEN
17134       x_msg_count := l_msg_count;
17135       IF x_msg_count = 1 THEN
17136         x_msg_data := l_msg_data;
17137       END IF;
17138       RAISE FND_API.G_EXC_ERROR;
17139     END IF;
17140 
17141     --clear financial Flag API
17142     OPEN sel_all_wp_structure_ver(l_structure_id);
17143     LOOP
17144       FETCH sel_all_wp_structure_ver INTO l_structure_version_id, l_struc_ver_rvn;
17145       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17146 
17147       PA_PROJECT_STRUCTURE_PUB1.CLEAR_FINANCIAL_FLAG(
17148        p_validate_only => FND_API.G_FALSE
17149       ,p_project_id    => p_project_id
17150       ,p_task_version_id => NULL
17151       ,p_structure_version_id => l_structure_version_id
17152       ,x_return_status     => l_return_status
17153       ,x_msg_count         => l_msg_count
17154       ,x_msg_data          => l_msg_data);
17155 
17156       --Check if there is any error.
17157       l_msg_count := FND_MSG_PUB.count_msg;
17158       IF l_msg_count > 0 THEN
17159         x_msg_count := l_msg_count;
17160         IF x_msg_count = 1 THEN
17161           x_msg_data := l_msg_data;
17162         END IF;
17163         RAISE FND_API.G_EXC_ERROR;
17164       END IF;
17165 
17166     END LOOP;
17167     CLOSE sel_all_wp_structure_ver;
17168 
17169   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_PARTIAL') THEN
17170     --partial share; no action required
17171     NULL;
17172   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SHARE_FULL') THEN
17173     --full share; no action required
17174     NULL;
17175   END IF;
17176 
17177 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SPLIT_MAPPING') THEN
17178   --currently split with mapping
17179   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') OR
17180      (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') OR
17181      (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
17182     --disabled both/workplan/financial
17183     --remove mapping APIs
17184     PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
17185        p_project_id        => p_project_id
17186       ,x_return_status     => l_return_status
17187       ,x_msg_count         => l_msg_count
17188       ,x_msg_data          => l_msg_data);
17189 
17190     --Check if there is any error.
17191     l_msg_count := FND_MSG_PUB.count_msg;
17192     IF l_msg_count > 0 THEN
17193       x_msg_count := l_msg_count;
17194       IF x_msg_count = 1 THEN
17195         x_msg_data := l_msg_data;
17196       END IF;
17197       RAISE FND_API.G_EXC_ERROR;
17198     END IF;
17199 
17200     IF (p_workplan_enabled_flag = 'N') THEN
17201       --disable workplan
17202       --get structure_id
17203       OPEN sel_wp_structure_id;
17204       FETCH sel_wp_structure_id INTO l_structure_id;
17205       CLOSE sel_wp_structure_id;
17206 
17207       --delete workplan structure
17208       OPEN sel_all_wp_structure_ver(l_structure_id);
17209       LOOP
17210         FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17211                                           l_struc_ver_rvn;
17212         EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17213         PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17214                        p_project_id,
17215                        l_del_struc_ver_id,
17216                        l_return_status,
17217                        l_err_msg_code);
17218         IF (l_return_status <> 'S') THEN
17219           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17220           x_msg_data := l_err_msg_code;
17221           RAISE FND_API.G_EXC_ERROR;
17222         END IF;
17223 
17224         --get top tasks
17225         OPEN get_top_tasks(l_del_struc_ver_id);
17226         LOOP
17227           FETCH get_top_tasks into l_task_ver_id;
17228           EXIT WHEN get_top_tasks%NOTFOUND;
17229 
17230           PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17231                p_project_id                   => p_project_id
17232               ,p_task_version_id              => l_task_ver_id
17233               ,p_parent_structure_ver_id      => l_del_struc_ver_id
17234               ,x_return_status                => l_return_status
17235               ,x_error_message_code           => l_err_msg_code );
17236 
17237           IF (l_return_status <> 'S') THEN
17238             x_return_status := l_return_status;
17239             PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17240             l_msg_data := l_err_msg_code;
17241             CLOSE get_top_tasks;
17242             RAISE FND_API.G_EXC_ERROR;
17243           END IF;
17244         END LOOP;
17245         CLOSE get_top_tasks;
17246 
17247         PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17248               p_structure_version_id => l_del_struc_ver_id
17249              ,p_record_version_number => l_struc_ver_rvn
17250              ,x_return_status => l_return_status
17251              ,x_msg_count => l_msg_count
17252              ,x_msg_data => l_msg_data);
17253 
17254         --Check if there is any error.
17255         l_msg_count := FND_MSG_PUB.count_msg;
17256         IF l_msg_count > 0 THEN
17257           x_msg_count := l_msg_count;
17258           IF x_msg_count = 1 THEN
17259             x_msg_data := l_msg_data;
17260           END IF;
17261           CLOSE sel_all_wp_structure_ver;
17262           RAISE FND_API.G_EXC_ERROR;
17263         END IF;
17264       END LOOP;
17265       CLOSE sel_all_wp_structure_ver;
17266     END IF;
17267 
17268     IF (p_financial_enabled_flag = 'N') THEN
17269       --disable financial structure API
17270       PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
17271        p_validate_only     => FND_API.G_FALSE
17272       ,p_project_id        => p_project_id
17273       ,x_return_status     => l_return_status
17274       ,x_msg_count         => l_msg_count
17275       ,x_msg_data          => l_msg_data);
17276 
17277       --Check if there is any error.
17278       l_msg_count := FND_MSG_PUB.count_msg;
17279       IF l_msg_count > 0 THEN
17280         x_msg_count := l_msg_count;
17281         IF x_msg_count = 1 THEN
17282           x_msg_data := l_msg_data;
17283         END IF;
17284         RAISE FND_API.G_EXC_ERROR;
17285       END IF;
17286     END IF;
17287 
17288   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
17289     --partial share/full share
17290     --remove mapping APIs
17291     PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
17292        p_project_id        => p_project_id
17293       ,x_return_status     => l_return_status
17294       ,x_msg_count         => l_msg_count
17295       ,x_msg_data          => l_msg_data);
17296 
17297     --loop and delete all workplan versions
17298     OPEN sel_wp_structure_id;
17299     FETCH sel_wp_structure_id INTO l_structure_id;
17300     CLOSE sel_wp_structure_id;
17301 
17302     OPEN sel_all_wp_structure_ver(l_structure_id);
17303     LOOP
17304       FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17305                                           l_struc_ver_rvn;
17306       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17307       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17308                        p_project_id,
17309                        l_del_struc_ver_id,
17310                        l_return_status,
17311                        l_err_msg_code);
17312       IF (l_return_status <> 'S') THEN
17313         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17314         x_msg_data := l_err_msg_code;
17315         RAISE FND_API.G_EXC_ERROR;
17316       END IF;
17317 
17318       --get top tasks
17319       OPEN get_top_tasks(l_del_struc_ver_id);
17320       LOOP
17321         FETCH get_top_tasks into l_task_ver_id;
17322         EXIT WHEN get_top_tasks%NOTFOUND;
17323 
17324         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17325                p_project_id                   => p_project_id
17326               ,p_task_version_id              => l_task_ver_id
17327               ,p_parent_structure_ver_id      => l_del_struc_ver_id
17328               ,x_return_status                => l_return_status
17329               ,x_error_message_code           => l_err_msg_code );
17330 
17331 
17332         IF (l_return_status <> 'S') THEN
17333           x_return_status := l_return_status;
17334           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17335           l_msg_data := l_err_msg_code;
17336           CLOSE get_top_tasks;
17337           RAISE FND_API.G_EXC_ERROR;
17338         END IF;
17339       END LOOP;
17340       CLOSE get_top_tasks;
17341 
17342       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17343               p_structure_version_id => l_del_struc_ver_id
17344              ,p_record_version_number => l_struc_ver_rvn
17345              ,x_return_status => l_return_status
17346              ,x_msg_count => l_msg_count
17347              ,x_msg_data => l_msg_data
17348       );
17349 
17350       --Check if there is any error.
17351       l_msg_count := FND_MSG_PUB.count_msg;
17352       IF l_msg_count > 0 THEN
17353         x_msg_count := l_msg_count;
17354         IF x_msg_count = 1 THEN
17355           x_msg_data := l_msg_data;
17356         END IF;
17357         CLOSE sel_all_wp_structure_ver;
17358         RAISE FND_API.G_EXC_ERROR;
17359       END IF;
17360     END LOOP;
17361     CLOSE sel_all_wp_structure_ver;
17362 
17363     --Add structure type to financial
17364     OPEN sel_fin_structure_id;
17365     FETCH sel_fin_structure_id into l_structure_id;
17366     CLOSE sel_fin_structure_id;
17367 
17368     OPEN sel_struc_type_id;
17369     FETCH sel_struc_type_id INTO l_struc_type_id;
17370     CLOSE sel_struc_type_id;
17371 
17372     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
17373               X_ROWID                  => l_rowid
17374              ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
17375              ,X_PROJ_ELEMENT_ID        => l_structure_id
17376              ,X_STRUCTURE_TYPE_ID      => l_struc_type_id
17377              ,X_RECORD_VERSION_NUMBER  => 1
17378              ,X_ATTRIBUTE_CATEGORY     => NULL
17379              ,X_ATTRIBUTE1             => NULL
17380              ,X_ATTRIBUTE2             => NULL
17381              ,X_ATTRIBUTE3             => NULL
17382              ,X_ATTRIBUTE4             => NULL
17383              ,X_ATTRIBUTE5             => NULL
17384              ,X_ATTRIBUTE6             => NULL
17385              ,X_ATTRIBUTE7             => NULL
17386              ,X_ATTRIBUTE8             => NULL
17387              ,X_ATTRIBUTE9             => NULL
17388              ,X_ATTRIBUTE10            => NULL
17389              ,X_ATTRIBUTE11            => NULL
17390              ,X_ATTRIBUTE12            => NULL
17391              ,X_ATTRIBUTE13            => NULL
17392              ,X_ATTRIBUTE14            => NULL
17393              ,X_ATTRIBUTE15            => NULL);
17394 
17395     l_proj_prog_attr_id := NULL;
17396     PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
17397      p_validate_only       => FND_API.G_FALSE
17398     ,p_project_id          => p_project_id
17399     ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
17400     ,P_OBJECT_ID           => l_structure_id
17401     ,p_action_set_id       => NULL
17402     ,p_structure_type      => 'WORKPLAN' --Amit
17403     ,x_proj_progress_attr_id => l_proj_prog_attr_id
17404     ,x_return_status       => l_return_status
17405     ,x_msg_count           => x_msg_count
17406     ,x_msg_data            => x_msg_data);
17407 
17408     --get structure version id
17409     OPEN sel_struc_ver(l_structure_id);
17410     FETCH sel_struc_ver into l_structure_version_id;
17411     CLOSE sel_struc_ver;
17412 
17413     --add planning transaction to the shared structure version
17414     --add financial planning
17415     /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
17416     /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block        */
17417     BEGIN
17418         PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
17419                       p_context                => 'WORKPLAN'
17420                      ,p_project_id             => p_project_id
17421                      ,p_struct_elem_version_id => l_structure_version_id
17422                      ,x_return_status          => l_return_status
17423                      ,x_msg_count              => x_msg_count
17424                      ,x_Msg_data               => x_msg_data);
17425     EXCEPTION
17426         WHEN OTHERS THEN
17427              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
17428                                      p_procedure_name => 'update_structures_setup_attr',
17429                                      p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
17430         RAISE FND_API.G_EXC_ERROR;
17431     END;
17432     --Check if there is any error.
17433     l_msg_count := FND_MSG_PUB.count_msg;
17434     IF l_msg_count > 0 THEN
17435       x_msg_count := l_msg_count;
17436       IF x_msg_count = 1 THEN
17437         x_msg_data := l_msg_data;
17438       END IF;
17439       RAISE FND_API.G_EXC_ERROR;
17440     END IF;
17441 
17442     --create schedule row for each task
17443     INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
17444           pev_schedule_id,
17445           element_version_id,
17446           project_id,
17447           proj_element_id,
17448           creation_date,
17449           created_by,
17450           last_update_date,
17451           last_updated_by,
17452           scheduled_start_date,
17453           scheduled_finish_date,
17454           milestone_flag,
17455           critical_flag,
17456           calendar_id,
17457           record_version_number,
17458           last_update_login,
17459       source_object_id,
17460       source_object_type)
17461     SELECT
17462           pa_proj_elem_ver_schedule_s.nextval,
17463           PPEV.element_version_id,
17464           PPEV.project_id,
17465           PPEV.proj_element_id,
17466           SYSDATE,
17467           FND_GLOBAL.USER_ID,
17468           SYSDATE,
17469           FND_GLOBAL.USER_ID,
17470           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.START_DATE), trunc(l_proj_start_date))),
17471           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_proj_completion_date))),
17472           'N',
17473           'N',
17474           NULL,
17475           0,
17476           FND_GLOBAL.LOGIN_ID,
17477       PPEV.project_id,
17478       'PA_PROJECTS'
17479     FROM PA_TASKS PT,
17480          PA_PROJ_ELEMENT_VERSIONS PPEV
17481     WHERE
17482          PPEV.parent_structure_version_id = l_structure_version_id
17483     AND  PPEV.proj_element_id = PT.task_id (+);
17484 
17485     OPEN sel_struc_and_task_vers(l_structure_version_id);
17486     LOOP
17487       FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
17488       EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
17489       /* Bug 2790703 Begin */
17490       --Add to array for rollup
17491       l_index := l_index + 1;
17492       l_task_ver_ids_tbl(l_index) := l_element_version_id;
17493       /* Bug 2790703 End */
17494       END LOOP;
17495     CLOSE sel_struc_and_task_vers;
17496 
17497     IF (l_task_ver_ids_tbl.count > 0) THEN
17498       --rollup
17499       PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
17500        p_commit => FND_API.G_FALSE,
17501        p_element_versions => l_task_ver_ids_tbl,
17502        x_return_status => l_return_status,
17503        x_msg_count => l_msg_count,
17504        x_msg_data => l_msg_data);
17505 
17506       --Check if there is any error.
17507       l_msg_count := FND_MSG_PUB.count_msg;
17508       IF l_msg_count > 0 THEN
17509         x_msg_count := l_msg_count;
17510         IF x_msg_count = 1 THEN
17511           x_msg_data := l_msg_data;
17512         END IF;
17513         RAISE FND_API.G_EXC_ERROR;
17514       END IF;
17515     END IF;
17516 
17517     --Check if there is any error.
17518     l_msg_count := FND_MSG_PUB.count_msg;
17519     IF l_msg_count > 0 THEN
17520       x_msg_count := l_msg_count;
17521       IF x_msg_count = 1 THEN
17522         x_msg_data := l_msg_data;
17523       END IF;
17524       RAISE FND_API.G_EXC_ERROR;
17525     END IF;
17526 
17527 
17528     -- Bug # 5077599.
17529 
17530     -- If the project is version disabled, then baseline the structure version.
17531 
17532     if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'N') then
17533 
17534         update pa_proj_elem_ver_structure ppevs
17535         set ppevs.current_flag = 'Y'
17536             , ppevs.original_flag = 'Y'
17537             , ppevs.record_version_number = (ppevs.record_version_number+1)
17538         where ppevs.project_id = p_project_id
17539         and ppevs.element_version_id = l_structure_version_id;
17540 
17541         PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION
17542         (p_commit                 => p_commit
17543         ,p_validate_only          => p_validate_only
17544         ,p_validation_level       => p_validation_level
17545         ,p_calling_module         => p_calling_module
17546         ,p_debug_mode             => p_debug_mode
17547         ,p_max_msg_count          => p_max_msg_count
17548         ,p_structure_version_id   => l_structure_version_id
17549         ,x_return_status          => x_return_status
17550         ,x_msg_count              => x_msg_count
17551         ,x_msg_data               => x_msg_data);
17552 
17553     end if;
17554 
17555     -- Bug # 5077599.
17556 
17557 
17558     IF (p_sharing_option_code = 'SHARE_FULL') THEN
17559       NULL;
17560     ELSIF (p_sharing_option_code = 'SHARE_PARTIAL') THEN
17561       NULL;
17562     END IF;
17563   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_MAPPING') THEN
17564     --split mapping; no action required
17565     NULL;
17566   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
17567     --split no mapping
17568     --remove mapping APIs
17569     PA_PROJ_STRUC_MAPPING_PUB.DELETE_ALL_MAPPING(
17570        p_project_id        => p_project_id
17571       ,x_return_status     => l_return_status
17572       ,x_msg_count         => l_msg_count
17573       ,x_msg_data          => l_msg_data);
17574 
17575     --Check if there is any error.
17576     l_msg_count := FND_MSG_PUB.count_msg;
17577     IF l_msg_count > 0 THEN
17578       x_msg_count := l_msg_count;
17579       IF x_msg_count = 1 THEN
17580         x_msg_data := l_msg_data;
17581       END IF;
17582       RAISE FND_API.G_EXC_ERROR;
17583     END IF;
17584 
17585   END IF;
17586 
17587 ELSIF (l_wp_enabled = 'Y' and l_fin_enabled = 'Y' and l_share_code = 'SPLIT_NO_MAPPING') THEN
17588   --currently split no mapping
17589   IF (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'N') OR
17590      (p_workplan_enabled_flag = 'N' and p_financial_enabled_flag = 'Y') OR
17591      (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'N') THEN
17592     --disabled both/delete workplan structure/disable financial structure API
17593 
17594     IF (p_workplan_enabled_flag = 'N') THEN
17595       --delete workplan structure
17596       --get structure_id
17597       OPEN sel_wp_structure_id;
17598       FETCH sel_wp_structure_id INTO l_structure_id;
17599       CLOSE sel_wp_structure_id;
17600 
17601       --delete workplan structure
17602       OPEN sel_all_wp_structure_ver(l_structure_id);
17603       LOOP
17604         FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17605                                           l_struc_ver_rvn;
17606         EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17607         PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17608                        p_project_id,
17609                        l_del_struc_ver_id,
17610                        l_return_status,
17611                        l_err_msg_code);
17612         IF (l_return_status <> 'S') THEN
17613           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17614           x_msg_data := l_err_msg_code;
17615           RAISE FND_API.G_EXC_ERROR;
17616         END IF;
17617 
17618         --get top tasks
17619         OPEN get_top_tasks(l_del_struc_ver_id);
17620         LOOP
17621           FETCH get_top_tasks into l_task_ver_id;
17622           EXIT WHEN get_top_tasks%NOTFOUND;
17623 
17624           PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17625                p_project_id                   => p_project_id
17626               ,p_task_version_id              => l_task_ver_id
17627               ,p_parent_structure_ver_id      => l_del_struc_ver_id
17628               ,x_return_status                => l_return_status
17629               ,x_error_message_code           => l_err_msg_code );
17630 
17631           IF (l_return_status <> 'S') THEN
17632             x_return_status := l_return_status;
17633             PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17634             l_msg_data := l_err_msg_code;
17635             CLOSE get_top_tasks;
17636             RAISE FND_API.G_EXC_ERROR;
17637           END IF;
17638         END LOOP;
17639         CLOSE get_top_tasks;
17640 
17641         PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17642               p_structure_version_id => l_del_struc_ver_id
17643              ,p_record_version_number => l_struc_ver_rvn
17644              ,x_return_status => l_return_status
17645              ,x_msg_count => l_msg_count
17646              ,x_msg_data => l_msg_data);
17647 
17648         --Check if there is any error.
17649         l_msg_count := FND_MSG_PUB.count_msg;
17650         IF l_msg_count > 0 THEN
17651           x_msg_count := l_msg_count;
17652           IF x_msg_count = 1 THEN
17653             x_msg_data := l_msg_data;
17654           END IF;
17655           CLOSE sel_all_wp_structure_ver;
17656           RAISE FND_API.G_EXC_ERROR;
17657         END IF;
17658       END LOOP;
17659       CLOSE sel_all_wp_structure_ver;
17660     END IF;
17661 
17662     IF (p_financial_enabled_flag = 'N') THEN
17663       --disable financial structure API
17664       PA_PROJECT_STRUCTURE_PUB1.DISABLE_FINANCIAL_STRUCTURE(
17665        p_validate_only     => FND_API.G_FALSE
17666       ,p_project_id        => p_project_id
17667       ,x_return_status     => l_return_status
17668       ,x_msg_count         => l_msg_count
17669       ,x_msg_data          => l_msg_data);
17670 
17671       --Check if there is any error.
17672       l_msg_count := FND_MSG_PUB.count_msg;
17673       IF l_msg_count > 0 THEN
17674         x_msg_count := l_msg_count;
17675         IF x_msg_count = 1 THEN
17676           x_msg_data := l_msg_data;
17677         END IF;
17678         RAISE FND_API.G_EXC_ERROR;
17679       END IF;
17680     END IF;
17681   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code IN ('SHARE_FULL','SHARE_PARTIAL')) THEN
17682     --partial share/full share
17683     --remove financial structure row in pa_proj_workplan_attr
17684     --delete all workplan dependencies
17685     --delete workplan structure
17686     --add schedule rows for financial structure and tasks
17687     --add workplan structure type
17688 
17689     --loop and delete all workplan versions
17690     OPEN sel_wp_structure_id;
17691     FETCH sel_wp_structure_id INTO l_structure_id;
17692     CLOSE sel_wp_structure_id;
17693 
17694     OPEN sel_all_wp_structure_ver(l_structure_id);
17695     LOOP
17696       FETCH sel_all_wp_structure_ver into l_del_struc_ver_id,
17697                                           l_struc_ver_rvn;
17698       EXIT WHEN sel_all_wp_structure_ver%NOTFOUND;
17699       PA_PROJECT_STRUCTURE_UTILS.Check_Delete_Structure_Ver_Ok(
17700                        p_project_id,
17701                        l_del_struc_ver_id,
17702                        l_return_status,
17703                        l_err_msg_code);
17704       IF (l_return_status <> 'S') THEN
17705         PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17706         x_msg_data := l_err_msg_code;
17707         RAISE FND_API.G_EXC_ERROR;
17708       END IF;
17709 
17710       --get top tasks
17711       OPEN get_top_tasks(l_del_struc_ver_id);
17712       LOOP
17713         FETCH get_top_tasks into l_task_ver_id;
17714         EXIT WHEN get_top_tasks%NOTFOUND;
17715 
17716         PA_PROJ_ELEMENTS_UTILS.check_del_all_task_ver_ok(
17717                p_project_id                   => p_project_id
17718               ,p_task_version_id              => l_task_ver_id
17719               ,p_parent_structure_ver_id      => l_del_struc_ver_id
17720               ,x_return_status                => l_return_status
17721               ,x_error_message_code           => l_err_msg_code );
17722 
17723 
17724         IF (l_return_status <> 'S') THEN
17725           x_return_status := l_return_status;
17726           PA_UTILS.ADD_MESSAGE('PA', l_err_msg_code);
17727           l_msg_data := l_err_msg_code;
17728           CLOSE get_top_tasks;
17729           RAISE FND_API.G_EXC_ERROR;
17730         END IF;
17731       END LOOP;
17732       CLOSE get_top_tasks;
17733 
17734       PA_PROJECT_STRUCTURE_PVT1.DELETE_STRUC_VER_WO_VAL(
17735               p_structure_version_id => l_del_struc_ver_id
17736              ,p_record_version_number => l_struc_ver_rvn
17737              ,x_return_status => l_return_status
17738              ,x_msg_count => l_msg_count
17739              ,x_msg_data => l_msg_data
17740       );
17741 
17742       --Check if there is any error.
17743       l_msg_count := FND_MSG_PUB.count_msg;
17744       IF l_msg_count > 0 THEN
17745         x_msg_count := l_msg_count;
17746         IF x_msg_count = 1 THEN
17747           x_msg_data := l_msg_data;
17748         END IF;
17749         CLOSE sel_all_wp_structure_ver;
17750         RAISE FND_API.G_EXC_ERROR;
17751       END IF;
17752     END LOOP;
17753     CLOSE sel_all_wp_structure_ver;
17754 
17755     --Add structure type to financial
17756     OPEN sel_fin_structure_id;
17757     FETCH sel_fin_structure_id into l_structure_id;
17758     CLOSE sel_fin_structure_id;
17759 
17760     OPEN sel_struc_type_id;
17761     FETCH sel_struc_type_id INTO l_struc_type_id;
17762     CLOSE sel_struc_type_id;
17763 
17764     PA_PROJ_STRUCTURE_TYPES_PKG.insert_row(
17765               X_ROWID                  => l_rowid
17766              ,X_PROJ_STRUCTURE_TYPE_ID => l_proj_structure_type_id
17767              ,X_PROJ_ELEMENT_ID        => l_structure_id
17768              ,X_STRUCTURE_TYPE_ID      => l_struc_type_id
17769              ,X_RECORD_VERSION_NUMBER  => 1
17770              ,X_ATTRIBUTE_CATEGORY     => NULL
17771              ,X_ATTRIBUTE1             => NULL
17772              ,X_ATTRIBUTE2             => NULL
17773              ,X_ATTRIBUTE3             => NULL
17774              ,X_ATTRIBUTE4             => NULL
17775              ,X_ATTRIBUTE5             => NULL
17776              ,X_ATTRIBUTE6             => NULL
17777              ,X_ATTRIBUTE7             => NULL
17778              ,X_ATTRIBUTE8             => NULL
17779              ,X_ATTRIBUTE9             => NULL
17780              ,X_ATTRIBUTE10            => NULL
17781              ,X_ATTRIBUTE11            => NULL
17782              ,X_ATTRIBUTE12            => NULL
17783              ,X_ATTRIBUTE13            => NULL
17784              ,X_ATTRIBUTE14            => NULL
17785              ,X_ATTRIBUTE15            => NULL);
17786 
17787     l_proj_prog_attr_id := NULL;
17788     PA_PROGRESS_PUB.CREATE_PROJ_PROG_ATTR(
17789      p_validate_only       => FND_API.G_FALSE
17790     ,p_project_id          => p_project_id
17791     ,P_OBJECT_TYPE         => 'PA_STRUCTURES'
17792     ,P_OBJECT_ID           => l_structure_id
17793     ,p_action_set_id       => NULL
17794     ,p_structure_type      => 'WORKPLAN' --Amit
17795     ,x_proj_progress_attr_id => l_proj_prog_attr_id
17796     ,x_return_status       => l_return_status
17797     ,x_msg_count           => x_msg_count
17798     ,x_msg_data            => x_msg_data);
17799 
17800     --get structure version id
17801     OPEN sel_struc_ver(l_structure_id);
17802     FETCH sel_struc_ver into l_structure_version_id;
17803     CLOSE sel_struc_ver;
17804 
17805     --add financial planning
17806     /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
17807     /*moved PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions into plsql block        */
17808     BEGIN
17809         PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions(
17810                       p_context                => 'WORKPLAN'
17811                      ,p_project_id             => p_project_id
17812                      ,p_struct_elem_version_id => l_structure_version_id
17813                      ,x_return_status          => l_return_status
17814                      ,x_msg_count              => x_msg_count
17815                      ,x_Msg_data               => x_msg_data);
17816     EXCEPTION
17817         WHEN OTHERS THEN
17818              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
17819                                      p_procedure_name => 'update_structures_setup_attr',
17820                                      p_error_text     => SUBSTRB('PA_FP_PLANNING_TRANSACTION_PUB.add_planning_transactions:'||SQLERRM,1,240));
17821         RAISE FND_API.G_EXC_ERROR;
17822     END;
17823     --Check if there is any error.
17824     l_msg_count := FND_MSG_PUB.count_msg;
17825     IF l_msg_count > 0 THEN
17826       x_msg_count := l_msg_count;
17827       IF x_msg_count = 1 THEN
17828         x_msg_data := l_msg_data;
17829       END IF;
17830       RAISE FND_API.G_EXC_ERROR;
17831     END IF;
17832 
17833     --create schedule row for each task
17834     INSERT INTO PA_PROJ_ELEM_VER_SCHEDULE(
17835           pev_schedule_id,
17836           element_version_id,
17837           project_id,
17838           proj_element_id,
17839           creation_date,
17840           created_by,
17841           last_update_date,
17842           last_updated_by,
17843           scheduled_start_date,
17844           scheduled_finish_date,
17845           milestone_flag,
17846           critical_flag,
17847           calendar_id,
17848           record_version_number,
17849           last_update_login,
17850       source_object_id,
17851       source_object_type
17852 )
17853     SELECT
17854           pa_proj_elem_ver_schedule_s.nextval,
17855           PPEV.element_version_id,
17856           PPEV.project_id,
17857           PPEV.proj_element_id,
17858           SYSDATE,
17859           FND_GLOBAL.USER_ID,
17860           SYSDATE,
17861           FND_GLOBAL.USER_ID,
17862           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.START_DATE), trunc(l_proj_start_date))),
17863           DECODE(PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(PPEV.element_version_id), 'N', trunc(SYSDATE), 'Y', NVL(trunc(PT.COMPLETION_DATE), trunc(l_proj_completion_date))),
17864           'N',
17865           'N',
17866           NULL,
17867           0,
17868           FND_GLOBAL.LOGIN_ID,
17869       PPEV.project_id,
17870       'PA_PROJECTS'
17871     FROM PA_TASKS PT,
17872          PA_PROJ_ELEMENT_VERSIONS PPEV
17873     WHERE
17874          PPEV.parent_structure_version_id = l_structure_version_id
17875     AND  PPEV.proj_element_id = PT.task_id (+);
17876 
17877     OPEN sel_struc_and_task_vers(l_structure_version_id);
17878     LOOP
17879       FETCH sel_struc_and_task_vers into l_object_type, l_task_id, l_element_version_id;
17880       EXIT WHEN sel_struc_and_task_vers%NOTFOUND;
17881       /* Bug 2790703 Begin */
17882       --Add to array for rollup
17883       l_index := l_index + 1;
17884       l_task_ver_ids_tbl(l_index) := l_element_version_id;
17885       /* Bug 2790703 End */
17886       END LOOP;
17887     CLOSE sel_struc_and_task_vers;
17888 
17889     IF (l_task_ver_ids_tbl.count > 0) THEN
17890       --rollup
17891       PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
17892        p_commit => FND_API.G_FALSE,
17893        p_element_versions => l_task_ver_ids_tbl,
17894        x_return_status => l_return_status,
17895        x_msg_count => l_msg_count,
17896        x_msg_data => l_msg_data);
17897 
17898       --Check if there is any error.
17899       l_msg_count := FND_MSG_PUB.count_msg;
17900       IF l_msg_count > 0 THEN
17901         x_msg_count := l_msg_count;
17902         IF x_msg_count = 1 THEN
17903           x_msg_data := l_msg_data;
17904         END IF;
17905         RAISE FND_API.G_EXC_ERROR;
17906       END IF;
17907     END IF;
17908 
17909     --Check if there is any error.
17910     l_msg_count := FND_MSG_PUB.count_msg;
17911     IF l_msg_count > 0 THEN
17912       x_msg_count := l_msg_count;
17913       IF x_msg_count = 1 THEN
17914         x_msg_data := l_msg_data;
17915       END IF;
17916       RAISE FND_API.G_EXC_ERROR;
17917     END IF;
17918 
17919     -- Bug # 5077599.
17920 
17921     -- If the project is version disabled, then baseline the structure version.
17922 
17923     if (PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(p_project_id) = 'N') then
17924 
17925         update pa_proj_elem_ver_structure ppevs
17926         set ppevs.current_flag = 'Y'
17927             , ppevs.original_flag = 'Y'
17928             , ppevs.record_version_number = (ppevs.record_version_number+1)
17929         where ppevs.project_id = p_project_id
17930         and ppevs.element_version_id = l_structure_version_id;
17931 
17932         PA_PROJECT_STRUCTURE_PVT1.BASELINE_STRUCTURE_VERSION
17933         (p_commit                 => p_commit
17934         ,p_validate_only          => p_validate_only
17935         ,p_validation_level       => p_validation_level
17936         ,p_calling_module         => p_calling_module
17937         ,p_debug_mode             => p_debug_mode
17938         ,p_max_msg_count          => p_max_msg_count
17939         ,p_structure_version_id   => l_structure_version_id
17940         ,x_return_status          => x_return_status
17941         ,x_msg_count              => x_msg_count
17942         ,x_msg_data               => x_msg_data);
17943 
17944     end if;
17945 
17946     -- Bug # 5077599.
17947 
17948 
17949   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_MAPPING') THEN
17950     --split mapping; no action required
17951     NULL;
17952   ELSIF (p_workplan_enabled_flag = 'Y' and p_financial_enabled_flag = 'Y' and p_sharing_option_code = 'SPLIT_NO_MAPPING') THEN
17953     --split no mapping; no action required
17954     NULL;
17955   END IF;
17956 
17957 END IF;
17958 
17959 IF (p_workplan_enabled_flag = 'N' or p_financial_enabled_flag = 'N') THEN
17960   --clear sharing option
17961   l_new_share_code := NULL;
17962 ELSE
17963   l_new_share_code := p_sharing_option_code;
17964 END IF;
17965 
17966 update pa_projects_all
17967 set structure_sharing_code = l_new_share_code
17968 where project_id = p_project_id;
17969 
17970 IF l_delv_enabled = 'Y' THEN
17971   --currently enabled
17972   IF (p_deliverables_enabled_flag = 'N') THEN
17973     PA_DELIVERABLE_PUB.DELETE_DELIVERABLE_STRUCTURE
17974     (p_project_id => p_project_id
17975     ,x_return_status           => l_return_status
17976     ,x_msg_count               => l_msg_count
17977     ,x_msg_data                => l_msg_data );
17978 
17979     --Check if there is any error.
17980     l_msg_count := FND_MSG_PUB.count_msg;
17981     IF l_msg_count > 0 THEN
17982       x_msg_count := l_msg_count;
17983       IF x_msg_count = 1 THEN
17984         x_msg_data := l_msg_data;
17985       END IF;
17986       RAISE FND_API.G_EXC_ERROR;
17987     END IF;
17988   END IF;
17989 ELSE  --l_delv_enabled = 'N'
17990   --currently disabled
17991   IF (p_deliverables_enabled_flag = 'Y') THEN
17992     --enable deliverable
17993     --get suffix
17994     select meaning
17995     into l_suffix
17996     from pa_lookups
17997     where lookup_type = 'PA_STRUCTURE_TYPE_CLASS'
17998     and lookup_code = 'DELIVERABLE';
17999     --get deliverable name
18000     l_del_name := substrb(l_name||l_append||l_suffix, 1, 240);
18001 
18002     --create workplan structure
18003     PA_PROJECT_STRUCTURE_PUB1.CREATE_STRUCTURE
18004     (p_validate_only           => FND_API.G_FALSE
18005     ,p_project_id              => p_project_id
18006     ,p_structure_number        => l_del_name
18007     ,p_structure_name          => l_del_name
18008     ,p_calling_flag            => 'DELIVERABLE'
18009     ,x_structure_id            => l_structure_id
18010     ,x_return_status           => l_return_status
18011     ,x_msg_count               => l_msg_count
18012     ,x_msg_data                => l_msg_data );
18013 
18014     --Check if there is any error.
18015     l_msg_count := FND_MSG_PUB.count_msg;
18016     IF l_msg_count > 0 THEN
18017       x_msg_count := l_msg_count;
18018       IF x_msg_count = 1 THEN
18019         x_msg_data := l_msg_data;
18020       END IF;
18021       RAISE FND_API.G_EXC_ERROR;
18022     END IF;
18023 
18024     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version
18025     (p_validate_only         => FND_API.G_FALSE
18026     ,p_structure_id          => l_structure_id
18027     ,x_structure_version_id  => l_structure_version_id
18028     ,x_return_status         => l_return_status
18029     ,x_msg_count             => l_msg_count
18030     ,x_msg_data              => l_msg_data );
18031 
18032     --Check if there is any error.
18033     l_msg_count := FND_MSG_PUB.count_msg;
18034     IF l_msg_count > 0 THEN
18035       x_msg_count := l_msg_count;
18036       IF x_msg_count = 1 THEN
18037         x_msg_data := l_msg_data;
18038       END IF;
18039       RAISE FND_API.G_EXC_ERROR;
18040     END IF;
18041 
18042     PA_TASK_PUB1.Create_Schedule_Version(
18043      p_element_version_id      => l_structure_version_id
18044     ,p_scheduled_start_date    => l_proj_start_date
18045     ,p_scheduled_end_date      => l_proj_completion_date
18046     ,x_pev_schedule_id         => l_pev_schedule_id
18047     ,x_return_status           => l_return_status
18048     ,x_msg_count               => l_msg_count
18049     ,x_msg_data                => l_msg_data);
18050 
18051     --Check if there is any error.
18052     l_msg_count := FND_MSG_PUB.count_msg;
18053     IF l_msg_count > 0 THEN
18054       x_msg_count := l_msg_count;
18055       IF x_msg_count = 1 THEN
18056         x_msg_data := l_msg_data;
18057       END IF;
18058       RAISE FND_API.G_EXC_ERROR;
18059     END IF;
18060 
18061     IF (l_template_flag = 'Y') THEN
18062       l_status_code := 'STRUCTURE_WORKING';
18063       l_baseline_flag := 'N';
18064       l_latest_eff_pub_flag := 'N';
18065       l_effective_date := NULL;
18066     ELSE
18067       l_status_code := 'STRUCTURE_PUBLISHED';
18068       l_baseline_flag := 'N';
18069       l_latest_eff_pub_flag := 'Y';
18070       l_effective_date := sysdate;
18071     END IF;
18072 
18073     --create structure version
18074     PA_PROJECT_STRUCTURE_PVT1.Create_Structure_Version_Attr
18075     (p_validate_only               => FND_API.G_FALSE
18076     ,p_structure_version_id        => l_structure_version_id
18077     ,p_structure_version_name      => l_del_name
18078     ,p_structure_version_desc      => NULL
18079     ,p_effective_date              => l_effective_date
18080     ,p_latest_eff_published_flag   => l_latest_eff_pub_flag
18081     ,p_locked_status_code          => 'UNLOCKED'
18082     ,p_struct_version_status_code  => l_status_code
18083     ,p_baseline_current_flag       => l_baseline_flag
18084     ,p_baseline_original_flag      => 'N'
18085     ,x_pev_structure_id            => l_pev_structure_id
18086     ,x_return_status               => l_return_status
18087     ,x_msg_count                   => l_msg_count
18088     ,x_msg_data                    => l_msg_data );
18089 
18090     --Check if there is any error.
18091     l_msg_count := FND_MSG_PUB.count_msg;
18092     IF l_msg_count > 0 THEN
18093       x_msg_count := l_msg_count;
18094       IF x_msg_count = 1 THEN
18095         x_msg_data := l_msg_data;
18096       END IF;
18097       RAISE FND_API.G_EXC_ERROR;
18098     END IF;
18099 
18100   END IF;
18101 END IF;
18102 
18103  -- FP.M changes below
18104     If p_sys_program_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18105          l_sys_program_flag := null;
18106     else
18107          l_sys_program_flag := p_sys_program_flag;
18108     end if;
18109 
18110     If p_allow_multi_prog_rollup = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
18111          l_allow_multi_program_rollup :=null;
18112     else
18113          l_allow_multi_program_rollup :=p_allow_multi_prog_rollup;
18114     end if;
18115 
18116 --bug 4275096
18117     IF l_sys_program_flag = 'N' AND l_allow_multi_program_rollup = 'Y'
18118     THEN
18119           Pa_Utils.ADD_MESSAGE
18120                 ( p_app_short_name => 'PA',
18121                   p_msg_name     =>'PA_PS_EN_SYS_PROG_ERR');
18122            RAISE FND_API.G_EXC_ERROR;
18123     END IF;
18124 --end bug 4275096
18125 
18126     IF (l_proj_sys_program_flag='Y' and nvl(l_sys_program_flag,'N')='N' ) then
18127         l_flag := PA_RELATIONSHIP_UTILS.DISABLE_SYS_PROG_OK(p_project_id);
18128          If l_flag='N' Then
18129           Pa_Utils.ADD_MESSAGE
18130                 ( p_app_short_name => 'PA',
18131                   p_msg_name     =>'PA_PS_DIS_SYS_PROG_ERR');
18132            RAISE FND_API.G_EXC_ERROR;
18133         END IF;
18134     END IF;
18135 
18136     IF (l_proj_allow_program_rollup='Y' and nvl(l_allow_multi_program_rollup,'N')='N' ) then
18137         l_flag := PA_RELATIONSHIP_UTILS.DISABLE_MULTI_PROG_OK(p_project_id);
18138           IF l_flag ='N' Then
18139            Pa_Utils.ADD_MESSAGE
18140                 ( p_app_short_name => 'PA',
18141                   p_msg_name     =>'PA_PS_DIS_MULTI_PROG_ERR');
18142            RAISE FND_API.G_EXC_ERROR;
18143         END IF;
18144     END IF;
18145 
18146 --    IF NOT FND_API.TO_BOOLEAN(p_validate_only) THEN
18147       UPDATE pa_projects_all
18148       SET
18149           sys_program_flag      = nvl(l_sys_program_flag,'N'),
18150           allow_multi_program_rollup = nvl(l_allow_multi_program_rollup,'N'),
18151  	                   CBS_VERSION_ID=p_cbs_version_id , --added for CBS 15834912
18152  	                   CBS_ENABLE_FLAG=p_cbs_enable_flag  --added for CBS 16083858
18153       WHERE project_id = p_project_id;
18154 --    END IF;
18155   -- end of FP.M changes
18156 
18157     x_return_status := FND_API.G_RET_STS_SUCCESS;
18158 
18159     IF (p_debug_mode = 'Y') THEN
18160       pa_debug.debug('PA_PROJECT_STRUCTURE_PVT1.update_structures_setup_attr end');
18161     END IF;
18162 
18163   EXCEPTION
18164     WHEN FND_API.G_EXC_ERROR THEN
18165       IF (p_commit = FND_API.G_TRUE) THEN
18166         ROLLBACK to update_struc_setup_attr_pvt;
18167       END IF;
18168       x_msg_count := FND_MSG_PUB.count_msg;
18169       x_return_status := FND_API.G_RET_STS_ERROR;
18170     WHEN OTHERS THEN
18171       IF (p_commit = FND_API.G_TRUE) THEN
18172         ROLLBACK to update_struc_setup_attr_pvt;
18173       END IF;
18174       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
18175       x_msg_count := FND_MSG_PUB.count_msg;
18176       --put message
18177       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_STRUCTURE_PVT1',
18178                               p_procedure_name => 'update_structures_setup_attr',
18179                               p_error_text     => SUBSTRB(SQLERRM,1,240));
18180       RAISE;
18181   END update_structures_setup_attr;
18182 
18183 end PA_PROJECT_STRUCTURE_PVT1;