DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_TASK_PUB1

Source


1 PACKAGE BODY PA_TASK_PUB1 AS
2 /* $Header: PATSK1PB.pls 120.23.12010000.4 2009/02/13 11:39:28 amehrotr ship $ */
3 
4 G_PKG_NAME              CONSTANT VARCHAR2(30) := 'PA_TASK_PUB1';
5 
6 
7 -- API name                      : Create_Task
8 -- Type                          : Public procedure
9 -- Pre-reqs                      : None
10 -- Return Value                  : N/A
11 -- Prameters
12 -- p_api_version          IN    NUMBER  N   Not Null    1.0
13 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
14 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
15 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
16 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
17 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
18 -- p_debug_mode       IN    VARCHAR2    N   Null    N
19 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
20 -- p_object_type          IN    VARCHAR2    N   Not Null
21 -- p_project_id       IN    NUMBER  N   Not Null
22 -- p_task_number          IN    VARCHAR2    N   Not Null
23 -- p_task_name        IN    VARCHAR2    N   Not Null
24 -- p_task_description   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25 -- p_location_id          IN    NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
26 -- p_country          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27 -- p_territory_code IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28 -- p_state_region   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29 -- p_city               IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30 -- p_task_manager_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31 -- p_task_manager_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32 -- p_carrying_out_org_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33 -- p_carrying_out_org_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34 -- p_priority_code  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35 -- p_TYPE_ID          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36 -- p_status_code          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37 -- p_inc_proj_progress_flag IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38 -- p_pm_product_code    IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
39 -- p_pm_task_reference  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
40 -- p_closed_date          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
41 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
44 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
45 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
46 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
47 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
48 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
49 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
50 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
51 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
52 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
53 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
54 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
55 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
56 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
57  --FP M development bug 3301192
58 -- p_structure_type        IN      VARCHAR2 := 'WORKPLAN',
59 -- p_financial_flag        IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
60  --End FPM changes
61 -- x_task_id          OUT   NUMBER  N   Not Null
62 -- x_return_status  OUT     VARCHAR2    N   Null
63 -- x_msg_count        OUT   NUMBER  N   Null
64 -- x_msg_data         OUT   VARCHAR2    N   Null
65 --
66 --  History
67 --
68 --  23-OCT-01   Majid Ansari             -Created
69 --
70 --
71 
72 PROCEDURE Create_Task(
73  p_api_version        IN    NUMBER  :=1.0,
74  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
75  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
76  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
77  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
78  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
79  p_debug_mode         IN    VARCHAR2    :='N',
80  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
81  p_object_type        IN    VARCHAR2,
82  p_project_id         IN    NUMBER,
83  p_structure_id         IN    NUMBER,
84  p_structure_version_id IN    NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
85  p_task_number        IN    VARCHAR2,
86  p_task_name          IN    VARCHAR2,
87  p_ref_task_id          IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
88  p_peer_or_sub          IN    VARCHAR2    :='PEER',
89  p_task_description IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
90  p_location_id        IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
91  p_country              IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
92  p_territory_code         IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
93  p_state_region           IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
94  p_city             IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
95  p_task_manager_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
96  p_task_manager_name    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
97  p_carrying_out_org_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
98  p_carrying_out_org_name    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
99  p_priority_code          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
100  p_TYPE_ID            IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
101  p_status_code        IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
102  p_inc_proj_progress_flag   IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
103  p_pm_product_code  IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
104  p_pm_task_reference    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
105  p_closed_date        IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
106  p_scheduled_start_date IN    DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
107  p_scheduled_finish_date IN   DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
108  p_link_task_flag        IN   VARCHAR2 := 'N',
109  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
110  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
111  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
112  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
113  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
114  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
115  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
116  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
117  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
118  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
119  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
120  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
121  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
122  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
123  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
124  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
125  p_address_id    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
126  p_address1      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
127  p_work_type_id  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
128  p_service_type_code IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
129  p_chargeable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
130  p_billable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
131  p_receive_project_invoice_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
132 
133  p_task_weighting_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
134  p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
135  p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
136  p_wq_actual_entry_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
137  p_task_progress_entry_page_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
138  p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
139  p_parent_structure_id        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
140  p_phase_code                 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
141  p_phase_version_id           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
142  -- xxlu added task DFF attributes
143  p_tk_attribute_category     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
144  p_tk_attribute1     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
145  p_tk_attribute2     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
146  p_tk_attribute3     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
147  p_tk_attribute4     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
148  p_tk_attribute5     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
149  p_tk_attribute6     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
150  p_tk_attribute7     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
151  p_tk_attribute8     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
152  p_tk_attribute9     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
153  p_tk_attribute10    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
154  -- end xxlu changes
155  --FP M development bug 330119
156  p_structure_type        IN      VARCHAR2 := 'WORKPLAN',
157  p_financial_flag        IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
158  p_Base_Perc_Comp_Deriv_Code     IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
159  --End FPM changes bug 330119
160  x_task_id              IN OUT  NOCOPY NUMBER, --File.Sql.39 bug 4440895
161  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
162  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
163  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
164 ) IS
165 
166    l_api_name                      CONSTANT VARCHAR(30) := 'CREATE_TASK';
167    l_api_version                   CONSTANT NUMBER      := 1.0;
168 
169    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
170    l_return_status                 VARCHAR2(1);
171    l_msg_count                     NUMBER;
172    l_msg_data                      VARCHAR2(250);
173    l_data                          VARCHAR2(250);
174    l_msg_index_out                 NUMBER;
175    l_error_msg_code                     VARCHAR2(250);
176 
177    l_carrying_out_org_id           NUMBER;
178    -- added for Bug: 4537865
179    l_new_carrying_out_org_id	   NUMBER;
180    -- added for Bug: 4537865
181    l_task_manager_id               NUMBER;
182    l_task_progress_entry_page_id   NUMBER;
183 
184 -- hyau Bug 2852753
185    l_delete_project_allowed      VARCHAR2(1);
186    l_update_proj_num_allowed      VARCHAR2(1);
187    l_update_proj_name_allowed    VARCHAR2(1);
188    l_update_proj_desc_allowed    VARCHAR2(1);
189    l_update_proj_dates_allowed    VARCHAR2(1);
190    l_update_proj_status_allowed  VARCHAR2(1);
191    l_update_proj_manager_allowed  VARCHAR2(1);
192    l_update_proj_org_allowed      VARCHAR2(1);
193    l_add_task_allowed            VARCHAR2(1);
194    l_delete_task_allowed          VARCHAR2(1);
195    l_update_task_num_allowed      VARCHAR2(1);
196    l_update_task_name_allowed    VARCHAR2(1);
197    l_update_task_dates_allowed    VARCHAR2(1);
198    l_update_task_desc_allowed    VARCHAR2(1);
199    l_update_parent_task_allowed  VARCHAR2(1);
200    l_update_task_org_allowed      VARCHAR2(1);
201 
202    l_err_code         NUMBER        := 0;
203    l_err_stack        VARCHAR2(200) := NULL;
204    l_err_stage        VARCHAR2(200) := NULL;
205 
206    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
207 
208    CURSOR get_product_code ( c_project_id NUMBER ) IS
209    SELECT pm_product_code
210    FROM PA_PROJECTS_ALL
211    WHERE project_id = c_project_id;
212 
213 -- end hyau Bug 2852753
214 
215 BEGIN
216     pa_debug.init_err_stack ('PA_TASK_PUB1.CREATE_TASK');
217 
218     IF (p_debug_mode = 'Y') THEN
219       pa_debug.debug('PA_TASK_PUB1.CREATE_TASK begin');
220     END IF;
221 
222     IF (p_commit = FND_API.G_TRUE) THEN
223       savepoint create_Task;
224     END IF;
225 
226     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
227       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
228     END IF;
229 
230 
231     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
232       FND_MSG_PUB.initialize;
233     END IF;
234 
235 --Bug 2168170
236 
237 --hsiu: bug 2669388
238 /*
239 --dbms_output.put_line('task number');
240       IF p_task_number IS NULL
241       THEN
242           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
243                                p_msg_name => 'PA_PS_TASK_NUMBER_NULL');
244           raise FND_API.G_EXC_ERROR;
245       END IF;
246 
247 --dbms_output.put_line('task name');
248       IF p_task_name IS NULL
249       THEN
250           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
251                                p_msg_name => 'PA_PS_TASK_NAME_NULL');
252           raise FND_API.G_EXC_ERROR;
253       END IF;
254 
255 --Bug 2168170
256 
257       IF PA_PROJ_ELEMENTS_UTILS.Check_element_number_Unique
258              (
259                p_element_number  => rtrim(p_task_number)
260               ,p_element_id      => null
261               ,p_project_id      => p_project_id
262               ,p_structure_id    => p_parent_structure_id
263               ,p_object_type     => 'PA_TASKS'
264              ) = 'N'
265       THEN
266           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
267                                p_msg_name => 'PA_PS_TASK_NOT_NUM_UNIQ');
268           raise FND_API.G_EXC_ERROR;
269 
270       END IF;
271 */
272 --end bug 2669388
273 
274 -- hyau Bug 2852753
275       IF p_calling_module = 'SELF_SERVICE'
276       and p_link_task_flag = 'N' -- Bug # 5072032.
277       THEN
278 
279         OPEN get_product_code(p_project_id);
280         FETCH get_product_code INTO l_pm_product_code;
281         CLOSE get_product_code;
282 
283         If l_pm_product_code IS NOT NULL THEN
284           pa_pm_controls.Get_Project_actions_allowed
285                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
286                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
287                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
288                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
289                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
290                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
291                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
292                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
293                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
294                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
295                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
296                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
297                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
298                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
299                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
300                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
301                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
302                  P_ERROR_CODE                 => l_err_code,
303          P_ERROR_STACK                    => l_err_stack,
304          P_ERROR_STAGE                => l_err_stage );
305           IF l_err_code <> 0 THEN
306             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
307                                  p_msg_name       => l_err_stage);
308           END IF;
309       IF l_add_task_allowed = 'N' THEN
310               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
311                                    p_msg_name       => 'PA_PR_PM_CANNOT_ADDTASK');
312               raise FND_API.G_EXC_ERROR;
313           END IF;
314         END IF;
315       END IF;
316 
317 -- end hyau Bug 2852753
318 
319 --dbms_output.put_line( 'Before check_task_mgr_name_or_id' );
320 --my_error_msg( 'Before check_task_mgr_name_or_id' );
321 
322 --The following check is required bcoz AMG passes only task manager id but not task manager
323 --name. So for AMG p_check_id_flag should always be 'Y' not 'A'.
324 --Confirmed with Selva.
325 
326     IF (p_calling_module = 'AMG')
327     THEN
328         --Check Task Manager and Task Manager Id
329       IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
330           (p_task_manager_name IS NOT NULL)) OR
331          ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
332           (p_task_manager_id IS NOT NULL)) THEN
333         --Call Check API.
334           pa_tasks_maint_utils.check_task_mgr_name_or_id(
335             p_task_mgr_name => p_task_manager_name,
336             p_task_mgr_id => p_task_manager_id,
337             p_project_id => p_project_id,
338             p_check_id_flag => 'Y',
339             x_task_mgr_id => l_task_manager_id,
340             x_return_status => l_return_status,
341             x_error_msg_code => l_error_msg_code);
342         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
343           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
344                                p_msg_name => l_error_msg_code);
345         END IF;
346       END IF; --End Name-Id Conversion
347     END IF;
348 
349     IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
350         --Check Task Manager and Task Manager Id
351 
352 --dbms_output.put_line('task manager');
353       IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
354           (p_task_manager_name IS NOT NULL)) OR
355          ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
356           (p_task_manager_id IS NOT NULL)) THEN
357         --Call Check API.
358           pa_tasks_maint_utils.check_task_mgr_name_or_id(
359             p_task_mgr_name => p_task_manager_name,
360             p_task_mgr_id => p_task_manager_id,
361             p_project_id => p_project_id,
362             --p_check_id_flag => PA_STARTUP.G_Check_ID_Flag,
363             p_check_id_flag => 'A',             --bug fix 2646762
364             x_task_mgr_id => l_task_manager_id,
365             x_return_status => l_return_status,
366             x_error_msg_code => l_error_msg_code);
367 --dbms_output.put_line( 'l_error_msg_code '||l_error_msg_code );
368         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
369           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
370                                p_msg_name => l_error_msg_code);
371         END IF;
372         --dbms_output.put_line( 'Task manager id '||l_task_manager_id||'flag '||PA_STARTUP.G_Check_ID_Flag );
373       END IF; --End Name-Id Conversion
374 
375 --dbms_output.put_line('carrying out org');
376     --Check Carrying out organization name and Carrying out organization Id
377       IF ((p_carrying_out_org_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
378           (p_carrying_out_org_name IS NOT NULL)) OR
379          ((p_carrying_out_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
380           (p_carrying_out_org_id IS NOT NULL)) THEN
381 
382 --dbms_output.put_line( 'Before Check_OrgName_Or_Id' );
383 
384   IF p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
385   THEN
386      l_carrying_out_org_id := FND_API.G_MISS_NUM;
387   ELSE
388      l_carrying_out_org_id := p_carrying_out_org_id;
389   END IF;
390 
391         pa_hr_org_utils.Check_OrgName_Or_Id
392             (p_organization_id      => l_carrying_out_org_id
393              ,p_organization_name   => p_carrying_out_org_name
394              ,p_check_id_flag       => 'Y'
395           -- ,x_organization_id     => l_carrying_out_org_id		* commented for Bug: 4537865
396              ,x_organization_id	    => l_new_carrying_out_org_id		-- added for Bug: 4537865
397              ,x_return_status       => l_return_status
398              ,x_error_msg_code      => l_error_msg_code);
399 
400         -- added for Bug: 4537865
401 	IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
402 		l_carrying_out_org_id := l_new_carrying_out_org_id;
403 	END IF;
404         -- added for Bug: 4537865
405 
406         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
407               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
408                                    p_msg_name       => l_error_msg_code);
409         END IF;
410       END IF; --End Name-Id Conversion
411     ELSE
412        l_task_manager_id     := p_task_manager_id;
413        l_carrying_out_org_id := p_carrying_out_org_id;
414     END IF;
415 
416     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
417       x_msg_count := FND_MSG_PUB.count_msg;
418       IF x_msg_count = 1 then
419          pa_interface_utils_pub.get_messages
420          (p_encoded        => FND_API.G_TRUE,
421           p_msg_index      => 1,
422           p_msg_count      => l_msg_count,
423           p_msg_data       => l_msg_data,
424           p_data           => l_data,
425           p_msg_index_out  => l_msg_index_out);
426          x_msg_data := l_data;
427       END IF;
428       raise FND_API.G_EXC_ERROR;
429     END IF;
430 
431     IF ((p_task_progress_entry_page <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
432         (p_task_progress_entry_page IS NOT NULL)) OR
433        ((p_task_progress_entry_page_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
434         (p_task_progress_entry_page_id IS NOT NULL)) THEN
435 
436       IF (p_task_progress_entry_page_ID = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
437         l_task_progress_entry_page_id := FND_API.G_MISS_NUM;
438       ELSE
439         l_task_progress_entry_page_id := p_task_progress_entry_page_id;
440       END IF;
441 
442       pa_page_layout_utils.Check_pagelayout_Name_Or_Id(
443         p_pagelayout_name => p_task_progress_entry_page
444        ,p_pagetype_code => 'AI'
445        ,x_pagelayout_id => l_task_progress_entry_page_id
446        ,x_return_status => l_return_status
447        ,x_error_message_code => l_error_msg_code
448       );
449 
450       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
451               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
452                                    p_msg_name       => l_error_msg_code);
453       END IF;
454     END IF;
455 
456     -- 3944597 Added code to validate task type , if it is not null and not G_PA_MISS_NUM
457     -- check task type is valid and effective
458     -- if it is not valid or not effective , throw error message
459 
460     IF ( p_TYPE_ID IS NOT NULL AND p_TYPE_ID  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN
461        IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_effective(p_TYPE_ID)) THEN
462           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_EFF_TASK_TYPE_ERR');
463           l_return_status := FND_API.G_RET_STS_ERROR;
464        END IF;
465     END IF;
466 
467     -- 3944597 end
468 
469     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
470       x_msg_count := FND_MSG_PUB.count_msg;
471       IF x_msg_count = 1 then
472          pa_interface_utils_pub.get_messages
473          (p_encoded        => FND_API.G_TRUE,
474           p_msg_index      => 1,
475           p_msg_count      => l_msg_count,
476           p_msg_data       => l_msg_data,
477           p_data           => l_data,
478           p_msg_index_out  => l_msg_index_out);
479          x_msg_data := l_data;
480       END IF;
481       raise FND_API.G_EXC_ERROR;
482     END IF;
483 
484 --dbms_output.put_line( 'Inside CREATE_TASK API '||p_project_id );
485 
486 --my_error_msg( 'Inside CREATE_TASK API '||p_project_id  );
487 
488 --my_error_msg( 'Ref Task Id in create task'||p_ref_task_id );
489 
490 --dbms_output.put_line('create task pvt');
491     -- xxlu added task DFF attributes
492     PA_TASK_PVT1.Create_Task(
493               p_api_version       => p_api_version
494              ,p_init_msg_list         => p_init_msg_list
495              ,p_commit              => p_commit
496              ,p_validate_only         => p_validate_only
497              ,p_validation_level    => p_validation_level
498              ,p_calling_module        => p_calling_module
499              ,p_debug_mode        => p_debug_mode
500              ,p_max_msg_count         => p_max_msg_count
501              ,p_ref_task_id         => p_ref_task_id
502              ,p_peer_or_sub         => p_peer_or_sub
503              ,p_object_type       => p_object_type
504              ,p_project_id        => p_project_id
505              ,p_structure_id        => p_structure_id
506              ,p_structure_version_id => p_structure_version_id
507              ,p_task_number       => rtrim(p_task_number)
508              ,p_task_name         => rtrim(p_task_name)
509              ,p_task_description      => rtrim(p_task_description)
510              ,p_location_id       => p_location_id
511              ,p_country             => p_country
512              ,p_territory_code        => p_territory_code
513              ,p_state_region          => p_state_region
514              ,p_city                => p_city
515              ,p_task_manager_id => l_task_manager_id
516              ,p_carrying_out_org_id => l_carrying_out_org_id
517              ,p_priority_code         => p_priority_code
518              ,p_TYPE_ID           => p_TYPE_ID
519              ,p_status_code       => p_status_code
520              ,p_inc_proj_progress_flag  => p_inc_proj_progress_flag
521              ,p_pm_product_code => p_pm_product_code
522              ,p_pm_task_reference   => p_pm_task_reference
523              ,p_closed_date       => p_closed_date
524              ,p_scheduled_start_date => p_scheduled_start_date
525              ,p_scheduled_finish_date => p_scheduled_finish_date
526              ,p_link_task_flag        => p_link_task_flag
527              ,p_attribute_category   => p_attribute_category
528              ,p_attribute1   => rtrim(p_attribute1)
529              ,p_attribute2   => rtrim(p_attribute2)
530              ,p_attribute3   => rtrim(p_attribute3)
531              ,p_attribute4   => rtrim(p_attribute4)
532              ,p_attribute5   => rtrim(p_attribute5)
533              ,p_attribute6   => rtrim(p_attribute6)
534              ,p_attribute7   => rtrim(p_attribute7)
535              ,p_attribute8   => rtrim(p_attribute8)
536              ,p_attribute9   => rtrim(p_attribute9)
537              ,p_attribute10  => rtrim(p_attribute10)
538              ,p_attribute11  => rtrim(p_attribute11)
539              ,p_attribute12  => rtrim(p_attribute12)
540              ,p_attribute13  => rtrim(p_attribute13)
541              ,p_attribute14  => rtrim(p_attribute14)
542              ,p_attribute15  => rtrim(p_attribute15)
543                       ,p_address_id                        => p_address_id
544                       ,p_address1                          => p_address1
545                       ,p_work_type_id                      => p_work_type_id
546                       ,p_service_type_code                 => p_service_type_code
547                       ,p_chargeable_flag                   => p_chargeable_flag
548                       ,p_billable_flag                     => p_billable_flag
549                       ,p_receive_project_invoice_flag      => p_receive_project_invoice_flag
550                    ,p_task_weighting_deriv_code => p_task_weighting_deriv_code
551                    ,p_work_item_code => p_work_item_code
552                    ,p_uom_code => p_uom_code
553                    ,p_wq_actual_entry_code => p_wq_actual_entry_code
554                    ,p_task_progress_entry_page_id => l_task_progress_entry_page_id
555                    ,p_task_progress_entry_page => p_task_progress_entry_page
556                    ,p_parent_structure_id      => p_parent_structure_id
557                    ,p_phase_code               => p_phase_code
558                    ,p_phase_version_id         => p_phase_version_id
559              ,p_tk_attribute_category    => p_tk_attribute_category
560              ,p_tk_attribute1    => p_tk_attribute1
561              ,p_tk_attribute2    => p_tk_attribute2
562              ,p_tk_attribute3    => p_tk_attribute3
563              ,p_tk_attribute4    => p_tk_attribute4
564              ,p_tk_attribute5    => p_tk_attribute5
565              ,p_tk_attribute6    => p_tk_attribute6
566              ,p_tk_attribute7    => p_tk_attribute7
567              ,p_tk_attribute8    => p_tk_attribute8
568              ,p_tk_attribute9    => p_tk_attribute9
569              ,p_tk_attribute10 => p_tk_attribute10
570                 -- Begin : Added for FP_M changes Bug 3305199
571         ,p_structure_type        => p_structure_type
572         ,p_financial_flag        => p_financial_flag
573         ,p_Base_Perc_Comp_Deriv_Code => p_Base_Perc_Comp_Deriv_Code
574                 -- End : Added for FP_M changes Bug 3305199
575              ,x_task_id             => x_task_id
576              ,x_return_status         => l_return_status
577              ,x_msg_count         => l_msg_count
578              ,x_msg_data          => l_msg_data
579              );
580              -- end xxlu changes
581 --dbms_output.put_line( 'After CREATE_TASK API ' );
582 
583     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
584       x_msg_count := FND_MSG_PUB.count_msg;
585       IF x_msg_count = 1 then
586          pa_interface_utils_pub.get_messages
587          (p_encoded        => FND_API.G_TRUE,
588           p_msg_index      => 1,
589           p_msg_count      => l_msg_count,
590           p_msg_data       => l_msg_data,
591           p_data           => l_data,
592           p_msg_index_out  => l_msg_index_out);
593          x_msg_data := l_data;
594       END IF;
595       raise FND_API.G_EXC_ERROR;
596     END IF;
597 
598     --x_task_id := l_task_id;
599     x_return_status := FND_API.G_RET_STS_SUCCESS;
600 
601     IF (p_commit = FND_API.G_TRUE) THEN
602       COMMIT;
603     END IF;
604 
605     IF (p_debug_mode = 'Y') THEN
606       pa_debug.debug('PA_TASK_PUB1.CREATE_TASK END');
607     END IF;
608 EXCEPTION
609     when FND_API.G_EXC_ERROR then
610       if p_commit = FND_API.G_TRUE then
611          rollback to create_task;
612       end if;
613       x_return_status := FND_API.G_RET_STS_ERROR;
614     when FND_API.G_EXC_UNEXPECTED_ERROR then
615       if p_commit = FND_API.G_TRUE then
616          rollback to create_task;
617       end if;
618       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
619       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
620                               p_procedure_name => 'CREATE_TASK',
621                               p_error_text     => SUBSTRB(SQLERRM,1,240));
622     when OTHERS then
623       if p_commit = FND_API.G_TRUE then
624          rollback to create_task;
625       end if;
626       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
627       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
628                               p_procedure_name => 'CREATE_TASK',
629                               p_error_text     => SUBSTRB(SQLERRM,1,240));
630       raise;
631 END Create_Task;
632 
633 -- API name                      : Update_Task
634 -- Type                          : Public procedure
635 -- Pre-reqs                      : None
636 -- Return Value                  : N/A
637 -- Prameters
638 -- p_api_version          IN    NUMBER  N   Not Null    1.0
639 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
640 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
641 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
642 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
643 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
644 -- p_debug_mode       IN    VARCHAR2    N   Null    N
645 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
646 -- p_task_id          IN    NUMBER  N   Not Null
647 -- p_task_number          IN    VARCHAR2    N   Not Null
648 -- p_task_name        IN    VARCHAR2    N   Not Null
649 -- p_task_description   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
650 -- p_location_id          IN    NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
651 -- p_country          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
652 -- p_territory_code IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
653 -- p_state_region   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
654 -- p_city               IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
655 -- p_task_manager_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
656 -- p_task_manager_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
657 -- p_carrying_out_org_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
658 -- p_carrying_out_org_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
659 -- p_priority_code  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
660 -- p_TYPE_ID          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
661 -- p_status_code          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
662 -- p_inc_proj_progress_flag IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
663 -- p_pm_product_code    IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
664 -- p_pm_task_reference  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
665 -- p_closed_date          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
666 -- p_transaction_start_date IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
667 -- p_transaction_finish_date IN   DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
668 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
669 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
670 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
671 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
672 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
673 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
674 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
675 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
676 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
677 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
678 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
679 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
680 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
681 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
682 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
683 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
684 -- p_record_version_number  IN  NUMBER  N   Not Null
685 -- x_return_status  OUT     VARCHAR2    N   Null
686 -- x_msg_count        OUT   NUMBER  N   Null
687 -- x_msg_data         OUT   VARCHAR2    N   Null
688 --
689 --  History
690 --
691 --  23-OCT-01   Majid Ansari             -Created
692 --  31-JUL-02   H Siu                    -Added transaction dates
693 --
694 
695 PROCEDURE Update_Task(
696  p_api_version        IN    NUMBER  :=1.0,
697  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
698  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
699  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
700  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
701  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
702  p_debug_mode         IN    VARCHAR2    :='N',
703  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
704  p_ref_task_id          IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
705  p_peer_or_sub          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
706  p_task_id              IN  NUMBER,
707  p_task_number        IN    VARCHAR2,
708  p_task_name          IN    VARCHAR2,
709  p_task_description IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
710  p_location_id        IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
711  p_country              IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
712  p_territory_code         IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
713  p_state_region           IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
714  p_city             IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
715  p_task_manager_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
716  p_task_manager_name    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
717  p_carrying_out_org_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
718  p_carrying_out_org_name    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
719  p_priority_code          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
720  p_TYPE_ID            IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
721  p_status_code        IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
722  p_inc_proj_progress_flag   IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
723  p_pm_product_code  IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
724  p_pm_task_reference    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
725  p_closed_date        IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
726  p_transaction_start_date IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
727  p_transaction_finish_date IN   DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
728  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
729  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
730  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
731  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
732  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
733  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
734  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
735  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
736  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
737  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
738  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
739  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
740  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
741  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
742  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
743  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
744  p_address_id    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
745  p_address1      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
746  p_work_type_id  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
747  p_service_type_code IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
748  p_chargeable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
749  p_billable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
750  p_receive_project_invoice_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
751 
752  p_task_weighting_deriv_code IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
753  p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
754  p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
755  p_wq_actual_entry_code IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
756  p_task_progress_entry_page_id IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
757  p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
758  p_parent_structure_id      IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
759  p_phase_code               IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
760  p_phase_version_id         IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
761 
762  p_record_version_number    IN  NUMBER,
763  -- xxlu added task DFF attributes
764  p_tk_attribute_category     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
765  p_tk_attribute1     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
766  p_tk_attribute2     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
767  p_tk_attribute3     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
768  p_tk_attribute4     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
769  p_tk_attribute5     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
770  p_tk_attribute6     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
771  p_tk_attribute7     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
772  p_tk_attribute8     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
773  p_tk_attribute9     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
774  p_tk_attribute10    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
775  -- end xxlu changes
776  p_Base_Perc_Comp_Deriv_Code     IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
777  p_gen_etc_src_code      IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
778  -- Bug#3491609 : Workflow Chanegs FP M
779  p_wf_item_type          IN    pa_proj_elements.wf_item_type%TYPE       :=NULL,
780  p_wf_process            IN    pa_proj_elements.wf_process%TYPE         :=NULL,
781  p_wf_lead_days          IN    pa_proj_elements.wf_start_lead_days%TYPE :=NULL,
782  p_wf_enabled_flag       IN    pa_proj_elements.enable_wf_flag%TYPE     :=NULL,
783   -- Bug#3491609 : Workflow Chanegs FP M
784  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
785  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
786  x_msg_data             OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
787  p_shared                IN      VARCHAR2 := 'X' -- Bug 3451073
788 ) IS
789    l_api_name                      CONSTANT VARCHAR(30) := 'UPDATE_TASK';
790    l_api_version                   CONSTANT NUMBER      := 1.0;
791 
792    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
793    l_return_status                 VARCHAR2(1);
794    l_msg_count                     NUMBER;
795    l_msg_data                      VARCHAR2(250);
796    l_data                          VARCHAR2(250);
797    l_msg_index_out                 NUMBER;
798    l_error_msg_code                VARCHAR2(250);
799    l_dummy                         VARCHAR2(1);
800 
801    l_carrying_out_org_id           NUMBER;
802    -- added for bug 4537865
803    l_new_carrying_out_org_id	   NUMBER;
804    -- added for bug 4537865
805    l_task_manager_id               NUMBER;
806    l_task_progress_entry_page_id   NUMBER;
807 
808    --task manager changes;
809    l_cur_task_mgr_person_id        NUMBER;
810    l_cur_task_mgr_person           VARCHAR2(250);
811    l_project_id                    NUMBER;
812 
813    CURSOR get_mgr_info IS
814       select ppe.MANAGER_PERSON_ID, papf.FULL_NAME
815         from pa_proj_elements ppe, per_all_people_f papf
816        where ppe.proj_element_id = p_task_id
817          AND ppe.manager_person_id = papf.person_id
818          AND  trunc(sysdate) between papf.effective_start_date
819              and nvl(papf.effective_end_date, sysdate+1);      --Included by avaithia for Bug # 3448680
820         --end task manager changes
821 
822 -- hyau Bug 2852753
823    l_delete_project_allowed      VARCHAR2(1);
824    l_update_proj_num_allowed      VARCHAR2(1);
825    l_update_proj_name_allowed    VARCHAR2(1);
826    l_update_proj_desc_allowed    VARCHAR2(1);
827    l_update_proj_dates_allowed    VARCHAR2(1);
828    l_update_proj_status_allowed  VARCHAR2(1);
829    l_update_proj_manager_allowed  VARCHAR2(1);
830    l_update_proj_org_allowed      VARCHAR2(1);
831    l_add_task_allowed            VARCHAR2(1);
832    l_delete_task_allowed          VARCHAR2(1);
833    l_update_task_num_allowed      VARCHAR2(1);
834    l_update_task_name_allowed    VARCHAR2(1);
835    l_update_task_dates_allowed    VARCHAR2(1);
836    l_update_task_desc_allowed    VARCHAR2(1);
837    l_update_parent_task_allowed  VARCHAR2(1);
838    l_update_task_org_allowed      VARCHAR2(1);
839 
840    l_err_code         NUMBER        := 0;
841    l_err_stack        VARCHAR2(200) := NULL;
842    l_err_stage        VARCHAR2(200) := NULL;
843 
844    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
845 
846    CURSOR get_product_code ( c_project_id NUMBER ) IS
847    SELECT pm_product_code
848    FROM PA_PROJECTS_ALL
849    WHERE project_id = c_project_id;
850 
851    l_cur_project_id      NUMBER;
852    CURSOR cur_proj_id IS
853      SELECT project_id
854        FROM pa_proj_elements
855       WHERE proj_element_id = p_task_id;
856 
857    CURSOR cur_trans_dates ( c_task_id NUMBER ) IS
858      SELECT START_DATE, COMPLETION_DATE
859      FROM pa_tasks
860      WHERE task_id = c_task_id;
861 
862    CURSOR cur_task_attr IS
863      SELECT pe.ELEMENT_NUMBER, pe.NAME, pe.DESCRIPTION, hou.name
864        FROM pa_proj_elements pe, hr_all_organization_units hou
865       WHERE pe.proj_element_id = p_task_id
866         AND pe.carrying_out_organization_id = hou.organization_id;
867 
868    --Bug 3940203 avaithia <start>
869    CURSOR cur_is_fin_task IS
870      SELECT task_id
871        FROM PA_TASKS
872       WHERE task_id = p_task_id ;
873 
874    l_tsk_id           PA_TASKS.task_id%TYPE ;
875    l_err_message       fnd_new_messages.message_text%TYPE  ;
876    --Bug 3940203 avaithia <End>
877 
878    l_trans_start_date  DATE;
879    l_trans_finish_date DATE;
880    l_task_number       VARCHAR2(100);
881    l_task_name         VARCHAR2(240);
882    l_task_description  VARCHAR2(2000);
883    l_organization_name VARCHAR2(240);
884 
885 -- end hyau Bug 2852753
886 BEGIN
887 
888 --dbms_output.put_line( 'Entered ' );
889 
890     pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK');
891 
892     IF (p_debug_mode = 'Y') THEN
893       pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK begin');
894     END IF;
895 
896     IF (p_commit = FND_API.G_TRUE) THEN
897       savepoint update_Task;
898     END IF;
899 
900     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
901       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
902     END IF;
903 
904 
905     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
906       FND_MSG_PUB.initialize;
907     END IF;
908 
909     --Bug 3940203 avaithia <<Start>>
910     -- From Forms and SelfService ,User should not be able to null out Organisation Field
911     -- for Financial Tasks (because Organisation field is a NOT NULL Column in pa_tasks table)
912 
913     -- Actually ,If No Org. Value is passed from UI ,(If user explicitly nulls out the org. field)
914     -- in PA_TASKS table , the Org. for the task is defaulted as the Project's Org.
915 
916     -- Current Behaviour is : Though it is populating default org.id (project's org.id) for task
917     --                        in pa_tasks table,In UI it is showing Org. field as NULL
918 
919     -- We should not allow this (Org. field being nulled out )
920     -- Note : Same should be the case with AMG also .Because ,AMG changes will be reflected in UI
921 
922        IF p_calling_module = 'SELF_SERVICE' OR
923           p_calling_module = 'FORMS' OR
924           p_calling_module = 'AMG'
925        THEN
926             OPEN cur_is_fin_task ;
927             FETCH cur_is_fin_task INTO l_tsk_id ;
928 
929             IF cur_is_fin_task%FOUND THEN
930                 CLOSE cur_is_fin_task ;
931                 --The task is a financial task
932                 --So,If Organisation is passed as NULL
933                 --Then throw error message
934 
935                 --In Self Service ,We pass Organisation Name anyway.So,If it is not passed throw error
936                 --In FORMS / AMG ,We may be getting the Org. ID .So,Check If any of name or id is available,it is ok.
937                 --        If both are not available then throw error.
938 
939                 IF (p_carrying_out_org_name IS NULL)
940                     OR (p_carrying_out_org_name =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
941 
942                     l_err_message := FND_MESSAGE.GET_STRING('PA','PA_SU_NO_ORG');
943                     --Now,Organisation Name is not passed .
944                     --If it is AMG /FORMS ,If Org.Id is not also there ,throw error
945                     IF p_calling_module = 'AMG' OR p_calling_module = 'FORMS' THEN
946 
947                         IF (p_carrying_out_org_id IS NULL)
948                         THEN /*We should not check for MISS_NUM In case of AMG/FORMS - Review Comment Incorporated :3940203 */
949 
950                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
951                                                  p_msg_name       => 'PA_PS_TASK_NAME_NUM_ERR',
952                                                  p_token1         => 'TASK_NAME',
953                                                  p_value1         => p_task_name,
954                                                  p_token2         => 'TASK_NUMBER',
955                                          p_value2         => p_task_number,
956                                                  p_token3         => 'MESSAGE',
957                                                  p_value3         => l_err_message);
958                             RAISE FND_API.G_EXC_ERROR ;
959                         END IF;
960 
961                     ELSE -- This is case of Self Service
962                              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
963                                                  p_msg_name       => 'PA_PS_TASK_NAME_NUM_ERR',
964                                                  p_token1         => 'TASK_NAME',
965                                                  p_value1         => p_task_name,
966                                                  p_token2         => 'TASK_NUMBER',
967                                                  p_value2         => p_task_number,
968                                                  p_token3         => 'MESSAGE',
969                                                  p_value3         => l_err_message);
970                             RAISE FND_API.G_EXC_ERROR ;
971                     END IF ; --End If AMG Context
972                 END IF;      --End If Org.Name is NULL
973             END IF;          --End If Financial Task
974 
975        END IF;
976 
977     --Bug 3940203 avaithia <<End>>
978 
979 -- hyau Bug 2852753
980       IF p_calling_module = 'SELF_SERVICE' THEN
981 
982         OPEN cur_proj_id;
983         FETCH cur_proj_id INTO l_cur_project_id;
984         CLOSE cur_proj_id;
985 
986         OPEN get_product_code(l_cur_project_id);
987         FETCH get_product_code INTO l_pm_product_code;
988         CLOSE get_product_code;
989 
990         If l_pm_product_code IS NOT NULL THEN
991           pa_pm_controls.Get_Project_actions_allowed
992                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
993                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
994                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
995                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
996                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
997                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
998                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
999                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
1000                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
1001                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
1002                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
1003                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
1004                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
1005                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
1006                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
1007                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
1008                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
1009                  P_ERROR_CODE                 => l_err_code,
1010          P_ERROR_STACK                    => l_err_stack,
1011          P_ERROR_STAGE                => l_err_stage );
1012 
1013           IF l_err_code <> 0 THEN
1014             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1015                                  p_msg_name       => l_err_stage);
1016           END IF;
1017 
1018           OPEN cur_task_attr;
1019           FETCH cur_task_attr INTO l_task_number, l_task_name, l_task_description, l_organization_name;
1020           CLOSE cur_task_attr;
1021 
1022           -- Check Update Task number
1023           IF ( l_task_number <> p_task_number ) THEN
1024         IF l_update_task_num_allowed = 'N' THEN
1025               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1026                                    p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_NUM');
1027               raise FND_API.G_EXC_ERROR;
1028             END IF;
1029           END IF;
1030 
1031           -- Check Update Task Name
1032           IF ( l_task_name <> p_task_name ) THEN
1033         IF l_update_task_name_allowed = 'N' THEN
1034               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1035                                    p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_NAME');
1036               raise FND_API.G_EXC_ERROR;
1037             END IF;
1038           END IF;
1039 
1040           -- If financial task exists, Check Update Task Date
1041           IF ('Y' = PA_PROJECT_DATES_UTILS.CHECK_FINANCIAL_TASK_EXISTS(p_proj_element_id => p_task_id)) THEN
1042             OPEN cur_trans_dates(p_task_id);
1043             FETCH cur_trans_dates INTO l_trans_start_date, l_trans_finish_date;
1044             CLOSE cur_trans_dates;
1045 
1046             -- if dates are different then check the pm controls
1047             IF ( nvl(p_transaction_start_date, sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) OR
1048                ( nvl(p_transaction_finish_date, sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) THEN
1049 
1050               IF ( l_trans_start_date is not null and p_transaction_start_date is not null and l_trans_start_date - p_transaction_start_date <> 0) OR
1051                  ( l_trans_finish_date is not null and p_transaction_finish_date is not null and l_trans_finish_date - p_transaction_finish_date <> 0) OR
1052                  ( l_trans_start_date is null and p_transaction_start_date is not null) OR
1053                  ( l_trans_start_date is not null and p_transaction_start_date is null) OR
1054                  ( l_trans_finish_date is null and p_transaction_finish_date is not null) OR
1055                  ( l_trans_finish_date is not null and p_transaction_finish_date is null) THEN
1056               IF l_update_task_dates_allowed = 'N' THEN
1057                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1058                                          p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_DATES');
1059                     raise FND_API.G_EXC_ERROR;
1060                   END IF;
1061               END IF;
1062             END IF;
1063           END IF;
1064 
1065           -- Check Update Task Description
1066           IF (l_task_description is not null and p_task_description is not null and l_task_description <> p_task_description ) OR
1067              (l_task_description is null and p_task_description is not null) OR
1068              (l_task_description is not null and p_task_description is null) THEN
1069            IF l_update_task_desc_allowed = 'N' THEN
1070                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1071                                       p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_DESC');
1072                  raise FND_API.G_EXC_ERROR;
1073                END IF;
1074           END IF;
1075 
1076           -- Check Update Task Organization
1077           IF (l_organization_name is not null and p_carrying_out_org_name is not null and l_organization_name <> p_carrying_out_org_name ) OR
1078              (l_organization_name is null and p_carrying_out_org_name is not null) OR
1079              (l_organization_name is not null and p_carrying_out_org_name is null) THEN
1080            IF l_update_task_org_allowed = 'N' THEN
1081                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1082                                       p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_ORG');
1083                  raise FND_API.G_EXC_ERROR;
1084                END IF;
1085           END IF;
1086 
1087         END IF;
1088       END IF;
1089 
1090 -- end hyau Bug 2852753
1091 
1092 
1093 --dbms_output.put_line( 'Lock row ' );
1094 
1095 IF (p_calling_module <> 'FORMS')
1096 THEN
1097     --Lock row
1098     IF( p_validate_only <> FND_API.G_TRUE) THEN
1099       BEGIN
1100         select 'x' into l_dummy
1101         from PA_PROJ_ELEMENTS
1102         where proj_element_id = p_task_id
1103         and record_version_number = p_record_version_number
1104         for update of record_version_number NOWAIT;
1105       EXCEPTION
1106         WHEN TIMEOUT_ON_RESOURCE THEN
1107           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1108                                p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1109           l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1110         WHEN NO_DATA_FOUND THEN
1111           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1112                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
1113           l_msg_data := 'PA_XC_RECORD_CHANGED';
1114         WHEN OTHERS THEN
1115           IF SQLCODE = -54 then
1116              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1117                                   p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1118              l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1119           ELSE
1120              raise;
1121           END IF;
1122       END;
1123     ELSE
1124 --dbms_output.put_line( 'check record_version_number ' );
1125 
1126       --check record_version_number
1127       BEGIN
1128         select 'x' into l_dummy
1129         from PA_PROJ_ELEMENTS
1130         where proj_element_id = p_task_id
1131         and record_version_number = p_record_version_number;
1132       EXCEPTION
1133         WHEN NO_DATA_FOUND THEN
1134           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1135                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
1136           l_msg_data := 'PA_XC_RECORD_CHANGED';
1137         WHEN OTHERS THEN
1138           RAISE;
1139       END;
1140     END IF;
1141 
1142       l_msg_count := FND_MSG_PUB.count_msg;
1143 
1144       IF l_msg_count > 0 THEN
1145          x_msg_count := l_msg_count;
1146          x_return_status := 'E';
1147          RAISE  FND_API.G_EXC_ERROR;
1148       END IF;
1149 END IF;
1150 
1151 --Bug 2168170
1152       IF p_task_number IS NULL
1153       THEN
1154           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1155                                p_msg_name => 'PA_PS_TASK_NUMBER_NULL');
1156           raise FND_API.G_EXC_ERROR;
1157       END IF;
1158 
1159       IF p_task_name IS NULL
1160       THEN
1161           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1162                                p_msg_name => 'PA_PS_TASK_NAME_NULL');
1163           raise FND_API.G_EXC_ERROR;
1164       END IF;
1165 
1166 --Bug 2168170
1167 
1168 --dbms_output.put_line( 'Before calling Name to Id conv ' );
1169 
1170 --my_error_msg( 'Before calling Name to Id conv. ' );
1171 --The following check is required bcoz AMG passes only task manager id but not task manager
1172 --name. So for AMG p_check_id_flag should always be 'Y' not 'A'.
1173 --Confirmed with Selva.
1174 
1175     IF (p_calling_module = 'AMG')
1176     THEN
1177         --Check Task Manager and Task Manager Id
1178       IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1179           (p_task_manager_name IS NOT NULL)) OR
1180          ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1181           (p_task_manager_id IS NOT NULL)) THEN
1182         --Call Check API.
1183           select project_id into l_project_id
1184           from PA_PROJ_ELEMENTS
1185           where proj_element_id = p_task_id;
1186 
1187           select MANAGER_PERSON_ID into l_cur_task_mgr_person_id
1188           from pa_proj_elements
1189           where proj_element_id = p_task_id;
1190 
1191           If (p_task_manager_id <> l_cur_task_mgr_person_id)
1192              OR (l_cur_task_mgr_person_id IS NULL)
1193              OR (p_task_manager_id IS NULL) THEN
1194           --end changes for task manager
1195 
1196             pa_tasks_maint_utils.check_task_mgr_name_or_id(
1197              p_task_mgr_name => p_task_manager_name,
1198              p_task_mgr_id => p_task_manager_id,
1199              p_project_id => l_project_id,
1200              p_check_id_flag => 'Y',
1201              x_task_mgr_id => l_task_manager_id,
1202              x_return_status => l_return_status,
1203              x_error_msg_code => l_error_msg_code);
1204              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1205                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1206                                p_msg_name => l_error_msg_code);
1207 	         raise FND_API.G_EXC_ERROR;                      -- bug 4165509
1208              END IF;
1209           ELSE
1210             l_task_manager_id := l_cur_task_mgr_person_id;
1211           END IF;
1212       END IF; --End Name-Id Conversion
1213     END IF;
1214 
1215     IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
1216       --Check Task Manager and Task Manager Id
1217       /* Bug 2769960 -- added check for task_manager is passed as null
1218          If task manager is passed as null it means user want to remove task manager.
1219      there is no way in self service, so that  mgr_id is passed but not mgr_name
1220       */
1221       IF p_task_manager_name IS NULL THEN
1222     l_task_manager_id := null;
1223       ELSIF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1224              (p_task_manager_name IS NOT NULL)) THEN
1225         --Call Check API.
1226         --added for task manager changes
1227           select project_id into l_project_id
1228           from PA_PROJ_ELEMENTS
1229           where proj_element_id = p_task_id;
1230 
1231           OPEN get_mgr_info;
1232           FETCH get_mgr_info INTO l_cur_task_mgr_person_id, l_cur_task_mgr_person;
1233           CLOSE get_mgr_info;
1234 
1235           If (p_task_manager_id <> l_cur_task_mgr_person_id or p_task_manager_name <> l_cur_task_mgr_person)
1236              --hsiu: added for bug 2688475
1237              --need these validation for expired project members
1238              -- who are still task managers
1239              OR (l_cur_task_mgr_person_id IS NULL)
1240              OR (p_task_manager_id IS NULL)
1241              OR (l_cur_task_mgr_person IS NULL)
1242              OR (p_task_manager_name IS NULL) THEN
1243           --end changes for task manager
1244 
1245             pa_tasks_maint_utils.check_task_mgr_name_or_id(
1246               p_task_mgr_name => p_task_manager_name,
1247               p_task_mgr_id => p_task_manager_id,
1248               p_project_id => l_project_id,
1249               p_check_id_flag => 'A',        --bug fix 2646762
1250               x_task_mgr_id => l_task_manager_id,
1251               x_return_status => l_return_status,
1252               x_error_msg_code => l_error_msg_code);
1253 
1254             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1255                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1256                                  p_msg_name => l_error_msg_code);
1257 	        raise FND_API.G_EXC_ERROR;        -- bug 4165509
1258             END IF;
1259 
1260             --task manager changes
1261             --hsiu: added for bug 2688475
1262           ELSE
1263              l_task_manager_id := l_cur_task_mgr_person_id;
1264           END IF;
1265           --end task manager changes
1266       END IF; --End Name-Id Conversion
1267 
1268     --Check Carrying out organization name and Carrying out organization Id
1269       IF ((p_carrying_out_org_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1270           (p_carrying_out_org_name IS NOT NULL)) OR
1271          ((p_carrying_out_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1272           (p_carrying_out_org_id IS NOT NULL)) THEN
1273 --dbms_output.put_line( 'Before calling Name to Id conv : Check_OrgName_Or_Id' );
1274 
1275 --dbms_output.put_line( 'Before Id to name p_carrying_out_org_id '||p_carrying_out_org_id );
1276 --dbms_output.put_line( 'Before Id to name p_carrying_out_org_name '||p_carrying_out_org_name );
1277 
1278 --my_error_msg( 'p_carrying_out_org_id '||p_carrying_out_org_id );
1279 --my_error_msg( 'p_carrying_out_org_name '||p_carrying_out_org_name );
1280 
1281         IF p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1282         THEN
1283             l_carrying_out_org_id := FND_API.G_MISS_NUM;
1284         ELSE
1285             l_carrying_out_org_id := p_carrying_out_org_id;
1286         END IF;
1287 
1288         pa_hr_org_utils.Check_OrgName_Or_Id
1289             (p_organization_id      => l_carrying_out_org_id
1290              ,p_organization_name   => p_carrying_out_org_name
1291              ,p_check_id_flag       => 'A'
1292            --,x_organization_id     => l_carrying_out_org_id	  * commented for Bug: 4537865
1293              ,x_organization_id	    => l_new_carrying_out_org_id  -- added for bug 4537865
1294              ,x_return_status       => l_return_status
1295              ,x_error_msg_code      => l_error_msg_code);
1296 
1297         -- added for bug 4537865
1298 	IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1299 		l_carrying_out_org_id := l_new_carrying_out_org_id;
1300 	END IF;
1301         -- added for bug 4537865
1302 --dbms_output.put_line( 'After Id to name p_carrying_out_org_id '||p_carrying_out_org_id );
1303 --dbms_output.put_line( 'After Id to name l_carrying_out_org_id '||l_carrying_out_org_id );
1304 
1305 
1306         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1307               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1308                                    p_msg_name       => l_error_msg_code);
1309         END IF;
1310       END IF; --End Name-Id Conversion
1311     ELSE
1312        l_task_manager_id     := p_task_manager_id;
1313        l_carrying_out_org_id := p_carrying_out_org_id;
1314     END IF;
1315 --dbms_output.put_line( 'After calling Name to Id conv : Check_OrgName_Or_Id' );
1316     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1317       x_msg_count := FND_MSG_PUB.count_msg;
1318       IF x_msg_count = 1 then
1319          pa_interface_utils_pub.get_messages
1320          (p_encoded        => FND_API.G_TRUE,
1321           p_msg_index      => 1,
1322           p_msg_count      => l_msg_count,
1323           p_msg_data       => l_msg_data,
1324           p_data           => l_data,
1325           p_msg_index_out  => l_msg_index_out);
1326          x_msg_data := l_data;
1327       END IF;
1328       raise FND_API.G_EXC_ERROR;
1329     END IF;
1330 
1331     IF ((p_task_progress_entry_page <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1332         (p_task_progress_entry_page IS NOT NULL)) OR
1333        ((p_task_progress_entry_page_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1334         (p_task_progress_entry_page_id IS NOT NULL)) THEN
1335 
1336       IF (p_task_progress_entry_page_ID = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1337         l_task_progress_entry_page_id := FND_API.G_MISS_NUM;
1338       ELSE
1339         l_task_progress_entry_page_id := p_task_progress_entry_page_id;
1340       END IF;
1341 
1342       pa_page_layout_utils.Check_pagelayout_Name_Or_Id(
1343         p_pagelayout_name => p_task_progress_entry_page
1344        ,p_pagetype_code => 'AI'
1345        ,x_pagelayout_id => l_task_progress_entry_page_id
1346        ,x_return_status => l_return_status
1347        ,x_error_message_code => l_error_msg_code
1348       );
1349 
1350       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1351               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1352                                    p_msg_name       => l_error_msg_code);
1353       END IF;
1354 
1355 
1356     END IF;
1357 
1358     /*Bug 4089623 Lead Days Cannot be negative */
1359     IF  ( nvl(p_wf_lead_days,0) < 0 )
1360     THEN
1361          PA_UTILS.add_message('PA','PA_INVALID_LEAD_DAYS');
1362          l_return_status := FND_API.G_RET_STS_ERROR;
1363     END IF;
1364 
1365     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1366       x_msg_count := FND_MSG_PUB.count_msg;
1367       IF x_msg_count = 1 then
1368          pa_interface_utils_pub.get_messages
1369          (p_encoded        => FND_API.G_TRUE,
1370           p_msg_index      => 1,
1371           p_msg_count      => l_msg_count,
1372           p_msg_data       => l_msg_data,
1373           p_data           => l_data,
1374           p_msg_index_out  => l_msg_index_out);
1375          x_msg_data := l_data;
1376       END IF;
1377       raise FND_API.G_EXC_ERROR;
1378     END IF;
1379 
1380 --my_error_msg( 'Before calling private API. ' );
1381 
1382 --dbms_output.put_line( 'Before calling private API.' );
1383     PA_TASK_PVT1.Update_Task(
1384               p_api_version       => p_api_version
1385              ,p_init_msg_list         => p_init_msg_list
1386              ,p_commit              => p_commit
1387              ,p_validate_only         => p_validate_only
1388              ,p_validation_level    => p_validation_level
1389              ,p_calling_module  => p_calling_module
1390              ,p_debug_mode        => p_debug_mode
1391              ,p_max_msg_count         => p_max_msg_count
1392              ,p_ref_task_id         => p_ref_task_id
1393              ,p_peer_or_sub         => p_peer_or_sub
1394              ,p_task_id             => p_task_id
1395              ,p_task_number       => rtrim(p_task_number)
1396              ,p_task_name         => rtrim(p_task_name)
1397              ,p_task_description    => rtrim(p_task_description)
1398              ,p_location_id       => p_location_id
1399              ,p_country             => p_country
1400              ,p_territory_code  => p_territory_code
1401              ,p_state_region    => p_state_region
1402              ,p_city                => p_city
1403              ,p_task_manager_id => l_task_manager_id
1404              ,p_carrying_out_org_id => l_carrying_out_org_id
1405              ,p_priority_code         => p_priority_code
1406              ,p_TYPE_ID           => p_TYPE_ID
1407              ,p_status_code       => p_status_code
1408              ,p_inc_proj_progress_flag  => p_inc_proj_progress_flag
1409              ,p_pm_product_code => p_pm_product_code
1410              ,p_pm_task_reference   => p_pm_task_reference
1411              ,p_closed_date       => p_closed_date
1412              ,p_transaction_start_date => p_transaction_start_date
1413              ,p_transaction_finish_date => p_transaction_finish_date
1414              ,p_attribute_category  => p_attribute_category
1415              ,p_attribute1   => rtrim(p_attribute1)
1416              ,p_attribute2   => rtrim(p_attribute2)
1417              ,p_attribute3   => rtrim(p_attribute3)
1418              ,p_attribute4   => rtrim(p_attribute4)
1419              ,p_attribute5   => rtrim(p_attribute5)
1420              ,p_attribute6   => rtrim(p_attribute6)
1421              ,p_attribute7   => rtrim(p_attribute7)
1422              ,p_attribute8   => rtrim(p_attribute8)
1423              ,p_attribute9   => rtrim(p_attribute9)
1424              ,p_attribute10  => rtrim(p_attribute10)
1425              ,p_attribute11  => rtrim(p_attribute11)
1426              ,p_attribute12  => rtrim(p_attribute12)
1427              ,p_attribute13  => rtrim(p_attribute13)
1428              ,p_attribute14  => rtrim(p_attribute14)
1429              ,p_attribute15  => rtrim(p_attribute15)
1430                       ,p_address_id                        => p_address_id
1431                       ,p_address1                          => p_address1
1432                       ,p_work_type_id                      => p_work_type_id
1433                       ,p_service_type_code                 => p_service_type_code
1434                       ,p_chargeable_flag                   => p_chargeable_flag
1435                       ,p_billable_flag                     => p_billable_flag
1436                       ,p_receive_project_invoice_flag      => p_receive_project_invoice_flag
1437                    ,p_task_weighting_deriv_code => p_task_weighting_deriv_code
1438                    ,p_work_item_code => p_work_item_code
1439                    ,p_uom_code => p_uom_code
1440                    ,p_wq_actual_entry_code => p_wq_actual_entry_code
1441                    ,p_task_progress_entry_page_id => l_task_progress_entry_page_id
1442                    ,p_task_progress_entry_page => p_task_progress_entry_page
1443                    ,p_parent_structure_id        => p_parent_structure_id
1444                    ,p_phase_code                 => p_phase_code
1445                    ,p_phase_version_id           => p_phase_version_id
1446 
1447              ,p_record_version_number => p_record_version_number
1448              ,p_tk_attribute_category    => p_tk_attribute_category
1449              ,p_tk_attribute1    => p_tk_attribute1
1450              ,p_tk_attribute2    => p_tk_attribute2
1451              ,p_tk_attribute3    => p_tk_attribute3
1452              ,p_tk_attribute4    => p_tk_attribute4
1453              ,p_tk_attribute5    => p_tk_attribute5
1454              ,p_tk_attribute6    => p_tk_attribute6
1455              ,p_tk_attribute7    => p_tk_attribute7
1456              ,p_tk_attribute8    => p_tk_attribute8
1457              ,p_tk_attribute9    => p_tk_attribute9
1458              ,p_tk_attribute10 => p_tk_attribute10
1459                 -- Begin : Added for FP_M changes Bug 3305199
1460         ,p_Base_Perc_Comp_Deriv_Code => p_Base_Perc_Comp_Deriv_Code
1461                 -- End : Added for FP_M changes Bug 3305199
1462              ,p_gen_etc_src_code        => p_gen_etc_src_code
1463              ,p_wf_item_type    => p_wf_item_type
1464              ,p_wf_process      => p_wf_process
1465              ,p_wf_lead_days    => p_wf_lead_days
1466              ,p_wf_enabled_flag => p_wf_enabled_flag
1467              ,x_return_status           => l_return_status
1468              ,x_msg_count           => x_msg_count
1469              ,x_msg_data            => x_msg_data
1470          ,p_shared                  => p_shared       -- Bug 3451073
1471              );
1472 
1473 --dbms_output.put_line( 'After calling private API.' );
1474 
1475     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1476       x_msg_count := FND_MSG_PUB.count_msg;
1477       IF x_msg_count = 1 then
1478          pa_interface_utils_pub.get_messages
1479          (p_encoded        => FND_API.G_TRUE,
1480           p_msg_index      => 1,
1481           p_msg_count      => l_msg_count,
1482           p_msg_data       => l_msg_data,
1483           p_data           => l_data,
1484           p_msg_index_out  => l_msg_index_out);
1485          x_msg_data := l_data;
1486       END IF;
1487       raise FND_API.G_EXC_ERROR;
1488     END IF;
1489 
1490     x_return_status := FND_API.G_RET_STS_SUCCESS;
1491 
1492     IF (p_commit = FND_API.G_TRUE) THEN
1493       COMMIT;
1494     END IF;
1495 
1496     IF (p_debug_mode = 'Y') THEN
1497       pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK END');
1498     END IF;
1499 EXCEPTION
1500     when FND_API.G_EXC_ERROR then
1501       if p_commit = FND_API.G_TRUE then
1502          rollback to update_task;
1503       end if;
1504       x_return_status := FND_API.G_RET_STS_ERROR;
1505     when FND_API.G_EXC_UNEXPECTED_ERROR then
1506       if p_commit = FND_API.G_TRUE then
1507          rollback to update_task;
1508       end if;
1509       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1510       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1511                               p_procedure_name => 'UPDATE_TASK',
1512                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1513     when OTHERS then
1514       if p_commit = FND_API.G_TRUE then
1515          rollback to update_task;
1516       end if;
1517       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1518       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1519                               p_procedure_name => 'UPDATE_TASK',
1520                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1521       raise;
1522 
1523 END Update_Task;
1524 
1525 -- API name                      : Create_Task_version
1526 -- Type                          : Public procedure
1527 -- Pre-reqs                      : None
1528 -- Return Value                  : N/A
1529 -- Prameters
1530 -- p_api_version          IN    NUMBER  N   Not Null    1.0
1531 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
1532 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
1533 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
1534 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
1535 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
1536 -- p_debug_mode       IN    VARCHAR2    N   Null    N
1537 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1538 -- p_ref_task_version_id    IN  NUMBER  N   Not Null
1539 -- p_peer_or_sub    IN  VARCHAR2    N   Not Null
1540 -- p_task_id    IN  NUMBER  N   Not Null
1541 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1542 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1543 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1544 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1545 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1546 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1547 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1548 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1549 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1550 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1551 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1552 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1553 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1554 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1555 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1556 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1557 -- x_task_version_id    OUT NUMBER  N   Null
1558 -- x_return_status  OUT     VARCHAR2    N   Null
1559 -- x_msg_count        OUT   NUMBER  N   Null
1560 -- x_msg_data         OUT   VARCHAR2    N   Null
1561 --
1562 --  History
1563 --
1564 --  23-OCT-01   Majid Ansari             -Created
1565 --
1566 
1567 PROCEDURE Create_Task_Version(
1568  p_api_version        IN    NUMBER  :=1.0,
1569  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
1570  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
1571  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
1572  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
1573  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
1574  p_debug_mode         IN    VARCHAR2    :='N',
1575  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1576  p_ref_task_version_id  IN  NUMBER,
1577  p_peer_or_sub        IN    VARCHAR2,
1578  p_task_id              IN  NUMBER,
1579  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1580  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1581  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1582  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1583  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1584  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1585  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1586  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1587  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1588  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1589  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1590  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1591  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1592  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1593  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1594  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1595 
1596  p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1597  p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
1598 --bug 3301192
1599 p_financial_task_flag                IN VARCHAR2 := 'N',
1600 --bug 3301192
1601  x_task_version_id  OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1602  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1603  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
1604  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1605 ) IS
1606    l_api_name                      CONSTANT VARCHAR(30) := 'CREATE_TASK_VERSION';
1607    l_api_version                   CONSTANT NUMBER      := 1.0;
1608 
1609    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1610    l_return_status                 VARCHAR2(1);
1611    l_msg_count                     NUMBER;
1612    l_msg_data                      VARCHAR2(250);
1613    l_data                          VARCHAR2(250);
1614    l_msg_index_out                 NUMBER;
1615    l_error_msg_code                     VARCHAR2(250);
1616 
1617    l_carrying_out_org_id           NUMBER;
1618    l_task_manager_id               NUMBER;
1619 BEGIN
1620 
1621     pa_debug.init_err_stack ('PA_TASK_PUB1.CREATE_TASK_VERSION');
1622 
1623     IF (p_debug_mode = 'Y') THEN
1624        pa_debug.debug('PA_TASK_PUB1.CREATE_TASK_VERSION begin');
1625     END IF;
1626 
1627     IF (p_commit = FND_API.G_TRUE) THEN
1628       savepoint create_Task_version;
1629     END IF;
1630 
1631     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
1632       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1633     END IF;
1634 
1635 
1636     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
1637       FND_MSG_PUB.initialize;
1638     END IF;
1639 
1640 --dbms_output.put_line( 'Before private API' );
1641 
1642     PA_TASK_PVT1.Create_Task_Version(
1643              p_api_version        => p_api_version
1644             ,p_init_msg_list          => p_init_msg_list
1645             ,p_commit               => p_commit
1646             ,p_validate_only          => p_validate_only
1647             ,p_validation_level => p_validation_level
1648             ,p_calling_module         => p_calling_module
1649             ,p_debug_mode         => p_debug_mode
1650             ,p_max_msg_count          => p_max_msg_count
1651             ,p_ref_task_version_id  => p_ref_task_version_id
1652             ,p_peer_or_sub        => p_peer_or_sub
1653             ,p_task_id              => p_task_id
1654             ,p_attribute_category   => p_attribute_category
1655             ,p_attribute1    => p_attribute1
1656             ,p_attribute2    => p_attribute2
1657             ,p_attribute3    => p_attribute3
1658             ,p_attribute4    => p_attribute4
1659             ,p_attribute5    => p_attribute5
1660             ,p_attribute6    => p_attribute6
1661             ,p_attribute7    => p_attribute7
1662             ,p_attribute8    => p_attribute8
1663             ,p_attribute9    => p_attribute9
1664             ,p_attribute10   => p_attribute10
1665             ,p_attribute11   => p_attribute11
1666             ,p_attribute12   => p_attribute12
1667             ,p_attribute13   => p_attribute13
1668             ,p_attribute14   => p_attribute14
1669             ,p_attribute15   => p_attribute15
1670         ,p_WEIGHTING_PERCENTAGE => p_WEIGHTING_PERCENTAGE
1671         ,p_TASK_UNPUB_VER_STATUS_CODE => p_TASK_UNPUB_VER_STATUS_CODE
1672         ,p_financial_task_flag  => p_financial_task_flag        -- FP_M changes : Bug 3305199 : Bhumesh
1673             ,x_task_version_id => x_task_version_id
1674             ,x_return_status   => x_return_status
1675             ,x_msg_count     => x_msg_count
1676             ,x_msg_data        => x_msg_data
1677             );
1678 
1679 --dbms_output.put_line( 'Status after private call in public API '||x_return_status );
1680     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1681     --IF (x_return_status <> 'S' ) THEN
1682       x_msg_count := FND_MSG_PUB.count_msg;
1683       IF x_msg_count = 1 then
1684          pa_interface_utils_pub.get_messages
1685          (p_encoded        => FND_API.G_TRUE,
1686           p_msg_index      => 1,
1687           p_msg_count      => l_msg_count,
1688           p_msg_data       => l_msg_data,
1689           p_data           => l_data,
1690           p_msg_index_out  => l_msg_index_out);
1691          x_msg_data := l_data;
1692       END IF;
1693 --dbms_output.put_line( 'raising exception '||x_return_status );
1694 
1695       raise FND_API.G_EXC_ERROR;
1696     END IF;
1697 
1698 --dbms_output.put_line( 'Final status '||x_return_status );
1699 
1700     x_return_status := FND_API.G_RET_STS_SUCCESS;
1701 
1702 --dbms_output.put_line( 'Final status asasas'||x_return_status );
1703 
1704     IF (p_commit = FND_API.G_TRUE) THEN
1705       COMMIT;
1706     END IF;
1707 
1708     IF (p_debug_mode = 'Y') THEN
1709       pa_debug.debug('PA_PROJECT_STRUCTURE_PUB1.CREATE_TASK_VERSION END');
1710     END IF;
1711 EXCEPTION
1712     when FND_API.G_EXC_ERROR then
1713       if p_commit = FND_API.G_TRUE then
1714          rollback to create_task_version;
1715       end if;
1716       x_return_status := FND_API.G_RET_STS_ERROR;
1717 --dbms_output.put_line( 'Status in public API exception '||x_return_status );
1718 
1719     when FND_API.G_EXC_UNEXPECTED_ERROR then
1720       if p_commit = FND_API.G_TRUE then
1721          rollback to create_task_version;
1722       end if;
1723       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1724       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1725                               p_procedure_name => 'CREATE_TASK_VERSION',
1726                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1727     when OTHERS then
1728       if p_commit = FND_API.G_TRUE then
1729          rollback to create_task_version;
1730       end if;
1731       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1732       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1733                               p_procedure_name => 'CREATE_TASK_VERSION',
1734                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1735       raise;
1736 END Create_Task_Version;
1737 
1738 -- API name                      : Update_Task_version
1739 -- Type                          : Public procedure
1740 -- Pre-reqs                      : None
1741 -- Return Value                  : N/A
1742 -- Prameters
1743 -- p_api_version          IN    NUMBER  N   Not Null    1.0
1744 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
1745 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
1746 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
1747 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
1748 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
1749 -- p_debug_mode       IN    VARCHAR2    N   Null    N
1750 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1751 -- p_task_version_id    IN  NUMBER  N   Null
1752 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1753 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1754 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1755 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1756 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1757 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1758 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1759 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1760 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1761 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1762 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1763 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1764 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1765 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1766 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1767 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1768 -- p_record_version_number  IN  NUMBER
1769 -- x_return_status  OUT     VARCHAR2    N   Null
1770 -- x_msg_count        OUT   NUMBER  N   Null
1771 -- x_msg_data         OUT   VARCHAR2    N   Null
1772 --
1773 --  History
1774 --
1775 --  23-OCT-01   Majid Ansari             -Created
1776 --
1777 --
1778 
1779 PROCEDURE Update_Task_Version(
1780  p_api_version        IN    NUMBER  :=1.0,
1781  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
1782  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
1783  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
1784  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
1785  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
1786  p_debug_mode         IN    VARCHAR2    :='N',
1787  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1788  p_ref_task_version_id  IN  NUMBER,
1789  p_peer_or_sub        IN    VARCHAR2,
1790  p_task_version_id  IN  NUMBER,
1791  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1792  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1793  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1794  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1795  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1796  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1797  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1798  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1799  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1800  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1801  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1802  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1803  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1804  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1805  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1806  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1807  p_record_version_number    IN  NUMBER,
1808  p_action          IN    VARCHAR2 := 'NULL',
1809 
1810  p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1811  p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
1812 
1813  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1814  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
1815  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1816 ) IS
1817    l_api_name                      CONSTANT VARCHAR(30) := 'UPDATE_TASK_VERSION';
1818    l_api_version                   CONSTANT NUMBER      := 1.0;
1819 
1820    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1821    l_return_status                 VARCHAR2(1);
1822    l_msg_count                     NUMBER;
1823    l_msg_data                      VARCHAR2(250);
1824    l_data                          VARCHAR2(250);
1825    l_msg_index_out                 NUMBER;
1826    l_error_msg_code                VARCHAR2(250);
1827    l_dummy                         VARCHAR2(1);
1828 
1829    --l_carrying_out_org_id           NUMBER;
1830    --l_task_manager_id               NUMBER;
1831 BEGIN
1832 
1833     pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK_VERSION');
1834 
1835     IF (p_debug_mode = 'Y') THEN
1836        pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_VERSION begin');
1837     END IF;
1838 
1839     IF (p_commit = FND_API.G_TRUE) THEN
1840       savepoint update_Task_version;
1841     END IF;
1842 
1843     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
1844       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1845     END IF;
1846 
1847 
1848     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
1849       FND_MSG_PUB.initialize;
1850     END IF;
1851 
1852     --Lock row
1853     IF( p_validate_only <> FND_API.G_TRUE) THEN
1854       BEGIN
1855         select 'x' into l_dummy
1856         from PA_PROJ_ELEMENT_VERSIONS
1857         where element_version_id = p_task_version_id
1858         and record_version_number = p_record_version_number
1859         for update of record_version_number NOWAIT;
1860       EXCEPTION
1861         WHEN TIMEOUT_ON_RESOURCE THEN
1862           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1863                                p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1864           l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1865         WHEN NO_DATA_FOUND THEN
1866           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1867                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
1868           l_msg_data := 'PA_XC_RECORD_CHANGED';
1869         WHEN OTHERS THEN
1870           IF SQLCODE = -54 then
1871              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1872                                   p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1873              l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1874           ELSE
1875              raise;
1876           END IF;
1877       END;
1878     ELSE
1879       --check record_version_number
1880       BEGIN
1881         select 'x' into l_dummy
1882         from PA_PROJ_ELEMENT_VERSIONS
1883         where element_version_id = p_task_version_id
1884         and record_version_number = p_record_version_number;
1885       EXCEPTION
1886         WHEN NO_DATA_FOUND THEN
1887           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1888                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
1889           l_msg_data := 'PA_XC_RECORD_CHANGED';
1890         WHEN OTHERS THEN
1891           RAISE;
1892       END;
1893     END IF;
1894 
1895       l_msg_count := FND_MSG_PUB.count_msg;
1896       IF l_msg_count > 0 THEN
1897          x_msg_count := l_msg_count;
1898          x_return_status := 'E';
1899          RAISE  FND_API.G_EXC_ERROR;
1900       END IF;
1901 
1902 
1903 --dbms_output.put_line('call update task version pvt');
1904    PA_TASK_PVT1.Update_Task_Version(
1905              p_api_version        => p_api_version
1906             ,p_init_msg_list          => p_init_msg_list
1907             ,p_commit               => p_commit
1908             ,p_validate_only          => p_validate_only
1909             ,p_validation_level => p_validation_level
1910             ,p_calling_module         => p_calling_module
1911             ,p_debug_mode         => p_debug_mode
1912             ,p_max_msg_count          => p_max_msg_count
1913             ,p_ref_task_version_id  => p_ref_task_version_id
1914             ,p_peer_or_sub        => p_peer_or_sub
1915             ,p_task_version_id  => p_task_version_id
1916             ,p_attribute_category    => p_attribute_category
1917             ,p_attribute1    => p_attribute1
1918             ,p_attribute2    => p_attribute2
1919             ,p_attribute3    => p_attribute3
1920             ,p_attribute4    => p_attribute4
1921             ,p_attribute5    => p_attribute5
1922             ,p_attribute6    => p_attribute6
1923             ,p_attribute7    => p_attribute7
1924             ,p_attribute8    => p_attribute8
1925             ,p_attribute9    => p_attribute9
1926             ,p_attribute10   => p_attribute10
1927             ,p_attribute11   => p_attribute11
1928             ,p_attribute12   => p_attribute12
1929             ,p_attribute13   => p_attribute13
1930             ,p_attribute14   => p_attribute14
1931             ,p_attribute15   => p_attribute15
1932             ,p_record_version_number => p_record_version_number
1933             ,p_action          => p_action
1934         ,p_WEIGHTING_PERCENTAGE => p_WEIGHTING_PERCENTAGE
1935         ,p_TASK_UNPUB_VER_STATUS_CODE => p_TASK_UNPUB_VER_STATUS_CODE
1936             ,x_return_status   => l_return_status
1937             ,x_msg_count     => x_msg_count
1938             ,x_msg_data        => x_msg_data
1939             );
1940 
1941     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1942       x_msg_count := FND_MSG_PUB.count_msg;
1943       IF x_msg_count = 1 then
1944          pa_interface_utils_pub.get_messages
1945          (p_encoded        => FND_API.G_TRUE,
1946           p_msg_index      => 1,
1947           p_msg_count      => l_msg_count,
1948           p_msg_data       => l_msg_data,
1949           p_data           => l_data,
1950           p_msg_index_out  => l_msg_index_out);
1951          x_msg_data := l_data;
1952       END IF;
1953       raise FND_API.G_EXC_ERROR;
1954     END IF;
1955 
1956     x_return_status := FND_API.G_RET_STS_SUCCESS;
1957 
1958     IF (p_commit = FND_API.G_TRUE) THEN
1959       COMMIT;
1960     END IF;
1961 
1962     IF (p_debug_mode = 'Y') THEN
1963       pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_VERSION END');
1964     END IF;
1965 EXCEPTION
1966     when FND_API.G_EXC_ERROR then
1967       if p_commit = FND_API.G_TRUE then
1968          rollback to update_task_version;
1969       end if;
1970       x_return_status := FND_API.G_RET_STS_ERROR;
1971     when FND_API.G_EXC_UNEXPECTED_ERROR then
1972       if p_commit = FND_API.G_TRUE then
1973          rollback to update_task_version;
1974       end if;
1975       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1976       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1977                               p_procedure_name => 'UPDATE_TASK_VERSION',
1978                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1979     when OTHERS then
1980       if p_commit = FND_API.G_TRUE then
1981          rollback to update_task_version;
1982       end if;
1983       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1984       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1985                               p_procedure_name => 'UPDATE_TASK_VERSION',
1986                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1987       raise;
1988 END update_task_version;
1989 
1990 -- API name                      : Delete_Task_version
1991 -- Type                          : Public procedure
1992 -- Pre-reqs                      : None
1993 -- Return Value                  : N/A
1994 -- Prameters
1995 -- p_api_version          IN    NUMBER  N   Not Null    1.0
1996 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
1997 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
1998 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
1999 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
2000 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
2001 -- p_debug_mode       IN    VARCHAR2    N   Null    N
2002 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2003 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2004 -- p_task_version_id    IN  NUMBER  N   Null
2005 -- p_record_version_number  IN  NUMBER
2006 -- x_return_status  OUT     VARCHAR2    N   Null
2007 -- x_msg_count        OUT   NUMBER  N   Null
2008 -- x_msg_data         OUT   VARCHAR2    N   Null
2009 --
2010 --  History
2011 --
2012 --  23-OCT-01   Majid Ansari             -Created
2013 --
2014 --
2015 
2016 PROCEDURE Delete_Task_Version(
2017  p_api_version        IN    NUMBER  :=1.0,
2018  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
2019  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
2020  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
2021  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
2022  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
2023  p_debug_mode         IN    VARCHAR2    :='N',
2024  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2025  p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2026  p_task_version_id  IN  NUMBER,
2027  p_record_version_number    IN  NUMBER,
2028  p_called_from_api      IN    VARCHAR2    := 'ABCD',
2029  p_structure_type       IN    VARCHAR2    := 'WORKPLAN',   --bug 3301192
2030  p_calling_from         IN    VARCHAR2    := 'XYZ',  -- Bug 6023347
2031  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2032  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
2033  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2034 ) IS
2035    l_api_name                      CONSTANT VARCHAR(30) := 'DELETE_TASK_VERSION';
2036    l_api_version                   CONSTANT NUMBER      := 1.0;
2037 
2038    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2039    l_return_status                 VARCHAR2(1);
2040    l_msg_count                     NUMBER;
2041    l_msg_data                      VARCHAR2(250);
2042    l_data                          VARCHAR2(250);
2043    l_msg_index_out                 NUMBER;
2044    l_error_msg_code                VARCHAR2(250);
2045    l_dummy                         VARCHAR2(1);
2046    l_err_code                      NUMBER := 0;
2047    l_err_stack                     VARCHAR2(630);
2048    l_err_stage                     VARCHAR2(80);
2049    --l_carrying_out_org_id         NUMBER;
2050    --l_task_manager_id             NUMBER;
2051 
2052 -- hyau Bug 2852753
2053    l_delete_project_allowed      VARCHAR2(1);
2054    l_update_proj_num_allowed      VARCHAR2(1);
2055    l_update_proj_name_allowed    VARCHAR2(1);
2056    l_update_proj_desc_allowed    VARCHAR2(1);
2057    l_update_proj_dates_allowed    VARCHAR2(1);
2058    l_update_proj_status_allowed  VARCHAR2(1);
2059    l_update_proj_manager_allowed  VARCHAR2(1);
2060    l_update_proj_org_allowed      VARCHAR2(1);
2061    l_add_task_allowed            VARCHAR2(1);
2062    l_delete_task_allowed          VARCHAR2(1);
2063    l_update_task_num_allowed      VARCHAR2(1);
2064    l_update_task_name_allowed    VARCHAR2(1);
2065    l_update_task_dates_allowed    VARCHAR2(1);
2066    l_update_task_desc_allowed    VARCHAR2(1);
2067    l_update_parent_task_allowed  VARCHAR2(1);
2068    l_update_task_org_allowed      VARCHAR2(1);
2069 
2070    x_err_code         NUMBER        := 0;
2071    x_err_stack        VARCHAR2(200) := NULL;
2072    x_err_stage        VARCHAR2(200) := NULL;
2073    l_error_occured                 VARCHAR2(1) := 'N' ; --Bug2929411
2074 
2075    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
2076 
2077    CURSOR get_product_code ( c_project_id NUMBER ) IS
2078    SELECT pm_product_code
2079    FROM PA_PROJECTS_ALL
2080    WHERE project_id = c_project_id;
2081 
2082    l_project_id      NUMBER;
2083    CURSOR cur_proj_id
2084    IS
2085      SELECT project_id
2086        FROM pa_proj_element_versions
2087       WHERE element_version_id = p_task_version_id;
2088 
2089 -- end hyau Bug 2852753
2090 
2091 
2092 --hsiu: added for task version status
2093    CURSOR get_task_info(c_task_version_id NUMBER) IS
2094      select a.project_id, b.proj_element_id, parent_structure_version_id,
2095             TASK_UNPUB_VER_STATUS_CODE, b.link_task_flag
2096        from pa_proj_element_versions a,
2097             pa_proj_elements b    --bug 4501280
2098       where element_version_id = c_task_version_id
2099     --bug 4501280
2100         AND a.proj_element_id = b.proj_element_id
2101         AND a.project_id = b.project_id
2102     --bug 4501280
2103       ;
2104    l_task_info_rec   get_task_info%ROWTYPE;
2105 --end changes for task version status
2106 
2107   l_structure_version_id   pa_proj_element_versions.parent_structure_version_id%TYPE ;
2108 
2109 -- Bug Fix 4576640
2110 -- Adding a new check to stop users from deleting a linked task.
2111 -- Example:
2112 -- P1 - T1
2113 --      T2-P2
2114 -- In the above scenario we are not allowing the user to delete T2, as this is causing issues in PJI.
2115 -- Though this is a corner case as this happens only in deleting a task in a program which already has a
2116 -- published version.
2117 -- As per the bug updates, we are now stopping user from deleting a linked task and now user has to delete
2118 -- the link manually and then delete the task.
2119 
2120 CURSOR is_linked_task(c_task_version_id NUMBER) IS
2121 SELECT 'Y'
2122 FROM DUAL
2123 WHERE EXISTS(
2124    SELECT pors.object_relationship_id
2125      FROM pa_object_relationships pors,
2126           pa_object_relationships pors1
2127     WHERE pors1.object_id_from1 = c_task_version_id
2128       AND pors.object_id_from1 = pors1.object_id_to1
2129       AND pors1.relationship_type = 'S'
2130       AND pors.relationship_type IN ('LW','LF')
2131       AND pors.object_id_from2 <> pors.object_id_to2
2132       AND pors.object_type_from = 'PA_TASKS'
2133       AND pors.object_type_to = 'PA_STRUCTURES');
2134 
2135 l_linked_task VARCHAR2(1);
2136 
2137 BEGIN
2138 
2139     pa_debug.init_err_stack ('PA_TASK_PUB1.DELETE_TASK_VERSION');
2140 
2141     IF (p_debug_mode = 'Y') THEN
2142        pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_VERSION begin');
2143     END IF;
2144 
2145     IF (p_commit = FND_API.G_TRUE) THEN
2146       savepoint delete_Task_version;
2147     END IF;
2148 
2149     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2150       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2151     END IF;
2152 
2153 
2154     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
2155       FND_MSG_PUB.initialize;
2156     END IF;
2157 
2158 IF p_calling_module <> 'FORMS'
2159 THEN
2160     --Lock row
2161     IF( p_validate_only <> FND_API.G_TRUE) THEN
2162       BEGIN
2163         select 'x' into l_dummy
2164         from PA_PROJ_ELEMENT_VERSIONS
2165         where element_version_id = p_task_version_id
2166         and record_version_number = p_record_version_number
2167         for update of record_version_number NOWAIT;
2168       EXCEPTION
2169         WHEN TIMEOUT_ON_RESOURCE THEN
2170           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2171                                p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2172           l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2173           l_error_occured  := 'Y' ; --Bug2929411
2174         WHEN NO_DATA_FOUND THEN
2175           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2176                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
2177           l_msg_data := 'PA_XC_RECORD_CHANGED';
2178           l_error_occured  := 'Y' ; --Bug2929411
2179         WHEN OTHERS THEN
2180           IF SQLCODE = -54 then
2181              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2182                                   p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2183              l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2184              l_error_occured := 'Y' ; --Bug2929411
2185           ELSE
2186              raise;
2187           END IF;
2188       END;
2189     ELSE
2190       --check record_version_number
2191       BEGIN
2192         select 'x' into l_dummy
2193         from PA_PROJ_ELEMENT_VERSIONS
2194         where element_version_id = p_task_version_id
2195         and record_version_number = p_record_version_number;
2196       EXCEPTION
2197         WHEN NO_DATA_FOUND THEN
2198           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2199                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
2200           l_msg_data := 'PA_XC_RECORD_CHANGED';
2201           l_error_occured := 'Y' ; --Bug2929411
2202         WHEN OTHERS THEN
2203           RAISE;
2204       END;
2205     END IF;
2206 
2207       l_msg_count := FND_MSG_PUB.count_msg;
2208 
2209       IF l_msg_count > 0 AND l_error_occured = 'Y' THEN
2210          x_msg_count := l_msg_count;
2211          x_return_status := 'E';
2212          RAISE  FND_API.G_EXC_ERROR;
2213       END IF;
2214 END IF;  --<< p_calling module >>
2215 
2216 -- hyau Bug 2852753
2217       IF p_calling_module = 'SELF_SERVICE' THEN
2218 
2219         OPEN cur_proj_id;
2220         FETCH cur_proj_id INTO l_project_id;
2221         CLOSE cur_proj_id;
2222 
2223         OPEN get_product_code(l_project_id);
2224         FETCH get_product_code INTO l_pm_product_code;
2225         CLOSE get_product_code;
2226 
2227         If l_pm_product_code IS NOT NULL THEN
2228           pa_pm_controls.Get_Project_actions_allowed
2229                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
2230                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
2231                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
2232                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
2233                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
2234                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
2235                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
2236                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
2237                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
2238                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
2239                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
2240                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
2241                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
2242                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
2243                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
2244                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
2245                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
2246                  P_ERROR_CODE                 => x_err_code,
2247          P_ERROR_STACK                    => x_err_stack,
2248          P_ERROR_STAGE                => x_err_stage );
2249 
2250           IF x_err_code <> 0 THEN
2251             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2252                                  p_msg_name       => x_err_stage);
2253           END IF;
2254       IF l_delete_task_allowed = 'N' THEN
2255               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2256                                    p_msg_name       => 'PA_PR_PM_CANNOT_DELETE');
2257               raise FND_API.G_EXC_ERROR;
2258           END IF;
2259         END IF;
2260       END IF;
2261 
2262 -- end hyau Bug 2852753
2263 
2264     --hsiu: task version status changes
2265     --check delete task ok
2266     OPEN get_task_info(p_task_version_id);
2267     FETCH get_task_info into l_task_info_rec;
2268     CLOSE get_task_info;
2269 
2270     /* Bug 4068685 : If p_structure_version_id is not passed to this Delete_Task_Version API
2271                      then it will be defaulted to MISS_NUM .In that case ,Use the retrieved value of
2272                      parent_structure_version_id from l_task_info_rec
2273     */
2274 
2275     IF (p_structure_version_id IS NOT NULL)
2276        AND (p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
2277     THEN
2278         l_structure_version_id := l_task_info_rec.parent_structure_version_id ;
2279     ELSE
2280         l_structure_version_id := p_structure_version_id ;
2281     END IF;
2282 
2283     /*In the following function call , changed value of p_parent_structure_ver_id parameter
2284       from p_structure_version_id to l_structure_version_id
2285       for Bug 4068685
2286     */
2287     --6023347: No need to check tasks if complete version is to be deleted from Workplan Version Disabling
2288     IF p_calling_from <> 'DEL_WP_STRUC_DISABLE_VERSION' THEN  -- 6023347
2289       --Check if it is okay to delete task version. Also checks financial task
2290       PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok(p_project_id => l_task_info_rec.project_id
2291                             ,p_task_version_id => p_task_version_id
2292                             ,p_parent_structure_ver_id => l_structure_version_id -- 4068685
2293                             ,x_return_status => l_return_status
2294                             ,x_error_message_code => l_error_msg_code);
2295       IF (l_return_status <> 'S') THEN
2296         PA_UTILS.ADD_MESSAGE('PA', l_error_msg_code);
2297         l_msg_data := l_error_msg_code;
2298         RAISE FND_API.G_EXC_ERROR;
2299       END IF;
2300     END IF; -- 6023347
2301 
2302     -- Bug Fix 4576640.
2303     -- Now stopping the user from deleting a linked task.
2304 
2305     OPEN is_linked_task(p_task_version_id);
2306     FETCH is_linked_task INTO l_linked_task;
2307     CLOSE is_linked_task;
2308 
2309     IF l_linked_task = 'Y' THEN
2310        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2311                             p_msg_name       => 'PA_PS_CANT_DEL_LINKED_TASK');
2312        RAISE FND_API.G_EXC_ERROR;
2313     END IF;
2314 
2315 -- End of Bug Fix 4576640.
2316 
2317     --ok to delete. decide whether to delete or modify version status
2318     --Check if shared
2319 --bug 4501280
2320    IF l_task_info_rec.link_task_flag = 'N'
2321    THEN
2322 --bug 4501280
2323     IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_task_info_rec.project_id) = 'Y') THEN
2324       --sharing enabled
2325       IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_task_info_rec.project_id) = 'Y') THEN
2326         --versioning on
2327         IF (l_task_info_rec.task_unpub_ver_status_code = 'PUBLISHED' OR
2328             l_task_info_rec.task_unpub_ver_status_code = 'TO_BE_DELETED')
2329             AND p_called_from_api <> 'DELETE_STRUCTURE_VERSION' THEN          -- Bug 3056077. We need to delete the task versions
2330           --change status to TO_BE_DELETED                                    -- when the structure version is to be deleted.
2331 
2332             -- 3955848 Added following code to validate task to deliverable association deletion
2333             -- related validations , p_delete_or_validate is passed as 'V' because only validation will be done
2334 
2335             PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
2336              (
2337                  p_task_element_id      => l_task_info_rec.proj_element_id
2338                 ,p_project_id           => l_task_info_rec.project_id
2339                 ,p_task_version_id      => p_task_version_id
2340                 ,p_delete_or_validate   => 'V'
2341                 ,x_return_status        => x_return_status
2342                 ,x_msg_count            => x_msg_count
2343                 ,x_msg_data             => x_msg_data
2344              );
2345 
2346              IF x_return_status = FND_API.G_RET_STS_ERROR then
2347                  RAISE FND_API.G_EXC_ERROR;
2348              End If;
2349 
2350             -- 3955848 end
2351 
2352           PA_TASK_PVT1.update_task_ver_delete_status(
2353                  p_task_version_id => p_task_version_id
2354                 ,x_return_status => l_return_status
2355                 ,x_msg_count => x_msg_count
2356                 ,x_msg_data => x_msg_data);
2357 
2358           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2359             x_msg_count := FND_MSG_PUB.count_msg;
2360             IF x_msg_count = 1 then
2361               pa_interface_utils_pub.get_messages
2362                (p_encoded        => FND_API.G_TRUE,
2363                 p_msg_index      => 1,
2364                 p_msg_count      => l_msg_count,
2365                 p_msg_data       => l_msg_data,
2366                 p_data           => l_data,
2367                 p_msg_index_out  => l_msg_index_out);
2368               x_msg_data := l_data;
2369             END IF;
2370             raise FND_API.G_EXC_ERROR;
2371           END IF;
2372 
2373           return; --only set the version status
2374         ELSE --not published
2375           NULL; --continue to delete
2376         END IF; --task version status
2377       ELSE -- versioning off
2378         NULL; --continue to delete
2379       END IF;
2380     ELSE --not shared
2381       IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_task_info_rec.parent_structure_version_id, 'FINANCIAL') = 'Y') THEN
2382         --Financial structure
2383         NULL; --continue to delete
2384       ELSE --Workplan structure
2385         --check if versioning is on
2386         IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_task_info_rec.project_id) = 'Y') THEN
2387           --versioning on
2388           IF (l_task_info_rec.task_unpub_ver_status_code = 'PUBLISHED' OR
2389               l_task_info_rec.task_unpub_ver_status_code = 'TO_BE_DELETED')
2390               AND p_called_from_api <> 'DELETE_STRUCTURE_VERSION' THEN          -- Bug 3056077. We need to delete the task versions
2391             --change status to TO_BE_DELETED                                    -- when the structure version is to be deleted.
2392 
2393             -- 3955848 Added following code to validate task to deliverable association deletion
2394             -- related validations , p_delete_or_validate is passed as 'V' because only validation will be done
2395 
2396             PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
2397              (
2398                  p_task_element_id      => l_task_info_rec.proj_element_id
2399                 ,p_project_id           => l_task_info_rec.project_id
2400                 ,p_task_version_id      => p_task_version_id
2401                 ,p_delete_or_validate   => 'V'
2402                 ,x_return_status        => x_return_status
2403                 ,x_msg_count            => x_msg_count
2404                 ,x_msg_data             => x_msg_data
2405              );
2406 
2407              IF x_return_status = FND_API.G_RET_STS_ERROR then
2408                  RAISE FND_API.G_EXC_ERROR;
2409              End If;
2410 
2411             -- 3955848 end
2412 
2413             PA_TASK_PVT1.update_task_ver_delete_status(
2414                  p_task_version_id => p_task_version_id
2415                 ,x_return_status => l_return_status
2416                 ,x_msg_count => x_msg_count
2417                 ,x_msg_data => x_msg_data);
2418 
2419             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2420               x_msg_count := FND_MSG_PUB.count_msg;
2421               IF x_msg_count = 1 then
2422                 pa_interface_utils_pub.get_messages
2423                  (p_encoded        => FND_API.G_TRUE,
2424                   p_msg_index      => 1,
2425                   p_msg_count      => l_msg_count,
2426                   p_msg_data       => l_msg_data,
2427                   p_data           => l_data,
2428                   p_msg_index_out  => l_msg_index_out);
2429                 x_msg_data := l_data;
2430               END IF;
2431               raise FND_API.G_EXC_ERROR;
2432             END IF;
2433 
2434             return; --only set the status
2435           ELSE
2436             NULL; --delete task version
2437           END IF;
2438         ELSE
2439           --versioning off
2440           NULL; --delete task version
2441         END IF;
2442       END IF;
2443     END IF;
2444   END IF;   --bug 4501280
2445     --end task version status changes
2446 
2447 
2448 --dbms_output.put_line('delete pvt');
2449     PA_TASK_PVT1.Delete_Task_Version(
2450              p_api_version        => p_api_version
2451             ,p_init_msg_list          => p_init_msg_list
2452             ,p_commit               => p_commit
2453             ,p_validate_only          => p_validate_only
2454             ,p_validation_level => p_validation_level
2455             ,p_calling_module         => p_calling_module
2456             ,p_debug_mode         => p_debug_mode
2457             ,p_max_msg_count          => p_max_msg_count
2458             ,p_structure_version_id => l_structure_version_id -- Old Value : p_structure_version_id : 4068685
2459             ,p_task_version_id  => p_task_version_id
2460             ,p_record_version_number => p_record_version_number
2461             ,p_called_from_api       => p_called_from_api
2462         ,p_structure_type        => p_structure_type     -- FP_M changes 3305199
2463             ,x_return_status        => l_return_status
2464             ,x_msg_count          => x_msg_count
2465             ,x_msg_data             => x_msg_data
2466             );
2467 
2468     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2469       x_msg_count := FND_MSG_PUB.count_msg;
2470       IF x_msg_count = 1 then
2471          pa_interface_utils_pub.get_messages
2472          (p_encoded        => FND_API.G_TRUE,
2473           p_msg_index      => 1,
2474           p_msg_count      => l_msg_count,
2475           p_msg_data       => l_msg_data,
2476           p_data           => l_data,
2477           p_msg_index_out  => l_msg_index_out);
2478          x_msg_data := l_data;
2479       END IF;
2480       raise FND_API.G_EXC_ERROR;
2481     END IF;
2482 
2483     x_return_status := FND_API.G_RET_STS_SUCCESS;
2484 
2485     IF (p_commit = FND_API.G_TRUE) THEN
2486       COMMIT;
2487     END IF;
2488 
2489     IF (p_debug_mode = 'Y') THEN
2490       pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_VERSION END');
2491     END IF;
2492 EXCEPTION
2493     when FND_API.G_EXC_ERROR then
2494       if p_commit = FND_API.G_TRUE then
2495          rollback to delete_task_version;
2496       end if;
2497       x_return_status := FND_API.G_RET_STS_ERROR;
2498     when FND_API.G_EXC_UNEXPECTED_ERROR then
2499       if p_commit = FND_API.G_TRUE then
2500          rollback to delete_task_version;
2501       end if;
2502       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2503       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
2504                               p_procedure_name => 'DELETE_TASK_VERSION',
2505                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2506     when OTHERS then
2507       if p_commit = FND_API.G_TRUE then
2508          rollback to delete_task_version;
2509       end if;
2510       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2511       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
2512                               p_procedure_name => 'DELETE_TASK_VERSION',
2513                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2514       raise;
2515 END delete_task_version;
2516 
2517 -- API name                      : Create_Schedule_Version
2518 -- Type                          : Public procedure
2519 -- Pre-reqs                      : None
2520 -- Return Value                  : N/A
2521 -- Prameters
2522 -- p_api_version          IN    NUMBER  N   Not Null    1.0
2523 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
2524 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
2525 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
2526 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
2527 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
2528 -- p_debug_mode       IN    VARCHAR2    N   Null    N
2529 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2530 -- p_element_version_id IN  NUMBER  N   Not Null
2531 -- p_calendar_id    IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2532 -- p_calendar_name  IN  VARCHAR2    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2533 -- p_scheduled_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2534 -- p_scheduled_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2535 -- p_obligation_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2536 -- p_obligation_end_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2537 -- p_actual_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2538 -- p_actual_finish_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2539 -- p_estimate_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2540 -- p_estimate_finish_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2541 -- p_duration   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2542 -- p_early_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2543 -- p_early_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2544 -- p_late_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2545 -- p_late_end_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2546 -- p_milestone_flag IN  VARCHAR2    N   NULL    N
2547 -- p_critical_flag  IN  VARCHAR2    N   NULL    N
2548 -- x_pev_schedule_id    OUT NUMBER  N   NULL
2549 -- x_return_status  OUT     VARCHAR2    N   Null
2550 -- x_msg_count        OUT   NUMBER  N   Null
2551 -- x_msg_data         OUT   VARCHAR2    N   Null
2552 --
2553 --  History
2554 --
2555 --  23-OCT-01   Majid Ansari             -Created
2556 --  16-OCT-02   XXLU                     - Added DFF parameters.
2557 --
2558 
2559 PROCEDURE Create_Schedule_Version(
2560  p_api_version        IN    NUMBER  :=1.0,
2561  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
2562  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
2563  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
2564  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
2565  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
2566  p_debug_mode         IN    VARCHAR2    :='N',
2567  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2568  p_element_version_id   IN  NUMBER,
2569  p_calendar_id        IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2570  p_calendar_name          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2571  p_scheduled_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2572  p_scheduled_end_date   IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2573  p_obligation_start_date IN DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2574  p_obligation_end_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2575  p_actual_start_date    IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2576  p_actual_finish_date   IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2577  p_estimate_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2578  p_estimate_finish_date IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2579  p_duration             IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2580  p_early_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2581  p_early_end_date         IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2582  p_late_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2583  p_late_end_date          IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2584  p_milestone_flag         IN    VARCHAR2    :='N',
2585  p_critical_flag          IN    VARCHAR2    :='N',
2586 
2587  p_WQ_PLANNED_QUANTITY  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2588  p_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2589  p_PLANNED_EQUIP_EFFORT       IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,   --bug 3305199
2590  --bug 3305199 schedule options
2591  p_def_sch_tool_tsk_type       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2592  p_def_sch_tool_tsk_type_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2593  p_constraint_type_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2594  p_constraint_date             IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2595  p_free_slack                  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2596  p_total_slack                 IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2597  p_effort_driven_flag          IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2598  p_level_assignments_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2599  --end bug 3305199
2600  p_ext_act_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2601  p_ext_remain_duration         IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2602  p_ext_sch_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2603  p_attribute_category     IN    pa_proj_elem_ver_schedule.attribute_category%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2604  p_attribute1             IN    pa_proj_elem_ver_schedule.attribute1%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2605  p_attribute2             IN    pa_proj_elem_ver_schedule.attribute2%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2606  p_attribute3             IN    pa_proj_elem_ver_schedule.attribute3%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2607  p_attribute4             IN    pa_proj_elem_ver_schedule.attribute4%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2608  p_attribute5             IN    pa_proj_elem_ver_schedule.attribute5%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2609  p_attribute6             IN    pa_proj_elem_ver_schedule.attribute6%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2610  p_attribute7             IN    pa_proj_elem_ver_schedule.attribute7%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2611  p_attribute8             IN    pa_proj_elem_ver_schedule.attribute8%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2612  p_attribute9             IN    pa_proj_elem_ver_schedule.attribute9%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2613  p_attribute10            IN    pa_proj_elem_ver_schedule.attribute10%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2614  p_attribute11            IN    pa_proj_elem_ver_schedule.attribute11%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2615  p_attribute12            IN    pa_proj_elem_ver_schedule.attribute12%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2616  p_attribute13            IN    pa_proj_elem_ver_schedule.attribute13%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2617  p_attribute14            IN    pa_proj_elem_ver_schedule.attribute14%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2618  p_attribute15            IN    pa_proj_elem_ver_schedule.attribute15%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2619  x_pev_schedule_id  OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2620  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2621  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
2622  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2623 ) IS
2624    l_api_name                      CONSTANT VARCHAR(30) := 'CREATE_SCHEDULE_VERSION';
2625    l_api_version                   CONSTANT NUMBER      := 1.0;
2626 
2627    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2628    l_return_status                 VARCHAR2(1);
2629    l_msg_count                     NUMBER;
2630    l_msg_data                      VARCHAR2(250);
2631    l_data                          VARCHAR2(250);
2632    l_msg_index_out                 NUMBER;
2633    l_error_msg_code                     VARCHAR2(250);
2634 BEGIN
2635     pa_debug.init_err_stack ('PA_TASK_PUB1.create_schedule_VERSION');
2636 
2637     IF (p_debug_mode = 'Y') THEN
2638       pa_debug.debug('PA_TASK_PUB1.CREATE_SCHEDULE_VERSION begin');
2639     END IF;
2640 
2641     IF (p_commit = FND_API.G_TRUE) THEN
2642       savepoint create_schedule_version;
2643     END IF;
2644 
2645     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2646       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2647     END IF;
2648 
2649 
2650     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
2651       FND_MSG_PUB.initialize;
2652     END IF;
2653 
2654     PA_TASK_PVT1.Create_Schedule_Version(
2655              p_api_version        => p_api_version
2656             ,p_init_msg_list          => p_init_msg_list
2657             ,p_commit               => p_commit
2658             ,p_validate_only          => p_validate_only
2659             ,p_validation_level => p_validation_level
2660             ,p_calling_module         => p_calling_module
2661             ,p_debug_mode         => p_debug_mode
2662             ,p_max_msg_count          => p_max_msg_count
2663             ,p_element_version_id   => p_element_version_id
2664             ,p_calendar_id        => p_calendar_id
2665             ,p_scheduled_start_date => p_scheduled_start_date
2666             ,p_scheduled_end_date   => p_scheduled_end_date
2667             ,p_obligation_start_date => p_obligation_start_date
2668             ,p_obligation_end_date  => p_obligation_end_date
2669             ,p_actual_start_date    => p_actual_start_date
2670             ,p_actual_finish_date   => p_actual_finish_date
2671             ,p_estimate_start_date  => p_estimate_start_date
2672             ,p_estimate_finish_date => p_estimate_finish_date
2673             ,p_duration             => p_duration
2674             ,p_early_start_date => p_early_start_date
2675             ,p_early_end_date         => p_early_end_date
2676             ,p_late_start_date  => p_late_start_date
2677             ,p_late_end_date          => p_late_end_date
2678             ,p_milestone_flag         => p_milestone_flag
2679             ,p_critical_flag          => p_critical_flag
2680             ,x_pev_schedule_id  => x_pev_schedule_id
2681             ,p_wq_planned_quantity => p_wq_planned_quantity
2682             ,p_planned_effort      => p_planned_effort
2683             ,p_PLANNED_EQUIP_EFFORT => p_PLANNED_EQUIP_EFFORT
2684             ,p_def_sch_tool_tsk_type_code => p_def_sch_tool_tsk_type_code
2685             ,p_constraint_type_code       => p_constraint_type_code
2686             ,p_constraint_date            => p_constraint_date
2687             ,p_free_slack                 => p_free_slack
2688             ,p_total_slack                => p_total_slack
2689             ,p_effort_driven_flag         => p_effort_driven_flag
2690             ,p_level_assignments_flag     => p_level_assignments_flag
2691             ,p_ext_act_duration           => p_ext_act_duration
2692             ,p_ext_remain_duration        => p_ext_remain_duration
2693             ,p_ext_sch_duration           => p_ext_sch_duration
2694             ,p_attribute_category               => p_attribute_category
2695             ,p_attribute1                       => p_attribute1
2696             ,p_attribute2                       => p_attribute2
2697             ,p_attribute3                       => p_attribute3
2698             ,p_attribute4                       => p_attribute4
2699             ,p_attribute5                       => p_attribute5
2700             ,p_attribute6                       => p_attribute6
2701             ,p_attribute7                       => p_attribute7
2702             ,p_attribute8                       => p_attribute8
2703             ,p_attribute9                       => p_attribute9
2704             ,p_attribute10                    => p_attribute10
2705             ,p_attribute11                    => p_attribute11
2706             ,p_attribute12                    => p_attribute12
2707             ,p_attribute13                    => p_attribute13
2708             ,p_attribute14                    => p_attribute14
2709             ,p_attribute15                    => p_attribute15
2710             ,x_return_status          => l_return_status
2711             ,x_msg_count          => x_msg_count
2712             ,x_msg_data             => x_msg_data
2713             );
2714 
2715     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2716       x_msg_count := FND_MSG_PUB.count_msg;
2717       IF x_msg_count = 1 then
2718          pa_interface_utils_pub.get_messages
2719          (p_encoded        => FND_API.G_TRUE,
2720           p_msg_index      => 1,
2721           p_msg_count      => l_msg_count,
2722           p_msg_data       => l_msg_data,
2723           p_data           => l_data,
2724           p_msg_index_out  => l_msg_index_out);
2725          x_msg_data := l_data;
2726       END IF;
2727       raise FND_API.G_EXC_ERROR;
2728     END IF;
2729 
2730     x_return_status := FND_API.G_RET_STS_SUCCESS;
2731 
2732     IF (p_commit = FND_API.G_TRUE) THEN
2733       COMMIT;
2734     END IF;
2735 
2736     IF (p_debug_mode = 'Y') THEN
2737       pa_debug.debug('PA_TASK_PUB1.CREATE_SCHEDULE_VERSION END');
2738     END IF;
2739 EXCEPTION
2740     when FND_API.G_EXC_ERROR then
2741       if p_commit = FND_API.G_TRUE then
2742          rollback to create_schedule_version;
2743       end if;
2744       x_return_status := FND_API.G_RET_STS_ERROR;
2745     when FND_API.G_EXC_UNEXPECTED_ERROR then
2746       if p_commit = FND_API.G_TRUE then
2747          rollback to create_schedule_version;
2748       end if;
2749       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2750       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
2751                               p_procedure_name => 'CREATE_SCHEDULE_VERSION',
2752                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2753     when OTHERS then
2754       if p_commit = FND_API.G_TRUE then
2755          rollback to create_schedule_version;
2756       end if;
2757       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2758       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
2759                               p_procedure_name => 'CREATE_SCHEDULE_VERSION',
2760                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2761       raise;
2762 
2763 END Create_Schedule_Version;
2764 
2765 
2766 -- API name                      : Update_Schedule_Version
2767 -- Type                          : Public procedure
2768 -- Pre-reqs                      : None
2769 -- Return Value                  : N/A
2770 -- Prameters
2771 -- p_api_version          IN    NUMBER  N   Not Null    1.0
2772 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
2773 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
2774 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
2775 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
2776 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
2777 -- p_debug_mode       IN    VARCHAR2    N   Null    N
2778 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2779 -- p_element_version_id IN  NUMBER  N   Not Null
2780 -- p_calendar_id    IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2781 -- p_calendar_name  IN  VARCHAR2    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2782 -- p_scheduled_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2783 -- p_scheduled_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2784 -- p_obligation_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2785 -- p_obligation_end_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2786 -- p_actual_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2787 -- p_actual_finish_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2788 -- p_estimate_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2789 -- p_estimate_finish_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2790 -- p_duration   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2791 -- p_early_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2792 -- p_early_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2793 -- p_late_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2794 -- p_late_end_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2795 -- p_milestone_flag IN  VARCHAR2    N   NULL    N
2796 -- p_critical_flag  IN  VARCHAR2    N   NULL    N
2797 -- x_pev_schedule_id    OUT NUMBER  N   NULL
2798 -- x_return_status  OUT     VARCHAR2    N   Null
2799 -- x_msg_count        OUT   NUMBER  N   Null
2800 -- x_msg_data         OUT   VARCHAR2    N   Null
2801 --
2802 --  History
2803 --
2804 --  23-OCT-01   Majid Ansari             -Created
2805 --  16-OCT-02   XXLU                     - Added DFF parameters.
2806 --
2807 
2808 PROCEDURE Update_Schedule_Version(
2809  p_api_version        IN    NUMBER  :=1.0,
2810  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
2811  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
2812  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
2813  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
2814  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
2815  p_debug_mode         IN    VARCHAR2    :='N',
2816  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2817  p_pev_schedule_id  IN  NUMBER,
2818  p_calendar_id        IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2819  p_calendar_name          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2820  p_scheduled_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2821  p_scheduled_end_date   IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2822  p_obligation_start_date IN DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2823  p_obligation_end_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2824  p_actual_start_date    IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2825  p_actual_finish_date   IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2826  p_estimate_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2827  p_estimate_finish_date IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2828  p_duration             IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2829  p_early_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2830  p_early_end_date         IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2831  p_late_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2832  p_late_end_date          IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2833  p_milestone_flag         IN    VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
2834  p_critical_flag          IN    VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
2835 
2836  p_WQ_PLANNED_QUANTITY  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2837  p_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2838  p_PLANNED_EQUIP_EFFORT       IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,   --bug 3305199
2839  --bug 3305199 schedule options
2840  p_def_sch_tool_tsk_type       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2841  p_def_sch_tool_tsk_type_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2842  p_constraint_type_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2843  p_constraint_date             IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2844  p_free_slack                  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2845  p_total_slack                 IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2846  p_effort_driven_flag          IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2847  p_level_assignments_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2848  --end bug 3305199
2849 
2850  p_record_version_number IN   NUMBER,
2851  p_ext_act_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2852  p_ext_remain_duration         IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2853  p_ext_sch_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2854  p_attribute_category     IN    pa_proj_elem_ver_schedule.attribute_category%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2855  p_attribute1             IN    pa_proj_elem_ver_schedule.attribute1%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2856  p_attribute2             IN    pa_proj_elem_ver_schedule.attribute2%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2857  p_attribute3             IN    pa_proj_elem_ver_schedule.attribute3%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2858  p_attribute4             IN    pa_proj_elem_ver_schedule.attribute4%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2859  p_attribute5             IN    pa_proj_elem_ver_schedule.attribute5%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2860  p_attribute6             IN    pa_proj_elem_ver_schedule.attribute6%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2861  p_attribute7             IN    pa_proj_elem_ver_schedule.attribute7%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2862  p_attribute8             IN    pa_proj_elem_ver_schedule.attribute8%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2863  p_attribute9             IN    pa_proj_elem_ver_schedule.attribute9%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2864  p_attribute10            IN    pa_proj_elem_ver_schedule.attribute10%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2865  p_attribute11            IN    pa_proj_elem_ver_schedule.attribute11%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2866  p_attribute12            IN    pa_proj_elem_ver_schedule.attribute12%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2867  p_attribute13            IN    pa_proj_elem_ver_schedule.attribute13%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2868  p_attribute14            IN    pa_proj_elem_ver_schedule.attribute14%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2869  p_attribute15            IN    pa_proj_elem_ver_schedule.attribute15%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2870  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2871  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
2872  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2873 ) IS
2874 
2875    l_api_name                      CONSTANT VARCHAR(30) := 'Update_Schedule_Version';
2876    l_api_version                   CONSTANT NUMBER      := 1.0;
2877 
2878    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2879    l_return_status                 VARCHAR2(1);
2880    l_msg_count                     NUMBER;
2881    l_msg_data                      VARCHAR2(250);
2882    l_data                          VARCHAR2(250);
2883    l_msg_index_out                 NUMBER;
2884    l_error_msg_code                VARCHAR2(250);
2885    l_dummy                         VARCHAR2(1);
2886 
2887 -- hyau Bug 2852753
2888    l_delete_project_allowed      VARCHAR2(1);
2889    l_update_proj_num_allowed      VARCHAR2(1);
2890    l_update_proj_name_allowed    VARCHAR2(1);
2891    l_update_proj_desc_allowed    VARCHAR2(1);
2892    l_update_proj_dates_allowed    VARCHAR2(1);
2893    l_update_proj_status_allowed  VARCHAR2(1);
2894    l_update_proj_manager_allowed  VARCHAR2(1);
2895    l_update_proj_org_allowed      VARCHAR2(1);
2896    l_add_task_allowed            VARCHAR2(1);
2897    l_delete_task_allowed          VARCHAR2(1);
2898    l_update_task_num_allowed      VARCHAR2(1);
2899    l_update_task_name_allowed    VARCHAR2(1);
2900    l_update_task_dates_allowed    VARCHAR2(1);
2901    l_update_task_desc_allowed    VARCHAR2(1);
2902    l_update_parent_task_allowed  VARCHAR2(1);
2903    l_update_task_org_allowed      VARCHAR2(1);
2904 
2905    l_err_code         NUMBER        := 0;
2906    l_err_stack        VARCHAR2(200) := NULL;
2907    l_err_stage        VARCHAR2(200) := NULL;
2908 
2909    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
2910 
2911    CURSOR get_product_code ( c_project_id NUMBER ) IS
2912    SELECT pm_product_code
2913    FROM PA_PROJECTS_ALL
2914    WHERE project_id = c_project_id;
2915 
2916    l_project_id      NUMBER;
2917 
2918    CURSOR cur_proj_id
2919    IS
2920      SELECT project_id
2921        FROM pa_proj_elem_ver_schedule
2922       WHERE pev_schedule_id = p_pev_schedule_id;
2923 
2924    CURSOR cur_schedule_dates IS
2925    SELECT SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE
2926    FROM pa_proj_elem_ver_schedule
2927    WHERE pev_schedule_id = p_pev_schedule_id;
2928 
2929    l_cur_sch_start_date  DATE;
2930    l_cur_sch_end_date    DATE;
2931 
2932    l_Structure_Version_ID   NUMBER;
2933 
2934 -- end hyau Bug 2852753
2935 
2936 BEGIN
2937 
2938     pa_debug.init_err_stack ('PA_TASK_PUB1.update_schedule_VERSION');
2939 
2940     IF (p_debug_mode = 'Y') THEN
2941       pa_debug.debug('PA_TASK_PUB1.update_SCHEDULE_VERSION begin');
2942     END IF;
2943 
2944     IF (p_commit = FND_API.G_TRUE) THEN
2945       savepoint update_schedule_version;
2946     END IF;
2947 
2948     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2949       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2950     END IF;
2951 
2952 
2953     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
2954       FND_MSG_PUB.initialize;
2955     END IF;
2956 
2957     -- Added for FP_M changes 3305199
2958 
2959     OPEN cur_proj_id;
2960     FETCH cur_proj_id INTO l_project_id;
2961     CLOSE cur_proj_id;
2962 
2963     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_Project_ID) = 'Y' Then
2964 
2965        Select a.Parent_Structure_Version_ID
2966        Into   l_Structure_Version_ID
2967        From   PA_Proj_Element_Versions a,  pa_proj_elem_ver_schedule b
2968        Where  a.Element_Version_ID = b.Element_Version_ID
2969        and    b.pev_schedule_id = p_pev_schedule_id;
2970 
2971        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
2972           p_structure_version_id => l_Structure_Version_ID
2973      ,p_dirty_flag           => 'Y'             --bug 3902282
2974      ,x_return_status        => x_return_status
2975      ,x_msg_count            => x_msg_count
2976      ,x_msg_data             => x_msg_data
2977        );
2978 
2979        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
2980          x_msg_count := FND_MSG_PUB.count_msg;
2981          If x_msg_count = 1 then
2982            pa_interface_utils_pub.get_messages
2983            (p_encoded        => FND_API.G_TRUE,
2984             p_msg_index      => 1,
2985             p_msg_count      => l_msg_count,
2986             p_msg_data       => l_msg_data,
2987             p_data           => l_data,
2988             p_msg_index_out  => l_msg_index_out);
2989             x_msg_data := l_data;
2990          End If;
2991          raise FND_API.G_EXC_ERROR;
2992        End If;
2993     End If;
2994     -- End of FP_M changes
2995 
2996 -- hyau Bug 2852753
2997       IF p_calling_module = 'SELF_SERVICE' THEN
2998 
2999         OPEN cur_proj_id;
3000         FETCH cur_proj_id INTO l_project_id;
3001         CLOSE cur_proj_id;
3002 
3003         OPEN get_product_code(l_project_id);
3004         FETCH get_product_code INTO l_pm_product_code;
3005         CLOSE get_product_code;
3006 
3007         If l_pm_product_code IS NOT NULL THEN
3008           -- check to see if the schedule dates are actually different
3009           OPEN cur_schedule_dates;
3010           FETCH cur_schedule_dates INTO l_cur_sch_start_date, l_cur_sch_end_date;
3011           CLOSE cur_schedule_dates;
3012 
3013           --Bug 3736889
3014 --          IF ((p_scheduled_start_date is not null) and  (p_scheduled_start_date - l_cur_sch_start_date <> 0 )) OR
3015 --             ((p_scheduled_end_date is not null) and (p_scheduled_end_date - l_cur_sch_end_date <> 0)) THEN
3016           IF ((p_scheduled_start_date is not null) and
3017           (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) and
3018           (p_scheduled_start_date - l_cur_sch_start_date <> 0 )) OR
3019              ((p_scheduled_end_date is not null) and
3020           (p_scheduled_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) and
3021           (p_scheduled_end_date - l_cur_sch_end_date <> 0)) THEN
3022 
3023             pa_pm_controls.Get_Project_actions_allowed
3024                   (P_PM_PRODUCT_CODE                => l_pm_product_code,
3025                    P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
3026                    P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
3027                    P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
3028                    P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
3029                    P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
3030                    P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
3031                    P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
3032                    P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
3033                    P_ADD_TASK_ALLOWED               => l_add_task_allowed,
3034                    P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
3035                    P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
3036                    P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
3037                    P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
3038                    P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
3039                    P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
3040                    P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
3041                    P_ERROR_CODE             => l_err_code,
3042                P_ERROR_STACK                    => l_err_stack,
3043            P_ERROR_STAGE                => l_err_stage );
3044 
3045             IF l_err_code <> 0 THEN
3046               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3047                                    p_msg_name       => l_err_stage);
3048             END IF;
3049         IF l_update_task_dates_allowed = 'N' THEN
3050                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3051                                      p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_DATES');
3052                 raise FND_API.G_EXC_ERROR;
3053             END IF;
3054           END IF;
3055         END IF;
3056       END IF;
3057 
3058 -- end hyau Bug 2852753
3059 
3060 
3061     --Lock row
3062     IF( p_validate_only <> FND_API.G_TRUE) THEN
3063       BEGIN
3064         select 'x' into l_dummy
3065         from PA_PROJ_ELEM_VER_SCHEDULE
3066         where pev_schedule_id = p_pev_schedule_id
3067         and record_version_number = p_record_version_number
3068         for update of record_version_number NOWAIT;
3069       EXCEPTION
3070         WHEN TIMEOUT_ON_RESOURCE THEN
3071           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3072                                p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
3073           l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
3074         WHEN NO_DATA_FOUND THEN
3075           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3076                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
3077           l_msg_data := 'PA_XC_RECORD_CHANGED';
3078         WHEN OTHERS THEN
3079           IF SQLCODE = -54 then
3080              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3081                                   p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
3082              l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
3083           ELSE
3084              raise;
3085           END IF;
3086       END;
3087     ELSE
3088       --check record_version_number
3089       BEGIN
3090         select 'x' into l_dummy
3091         from PA_PROJ_ELEM_VER_SCHEDULE
3092         where pev_schedule_id = p_pev_schedule_id
3093         and record_version_number = p_record_version_number;
3094       EXCEPTION
3095         WHEN NO_DATA_FOUND THEN
3096           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3097                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
3098           l_msg_data := 'PA_XC_RECORD_CHANGED';
3099         WHEN OTHERS THEN
3100           RAISE;
3101       END;
3102     END IF;
3103 
3104       l_msg_count := FND_MSG_PUB.count_msg;
3105 
3106       IF l_msg_count > 0 THEN
3107          x_msg_count := l_msg_count;
3108          x_return_status := 'E';
3109          RAISE  FND_API.G_EXC_ERROR;
3110       END IF;
3111 
3112 
3113     PA_TASK_PVT1.Update_Schedule_Version(
3114              p_api_version        => p_api_version
3115             ,p_init_msg_list          => p_init_msg_list
3116             ,p_commit               => p_commit
3117             ,p_validate_only          => p_validate_only
3118             ,p_validation_level => p_validation_level
3119             ,p_calling_module         => p_calling_module
3120             ,p_debug_mode         => p_debug_mode
3121             ,p_max_msg_count          => p_max_msg_count
3122             ,p_pev_schedule_id  => p_pev_schedule_id
3123             ,p_calendar_id        => p_calendar_id
3124             ,p_scheduled_start_date => p_scheduled_start_date
3125             ,p_scheduled_end_date   => p_scheduled_end_date
3126             ,p_obligation_start_date => p_obligation_start_date
3127             ,p_obligation_end_date  => p_obligation_end_date
3128             ,p_actual_start_date    => p_actual_start_date
3129             ,p_actual_finish_date   => p_actual_finish_date
3130             ,p_estimate_start_date  => p_estimate_start_date
3131             ,p_estimate_finish_date => p_estimate_finish_date
3132             ,p_duration             => p_duration
3133             ,p_early_start_date => p_early_start_date
3134             ,p_early_end_date         => p_early_end_date
3135             ,p_late_start_date  => p_late_start_date
3136             ,p_late_end_date          => p_late_end_date
3137             ,p_milestone_flag         => p_milestone_flag
3138             ,p_critical_flag          => p_critical_flag
3139             ,p_WQ_PLANNED_QUANTITY    => p_WQ_PLANNED_QUANTITY
3140             ,p_PLANNED_EFFORT         => p_PLANNED_EFFORT
3141             ,p_PLANNED_EQUIP_EFFORT   => p_PLANNED_EQUIP_EFFORT
3142             ,p_def_sch_tool_tsk_type_code => p_def_sch_tool_tsk_type_code
3143             ,p_constraint_type_code       => p_constraint_type_code
3144             ,p_constraint_date            => p_constraint_date
3145             ,p_free_slack                 => p_free_slack
3146             ,p_total_slack                => p_total_slack
3147             ,p_effort_driven_flag         => p_effort_driven_flag
3148             ,p_level_assignments_flag     => p_level_assignments_flag
3149             ,p_record_version_number => p_record_version_number
3150             ,p_ext_act_duration           => p_ext_act_duration
3151             ,p_ext_remain_duration        => p_ext_remain_duration
3152             ,p_ext_sch_duration           => p_ext_sch_duration
3153             ,p_attribute_category               => p_attribute_category
3154             ,p_attribute1                       => p_attribute1
3155             ,p_attribute2                       => p_attribute2
3156             ,p_attribute3                       => p_attribute3
3157             ,p_attribute4                       => p_attribute4
3158             ,p_attribute5                       => p_attribute5
3159             ,p_attribute6                       => p_attribute6
3160             ,p_attribute7                       => p_attribute7
3161             ,p_attribute8                       => p_attribute8
3162             ,p_attribute9                       => p_attribute9
3163             ,p_attribute10                    => p_attribute10
3164             ,p_attribute11                    => p_attribute11
3165             ,p_attribute12                    => p_attribute12
3166             ,p_attribute13                    => p_attribute13
3167             ,p_attribute14                    => p_attribute14
3168             ,p_attribute15                    => p_attribute15
3169             ,x_return_status          => l_return_status
3170             ,x_msg_count          => x_msg_count
3171             ,x_msg_data             => x_msg_data
3172             );
3173 
3174     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3175       x_msg_count := FND_MSG_PUB.count_msg;
3176       IF x_msg_count = 1 then
3177          pa_interface_utils_pub.get_messages
3178          (p_encoded        => FND_API.G_TRUE,
3179           p_msg_index      => 1,
3180           p_msg_count      => l_msg_count,
3181           p_msg_data       => l_msg_data,
3182           p_data           => l_data,
3183           p_msg_index_out  => l_msg_index_out);
3184          x_msg_data := l_data;
3185       END IF;
3186       raise FND_API.G_EXC_ERROR;
3187     END IF;
3188 
3189     x_return_status := FND_API.G_RET_STS_SUCCESS;
3190 
3191     IF (p_commit = FND_API.G_TRUE) THEN
3192       COMMIT;
3193     END IF;
3194 
3195     IF (p_debug_mode = 'Y') THEN
3196       pa_debug.debug('PA_TASK_PUB1.UPDATE_SCHEDULE_VERSION END');
3197     END IF;
3198 EXCEPTION
3199     when FND_API.G_EXC_ERROR then
3200       if p_commit = FND_API.G_TRUE then
3201          rollback to update_schedule_version;
3202       end if;
3203       x_return_status := FND_API.G_RET_STS_ERROR;
3204     when FND_API.G_EXC_UNEXPECTED_ERROR then
3205       if p_commit = FND_API.G_TRUE then
3206          rollback to update_schedule_version;
3207       end if;
3208       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3209       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
3210                               p_procedure_name => 'UPDATE_SCHEDULE_VERSION',
3211                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3212     when OTHERS then
3213       if p_commit = FND_API.G_TRUE then
3214          rollback to update_schedule_version;
3215       end if;
3216       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3217       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
3218                               p_procedure_name => 'UPDATE_SCHEDULE_VERSION',
3219                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3220       raise;
3221 END Update_Schedule_Version;
3222 
3223 -- API name                      : Copy_Task
3224 -- Type                          : Public procedure
3225 -- Pre-reqs                      : None
3226 -- Return Value                  : N/A
3227 -- Prameters
3228 -- p_api_version          IN    NUMBER  N   Not Null    1.0
3229 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
3230 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
3231 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
3232 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
3233 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
3234 -- p_debug_mode       IN    VARCHAR2    N   Null    N
3235 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3236 -- p_src_project_id IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3237 -- p_src_project_name   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3238 -- p_src_structre_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3239 -- p_src_structure_name IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3240 -- p_src_structure_version_id   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3241 -- p_src_structure_version_name IN  VARCHAR2    N   null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3242 -- p_src_task_version_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3243 -- p_src_task_name  IN  VARCHAR2    N   null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3244 -- p_dest_structure_id      IN NUMBER N null   PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3245 -- p_dest_structure_version_id  IN  NUMBER  N   NOT Null
3246 -- p_dest_task_version_id   IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3247 -- p_dest_project_id        IN  NUMBER :=   PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3248 -- p_task_unpub_ver_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3249 -- p_fin_task_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3250 -- p_sharing_enabled      IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3251 -- p_versioning_enabled   IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3252 -- p_copy_option    IN  VARCHAR2    N   NOT NULL
3253 -- p_peer_or_sub    IN  VARCHAR2    N   Not Null
3254 -- p_called_from_bulk_api IN VARCHAR2 N NULL
3255 -- x_return_status  OUT     VARCHAR2    N   Null
3256 -- x_msg_count        OUT   NUMBER  N   Null
3257 -- x_msg_data         OUT   VARCHAR2    N   Null
3258 --
3259 --  History
3260 --
3261 --  23-OCT-01   Majid Ansari             -Created --
3262 --
3263 
3264 PROCEDURE Copy_Task(
3265  p_api_version        IN    NUMBER  :=1.0,
3266  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
3267  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
3268  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
3269  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
3270  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
3271  p_debug_mode         IN    VARCHAR2    :='N',
3272  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3273  p_src_project_id         IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3274  p_src_project_name IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3275  p_src_structure_id IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3276  p_src_structure_name   IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3277  p_src_structure_version_id IN NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3278  p_src_structure_version_name   IN  VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3279  p_src_task_version_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3280  p_src_task_name          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3281  p_dest_structure_id      IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,  -- 4201927
3282  p_dest_structure_version_id    IN  NUMBER,
3283  p_dest_task_version_id IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3284  p_dest_project_id        IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,  -- 4201927
3285  p_task_unpub_ver_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- 4201927
3286  p_fin_task_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3287  p_sharing_enabled      IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3288  p_versioning_enabled   IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3289  p_copy_external_flag   IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3290  p_called_from_api      IN    VARCHAR2    := 'ABCD',
3291  p_copy_option        IN    VARCHAR2,
3292  p_peer_or_sub        IN    VARCHAR2,
3293  p_prefix               IN    VARCHAR2,
3294  -- Added for FP_M changes. Refer to tracking Bug 3305199
3295  p_structure_type              IN              VARCHAR2        :='WORKPLAN',
3296  p_cp_dependency_flag          IN              VARCHAR2        :='N',
3297  p_cp_deliverable_asso_flag    IN              VARCHAR2        :='N',
3298  p_cp_tk_assignments_flag      IN              VARCHAR2        :='N',
3299  p_cp_people_flag              IN              VARCHAR2        :='N',
3300  p_cp_financial_elem_flag      IN              VARCHAR2        :='N',
3301  p_cp_material_items_flag      IN              VARCHAR2        :='N',
3302  p_cp_equipment_flag           IN              VARCHAR2        :='N',
3303  -- End of FP_M changes
3304  p_called_from_bulk_api        IN              VARCHAR2        :='N',  -- 4201927
3305  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
3306  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
3307  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3308 ) IS
3309    l_api_name                      CONSTANT VARCHAR(30) := 'COPY_TASK';
3310    l_api_version                   CONSTANT NUMBER      := 1.0;
3311 
3312    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
3313    l_return_status                 VARCHAR2(1);
3314    l_msg_count                     NUMBER;
3315    l_msg_data                      VARCHAR2(2000);   --bug 3637956
3316    l_data                          VARCHAR2(2000);   --bug 3637956
3317    l_msg_index_out                 NUMBER;
3318    l_error_msg_code                     VARCHAR2(250);
3319 
3320    l_src_project_id       NUMBER;
3321    l_src_structure_id         NUMBER;
3322    l_src_structure_version_id   NUMBER;
3323    l_src_task_version_id    NUMBER;
3324 
3325 -- hyau Bug 2852753
3326    l_delete_project_allowed      VARCHAR2(1);
3327    l_update_proj_num_allowed      VARCHAR2(1);
3328    l_update_proj_name_allowed    VARCHAR2(1);
3329    l_update_proj_desc_allowed    VARCHAR2(1);
3330    l_update_proj_dates_allowed    VARCHAR2(1);
3331    l_update_proj_status_allowed  VARCHAR2(1);
3332    l_update_proj_manager_allowed  VARCHAR2(1);
3333    l_update_proj_org_allowed      VARCHAR2(1);
3334    l_add_task_allowed            VARCHAR2(1);
3335    l_delete_task_allowed          VARCHAR2(1);
3336    l_update_task_num_allowed      VARCHAR2(1);
3337    l_update_task_name_allowed    VARCHAR2(1);
3338    l_update_task_dates_allowed    VARCHAR2(1);
3339    l_update_task_desc_allowed    VARCHAR2(1);
3340    l_update_parent_task_allowed  VARCHAR2(1);
3341    l_update_task_org_allowed      VARCHAR2(1);
3342 
3343    l_err_code         NUMBER        := 0;
3344    l_err_stack        VARCHAR2(200) := NULL;
3345    l_err_stage        VARCHAR2(200) := NULL;
3346 
3347    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
3348 
3349   ----------------------------------- FP_M changes : Begin
3350   -- Refer to tracking bug 3305199
3351     /* Bug #: 3305199 SMukka                                                         */
3352     /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3353     /* l_Old_Task_Versions_Tab        PA_PLSQL_DATATYPES.IdTabTyp;                   */
3354     /* l_New_Task_Versions_Tab        PA_PLSQL_DATATYPES.IdTabTyp;                   */
3355     l_Old_Task_Versions_Tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3356     l_New_Task_Versions_Tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3357     Rec_Count                      NUMBER;
3358   ----------------------------------- FP_M changes : End
3359 
3360    CURSOR get_product_code ( c_project_id NUMBER ) IS
3361    SELECT pm_product_code
3362    FROM PA_PROJECTS_ALL
3363    WHERE project_id = c_project_id;
3364 
3365  -- end hyau Bug 2852753
3366 
3367 --hsiu
3368 --added for advanced structure - versioning
3369     l_versioned    VARCHAR2(1) := 'N';
3370     l_shared       VARCHAR2(1) := 'N';
3371 --end changes
3372 
3373 --hsiu
3374 --added for task weighing
3375     CURSOR get_cur_task_ver_weighting(c_ver_id NUMBER) IS
3376      select WEIGHTING_PERCENTAGE
3377        from pa_object_relationships
3378       where object_id_to1 = c_ver_id
3379         and object_type_to = 'PA_TASKS'
3380         and relationship_type = 'S';
3381 --end changes
3382 
3383 /* Bug 2680486 -- Performance changes -- Selected project_id also in the following cursor, which will
3384                   be used in other cursors. Also  Restructured it to avoid  Non-mergable view issue */
3385 
3386    CURSOR cur_obj_rel( x_element_version_id NUMBER )
3387    IS
3388      SELECT b.element_version_id task_version_id, b.display_sequence display_sequence, b.proj_element_id,
3389             b.parent_Structure_version_id parent_Structure_version_id, b.wbs_level wbs_level,
3390         b.project_id,
3391             b.attribute_category,
3392             b.attribute1,
3393             b.attribute2,
3394             b.attribute3,
3395             b.attribute4,
3396             b.attribute5,
3397             b.attribute6,
3398             b.attribute7,
3399             b.attribute8,
3400             b.attribute9,
3401             b.attribute10,
3402             b.attribute11,
3403             b.attribute12,
3404             b.attribute13,
3405             b.attribute14,
3406             b.attribute15,
3407         Financial_Task_Flag     -- FP_M changes 3305199 Bhumesh
3408       FROM  pa_proj_element_versions b,
3409             pa_proj_elements c
3410      WHERE b.proj_element_id = c.proj_element_id
3411        AND c.link_task_flag = 'N'
3412        AND p_copy_option IN ( 'PA_TASK_SUBTASK', 'PA_ENTIRE_VERSION' )
3413 /*
3414         -- Added for FP_M changes : Bug 3305199
3415     and ( p_structure_type = 'WORKPLAN' OR
3416           ( p_structure_type = 'FINANCIAL' and Financial_Task_Flag = 'Y')
3417         )
3418     -- End of FP_M changes : Bug 3305199
3419 */
3420        AND b.element_version_id IN ( SELECT object_id_to1
3421               FROM pa_object_relationships
3422              WHERE relationship_type = 'S'
3423         START WITH object_id_from1 = x_element_version_id AND relationship_type = 'S'
3424         CONNECT BY object_id_from1 = PRIOR object_id_to1 AND relationship_type = prior relationship_type AND relationship_type = 'S' )
3425      UNION
3426     SELECT  element_version_id task_version_id, display_sequence display_sequence, ppev.proj_element_id proj_element_id,
3427            parent_Structure_version_id parent_Structure_version_id, wbs_level wbs_level,
3428        project_id,
3429             attribute_category,
3430             attribute1,
3431             attribute2,
3432             attribute3,
3433             attribute4,
3434             attribute5,
3435             attribute6,
3436             attribute7,
3437             attribute8,
3438             attribute9,
3439             attribute10,
3440             attribute11,
3441             attribute12,
3442             attribute13,
3443             attribute14,
3444             attribute15,
3445         Financial_Task_Flag     -- FP_M changes 3305199 Bhumesh
3446       FROM pa_proj_element_versions ppev
3447      WHERE ppev.element_version_id = p_src_task_version_id
3448 /* not required any more
3449         -- Added for FP_M changes : Bug 3305199
3450     and ( p_structure_type = 'WORKPLAN' OR
3451           ( p_structure_type = 'FINANCIAL' and Financial_Task_Flag = 'Y')
3452         )
3453     -- End of FP_M changes : Bug 3305199
3454 */
3455        AND p_copy_option IN( 'PA_TASK_ONLY', 'PA_TASK_SUBTASK' )  --here PA_TASK_SUBTASK is included in the in list to
3456                                                                   --include the task version id since it will not have any peer
3457                                                                   --relationship record in object rel table.
3458      ORDER BY 2;
3459 
3460   CURSOR cur_proj_elems( p_proj_element_id NUMBER )
3461   IS
3462     SELECT
3463           PROJ_ELEMENT_ID
3464          ,PROJECT_ID
3465          ,OBJECT_TYPE
3466          ,ELEMENT_NUMBER
3467          ,NAME
3468          ,DESCRIPTION
3469          ,STATUS_CODE
3470          ,WF_STATUS_CODE
3471          ,PM_SOURCE_CODE
3472          ,PM_SOURCE_REFERENCE
3473          ,CLOSED_DATE
3474          ,LOCATION_ID
3475          ,MANAGER_PERSON_ID
3476          ,CARRYING_OUT_ORGANIZATION_ID
3477          ,TYPE_ID
3478          ,PRIORITY_CODE
3479          ,INC_PROJ_PROGRESS_FLAG
3480          ,RECORD_VERSION_NUMBER
3481          ,REQUEST_ID
3482          ,PROGRAM_APPLICATION_ID
3483          ,PROGRAM_ID
3484          ,PROGRAM_UPDATE_DATE
3485          ,ATTRIBUTE_CATEGORY
3486          ,ATTRIBUTE1
3487          ,ATTRIBUTE2
3488          ,ATTRIBUTE3
3489          ,ATTRIBUTE4
3490          ,ATTRIBUTE5
3491          ,ATTRIBUTE6
3492          ,ATTRIBUTE7
3493          ,ATTRIBUTE8
3494          ,ATTRIBUTE9
3495          ,ATTRIBUTE10
3496          ,ATTRIBUTE11
3497          ,ATTRIBUTE12
3498          ,ATTRIBUTE13
3499          ,ATTRIBUTE14
3500          ,ATTRIBUTE15
3501          ,WQ_ITEM_CODE
3502          ,WQ_UOM_CODE
3503          ,WQ_ACTUAL_ENTRY_CODE
3504          ,TASK_PROGRESS_ENTRY_PAGE_ID
3505          ,PARENT_STRUCTURE_ID
3506          ,PHASE_CODE
3507          ,PHASE_VERSION_ID
3508          ,WF_ITEM_TYPE
3509          ,WF_PROCESS
3510          ,WF_START_LEAD_DAYS
3511          ,BASE_PERCENT_COMP_DERIV_CODE
3512       FROM pa_proj_elements
3513      WHERE proj_element_id = p_proj_element_id;
3514 
3515 cur_proj_elems_rec cur_proj_elems%ROWTYPE;
3516 
3517 
3518 /* Bug 2680486 -- Performance changes -- Commented the following cursor definition. Restructured it to
3519                                         avoid  Non-mergable view issue*/
3520 
3521 /* CURSOR cur_rev_parent_task( x_child_task_id NUMBER, x_wbs_level NUMBER )
3522  IS
3523    SELECT a.object_id_from1 parent_task_id
3524     FROM( SELECT object_id_from1
3525             FROM pa_object_relationships
3526            WHERE relationship_type = 'S'
3527       START WITH OBJECT_ID_TO1 = x_child_task_id
3528 --hsiu: bug 2669388
3529 --      START WITH object_id_from1 = x_child_task_id
3530       --traverse reverse
3531       CONNECT BY object_id_to1 = PRIOR object_id_from1 AND relationship_type = 'S' ) a, pa_proj_element_versions b
3532    WHERE a.object_id_from1 = b.element_version_id
3533      AND b.wbs_level = x_wbs_level;
3534 */
3535 
3536  CURSOR cur_rev_parent_task( x_child_task_id NUMBER, x_wbs_level NUMBER )
3537  IS
3538    SELECT b.element_version_id parent_task_id
3539     FROM  pa_proj_element_versions b
3540    WHERE  b.wbs_level = x_wbs_level
3541      AND b.element_version_id IN ( SELECT object_id_from1
3542             FROM pa_object_relationships
3543            WHERE relationship_type = 'S'
3544       START WITH OBJECT_ID_TO1 = x_child_task_id
3545 --hsiu: bug 2669388
3546 --      START WITH object_id_from1 = x_child_task_id
3547       --traverse reverse
3548       CONNECT BY object_id_to1 = PRIOR object_id_from1 AND relationship_type = 'S'
3549              AND relationship_type = PRIOR relationship_type) ;
3550 
3551 
3552 /* Bug 2680486 -- Performance changes -- Passing project_id also to use the index in the following cursor */
3553 
3554  CURSOR cur_struc_id( x_structure_version_id NUMBER, x_project_id NUMBER )
3555  IS
3556    SELECT proj_element_id
3557      FROM pa_proj_elem_ver_structure
3558     WHERE element_version_id = x_structure_version_id
3559     AND project_id = x_project_id;
3560 
3561 
3562  CURSOR cur_struc_type( x_structure_id NUMBER )
3563  IS
3564    SELECT 'Y'
3565      FROM pa_proj_structure_types ppst
3566          ,pa_structure_types pst
3567     WHERE ppst.proj_element_id = x_structure_id
3568       AND ppst.structure_type_id = pst.structure_type_id
3569       AND pst.structure_type_class_code = 'WORKPLAN';
3570 
3571     CURSOR cur_struc_type2( c_structure_id NUMBER )
3572     IS
3573       SELECT 'Y'
3574         FROM pa_proj_structure_types ppst
3575             ,pa_structure_types pst
3576        WHERE ppst.proj_element_id = c_structure_id
3577          AND ppst.structure_type_id = pst.structure_type_id
3578          AND pst.structure_type_class_code IN( 'FINANCIAL' );
3579 
3580 /* Bug 2623999 -- Commented the following cursor def'n and added a new one below it.
3581                   We should check a structure version is and not structure id to
3582           find out a structure version is publised or not */
3583 /*    CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
3584       select 'Y'
3585         from pa_proj_elem_ver_structure
3586        where proj_element_id = c_structure_id
3587          AND project_id = c_project_id
3588          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3589 */
3590 
3591     --bug 3074706
3592     --added project_id
3593     CURSOR cur_pub_versions( c_structure_version_id NUMBER, c_project_id NUMBER ) is
3594       select 'Y'
3595         from pa_proj_elem_ver_structure
3596        where element_version_id = c_structure_version_id
3597          and project_id = c_project_id
3598          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3599     --end bug 3074706
3600 
3601    CURSOR cur_dest_proj_id
3602    IS
3603      SELECT project_id
3604        FROM pa_proj_element_versions
3605       WHERE element_version_id = p_dest_task_version_id;
3606 
3607    /* Added the Cursor For Bug #3573143*/
3608    CURSOR cur_task_id (c_element_version_id IN NUMBER, c_project_id IN NUMBER) IS
3609      SELECT proj_element_id
3610      FROM pa_proj_element_versions
3611      where element_version_id = c_element_version_id
3612      AND project_id = c_project_id;
3613    l_cur_task_id cur_task_id%ROWTYPE;
3614    /* Ended Bug 3573143*/
3615 
3616    -- xxlu added task DFF attributes
3617    CURSOR cur_task_attr (c_task_id IN NUMBER) IS
3618      SELECT *
3619      FROM pa_tasks
3620      WHERE task_id = c_task_id;
3621    l_cur_task_attr cur_task_attr%ROWTYPE;
3622    -- end xxlu changes
3623 
3624  l_dest_project_id      NUMBER;
3625 
3626  l_dummy_char        VARCHAR2(1);
3627  l_task_number       VARCHAR2(100);
3628  l_task_name         VARCHAR2(240);
3629  l_structure_id      NUMBER;
3630  l_project_id        NUMBER;
3631  l_published_version VARCHAR2(1);
3632  l_copy_node_flag    VARCHAR2(1);
3633  l_ref_task_id       NUMBER;
3634  l_ref_project_id    NUMBER;
3635 
3636  l_old_wbs_level     NUMBER;
3637 
3638  l_ref_task_version_id  NUMBER;
3639  l_peer_or_sub          VARCHAR2(4);
3640  l_task_version_id      NUMBER;
3641  l_pev_schedule_id      NUMBER;
3642  l_element_version_id   NUMBER;
3643 
3644 --Hsiu added for date rollup
3645 --bug 3991067
3646 --  l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3647   l_tasks_ver_ids PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
3648   l_task_cnt NUMBER := 0;
3649 --end bug 3991067
3650 
3651 --hsiu added for task weighting
3652   l_weighting           NUMBER(17,2);
3653 
3654 --hsiu added for task status rollup
3655   l_rollup_task_id NUMBER;
3656 
3657   cursor sub_task_exists(l_parent_task_version_id NUMBER) IS
3658     select '1'
3659       from pa_object_relationships
3660      where object_id_from1 = l_parent_task_version_id
3661        and object_type_from IN ('PA_TASKS','PA_STRUCTURES')
3662        and object_type_to IN ('PA_TASKS','PA_STRUCTURES')
3663        and relationship_type = 'S';
3664 
3665 --hsiu added for task version status
3666   CURSOR cur_proj_is_template(c_project_id NUMBER)
3667   IS     select 'Y'
3668            from pa_projects_all
3669           where project_id = c_project_id
3670             and template_flag = 'Y';
3671   l_template_flag VARCHAR2(1);
3672 
3673   l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
3674 --end hsiu changes
3675 
3676   -- xxlu added for DFF attributes for calling create_schedule_version
3677   CURSOR cur_proj_elem_ver_sch(c_element_version_id NUMBER, c_project_id NUMBER) IS
3678   SELECT * FROM pa_proj_elem_ver_schedule
3679   WHERE project_id = c_project_id
3680   AND element_version_id = c_element_version_id;
3681 
3682   v_cur_sch  cur_proj_elem_ver_sch%ROWTYPE;
3683 
3684   -- end xxlu changes
3685 
3686 --hsiu added for task status
3687   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
3688     select object_id_from1
3689       from pa_object_relationships
3690      where object_id_to1 = c_elem_ver_id
3691        and object_type_to = 'PA_TASKS'
3692        and relationship_type = 'S';
3693   l_parent_ver_id NUMBER;
3694 
3695 --hsiu added for bug 2669388
3696   CURSOR get_ref_tk_wbs(c_element_version_id NUMBER) IS
3697     select WBS_LEVEL
3698       from pa_proj_element_versions
3699      where element_version_id = c_element_version_id;
3700 
3701   l_ref_tk_wbs_level    NUMBER;
3702   l_src_tasks_found boolean := false; --Bug2741989
3703 
3704   --3035902: process update flag changes
3705   l_wp_process_flag VARCHAR2(1);
3706   l_wp_type         VARCHAR2(1);
3707 
3708   l_src_wp_type     VARCHAR2(1); -- 4223490
3709 
3710   l_weighting_basis_code VARCHAR2(30);
3711   --3035902: end process update flag changes
3712 
3713   /* Included for Bug 4201927*/
3714   l_ver_enabled   VARCHAR2(1);
3715   l_copy_external_flag  VARCHAR2(1);
3716 
3717 --bug 3301192 fin plan
3718 /* Bug #: 3305199 SMukka                                                         */
3719 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3720 /* l_old_task_ver_ids          PA_PLSQL_DATATYPES.IdTabTyp;                      */
3721 /* l_new_task_ver_ids          PA_PLSQL_DATATYPES.IdTabTyp;                      */
3722 /* l_old_task_ids              PA_PLSQL_DATATYPES.IdTabTyp;                      */
3723 /* l_new_task_ids              PA_PLSQL_DATATYPES.IdTabTyp;                      */
3724 
3725 l_old_task_ver_ids          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3726 l_new_task_ver_ids          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3727 
3728 l_old_task_ids              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3729 l_new_task_ids              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3730 
3731 l_lowest_task_flag1         VARCHAR2(1);
3732 l_lowest_task_flag2         VARCHAR2(1);
3733 l_fin_task_flag             VARCHAR2(1);  -- fin html changes
3734 --bug 3301192 fin plan
3735 
3736 
3737     -- for bug# 3905123 , added cursor and local variable
3738 
3739     CURSOR cur_is_top_task( task_ver_id NUMBER, struct_ver_id number)
3740     IS
3741            SELECT
3742                     'x'
3743            FROM
3744                     pa_object_relationships obj
3745            WHERE
3746                     obj.object_id_to1 = task_ver_id
3747                 AND obj.object_id_from1 = struct_ver_id
3748                 AND object_type_from = 'PA_STRUCTURES'
3749                 AND object_type_to = 'PA_TASKS'
3750                 AND relationship_type = 'S'
3751                 AND relationship_subtype = 'STRUCTURE_TO_TASK';
3752 
3753     is_top_task_in_dest varchar2(1) := 'N';
3754     is_top_task   varchar2(1) := NULL;
3755 
3756     -- 3905123 end
3757 
3758 BEGIN
3759     pa_debug.init_err_stack ('PA_TASK_PUB1.COPY_TASK');
3760 
3761     IF (p_debug_mode = 'Y') THEN
3762       pa_debug.debug('PA_TASK_PUB1.COPY_TASK begin');
3763     END IF;
3764 
3765     IF (p_commit = FND_API.G_TRUE) THEN
3766       savepoint copy_task;
3767     END IF;
3768 
3769     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
3770       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3771     END IF;
3772 
3773     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
3774       FND_MSG_PUB.initialize;
3775     END IF;
3776 
3777     --bug 4075697  copy_task
3778     PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
3779     --bug 4075697
3780 
3781     --3035902: process update flag changes
3782     l_wp_process_flag := 'N';
3783     --3035902: end process update flag changes
3784 
3785   -- Added for FP_M changes. Bug 3305199 : Bhumesh  xxx
3786 
3787    If p_called_from_bulk_api = 'N' THEN -- 4201927
3788 
3789   OPEN cur_dest_proj_id;
3790   FETCH cur_dest_proj_id INTO l_dest_project_id;
3791   CLOSE cur_dest_proj_id;
3792 
3793    ELSE --If called from Bulk API
3794         l_dest_project_id := p_dest_project_id ;
3795    END IF;
3796 /*  If p_structure_type = 'WORKPLAN' and
3797      PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id)
3798         IN ('SHARE_PARTIAL')
3799   Then
3800 
3801     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
3802         p_task_version_id       =>
3803       , p_ref_task_version_id   => p_dest_task_version_id
3804       , x_return_status         => x_return_status
3805       , x_msg_count             => x_msg_count
3806       , x_msg_data              => x_msg_data
3807       , x_error_msg_code        => l_error_msg_code);
3808 
3809     IF (x_return_status <> 'Y') THEN
3810        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3811                 p_msg_name       => l_error_msg_code);
3812       raise FND_API.G_EXC_ERROR;
3813     End If;
3814   End If;
3815 */  --moved below
3816 
3817   -- End of FP_M changes
3818 
3819 -- hyau Bug 2852753
3820       IF p_calling_module = 'SELF_SERVICE' THEN
3821 
3822         --3035902: process update flag changes
3823         l_weighting_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_dest_project_id);
3824         l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_dest_structure_version_id, 'WORKPLAN');
3825         --3035902: end process update flag changes
3826 
3827 
3828         OPEN get_product_code(l_dest_project_id);
3829         FETCH get_product_code INTO l_pm_product_code;
3830         CLOSE get_product_code;
3831 
3832       If p_called_from_bulk_api = 'N' THEN
3833 
3834         If l_pm_product_code IS NOT NULL THEN
3835           pa_pm_controls.Get_Project_actions_allowed
3836                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
3837                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
3838                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
3839                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
3840                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
3841                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
3842                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
3843                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
3844                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
3845                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
3846                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
3847                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
3848                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
3849                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
3850                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
3851                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
3852                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
3853                  P_ERROR_CODE                 => l_err_code,
3854          P_ERROR_STACK                    => l_err_stack,
3855          P_ERROR_STAGE                => l_err_stage );
3856 
3857           IF l_err_code <> 0 THEN
3858             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3859                                  p_msg_name       => l_err_stage);
3860           END IF;
3861       IF l_add_task_allowed = 'N' THEN
3862               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3863                                    p_msg_name       => 'PA_PR_PM_CANNOT_COPY');
3864               raise FND_API.G_EXC_ERROR;
3865           END IF;
3866         END IF;
3867 
3868       End IF; -- End p_called_from_bulk_Api is N
3869       END IF;
3870 
3871 -- end hyau Bug 2852753
3872 
3873 ----dbms_output.put_line( 'Before Id to name conv.' );
3874 
3875 /* Performance Bug 4201927 : Commenting as this API not called in Move Task version Context
3876 IF p_called_from_api <> 'MOVE_TASK_VERSION'
3877 THEN
3878 */
3879  --do not do any validations if called from Move task version API.
3880     IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
3881 
3882 
3883      If p_called_from_bulk_api = 'N' THEN
3884 
3885       IF ((p_src_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3886           (p_src_project_name IS NOT NULL)) OR
3887          ((p_src_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
3888           (p_src_project_id IS NOT NULL)) THEN
3889         --Call Check API.
3890           PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
3891             p_project_name   => p_src_project_name,
3892             p_project_id     => p_src_project_id,
3893             x_project_id     => l_src_project_id,
3894             x_return_status  => l_return_status,
3895             x_error_msg_code => l_error_msg_code);
3896            --dbms_output.put_line('after proj name 2 id conv: '||l_src_project_id);
3897            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3898               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3899                                    p_msg_name => l_error_msg_code);
3900            END IF;
3901        END IF;
3902 
3903       IF ((p_src_structure_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3904           (p_src_structure_name IS NOT NULL)) OR
3905          ((p_src_structure_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
3906           (p_src_structure_id IS NOT NULL)) THEN
3907         --Call Check API.
3908           PA_PROJECT_STRUCTURE_UTILS.Structure_Name_Or_Id
3909                            (
3910                               p_project_id             => l_src_project_id
3911                              ,p_structure_name         => p_src_structure_name
3912                              ,p_structure_id           => p_src_structure_id
3913                              ,x_structure_id           => l_src_structure_id
3914                              ,x_return_status          => l_return_status
3915                              ,x_error_message_code     => l_error_msg_code
3916                             );
3917 --dbms_output.put_line('after struct name 2 id conv: '||l_src_structure_id);
3918            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3919               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3920                                    p_msg_name => l_error_msg_code);
3921            END IF;
3922       END IF; --End Name-Id Conversion
3923 
3924 --dbms_output.put_line( 'Before Id to name conv. Structure_Version_Name_Or_Id' );
3925       IF ((p_src_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3926           (p_src_structure_version_name IS NOT NULL)) OR
3927          ((p_src_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
3928           (p_src_structure_version_id IS NOT NULL)) THEN
3929         --Call Check API.
3930            l_src_structure_version_id := p_src_structure_version_id;
3931           PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id
3932                                 (
3933                               p_structure_id            => l_src_structure_id
3934                              ,p_structure_version_name  => p_src_structure_version_name
3935                              ,p_structure_version_id    => p_src_structure_version_id
3936                              ,x_structure_version_id    => l_src_structure_version_id
3937                              ,x_return_status           => l_return_status
3938                              ,x_error_message_code      => l_error_msg_code
3939                             );
3940 --dbms_output.put_line('after struct ver name 2 id conv: '||l_src_structure_version_id);
3941            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3942               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3943                                    p_msg_name => l_error_msg_code);
3944            END IF;
3945 
3946       END IF; --End Name-Id Conversion
3947 
3948        /*Task Name to ID Conversion : This is not needed in case of call from SS (i.e) Copy Bulk API */
3949        IF ((p_src_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
3950           (p_src_task_name IS NOT NULL)) OR
3951          ((p_src_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
3952           (p_src_task_version_id IS NOT NULL)) THEN
3953         --Call Check API.
3954 
3955 --dbms_output.put_line( 'Before Id to name conv. task_Ver_Name_Or_Id' );
3956 
3957           PA_PROJ_ELEMENTS_UTILS.task_Ver_Name_Or_Id
3958                            (
3959                               p_task_name              => p_src_task_name
3960                              ,p_task_version_id        => p_src_task_version_id
3961                              ,p_structure_version_id   => l_src_structure_version_id
3962                              ,x_task_version_id        => l_src_task_version_id
3963                              ,x_return_status          => l_return_status
3964                              ,x_error_msg_code     => l_error_msg_code
3965                             );
3966            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3967               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3968                                    p_msg_name => l_error_msg_code);
3969            END IF;
3970       END IF; --End Name-Id Conversion
3971 
3972  /*4201927 : Moved this code outside the Loop*/
3973 -- bug 3301192  financial HTML changes
3974         IF p_structure_type = 'WORKPLAN'
3975         THEN
3976            IF
3977 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) =
3978 'SHARE_FULL'
3979            THEN
3980               l_fin_task_flag := 'Y';
3981            ELSE
3982               l_fin_task_flag := 'N';
3983            END IF;
3984         ELSE
3985             l_fin_task_flag := 'Y';
3986         END IF;
3987   -- bug 3301192  financial HTML changes
3988   /*4201927 : Moved this code outside the Loop*/
3989 
3990       /*4201927 Start <<B>> */
3991        OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id );
3992        FETCH cur_struc_id INTO l_structure_id;--This is Destination StructureID
3993        CLOSE cur_struc_id;
3994 
3995 
3996        OPEN cur_proj_is_template(l_dest_project_id);
3997        FETCH cur_proj_is_template into l_template_flag;
3998        IF cur_proj_is_template%NOTFOUND THEN
3999             l_template_flag := 'N';
4000        END IF;
4001        CLOSE cur_proj_is_template;
4002 
4003        /*4201927 : Moved this code outside the Loop*/
4004        l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
4005                                                   l_dest_project_id);
4006        /*4201927 : Moved this code outside the Loop*/
4007 
4008        /*4201927 : Deriving whether versioned or not only once*/
4009        l_ver_enabled :=
4010 PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id);
4011 
4012        /*4201927 : <<C>> Value for Copy External Flag*/
4013        IF p_src_project_id = l_dest_project_id
4014        THEN
4015            l_copy_external_flag := 'N';
4016        ELSE
4017            l_copy_external_flag := 'Y';
4018        ENd IF;
4019 
4020        --hsiu added for task version status changes
4021        IF (l_template_flag = 'N') THEN
4022           --check if structure is shared
4023           --  if shared, check if versioned
4024           --    'WORKING' if versioned; 'PUBLISHED' if not
4025           --  if split, check if 'FINANCIAL'
4026           --    'PUBLISHED' if financial
4027           --    check if versioned
4028           --    'WORKING' if versioend; 'PUBLISHED' if not
4029           IF ('Y' = l_shared) THEN
4030             IF ('Y' = l_ver_enabled) THEN
4031               l_task_unpub_ver_status_code := 'WORKING';
4032             ELSE
4033               l_task_unpub_ver_status_code := 'PUBLISHED';
4034             END IF;
4035           ELSE --split
4036             IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id,'FINANCIAL') AND
4037                 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id,'WORKPLAN')) THEN
4038               l_task_unpub_ver_status_code := 'PUBLISHED';
4039             ELSE --workplan only
4040               IF ('Y' = l_ver_enabled) THEN
4041                 l_task_unpub_ver_status_code := 'WORKING';
4042               ELSE
4043                 l_task_unpub_ver_status_code := 'PUBLISHED';
4044               END IF;
4045             END IF;
4046           END IF;
4047         ELSE
4048           l_task_unpub_ver_status_code := 'WORKING';
4049         END IF;
4050 --end task version status changes
4051 
4052       /*4201927 End <<B>> */
4053     Else -- If called from copy bulk APi
4054      l_src_structure_version_id := p_src_structure_version_id;
4055      l_src_project_id := p_src_project_id ;
4056      l_src_structure_id := p_src_structure_id ;
4057      l_src_task_version_id := p_src_task_version_id ;
4058 
4059      l_task_unpub_ver_status_code := p_task_unpub_ver_status_code;
4060      l_structure_id := p_dest_structure_id ;
4061      l_fin_task_flag := p_fin_task_flag;
4062 
4063      l_shared :=p_sharing_enabled ;
4064      l_ver_enabled := p_versioning_enabled;
4065      l_copy_external_flag := p_copy_external_flag;
4066      -- as we have already derived this value in copy bulk api
4067 
4068     End If ; --  If p_called_from_bulk_api = 'N'
4069 
4070     END IF;  -- End If Calling module is SS or Exchange
4071 
4072 
4073     IF l_src_project_id IS NULL OR l_src_structure_id IS NULL OR
4074        l_src_structure_version_id IS NULL OR (l_src_task_version_id IS NULL AND p_copy_option <> 'PA_ENTIRE_VERSION')
4075     THEN
4076         /* This Copy API not used in Move Task version context : Hence this check is not needed : 4201927
4077         IF p_called_from_api <> 'MOVE_TASK_VERSION'
4078         THEN
4079         */
4080 
4081            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4082                                 p_msg_name       => 'PA_PS_NOT_ENOUGH_PARAMS' );
4083            x_msg_data := 'COPY TASK : PA_PS_NOT_ENOUGH_PARAMS';
4084            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4085            RAISE  FND_API.G_EXC_ERROR;
4086         /*END IF;  : 4201927 */
4087     END IF;
4088 
4089 /* 4201927 : Perf Fix : END IF;  --move_task_version check. */
4090 
4091     -- 4223490 Included for Copy External Flow
4092     IF l_copy_external_flag = 'Y' THEN
4093        l_src_wp_type :=  PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_src_structure_version_id,'WORKPLAN');
4094     ELSE
4095        l_src_wp_type := l_wp_type;
4096     END IF;
4097 
4098     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4099       x_msg_count := FND_MSG_PUB.count_msg;
4100       IF x_msg_count = 1 then
4101          pa_interface_utils_pub.get_messages
4102          (p_encoded        => FND_API.G_TRUE,
4103           p_msg_index      => 1,
4104           p_msg_count      => l_msg_count,
4105           p_msg_data       => l_msg_data,
4106           p_data           => l_data,
4107           p_msg_index_out  => l_msg_index_out);
4108          x_msg_data := l_data;
4109       END IF;
4110       raise FND_API.G_EXC_ERROR;
4111     END IF;
4112     --If source task is empty and user not selected copy PA_ENTIRE_VERSION
4113     IF ( l_src_task_version_id IS NULL AND
4114          l_src_structure_version_id IS NOT NULL AND
4115          p_copy_option <> 'PA_ENTIRE_VERSION' ) OR
4116        ( p_copy_option NOT IN( 'PA_ENTIRE_VERSION', 'PA_TASK_ONLY', 'PA_TASK_SUBTASK'  ) )
4117     THEN
4118         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4119                              p_msg_name       => 'PA_PS_WRONG_COPY_OPTION' );
4120         x_msg_data := 'PA_PS_WRONG_COPY_OPTION';
4121         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4122         RAISE  FND_API.G_EXC_ERROR;
4123     END IF;
4124 
4125     IF p_copy_option = 'PA_TASK_ONLY' OR p_copy_option = 'PA_TASK_SUBTASK'
4126     THEN
4127        l_element_version_id := l_src_task_version_id;
4128 
4129        /*4201927 : This API not used in Move Task Version Context
4130        --If called from move_task versionsd then just copy parameter in l_element_verion_id var.
4131        IF p_called_from_api = 'MOVE_TASK_VERSION'
4132        THEN
4133           l_element_version_id := p_src_task_version_id;
4134        END IF;
4135        */
4136 
4137     ELSIF p_copy_option = 'PA_ENTIRE_VERSION'
4138     THEN
4139        l_element_version_id := l_src_structure_version_id;
4140     END IF;
4141     IF p_dest_structure_version_id = p_dest_task_version_id THEN
4142        --Copying under a structure;
4143        l_ref_task_version_id := p_dest_structure_version_id;
4144 
4145        --hsiu: bug 2669388
4146        l_ref_tk_wbs_level := 0;
4147        --end bug 2669388
4148     ELSE
4149        l_ref_task_version_id := p_dest_task_version_id;
4150        --hsiu: bug 2669388
4151        OPEN get_ref_tk_wbs(l_ref_task_version_id);
4152        FETCH get_ref_tk_wbs into l_ref_tk_wbs_level;
4153        CLOSE get_ref_tk_wbs;
4154 
4155        IF (p_peer_or_sub = 'SUB') THEN
4156          l_ref_tk_wbs_level := l_ref_tk_wbs_level;
4157        ELSE
4158          l_ref_tk_wbs_level := l_ref_tk_wbs_level-1;
4159        END IF;
4160        --end bug 2669388
4161     END IF;
4162 
4163     l_peer_or_sub := p_peer_or_sub;
4164     --hsiu task status changes
4165     --check if ok to create subtask
4166     IF (l_peer_or_sub = 'PEER') THEN
4167       OPEN get_parent_version_id(l_ref_task_version_id);
4168       FETCH get_parent_version_id into l_parent_ver_id;
4169       CLOSE get_parent_version_id;
4170       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
4171          p_parent_task_ver_id => l_parent_ver_id
4172         ,x_return_status      => l_return_status
4173         ,x_error_message_code => l_error_msg_code);
4174 
4175       IF (l_return_status <> 'Y') THEN
4176         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4177                              p_msg_name => l_error_msg_code);
4178         raise FND_API.G_EXC_ERROR;
4179       END IF;
4180     ELSE
4181       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
4182          p_parent_task_ver_id => l_ref_task_version_id
4183         ,x_return_status      => l_return_status
4184         ,x_error_message_code => l_error_msg_code
4185       );
4186       IF (l_return_status <> 'Y') THEN
4187         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4188                              p_msg_name => l_error_msg_code);
4189         raise FND_API.G_EXC_ERROR;
4190       END IF;
4191     END IF;
4192     --end task status changes
4193 /* not required in the context of copy_task bcoz when a task is copied, copied as financial if copied under Fin tab and
4194    workplan if copied under WP tab for a partial share structures.
4195 If p_structure_type = 'WORKPLAN' and
4196    PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) = 'SHARE_PARTIAL'
4197 Then
4198   IF p_dest_structure_version_id <> p_dest_task_version_id  -- reference should not be str ver
4199   THEN
4200     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
4201         p_task_version_id       => l_element_version_id
4202       , p_ref_task_version_id   => l_ref_task_version_id
4203       , x_return_status         => x_return_status
4204       , x_msg_count             => x_msg_count
4205       , x_msg_data              => x_msg_data
4206       , x_error_msg_code        => l_error_msg_code);
4207 
4208     IF (x_return_status <> 'Y') THEN
4209        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4210                             p_msg_name       => l_error_msg_code);
4211       raise FND_API.G_EXC_ERROR;
4212     End If;
4213   END IF;
4214 End If;
4215 */
4216 
4217   --check the task is a lowest task bug 3301192
4218   IF p_dest_structure_version_id <> p_dest_task_version_id  /* reference should not be str ver */
4219   THEN
4220       l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_dest_task_version_id );
4221   END IF;
4222 
4223     --dbms_output.put_line( 'l_element_version_id '||l_element_version_id );
4224 
4225     ----------------------------------------------
4226     Rec_Count := 0;  -- <-- Added for FP_M changes
4227     -- Refer to tracking bug 3305199
4228     ----------------------------------------------
4229     FOR cur_obj_rel_rec IN cur_obj_rel(  l_element_version_id )  LOOP
4230 
4231     l_src_tasks_found := true; -- Bug2741989
4232 
4233         OPEN cur_proj_elems( cur_obj_rel_rec.proj_element_id );
4234         FETCH cur_proj_elems INTO cur_proj_elems_rec;
4235         CLOSE cur_proj_elems;
4236 
4237          IF   length( p_prefix||cur_proj_elems_rec.element_number ) > 100 OR
4238               length( p_prefix||cur_proj_elems_rec.name ) > 240
4239          THEN
4240              l_task_number := SUBSTR( p_prefix||cur_proj_elems_rec.element_number, 1, 100 );
4241              l_task_name   := SUBSTR( p_prefix||cur_proj_elems_rec.name, 1, 240 );
4242          ELSE
4243              l_task_number := p_prefix||cur_proj_elems_rec.element_number;
4244              l_task_name   := p_prefix||cur_proj_elems_rec.name;
4245          END IF;
4246 
4247       /*4201927 */
4248         IF cur_obj_rel%ROWCOUNT = 1
4249         THEN
4250       /* Bug 2680486 -- Performance changes -- Passed project_id also in the following statement */
4251 
4252           OPEN cur_struc_id( cur_obj_rel_rec.parent_structure_version_id, cur_obj_rel_rec.project_id );
4253           FETCH cur_struc_id INTO l_structure_id;
4254           CLOSE cur_struc_id;
4255         END IF;
4256         l_structure_id := p_dest_structure_id ;
4257         /*4201927 */
4258 
4259 --dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Task' );
4260 --dbms_output.put_line( 'Org Id '||cur_proj_elems_rec.carrying_out_organization_id);
4261 
4262        /*4201927 : This Copy API not used in Move Task Version Context , Hence Commenting
4263         IF (p_called_from_api <> 'MOVE_TASK_VERSION') THEN */
4264 --bug 2846700
4265 --the rest has been moved above create_task_version
4266 
4267           /* 4201927 This l_structure_id correspond's to the destination project's structure id
4268              for the passed p_dest_structure_version_id.
4269              In Copy Bulk API we are already deriving this value and passing
4270              as p_dest_structure_id
4271              Also,This code need not be present inside FOR LOP for each and every task
4272 
4273              Hence moving it outside the loop
4274 */
4275          /* OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id );
4276           FETCH cur_struc_id INTO l_structure_id;  -- (<<A>>)
4277           CLOSE cur_struc_id;
4278        */
4279              /*This code refers to finding whether the destination is a template or project
4280              It need not be present inside the loop
4281 /*
4282           --hsiu: added for task version status
4283           OPEN cur_proj_is_template(l_dest_project_id);
4284           FETCH cur_proj_is_template into l_template_flag;
4285           IF cur_proj_is_template%NOTFOUND THEN
4286             l_template_flag := 'N';
4287           END IF;
4288           CLOSE cur_proj_is_template;
4289           4201927 */
4290           /* ============ Moved this block of code above the FOR LOOP tagged by <<B>> =====*/
4291 
4292 --bug 2846700
4293         /* END IF; 4201927*/
4294 
4295 --hsiu modified for calculating weighting.
4296         OPEN get_cur_task_ver_weighting(cur_obj_rel_rec.task_version_id);
4297         FETCH get_cur_task_ver_weighting into l_weighting;
4298         CLOSE get_cur_task_ver_weighting;
4299 
4300         IF  cur_obj_rel%ROWCOUNT > 1
4301         THEN
4302            IF l_old_wbs_level < cur_obj_rel_rec.wbs_level
4303            THEN
4304               l_peer_or_sub := 'SUB';
4305            ELSIF l_old_wbs_level = cur_obj_rel_rec.wbs_level
4306            THEN
4307               l_peer_or_sub := 'PEER';
4308            ELSE
4309               --if the new task being created is the lower level than the previous one.
4310               --write logic to find out the task at cur_obj_rel_rec.wbs_level
4311               -- t1
4312               --   t1.1
4313               --   t1.2
4314               --       t1.2.1
4315               --       t1.2.2
4316               --             t1.2.2.1
4317               --   t1.3 ( new task created here. For this task the ref is t1.2 )
4318               l_peer_or_sub := 'PEER';
4319 --hsiu: bug 269388
4320 --              OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level);
4321               OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level + l_ref_tk_wbs_level);
4322 --end bug 2669388
4323               FETCH cur_rev_parent_task INTO l_ref_task_version_id;
4324           /** Code added for Bug 4046751 . **/
4325           -- While doing Copy Tasks of the structure below
4326               -- t1
4327               --   t1.1
4328               --       t1.1.1
4329               --             t1.1.1.1
4330           --       t1.1.2
4331           -- If we Copy t1.1, then task t1.1.2 was being created as a peer task of t1.1.1.1.
4332           -- The code below will ensure that its p_ref_task_id is set to t1.1.1 and not t1.1.1.1
4333           IF cur_rev_parent_task%NOTFOUND then
4334               CLOSE cur_rev_parent_task;
4335           OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level);
4336               FETCH cur_rev_parent_task INTO l_ref_task_version_id;
4337           END if;
4338           /** Code changes end for BUg 4046751 **/
4339               CLOSE cur_rev_parent_task;
4340            END IF;
4341 --hsiu added, for task weighting
4342         ELSIF cur_obj_rel%ROWCOUNT = 1 THEN
4343           IF (l_peer_or_sub = 'PEER') THEN
4344             l_weighting := 0;
4345           ELSE --'SUB'
4346             OPEN sub_task_exists(l_ref_task_version_id);
4347             FETCH sub_task_exists into l_dummy_char;
4348             IF sub_task_exists%NOTFOUND THEN
4349               If (p_copy_option <> 'PA_ENTIRE_VERSION') THEN
4350                 l_weighting := 100;
4351               END IF;
4352             ELSE
4353               l_weighting := 0;
4354             END IF;
4355           END IF;
4356 --end task weighting modification
4357         END IF;
4358 
4359         /* This code need not execute for each and every task in LOOP
4360            4201927 : Moved this code to tagging marked by <<B>>
4361          -- Start of block moved
4362 
4363 ----dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Task_Version' );
4364 --hsiu added for task version status changes
4365         IF (l_template_flag = 'N') THEN
4366           --check if structure is shared
4367           --  if shared, check if versioned
4368           --    'WORKING' if versioned; 'PUBLISHED' if not
4369           --  if split, check if 'FINANCIAL'
4370           --    'PUBLISHED' if financial
4371           --    check if versioned
4372           --    'WORKING' if versioend; 'PUBLISHED' if not
4373           IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_dest_project_id)) THEN
4374             IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id)) THEN
4375               l_task_unpub_ver_status_code := 'WORKING';
4376             ELSE
4377               l_task_unpub_ver_status_code := 'PUBLISHED';
4378             END IF;
4379           ELSE --split
4380             IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL')  AND
4381                 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
4382               l_task_unpub_ver_status_code := 'PUBLISHED';
4383             ELSE --workplan only
4384               IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id)) THEN
4385                 l_task_unpub_ver_status_code := 'WORKING';
4386               ELSE
4387                 l_task_unpub_ver_status_code := 'PUBLISHED';
4388               END IF;
4389             END IF;
4390           END IF;
4391         ELSE
4392           l_task_unpub_ver_status_code := 'WORKING';
4393         END IF;
4394 --end task version status changes
4395 
4396         End Moving Code to <<B>> for 4201927*/
4397 
4398 --bug 2846700
4399 --moved here from above to get correct referenct task id and peer_or_sub value
4400       /*  IF p_called_from_api <> 'MOVE_TASK_VERSION'
4401         THEN
4402        4201927 : This Copy API not used in Move Task version Context
4403        Hence Commented
4404       */
4405           --added for task version status
4406 
4407           /* Bug 3573143 */
4408           OPEN cur_task_id(p_src_task_version_id, p_src_project_id);
4409       FETCH cur_task_id INTO l_cur_task_id;
4410       CLOSE cur_task_id;
4411       /* Ended Bug 3573143 */
4412           -- xxlu added task DFF attributes
4413 
4414       /* Commented the following code Bug 3573143 */
4415           /* OPEN cur_task_attr(p_src_structure_id); */
4416       OPEN cur_task_attr(l_cur_task_id.proj_element_id); -- Added Bug 3573143
4417           FETCH cur_task_attr INTO l_cur_task_attr;
4418           CLOSE cur_task_attr;
4419 
4420           l_task_id := null;     --bug 2625556
4421 
4422           /* Bug 2623999 -- added the following select to get the ref_task_id*/
4423           --bug 2846700
4424           --modified sql to get correct reference task
4425     --mwasowic: handle a  case when we're copying the top task and
4426     -- l_ref_task_version_id is really a structure version id, bug 3587047
4427 
4428     IF p_dest_structure_version_id = p_dest_task_version_id THEN
4429 
4430           -- 3905123 added below code
4431 
4432           -- check whether source task is top task or not
4433           -- if source task is top task
4434           --    in destination structure, check the task is getting created as PEER or SUB
4435           --    if task is getting created as SUB
4436           --        pass l_ref_task_id as NULL
4437           --    else
4438           --        derive proj_element_id for the destination task and pass as l_ref_task_id
4439           --    end if
4440           -- else
4441           --    if copy_option is 'PA_TASK_ONLY' or 'PA_TASK_SUBTASK' and source task is not the top task
4442           --       and first task is getting created in destination structure then
4443           --        pass l_ref_task_id as NULL
4444           --        ( this code will be only called once while creating the first top task in dest struct,
4445           --          which is not the top task in source structure , copy option is PA_TASK_ONLY or PA_TASK_SUBTASK )
4446           --    else
4447           --        derive proj_element_id for the destination and pass as l_ref_task_id
4448           --    end if
4449           -- end if
4450 
4451           -- Exp : Copy Option is 'ENTIRE_STRUCTURE' and source structure is
4452 
4453           --        |_T1        ( l_ref_task_id will be passed as NULL )
4454           --        |  |_T1.1   ( l_ref_task_id will be passed as detn task T1's proj_element_id )
4455           --        |_T2        ( l_ref_task_id will be passed as detn task T1's proj_element_id )
4456 
4457           is_top_task := null;
4458 
4459           open cur_is_top_task(cur_obj_rel_rec.task_version_id, l_src_structure_version_id);
4460           fetch cur_is_top_task INTO is_top_task;
4461           CLOSE cur_is_top_task;
4462 
4463           IF is_top_task = 'x' THEN
4464             IF l_peer_or_sub = 'PEER' THEN
4465               SELECT proj_element_id
4466               INTO l_ref_task_id
4467               FROM pa_proj_element_versions
4468               WHERE element_version_id = l_ref_task_version_id;
4469             ELSE
4470               l_ref_task_id := null;
4471             END IF;
4472           ELSE
4473               IF is_top_task_in_dest = 'N' AND (p_copy_option IN ('PA_TASK_ONLY','PA_TASK_SUBTASK')) THEN
4474                   l_ref_task_id := NULL;
4475               ELSE
4476                   SELECT proj_element_id
4477                   INTO l_ref_task_id
4478                   FROM pa_proj_element_versions
4479                   WHERE element_version_id = l_ref_task_version_id;
4480               END IF;
4481           END IF;
4482 
4483           -- 3905123 end
4484     ELSE
4485           SELECT proj_element_id
4486           INTO l_ref_task_id
4487           FROM pa_proj_element_versions
4488           WHERE element_version_id = l_ref_task_version_id;
4489           --commented for bug 2846700
4490           --WHERE element_version_id = p_dest_task_version_id;
4491     END IF;
4492 
4493     -- 3905123 , once the first task is created in destination, change the value of is_top_task_in_dest var to 'Y'
4494 
4495     IF is_top_task_in_dest = 'N' AND p_dest_structure_version_id = p_dest_task_version_id THEN
4496         is_top_task_in_dest := 'Y';
4497     END IF;
4498 
4499     -- 3905123 end
4500 
4501           --3035902: process update flag changes
4502           --set update process flag if necessary;
4503 
4504           IF (l_wp_process_flag = 'N') THEN
4505             --may need to update process flag
4506             IF ((l_shared = 'N') AND
4507                 (l_wp_type = 'Y') AND
4508                 (pa_task_type_utils.check_tk_type_progressable(cur_proj_elems_rec.TYPE_ID)='Y') AND
4509                 (l_weighting_basis_code <> 'MANUAL'))
4510             THEN
4511               --split and workplan; only update if progressable task added
4512               l_wp_process_flag := 'Y';
4513             ELSIF ((l_shared = 'N') AND
4514                    (l_wp_type = 'N')) THEN
4515               --split and financial; update
4516               l_wp_process_flag := 'Y';
4517             ELSIF (l_shared = 'Y') THEN
4518               l_wp_process_flag := 'Y';
4519             END IF;
4520           END IF;
4521           --3035902: end process update flag changes
4522 
4523           PA_TASK_PVT1.Create_Task(
4524                        p_api_version            => p_api_version
4525                        ,p_init_msg_list         => p_init_msg_list
4526                        ,p_commit                  => p_commit
4527                        ,p_validate_only         => p_validate_only
4528                        ,p_validation_level    => p_validation_level
4529                        ,p_calling_module            => p_calling_module
4530                        ,p_debug_mode            => p_debug_mode
4531                        ,p_max_msg_count         => p_max_msg_count
4532                        ,p_object_type           => cur_proj_elems_rec.object_type
4533                        ,p_project_id            => l_dest_project_id
4534                        ,p_structure_id            => l_structure_id
4535                        ,p_structure_version_id    => p_dest_structure_version_id
4536                        ,p_task_number           => l_task_number
4537                ,p_task_name               => l_task_name
4538                        ,p_task_description    => cur_proj_elems_rec.description
4539                        ,p_location_id           => cur_proj_elems_rec.location_id
4540                      --p_country                  => null
4541                      --p_territory_code         => null
4542                      --p_state_region           => null
4543                      --p_city                       => null
4544                        ,p_task_manager_id           => cur_proj_elems_rec.manager_person_id
4545                      --p_task_manager_name    => null
4546                       ,p_carrying_out_org_id      => cur_proj_elems_rec.carrying_out_organization_id
4547                      --p_carrying_out_org_name    => null
4548                        ,p_priority_code         => cur_proj_elems_rec.priority_code
4549                        ,p_TYPE_ID                 => cur_proj_elems_rec.TYPE_ID
4550                      --,p_status_code           => cur_proj_elems_rec.status_code
4551                        ,p_inc_proj_progress_flag  => cur_proj_elems_rec.inc_proj_progress_flag
4552                      --,p_pm_product_code           => cur_proj_elems_rec.pm_product_code
4553                      --,p_pm_task_reference   => cur_proj_elems_rec.pm_task_reference
4554                        ,p_closed_date           => cur_proj_elems_rec.closed_date
4555                      --p_scheduled_start_date     => null
4556                      --p_scheduled_finish_date    => null
4557                        ,p_attribute_category      => cur_proj_elems_rec.attribute_category
4558                        ,p_attribute1            => cur_proj_elems_rec.attribute1
4559                        ,p_attribute2            => cur_proj_elems_rec.attribute2
4560                        ,p_attribute3            => cur_proj_elems_rec.attribute3
4561                        ,p_attribute4            => cur_proj_elems_rec.attribute4
4562                        ,p_attribute5            => cur_proj_elems_rec.attribute5
4563                        ,p_attribute6            => cur_proj_elems_rec.attribute6
4564                        ,p_attribute7            => cur_proj_elems_rec.attribute7
4565                        ,p_attribute8            => cur_proj_elems_rec.attribute8
4566                        ,p_attribute9            => cur_proj_elems_rec.attribute9
4567                        ,p_attribute10           => cur_proj_elems_rec.attribute10
4568                        ,p_attribute11           => cur_proj_elems_rec.attribute11
4569                        ,p_attribute12           => cur_proj_elems_rec.attribute12
4570                        ,p_attribute13           => cur_proj_elems_rec.attribute13
4571                        ,p_attribute14           => cur_proj_elems_rec.attribute14
4572                        ,p_attribute15           => cur_proj_elems_rec.attribute15
4573                        ,p_task_weighting_deriv_code =>NULL
4574                        ,p_work_item_code        =>cur_proj_elems_rec.WQ_ITEM_CODE
4575                        ,p_uom_code              =>cur_proj_elems_rec.WQ_UOM_CODE
4576                        ,p_wq_actual_entry_code  =>cur_proj_elems_rec.WQ_ACTUAL_ENTRY_CODE
4577                        ,p_task_progress_entry_page_id =>cur_proj_elems_rec.TASK_PROGRESS_ENTRY_PAGE_ID
4578                        ,p_parent_structure_id     => cur_proj_elems_rec.parent_structure_id
4579 /* hy Bug 2767403 Fix - Should not copy phase when copy task
4580                        ,p_phase_code              => cur_proj_elems_rec.phase_code
4581                        ,p_phase_version_id        => cur_proj_elems_rec.phase_version_id
4582  end hy Bug 2767403 Fix */
4583                        ,p_tk_attribute_category  => l_cur_task_attr.attribute_category
4584                        ,p_tk_attribute1  => l_cur_task_attr.attribute1
4585                        ,p_tk_attribute2  => l_cur_task_attr.attribute2
4586                        ,p_tk_attribute3  => l_cur_task_attr.attribute3
4587                        ,p_tk_attribute4  => l_cur_task_attr.attribute4
4588                        ,p_tk_attribute5  => l_cur_task_attr.attribute5
4589                        ,p_tk_attribute6  => l_cur_task_attr.attribute6
4590                        ,p_tk_attribute7  => l_cur_task_attr.attribute7
4591                        ,p_tk_attribute8  => l_cur_task_attr.attribute8
4592                        ,p_tk_attribute9  => l_cur_task_attr.attribute9
4593                        ,p_tk_attribute10 => l_cur_task_attr.attribute10
4594                        ,p_peer_or_sub    => l_peer_or_sub /* Bug 2623999 -- added this parameter*/ --bug 2846700: modified to use l_peer_or_sub
4595                        ,p_ref_task_id    => l_ref_task_id /* Bug 2623999 -- added this parameter*/
4596                        ,p_structure_type => p_structure_type
4597                         -- Bug#3811846 : added p_base_perc_comp_deriv_code
4598                        ,p_base_perc_comp_deriv_code     =>  cur_proj_elems_rec.base_percent_comp_deriv_code
4599                         -- Bug#3491609 : Workflow Chanegs FP M
4600                        ,p_wf_item_type   => cur_proj_elems_rec.wf_item_type
4601                        ,p_wf_process     => cur_proj_elems_rec.wf_process
4602                        ,p_wf_lead_days   => cur_proj_elems_rec.wf_start_lead_days
4603                         -- Bug#3491609 : Workflow Chanegs FP M
4604                        ,x_task_id         => l_task_id
4605                        ,x_return_status  => l_return_status
4606                        ,x_msg_count  => l_msg_count
4607                        ,x_msg_data        => l_msg_data );
4608            -- end xxlu changes
4609         /* 4201927 : THIS COPY API is not used in MOVE_TASK_VERSION context
4610            hence commenting
4611         ELSIF p_called_from_api = 'MOVE_TASK_VERSION'
4612         THEN
4613           l_task_id := cur_obj_rel_rec.proj_element_id;
4614         END IF;
4615         4201927*/
4616 
4617         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4618           x_msg_count := FND_MSG_PUB.count_msg;
4619           IF x_msg_count = 1 then
4620             pa_interface_utils_pub.get_messages
4621                          (p_encoded        => FND_API.G_TRUE,
4622                           p_msg_index      => 1,
4623                           p_msg_count      => l_msg_count,
4624                           p_msg_data       => l_msg_data,
4625                           p_data           => l_data,
4626                           p_msg_index_out  => l_msg_index_out);
4627                           x_msg_data := l_data;
4628           END IF;
4629           raise FND_API.G_EXC_ERROR;
4630         END IF;
4631 --end bug 2846700
4632 
4633 
4634         PA_TASK_PUB1.Create_Task_Version(
4635                   p_api_version       => p_api_version
4636                  ,p_init_msg_list         => p_init_msg_list
4637                  ,p_commit              => p_commit
4638                  ,p_validate_only         => p_validate_only
4639                  ,p_validation_level    => p_validation_level
4640                  ,p_calling_module        => p_calling_module
4641                  ,p_debug_mode        => p_debug_mode
4642                  ,p_max_msg_count         => p_max_msg_count
4643                  ,p_ref_task_version_id => l_ref_task_version_id
4644                  ,p_peer_or_sub       => l_peer_or_sub
4645                  ,p_task_id             => l_task_id
4646                  ,p_attribute_category  => cur_obj_rel_rec.attribute_category
4647                  ,p_attribute1        => cur_obj_rel_rec.attribute1
4648                  ,p_attribute2        => cur_obj_rel_rec.attribute2
4649                  ,p_attribute3        => cur_obj_rel_rec.attribute3
4650                  ,p_attribute4        => cur_obj_rel_rec.attribute4
4651                  ,p_attribute5        => cur_obj_rel_rec.attribute5
4652                  ,p_attribute6        => cur_obj_rel_rec.attribute6
4653                  ,p_attribute7        => cur_obj_rel_rec.attribute7
4654                  ,p_attribute8        => cur_obj_rel_rec.attribute8
4655                  ,p_attribute9        => cur_obj_rel_rec.attribute9
4656                  ,p_attribute10       => cur_obj_rel_rec.attribute10
4657                  ,p_attribute11       => cur_obj_rel_rec.attribute11
4658                  ,p_attribute12       => cur_obj_rel_rec.attribute12
4659                  ,p_attribute13       => cur_obj_rel_rec.attribute13
4660                  ,p_attribute14       => cur_obj_rel_rec.attribute14
4661                  ,p_attribute15       => cur_obj_rel_rec.attribute15
4662                  ,p_WEIGHTING_PERCENTAGE => l_weighting
4663                  ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
4664                  ,p_financial_task_flag        => l_fin_task_flag      --bug 3301192
4665                  ,x_task_version_id       => l_task_version_id
4666                  ,x_return_status         => l_return_status
4667                  ,x_msg_count               => l_msg_count
4668                  ,x_msg_data                => l_msg_data
4669                 );
4670 
4671                   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4672                      x_msg_count := FND_MSG_PUB.count_msg;
4673                      IF x_msg_count = 1 then
4674                          pa_interface_utils_pub.get_messages
4675                          (p_encoded        => FND_API.G_TRUE,
4676                           p_msg_index      => 1,
4677                           p_msg_count      => l_msg_count,
4678                           p_msg_data       => l_msg_data,
4679                           p_data           => l_data,
4680                           p_msg_index_out  => l_msg_index_out);
4681                           x_msg_data := l_data;
4682                      END IF;
4683                      raise FND_API.G_EXC_ERROR;
4684                   END IF;
4685 
4686 
4687         --------------------------------------------- FP_M changes: Begin
4688     -- Refer to tracking bug 3305199
4689         -- Populate the source and destination task version ID in
4690         -- PL/SQL tables
4691 
4692         Rec_Count := Rec_Count + 1;
4693         l_old_task_versions_tab.extend(1);
4694         l_new_task_versions_tab.extend(1);
4695         l_Old_Task_Versions_Tab(Rec_Count) := cur_obj_rel_rec.Task_Version_ID;
4696     l_New_Task_Versions_Tab(Rec_Count) := l_task_version_id;
4697 
4698         --bug 3301192 fin plan
4699         l_old_task_ver_ids.extend(1); /* Venky */
4700         l_new_task_ver_ids.extend(1); /* Venky */
4701         l_old_task_ids.extend(1); /* Venky */
4702         l_new_task_ids.extend(1); /* Venky */
4703         l_old_task_ver_ids(Rec_Count) := cur_obj_rel_rec.Task_Version_ID;
4704         l_old_task_ids(Rec_Count)     := cur_obj_rel_rec.proj_element_id;
4705         l_new_task_ver_ids(Rec_Count) := l_task_version_id;
4706         l_new_task_ids(Rec_Count)     := l_task_id;
4707         --bug 3301192 fin plan
4708 
4709         --------------------------------------------- FP_M changes: End
4710 
4711         --set the reference id.
4712         --l_ref_task_version_id := cur_obj_rel_rec.task_version_id;
4713         l_ref_task_version_id := l_task_version_id;
4714         l_old_wbs_level :=  cur_obj_rel_rec.wbs_level;
4715 
4716         --If structure type is workplan.
4717         OPEN cur_struc_type( l_structure_id );
4718         FETCH cur_struc_type INTO l_dummy_char;
4719         IF cur_struc_type%FOUND
4720         THEN
4721 
4722            --dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Scheduele_version' );
4723 
4724           /*4201927 : This Copy API not called in Move Task Version Context.
4725             Hence Commenting
4726           IF p_called_from_api <> 'MOVE_TASK_VERSION'
4727           THEN
4728           */
4729 --Hsiu added for date rollup; workplan only
4730 --bug 3991067
4731             l_task_cnt := l_task_cnt + 1;
4732             l_tasks_ver_ids(l_task_cnt) := l_task_version_id;
4733 --            l_tasks_ver_ids.extend;
4734 --            l_tasks_ver_ids(l_tasks_ver_ids.count) := l_task_version_id;
4735 --end bug 3991067
4736 --hsiu added for task status rollup
4737             l_rollup_task_id := l_task_version_id;
4738 --note: as long as one of the id of the new task is selected, the rollup will work.
4739             -- xxlu
4740             --bug 3074706
4741             --added src_project_id
4742 --            OPEN cur_proj_elem_ver_sch(p_src_structure_version_id, l_src_project_id);  --Bug No 3609001
4743 --            OPEN cur_proj_elem_ver_sch(p_src_task_version_id, l_src_project_id);         --Bug No 3609001
4744             OPEN cur_proj_elem_ver_sch(cur_obj_rel_rec.task_version_id, l_src_project_id);         --Bug No 3675385
4745             FETCH cur_proj_elem_ver_sch INTO v_cur_sch;
4746             CLOSE cur_proj_elem_ver_sch;
4747 
4748             PA_TASK_PVT1.Create_Schedule_Version(
4749                       p_api_version               => p_api_version
4750                      ,p_init_msg_list           => p_init_msg_list
4751                      ,p_commit                => p_commit
4752                      ,p_validate_only           => p_validate_only
4753                      ,p_validation_level            => p_validation_level
4754                      ,p_calling_module          => p_calling_module
4755                      ,p_debug_mode                => p_debug_mode
4756                      ,p_max_msg_count           => p_max_msg_count
4757                      ,p_element_version_id    => l_task_version_id
4758                      ,p_scheduled_start_date  => v_cur_sch.SCHEDULED_START_DATE
4759                      ,p_scheduled_end_date    => v_cur_sch.scheduled_finish_date
4760                      ,p_attribute_category            => v_cur_sch.attribute_category
4761                      ,p_attribute1                    => v_cur_sch.attribute1
4762                      ,p_attribute2                    => v_cur_sch.attribute2
4763                      ,p_attribute3                    => v_cur_sch.attribute3
4764                      ,p_attribute4                    => v_cur_sch.attribute4
4765                      ,p_attribute5                    => v_cur_sch.attribute5
4766                      ,p_attribute6                    => v_cur_sch.attribute6
4767                      ,p_attribute7                    => v_cur_sch.attribute7
4768                      ,p_attribute8                    => v_cur_sch.attribute8
4769                      ,p_attribute9                    => v_cur_sch.attribute9
4770                      ,p_attribute10                   => v_cur_sch.attribute10
4771                      ,p_attribute11                   => v_cur_sch.attribute11
4772                      ,p_attribute12                   => v_cur_sch.attribute12
4773                      ,p_attribute13                   => v_cur_sch.attribute13
4774                      ,p_attribute14                   => v_cur_sch.attribute14
4775                      ,p_attribute15                   => v_cur_sch.attribute15
4776                      ,p_def_sch_tool_tsk_type_code        => v_cur_sch.DEF_SCH_TOOL_TSK_TYPE_CODE
4777                      ,p_constraint_type_code              => v_cur_sch.CONSTRAINT_TYPE_CODE
4778                      ,p_constraint_date                   => v_cur_sch.CONSTRAINT_DATE
4779                      ,p_free_slack                        => v_cur_sch.FREE_SLACK
4780                      ,p_total_slack                       => v_cur_sch.TOTAL_SLACK
4781                      ,p_effort_driven_flag                => v_cur_sch.EFFORT_DRIVEN_FLAG
4782                      ,p_level_assignments_flag            => v_cur_sch.LEVEL_ASSIGNMENTS_FLAG
4783                      ,p_ext_act_duration                  => v_cur_sch.EXT_ACT_DURATION
4784                      ,p_ext_remain_duration               => v_cur_sch.EXT_REMAIN_DURATION
4785                      ,p_ext_sch_duration                  => v_cur_sch.EXT_SCH_DURATION
4786                      ,x_pev_schedule_id         => l_pev_schedule_id
4787                      ,x_return_status           => l_return_status
4788                      ,x_msg_count                 => l_msg_count
4789                      ,x_msg_data                  => l_msg_data
4790                  );
4791               -- end xxlu changes
4792           /*END IF; 4201927 : This Copy API not called in Move Task Version Context. */
4793 
4794                   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4795                      x_msg_count := FND_MSG_PUB.count_msg;
4796                      IF x_msg_count = 1 then
4797                          pa_interface_utils_pub.get_messages
4798                          (p_encoded        => FND_API.G_TRUE,
4799                           p_msg_index      => 1,
4800                           p_msg_count      => l_msg_count,
4801                           p_msg_data       => l_msg_data,
4802                           p_data           => l_data,
4803                           p_msg_index_out  => l_msg_index_out);
4804                           x_msg_data := l_data;
4805                      END IF;
4806                      raise FND_API.G_EXC_ERROR;
4807                   END IF;
4808         END IF;
4809         CLOSE cur_struc_type;
4810 
4811     END LOOP;
4812 
4813 
4814     -- Added for FP_M changes 3305199 : Bhumesh
4815 
4816     If P_cp_Dependency_Flag = 'Y' then
4817       PA_Relationship_Pvt.Copy_Intra_Dependency (
4818     P_Source_Ver_Tbl  => l_Old_Task_Versions_Tab,
4819     P_Destin_Ver_Tbl  => l_New_Task_Versions_Tab,
4820     X_Return_Status   => X_Return_Status,
4821     X_Msg_Count       => X_Msg_Count,
4822     X_Msg_Data        => X_Msg_Data
4823       );
4824 
4825       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4826          RAISE FND_API.G_EXC_ERROR;
4827       END IF;
4828 
4829       PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
4830     P_Source_Ver_Tbl     => l_Old_Task_Versions_Tab,
4831     P_Destin_Ver_Tbl     => l_New_Task_Versions_Tab,
4832     X_Return_Status      => X_Return_Status,
4833     X_Msg_Count          => X_Msg_Count,
4834     X_Msg_Data           => X_Msg_Data
4835       );
4836       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4837          RAISE FND_API.G_EXC_ERROR;
4838       END IF;
4839 
4840     End If;
4841     -- End of FP_M changes
4842 
4843     /* Bug2741989 -- Following message is populated in stack */
4844     IF (NOT l_src_tasks_found  AND p_copy_option = 'PA_ENTIRE_VERSION')THEN
4845            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4846                                 p_msg_name       => 'PA_CANT_COPY_EMPTY_STRUCT_VER' );
4847            x_msg_data := 'PA_CANT_COPY_EMPTY_STRUCT_VER';
4848            x_return_status := FND_API.G_RET_STS_ERROR;
4849            RAISE  FND_API.G_EXC_ERROR;
4850     END IF;
4851 
4852 /* Bug 2623999 coomnted out the code below. It is redundant and causing issues */
4853 /*
4854   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
4855     FROM pa_proj_element_versions
4856    WHERE element_version_id =  p_dest_structure_version_id
4857      AND object_type = 'PA_STRUCTURES';
4858 
4859   --Do financial task check
4860   --If financial
4861   OPEN cur_struc_type2( l_structure_id );
4862   FETCH cur_struc_type2 INTO l_dummy_char;
4863   IF cur_struc_type2%FOUND
4864   THEN
4865       --If structure has any published versions.
4866       l_published_version := 'N';
4867       OPEN cur_pub_versions( l_structure_id, l_project_id );
4868       FETCH cur_pub_versions INTO l_published_version;
4869       CLOSE cur_pub_versions;
4870 
4871 --hsiu
4872 --changes for versioning
4873       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
4874                                                      l_project_id);
4875       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
4876                                                   l_project_id);
4877 
4878       IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y') THEN
4879 --      IF NVL( l_published_version, 'N' ) = 'N'
4880 --      THEN
4881 --end changes
4882 
4883           --get the reference task and project ids
4884           SELECT proj_element_id, project_id
4885             INTO l_ref_task_id, l_ref_project_id
4886             FROM pa_proj_element_versions
4887            WHERE element_version_id = p_dest_task_version_id;
4888 
4889           --get the task and project ids
4890           SELECT proj_element_id, project_id
4891             INTO l_task_id, l_project_id
4892             FROM pa_proj_element_versions
4893            WHERE element_version_id = p_src_task_version_id;
4894 
4895           IF p_copy_option = 'PA_TASK_ONLY'
4896           THEN
4897              l_copy_node_flag := 'S';  ---copy selected task only
4898           ELSIF p_copy_option = 'PA_TASK_SUBTASK'
4899           THEN
4900              l_copy_node_flag := 'T';  ---copy selected task and sub tasks
4901           ELSIF p_copy_option = 'PA_ENTIRE_VERSION'
4902           THEN
4903              l_copy_node_flag := 'P';  ---copy entire project
4904           END IF;
4905 
4906           PA_TASKS_MAINT_PUB.Copy_Task(
4907                          p_reference_project_id              => l_ref_project_id
4908                         ,p_reference_task_id                 => l_ref_task_id
4909                         ,p_project_id                        => l_project_id
4910                         ,p_task_id                           => l_task_id
4911                         ,p_project_name => NULL
4912                         ,p_task_name => NULL
4913                         ,p_peer_or_sub                       => p_peer_or_sub
4914                         ,p_copy_node_flag                    => l_copy_node_flag
4915                         ,p_task_prefix                       => p_prefix
4916                         ,p_wbs_record_version_number         => 1
4917                         ,x_return_status                     => l_return_status
4918                         ,x_msg_count                         => l_msg_count
4919                         ,x_msg_data                          => l_msg_data );
4920 
4921           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4922               x_msg_count := FND_MSG_PUB.count_msg;
4923              IF x_msg_count = 1 then
4924                 pa_interface_utils_pub.get_messages
4925                 (p_encoded        => FND_API.G_TRUE,
4926                  p_msg_index      => 1,
4927                  p_msg_count      => l_msg_count,
4928                  p_msg_data       => l_msg_data,
4929                  p_data           => l_data,
4930                  p_msg_index_out  => l_msg_index_out);
4931                  x_msg_data := l_data;
4932              END IF;
4933              raise FND_API.G_EXC_ERROR;
4934           END IF;
4935       END IF;
4936   END IF;
4937   CLOSE cur_struc_type2;
4938 */
4939 
4940   /* 4201927: This value is already derived as the variable l_wp_type */
4941   /*IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_dest_structure_version_id, 'WORKPLAN') = 'Y' then
4942    */
4943     IF l_wp_type = 'Y' then
4944     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
4945                        p_commit => FND_API.G_FALSE,
4946                        p_element_versions => l_tasks_ver_ids,
4947                        x_return_status => l_return_status,
4948                        x_msg_count => l_msg_count,
4949                        x_msg_data => l_msg_data);
4950 
4951      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
4952        x_msg_count := FND_MSG_PUB.count_msg;
4953        if x_msg_count = 1 then
4954          pa_interface_utils_pub.get_messages
4955          (p_encoded        => FND_API.G_TRUE,
4956           p_msg_index      => 1,
4957           p_msg_count      => l_msg_count,
4958           p_msg_data       => l_msg_data,
4959           p_data           => l_data,
4960           p_msg_index_out  => l_msg_index_out);
4961           x_msg_data := l_data;
4962        end if;
4963        raise FND_API.G_EXC_ERROR;
4964      end if;
4965 
4966 --hsiu added for task status
4967 --if versioning is off, rollup.
4968 
4969       /* 4201927 : Replaced Call to Version ENabled with l_ver_enabled */
4970      /*IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_dest_project_id)) AND*/
4971        IF ('N' = l_ver_enabled) AND
4972         (l_rollup_task_id IS NOT NULL) THEN
4973        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
4974                   p_structure_version_id => p_dest_structure_version_id
4975                  ,p_element_version_id => l_rollup_task_id
4976                  ,x_return_status => l_return_status
4977                  ,x_msg_count => l_msg_count
4978                  ,x_msg_data => l_msg_data
4979        );
4980 
4981        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
4982          x_msg_count := FND_MSG_PUB.count_msg;
4983          if x_msg_count = 1 then
4984            pa_interface_utils_pub.get_messages
4985            (p_encoded        => FND_API.G_TRUE,
4986             p_msg_index      => 1,
4987             p_msg_count      => l_msg_count,
4988             p_msg_data       => l_msg_data,
4989             p_data           => l_data,
4990             p_msg_index_out  => l_msg_index_out);
4991             x_msg_data := l_data;
4992          end if;
4993          raise FND_API.G_EXC_ERROR;
4994        end if;
4995 
4996      END IF;
4997 
4998 --end task status changes
4999 
5000   END IF;
5001 
5002 
5003 --bug 3301192  fin plan changes
5004 declare
5005 /* Bug #: 3305199 SMukka                                                         */
5006 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
5007 /* l_task_ver_ids2              PA_PLSQL_DATATYPES.IdTabTyp;                     */
5008 l_task_ver_ids2              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
5009 /* 4201927 : This value is already derived l_wp_type                    VARCHAR2(1); */
5010 /* 4201927 : This value is already derived l_copy_external_flag         VARCHAR2(1); */
5011 begin
5012 
5013   /* 4201927 : This value is already derived
5014   l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_dest_structure_version_id, 'WORKPLAN');
5015    4201927 */
5016     --3305199: deliverable changes
5017     IF (p_cp_deliverable_asso_flag = 'Y' AND l_wp_type = 'Y') THEN
5018       PA_DELIVERABLE_PUB.COPY_ASSOCIATIONS
5019       (p_validate_only           => FND_API.G_FALSE
5020       ,p_src_task_versions_tab   => l_Old_Task_Versions_Tab
5021       ,p_dest_task_versions_tab  => l_New_Task_Versions_Tab
5022       ,x_return_status           => l_return_status
5023       ,x_msg_count               => l_msg_count
5024       ,x_msg_data                => l_msg_data);
5025 
5026       if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5027         x_msg_count := FND_MSG_PUB.count_msg;
5028         if x_msg_count = 1 then
5029           pa_interface_utils_pub.get_messages
5030                (p_encoded        => FND_API.G_TRUE,
5031                 p_msg_index      => 1,
5032                 p_msg_count      => l_msg_count,
5033                 p_msg_data       => l_msg_data,
5034                 p_data           => l_data,
5035                 p_msg_index_out  => l_msg_index_out);
5036           x_msg_data := l_data;
5037         end if;
5038         raise FND_API.G_EXC_ERROR;
5039       end if;
5040     END IF;
5041     --3305199: end deliverable changes
5042 
5043   /*=====================P1 BUG 4210796 ===================
5044    * COPY PLANNING TXNS MOVED BEFORE DELETE PLANNING TXNS CALL
5045    * =======================================================*/
5046 
5047    -- START OF BLOCK MOVED
5048    IF l_wp_type = 'Y' AND l_src_wp_type='Y'  -- 4223490 : Included  l_src_wp_type='Y' because both source and destination shud be WP
5049   THEN
5050 
5051     /* 4201927 : l_copy_external_flag is already derived as in <<C>>
5052     IF p_src_project_id = l_dest_project_id
5053     THEN
5054         l_copy_external_flag := 'N';
5055     ELSE
5056         l_copy_external_flag := 'Y';
5057     ENd IF;
5058     */
5059 
5060     /*Smukka Bug No. 3474141 Date 03/01/2004                                                  */
5061     /*moved pa_fp_planning_transaction_pub.copy_planning_transactions into plsql block        */
5062     BEGIN
5063         pa_fp_planning_transaction_pub.copy_planning_transactions(
5064           p_context                    => 'WORKPLAN'
5065          ,p_copy_external_flag         =>  l_copy_external_flag
5066          ,p_src_project_id             =>  p_src_project_id
5067          ,p_target_project_id          =>  l_dest_project_id
5068        --,p_src_element_id_tbl         =>  l_old_task_ids
5069          ,p_src_version_id_tbl        =>   l_old_task_ver_ids
5070        --,p_targ_element_id_tbl      =>    l_new_task_ids
5071          ,p_targ_version_id_tbl     =>     l_new_task_ver_ids
5072          ,p_copy_people_flag            => p_cp_people_flag
5073          ,p_copy_equip_flag             => p_cp_equipment_flag
5074          ,p_copy_mat_item_flag          => p_cp_material_items_flag
5075          ,p_copy_fin_elem_flag          => p_cp_financial_elem_flag
5076  --      ,p_maintain_reporting_lines    => 'Y'
5077          ,x_return_status               => l_return_status
5078          ,x_msg_count                   => l_msg_count
5079          ,x_msg_data                    => l_msg_data
5080         );
5081     EXCEPTION
5082         WHEN OTHERS THEN
5083              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5084                                      p_procedure_name => 'COPY_TASK',
5085                                      p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.copy_planning_transactions:'||SQLERRM,1,240));
5086         RAISE FND_API.G_EXC_ERROR;
5087     END;
5088 
5089 
5090            if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5091               x_msg_count := FND_MSG_PUB.count_msg;
5092              if x_msg_count = 1 then
5093                 pa_interface_utils_pub.get_messages
5094                (p_encoded        => FND_API.G_TRUE,
5095                 p_msg_index      => 1,
5096                 p_msg_count      => l_msg_count,
5097                 p_msg_data       => l_msg_data,
5098                 p_data           => l_data,
5099                 p_msg_index_out  => l_msg_index_out);
5100                 x_msg_data := l_data;
5101              end if;
5102              raise FND_API.G_EXC_ERROR;
5103             end if;
5104  END IF;
5105 
5106    -- END OF BLOCK MOVED FOR P1 BUG 4210796
5107 
5108   IF l_wp_type = 'Y' AND p_dest_structure_version_id <> p_dest_task_version_id
5109   THEN
5110        l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_dest_task_version_id );
5111 
5112        IF l_lowest_task_flag1 = 'Y' AND
5113           l_lowest_task_flag2 = 'N'  /* reference task is no more a lowest task therefore call delete planning api */
5114        THEN
5115            l_task_ver_ids2.extend(1); /* Venky */
5116            l_task_ver_ids2(1) := p_dest_task_version_id;
5117            /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
5118            /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
5119            DECLARE
5120              --p1 bug 3888432
5121              l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5122              CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
5123                SELECT resource_assignment_id
5124                  FROM pa_resource_assignments
5125                 WHERE wbs_element_Version_id = c_task_ver_id
5126                   AND ta_display_flag = 'N';
5127              l_assign_id    NUMBER := NULL;
5128            BEGIN
5129              OPEN get_assignment_id(p_dest_task_version_id);
5130              FETCH get_assignment_id into l_assign_id;
5131              CLOSE get_assignment_id;
5132 
5133              IF (l_assign_id IS NOT NULL) THEN
5134                l_assign_ids.extend(1);
5135                l_assign_ids(1) := l_assign_id;
5136                pa_fp_planning_transaction_pub.delete_planning_transactions
5137                (
5138                  p_context                      => 'WORKPLAN'
5139                 ,p_task_or_res                  => 'ASSIGNMENT'
5140 --                ,p_element_version_id_tbl       => l_task_ver_ids2
5141 --              ,p_maintain_reporting_lines     => 'Y'
5142                 ,p_resource_assignment_tbl => l_assign_ids
5143                 ,x_return_status                => l_return_status
5144                 ,x_msg_count                    => l_msg_count
5145                 ,x_msg_data                     => l_msg_data
5146                );
5147              END IF;
5148            EXCEPTION
5149                WHEN OTHERS THEN
5150                     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5151                                             p_procedure_name => 'COPY_TASK',
5152                                             p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
5153                RAISE FND_API.G_EXC_ERROR;
5154            END;
5155 
5156            if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5157               x_msg_count := FND_MSG_PUB.count_msg;
5158              if x_msg_count = 1 then
5159                 pa_interface_utils_pub.get_messages
5160                (p_encoded        => FND_API.G_TRUE,
5161                 p_msg_index      => 1,
5162                 p_msg_count      => l_msg_count,
5163                 p_msg_data       => l_msg_data,
5164                 p_data           => l_data,
5165                 p_msg_index_out  => l_msg_index_out);
5166                 x_msg_data := l_data;
5167              end if;
5168              raise FND_API.G_EXC_ERROR;
5169             end if;
5170        END IF;
5171   END IF;
5172 
5173 /*==========================================================================================
5174   MOVED THIS BLOCK OF CODE FOR COPYING PLANNING TRANSACTIONS before DELETING PLANNING TXNS .
5175   THIS FIX IS NEEDED FOR P1 BUG 4210796 . REFER *** MAANSARI  02/28/05 12:59 pm ***
5176   FOR THE SOLUTION STRATEGY
5177 
5178   IF l_wp_type = 'Y'
5179   THEN
5180 
5181     /* 4201927 : l_copy_external_flag is already derived as in <<C>>
5182     IF p_src_project_id = l_dest_project_id
5183     THEN
5184         l_copy_external_flag := 'N';
5185     ELSE
5186         l_copy_external_flag := 'Y';
5187     ENd IF;
5188     */
5189 
5190     /*Smukka Bug No. 3474141 Date 03/01/2004                                                  */
5191     /*moved pa_fp_planning_transaction_pub.copy_planning_transactions into plsql block        */
5192     /* P1 4210796
5193     BEGIN
5194         pa_fp_planning_transaction_pub.copy_planning_transactions(
5195           p_context                    => 'WORKPLAN'
5196          ,p_copy_external_flag         =>  l_copy_external_flag
5197          ,p_src_project_id             =>  p_src_project_id
5198          ,p_target_project_id          =>  l_dest_project_id
5199        --,p_src_element_id_tbl         =>  l_old_task_ids
5200          ,p_src_version_id_tbl        =>   l_old_task_ver_ids
5201        --,p_targ_element_id_tbl      =>    l_new_task_ids
5202          ,p_targ_version_id_tbl     =>     l_new_task_ver_ids
5203          ,p_copy_people_flag            => p_cp_people_flag
5204          ,p_copy_equip_flag             => p_cp_equipment_flag
5205          ,p_copy_mat_item_flag          => p_cp_material_items_flag
5206          ,p_copy_fin_elem_flag          => p_cp_financial_elem_flag
5207  --      ,p_maintain_reporting_lines    => 'Y'
5208          ,x_return_status               => l_return_status
5209          ,x_msg_count                   => l_msg_count
5210          ,x_msg_data                    => l_msg_data
5211         );
5212     EXCEPTION
5213         WHEN OTHERS THEN
5214              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5215                                      p_procedure_name => 'COPY_TASK',
5216                                      p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.copy_planning_transactions:'||SQLERRM,1,240));
5217         RAISE FND_API.G_EXC_ERROR;
5218     END;
5219 
5220 
5221            if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5222               x_msg_count := FND_MSG_PUB.count_msg;
5223              if x_msg_count = 1 then
5224                 pa_interface_utils_pub.get_messages
5225                (p_encoded        => FND_API.G_TRUE,
5226                 p_msg_index      => 1,
5227                 p_msg_count      => l_msg_count,
5228                 p_msg_data       => l_msg_data,
5229                 p_data           => l_data,
5230                 p_msg_index_out  => l_msg_index_out);
5231                 x_msg_data := l_data;
5232              end if;
5233              raise FND_API.G_EXC_ERROR;
5234             end if;
5235  END IF;
5236 
5237  END OF BLOCK MOVED FOR  P1 BUG 4210796
5238  ======================================================================*/
5239 end;
5240 --bug 3301192  fin plan changes
5241 
5242     --3035902: process update flag changes
5243     --set process flag
5244     --Bug No 3450684 SMukka Commented if condition
5245     --IF (l_wp_process_flag = 'Y') THEN
5246       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
5247       (
5248         p_calling_context       => 'SELF_SERVICE'
5249        ,p_project_id            => l_dest_project_id
5250        ,p_structure_version_id  => p_dest_structure_version_id
5251        ,p_update_wbs_flag       => 'Y'
5252        ,x_return_status         => l_return_status
5253        ,x_msg_count             => l_msg_count
5254        ,x_msg_data              => l_msg_data);
5255 
5256        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5257          x_msg_count := FND_MSG_PUB.count_msg;
5258          if x_msg_count = 1 then
5259            pa_interface_utils_pub.get_messages
5260            (p_encoded        => FND_API.G_TRUE,
5261             p_msg_index      => 1,
5262             p_msg_count      => l_msg_count,
5263             p_msg_data       => l_msg_data,
5264             p_data           => l_data,
5265             p_msg_index_out  => l_msg_index_out);
5266             x_msg_data := l_data;
5267          end if;
5268          raise FND_API.G_EXC_ERROR;
5269        end if;
5270     --END IF;
5271     --3035902: process update flag changes
5272 
5273     --bug 4149392
5274     PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
5275     --end bug 4149392
5276 
5277     x_return_status := FND_API.G_RET_STS_SUCCESS;
5278 
5279     IF (p_commit = FND_API.G_TRUE) THEN
5280       COMMIT;
5281     END IF;
5282 
5283     IF (p_debug_mode = 'Y') THEN
5284       pa_debug.debug('PA_TASK_PUB1.COPY_TASK END');
5285     END IF;
5286 EXCEPTION
5287     when FND_API.G_EXC_ERROR then
5288       if p_commit = FND_API.G_TRUE then
5289          rollback to Copy_Task;
5290       end if;
5291       x_return_status := FND_API.G_RET_STS_ERROR;
5292     when FND_API.G_EXC_UNEXPECTED_ERROR then
5293       if p_commit = FND_API.G_TRUE then
5294          rollback to Copy_Task;
5295       end if;
5296       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5297       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5298                               p_procedure_name => 'COPY_TASK',
5299                               p_error_text     => SUBSTRB(SQLERRM,1,240));
5300     when OTHERS then
5301       if p_commit = FND_API.G_TRUE then
5302          rollback to Copy_Task;
5303       end if;
5304       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5305       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5306                               p_procedure_name => 'COPY_TASK',
5307                               p_error_text     => SUBSTRB(SQLERRM,1,240));
5308       raise;
5309 END Copy_Task;
5310 
5311 -- API name                      : Move_Task
5312 -- Type                          : Public procedure
5313 -- Pre-reqs                      : None
5314 -- Return Value                  : N/A
5315 -- Prameters
5316 -- p_api_version          IN    NUMBER  N   Not Null    1.0
5317 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
5318 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
5319 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
5320 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
5321 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
5322 -- p_debug_mode       IN    VARCHAR2    N   Null    N
5323 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5324 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5325 -- p_task_version_id    IN  NUMBER  N   Not Null
5326 -- p_ref_task_version_id    IN  NUMBER  N   Not Null
5327 -- p_ref_project_id         IN  NUMBER  N Null
5328 -- p_peer_or_sub    IN  VARCHAR2    N   Not Null
5329 -- prefix   IN  VARCHAR2    N   Not Null
5330 -- x_return_status  OUT     VARCHAR2    N   Null
5331 -- x_msg_count        OUT   NUMBER  N   Null
5332 -- x_msg_data         OUT   VARCHAR2    N   Null
5333 --
5334 --  History
5335 --
5336 --  23-OCT-01   Andrew Lee             -Created
5337 --
5338 --
5339 
5340 PROCEDURE MOVE_TASK_VERSION (
5341  p_api_version           IN NUMBER   := 1.0,
5342  p_init_msg_list             IN VARCHAR2 := FND_API.G_TRUE,
5343  p_commit                  IN   VARCHAR2 := FND_API.G_FALSE,
5344  p_validate_only             IN VARCHAR2 := FND_API.G_TRUE,
5345  p_validation_level    IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL,
5346  p_calling_module            IN VARCHAR2 := 'SELF_SERVICE',
5347  p_debug_mode            IN VARCHAR2 := 'N',
5348  p_max_msg_count             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5349  p_structure_version_id    IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5350  p_task_version_id     IN   NUMBER,
5351  p_ref_task_version_id     IN   NUMBER,
5352 /*4269830 : Performance Enhancements :  Start*/
5353  p_ref_project_id          IN   NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5354  p_structure_id            IN   NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5355  p_published_version       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5356  p_shared                  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5357  p_sharing_code            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5358  p_versioned		   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5359  p_wp_type		   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5360  p_fin_type		   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5361  p_weighting_basis_code    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5362  p_check_third_party_flag  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5363 /*4269830 : Performance Enhancements : End */
5364  p_peer_or_sub           IN VARCHAR2,
5365  p_record_version_number   IN NUMBER,
5366  p_called_from_bulk_api   IN VARCHAR2 := 'N' ,
5367  x_return_status             OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
5368  x_msg_count             OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
5369  x_msg_data                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5370 ) IS
5371   l_api_name                 CONSTANT VARCHAR(30) := 'MOVE_TASK_VERSION';
5372   l_api_version              CONSTANT NUMBER      := 1.0;
5373 
5374   l_return_status            VARCHAR2(1);
5375   l_msg_count                NUMBER;
5376   l_msg_data                 VARCHAR2(250);
5377   l_data                     VARCHAR2(250);
5378   l_msg_index_out            NUMBER;
5379 
5380   l_ref_display_sequence     NUMBER;
5381   l_display_sequence         NUMBER;
5382   l_ref_parent_struct_ver_id NUMBER;
5383   l_parent_struct_ver_id     NUMBER;
5384 
5385   l_parent_id                NUMBER;
5386   l_parent_task_id           NUMBER;
5387   l_parent_object_type       PA_PROJ_ELEMENT_VERSIONS.object_type%TYPE;
5388 
5389   l_project_id                  NUMBER;
5390   l_ref_task_id                 NUMBER;
5391   l_task_id                     NUMBER;
5392   l_task_record_version_number  NUMBER;
5393   l_wbs_record_version_number   NUMBER;
5394 
5395   l_record_version_number       NUMBER;
5396   l_published_version  VARCHAR2(1);
5397   l_dummy_char        VARCHAR2(1);
5398   l_structure_id      NUMBER;
5399   l_structure_ver_id  NUMBER;
5400   --l_project_id        NUMBER;
5401   --l_ref_task_id       NUMBER;
5402   --l_task_id           NUMBER;
5403 
5404 --hsiu
5405 --added for advanced structure - versioning
5406     l_versioned    VARCHAR2(1) := 'N';
5407     l_shared       VARCHAR2(1) := 'N';
5408 
5409 --end changes
5410 
5411 --hyau
5412 --added for lifecycle version
5413     l_proj_element_id  NUMBER;
5414 -- end changes
5415 
5416     CURSOR cur_struc_type( c_structure_id NUMBER )
5417     IS
5418       SELECT 'Y'
5419         FROM pa_proj_structure_types ppst
5420             ,pa_structure_types pst
5421        WHERE ppst.proj_element_id = c_structure_id
5422          AND ppst.structure_type_id = pst.structure_type_id
5423          AND pst.structure_type_class_code IN( 'FINANCIAL' );
5424 
5425     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
5426       select 'Y'
5427         from pa_proj_elem_ver_structure
5428        where proj_element_id = c_structure_id
5429          AND project_id = c_project_id
5430          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
5431 
5432 --hsiu added, for dates rollup
5433    CURSOR get_peer_tasks
5434    IS
5435      select b.object_id_to1 object_id_to1
5436        from pa_object_relationships a,
5437             pa_object_relationships b
5438       where a.object_id_to1 = p_task_version_id
5439         and a.object_type_to = 'PA_TASKS'
5440         and a.relationship_type = 'S' -- Bug # 4622939.
5441         and a.object_id_from1 = b.object_id_from1
5442         and a.object_type_from = b.object_type_from
5443         and b.object_type_to = 'PA_TASKS'
5444         and b.relationship_type = 'S' -- Bug # 4622939.
5445         and b.object_id_to1 <> p_task_version_id;
5446    c_get_peer_tasks get_peer_tasks%ROWTYPE;
5447 
5448 --Hsiu added, for dates rollup
5449   /* Bug 5768425 Start*/
5450   --l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
5451   l_tasks_ver_ids        PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
5452   l_task_cnt NUMBER 			:= 0;
5453   /* Bug 5768425 End */
5454 
5455 --hsiu added for task status rollup
5456   l_old_peer_task_id  NUMBER;
5457 
5458 --hsiu added for task status
5459   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
5460     select object_id_from1
5461       from pa_object_relationships
5462      where object_id_to1 = c_elem_ver_id
5463        and object_type_to = 'PA_TASKS'
5464        and relationship_type = 'S';
5465   l_parent_ver_id NUMBER;
5466   l_error_msg_code VARCHAR2(30);
5467 
5468 -- hyau Bug 2852753
5469    l_delete_project_allowed      VARCHAR2(1);
5470    l_update_proj_num_allowed      VARCHAR2(1);
5471    l_update_proj_name_allowed    VARCHAR2(1);
5472    l_update_proj_desc_allowed    VARCHAR2(1);
5473    l_update_proj_dates_allowed    VARCHAR2(1);
5474    l_update_proj_status_allowed  VARCHAR2(1);
5475    l_update_proj_manager_allowed  VARCHAR2(1);
5476    l_update_proj_org_allowed      VARCHAR2(1);
5477    l_add_task_allowed            VARCHAR2(1);
5478    l_delete_task_allowed          VARCHAR2(1);
5479    l_update_task_num_allowed      VARCHAR2(1);
5480    l_update_task_name_allowed    VARCHAR2(1);
5481    l_update_task_dates_allowed    VARCHAR2(1);
5482    l_update_task_desc_allowed    VARCHAR2(1);
5483    l_update_parent_task_allowed  VARCHAR2(1);
5484    l_update_task_org_allowed      VARCHAR2(1);
5485 
5486    l_err_code         NUMBER        := 0;
5487    l_err_stack        VARCHAR2(200) := NULL;
5488    l_err_stage        VARCHAR2(200) := NULL;
5489 
5490    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
5491 
5492    CURSOR get_product_code ( c_project_id NUMBER ) IS
5493    SELECT pm_product_code
5494    FROM PA_PROJECTS_ALL
5495    WHERE project_id = c_project_id;
5496 
5497    l_cur_project_id      NUMBER;
5498    CURSOR cur_proj_id
5499    IS
5500      SELECT project_id
5501        FROM pa_proj_element_versions
5502       WHERE element_version_id = p_structure_version_id;
5503 
5504 -- Merged from 85
5505 -- end hyau Bug 2852753
5506 
5507  l_old_top_task_id    NUMBER;   --bug 2967204
5508 
5509 --Bug 2947492 ( move )
5510 
5511 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
5512 --l_parent_task_id             NUMBER;
5513 l_old_parent_task_id             NUMBER;
5514 l_top_task_id                NUMBER;
5515 
5516 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
5517     SELECT parent_task_id, top_task_id FROM pa_tasks
5518      WHERE project_id = c_project_id and task_id = c_task_id;
5519 
5520 --End Bug 2947492  ( move )
5521 -- Merged from 85
5522 
5523 --bug 3053281
5524   l_wp_type              VARCHAR2(1);
5525   l_weighting_basis_Code VARCHAR2(30);
5526   l_wp_process_flag      VARCHAR2(1);
5527 --end bug 3053281
5528 --3035902: process update flag changes
5529   cursor get_task_type_id(c_proj_element_id NUMBER) IS
5530       select type_id
5531         from pa_proj_elements
5532        where proj_element_id = c_proj_element_id;
5533   l_task_type_id      NUMBER;
5534 --3035902: end process update flag changes
5535 
5536 --bug 3911698
5537 --cursor to get all child
5538   cursor get_child_ver_id(c_task_ver_id NUMBER) IS
5539     select object_id_to1
5540       from pa_object_relationships
5541      where relationship_type = 'S'
5542        and object_type_to = 'PA_TASKS'
5543      start with object_id_from1 = c_task_ver_id
5544        and object_type_from = 'PA_TASKS'
5545      connect by prior object_id_to1 = object_id_from1
5546             and prior object_type_to = object_type_from
5547             and prior relationship_type = relationship_type
5548     UNION
5549     select element_version_id
5550       from pa_proj_element_versions
5551      where element_version_id = c_task_ver_id;
5552   l_child_ver_id NUMBER;
5553 --end bug 3911698
5554 
5555 
5556 --bug 3069306
5557   Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
5558     select object_id_to1
5559       from pa_object_relationships
5560      where relationshiP_type = 'S'
5561        and object_type_to = 'PA_TASKS'
5562              start with object_id_to1 = c_task_ver_id
5563                and object_type_to = 'PA_TASKS'
5564            connect by prior object_id_from1 = object_id_to1
5565                and prior object_type_from = object_type_to
5566                and prior relationship_type = relationship_type
5567  intersect
5568     select a.object_id_to1
5569       from pa_object_relationships a, pa_proj_element_versions b
5570      where a.relationshiP_type = 'S'
5571        and a.object_id_from1 = b.parent_structure_version_id
5572        and b.element_version_id = c_task_ver_id
5573        and a.object_type_from = 'PA_STRUCTURES';
5574   l_old_par_ver_id NUMBER;
5575   l_new_par_ver_id NUMBER;
5576 --end bug 3069306
5577 
5578 --bug 3301192 fin plan changes
5579   l_lowest_task_flag1         VARCHAR2(1);
5580   l_lowest_task_flag2         VARCHAR2(1);
5581   l_fin_task_flag             VARCHAR2(1);
5582 --bug 3301192
5583 --
5584   l_ref_parent_task_ver_id    NUMBER;   --Bug 3475920
5585 
5586   /*4269830*/
5587   l_sharing_code VARCHAR2(30);
5588   l_fin_type     VARCHAR2(1);
5589   l_check_third_party_flag VARCHAR2(1);
5590   /*4269830*/
5591 
5592 BEGIN
5593 
5594 
5595   pa_debug.init_err_stack ('PA_TASK_PUB1.MOVE_TASK_VERSION');
5596 
5597   IF (p_debug_mode = 'Y') THEN
5598     pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSION begin');
5599   END IF;
5600 
5601   IF (p_commit = FND_API.G_TRUE) THEN
5602     savepoint move_task_version;
5603   END IF;
5604 
5605   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
5606     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5607   END IF;
5608 
5609   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
5610     FND_MSG_PUB.initialize;
5611   END IF;
5612 
5613   --bug 4075697
5614   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
5615   --bug 4075697
5616 
5617   IF p_called_from_bulk_api = 'Y'/*4269830*/
5618   THEN
5619       l_cur_project_id := p_ref_project_id;
5620       l_project_id := p_ref_project_id;
5621       l_structure_id   := p_structure_id  ;
5622       l_structure_ver_id := p_structure_version_id ;
5623       l_published_version := p_published_version;
5624       l_shared		  := p_shared;
5625       l_sharing_code	  := p_sharing_code;
5626       l_versioned	  := p_versioned;
5627       l_wp_type		  := p_wp_type;
5628       l_fin_type	  := p_fin_type;
5629       l_weighting_basis_code := p_weighting_basis_code;
5630       l_check_third_party_flag := p_check_third_party_flag;
5631   ELSE
5632 
5633   /* 4269830 <Existing Block> <<--A-->> */
5634   OPEN cur_proj_id;
5635   FETCH cur_proj_id INTO l_cur_project_id;
5636   CLOSE cur_proj_id;
5637 
5638   l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_cur_project_id);
5639   l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
5640   l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id,'WORKPLAN');
5641   l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_cur_project_id);
5642   l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_cur_project_id);
5643   l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(l_cur_project_id);
5644   l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_cur_project_id);
5645 
5646   END IF; /*4269830*/
5647 
5648   --bug 3911698
5649   --check if reference task is child of moving task
5650   OPEN get_child_ver_id(p_task_version_id);
5651   LOOP
5652     FETCH get_child_ver_id into l_child_ver_id;
5653     EXIT when get_child_ver_id%NOTFOUND;
5654     IF l_child_ver_id = p_ref_task_version_id THEN
5655       CLOSE get_child_ver_id;
5656       --add error PA_TSK_MV_BELOW_SELF
5657       PA_UTILS.ADD_MESSAGE('PA', 'PA_TSK_MV_BELOW_SELF');
5658       raise FND_API.G_EXC_ERROR;
5659     END IF;
5660   END LOOP;
5661   CLOSE get_child_ver_id;
5662   --end bug 3911698
5663 
5664   -- Added for FP_M changes. Bug 3305199 : xxx
5665   If l_sharing_code = 'SHARE_PARTIAL' /*4269830 : Replaced function usage with l_sharing_code*/
5666   Then
5667 
5668     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
5669         p_task_version_id       => p_task_version_id
5670       , p_ref_task_version_id   => p_ref_task_version_id
5671       , x_return_status         => x_return_status
5672       , x_msg_count             => x_msg_count
5673       , x_msg_data              => x_msg_data
5674       , x_error_msg_code        => l_error_msg_code);
5675     --Bug No 3491045
5676     --Replaced the return status value to 'S' from 'Y'
5677     IF (x_return_status <> 'S') THEN
5678        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5679                 p_msg_name       => l_error_msg_code);
5680       raise FND_API.G_EXC_ERROR;
5681     End If;
5682   End If;
5683   -- End of FP_M changes
5684 
5685   --3035902: process update flag changes
5686   l_wp_process_flag := 'N';
5687   --3035902: end process update flag changes
5688 -- hyau Bug 2852753
5689 
5690     IF  p_called_from_bulk_api = 'N' THEN
5691       IF p_calling_module = 'SELF_SERVICE' THEN
5692 
5693         OPEN get_product_code(l_cur_project_id);
5694         FETCH get_product_code INTO l_pm_product_code;
5695         CLOSE get_product_code;
5696 
5697         If l_pm_product_code IS NOT NULL THEN
5698           pa_pm_controls.Get_Project_actions_allowed
5699                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
5700                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
5701                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
5702                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
5703                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
5704                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
5705                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
5706                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
5707                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
5708                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
5709                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
5710                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
5711                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
5712                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
5713                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
5714                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
5715                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
5716                  P_ERROR_CODE                 => l_err_code,
5717          P_ERROR_STACK                    => l_err_stack,
5718          P_ERROR_STAGE                => l_err_stage );
5719 
5720           IF l_err_code <> 0 THEN
5721             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5722                                  p_msg_name       => l_err_stage);
5723           END IF;
5724       IF l_update_parent_task_allowed = 'N' THEN
5725               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5726                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
5727               raise FND_API.G_EXC_ERROR;
5728           END IF;
5729         END IF;
5730       END IF;
5731   END IF ; -- Called From Bulk API is 'N'
5732 -- end hyau Bug 2852753
5733 
5734 
5735   -- hyau
5736   -- Lifecycle Phase validation Changes. Check if task has phase associated with it
5737   IF (p_task_version_id IS NOT NULL) AND
5738        (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
5739 
5740   SELECT proj_element_id
5741   INTO l_proj_element_id
5742   FROM PA_PROJ_ELEMENT_VERSIONS
5743   WHERE element_version_id = p_task_version_id;
5744 
5745     IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
5746               l_proj_element_id)) THEN
5747       --Indenting a task with phase. Error
5748       PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_MOVE_PHASE_TASK');
5749     END IF;
5750 
5751     l_msg_count := FND_MSG_PUB.count_msg;
5752     if l_msg_count > 0 then
5753       x_msg_count := l_msg_count;
5754       if x_msg_count = 1 then
5755         pa_interface_utils_pub.get_messages
5756         (p_encoded        => FND_API.G_TRUE,
5757          p_msg_index      => 1,
5758          p_msg_count      => l_msg_count,
5759          p_msg_data       => l_msg_data,
5760          p_data           => l_data,
5761          p_msg_index_out  => l_msg_index_out);
5762         x_msg_data := l_data;
5763       end if;
5764       raise FND_API.G_EXC_ERROR;
5765     end if;
5766   END IF;
5767   -- end hyau. Lifecycle Phase validation Changes.
5768 
5769   -- get the display sequence of the reference task
5770   SELECT display_sequence, parent_structure_version_id
5771   INTO   l_ref_display_sequence, l_ref_parent_struct_ver_id
5772   FROM   PA_PROJ_ELEMENT_VERSIONS
5773   WHERE  element_version_id = p_ref_task_version_id;
5774 
5775   -- get the display sequence of the task being moved
5776   SELECT display_sequence, parent_structure_version_id
5777   INTO   l_display_sequence, l_parent_struct_ver_id
5778   FROM   PA_PROJ_ELEMENT_VERSIONS
5779   WHERE  element_version_id = p_task_version_id;
5780 
5781   -- get the parent of the task being moved
5782   SELECT object_id_from1, object_type_from
5783   INTO   l_parent_id, l_parent_object_type
5784   FROM   PA_OBJECT_RELATIONSHIPS
5785   WHERE  object_type_to = 'PA_TASKS'
5786   AND    object_id_to1 = p_task_version_id
5787   AND    relationship_type = 'S'
5788   AND    object_type_from in ('PA_STRUCTURES', 'PA_TASKS');
5789 
5790 --hsiu added, for dates rollup
5791 --need to get peer task before it has been moved.
5792   OPEN get_peer_tasks;
5793   LOOP
5794     FETCH get_peer_tasks INTO c_get_peer_tasks;
5795     EXIT WHEN get_peer_tasks%NOTFOUND;
5796     /* Bug 5768425 Start */
5797     --l_tasks_ver_ids.extend;
5798     --l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
5799     l_task_cnt := l_task_cnt + 1;
5800     l_tasks_ver_ids(l_task_cnt) := c_get_peer_tasks.object_id_to1;
5801     /* Bug 5768425 End */
5802     l_old_peer_task_id := c_get_peer_tasks.object_id_to1;
5803   END LOOP;
5804   CLOSE get_peer_tasks;
5805 
5806   if l_parent_object_type = 'PA_STRUCTURES' then
5807     l_parent_task_id := NULL;
5808   else
5809     l_parent_task_id := l_parent_id;
5810   end if;
5811 
5812   --hsiu added for task status
5813     --check if ok to move this task
5814     PA_PROJ_ELEMENTS_UTILS.check_move_task_ok(
5815       p_task_ver_id => p_task_version_id
5816      ,x_return_status => l_return_status
5817      ,x_error_message_code => l_error_msg_code
5818     );
5819     IF (l_return_status <> 'Y') THEN
5820       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5821                            p_msg_name => l_error_msg_code);
5822       raise FND_API.G_EXC_ERROR;
5823     END IF;
5824 
5825     --check if ok to create subtask
5826     IF (p_peer_or_sub = 'PEER') THEN
5827       OPEN get_parent_version_id(p_ref_task_version_id);
5828       FETCH get_parent_version_id into l_parent_ver_id;
5829       CLOSE get_parent_version_id;
5830 
5831       --bug 3069306
5832       --if financial task, check if changing parent ok
5833       IF (l_fin_type = 'Y') THEN /*4269830 : replaced Function usage with l_fin_type*/
5834         OPEN get_top_task_ver_id(l_parent_ver_id);
5835         FETCH get_top_task_ver_id into l_new_par_ver_id;
5836         CLOSE get_top_task_ver_id;
5837 
5838         OPEN get_top_task_ver_id(p_task_version_id);
5839         FETCH get_top_task_ver_id into l_old_par_ver_id;
5840         CLOSE get_top_task_Ver_id;
5841 
5842         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
5843           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5844                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
5845           raise FND_API.G_EXC_ERROR;
5846         END IF;
5847       END IF;
5848       --end bug 3069306
5849 
5850       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
5851          p_parent_task_ver_id => l_parent_ver_id
5852         ,x_return_status      => l_return_status
5853         ,x_error_message_code => l_error_msg_code
5854       );
5855 
5856       IF (l_return_status <> 'Y') THEN
5857         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5858                              p_msg_name => l_error_msg_code);
5859         raise FND_API.G_EXC_ERROR;
5860       END IF;
5861 
5862       --bug 4099488
5863       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
5864         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5865                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
5866         raise FND_API.G_EXC_ERROR;
5867       END IF;
5868       --end bug 4099488
5869     ELSE
5870       --bug 3069306
5871       --if financial task, check if changing parent ok
5872       IF (l_fin_type = 'Y') THEN /*	4269830: Replaced Function call with l_fin_type*/
5873         OPEN get_top_task_ver_id(p_ref_task_version_id);
5874         FETCH get_top_task_ver_id into l_new_par_ver_id;
5875         CLOSE get_top_task_ver_id;
5876 
5877         OPEN get_top_task_ver_id(p_task_version_id);
5878         FETCH get_top_task_ver_id into l_old_par_ver_id;
5879         CLOSE get_top_task_Ver_id;
5880 
5881         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
5882           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5883                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
5884           raise FND_API.G_EXC_ERROR;
5885         END IF;
5886       END IF;
5887       --end bug 3069306
5888 
5889       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
5890          p_parent_task_ver_id => p_ref_task_version_id
5891         ,x_return_status      => l_return_status
5892         ,x_error_message_code => l_error_msg_code
5893       );
5894 
5895       IF (l_return_status <> 'Y') THEN
5896         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5897                              p_msg_name => l_error_msg_code);
5898         raise FND_API.G_EXC_ERROR;
5899       END IF;
5900 
5901       --bug 4099488
5902       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_ref_task_version_id, p_task_version_id) = 'N' THEN
5903         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5904                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
5905         raise FND_API.G_EXC_ERROR;
5906       END IF;
5907       --end bug 4099488
5908     END IF;
5909 
5910   --end task status changes
5911 
5912   --bug 3301192 fin plan changes.
5913   --check whether the reference task was lowest task before
5914   --check the task is a lowest task bug 3301192
5915 
5916   IF l_ref_parent_struct_ver_id <> p_ref_task_version_id
5917   THEN
5918      l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_ref_task_version_id );
5919   END IF;
5920 --
5921   --Bug No 3475920
5922   IF p_peer_or_sub = 'PEER' THEN
5923      l_ref_parent_task_ver_id:=PA_PROJ_ELEMENTS_UTILS.GET_PARENT_TASK_VERSION_ID(p_ref_task_version_id);
5924   ELSE
5925      l_ref_parent_task_ver_id:=p_ref_task_version_id;
5926   END IF;
5927 --
5928   IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,l_ref_parent_task_ver_id) = 'Y' THEN
5929      PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5930                           p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
5931      RAISE FND_API.G_EXC_ERROR;
5932   END IF;
5933 --
5934   PA_TASK_PUB1.Update_Task_Version
5935   ( p_validate_only      => FND_API.G_FALSE,
5936     p_ref_task_version_id    => p_ref_task_version_id,
5937     p_peer_or_sub              => p_peer_or_sub,
5938     p_task_version_id        => p_task_version_id,
5939     p_record_version_number  => p_record_version_number,
5940     p_action                 => 'MOVE',
5941     x_return_status      => l_return_status,
5942     x_msg_count              => l_msg_count,
5943     x_msg_data             => l_msg_data );
5944 
5945     x_msg_count := FND_MSG_PUB.count_msg;
5946 
5947 --dbms_output.put_line( 'Count '|| x_msg_count );
5948 
5949   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5950     x_msg_count := FND_MSG_PUB.count_msg;
5951     IF x_msg_count = 1 then
5952       pa_interface_utils_pub.get_messages
5953       (p_encoded        => FND_API.G_TRUE,
5954        p_msg_index      => 1,
5955        p_msg_count      => l_msg_count,
5956        p_msg_data       => l_msg_data,
5957        p_data           => l_data,
5958        p_msg_index_out  => l_msg_index_out);
5959       x_msg_data := l_data;
5960     END IF;
5961     raise FND_API.G_EXC_ERROR;
5962   END IF;
5963 
5964 
5965 /*  SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
5966     FROM pa_proj_element_versions
5967    WHERE element_version_id =  p_structure_version_id
5968      AND object_type = 'PA_STRUCTURES';*/
5969 
5970   IF p_called_from_bulk_api = 'N' -- 4269830
5971   THEN
5972 
5973   SELECT proj_element_id, project_id, element_version_id INTO l_structure_id, l_project_id, l_structure_ver_id
5974     FROM pa_proj_element_versions
5975    WHERE element_version_id =  ( Select parent_structure_version_id
5976                                    from pa_proj_element_versions
5977                                   where element_version_id = p_task_version_id )
5978      AND object_type = 'PA_STRUCTURES';
5979   END IF;  -- 4269830
5980 
5981 IF p_calling_module NOT in ( 'FORMS', 'AMG' )
5982 THEN
5983 
5984   IF p_called_from_bulk_api ='N'  -- 4269830 : Already derived in BULK API
5985   then
5986 
5987   --Do financial task check
5988   --If financial
5989   OPEN cur_struc_type( l_structure_id );
5990   FETCH cur_struc_type INTO l_dummy_char;
5991   IF cur_struc_type%FOUND
5992   THEN
5993       --If structure has any published versions.
5994       l_published_version := 'N';
5995       OPEN cur_pub_versions( l_structure_id, l_project_id );
5996       FETCH cur_pub_versions INTO l_published_version;
5997       CLOSE cur_pub_versions;
5998 
5999   END IF; --4269830
6000   CLOSE cur_struc_type;--4269830
6001 
6002   END IF;--4269830
6003 
6004 --hsiu
6005 --changes for versioning
6006 /*      4269830 :
6007         This code has been moved to block tagged by <<--A-->>
6008 
6009       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
6010                                                      l_project_id);
6011       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
6012                                                   l_project_id);
6013 */
6014 
6015       IF l_fin_type = 'Y'  -- 4269830 this is equivalent to  cur_struc_type%FOUND
6016       THEN
6017 
6018       l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(l_proj_element_id); --bug 3301192 move in pa_tasks also if it exists there.
6019 
6020       IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y') OR
6021          (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
6022 	OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
6023 	THEN
6024 --      IF NVL( l_published_version, 'N' ) = 'N'
6025 --      THEN
6026 --end changes
6027 
6028             --hsiu  Fixed parent_structure_version_id condition
6029           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
6030             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
6031             FROM PA_TASKS pt,
6032                  pa_proj_elem_ver_structure ppa,
6033                  PA_PROJ_ELEMENT_VERSIONS ppev
6034            WHERE ppev.element_version_id = p_task_version_id
6035              AND ppev.project_id = ppa.project_id
6036              AND ppev.parent_structure_version_id = ppa.element_version_id
6037              AND ppev.proj_element_id = pt.task_id;
6038 
6039           SELECT proj_element_id
6040             INTO l_ref_task_id
6041             FROM PA_PROJ_ELEMENT_VERSIONS
6042            WHERE element_version_id = p_ref_task_version_id;
6043 -- merged from 85
6044            SELECT record_version_number, parent_task_id    --get old parent id for bug 2947492 (move )
6045                  ,top_task_id       --bug 2967204
6046             INTO l_record_version_number, l_old_parent_task_id
6047                  ,l_old_top_task_id --bug 2967204
6048             FROM pa_tasks
6049            WHERE task_id = l_task_id
6050              AND project_id = l_project_id;
6051 -- merged from 85
6052 
6053     x_msg_count := FND_MSG_PUB.count_msg;
6054 
6055 --dbms_output.put_line( 'before move task old '|| x_msg_count );
6056 
6057           PA_TASKS_MAINT_PUB.Move_Task(
6058                    p_reference_project_id              => l_project_id
6059                   ,p_reference_task_id                 => l_ref_task_id
6060                   ,p_project_id                        => l_project_id
6061                   ,p_task_id                           => l_task_id
6062                   ,p_peer_or_sub                       => p_peer_or_sub
6063                   ,p_record_version_number             => l_record_version_number
6064                   ,p_wbs_record_version_number         => 1      --temporarily passing 1. Lock project is commented out in PA_TASKS_MAIN_PUB.Move_Task api.
6065                   ,x_return_status                     => l_return_status
6066                   ,x_msg_count                         => l_msg_count
6067                   ,x_msg_data                          => l_msg_data );
6068 
6069     x_msg_count := FND_MSG_PUB.count_msg;
6070 
6071 --dbms_output.put_line( 'After move task old '|| x_msg_count );
6072 
6073 
6074           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6075               x_msg_count := FND_MSG_PUB.count_msg;
6076              IF x_msg_count = 1 then
6077                 pa_interface_utils_pub.get_messages
6078                 (p_encoded        => FND_API.G_TRUE,
6079                  p_msg_index      => 1,
6080                  p_msg_count      => l_msg_count,
6081                  p_msg_data       => l_msg_data,
6082                  p_data           => l_data,
6083                  p_msg_index_out  => l_msg_index_out);
6084                  x_msg_data := l_data;
6085             END IF;
6086             raise FND_API.G_EXC_ERROR;
6087          END IF;
6088 
6089 -- merged from 85
6090           --Bug 2947492   ( Move )
6091           --
6092 
6093             OPEN get_parent_task_id( l_task_id , l_project_id );
6094             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
6095             CLOSE get_parent_task_id;
6096 
6097             --bug 2967204
6098             --Cannot move out of the current hierarchy
6099               IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
6100               THEN
6101                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6102                                        p_msg_name => 'PA_CANT_CHANGE_PARENT');
6103                   raise FND_API.G_EXC_ERROR;
6104               END IF;
6105             --End bug 2967204
6106 
6107 /*
6108             --First call the check_reparent ok
6109             --This should have been called in the beginning but due to lot of complexity involved in getting
6110             --new parent task id it is decided to call this later stage as long as  we rollback the whole operation
6111             --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
6112 
6113             PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
6114                      p_task_id                    => l_task_id
6115                     ,p_old_parent_task_id         => l_old_parent_task_id
6116                     ,p_new_parent_task_id         => l_parent_task_id
6117                     ,x_return_status              => l_return_status
6118                     ,x_msg_count                  => l_msg_count
6119                     ,x_msg_data                   => l_msg_data
6120                 );
6121 
6122              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6123                 x_msg_count := FND_MSG_PUB.count_msg;
6124                 IF x_msg_count = 1 then
6125                    pa_interface_utils_pub.get_messages
6126                    (p_encoded        => FND_API.G_TRUE,
6127                     p_msg_index      => 1,
6128                     p_msg_count      => l_msg_count,
6129                     p_msg_data       => l_msg_data,
6130                     p_data           => l_data,
6131                     p_msg_index_out  => l_msg_index_out);
6132                     x_msg_data := l_data;
6133                 END IF;
6134                 raise FND_API.G_EXC_ERROR;
6135              END IF;
6136 */   --commenting out, please refer mails from venkatesh dates 22 jan 04
6137 
6138 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
6139             l_plannable_tasks_tbl(1).impacted_task_id   := l_task_id;
6140             l_plannable_tasks_tbl(1).action             := 'REPARENT';
6141             l_plannable_tasks_tbl(1).old_parent_task_id := l_old_parent_task_id;
6142             l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
6143             l_plannable_tasks_tbl(1).top_task_id        := l_top_task_id;
6144 
6145             PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
6146                     p_project_id         => l_project_id
6147                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
6148                   , x_return_status      => l_return_status
6149                   , x_msg_data           => l_msg_data
6150                   , x_msg_count          => l_msg_count
6151                 );
6152 
6153              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6154                 x_msg_count := FND_MSG_PUB.count_msg;
6155                 IF x_msg_count = 1 then
6156                    pa_interface_utils_pub.get_messages
6157                    (p_encoded        => FND_API.G_TRUE,
6158                     p_msg_index      => 1,
6159                     p_msg_count      => l_msg_count,
6160                     p_msg_data       => l_msg_data,
6161                     p_data           => l_data,
6162                     p_msg_index_out  => l_msg_index_out);
6163                     x_msg_data := l_data;
6164                 END IF;
6165              raise FND_API.G_EXC_ERROR;
6166              END IF;
6167 bug 3010538 */
6168 
6169           --End Bug 2947492  ( Move )
6170       END IF;
6171 
6172    -- END IF; 4269830
6173    -- CLOSE cur_struc_type; 4269830
6174 
6175    END IF; -- 4269830 IF l_fin_type ='Y'
6176 -- merged from 85
6177 END IF; --<<p_calling_module >>
6178 
6179 --bug 3010538 (move )
6180 --bug 3053281 --set flag if not (manual and workplan only)
6181 
6182 /*	4269830 :
6183         This code has been moved to block tagged by <<--A-->>
6184 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_parent_struct_ver_id, 'WORKPLAN');
6185 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_project_id);
6186 */
6187   --3035902: process update flag changes
6188   OPEN get_task_type_id(l_proj_element_id);
6189   FETCH get_task_type_id INTO l_task_type_id;
6190   CLOSE get_task_type_id;
6191 
6192   --set update process flag if necessary;
6193   IF (l_wp_process_flag = 'N') THEN
6194     --may need to update process flag
6195     IF ((l_shared = 'N') AND
6196         (l_wp_type = 'Y') AND
6197         (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
6198         (l_weighting_basis_code <> 'MANUAL'))
6199     THEN
6200       --split and workplan; only update if progressable task added
6201       l_wp_process_flag := 'Y';
6202     ELSIF ((l_shared = 'N') AND
6203            (l_wp_type = 'N')) THEN
6204       --split and financial; update
6205       l_wp_process_flag := 'Y';
6206     ELSIF (l_shared = 'Y') THEN
6207       l_wp_process_flag := 'Y';
6208     END IF;
6209   END IF;
6210   --3035902: end process update flag changes
6211 /* commented for process update flag changes
6212 IF (l_shared = 'N') AND
6213    (l_wp_type = 'Y') AND
6214    (l_weighting_basis_Code = 'MANUAL') THEN
6215   --do not set the flag to 'Y'
6216   NULL;
6217 ELSE
6218 */
6219   --3035902: process update flag changes
6220   --Bug No 3450684 SMukka Commented if condition
6221 --  IF (l_wp_process_flag = 'Y') THEN
6222   --set the flag
6223    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
6224    (
6225       p_calling_context       => 'SELF_SERVICE'
6226      ,p_project_id            => l_project_id
6227      ,p_structure_version_id  => l_parent_struct_ver_id
6228      ,p_update_wbs_flag       => 'Y'
6229      ,x_return_status         => l_return_status
6230      ,x_msg_count             => l_msg_count
6231      ,x_msg_data              => l_msg_data);
6232 
6233    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6234      x_msg_count := FND_MSG_PUB.count_msg;
6235      if x_msg_count = 1 then
6236        pa_interface_utils_pub.get_messages
6237        (p_encoded        => FND_API.G_TRUE,
6238         p_msg_index      => 1,
6239         p_msg_count      => l_msg_count,
6240         p_msg_data       => l_msg_data,
6241         p_data           => l_data,
6242         p_msg_index_out  => l_msg_index_out);
6243         x_msg_data := l_data;
6244      end if;
6245      raise FND_API.G_EXC_ERROR;
6246    end if;
6247   --3035902: end process update flag changes
6248 --END IF;
6249 
6250 
6251    IF l_fin_type = 'Y' /*     4269830: Replaced Function call with l_fin_type*/
6252    THEN
6253        IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and  l_published_version = 'N' ) THEN
6254    --Move
6255        pa_fp_refresh_elements_pub.set_process_flag_proj(
6256              p_project_id               => l_project_id
6257             ,p_request_id               => null
6258             ,p_process_code             => null
6259             ,p_refresh_required_flag    => 'Y'
6260             ,x_return_status            => l_return_status
6261             ,x_msg_count                => l_msg_count
6262             ,x_msg_data                 => l_msg_data );
6263 
6264         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6265            x_msg_count := FND_MSG_PUB.count_msg;
6266            if x_msg_count = 1 then
6267              pa_interface_utils_pub.get_messages
6268             (p_encoded        => FND_API.G_TRUE,
6269              p_msg_index      => 1,
6270              p_msg_count      => l_msg_count,
6271              p_msg_data       => l_msg_data,
6272              p_data           => l_data,
6273              p_msg_index_out  => l_msg_index_out);
6274              x_msg_data := l_data;
6275            end if;
6276            raise FND_API.G_EXC_ERROR;
6277         end if;
6278       END IF;
6279    END IF;
6280 
6281 
6282 --End bug 3010538 (move)
6283 
6284 
6285 --Hsiu added for date rollup; workplan only
6286 --dbms_output.put_line('check structure version type '||l_structure_ver_id);
6287   IF l_wp_type = 'Y' then /*4269830 Function call replaced by l_wp_type*/
6288 
6289     -- Added for FP_M changes Bug 3305199 : Bhumesh
6290     If l_check_third_party_flag  = 'Y' Then /*4269830 Function call replaced by l_check_third_party_flag*/
6291 
6292        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
6293           p_structure_version_id => P_Structure_Version_ID
6294      ,p_dirty_flag           => 'Y'             --bug 3902282
6295      ,x_return_status        => x_return_status
6296      ,x_msg_count            => x_msg_count
6297      ,x_msg_data             => x_msg_data
6298        );
6299 
6300        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
6301          x_msg_count := FND_MSG_PUB.count_msg;
6302          If x_msg_count = 1 then
6303            pa_interface_utils_pub.get_messages
6304            (p_encoded        => FND_API.G_TRUE,
6305             p_msg_index      => 1,
6306             p_msg_count      => l_msg_count,
6307             p_msg_data       => l_msg_data,
6308             p_data           => l_data,
6309             p_msg_index_out  => l_msg_index_out);
6310             x_msg_data := l_data;
6311          End If;
6312          raise FND_API.G_EXC_ERROR;
6313        End If;
6314     End If;
6315     -- End of FP_M changes
6316 
6317      /* Bug 5768425 Start */
6318     --l_tasks_ver_ids.extend;
6319     --l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6320     l_task_cnt := l_task_cnt + 1;
6321     l_tasks_ver_ids(l_task_cnt) := p_task_version_id;
6322 
6323     --PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6324     PA_STRUCT_TASK_ROLLUP_PUB.TASKS_ROLLUP_UNLIMITED(
6325                        p_commit => FND_API.G_FALSE,
6326                        p_element_versions => l_tasks_ver_ids,
6327                        x_return_status => l_return_status,
6328                        x_msg_count => l_msg_count,
6329                        x_msg_data => l_msg_data);
6330 
6331     /* Bug 5768425 End */
6332 
6333      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6334        x_msg_count := FND_MSG_PUB.count_msg;
6335        if x_msg_count = 1 then
6336          pa_interface_utils_pub.get_messages
6337          (p_encoded        => FND_API.G_TRUE,
6338           p_msg_index      => 1,
6339           p_msg_count      => l_msg_count,
6340           p_msg_data       => l_msg_data,
6341           p_data           => l_data,
6342           p_msg_index_out  => l_msg_index_out);
6343           x_msg_data := l_data;
6344        end if;
6345        raise FND_API.G_EXC_ERROR;
6346      end if;
6347 
6348 --hsiu added for task status
6349 --if versioning is off, rollup.
6350      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
6351        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
6352                   p_structure_version_id => l_structure_ver_id
6353                  ,p_element_version_id => p_task_version_id
6354                  ,x_return_status => l_return_status
6355                  ,x_msg_count => l_msg_count
6356                  ,x_msg_data => l_msg_data
6357        );
6358 
6359        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6360          x_msg_count := FND_MSG_PUB.count_msg;
6361          if x_msg_count = 1 then
6362            pa_interface_utils_pub.get_messages
6363            (p_encoded        => FND_API.G_TRUE,
6364             p_msg_index      => 1,
6365             p_msg_count      => l_msg_count,
6366             p_msg_data       => l_msg_data,
6367             p_data           => l_data,
6368             p_msg_index_out  => l_msg_index_out);
6369             x_msg_data := l_data;
6370          end if;
6371          raise FND_API.G_EXC_ERROR;
6372        end if;
6373 
6374        IF (l_old_peer_task_id IS NOT NULL) THEN
6375          PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
6376                   p_structure_version_id => l_structure_ver_id
6377                  ,p_element_version_id => l_old_peer_task_id
6378                  ,x_return_status => l_return_status
6379                  ,x_msg_count => l_msg_count
6380                  ,x_msg_data => l_msg_data
6381          );
6382 
6383          if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6384            x_msg_count := FND_MSG_PUB.count_msg;
6385            if x_msg_count = 1 then
6386              pa_interface_utils_pub.get_messages
6387              (p_encoded        => FND_API.G_TRUE,
6388               p_msg_index      => 1,
6389               p_msg_count      => l_msg_count,
6390               p_msg_data       => l_msg_data,
6391               p_data           => l_data,
6392               p_msg_index_out  => l_msg_index_out);
6393               x_msg_data := l_data;
6394            end if;
6395            raise FND_API.G_EXC_ERROR;
6396          end if;
6397        END IF;
6398 
6399      END IF;
6400 
6401 --end task status changes
6402 
6403   END IF;
6404 
6405 --bug 3301192  fin plan changes
6406 declare
6407 /* Bug #: 3305199 SMukka                                                         */
6408 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
6409 /* l_task_ver_ids2              PA_PLSQL_DATATYPES.IdTabTyp;                     */
6410 l_task_ver_ids2              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
6411 /*l_wp_type                    VARCHAR2(1); Commented for 4269830 - This value is already derived*/
6412 begin
6413   /*4269830 Commented for 4269830 - This value is already derived
6414   l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_ver_id, 'WORKPLAN');
6415    */
6416   IF l_wp_type = 'Y'
6417      AND l_ref_parent_struct_ver_id <> p_ref_task_version_id /* make sure that the reference is not a str ver */
6418   THEN
6419       l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_ref_task_version_id );
6420       IF l_lowest_task_flag1 = 'Y' AND
6421          l_lowest_task_flag2 = 'N'
6422       THEN
6423            l_task_ver_ids2.extend(1); /* Venky */
6424            l_task_ver_ids2(1) := p_ref_task_version_id;
6425            /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
6426            /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
6427            DECLARE
6428              --p1 bug 3888432
6429              l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
6430              CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
6431                SELECT resource_assignment_id
6432                  FROM pa_resource_assignments
6433                 WHERE wbs_element_Version_id = c_task_ver_id
6434                   AND ta_display_flag = 'N';
6435              l_assign_id    NUMBER := NULL;
6436            BEGIN
6437              OPEN get_assignment_id(p_ref_task_version_id);
6438              FETCH get_assignment_id into l_assign_id;
6439              CLOSE get_assignment_id;
6440 
6441              IF (l_assign_id IS NOT NULL) THEN
6442                l_assign_ids.extend(1);
6443                l_assign_ids(1) := l_assign_id;
6444                pa_fp_planning_transaction_pub.delete_planning_transactions
6445                (
6446                 p_context                      => 'WORKPLAN'
6447                ,p_task_or_res                  => 'ASSIGNMENT'
6448 --               ,p_element_version_id_tbl       => l_task_ver_ids2
6449 --              ,p_maintain_reporting_lines     => 'Y'
6450                ,p_resource_assignment_tbl => l_assign_ids
6451                ,x_return_status                => l_return_status
6452                ,x_msg_count                    => l_msg_count
6453                ,x_msg_data                     => l_msg_data
6454                );
6455              END IF;
6456            EXCEPTION
6457               WHEN OTHERS THEN
6458                    fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
6459                                            p_procedure_name => 'MOVE_TASK_VERSION',
6460                                            p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
6461               RAISE FND_API.G_EXC_ERROR;
6462            END;
6463            if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6464               x_msg_count := FND_MSG_PUB.count_msg;
6465              if x_msg_count = 1 then
6466                 pa_interface_utils_pub.get_messages
6467                (p_encoded        => FND_API.G_TRUE,
6468                 p_msg_index      => 1,
6469                 p_msg_count      => l_msg_count,
6470                 p_msg_data       => l_msg_data,
6471                 p_data           => l_data,
6472                 p_msg_index_out  => l_msg_index_out);
6473                 x_msg_data := l_data;
6474              end if;
6475              raise FND_API.G_EXC_ERROR;
6476             end if;
6477       END IF;
6478   END IF;
6479 end;
6480 
6481   --bug 4149392
6482   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
6483   --end bug 4149392
6484 
6485   x_return_status := FND_API.G_RET_STS_SUCCESS;
6486 
6487   IF (p_commit = FND_API.G_TRUE) THEN
6488     COMMIT;
6489   END IF;
6490 
6491   IF (p_debug_mode = 'Y') THEN
6492     pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSION END');
6493   END IF;
6494 EXCEPTION
6495   when FND_API.G_EXC_ERROR then
6496     if p_commit = FND_API.G_TRUE then
6497       rollback to move_task_version;
6498     end if;
6499     x_return_status := FND_API.G_RET_STS_ERROR;
6500   when FND_API.G_EXC_UNEXPECTED_ERROR then
6501     if p_commit = FND_API.G_TRUE then
6502       rollback to move_task_version;
6503     end if;
6504     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6505     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
6506                             p_procedure_name => 'MOVE_TASK_VERSION',
6507                             p_error_text     => SUBSTRB(SQLERRM,1,240));
6508   when OTHERS then
6509     if p_commit = FND_API.G_TRUE then
6510       rollback to move_task_version;
6511     end if;
6512     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6513     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
6514                             p_procedure_name => 'MOVE_TASK_VERSION',
6515                             p_error_text     => SUBSTRB(SQLERRM,1,240));
6516     raise;
6517 END Move_Task_version;
6518 
6519 -- API name                      : Indent_Task_Version
6520 -- Type                          : Public procedure
6521 -- Pre-reqs                      : None
6522 -- Return Value                  : N/A
6523 -- Prameters
6524 -- p_api_version          IN    NUMBER  N   Not Null    1.0
6525 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
6526 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
6527 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
6528 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
6529 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
6530 -- p_debug_mode       IN    VARCHAR2    N   Null    N
6531 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6532 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6533 -- p_task_version_id    IN  NUMBER  N   Not Null
6534 -- x_return_status  OUT     VARCHAR2    N   Null
6535 -- x_msg_count        OUT   NUMBER  N   Null
6536 -- x_msg_data         OUT   VARCHAR2    N   Null
6537 --
6538 --  History
6539 --
6540 --  23-OCT-01   Andrew Lee             -Created
6541 --
6542 --
6543 
6544 PROCEDURE INDENT_TASK_VERSION (
6545  p_api_version            IN    NUMBER   :=1.0,
6546  p_init_msg_list            IN  VARCHAR2 :=FND_API.G_TRUE,
6547  p_commit                   IN  VARCHAR2 :=FND_API.G_FALSE,
6548  p_validate_only            IN  VARCHAR2 :=FND_API.G_TRUE,
6549  p_validation_level         IN  NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
6550  p_calling_module           IN  VARCHAR2 :='SELF_SERVICE',
6551  p_debug_mode             IN    VARCHAR2 :='N',
6552  p_max_msg_count            IN  NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6553  p_structure_version_id     IN      NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6554  p_task_version_id          IN  NUMBER,
6555  p_record_version_number    IN      NUMBER,
6556  x_return_status            OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6557  x_msg_count              OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
6558  x_msg_data                 OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6559 ) IS
6560 
6561 
6562   l_api_name               CONSTANT VARCHAR(30) := 'INDENT_TASK_VERSION';
6563   l_api_version            CONSTANT NUMBER      := 1.0;
6564 
6565   l_wbs_level              NUMBER;
6566   l_display_sequence       NUMBER;
6567   l_prev_wbs_level         NUMBER;
6568   l_prev_display_sequence  NUMBER;
6569   l_ref_task_version_id    NUMBER;
6570   l_peer_or_sub            VARCHAR2(30);
6571   l_parent_structure_version_id NUMBER;
6572 
6573   l_return_status            VARCHAR2(1);
6574   l_msg_count                NUMBER;
6575   l_msg_data                 VARCHAR2(250);
6576   l_data                     VARCHAR2(250);
6577   l_msg_index_out            NUMBER;
6578 
6579   l_project_id                  NUMBER;
6580   l_structure_id                NUMBER;
6581   l_ref_task_id                 NUMBER;
6582   l_task_id                     NUMBER;
6583   l_task_record_version_number  NUMBER;
6584   l_wbs_record_version_number   NUMBER;
6585   l_dummy_char                  VARCHAR2(1);
6586   l_published_version           VARCHAR2(1);
6587 
6588 --hsiu
6589 --added for advanced structure - versioning
6590     l_versioned    VARCHAR2(1) := 'N';
6591     l_shared       VARCHAR2(1) := 'N';
6592 --end changes
6593 
6594 --hyau
6595 --added for lifecycle version
6596     l_proj_element_id  NUMBER;
6597 -- end changes
6598 
6599     CURSOR cur_struc_type( c_structure_id NUMBER )
6600     IS
6601       SELECT 'Y'
6602         FROM pa_proj_structure_types ppst
6603             ,pa_structure_types pst
6604        WHERE ppst.proj_element_id = c_structure_id
6605          AND ppst.structure_type_id = pst.structure_type_id
6606          AND pst.structure_type_class_code IN( 'FINANCIAL' );
6607 
6608     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
6609       select 'Y'
6610         from pa_proj_elem_ver_structure
6611        where proj_element_id = c_structure_id
6612          AND project_id = c_project_id
6613          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
6614 
6615 --Hsiu added for date rollup
6616   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6617 
6618 --hsiu added for task status
6619   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
6620     select object_id_from1
6621       from pa_object_relationships
6622      where object_id_to1 = c_elem_ver_id
6623        and object_type_to = 'PA_TASKS'
6624        and relationship_type = 'S';
6625   l_parent_ver_id NUMBER;
6626   l_error_msg_code VARCHAR2(30);
6627 
6628 BEGIN
6629   pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_TASK_VERSION');
6630 
6631   IF (p_debug_mode = 'Y') THEN
6632     pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION begin');
6633   END IF;
6634 
6635   IF (p_commit = FND_API.G_TRUE) THEN
6636     savepoint indent_task_version;
6637   END IF;
6638 
6639   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
6640     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6641   END IF;
6642 
6643   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
6644     FND_MSG_PUB.initialize;
6645   END IF;
6646 
6647 ----dbms_output.put_line( 'Indent Task Stage 1 ' );
6648 --hsiu
6649 --added on 08-JAN-2002
6650 --check if task are linked task
6651   IF (p_structure_version_id IS NOT NULL) AND
6652        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6653     IF ('N' = pa_proj_elements_utils.check_task_in_structure(
6654           p_structure_version_id,
6655           p_task_version_id)) THEN
6656       --deleting linked task. Error
6657       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
6658     END IF;
6659 
6660     l_msg_count := FND_MSG_PUB.count_msg;
6661     if l_msg_count > 0 then
6662       x_msg_count := l_msg_count;
6663       if x_msg_count = 1 then
6664         pa_interface_utils_pub.get_messages
6665         (p_encoded        => FND_API.G_TRUE,
6666          p_msg_index      => 1,
6667          p_msg_count      => l_msg_count,
6668          p_msg_data       => l_msg_data,
6669          p_data           => l_data,
6670          p_msg_index_out  => l_msg_index_out);
6671         x_msg_data := l_data;
6672       end if;
6673       raise FND_API.G_EXC_ERROR;
6674     end if;
6675   END IF;
6676 
6677   -- hyau
6678   -- Lifecycle Phase validation Changes. Check if task has phase associated with it
6679   IF (p_task_version_id IS NOT NULL) AND
6680        (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6681 
6682   SELECT proj_element_id, wbs_level, display_sequence, parent_structure_version_id
6683   INTO l_proj_element_id, l_wbs_level, l_display_sequence, l_parent_structure_version_id
6684   FROM PA_PROJ_ELEMENT_VERSIONS
6685   WHERE element_version_id = p_task_version_id;
6686 
6687     IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
6688               l_proj_element_id)) THEN
6689       --Indenting a task with phase. Error
6690       PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
6691     END IF;
6692 
6693     l_msg_count := FND_MSG_PUB.count_msg;
6694     if l_msg_count > 0 then
6695       x_msg_count := l_msg_count;
6696       if x_msg_count = 1 then
6697         pa_interface_utils_pub.get_messages
6698         (p_encoded        => FND_API.G_TRUE,
6699          p_msg_index      => 1,
6700          p_msg_count      => l_msg_count,
6701          p_msg_data       => l_msg_data,
6702          p_data           => l_data,
6703          p_msg_index_out  => l_msg_index_out);
6704         x_msg_data := l_data;
6705       end if;
6706       raise FND_API.G_EXC_ERROR;
6707     end if;
6708   END IF;
6709   -- end hyau. Lifecycle Phase validation Changes.
6710 
6711 --dbms_output.put_line( 'Indent Task Stage 2 ' );
6712 
6713 
6714 /*   Moved up for performance bug 2832807
6715   SELECT wbs_level, display_sequence, parent_structure_version_id
6716   INTO l_wbs_level, l_display_sequence, l_parent_structure_version_id
6717   FROM PA_PROJ_ELEMENT_VERSIONS
6718   WHERE element_version_id = p_task_version_id;
6719 */
6720 
6721 --dbms_output.put_line( 'Indent Task Stage 3 ' );
6722 
6723 
6724   if l_display_sequence = 1 then
6725     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
6726                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
6727   end if;
6728 
6729 --dbms_output.put_line( 'Indent Task Stage 4 ' );
6730 
6731 --need to specify parent structure version id
6732   SELECT wbs_level, element_version_id
6733   INTO l_prev_wbs_level, l_ref_task_version_id
6734   FROM PA_PROJ_ELEMENT_VERSIONS
6735   WHERE display_sequence = l_display_sequence - 1
6736     AND parent_structure_version_id = l_parent_structure_version_id;
6737 
6738 --dbms_output.put_line( 'Indent Task Stage 5 ' );
6739 
6740 
6741   if l_wbs_level > l_prev_wbs_level then
6742     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
6743                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
6744   end if;
6745 
6746   l_msg_count := FND_MSG_PUB.count_msg;
6747   if l_msg_count > 0 then
6748     x_msg_count := l_msg_count;
6749     if x_msg_count = 1 then
6750       pa_interface_utils_pub.get_messages
6751       (p_encoded        => FND_API.G_TRUE,
6752        p_msg_index      => 1,
6753        p_msg_count      => l_msg_count,
6754        p_msg_data       => l_msg_data,
6755        p_data           => l_data,
6756        p_msg_index_out  => l_msg_index_out);
6757       x_msg_data := l_data;
6758     end if;
6759     raise FND_API.G_EXC_ERROR;
6760   end if;
6761 
6762 --dbms_output.put_line( 'Indent Task Stage 6 ' );
6763 
6764   if l_wbs_level = l_prev_wbs_level then
6765     l_peer_or_sub := 'SUB';
6766   else
6767     l_peer_or_sub := 'PEER';
6768 
6769 --dbms_output.put_line( 'Indent Task Stage 7 ' );
6770 
6771 --need to specify which structure version
6772 --need to specify parent in the inner select statement
6773     SELECT element_version_id
6774     INTO l_ref_task_version_id
6775     FROM PA_PROJ_ELEMENT_VERSIONS
6776     WHERE wbs_level = l_wbs_level + 1
6777     AND   object_type = 'PA_TASKS'
6778     AND   display_sequence < l_display_sequence
6779     AND   parent_structure_version_id = l_parent_structure_version_id
6780     AND   display_sequence =
6781           (SELECT max(display_sequence)
6782            FROM PA_PROJ_ELEMENT_VERSIONS
6783            WHERE wbs_level = l_wbs_level + 1
6784            AND   object_type = 'PA_TASKS'
6785            AND   display_sequence < l_display_sequence
6786            AND parent_structure_version_id = l_parent_structure_version_id);
6787 --dbms_output.put_line( 'Indent Task Stage 8 ' );
6788 
6789   end if;
6790 
6791 
6792     --hsiu added for task status
6793     --Check if ok to indent this task
6794     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
6795          p_task_ver_id => p_task_version_id
6796         ,x_return_status      => l_return_status
6797         ,x_error_message_code => l_error_msg_code
6798     );
6799 
6800     IF (l_return_status <> 'Y') THEN
6801         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6802                              p_msg_name => l_error_msg_code);
6803         raise FND_API.G_EXC_ERROR;
6804     END IF;
6805 
6806     --check if ok to create subtask
6807     IF (l_peer_or_sub = 'PEER') THEN
6808       OPEN get_parent_version_id(l_ref_task_version_id);
6809       FETCH get_parent_version_id into l_parent_ver_id;
6810       CLOSE get_parent_version_id;
6811       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
6812          p_parent_task_ver_id => l_parent_ver_id
6813         ,x_return_status      => l_return_status
6814         ,x_error_message_code => l_error_msg_code
6815       );
6816 
6817       IF (l_return_status <> 'Y') THEN
6818         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6819                              p_msg_name => l_error_msg_code);
6820         raise FND_API.G_EXC_ERROR;
6821       END IF;
6822     ELSE
6823       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
6824          p_parent_task_ver_id => l_ref_task_version_id
6825         ,x_return_status      => l_return_status
6826         ,x_error_message_code => l_error_msg_code
6827       );
6828 
6829       IF (l_return_status <> 'Y') THEN
6830         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6831                              p_msg_name => l_error_msg_code);
6832         raise FND_API.G_EXC_ERROR;
6833       END IF;
6834     END IF;
6835 
6836   --end task status changes
6837 
6838 
6839 --dbms_output.put_line( 'Indent Task Stage 9 ' );
6840 
6841   PA_TASK_PUB1.Update_Task_Version
6842   ( p_validate_only      => FND_API.G_FALSE,
6843     p_ref_task_version_id    => l_ref_task_version_id,
6844     p_peer_or_sub              => l_peer_or_sub,
6845     p_task_version_id        => p_task_version_id,
6846     p_record_version_number  => p_record_version_number,
6847     x_return_status          => l_return_status,
6848     x_msg_count              => l_msg_count,
6849     x_msg_data               => l_msg_data );
6850 
6851 --dbms_output.put_line( 'Indent Task Stage 10 ' );
6852 
6853 
6854   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6855     x_msg_count := FND_MSG_PUB.count_msg;
6856     IF x_msg_count = 1 then
6857       pa_interface_utils_pub.get_messages
6858       (p_encoded        => FND_API.G_TRUE,
6859        p_msg_index      => 1,
6860        p_msg_count      => l_msg_count,
6861        p_msg_data       => l_msg_data,
6862        p_data           => l_data,
6863        p_msg_index_out  => l_msg_index_out);
6864       x_msg_data := l_data;
6865     END IF;
6866     raise FND_API.G_EXC_ERROR;
6867   END IF;
6868 
6869 
6870 --dbms_output.put_line( 'Indent Task Stage 11 ' );
6871 
6872   -- Update WBS numbers
6873   SELECT parent_structure_version_id
6874   INTO l_parent_structure_version_id
6875   FROM PA_PROJ_ELEMENT_VERSIONS
6876   WHERE element_version_id = p_task_version_id;
6877 
6878 --dbms_output.put_line( 'Indent Task Stage 12 ' );
6879 
6880 
6881   PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
6882   ( p_commit                   => p_commit
6883    ,p_debug_mode               => p_debug_mode
6884    ,p_parent_structure_ver_id  => l_parent_structure_version_id
6885    ,p_task_id                  => p_task_version_id
6886    ,p_display_seq              => l_display_sequence
6887    ,p_action                   => 'INDENT'
6888    ,p_parent_task_id           => NULL
6889    ,x_return_status            => l_return_status );
6890 
6891 
6892   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
6893     FROM pa_proj_element_versions
6894    WHERE element_version_id =  ( Select parent_structure_version_id
6895                                    from pa_proj_element_versions
6896                                   where element_version_id = p_task_version_id )
6897      AND object_type = 'PA_STRUCTURES';
6898 
6899 
6900   --Do financial task check
6901   --If financial
6902   OPEN cur_struc_type( l_structure_id );
6903   FETCH cur_struc_type INTO l_dummy_char;
6904   IF cur_struc_type%FOUND
6905   THEN
6906       --If structure has any published versions.
6907       l_published_version := 'N';
6908       OPEN cur_pub_versions( l_structure_id, l_project_id );
6909       FETCH cur_pub_versions INTO l_published_version;
6910       CLOSE cur_pub_versions;
6911 
6912 --hsiu
6913 --changes for versioning
6914       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
6915                                                      l_project_id);
6916       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
6917                                                   l_project_id);
6918 
6919       IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y')
6920       OR ((l_published_version = 'Y') AND (l_shared = 'N')) -- Bug # 5064340. -- To accomodate split financial tasks.
6921       THEN
6922 --      IF NVL( l_published_version, 'N' ) = 'N'
6923 --      THEN
6924 --end changes
6925 
6926           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
6927             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
6928             FROM PA_TASKS pt,
6929                  pa_proj_elem_ver_structure ppa,
6930                  PA_PROJ_ELEMENT_VERSIONS ppev
6931            WHERE ppev.element_version_id = p_task_version_id
6932              AND ppev.parent_structure_version_id = ppa.element_version_id
6933              AND ppev.project_id = ppa.project_id
6934              AND ppev.proj_element_id = pt.task_id;
6935 
6936           SELECT proj_element_id
6937             INTO l_ref_task_id
6938             FROM PA_PROJ_ELEMENT_VERSIONS
6939            WHERE element_version_id = l_ref_task_version_id;
6940 
6941           SELECT record_version_number INTO l_task_record_version_number
6942             FROM pa_tasks
6943            WHERE task_id = l_task_id
6944              AND project_id = l_project_id;
6945 
6946 
6947           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
6948                          p_project_id                        => l_project_id
6949                         ,p_task_id                           => l_task_id
6950                         ,p_edit_mode                         => 'INDENT'
6951                         ,p_record_version_number             => l_task_record_version_number
6952                         ,p_wbs_record_version_number         => 1
6953                         ,x_return_status                     => l_return_status
6954                         ,x_msg_count                         => l_msg_count
6955                         ,x_msg_data                          => l_msg_data );
6956 
6957 --dbms_output.put_line( 'Indent Task Stage 19 ' );
6958 
6959       END IF;
6960   END IF;
6961   CLOSE cur_struc_type;
6962 
6963   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6964     x_msg_count := FND_MSG_PUB.count_msg;
6965     IF x_msg_count = 1 then
6966       pa_interface_utils_pub.get_messages
6967       (p_encoded        => FND_API.G_TRUE,
6968        p_msg_index      => 1,
6969        p_msg_count      => l_msg_count,
6970        p_msg_data       => l_msg_data,
6971        p_data           => l_data,
6972        p_msg_index_out  => l_msg_index_out);
6973       x_msg_data := l_data;
6974     END IF;
6975     raise FND_API.G_EXC_ERROR;
6976   END IF;
6977 
6978 --Hsiu added for date rollup; workplan only
6979 
6980   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(l_parent_structure_version_id, 'WORKPLAN') = 'Y' then
6981     l_tasks_ver_ids.extend;
6982     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6983 
6984     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6985                        p_commit => FND_API.G_FALSE,
6986                        p_element_versions => l_tasks_ver_ids,
6987                        x_return_status => l_return_status,
6988                        x_msg_count => l_msg_count,
6989                        x_msg_data => l_msg_data);
6990 
6991      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6992        x_msg_count := FND_MSG_PUB.count_msg;
6993        if x_msg_count = 1 then
6994          pa_interface_utils_pub.get_messages
6995          (p_encoded        => FND_API.G_TRUE,
6996           p_msg_index      => 1,
6997           p_msg_count      => l_msg_count,
6998           p_msg_data       => l_msg_data,
6999           p_data           => l_data,
7000           p_msg_index_out  => l_msg_index_out);
7001           x_msg_data := l_data;
7002        end if;
7003        raise FND_API.G_EXC_ERROR;
7004      end if;
7005 
7006 --hsiu added for task status
7007 --if versioning is off, rollup.
7008      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
7009        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
7010                   p_structure_version_id => p_structure_version_id
7011                  ,p_element_version_id => p_task_version_id
7012                  ,x_return_status => l_return_status
7013                  ,x_msg_count => l_msg_count
7014                  ,x_msg_data => l_msg_data
7015        );
7016 
7017        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7018          x_msg_count := FND_MSG_PUB.count_msg;
7019          if x_msg_count = 1 then
7020            pa_interface_utils_pub.get_messages
7021            (p_encoded        => FND_API.G_TRUE,
7022             p_msg_index      => 1,
7023             p_msg_count      => l_msg_count,
7024             p_msg_data       => l_msg_data,
7025             p_data           => l_data,
7026             p_msg_index_out  => l_msg_index_out);
7027             x_msg_data := l_data;
7028          end if;
7029          raise FND_API.G_EXC_ERROR;
7030        end if;
7031      END IF;
7032 
7033 --end task status changes
7034 
7035   END IF;
7036 
7037   x_return_status := FND_API.G_RET_STS_SUCCESS;
7038 
7039   IF (p_commit = FND_API.G_TRUE) THEN
7040     COMMIT;
7041   END IF;
7042 
7043   IF (p_debug_mode = 'Y') THEN
7044     pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION END');
7045   END IF;
7046 
7047 EXCEPTION
7048   when FND_API.G_EXC_ERROR then
7049     if p_commit = FND_API.G_TRUE then
7050       rollback to indent_task_version;
7051     end if;
7052     x_return_status := FND_API.G_RET_STS_ERROR;
7053   when FND_API.G_EXC_UNEXPECTED_ERROR then
7054     if p_commit = FND_API.G_TRUE then
7055       rollback to indent_task_version;
7056     end if;
7057     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7058     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
7059                             p_procedure_name => 'INDENT_TASK_VERSION',
7060                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7061   when OTHERS then
7062     if p_commit = FND_API.G_TRUE then
7063       rollback to indent_task_version;
7064     end if;
7065     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7066     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
7067                             p_procedure_name => 'INDENT_TASK_VERSION',
7068                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7069     raise;
7070 
7071 END Indent_Task_Version;
7072 
7073 
7074 -- API name                      : Outdent_Task_Version
7075 -- Type                          : Public procedure
7076 -- Pre-reqs                      : None
7077 -- Return Value                  : N/A
7078 -- Prameters
7079 -- p_api_version          IN    NUMBER  N   Not Null    1.0
7080 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
7081 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
7082 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
7083 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
7084 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
7085 -- p_debug_mode       IN    VARCHAR2    N   Null    N
7086 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7087 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7088 -- p_task_version_id    IN  NUMBER  N   Not Null
7089 -- x_return_status  OUT     VARCHAR2    N   Null
7090 -- x_msg_count        OUT   NUMBER  N   Null
7091 -- x_msg_data         OUT   VARCHAR2    N   Null
7092 --
7093 --  History
7094 --
7095 --  23-OCT-01   Andrew Lee             -Created
7096 --
7097 --
7098 
7099 PROCEDURE OUTDENT_TASK_VERSION (
7100  p_api_version            IN    NUMBER   :=1.0,
7101  p_init_msg_list          IN    VARCHAR2 :=FND_API.G_TRUE,
7102  p_commit             IN    VARCHAR2 :=FND_API.G_FALSE,
7103  p_validate_only          IN    VARCHAR2 :=FND_API.G_TRUE,
7104  p_validation_level       IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
7105  p_calling_module         IN    VARCHAR2 :='SELF_SERVICE',
7106  p_debug_mode             IN    VARCHAR2 :='N',
7107  p_max_msg_count          IN    NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7108  p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7109  p_task_version_id        IN    NUMBER,
7110  p_record_version_number  IN    NUMBER,
7111  x_return_status         OUT    NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
7112  x_msg_count             OUT    NOCOPY NUMBER, --File.Sql.39 bug 4440895
7113  x_msg_data          OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7114 )
7115 IS
7116 
7117   l_api_name                      CONSTANT VARCHAR(30) := 'OUTDENT_TASK_VERSION';
7118   l_api_version                   CONSTANT NUMBER      := 1.0;
7119 
7120   l_wbs_level                     NUMBER;
7121   l_display_sequence              NUMBER;
7122   l_ref_task_version_id           NUMBER;
7123   l_parent_structure_version_id   NUMBER;
7124 
7125   l_return_status            VARCHAR2(1);
7126   l_msg_count                NUMBER;
7127   l_msg_data                 VARCHAR2(250);
7128   l_data                     VARCHAR2(250);
7129   l_msg_index_out            NUMBER;
7130 
7131   l_project_id                  NUMBER;
7132   l_ref_task_id                 NUMBER;
7133   l_task_id                     NUMBER;
7134   l_task_record_version_number  NUMBER;
7135   l_wbs_record_version_number   NUMBER;
7136   l_dummy_char                  VARCHAR2(1);
7137   l_published_version           VARCHAR2(1);
7138   l_structure_id                NUMBER;
7139 
7140 --hsiu
7141 --added for advanced structure - versioning
7142     l_versioned    VARCHAR2(1) := 'N';
7143     l_shared       VARCHAR2(1) := 'N';
7144 --end changes
7145 
7146     CURSOR cur_struc_type( c_structure_id NUMBER )
7147     IS
7148       SELECT 'Y'
7149         FROM pa_proj_structure_types ppst
7150             ,pa_structure_types pst
7151        WHERE ppst.proj_element_id = c_structure_id
7152          AND ppst.structure_type_id = pst.structure_type_id
7153          AND pst.structure_type_class_code IN( 'FINANCIAL' );
7154 
7155     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
7156       select 'Y'
7157         from pa_proj_elem_ver_structure
7158        where proj_element_id = c_structure_id
7159          AND project_id = c_project_id
7160          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
7161 
7162 --hsiu added, for dates rollup
7163    CURSOR get_peer_tasks
7164    IS
7165      select b.object_id_to1 object_id_to1
7166        from pa_object_relationships a,
7167             pa_object_relationships b
7168       where a.object_id_to1 = p_task_version_id
7169         and a.object_type_to = 'PA_TASKS'
7170         and a.object_id_from1 = b.object_id_from1
7171         and a.object_type_from = b.object_type_from
7172         and b.object_type_to = 'PA_TASKS'
7173         and b.object_id_to1 <> p_task_version_id;
7174    c_get_peer_tasks get_peer_tasks%ROWTYPE;
7175 
7176 --Hsiu added, for dates rollup
7177   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
7178 --hsiu added, for task status
7179   l_rollup_task_id NUMBER;
7180 
7181 --hsiu added for task status
7182   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
7183     select object_id_from1
7184       from pa_object_relationships
7185      where object_id_to1 = c_elem_ver_id
7186        and object_type_to = 'PA_TASKS'
7187        and relationship_type = 'S';
7188   l_parent_ver_id NUMBER;
7189   l_error_msg_code VARCHAR2(30);
7190 BEGIN
7191   pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_TASK_VERSION');
7192 
7193   IF (p_debug_mode = 'Y') THEN
7194     pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION begin');
7195   END IF;
7196 
7197   IF (p_commit = FND_API.G_TRUE) THEN
7198     savepoint outdent_task_version;
7199   END IF;
7200 
7201   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
7202     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7203   END IF;
7204 
7205   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
7206     FND_MSG_PUB.initialize;
7207   END IF;
7208 
7209 --hsiu
7210 --added on 08-JAN-2002
7211 --check if task are linked task
7212   IF (p_structure_version_id IS NOT NULL) AND
7213        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7214     IF ('N' = pa_proj_elements_utils.check_task_in_structure(
7215           p_structure_version_id,
7216           p_task_version_id)) THEN
7217       --deleting linked task. Error
7218       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
7219     END IF;
7220 
7221     l_msg_count := FND_MSG_PUB.count_msg;
7222     if l_msg_count > 0 then
7223       x_msg_count := l_msg_count;
7224       if x_msg_count = 1 then
7225         pa_interface_utils_pub.get_messages
7226         (p_encoded         => FND_API.G_TRUE,
7227          p_msg_index      => 1,
7228          p_msg_count      => l_msg_count,
7229          p_msg_data       => l_msg_data,
7230          p_data           => l_data,
7231          p_msg_index_out  => l_msg_index_out);
7232         x_msg_data := l_data;
7233       end if;
7234       raise FND_API.G_EXC_ERROR;
7235     end if;
7236   END IF;
7237 
7238 --hsiu added, for dates rollup
7239 --need to get peer task before it has been outdented.
7240   OPEN get_peer_tasks;
7241   LOOP
7242     FETCH get_peer_tasks INTO c_get_peer_tasks;
7243     EXIT WHEN get_peer_tasks%NOTFOUND;
7244     l_tasks_ver_ids.extend;
7245     l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
7246 --added for task status rollup
7247     l_rollup_task_id := c_get_peer_tasks.object_id_to1;
7248   END LOOP;
7249   CLOSE get_peer_tasks;
7250 
7251 
7252   SELECT wbs_level, display_sequence, parent_structure_version_id
7253   INTO l_wbs_level, l_display_sequence, l_parent_structure_version_id
7254   FROM PA_PROJ_ELEMENT_VERSIONS
7255   WHERE element_version_id = p_task_version_id;
7256 
7257   if l_wbs_level = 1 then
7258     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7259                          ,p_msg_name       => 'PA_PS_CANNOT_OUTDENT');
7260   end if;
7261 
7262   l_msg_count := FND_MSG_PUB.count_msg;
7263   if l_msg_count > 0 then
7264     x_msg_count := l_msg_count;
7265     if x_msg_count = 1 then
7266       pa_interface_utils_pub.get_messages
7267       (p_encoded        => FND_API.G_TRUE,
7268        p_msg_index      => 1,
7269        p_msg_count      => l_msg_count,
7270        p_msg_data       => l_msg_data,
7271        p_data           => l_data,
7272        p_msg_index_out  => l_msg_index_out);
7273       x_msg_data := l_data;
7274     end if;
7275     raise FND_API.G_EXC_ERROR;
7276   end if;
7277 
7278   --get the reference task version of p_task_version_id
7279   SELECT element_version_id
7280   INTO l_ref_task_version_id
7281   FROM PA_PROJ_ELEMENT_VERSIONS
7282   WHERE wbs_level = l_wbs_level - 1
7283   AND   object_type = 'PA_TASKS'
7284   AND   parent_structure_version_id = l_parent_structure_version_id
7285   AND   display_sequence < l_display_sequence
7286   AND   display_sequence =
7287         (SELECT max(display_sequence)
7288          FROM PA_PROJ_ELEMENT_VERSIONS
7289          WHERE wbs_level = l_wbs_level - 1
7290          AND   object_type = 'PA_TASKS'
7291          AND   parent_structure_version_id = l_parent_structure_version_id
7292          AND   display_sequence < l_display_sequence);
7293 
7294 --hsiu added for task status
7295     --Check if ok to outdent this task
7296     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
7297          p_task_ver_id => p_task_version_id
7298         ,x_return_status      => l_return_status
7299         ,x_error_message_code => l_error_msg_code
7300     );
7301 
7302     IF (l_return_status <> 'Y') THEN
7303         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7304                              p_msg_name => l_error_msg_code);
7305         raise FND_API.G_EXC_ERROR;
7306     END IF;
7307 
7308   OPEN get_parent_version_id(l_ref_task_version_id);
7309   FETCH get_parent_version_id into l_parent_ver_id;
7310   CLOSE get_parent_version_id;
7311   PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7312          p_parent_task_ver_id => l_parent_ver_id
7313         ,x_return_status      => l_return_status
7314         ,x_error_message_code => l_error_msg_code
7315   );
7316 
7317   IF (l_return_status <> 'Y') THEN
7318     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7319                          p_msg_name => l_error_msg_code);
7320     raise FND_API.G_EXC_ERROR;
7321   END IF;
7322 --task status changes ends
7323 
7324 --dbms_output.put_line( 'Before Update_Task_Version ' );
7325 
7326   PA_TASK_PUB1.Update_Task_Version
7327   ( p_validate_only      => FND_API.G_FALSE,
7328     p_ref_task_version_id    => l_ref_task_version_id,
7329     p_peer_or_sub        => 'PEER',
7330     p_task_version_id        => p_task_version_id,
7331     p_record_version_number  => p_record_version_number,
7332     p_action                 => 'OUTDENT',
7333     x_return_status          => l_return_status,
7334     x_msg_count              => l_msg_count,
7335     x_msg_data               => l_msg_data );
7336 
7337   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7338     x_msg_count := FND_MSG_PUB.count_msg;
7339     IF x_msg_count = 1 then
7340       pa_interface_utils_pub.get_messages
7341       (p_encoded        => FND_API.G_TRUE,
7342        p_msg_index      => 1,
7343        p_msg_count      => l_msg_count,
7344        p_msg_data       => l_msg_data,
7345        p_data           => l_data,
7346        p_msg_index_out  => l_msg_index_out);
7347       x_msg_data := l_data;
7348     END IF;
7349     raise FND_API.G_EXC_ERROR;
7350   END IF;
7351 
7352 --dbms_output.put_line( 'Before Update WBS numbers ' );
7353 
7354   -- Update WBS numbers
7355   SELECT parent_structure_version_id
7356   INTO l_parent_structure_version_id
7357   FROM PA_PROJ_ELEMENT_VERSIONS
7358   WHERE element_version_id = p_task_version_id;
7359 
7360   PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
7361   ( p_commit                   => p_commit
7362    ,p_debug_mode               => p_debug_mode
7363    ,p_parent_structure_ver_id  => l_parent_structure_version_id
7364    ,p_task_id                  => p_task_version_id
7365    ,p_display_seq              => l_display_sequence
7366    ,p_action                   => 'OUTDENT'
7367    ,p_parent_task_id           => NULL
7368    ,x_return_status            => l_return_status );
7369 
7370 /*  SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7371     FROM pa_proj_element_versions
7372    WHERE element_version_id =  p_structure_version_id
7373      AND object_type = 'PA_STRUCTURES';*/
7374 
7375   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7376     FROM pa_proj_element_versions
7377    WHERE element_version_id =  ( Select parent_structure_version_id
7378                                    from pa_proj_element_versions
7379                                   where element_version_id = p_task_version_id )
7380      AND object_type = 'PA_STRUCTURES';
7381 
7382   --Do financial task check
7383   --If financial
7384   OPEN cur_struc_type( l_structure_id );
7385   FETCH cur_struc_type INTO l_dummy_char;
7386   IF cur_struc_type%FOUND
7387   THEN
7388       --If structure has any published versions.
7389       l_published_version := 'N';
7390       OPEN cur_pub_versions( l_structure_id, l_project_id );
7391       FETCH cur_pub_versions INTO l_published_version;
7392       CLOSE cur_pub_versions;
7393 
7394 --hsiu
7395 --changes for versioning
7396       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
7397                                                      l_project_id);
7398       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
7399                                                   l_project_id);
7400       IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y')
7401       OR ((l_published_version = 'Y') AND (l_shared = 'N')) -- Bug # 5064340. -- To accomodate split financial tasks.
7402       THEN
7403 --      IF NVL( l_published_version, 'N' ) = 'N'
7404 --      THEN
7405 --end changes
7406 
7407          SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
7408            INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
7409            FROM PA_TASKS pt,
7410                 pa_proj_elem_ver_structure ppa,
7411                 PA_PROJ_ELEMENT_VERSIONS ppev
7412           WHERE ppev.element_version_id = p_task_version_id
7413             AND ppev.parent_structure_version_id = ppa.element_version_id
7414             AND ppev.project_id = ppa.project_id
7415             AND ppev.proj_element_id = pt.task_id;
7416 
7417          SELECT proj_element_id
7418            INTO l_ref_task_id
7419            FROM PA_PROJ_ELEMENT_VERSIONS
7420           WHERE element_version_id = l_ref_task_version_id;
7421 
7422           SELECT record_version_number INTO l_task_record_version_number
7423             FROM pa_tasks
7424            WHERE task_id = l_task_id
7425              AND project_id = l_project_id;
7426 
7427           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
7428                          p_project_id                        => l_project_id
7429                         ,p_task_id                           => l_task_id
7430                         ,p_edit_mode                         => 'OUTDENT'
7431                         ,p_record_version_number             => l_task_record_version_number
7432                         ,p_wbs_record_version_number         => 1
7433                         ,x_return_status                     => l_return_status
7434                         ,x_msg_count                         => l_msg_count
7435                         ,x_msg_data                          => l_msg_data );
7436       END IF;
7437   END IF;
7438   CLOSE cur_struc_type;
7439 
7440   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7441     x_msg_count := FND_MSG_PUB.count_msg;
7442     IF x_msg_count = 1 then
7443       pa_interface_utils_pub.get_messages
7444       (p_encoded        => FND_API.G_TRUE,
7445        p_msg_index      => 1,
7446        p_msg_count      => l_msg_count,
7447        p_msg_data       => l_msg_data,
7448        p_data           => l_data,
7449        p_msg_index_out  => l_msg_index_out);
7450       x_msg_data := l_data;
7451     END IF;
7452     raise FND_API.G_EXC_ERROR;
7453   END IF;
7454 
7455 --dbms_output.put_line( 'After Move task ' );
7456 
7457 --Hsiu added for date rollup; workplan only
7458 
7459   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(l_parent_structure_version_id, 'WORKPLAN') = 'Y' then
7460     l_tasks_ver_ids.extend;
7461     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
7462 
7463 --added for task status rollup
7464     IF (l_rollup_task_id IS NULL) THEN
7465       l_rollup_task_id := p_task_version_id;
7466     END IF;
7467 
7468     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
7469                        p_commit => FND_API.G_FALSE,
7470                        p_element_versions => l_tasks_ver_ids,
7471                        x_return_status => l_return_status,
7472                        x_msg_count => l_msg_count,
7473                        x_msg_data => l_msg_data);
7474 
7475      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7476        x_msg_count := FND_MSG_PUB.count_msg;
7477        if x_msg_count = 1 then
7478          pa_interface_utils_pub.get_messages
7479          (p_encoded        => FND_API.G_TRUE,
7480           p_msg_index      => 1,
7481           p_msg_count      => l_msg_count,
7482           p_msg_data       => l_msg_data,
7483           p_data           => l_data,
7484           p_msg_index_out  => l_msg_index_out);
7485           x_msg_data := l_data;
7486        end if;
7487        raise FND_API.G_EXC_ERROR;
7488      end if;
7489 
7490 --hsiu added for task status
7491 --if versioning is off, rollup.
7492      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
7493        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
7494                   p_structure_version_id => p_structure_version_id
7495                  ,p_element_version_id => l_rollup_task_id
7496                  ,x_return_status => l_return_status
7497                  ,x_msg_count => l_msg_count
7498                  ,x_msg_data => l_msg_data
7499        );
7500 
7501        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7502          x_msg_count := FND_MSG_PUB.count_msg;
7503          if x_msg_count = 1 then
7504            pa_interface_utils_pub.get_messages
7505            (p_encoded        => FND_API.G_TRUE,
7506             p_msg_index      => 1,
7507             p_msg_count      => l_msg_count,
7508             p_msg_data       => l_msg_data,
7509             p_data           => l_data,
7510             p_msg_index_out  => l_msg_index_out);
7511             x_msg_data := l_data;
7512          end if;
7513          raise FND_API.G_EXC_ERROR;
7514        end if;
7515      END IF;
7516 
7517 --end task status changes
7518 
7519   END IF;
7520 
7521   x_return_status := FND_API.G_RET_STS_SUCCESS;
7522 
7523   IF (p_commit = FND_API.G_TRUE) THEN
7524     COMMIT;
7525   END IF;
7526 
7527   IF (p_debug_mode = 'Y') THEN
7528     pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION END');
7529   END IF;
7530 
7531 EXCEPTION
7532   when FND_API.G_EXC_ERROR then
7533     if p_commit = FND_API.G_TRUE then
7534       rollback to outdent_task_version;
7535     end if;
7536     x_return_status := FND_API.G_RET_STS_ERROR;
7537   when FND_API.G_EXC_UNEXPECTED_ERROR then
7538     if p_commit = FND_API.G_TRUE then
7539       rollback to outdent_task_version;
7540     end if;
7541     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7542     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
7543                             p_procedure_name => 'OUTDENT_TASK_VERSION',
7544                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7545   when OTHERS then
7546     if p_commit = FND_API.G_TRUE then
7547       rollback to outdent_task_version;
7548     end if;
7549     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7550     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
7551                             p_procedure_name => 'OUTDENT_TASK_VERSION',
7552                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7553     raise;
7554 END Outdent_Task_Version;
7555 
7556 -- API name                      : Create_tasks
7557 -- Type                          : Wrapper Public procedure
7558 -- Pre-reqs                      : None
7559 -- Return Value                  : N/A
7560 -- Prameters
7561 -- p_project_id            IN NUMBER
7562 -- p_ref_task_version_id   IN NUMBER
7563 -- p_structure_id          IN NUMBER
7564 -- p_structure_version_id  IN NUMBER
7565 -- p_outline_level         IN PA_NUM_1000_NUM
7566 -- p_task_number           IN PA_VC_1000_150
7567 -- p_task_name             IN PA_VC_1000_2000
7568 -- p_scheduled_start_date  IN PA_DATE_1000_DATE
7569 -- p_scheduled_finish_date IN PA_DATE_1000_DATE
7570 -- p_task_manager_id       IN PA_NUM_1000_NUM
7571 -- p_task_manager_name     IN PA_VC_1000_150
7572   --FP M Development Changes
7573 -- p_planned_effort              IN              PA_NUM_1000_NUM
7574 -- p_dependencies                IN              PA_VC_1000_4000
7575 -- p_dependency_ids              IN              PA_NUM_1000_NUM
7576 -- p_structure_type              IN              VARCHAR2        :='WORKPLAN'
7577 -- p_financial_flag              IN              VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7578 -- p_resources                   IN              PA_VC_1000_4000
7579 -- p_resource_ids                IN              PA_NUM_1000_NUM
7580 -- p_mapped_task                 IN              PA_VC_1000_4000
7581 -- p_mapped_task_id              IN              PA_NUM_1000_NUM
7582   --End FP M Development Changes
7583 -- x_msg_count             OUT NUMBER
7584 -- x_msg_data              OUT VARCHAR2
7585 -- x_return_status         OUT VARCHAR2
7586 -- x_return_status  OUT     VARCHAR2    N   Null
7587 -- x_msg_count        OUT   NUMBER  N   Null
7588 -- x_msg_data         OUT   VARCHAR2    N   Null
7589 --
7590 --  History
7591 --
7592 --  23-OCT-01   Andrew Lee             -Created
7593 --
7594 --
7595 
7596 PROCEDURE CREATE_TASKS
7597 ( p_project_id            IN NUMBER
7598  ,p_ref_task_version_id   IN NUMBER
7599  ,p_structure_id          IN NUMBER
7600  ,p_structure_version_id  IN NUMBER
7601  ,p_outline_level         IN PA_NUM_1000_NUM
7602  ,p_task_number           IN PA_VC_1000_150
7603  ,p_task_name             IN PA_VC_1000_2000
7604  ,p_scheduled_start_date  IN PA_DATE_1000_DATE
7605  ,p_scheduled_finish_date IN PA_DATE_1000_DATE
7606  ,p_task_manager_id       IN PA_NUM_1000_NUM
7607  ,p_task_manager_name     IN PA_VC_1000_150
7608  ,p_TYPE_ID               IN PA_NUM_1000_NUM
7609   --FP M Development Changes bug 330119
7610  ,p_planned_effort              IN              PA_NUM_1000_NUM
7611  ,p_planned_equip_effort        IN              PA_NUM_1000_NUM
7612  ,p_dependencies                IN              PA_VC_1000_4000
7613  ,p_dependency_ids              IN              PA_NUM_1000_NUM
7614  ,p_structure_type              IN              VARCHAR2        :='WORKPLAN'
7615  ,p_financial_flag              IN              VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7616  ,p_use_in_fin_plan             IN              PA_VC_1000_10
7617  ,p_resources                   IN              PA_VC_1000_4000
7618  ,p_resource_ids                IN              PA_NUM_1000_NUM
7619  ,p_mapped_task                 IN              PA_VC_1000_4000
7620  ,p_mapped_task_id              IN              PA_NUM_1000_NUM
7621   --End FP M Development Changes bug 330119
7622  ,x_msg_count             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7623  ,x_msg_data              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7624  ,x_return_status         OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
7625 IS
7626   i                    NUMBER;
7627   l_msg_count          NUMBER;
7628   l_return_status      VARCHAR2(1);
7629   l_msg_data           VARCHAR2(2000);
7630   l_data               VARCHAR2(2000);
7631   l_msg_index_out      NUMBER;
7632 
7633   l_outline_level      NUMBER;
7634   l_prev_outline_level NUMBER;
7635   l_ref_task_ver_id    NUMBER;
7636   l_peer_or_sub        VARCHAR2(20);
7637   l_task_id            NUMBER;
7638   l_task_version_id    NUMBER;
7639   API_ERROR            EXCEPTION;
7640 
7641   TYPE reference_tasks IS TABLE OF NUMBER
7642        INDEX BY BINARY_INTEGER;
7643 
7644   -- This table stores reference task version IDs for a particular outline
7645   -- level. This provides a lookup to find the last task version created
7646   -- at that level.
7647   l_outline_task_ref reference_tasks;
7648   l_pev_schedule_id  NUMBER;
7649   l_ref_proj_eleme_id NUMBER;
7650 
7651   CURSOR cur_ref_proj_elem_id( p_ref_task_ver_id NUMBER )
7652   IS
7653     SELECT proj_element_id
7654       FROM pa_proj_element_versions
7655      WHERE element_version_id = p_ref_task_ver_id
7656        AND object_type = 'PA_TASKS';
7657 
7658 --Hsiu added for date rollup
7659   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
7660 
7661 -- anlee task weighting
7662   l_top_sub_count NUMBER;
7663 -- anlee End of changes
7664 
7665 -- hsiu added for task version status
7666   CURSOR cur_proj_is_template(c_project_id NUMBER)
7667   IS     select 'Y'
7668            from pa_projects_all
7669           where project_id = c_project_id
7670             and template_flag = 'Y';
7671   l_template_flag VARCHAR2(1);
7672 
7673   l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
7674 
7675   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
7676     select object_id_from1
7677       from pa_object_relationships
7678      where object_id_to1 = c_elem_ver_id
7679        and object_type_to = 'PA_TASKS'
7680        and relationship_type = 'S';
7681   l_parent_ver_id NUMBER;
7682   l_error_msg_code VARCHAR2(30);
7683 --end task version status changes
7684 
7685     l_versioned    VARCHAR2(1) := 'N';
7686     l_shared       VARCHAR2(1) := 'N';
7687     l_published_ver_exists  VARCHAR2(1);
7688     l_wp_process_flag    VARCHAR2(1);
7689 --bug 3053281
7690   l_wp_type              VARCHAR2(1);
7691   l_weighting_basis_Code VARCHAR2(30);
7692 --end bug 3053281
7693 
7694   CURSOR get_base_ref_obj_type IS
7695     select object_type
7696       from pa_proj_element_versions
7697      where element_version_id = p_ref_task_version_id;
7698   l_ref_obj_type VARCHAR2(30);
7699 
7700   -- Added for FP_M changes : Bug 3305199 : Bhumesh
7701     l_Share_Code          VARCHAR2(30);
7702     l_Financial_Flag      VARCHAR2(1) := 'N';
7703 
7704 --bug 3301192
7705   /* Bug #: 3305199 SMukka                                                         */
7706   /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
7707   /* l_task_ver_ids              PA_PLSQL_DATATYPES.IdTabTyp;                      */
7708   l_task_ver_ids              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
7709 
7710 BEGIN
7711 
7712   --Clear Error Messages.
7713   FND_MSG_PUB.initialize;
7714 
7715   savepoint create_tasks;
7716 
7717   if p_project_id is null then
7718     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7719                          ,p_msg_name       => 'PA_NO_PROJECT_ID');
7720   end if;
7721 
7722   if p_ref_task_version_id is null then
7723     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7724                          ,p_msg_name       => 'PA_NO_TASK_VERSION_ID');
7725   end if;
7726 
7727   if p_structure_version_id is null then
7728     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7729                          ,p_msg_name       => 'PA_NO_STRUCTURE_VERSION_ID');
7730   end if;
7731 
7732   l_msg_count := FND_MSG_PUB.count_msg;
7733   if l_msg_count > 0 then
7734     x_msg_count := l_msg_count;
7735     if x_msg_count = 1 then
7736       pa_interface_utils_pub.get_messages
7737       (p_encoded        => FND_API.G_TRUE,
7738        p_msg_index      => 1,
7739        p_msg_count      => l_msg_count,
7740        p_msg_data       => l_msg_data,
7741        p_data           => l_data,
7742        p_msg_index_out  => l_msg_index_out);
7743       x_msg_data := l_data;
7744     end if;
7745     raise API_ERROR;
7746   end if;
7747 
7748 --bug 3053281 --set flag if not (manual and workplan only)
7749   l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
7750   l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
7751 
7752 --bug 3010538
7753 --Added the following lines to cache versioning and sharing information
7754   l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
7755                                                      p_project_id);
7756   l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
7757                                                   p_project_id);
7758   --check whether there exists any published version.
7759   l_published_ver_exists := PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS( p_project_id, p_structure_id );
7760 --end bug 3010538
7761   --3035902: process update flag changes
7762   l_wp_process_flag := 'N';
7763   --3035902: end process update flag changes
7764 
7765   l_outline_task_ref(0) := p_ref_task_version_id;
7766   l_prev_outline_level := NULL;
7767 
7768   -- anlee task weighting
7769   l_top_sub_count := 0;
7770   -- anlee End of changes
7771 
7772   --hsiu: added for task version status
7773   OPEN cur_proj_is_template(p_project_id);
7774   FETCH cur_proj_is_template into l_template_flag;
7775   IF cur_proj_is_template%NOTFOUND THEN
7776     l_template_flag := 'N';
7777   END IF;
7778   CLOSE cur_proj_is_template;
7779   --added for task version status
7780 
7781   --added for bug 3125370
7782   OPEN get_base_ref_obj_type;
7783   FETCH get_base_ref_obj_type into l_ref_obj_type;
7784   CLOSE get_base_ref_obj_type;
7785   --bug 3125370
7786 
7787   -- Added for FP_M changes. Tracking Bug 3305199
7788     l_financial_flag := 'N';
7789 
7790   for i in 1..1000 LOOP
7791     if p_outline_level(i) is null AND p_task_name(i) IS NOT NULL AND p_task_number(i) IS NOT NULL then
7792       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7793                            ,p_msg_name       => 'PA_PS_TSK_WBS_LVL_ERR');
7794       x_msg_count := 1;
7795       pa_interface_utils_pub.get_messages
7796           (p_encoded        => FND_API.G_TRUE,
7797            p_msg_index      => 1,
7798            p_msg_count      => l_msg_count,
7799            p_msg_data       => l_msg_data,
7800            p_data           => l_data,
7801            p_msg_index_out  => l_msg_index_out);
7802            x_msg_data := l_data;
7803       raise API_ERROR;
7804     end if;
7805 
7806     if p_outline_level(i) is null then
7807       exit;
7808     end if;
7809 
7810     l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
7811     -- Added for FP_M changes. Tracking Bug 3305199 : Bhumesh
7812 /*
7813     IF l_Share_Code IN ('SHARE_FULL', 'SHARE_PARTIAL') then
7814        If P_Structure_Type = 'FINANCIAL' THEN
7815       l_Financial_Flag := 'N';
7816        Else
7817       l_Financial_Flag := 'Y';
7818        End If;
7819 
7820        If P_Structure_Type = 'WORKPLAN' THEN
7821           IF l_Share_Code = 'SHARE_PARTIAL' then
7822          l_Financial_Flag := 'N';
7823           Else
7824          l_Financial_Flag := 'Y';
7825           End If;
7826        End If;
7827     End IF;
7828 */
7829    IF l_shared = 'Y'
7830    THEN
7831        If P_Structure_Type = 'WORKPLAN' AND
7832           l_Share_Code = 'SHARE_PARTIAL' then
7833           l_Financial_Flag := 'N';
7834        Else
7835          l_Financial_Flag := 'Y';
7836        End If;
7837 
7838    ELSE
7839        If P_Structure_Type = 'WORKPLAN' THEN
7840           l_Financial_Flag := 'N';
7841        Else
7842           l_Financial_Flag := 'Y';
7843        End If;
7844     End IF;
7845     -- End of FP_M changes
7846 
7847     --bug 3125370: add condition for reference object_type
7848     if (instr(to_char(p_outline_level(i)), '.') <> 0) OR
7849        (l_ref_obj_type = 'PA_STRUCTURES' and p_outline_level(i) = 0) then
7850       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7851                            ,p_msg_name       => 'PA_PS_OUTLINE_LEVEL_INVALID');
7852 
7853       x_msg_count := 1;
7854       pa_interface_utils_pub.get_messages
7855       (p_encoded        => FND_API.G_TRUE,
7856        p_msg_index      => 1,
7857        p_msg_count      => l_msg_count,
7858        p_msg_data       => l_msg_data,
7859        p_data           => l_data,
7860        p_msg_index_out  => l_msg_index_out);
7861        x_msg_data := l_data;
7862       raise API_ERROR;
7863     end if;
7864 
7865     l_outline_level := p_outline_level(i);
7866 
7867     if l_prev_outline_level is not null then
7868       if l_outline_level > l_prev_outline_level then
7869         if (l_outline_level - l_prev_outline_level) > 1 then
7870           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7871                                ,p_msg_name       => 'PA_PS_OUTLINE_LEVEL_INVALID');
7872 
7873           x_msg_count := 1;
7874           pa_interface_utils_pub.get_messages
7875           (p_encoded        => FND_API.G_TRUE,
7876            p_msg_index      => 1,
7877            p_msg_count      => l_msg_count,
7878            p_msg_data       => l_msg_data,
7879            p_data           => l_data,
7880            p_msg_index_out  => l_msg_index_out);
7881            x_msg_data := l_data;
7882           raise API_ERROR;
7883         end if;
7884 
7885         l_ref_task_ver_id := l_outline_task_ref(l_prev_outline_level);
7886         l_peer_or_sub := 'SUB';
7887       else
7888         l_ref_task_ver_id := l_outline_task_ref(l_outline_level);
7889         l_peer_or_sub := 'PEER';
7890       end if;
7891     else
7892       -- First task to insert
7893       if l_outline_level not in (0, 1) then
7894         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7895                              ,p_msg_name       => 'PA_PS_OUTLINE_LEVEL_INVALID');
7896 
7897         x_msg_count := 1;
7898         pa_interface_utils_pub.get_messages
7899         (p_encoded        => FND_API.G_TRUE,
7900          p_msg_index      => 1,
7901          p_msg_count      => l_msg_count,
7902          p_msg_data       => l_msg_data,
7903          p_data           => l_data,
7904          p_msg_index_out  => l_msg_index_out);
7905          x_msg_data := l_data;
7906         raise API_ERROR;
7907       end if;
7908 
7909       l_ref_task_ver_id := l_outline_task_ref(0);
7910       if l_outline_level = 0 then
7911         l_peer_or_sub := 'PEER';
7912       else
7913         l_peer_or_sub := 'SUB';
7914       end if;
7915     end if;
7916 
7917 --my_error_msg( 'before PA_TASK_PUB1.CREATE_TASK' );
7918 
7919     OPEN cur_ref_proj_elem_id( l_ref_task_ver_id );
7920     FETCH cur_ref_proj_elem_id INTO l_ref_proj_eleme_id;   --For ref task id
7921     CLOSE cur_ref_proj_elem_id;
7922 
7923 --my_error_msg( 'Ref Task Id in CREATE_TASKS'||l_ref_proj_eleme_id );
7924 
7925     --hsiu added for task status
7926     --check if ok to create subtask
7927 
7928 /*  --commented; validation done in private api
7929 
7930     IF (l_peer_or_sub = 'PEER') THEN
7931       OPEN get_parent_version_id(l_ref_task_ver_id);
7932       FETCH get_parent_version_id into l_parent_ver_id;
7933       CLOSE get_parent_version_id;
7934       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7935          p_parent_task_ver_id => l_parent_ver_id
7936         ,x_return_status      => l_return_status
7937         ,x_error_message_code => l_error_msg_code
7938       );
7939 
7940       IF (l_return_status <> 'Y') THEN
7941         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7942                              p_msg_name => l_error_msg_code);
7943         raise API_ERROR;
7944       END IF;
7945     ELSE
7946       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7947          p_parent_task_ver_id => l_ref_task_ver_id
7948         ,x_return_status      => l_return_status
7949         ,x_error_message_code => l_error_msg_code
7950       );
7951 
7952       IF (l_return_status <> 'Y') THEN
7953         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7954                              p_msg_name => l_error_msg_code);
7955         raise API_ERROR;
7956       END IF;
7957     END IF;
7958 */
7959     --end task status changes
7960 
7961     -- CREATE_TASK
7962    l_task_id := NULL;
7963 
7964    --3035902: process update flag changes
7965    IF (l_wp_process_flag = 'N') THEN
7966      --may need to update process flag
7967      IF ((l_shared = 'N') AND
7968          (l_wp_type = 'Y')) THEN
7969        --split and workplan; only update if progressable task added
7970        l_wp_process_flag := 'Y';
7971      ELSIF ((l_shared = 'N') AND
7972             (l_wp_type = 'N')) THEN
7973        --split and financial; update
7974        l_wp_process_flag := 'Y';
7975      ELSIF (l_shared = 'Y') THEN
7976        l_wp_process_flag := 'Y';
7977      END IF;
7978    END IF;
7979    --3035902: end process update flag changes
7980 
7981    PA_TASK_PUB1.CREATE_TASK
7982    ( p_validate_only          => FND_API.G_FALSE
7983     ,p_object_type            => 'PA_TASKS'
7984     ,p_project_id             => p_project_id
7985     ,p_ref_task_id            => l_ref_proj_eleme_id
7986     ,p_peer_or_sub            => l_peer_or_sub
7987     ,p_structure_id           => p_structure_id
7988     ,p_structure_version_id    => p_structure_version_id
7989     ,p_task_number            => p_task_number(i)
7990     ,p_task_name              => p_task_name(i)
7991     ,p_task_manager_id        => p_task_manager_id(i)
7992     ,p_task_manager_name      => p_task_manager_name(i)
7993     ,p_scheduled_start_date   => p_scheduled_start_date(i)--Changed in BUG fix 3927343
7994     ,p_scheduled_finish_date  => p_scheduled_finish_date(i)--Changed in BUG fix 3927343
7995     ,p_TYPE_ID                => p_TYPE_ID  (i)
7996     ,p_structure_type         => p_structure_type
7997     ,x_task_id                => l_task_id
7998     ,x_return_status          => l_return_status
7999     ,x_msg_count              => l_msg_count
8000     ,x_msg_data               => l_msg_data);
8001 
8002    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8003      x_msg_count := FND_MSG_PUB.count_msg;
8004      if x_msg_count = 1 then
8005        pa_interface_utils_pub.get_messages
8006        (p_encoded        => FND_API.G_TRUE,
8007         p_msg_index      => 1,
8008         p_msg_count      => l_msg_count,
8009         p_msg_data       => l_msg_data,
8010         p_data           => l_data,
8011         p_msg_index_out  => l_msg_index_out);
8012         x_msg_data := l_data;
8013      end if;
8014      raise API_ERROR;
8015    end if;
8016 
8017 --my_error_msg( 'before PA_TASK_PUB1.CREATE_TASK_VERSION' );
8018 
8019 /* commented out because flag value is set before create task
8020 --bug 3010538
8021 IF (l_shared = 'N') AND
8022    (l_wp_type = 'Y') AND
8023    (l_weighting_basis_Code = 'MANUAL') THEN
8024   --do not set the flag to 'Y'
8025   NULL;
8026 ELSE
8027 */
8028   --3035902: process update flag changes
8029   --set the flag if flag is Y; otherwise keep current value
8030   --Bug No 3450684 SMukka Commented if condition
8031   --IF l_wp_process_flag = 'Y' THEN
8032    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
8033    (
8034       p_calling_context       => 'SELF_SERVICE'
8035      ,p_project_id            => p_project_id
8036      ,p_structure_version_id  => p_structure_version_id
8037      ,p_update_wbs_flag       => l_wp_process_flag
8038      ,x_return_status         => l_return_status
8039      ,x_msg_count             => l_msg_count
8040      ,x_msg_data              => l_msg_data);
8041 
8042    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8043      x_msg_count := FND_MSG_PUB.count_msg;
8044      if x_msg_count = 1 then
8045        pa_interface_utils_pub.get_messages
8046        (p_encoded        => FND_API.G_TRUE,
8047         p_msg_index      => 1,
8048         p_msg_count      => l_msg_count,
8049         p_msg_data       => l_msg_data,
8050         p_data           => l_data,
8051         p_msg_index_out  => l_msg_index_out);
8052         x_msg_data := l_data;
8053      end if;
8054      raise FND_API.G_EXC_ERROR;
8055    end if;
8056   --END IF;
8057   --3035902: end process update flag changes
8058 
8059   --ideally the following calls should have been cached. but due to time constraints
8060   --we need to write the code this way in multiple places.
8061   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
8062    THEN
8063        IF ( l_versioned = 'N' ) OR
8064           ( l_shared = 'N' ) OR    --This wont happen bcoz for adding tasks to a financial structure we dont use this api
8065           ( l_versioned = 'Y' AND l_shared = 'Y' AND l_published_ver_exists = 'N' )THEN
8066        --create_tasks
8067        pa_fp_refresh_elements_pub.set_process_flag_proj(
8068              p_project_id               => p_project_id
8069             ,p_request_id               => null
8070             ,p_process_code             => null
8071             ,p_refresh_required_flag    => 'Y'
8072             ,x_return_status            => l_return_status
8073             ,x_msg_count                => l_msg_count
8074             ,x_msg_data                 => l_msg_data );
8075 
8076         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8077            x_msg_count := FND_MSG_PUB.count_msg;
8078            if x_msg_count = 1 then
8079              pa_interface_utils_pub.get_messages
8080             (p_encoded        => FND_API.G_TRUE,
8081              p_msg_index      => 1,
8082              p_msg_count      => l_msg_count,
8083              p_msg_data       => l_msg_data,
8084              p_data           => l_data,
8085              p_msg_index_out  => l_msg_index_out);
8086              x_msg_data := l_data;
8087            end if;
8088            raise FND_API.G_EXC_ERROR;
8089         end if;
8090      END IF;
8091    END IF;
8092 
8093 
8094 --End bug 3010538
8095 
8096 --hsiu: task version status changes
8097    IF (l_template_flag = 'N') THEN
8098           --check if structure is shared
8099           --  if shared, check if versioned
8100           --    'WORKING' if versioned; 'PUBLISHED' if not
8101           --  if split, check if 'FINANCIAL'
8102           --    'PUBLISHED' if financial
8103           --    check if versioned
8104           --    'WORKING' if versioend; 'PUBLISHED' if not
8105 --     IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id)) THEN
8106 --       IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN --Replaced these line with the following for performance.
8107 --Code added for bug 3010538 also does the same check.
8108      IF ('Y' = l_shared) THEN
8109        IF ('Y' = l_versioned) THEN
8110 
8111          l_task_unpub_ver_status_code := 'WORKING';
8112        ELSE
8113          l_task_unpub_ver_status_code := 'PUBLISHED';
8114        END IF;
8115      ELSE --split
8116        IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(p_structure_id, 'FINANCIAL')  AND
8117            'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(p_structure_id, 'WORKPLAN')) THEN
8118          l_task_unpub_ver_status_code := 'PUBLISHED';
8119        ELSE --workplan only
8120           --IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN  --Replaced these line with the following for performance. Code added for bug 3010538 also does the same check.
8121           IF ('Y' = l_versioned) THEN
8122            l_task_unpub_ver_status_code := 'WORKING';
8123          ELSE
8124            l_task_unpub_ver_status_code := 'PUBLISHED';
8125          END IF;
8126        END IF;
8127      END IF;
8128    ELSE
8129      l_task_unpub_ver_status_code := 'WORKING';
8130    END IF;
8131 --end task version status changes
8132 
8133 
8134    --CREATE_TASK_VERSION
8135    PA_TASK_PUB1.CREATE_TASK_VERSION
8136    ( p_validate_only        => FND_API.G_FALSE
8137     ,p_ref_task_version_id  => l_ref_task_ver_id
8138     ,p_peer_or_sub          => l_peer_or_sub
8139     ,p_task_id              => l_task_id
8140     ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
8141     ,p_financial_task_flag  => l_Financial_Flag
8142     ,x_task_version_id      => l_task_version_id
8143     ,x_return_status        => l_return_status
8144     ,x_msg_count            => l_msg_count
8145     ,x_msg_data             => l_msg_data);
8146 
8147    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8148      x_msg_count := FND_MSG_PUB.count_msg;
8149      if x_msg_count = 1 then
8150        pa_interface_utils_pub.get_messages
8151        (p_encoded        => FND_API.G_TRUE,
8152         p_msg_index      => 1,
8153         p_msg_count      => l_msg_count,
8154         p_msg_data       => l_msg_data,
8155         p_data           => l_data,
8156         p_msg_index_out  => l_msg_index_out);
8157         x_msg_data := l_data;
8158      end if;
8159      raise API_ERROR;
8160    end if;
8161 
8162 
8163 --Hsiu added
8164 --inherit task type
8165    PA_TASK_PVT1.Inherit_task_type_attr(
8166                 p_task_id => l_task_id
8167                ,p_task_version_id => l_task_version_id
8168                ,x_return_status => l_return_status
8169                ,x_msg_count => l_msg_count
8170                ,x_msg_data => l_msg_data
8171    );
8172 
8173    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8174      x_msg_count := FND_MSG_PUB.count_msg;
8175      if x_msg_count = 1 then
8176        pa_interface_utils_pub.get_messages
8177        (p_encoded        => FND_API.G_TRUE,
8178         p_msg_index      => 1,
8179         p_msg_count      => l_msg_count,
8180         p_msg_data       => l_msg_data,
8181         p_data           => l_data,
8182         p_msg_index_out  => l_msg_index_out);
8183         x_msg_data := l_data;
8184      end if;
8185      raise API_ERROR;
8186    end if;
8187 --end inherit task type
8188 
8189 --my_error_msg( 'before PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION' );
8190 
8191    if PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
8192      PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
8193      ( p_validate_only           => FND_API.G_FALSE
8194       ,p_element_version_id      => l_task_version_id
8195       ,p_scheduled_start_date    => nvl(p_scheduled_start_date(i), sysdate)
8196       ,p_scheduled_end_date      => nvl(p_scheduled_finish_date(i),nvl(p_scheduled_start_date(i), sysdate))
8197       ,p_planned_effort          => p_planned_effort(i)
8198       ,p_Planned_Equip_Effort    => p_planned_equip_effort(i)
8199       ,x_pev_schedule_id         => l_pev_schedule_id
8200       ,x_return_status           => l_return_status
8201       ,x_msg_count           => l_msg_count
8202       ,x_msg_data            => l_msg_data );
8203 
8204      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8205        x_msg_count := FND_MSG_PUB.count_msg;
8206        if x_msg_count = 1 then
8207          pa_interface_utils_pub.get_messages
8208          (p_encoded        => FND_API.G_TRUE,
8209           p_msg_index      => 1,
8210           p_msg_count      => l_msg_count,
8211           p_msg_data       => l_msg_data,
8212           p_data           => l_data,
8213           p_msg_index_out  => l_msg_index_out);
8214           x_msg_data := l_data;
8215        end if;
8216        raise API_ERROR;
8217      end if;
8218 
8219 -- Hsiu added for date rollup; workplan only
8220      l_tasks_ver_ids.extend;
8221      l_tasks_ver_ids(l_tasks_ver_ids.count) := l_task_version_id;
8222 
8223    end if;
8224 
8225 
8226    -- anlee task weighting
8227    if l_outline_level = 1 then
8228      l_top_sub_count := l_top_sub_count + 1;
8229    end if;
8230    -- anlee End of changes
8231 
8232    l_outline_task_ref(l_outline_level) := l_task_version_id;
8233    l_prev_outline_level := l_outline_level;
8234   end LOOP;
8235 
8236 
8237   --bug 3301192 call the budgets apis
8238   if PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then /* this api called should have been cached but we dont have time now to do this. */
8239      PA_TASK_PUB1.call_add_planning_txns(
8240          p_tasks_ver_ids                  => l_tasks_ver_ids,
8241          p_planned_effort                 => p_planned_effort,
8242          p_project_id                     => p_project_id,
8243          p_structure_version_id           => p_structure_version_id,
8244          p_start_date                     => p_scheduled_start_date,
8245          p_end_date                       => p_scheduled_finish_date,
8246          x_return_status                  => l_return_status,
8247          x_msg_count                      => l_msg_count,
8248          x_msg_data                       => l_msg_data
8249       );
8250 
8251      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8252        x_msg_count := FND_MSG_PUB.count_msg;
8253        if x_msg_count = 1 then
8254          pa_interface_utils_pub.get_messages
8255          (p_encoded        => FND_API.G_TRUE,
8256           p_msg_index      => 1,
8257           p_msg_count      => l_msg_count,
8258           p_msg_data       => l_msg_data,
8259           p_data           => l_data,
8260           p_msg_index_out  => l_msg_index_out);
8261           x_msg_data := l_data;
8262        end if;
8263        raise API_ERROR;
8264      end if;
8265 
8266      --now call call delete planning for reference task version id.
8267      IF (p_ref_task_version_id <> p_structure_version_id) AND
8268         (p_outline_level(1) > 0)
8269      THEN
8270        l_task_ver_ids.extend(1); /* Venky */
8271        l_task_ver_ids(1) := p_ref_task_version_id;
8272        /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
8273        /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
8274        DECLARE
8275            --p1 bug 3888432
8276            l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8277            CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
8278              SELECT resource_assignment_id
8279                FROM pa_resource_assignments
8280               WHERE wbs_element_Version_id = c_task_ver_id
8281                 AND ta_display_flag = 'N';
8282            l_assign_id    NUMBER := NULL;
8283        BEGIN
8284            OPEN get_assignment_id(p_ref_task_version_id);
8285            FETCH get_assignment_id into l_assign_id;
8286            CLOSE get_assignment_id;
8287 
8288            IF (l_assign_id IS NOT NULL) THEN
8289              l_assign_ids.extend(1);
8290              l_assign_ids(1) := l_assign_id;
8291              pa_fp_planning_transaction_pub.delete_planning_transactions
8292              (
8293               p_context                      => 'WORKPLAN'
8294              ,p_task_or_res                  => 'ASSIGNMENT'
8295              --,p_element_version_id_tbl       => l_task_ver_ids
8296              ,p_resource_assignment_tbl => l_assign_ids
8297              ,x_return_status                => l_return_status
8298              ,x_msg_count                    => l_msg_count
8299              ,x_msg_data                     => l_msg_data
8300              );
8301            END IF;
8302        EXCEPTION
8303            WHEN OTHERS THEN
8304                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_STRUCTURE_TASK_PUB',
8305                                         p_procedure_name => 'CREATE_TASKS',
8306                                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
8307            RAISE API_ERROR;
8308        END;
8309      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8310        x_msg_count := FND_MSG_PUB.count_msg;
8311        if x_msg_count = 1 then
8312          pa_interface_utils_pub.get_messages
8313          (p_encoded        => FND_API.G_TRUE,
8314           p_msg_index      => 1,
8315           p_msg_count      => l_msg_count,
8316           p_msg_data       => l_msg_data,
8317           p_data           => l_data,
8318           p_msg_index_out  => l_msg_index_out);
8319           x_msg_data := l_data;
8320        end if;
8321        raise API_ERROR;
8322      end if;
8323      END IF;  --<<p_ref_task_version_id<>p_structure_version_id)
8324 
8325   end if;
8326 
8327   --bug 3301192 call the budgets apis
8328 
8329 --Hsiu added for date rollup; workplan only
8330 
8331   if PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
8332     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
8333                        p_commit => FND_API.G_FALSE,
8334                        p_element_versions => l_tasks_ver_ids,
8335                        x_return_status => l_return_status,
8336                        x_msg_count => l_msg_count,
8337                        x_msg_data => l_msg_data);
8338 
8339      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8340        x_msg_count := FND_MSG_PUB.count_msg;
8341        if x_msg_count = 1 then
8342          pa_interface_utils_pub.get_messages
8343          (p_encoded        => FND_API.G_TRUE,
8344           p_msg_index      => 1,
8345           p_msg_count      => l_msg_count,
8346           p_msg_data       => l_msg_data,
8347           p_data           => l_data,
8348           p_msg_index_out  => l_msg_index_out);
8349           x_msg_data := l_data;
8350        end if;
8351        raise API_ERROR;
8352      end if;
8353 
8354 --    IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id) = 'Y') AND
8355 --       (PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id) = 'N') THEN    --Replaced these line with the following for performance. Code added for bug 3010538 also does the same check.
8356     IF (l_shared = 'Y') AND
8357        (l_versioned = 'N')
8358 THEN
8359 
8360       PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
8361                   p_structure_version_id => p_structure_version_id
8362                  ,x_return_status => l_return_status
8363                  ,x_msg_count => l_msg_count
8364                  ,x_msg_data => l_msg_data
8365       );
8366 
8367       IF (l_return_status <> 'S') THEN
8368         x_msg_count := l_msg_count;
8369         x_msg_data := l_msg_data;
8370         RAISE API_ERROR;
8371       END IF;
8372     END IF;
8373 
8374     -- anlee task weighting
8375     PA_TASK_PUB1.Calc_Task_Weights(
8376      p_element_versions => l_tasks_ver_ids
8377     ,p_outline_level    => p_outline_level
8378     ,p_top_sub_count    => l_top_sub_count
8379     ,x_return_status    => l_return_status
8380     ,x_msg_count        => l_msg_count
8381     ,x_msg_data         => l_msg_data );
8382 
8383     if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8384       x_msg_count := FND_MSG_PUB.count_msg;
8385       if x_msg_count = 1 then
8386         pa_interface_utils_pub.get_messages
8387         (p_encoded        => FND_API.G_TRUE,
8388          p_msg_index      => 1,
8389          p_msg_count      => l_msg_count,
8390          p_msg_data       => l_msg_data,
8391          p_data           => l_data,
8392          p_msg_index_out  => l_msg_index_out);
8393          x_msg_data := l_data;
8394       end if;
8395       raise API_ERROR;
8396     end if;
8397     -- anlee end of changes
8398 
8399   END IF;
8400 
8401   x_return_status := FND_API.G_RET_STS_SUCCESS;
8402 EXCEPTION
8403 WHEN API_ERROR THEN
8404   rollback to create_tasks;
8405   x_return_status := FND_API.G_RET_STS_ERROR;
8406 WHEN OTHERS THEN
8407   rollback to create_tasks;
8408   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8409   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_STRUCTURE_TASK_PUB',
8410                           p_procedure_name => 'CREATE_TASKS',
8411                           p_error_text     => SUBSTRB(SQLERRM,1,240));
8412   raise;
8413 END CREATE_TASKS;
8414 
8415 
8416 -- anlee task weighting
8417 -- API name                  : Calc_Task_Weights
8418 -- Type                      : Utility
8419 -- Pre-reqs                  : None
8420 -- Return Value              : N/A
8421 -- Prameters
8422 -- p_commit                IN  VARCHAR2 := FND_API.G_FALSE
8423 -- p_element_versions      IN  PA_NUM_1000_NUM
8424 -- p_outline_level         IN  PA_NUM_1000_NUM
8425 -- p_top_peer_count        IN  NUMBER
8426 -- p_top_sub_count         IN  NUMBER
8427 -- x_msg_count             OUT NUMBER
8428 -- x_msg_data              OUT VARCHAR2
8429 -- x_return_status         OUT VARCHAR2
8430 --
8431 --  History
8432 --
8433 --  17-SEP-02   Andrew Lee             -Created
8434 --
8435 --
8436 
8437 PROCEDURE CALC_TASK_WEIGHTS
8438 ( p_element_versions      IN PA_NUM_1000_NUM
8439  ,p_outline_level         IN PA_NUM_1000_NUM
8440  ,p_top_sub_count         IN NUMBER
8441  ,x_msg_count             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8442  ,x_msg_data              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8443  ,x_return_status         OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
8444 IS
8445   CURSOR get_child_count(c_parent_element_version_id NUMBER)
8446   IS
8447   SELECT count(object_id_to1)
8448   FROM PA_OBJECT_RELATIONSHIPS
8449   WHERE object_id_from1 = c_parent_element_version_id
8450   AND   object_type_to = 'PA_TASKS'
8451   AND   relationship_type = 'S'
8452   AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
8453 
8454   CURSOR get_summed_duration(c_parent_element_version_id NUMBER)
8455   IS
8456   SELECT sum(ppevs.duration)
8457   FROM pa_proj_elem_ver_schedule ppevs,
8458        pa_object_relationships por,
8459        pa_proj_element_versions ppev,
8460        pa_proj_elements ppe,
8461        pa_task_types ptt
8462   WHERE por.object_id_from1 = c_parent_element_version_id
8463   AND   por.object_type_to = 'PA_TASKS'
8464   AND   por.relationship_type = 'S'
8465   AND   por.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8466   AND   por.object_id_to1 = ppevs.element_version_id
8467   AND   por.object_id_to1 = ppev.element_version_id
8468   AND   ppev.proj_element_id = ppe.proj_element_id
8469   AND   ppe.project_id  = ppevs.project_id       /* for bug 2822963 */
8470   AND   ppe.TYPE_ID   = ptt.task_type_id
8471   AND   ptt.object_type = 'PA_TASKS'            /* for bug 3279978 FP M Enhancement */
8472   AND   ptt.prog_entry_enable_flag = 'Y';
8473 
8474   CURSOR get_task_duration(c_element_version_id NUMBER,c_project_id NUMBER)
8475   IS
8476   SELECT duration
8477   FROM pa_proj_elem_ver_schedule
8478   WHERE element_version_id = c_element_version_id
8479   AND   project_id = c_project_id;   /* for bug 2822963 */
8480 
8481   CURSOR get_parent(c_element_version_id NUMBER)
8482   IS
8483   SELECT object_id_from1
8484   FROM pa_object_relationships
8485   WHERE object_id_to1 = c_element_version_id
8486   AND   object_type_to = 'PA_TASKS'
8487   AND   relationship_type = 'S'
8488   AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
8489 
8490   CURSOR check_progress_allowed(c_element_version_id NUMBER)
8491   IS
8492   SELECT ptt.prog_entry_enable_flag, ppe.project_id     /* for bug 2822963 */
8493   FROM   pa_task_types ptt,
8494          pa_proj_element_versions ppev,
8495          pa_proj_elements ppe
8496   WHERE  ppev.element_version_id = c_element_version_id
8497   AND    ppev.proj_element_id = ppe.proj_element_id
8498   AND    ptt.object_type = 'PA_TASKS'            /* for bug 3279978 FP M Enhancement */
8499   AND    ppe.TYPE_ID   = ptt.task_type_id;
8500 
8501   CURSOR get_existing_weights(c_parent_element_version_id NUMBER)
8502   IS
8503   SELECT sum(weighting_percentage)
8504   FROM   PA_OBJECT_RELATIONSHIPS
8505   WHERE  object_id_from1 = c_parent_element_version_id
8506   AND    object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8507   AND    object_type_to = 'PA_TASKS'
8508   AND    relationship_type = 'S';
8509 
8510   -- Bug 3098574. This cursor gives the number of progressible tasks
8511   -- under a parent. This count will be used to pro-rate the task weightage
8512   -- on all the child tasks equally.
8513   CURSOR get_progressible_child_count(c_parent_element_version_id NUMBER)
8514   IS
8515   SELECT count(rel.object_id_to1)
8516   FROM PA_OBJECT_RELATIONSHIPS rel,pa_proj_element_versions ver,pa_proj_elements ele,pa_task_types tt
8517   WHERE rel.object_id_from1 = c_parent_element_version_id
8518   AND   rel.object_type_to = 'PA_TASKS'
8519   AND   rel.relationship_type = 'S'
8520   AND   rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8521   AND   rel.object_id_to1 = ver.element_version_id
8522   AND   ver.proj_element_id = ele.proj_element_id
8523   AND   ele.type_id = tt.task_type_id
8524   AND   tt.object_type = 'PA_TASKS'            /* for bug 3279978 FP M Enhancement */
8525   AND   tt.prog_entry_enable_flag = 'Y';
8526 
8527   l_progressible_child_count NUMBER; -- Bug 3098574.
8528 
8529   -- Bug 3098574. This table will store the number of progressible tasks
8530   -- under a parent. This is used in order to cache the data.
8531   TYPE prog_child_count IS TABLE OF NUMBER
8532        INDEX BY BINARY_INTEGER;
8533   l_prog_child_count     prog_child_count;
8534 
8535   TYPE durations IS TABLE OF NUMBER
8536        INDEX BY BINARY_INTEGER;
8537 
8538   -- This table stores the summed duration for all of the child tasks of a parent task/structure. The
8539   -- index is the parent element version id.
8540   l_durations durations;
8541   l_is_sub_new VARCHAR2(1);
8542   l_outline_level NUMBER;
8543   l_parent_element_version_id NUMBER;
8544   l_element_version_id NUMBER;
8545   l_total_sub_count NUMBER;
8546   l_total_duration NUMBER;
8547   l_progress_allowed VARCHAR2(1);
8548   l_task_duration NUMBER;
8549 --  l_task_weight PA_OBJECT_RELATIONSHIPS.weighting_percentage%TYPE;
8550   l_task_weight NUMBER;
8551   l_existing_weight NUMBER;
8552   l_remaining_weight NUMBER;
8553   l_project_id NUMBER;
8554 
8555 --Start Changes for bug 3083950
8556   l_debug_mode              VARCHAR2(1);
8557   l_module_name             VARCHAR2(100) := 'pa.plsql.PA_TASK_PUB1';
8558   l_temp_number             NUMBER(17,2);
8559   l_diff_number             NUMBER;
8560   l_sum_temp_number         NUMBER(17,4);
8561   l_constant_temp_number    NUMBER(17,4) := 0.0100;
8562 
8563   l_debug_level2                  CONSTANT NUMBER := 2;
8564   l_debug_level3                  CONSTANT NUMBER := 3;
8565   l_debug_level4                  CONSTANT NUMBER := 4;
8566   l_debug_level5                  CONSTANT NUMBER := 5;
8567   l_debug_level6                  CONSTANT NUMBER := 6;
8568 
8569 
8570   TYPE task_weightage_tbl IS TABLE OF NUMBER
8571      INDEX BY BINARY_INTEGER;
8572 
8573 
8574   l_task_weightage_tbl     task_weightage_tbl;
8575   --End Changes for bug 3083950
8576 
8577 BEGIN
8578 
8579     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8580 
8581     IF l_debug_mode = 'Y' THEN
8582           pa_debug.g_err_stage:= 'Entering CALC_TASK_WEIGHTS';
8583           pa_debug.write(l_module_name,pa_debug.g_err_stage,
8584                                    l_debug_level2);
8585 
8586 
8587           pa_debug.set_curr_function( p_function   => 'PA_TASK_PUB1.CALC_TASK_WEIGHTS',
8588                                  p_debug_mode => l_debug_mode );
8589 
8590      END IF;
8591 
8592 
8593   l_is_sub_new := NULL;
8594 
8595   -- Loop through all of the newly created tasks from create_tasks
8596   for i in 1..1000 LOOP
8597     if p_outline_level(i) is null then
8598       exit;
8599     end if;
8600 
8601     OPEN get_parent(p_element_versions(i));
8602     FETCH get_parent INTO l_parent_element_version_id;
8603     CLOSE get_parent;
8604 
8605     l_element_version_id := p_element_versions(i);
8606     l_outline_level := p_outline_level(i);
8607 
8608     if l_outline_level = 0 then
8609       -- Automatically update task weighting as zero
8610       UPDATE PA_OBJECT_RELATIONSHIPS
8611       SET weighting_percentage = 0
8612       WHERE object_id_from1 = l_parent_element_version_id
8613       AND   object_id_to1 = l_element_version_id
8614       AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8615       AND   object_type_to = 'PA_TASKS'
8616       AND   relationship_type = 'S';
8617     elsif l_outline_level = 1 then
8618       if l_is_sub_new is NULL then
8619         -- Determine whether there we any existing tasks for this level before
8620         -- create_tasks was called
8621         OPEN get_child_count(l_parent_element_version_id);
8622         FETCH get_child_count INTO l_total_sub_count;
8623         CLOSE get_child_count;
8624 
8625         if l_total_sub_count > p_top_sub_count then
8626           l_is_sub_new := 'N';
8627         else
8628           l_is_sub_new := 'Y';
8629         end if;
8630       end if;
8631 
8632       if l_is_sub_new = 'N' then
8633         -- There were existing tasks at this level, populate
8634         -- task weights of new tasks to 0
8635         UPDATE PA_OBJECT_RELATIONSHIPS
8636         SET weighting_percentage = 0
8637         WHERE object_id_from1 = l_parent_element_version_id
8638         AND   object_id_to1 = l_element_version_id
8639         AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8640         AND   object_type_to = 'PA_TASKS'
8641         AND   relationship_type = 'S';
8642       else
8643         -- There were no existing tasks at this level, populate
8644         -- the correct task weight
8645         OPEN check_progress_allowed(l_element_version_id);
8646         FETCH check_progress_allowed INTO l_progress_allowed,l_project_id;  /* for bug 2822963 */
8647         CLOSE check_progress_allowed;
8648 
8649         if l_progress_allowed = 'N' then
8650           -- Populate task weight as zero
8651           UPDATE PA_OBJECT_RELATIONSHIPS
8652           SET weighting_percentage = 0
8653           WHERE object_id_from1 = l_parent_element_version_id
8654           AND   object_id_to1 = l_element_version_id
8655           AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8656           AND   object_type_to = 'PA_TASKS'
8657           AND   relationship_type = 'S';
8658         else
8659 
8660           if l_durations.exists(l_parent_element_version_id) then
8661             NULL;
8662           else
8663             OPEN get_summed_duration(l_parent_element_version_id);
8664             FETCH get_summed_duration INTO l_total_duration;
8665             CLOSE get_summed_duration;
8666 
8667             l_durations(l_parent_element_version_id) := l_total_duration;
8668           end if;
8669 
8670           OPEN get_task_duration(l_element_version_id,l_project_id); /* for bug 2822963 */
8671           FETCH get_task_duration INTO l_task_duration;
8672           CLOSE get_task_duration;
8673 
8674           -- Bug 3098574. When the summed duration of the child tasks
8675           -- of a parent is 0, get the number of child tasks and calculate
8676           -- the weighatage as 1 / number of tasks * 100.
8677 /*          IF (l_durations(l_parent_element_version_id) IS NULL) OR
8678              (l_durations(l_parent_element_version_id) = 0) THEN
8679             l_task_weight := 0;
8680           ELSE*/
8681 
8682             IF (l_durations(l_parent_element_version_id) IS NULL) OR
8683              (l_durations(l_parent_element_version_id) = 0) THEN
8684                IF l_prog_child_count.exists(l_parent_element_version_id) THEN
8685                     l_progressible_child_count := l_prog_child_count(l_parent_element_version_id);
8686                ELSE
8687                     OPEN get_progressible_child_count(l_parent_element_version_id);
8688                     FETCH get_progressible_child_count into l_progressible_child_count;
8689                     CLOSE get_progressible_child_count;
8690                     l_prog_child_count(l_parent_element_version_id) := l_progressible_child_count;
8691                END IF;
8692 
8693                IF l_progressible_child_count  <> 0 THEN
8694                     l_task_weight := ( 1 / l_progressible_child_count ) * 100;
8695                ELSE -- This should never occur.
8696                     l_task_weight := 0;
8697                END IF;
8698             ELSE
8699                l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
8700             END IF;
8701 
8702             OPEN get_existing_weights(l_parent_element_version_id);
8703             FETCH get_existing_weights INTO l_existing_weight;
8704             CLOSE get_existing_weights;
8705 
8706             l_remaining_weight := 100 - l_existing_weight;
8707             -- l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100; Bug 3098574.
8708 
8709             --Start Changes for bug 3083950
8710             -- The Bug is that the final sum of wieghting percentage of all childs of a task does not summ to 100
8711             -- Is caused as while dtoring in the database the weighting % is rounding upto 2nd decimal
8712             -- Strategy here is to store the difference of weighting % we lose or gain while truncating to 2nd decimal
8713             -- against the parent task id in local table for all its child task and as the sum of difference goes above -0.01
8714             -- or below -0.01 just increase or decrease the task weightage of the child task being processed by 0.01
8715             -- SO in this way we will cover the weighting % which we have lost by rounding to 2nd decimal as the loss or gain reaches 0.1
8716             IF l_debug_mode = 'Y' THEN
8717                  pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
8718                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8719             END IF;
8720 
8721             l_temp_number := l_task_weight;
8722 
8723             IF l_debug_mode = 'Y' THEN
8724                  pa_debug.g_err_stage:= 'Value of l_temp_number' || l_temp_number;
8725                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8726             END IF;
8727 
8728             l_diff_number := l_task_weight - l_temp_number;
8729 
8730             IF l_debug_mode = 'Y' THEN
8731                  pa_debug.g_err_stage:= 'Value of l_diff_number' || l_diff_number;
8732                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8733             END IF;
8734 
8735             IF(l_diff_number <> 0) THEN
8736 
8737                  IF l_debug_mode = 'Y' THEN
8738                       pa_debug.g_err_stage:= 'Value of l_parent_element_version_id' || l_parent_element_version_id;
8739                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8740                  END IF;
8741 
8742                  IF l_task_weightage_tbl.exists(l_parent_element_version_id) THEN
8743                       l_sum_temp_number := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
8744 
8745                       IF l_debug_mode = 'Y' THEN
8746                            pa_debug.g_err_stage:= 'Value of l_sum_temp_number' || l_sum_temp_number;
8747                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8748 
8749                            pa_debug.g_err_stage:= 'Value of l_constant_temp_number' || l_constant_temp_number;
8750                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8751                       END IF;
8752                       IF( l_sum_temp_number >= l_constant_temp_number ) THEN
8753                            l_task_weight := l_task_weight + 0.01;
8754                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number - 0.01;
8755                            IF l_debug_mode = 'Y' THEN
8756                                 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
8757                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8758                            END IF;
8759                       ELSIF ( l_sum_temp_number <= -l_constant_temp_number ) THEN
8760                            l_task_weight := l_task_weight - 0.01;
8761                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number + 0.01;
8762                            IF l_debug_mode = 'Y' THEN
8763                                 pa_debug.g_err_stage:= 'In else IF Value of l_task_weight' || l_task_weight;
8764                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8765                            END IF;
8766                       ELSE
8767                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
8768                            IF l_debug_mode = 'Y' THEN
8769                                 pa_debug.g_err_stage:= 'in else Value of l_task_weight' || l_task_weight;
8770                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8771                            END IF;
8772                       END IF;
8773                  ELSE
8774                       l_task_weightage_tbl(l_parent_element_version_id) := l_diff_number;
8775                  END IF;
8776 
8777                  IF l_debug_mode = 'Y' THEN
8778                       pa_debug.g_err_stage:= 'Value of task_weightage_tbl' || l_task_weightage_tbl(l_parent_element_version_id);
8779                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8780                  END IF;
8781 
8782             END IF;
8783 
8784             --End Changes for bug 3083950
8785 
8786             if(abs(l_remaining_weight - l_task_weight) <= .05) then
8787               l_task_weight := l_remaining_weight;
8788             end if;
8789 
8790           --END IF; Bug 3098574.
8791           UPDATE PA_OBJECT_RELATIONSHIPS
8792           SET weighting_percentage = l_task_weight
8793           WHERE object_id_from1 = l_parent_element_version_id
8794           AND   object_id_to1 = l_element_version_id
8795           AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8796           AND   object_type_to = 'PA_TASKS'
8797           AND   relationship_type = 'S';
8798         end if;
8799       end if;
8800     else
8801       -- In this case, outline level is > 1
8802       -- There will never be pre-existing tasks on these levels
8803       OPEN check_progress_allowed(l_element_version_id);
8804       FETCH check_progress_allowed INTO l_progress_allowed,l_project_id; /* for bug 2822963 */
8805       CLOSE check_progress_allowed;
8806 
8807       if l_progress_allowed = 'N' then
8808         -- Populate task weight as zero
8809         UPDATE PA_OBJECT_RELATIONSHIPS
8810         SET weighting_percentage = 0
8811         WHERE object_id_from1 = l_parent_element_version_id
8812         AND   object_id_to1 = l_element_version_id
8813         AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8814         AND   object_type_to = 'PA_TASKS'
8815         AND   relationship_type = 'S';
8816       else
8817 
8818         if l_durations.exists(l_parent_element_version_id) then
8819           NULL;
8820         else
8821           OPEN get_summed_duration(l_parent_element_version_id);
8822           FETCH get_summed_duration INTO l_total_duration;
8823           CLOSE get_summed_duration;
8824 
8825           l_durations(l_parent_element_version_id) := l_total_duration;
8826         end if;
8827 
8828         OPEN get_task_duration(l_element_version_id,l_project_id);  /* for bug 2822963 */
8829         FETCH get_task_duration INTO l_task_duration;
8830         CLOSE get_task_duration;
8831 
8832          -- Bug 3098574. When the summed duration of the child tasks
8833          -- of a parent is 0, get the number of child tasks and calculate
8834          -- the weighatage as 1 / number of tasks * 100.
8835         /*IF (l_durations(l_parent_element_version_id) IS NULL) OR
8836            (l_durations(l_parent_element_version_id) = 0) THEN
8837           l_task_weight := 0;
8838         ELSE*/
8839 
8840          IF (l_durations(l_parent_element_version_id) IS NULL) OR
8841           (l_durations(l_parent_element_version_id) = 0) THEN
8842             IF l_prog_child_count.exists(l_parent_element_version_id) THEN
8843                  l_progressible_child_count := l_prog_child_count(l_parent_element_version_id);
8844             ELSE
8845                  OPEN get_progressible_child_count(l_parent_element_version_id);
8846                  FETCH get_progressible_child_count into l_progressible_child_count;
8847                  CLOSE get_progressible_child_count;
8848                  l_prog_child_count(l_parent_element_version_id) := l_progressible_child_count;
8849             END IF;
8850             IF l_progressible_child_count  <> 0 THEN
8851                  l_task_weight := ( 1 / l_progressible_child_count ) * 100;
8852             ELSE -- This should never occur.
8853                  l_task_weight := 0;
8854             END IF;
8855 
8856          ELSE
8857             l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
8858          END IF;
8859 
8860           OPEN get_existing_weights(l_parent_element_version_id);
8861           FETCH get_existing_weights INTO l_existing_weight;
8862           CLOSE get_existing_weights;
8863 
8864           l_remaining_weight := 100 - l_existing_weight;
8865           --l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100; Bug 3098574.
8866 
8867             --Start Changes for bug 3083950
8868             -- The Bug is that the final sum of wieghting percentage of all childs of a task does not summ to 100
8869             -- Is caused as while dtoring in the database the weighting % is rounding upto 2nd decimal
8870             -- Strategy here is to store the difference of weighting % we lose or gain while truncating to 2nd decimal
8871             -- against the parent task id in local table for all its child task and as the sum of difference goes above -0.01
8872             -- or below -0.01 just increase or decrease the task weightage of the child task being processed by 0.01
8873             -- SO in this way we will cover the weighting % which we have lost by rounding to 2nd decimal as the loss or gain reaches 0.1
8874 
8875             IF l_debug_mode = 'Y' THEN
8876                  pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
8877                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8878             END IF;
8879 
8880             l_temp_number := l_task_weight;
8881 
8882             IF l_debug_mode = 'Y' THEN
8883                  pa_debug.g_err_stage:= 'Value of l_temp_number' || l_temp_number;
8884                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8885             END IF;
8886 
8887             l_diff_number := l_task_weight - l_temp_number;
8888 
8889             IF l_debug_mode = 'Y' THEN
8890                  pa_debug.g_err_stage:= 'Value of l_diff_number' || l_diff_number;
8891                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8892             END IF;
8893 
8894             IF(l_diff_number <> 0) THEN
8895 
8896                  IF l_debug_mode = 'Y' THEN
8897                       pa_debug.g_err_stage:= 'Value of l_parent_element_version_id' || l_parent_element_version_id;
8898                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8899                  END IF;
8900 
8901                  IF l_task_weightage_tbl.exists(l_parent_element_version_id) THEN
8902 
8903                       l_sum_temp_number := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
8904 
8905                       IF l_debug_mode = 'Y' THEN
8906                            pa_debug.g_err_stage:= 'Value of l_sum_temp_number' || l_sum_temp_number;
8907                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8908 
8909                            pa_debug.g_err_stage:= 'Value of l_constant_temp_number' || l_constant_temp_number;
8910                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8911                       END IF;
8912 
8913                       IF( l_sum_temp_number >= l_constant_temp_number ) THEN
8914                            l_task_weight := l_task_weight + 0.01;
8915                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number - 0.01;
8916                            IF l_debug_mode = 'Y' THEN
8917                                 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
8918                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8919                            END IF;
8920                       ELSIF ( l_sum_temp_number <= -l_constant_temp_number ) THEN
8921                            l_task_weight := l_task_weight - 0.01;
8922                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number + 0.01;
8923                            IF l_debug_mode = 'Y' THEN
8924                                 pa_debug.g_err_stage:= 'In else IF Value of l_task_weight' || l_task_weight;
8925                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8926                            END IF;
8927                       ELSE
8928                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
8929                            IF l_debug_mode = 'Y' THEN
8930                                 pa_debug.g_err_stage:= 'in else Value of l_task_weight' || l_task_weight;
8931                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8932                            END IF;
8933                       END IF;
8934                  ELSE
8935                       l_task_weightage_tbl(l_parent_element_version_id) := l_diff_number;
8936                  END IF;
8937 
8938                  IF l_debug_mode = 'Y' THEN
8939                       pa_debug.g_err_stage:= 'Value of task_weightage_tbl' || l_task_weightage_tbl(l_parent_element_version_id);
8940                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
8941                  END IF;
8942 
8943             END IF;
8944             --End  Changes for bug 3083950
8945 
8946           if(abs(l_remaining_weight - l_task_weight) <= .05) then
8947             l_task_weight := l_remaining_weight;
8948           end if;
8949         --END IF; Bug 3098574.
8950         UPDATE PA_OBJECT_RELATIONSHIPS
8951         SET weighting_percentage = l_task_weight
8952         WHERE object_id_from1 = l_parent_element_version_id
8953         AND   object_id_to1 = l_element_version_id
8954         AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8955         AND   object_type_to = 'PA_TASKS'
8956         AND   relationship_type = 'S';
8957       end if;
8958     end if;
8959 
8960   end LOOP;
8961 
8962      IF l_debug_mode = 'Y' THEN
8963           pa_debug.reset_curr_function;
8964      END IF;
8965 
8966   x_return_status := FND_API.G_RET_STS_SUCCESS;
8967 EXCEPTION
8968 WHEN OTHERS THEN
8969   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8970   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
8971                           p_procedure_name => 'CALC_TASK_WEIGHTS',
8972                           p_error_text     => SUBSTRB(SQLERRM,1,240));
8973      IF l_debug_mode = 'Y' THEN
8974           pa_debug.reset_curr_function;
8975      END IF;
8976 
8977   raise;
8978 END CALC_TASK_WEIGHTS;
8979 
8980 --   API name                      : Update_Task_Weighting
8981 --   Type                          : Public Procedure
8982 --   Pre-reqs                      : None
8983 --   Return Value                  : N/A
8984 --   Parameters
8985 --   p_api_version                       IN  NUMBER      := 1.0
8986 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
8987 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
8988 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
8989 --   p_validation_level                  IN  VARCHAR2    := 100
8990 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
8991 --   p_debug_mode                        IN  VARCHAR2    := 'N'
8992 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8993 --   p_object_relationship_id            IN  NUMBER
8994 --   p_weighting_percentage              IN  NUMBER
8995 --   p_record_version_number             IN  NUMBER
8996 --   x_return_status                     OUT VARCHAR2
8997 --   x_msg_count                         OUT NUMBER
8998 --   x_msg_data                          OUT VARCHAR2
8999 --
9000 --  History
9001 --
9002 --  20-SEP-02   hyau             -Created
9003 --
9004 --
9005   procedure Update_Task_Weighting
9006   (
9007    p_api_version                       IN  NUMBER      := 1.0
9008    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
9009    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
9010    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
9011    ,p_validation_level                  IN  VARCHAR2    := 100
9012    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
9013    ,p_debug_mode                        IN  VARCHAR2    := 'N'
9014    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9015    ,p_object_relationship_id            IN  NUMBER
9016    ,p_weighting_percentage              IN  NUMBER
9017    ,p_record_version_number             IN  NUMBER
9018    ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9019    ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9020    ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9021   )
9022   IS
9023 
9024   BEGIN
9025 
9026     pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK_WEIGHTING');
9027 
9028     IF (p_debug_mode = 'Y') THEN
9029       pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_WEIGHTING begin');
9030     END IF;
9031 
9032     IF (p_commit = FND_API.G_TRUE) THEN
9033       savepoint update_task_weighting;
9034     END IF;
9035 
9036     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
9037       FND_MSG_PUB.initialize;
9038     END IF;
9039 
9040     PA_TASK_PVT1.Update_Task_Weighting(
9041      p_object_relationship_id      => p_object_relationship_id
9042     ,p_weighting_percentage        => p_weighting_percentage
9043     ,p_record_version_number       => p_record_version_number
9044     ,x_return_status               => x_return_status
9045         ,x_msg_count                   => x_msg_count
9046     ,x_msg_data                    => x_msg_data
9047     );
9048 
9049 EXCEPTION
9050     when FND_API.G_EXC_ERROR then
9051       if p_commit = FND_API.G_TRUE then
9052          rollback to update_task_weighting;
9053       end if;
9054       x_return_status := FND_API.G_RET_STS_ERROR;
9055     when FND_API.G_EXC_UNEXPECTED_ERROR then
9056       if p_commit = FND_API.G_TRUE then
9057          rollback to update_task_weighting;
9058       end if;
9059       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9060       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
9061                               p_procedure_name => 'UPDATE_TASK_WEIGHTING',
9062                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9063     when OTHERS then
9064       if p_commit = FND_API.G_TRUE then
9065          rollback to update_task_weighting;
9066       end if;
9067       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9068       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
9069                               p_procedure_name => 'UPDATE_TASK_WEIGHTING',
9070                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9071       raise;
9072 
9073 END Update_Task_Weighting;
9074 
9075 -- Amit : Following procedure added for Bug 2838700
9076 
9077 PROCEDURE INDENT_TASK_VERSION_BULK (
9078  p_api_version                IN    NUMBER   :=1.0,
9079  p_init_msg_list              IN    VARCHAR2 :=FND_API.G_TRUE,
9080  p_commit             IN    VARCHAR2 :=FND_API.G_FALSE,
9081  p_validate_only              IN    VARCHAR2 :=FND_API.G_TRUE,
9082  p_validation_level       IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
9083  p_calling_module         IN    VARCHAR2 :='SELF_SERVICE',
9084  p_debug_mode             IN    VARCHAR2 :='N',
9085  p_max_msg_count          IN    NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9086  p_structure_version_id       IN    NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9087  p_task_version_id        IN    NUMBER,
9088  p_project_id             IN    NUMBER,
9089  p_record_version_number      IN    NUMBER,
9090  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
9091  x_msg_count              OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
9092  x_msg_data           OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9093 ) IS
9094 
9095 
9096 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
9097     SELECT 'Y'
9098     FROM pa_proj_structure_types ppst
9099         ,pa_structure_types pst
9100     WHERE ppst.proj_element_id = c_structure_id
9101     AND ppst.structure_type_id = pst.structure_type_id
9102     AND pst.structure_type_class_code IN( 'FINANCIAL' );
9103 
9104 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
9105      SELECT 'Y'
9106      FROM dual
9107      WHERE EXISTS(
9108     SELECT 'xyz'
9109     FROM pa_proj_elem_ver_structure
9110     WHERE proj_element_id = c_structure_id
9111     AND project_id = c_project_id
9112     AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
9113         );
9114 
9115 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
9116     SELECT object_id_from1
9117     FROM pa_object_relationships
9118     WHERE object_id_to1 = c_elem_ver_id
9119     AND object_type_to = 'PA_TASKS'
9120     AND relationship_type = 'S';
9121 
9122 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
9123     SELECT object_id_from1
9124      , object_relationship_id
9125      , record_version_number
9126      , relationship_subtype
9127     FROM pa_object_relationships
9128     WHERE object_id_to1 = p_child_version_id
9129     AND relationship_type = 'S';
9130 
9131 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
9132 
9133 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
9134    SELECT a.object_id_from1
9135     , a.weighting_percentage
9136    FROM pa_object_relationships a
9137    WHERE a.object_id_to1 = c_task_version_id
9138    AND a.object_type_to = 'PA_TASKS'
9139    AND a.relationship_type = 'S'
9140    AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
9141 
9142 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
9143    SELECT '1'
9144    FROM dual
9145    WHERE EXISTS
9146        (SELECT  'xyz'
9147        FROM pa_object_relationships
9148        WHERE object_id_from1 = c_task_version_id
9149        AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
9150        AND relationship_type = 'S'
9151        );
9152 
9153 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
9154   SELECT ptt.prog_entry_enable_flag
9155   FROM    pa_task_types ptt
9156     , pa_proj_element_versions ppev,
9157           pa_proj_elements ppe
9158   WHERE  ppev.element_version_id = c_element_version_id
9159   AND    ppev.proj_element_id = ppe.proj_element_id
9160   AND    ptt.object_type = 'PA_TASKS'            /* for bug 3279978 FP M Enhancement */
9161   AND    ppe.TYPE_ID   = ptt.task_type_id;
9162 
9163 
9164 
9165   l_api_name            CONSTANT VARCHAR(30) := 'INDENT_TASK_VERSION_BULK';
9166   l_api_version         CONSTANT NUMBER      := 1.0;
9167   l_return_status       VARCHAR2(1);
9168   l_msg_count           NUMBER;
9169   l_msg_data            VARCHAR2(250);
9170   l_data            VARCHAR2(250);
9171   l_msg_index_out       NUMBER;
9172 
9173   l_peer_or_sub         VARCHAR2(30);
9174   l_project_id          NUMBER;
9175   l_structure_id        NUMBER;
9176   l_ref_task_id         NUMBER;
9177   l_task_id                     NUMBER;
9178   l_task_record_version_number  NUMBER;
9179   l_wbs_record_version_number   NUMBER;
9180   l_dummy_char                  VARCHAR2(1);
9181   l_published_version           VARCHAR2(1);
9182   l_relationship_subtype        VARCHAR2(20);
9183   l_struc_version_from          NUMBER;
9184   l_task_version_from           NUMBER;
9185   l_version_from        NUMBER;
9186   l_versioned           VARCHAR2(1) := 'N';
9187   l_shared          VARCHAR2(1) := 'N';
9188 
9189   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
9190   l_parent_ver_id       NUMBER;
9191   l_error_msg_code      VARCHAR2(30);
9192 
9193   src_elem_ver_id       NUMBER;
9194   src_proj_element_id       NUMBER;
9195   src_wbs_number        VARCHAR2(240);
9196   src_seq_number        NUMBER;
9197   src_wbs_level         NUMBER;
9198   src_parent_str_ver_id     NUMBER;
9199   src_object_type       VARCHAR2(30);
9200 
9201   ref_elem_ver_id       NUMBER;
9202   ref_proj_element_id       NUMBER;
9203   ref_wbs_number        VARCHAR2(240);
9204   ref_seq_number        NUMBER;
9205   ref_wbs_level         NUMBER;
9206   ref_parent_str_ver_id     NUMBER;
9207   ref_object_type       VARCHAR2(30);
9208 
9209   l_old_parent_id       NUMBER;
9210   l_dummy           VARCHAR2(1);
9211 
9212   l_new_weighting       NUMBER(17,2);
9213   l_old_weighting       NUMBER(17,2);
9214   l_progress_allowed        VARCHAR2(1);
9215 
9216   l_element_version_id_tab  PA_FORECAST_GLOB.NumberTabTyp;
9217   l_proj_element_id_tab     PA_FORECAST_GLOB.NumberTabTyp;
9218   l_object_type_tab     PA_FORECAST_GLOB.VCTabTyp;
9219   l_project_id_tab      PA_FORECAST_GLOB.NumberTabTyp;
9220   l_parent_str_version_id_tab   PA_FORECAST_GLOB.NumberTabTyp;
9221   l_display_sequence_tab    PA_FORECAST_GLOB.NumberTabTyp;
9222   l_wbs_level_tab       PA_FORECAST_GLOB.NumberTabTyp;
9223   l_wbs_number_tab      PA_FORECAST_GLOB.VCTabTyp;
9224   l_record_version_tab      PA_FORECAST_GLOB.NumberTabTyp;
9225   l_changed_flag_tab        PA_FORECAST_GLOB.VC1TabTyp;
9226 
9227   l_wbs_number          VARCHAR2(1000);
9228   src_branch_mask       VARCHAR2(1000);
9229   ref_branch_mask       VARCHAR2(1000);
9230   l_str1            VARCHAR2(1000);
9231   l_str2            VARCHAR2(1000);
9232   l_number          NUMBER;
9233   l_new_wbs_number      VARCHAR2(1000);
9234   l_user_id         NUMBER;
9235   l_login_id            NUMBER;
9236 
9237 --bug 2843737
9238   CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
9239     select object_id_from1
9240       from pa_object_relationships
9241      where object_id_to1 = c_object_id_to1
9242        and relationship_type = 'S';
9243   l_ref_parent_ver_id          NUMBER;
9244 --end bug 2843737
9245 
9246    CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
9247     select wbs_number
9248       from pa_proj_element_versions
9249      where element_version_id = c_elem_ver_id
9250      and object_type ='PA_TASKS';
9251 
9252 -- hyau Bug 2852753
9253    l_delete_project_allowed      VARCHAR2(1);
9254    l_update_proj_num_allowed      VARCHAR2(1);
9255    l_update_proj_name_allowed    VARCHAR2(1);
9256    l_update_proj_desc_allowed    VARCHAR2(1);
9257    l_update_proj_dates_allowed    VARCHAR2(1);
9258    l_update_proj_status_allowed  VARCHAR2(1);
9259    l_update_proj_manager_allowed  VARCHAR2(1);
9260    l_update_proj_org_allowed      VARCHAR2(1);
9261    l_add_task_allowed            VARCHAR2(1);
9262    l_delete_task_allowed          VARCHAR2(1);
9263    l_update_task_num_allowed      VARCHAR2(1);
9264    l_update_task_name_allowed    VARCHAR2(1);
9265    l_update_task_dates_allowed    VARCHAR2(1);
9266    l_update_task_desc_allowed    VARCHAR2(1);
9267    l_update_parent_task_allowed  VARCHAR2(1);
9268    l_update_task_org_allowed      VARCHAR2(1);
9269 
9270    l_err_code         NUMBER        := 0;
9271    l_err_stack        VARCHAR2(200) := NULL;
9272    l_err_stage        VARCHAR2(200) := NULL;
9273 
9274    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
9275 
9276    CURSOR get_product_code ( c_project_id NUMBER ) IS
9277    SELECT pm_product_code
9278    FROM PA_PROJECTS_ALL
9279    WHERE project_id = c_project_id;
9280 
9281    l_cur_project_id      NUMBER;
9282    CURSOR cur_proj_id
9283    IS
9284      SELECT project_id
9285        FROM pa_proj_element_versions
9286       WHERE element_version_id = p_structure_version_id;
9287 
9288 -- end hyau Bug 2852753
9289 
9290 -- Merged from 85
9291 --Bug 2947492 ( indent )
9292 
9293 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
9294 l_parent_task_id             NUMBER;
9295 l_old_parent_task_id             NUMBER;
9296 l_top_task_id                NUMBER;
9297 l_old_top_task_id            NUMBER;  --bug 2967204
9298 
9299 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
9300     SELECT parent_task_id, top_task_id FROM pa_tasks
9301      WHERE project_id = c_project_id and task_id = c_task_id;
9302 
9303 --End Bug 2947492  ( indent )
9304 -- Merged from 85
9305 
9306 --bug 3053281
9307   l_wp_type              VARCHAR2(1);
9308   l_weighting_basis_Code VARCHAR2(30);
9309 --end bug 3053281
9310 
9311   --3035902: process update flag changes
9312   cursor get_task_type_id(c_proj_element_id NUMBER) IS
9313       select type_id
9314         from pa_proj_elements
9315        where proj_element_id = c_proj_element_id;
9316   l_task_type_id      NUMBER;
9317   l_wp_process_flag   VARCHAR2(1);
9318   --3035902: end process update flag changes
9319 
9320 --bug 3069306
9321   Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
9322     select object_id_to1
9323       from pa_object_relationships
9324      where relationshiP_type = 'S'
9325        and object_type_to = 'PA_TASKS'
9326              start with object_id_to1 = c_task_ver_id
9327                and object_type_to = 'PA_TASKS'
9328                and relationship_type = 'S'
9329            connect by prior object_id_from1 = object_id_to1
9330                and prior object_type_from = object_type_to
9331                and prior relationship_type = relationship_type
9332  intersect
9333     select a.object_id_to1
9334       from pa_object_relationships a, pa_proj_element_versions b
9335      where a.relationshiP_type = 'S'
9336        and a.object_id_from1 = b.parent_structure_version_id
9337        and b.element_version_id = c_task_ver_id
9338        and a.object_type_from = 'PA_STRUCTURES';
9339   l_old_par_ver_id NUMBER;
9340   l_new_par_ver_id NUMBER;
9341 --end bug 3069306
9342 
9343 --bug 3301192
9344   /* Bug #: 3305199 SMukka                                                         */
9345   /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
9346   /* l_task_ver_ids2              PA_PLSQL_DATATYPES.IdTabTyp;                     */
9347   l_task_ver_ids2             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
9348   l_lowest_task_flag1         VARCHAR2(1);
9349   l_lowest_task_flag2         VARCHAR2(1);
9350   l_fin_task_flag             VARCHAR2(1);
9351 
9352   --bug 4214825, start
9353   l_ref_tsk_version_id      NUMBER;
9354 
9355   CURSOR cur_get_ref_tsk_ver_id(c_src_wbs_level NUMBER) IS
9356   SELECT element_version_id
9357   FROM PA_PROJ_ELEMENT_VERSIONS
9358   WHERE parent_structure_version_id = p_structure_version_id
9359   AND project_id = p_project_id
9360   AND wbs_level = c_src_wbs_level
9361   AND object_type = 'PA_TASKS'
9362   AND display_sequence < src_seq_number
9363   AND display_sequence =
9364         (SELECT max (display_sequence)
9365          FROM pa_proj_element_versions
9366          WHERE project_id = p_project_id
9367          AND parent_structure_version_id = p_structure_version_id
9368          AND wbs_level = c_src_wbs_level
9369          AND display_sequence < src_seq_number
9370          AND object_type = 'PA_TASKS');
9371   --bug 4214825, end
9372 
9373 BEGIN
9374 
9375   pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK');
9376 
9377   IF (p_debug_mode = 'Y') THEN
9378     pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK begin');
9379   END IF;
9380 
9381   IF (p_commit = FND_API.G_TRUE) THEN
9382     savepoint indent_task_version_bulk;
9383   END IF;
9384 
9385   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
9386     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9387   END IF;
9388 
9389   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
9390     FND_MSG_PUB.initialize;
9391   END IF;
9392 
9393   --bug 4075697
9394   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
9395   --bug 4075697
9396 
9397   --3035902: process update flag changes
9398   l_wp_process_flag := 'N';
9399   --3035902: end process update flag changes
9400 -- hyau Bug 2852753
9401       IF p_calling_module = 'SELF_SERVICE' THEN
9402 
9403         OPEN cur_proj_id;
9404         FETCH cur_proj_id INTO l_cur_project_id;
9405         CLOSE cur_proj_id;
9406 
9407         OPEN get_product_code(l_cur_project_id);
9408         FETCH get_product_code INTO l_pm_product_code;
9409         CLOSE get_product_code;
9410 
9411         If l_pm_product_code IS NOT NULL THEN
9412           pa_pm_controls.Get_Project_actions_allowed
9413                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
9414                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
9415                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
9416                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
9417                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
9418                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
9419                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
9420                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
9421                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
9422                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
9423                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
9424                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
9425                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
9426                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
9427                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
9428                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
9429                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
9430                  P_ERROR_CODE                 => l_err_code,
9431          P_ERROR_STACK                    => l_err_stack,
9432          P_ERROR_STAGE                => l_err_stage );
9433 
9434           IF l_err_code <> 0 THEN
9435             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9436                                  p_msg_name       => l_err_stage);
9437           END IF;
9438       IF l_update_parent_task_allowed = 'N' THEN
9439               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9440                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
9441               raise FND_API.G_EXC_ERROR;
9442           END IF;
9443         END IF;
9444       END IF;
9445 
9446 -- end hyau Bug 2852753
9447 
9448   IF (p_structure_version_id IS NOT NULL) AND
9449        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
9450     IF ('N' = pa_proj_elements_utils.check_task_in_structure(
9451           p_structure_version_id,
9452           p_task_version_id)) THEN
9453       --deleting linked task. Error
9454       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
9455       raise FND_API.G_EXC_ERROR;
9456     END IF;
9457   END IF;
9458 
9459   -- Get Source Task Information
9460   BEGIN
9461       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9462       INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
9463       FROM PA_PROJ_ELEMENT_VERSIONS
9464       WHERE element_version_id = p_task_version_id
9465       AND project_id = p_project_id
9466       AND parent_structure_version_id = p_structure_version_id;
9467   EXCEPTION
9468     WHEN OTHERS THEN
9469     raise;
9470   END;
9471 
9472 -- Locking should be implemented here
9473 
9474   -- Lifecycle Phase validation Changes. Check if task has phase associated with it
9475   IF (p_task_version_id IS NOT NULL) AND
9476        (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
9477 
9478     IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
9479               src_proj_element_id)) THEN
9480       --Indenting a task with phase. Error
9481       PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
9482       raise FND_API.G_EXC_ERROR;
9483     END IF;
9484   END IF;
9485 
9486 
9487   IF src_seq_number = 1 then
9488     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
9489                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
9490     raise FND_API.G_EXC_ERROR;
9491   END IF;
9492 
9493   /* Bug 2843737 Added logic to populate the error message when you try to indent lowest task
9494      Also restructured the logic to get the reference task */
9495 
9496  -- Get the previous task information. If its wbs_level is equal to src_wbs_level then this will become refernce task
9497  -- Otherwise we will again fetch the correct reference task
9498 
9499   SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9500   INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number,  ref_parent_str_ver_id, ref_object_type
9501   FROM PA_PROJ_ELEMENT_VERSIONS
9502   WHERE display_sequence = src_seq_number - 1
9503   AND parent_structure_version_id = p_structure_version_id
9504   AND project_id = p_project_id
9505   AND object_type = 'PA_TASKS';
9506 
9507   IF src_wbs_level > ref_wbs_level then
9508     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
9509                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
9510     raise FND_API.G_EXC_ERROR;
9511   END IF;
9512 
9513   IF src_wbs_level = ref_wbs_level then
9514     l_peer_or_sub := 'SUB';
9515     --bug 4214825, start
9516     l_ref_tsk_version_id := ref_elem_ver_id;
9517     --bug 4214825, end
9518   ELSE
9519     l_peer_or_sub := 'PEER';
9520 
9521     SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9522     INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number,  ref_parent_str_ver_id, ref_object_type
9523     FROM PA_PROJ_ELEMENT_VERSIONS
9524     WHERE parent_structure_version_id = p_structure_version_id
9525     AND project_id = p_project_id
9526     AND wbs_level = src_wbs_level+1
9527     AND object_type = 'PA_TASKS'
9528     AND display_sequence < src_seq_number
9529      AND display_sequence =
9530         (SELECT max (display_sequence)
9531          FROM pa_proj_element_versions
9532          WHERE project_id = p_project_id
9533          AND parent_structure_version_id = p_structure_version_id
9534          AND wbs_level = src_wbs_level+1
9535          AND display_sequence < src_seq_number
9536          AND object_type = 'PA_TASKS');
9537 
9538   --bug 4214825, start
9539   OPEN cur_get_ref_tsk_ver_id(src_wbs_level);
9540   FETCH cur_get_ref_tsk_ver_id INTO l_ref_tsk_version_id;
9541   CLOSE cur_get_ref_tsk_ver_id;
9542   --bug 4214825, end
9543 
9544 
9545   END IF;
9546 
9547 
9548 /* Bug 2843737 -- Commented the code to get the refernec task. It is now being done above
9549   -- Get Refernce Task Information
9550 
9551   BEGIN
9552       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9553       INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number,  ref_parent_str_ver_id, ref_object_type
9554       FROM PA_PROJ_ELEMENT_VERSIONS
9555       WHERE parent_structure_version_id = p_structure_version_id
9556       AND project_id = p_project_id
9557       AND (wbs_level = src_wbs_level OR wbs_level = src_wbs_level+1) -- Sub or Peer
9558           AND object_type = 'PA_TASKS'
9559       AND display_sequence < src_seq_number
9560       AND display_sequence =
9561         (SELECT max (display_sequence)
9562          FROM pa_proj_element_versions
9563          WHERE project_id = p_project_id
9564          AND parent_structure_version_id = p_structure_version_id
9565          AND (wbs_level = src_wbs_level OR wbs_level = src_wbs_level+1) -- Sub or Peer
9566          AND display_sequence < src_seq_number
9567          AND object_type = 'PA_TASKS');
9568   EXCEPTION
9569     WHEN OTHERS THEN
9570     raise;
9571   END;
9572 */
9573 
9574     --Bug No 3475920 Smukka 25/May/04 Checking for deliverable
9575     --bug 4214825, pass the correct ref_task_version
9576     --IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,ref_elem_ver_id) = 'Y' THEN
9577     IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_ref_tsk_version_id) = 'Y' THEN
9578        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9579                             p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
9580        raise FND_API.G_EXC_ERROR;
9581     END IF;
9582 
9583     --Check if ok to indent this task
9584     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
9585          p_task_ver_id => p_task_version_id
9586         ,x_return_status      => l_return_status
9587         ,x_error_message_code => l_error_msg_code
9588     );
9589 
9590     IF (l_return_status <> 'Y') THEN
9591         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9592                              p_msg_name => l_error_msg_code);
9593         raise FND_API.G_EXC_ERROR;
9594     END IF;
9595 
9596     --check if ok to create subtask
9597     IF (l_peer_or_sub = 'PEER') THEN
9598       OPEN get_parent_version_id(ref_elem_ver_id);
9599       FETCH get_parent_version_id into l_parent_ver_id;
9600       CLOSE get_parent_version_id;
9601 
9602       --bug 3069306
9603       --if financial task, check if changing parent ok
9604       IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
9605         OPEN get_top_task_ver_id(l_parent_ver_id);
9606         FETCH get_top_task_ver_id into l_new_par_ver_id;
9607         CLOSE get_top_task_ver_id;
9608 
9609         OPEN get_top_task_ver_id(p_task_version_id);
9610         FETCH get_top_task_ver_id into l_old_par_ver_id;
9611         CLOSE get_top_task_Ver_id;
9612 
9613         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
9614           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9615                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
9616           raise FND_API.G_EXC_ERROR;
9617         END IF;
9618       END IF;
9619       --end bug 3069306
9620 
9621       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
9622          p_parent_task_ver_id => l_parent_ver_id
9623         ,x_return_status      => l_return_status
9624         ,x_error_message_code => l_error_msg_code
9625       );
9626 
9627       IF (l_return_status <> 'Y') THEN
9628         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9629                              p_msg_name => l_error_msg_code);
9630         raise FND_API.G_EXC_ERROR;
9631       END IF;
9632 
9633       --bug 4099488
9634       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
9635         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9636                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
9637         raise FND_API.G_EXC_ERROR;
9638       END IF;
9639       --end bug 4099488
9640     ELSE
9641       --bug 3069306
9642       --if financial task, check if changing parent ok
9643       IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
9644         OPEN get_top_task_ver_id(ref_elem_ver_id);
9645         FETCH get_top_task_ver_id into l_new_par_ver_id;
9646         CLOSE get_top_task_ver_id;
9647 
9648         OPEN get_top_task_ver_id(p_task_version_id);
9649         FETCH get_top_task_ver_id into l_old_par_ver_id;
9650         CLOSE get_top_task_Ver_id;
9651 
9652         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
9653           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9654                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
9655           raise FND_API.G_EXC_ERROR;
9656         END IF;
9657       END IF;
9658       --end bug 3069306
9659 
9660 
9661       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
9662          p_parent_task_ver_id => ref_elem_ver_id
9663         ,x_return_status      => l_return_status
9664         ,x_error_message_code => l_error_msg_code
9665       );
9666 
9667       IF (l_return_status <> 'Y') THEN
9668         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9669                              p_msg_name => l_error_msg_code);
9670         raise FND_API.G_EXC_ERROR;
9671       END IF;
9672 
9673       --bug 4099488
9674       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(ref_elem_ver_id, p_task_version_id) = 'N' THEN
9675         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9676                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
9677         raise FND_API.G_EXC_ERROR;
9678       END IF;
9679       --end bug 4099488
9680     END IF;
9681 
9682   -- Added for FP_M changes. Bug 3305199 : Bhumesh  xxx
9683 
9684   If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
9685         IN ('SHARE_PARTIAL')
9686   Then
9687 
9688     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
9689         p_task_version_id       => p_task_version_id
9690       , p_ref_task_version_id   => ref_elem_ver_id
9691       , x_return_status         => x_return_status
9692       , x_msg_count             => x_msg_count
9693       , x_msg_data              => x_msg_data
9694       , x_error_msg_code        => l_error_msg_code);
9695 
9696     IF (x_return_status <> 'S') THEN -- 4275757 : Changed from 'Y' to 'S'
9697        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9698                 p_msg_name       => l_error_msg_code);
9699       raise FND_API.G_EXC_ERROR;
9700     End If;
9701   End If;
9702 
9703   --check the task is a lowest task bug 3301192
9704   l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
9705 
9706   -- End of FP_M changes
9707 /*
9708 
9709  The processing done by the followig two calls is made now as plsql table bulk processing
9710 
9711   PA_TASK_PUB1.Update_Task_Version
9712   ( p_validate_only      => FND_API.G_FALSE,
9713     p_ref_task_version_id    => l_ref_task_version_id,
9714     p_peer_or_sub              => l_peer_or_sub,
9715     p_task_version_id        => p_task_version_id,
9716     p_record_version_number  => p_record_version_number,
9717     x_return_status          => l_return_status,
9718     x_msg_count              => l_msg_count,
9719     x_msg_data               => l_msg_data );
9720 
9721   PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
9722   ( p_commit                   => p_commit
9723    ,p_debug_mode               => p_debug_mode
9724    ,p_parent_structure_ver_id  => l_parent_structure_version_id
9725    ,p_task_id                  => p_task_version_id
9726    ,p_display_seq              => l_display_sequence
9727    ,p_action                   => 'INDENT'
9728    ,p_parent_task_id           => NULL
9729    ,x_return_status            => l_return_status );
9730 
9731 */
9732 
9733 
9734 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
9735 
9736 -- Logic Added for plsql table
9737 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
9738 
9739 l_element_version_id_tab.delete;
9740 l_proj_element_id_tab.delete;
9741 l_object_type_tab.delete;
9742 l_project_id_tab.delete;
9743 l_parent_str_version_id_tab.delete;
9744 l_display_sequence_tab.delete;
9745 l_wbs_level_tab.delete;
9746 l_wbs_number_tab.delete;
9747 l_record_version_tab.delete;
9748 l_changed_flag_tab.delete;
9749 
9750 If (l_peer_or_sub = 'SUB') THEN
9751   OPEN get_ref_parent_id(ref_elem_ver_id);
9752   FETCH get_ref_parent_id into l_ref_parent_ver_id;
9753   CLOSE get_ref_parent_id;
9754 ELSE
9755   OPEN get_ref_parent_id(p_task_version_id);
9756   FETCH get_ref_parent_id into l_ref_parent_ver_id;
9757   CLOSE get_ref_parent_id;
9758 END IF;
9759 
9760   BEGIN
9761        -- Using OR is beneficial than using UNION here
9762 
9763             SELECT  element_version_id, proj_element_id, object_type,
9764             project_id, parent_structure_version_id,
9765             display_sequence, wbs_level, wbs_number,
9766             record_version_number, 'N' changed_flag
9767              BULK COLLECT INTO l_element_version_id_tab,
9768             l_proj_element_id_tab, l_object_type_tab,
9769             l_project_id_tab, l_parent_str_version_id_tab,
9770             l_display_sequence_tab, l_wbs_level_tab,
9771             l_wbs_number_tab, l_record_version_tab,
9772             l_changed_flag_tab
9773             FROM
9774         pa_proj_element_versions
9775         WHERE
9776                  project_id = p_project_id
9777         AND parent_structure_version_id = p_structure_version_id
9778         AND object_type = 'PA_TASKS'
9779         AND(
9780         element_version_id = p_task_version_id  -- Source task itself
9781         OR (element_version_id IN -- All tasks below the source task with wbs_level >= src_wbs_level-1
9782         (select object_id_to1
9783         from pa_object_relationships
9784         where relationship_type = 'S'
9785                 and object_type_to = 'PA_TASKS'
9786         start with object_id_from1 = l_ref_parent_ver_id
9787         connect by object_id_from1 = PRIOR object_id_to1
9788                     and relationship_type = PRIOR relationship_type
9789                     and relationship_type = 'S')
9790         )
9791         and display_sequence > src_seq_number)
9792         ORDER BY display_sequence ;
9793   EXCEPTION
9794     WHEN OTHERS THEN
9795         raise;
9796   END;
9797 
9798 
9799 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
9800 -- Here we can also incorporate sequence number update. In indent sequence number does not change.
9801 
9802 -- Update wbs level
9803 
9804  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
9805         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
9806             l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
9807             l_changed_flag_tab(j) := 'Y';
9808         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
9809             -- Direct Childs of source
9810             l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
9811             l_changed_flag_tab(j) := 'Y';
9812         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
9813             -- Exit level changes, IT means no Direct childs are left
9814             EXIT;
9815         END IF;
9816  END LOOP;
9817 
9818 
9819 -- Update wbs_number
9820 
9821  src_branch_mask := src_wbs_number;
9822 
9823  -- ref_branch_mask shd be the wbs_number of parent of source
9824  --ref_branch_mask := substr(ref_wbs_number, 1, instr(ref_wbs_number,'.', -1, 1)-1);
9825 
9826  OPEN get_wbs_number(l_ref_parent_ver_id);
9827  FETCH get_wbs_number into ref_branch_mask;
9828  CLOSE get_wbs_number;
9829 
9830 
9831 
9832  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
9833         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
9834         IF l_peer_or_sub = 'SUB' THEN
9835                 l_wbs_number := ref_wbs_number || '.1';
9836             l_wbs_number_tab(j) := l_wbs_number;
9837             l_changed_flag_tab(j) := 'Y';
9838             l_new_wbs_number := l_wbs_number;
9839         ELSE
9840               l_number := instr(ref_wbs_number,'.', -1, 1);
9841               l_str1 := substr(ref_wbs_number, 1, l_number -1);
9842               l_str2 := substr(ref_wbs_number, l_number + 1);
9843               l_str2 := to_char(to_number(l_str2 + 1));
9844               l_wbs_number := l_str1 || '.' || l_str2;
9845               l_wbs_number_tab(j) := l_wbs_number;
9846               l_changed_flag_tab(j) := 'Y';
9847               l_new_wbs_number := l_wbs_number;
9848         END IF;
9849     ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
9850         IF l_display_sequence_tab(j) > src_seq_number THEN
9851         IF src_wbs_level = 1 THEN -- This was top task
9852               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
9853                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
9854             -- Direct childs of source
9855                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
9856               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
9857                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
9858               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
9859                   l_wbs_number_tab(j) := l_wbs_number;
9860                   l_changed_flag_tab(j) := 'Y';
9861               ELSIF(instr(l_wbs_number_tab(j), '.') <> 0) then
9862             -- Not in Direct Childs, But lower tasks
9863                   l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
9864                   l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
9865                   l_str1 := to_char(to_number(l_str1) - 1);
9866                   l_wbs_number := l_str1 || l_str2;
9867                   l_wbs_number_tab(j) := l_wbs_number;
9868                   l_changed_flag_tab(j) := 'Y';
9869               ELSIF (instr(l_wbs_number_tab(j), '.') = 0) then
9870                   l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) - 1);
9871                   l_wbs_number_tab(j) := l_wbs_number;
9872                   l_changed_flag_tab(j) := 'Y';
9873               END IF;
9874         ELSE -- src_wbs_level <> 1 Source was not a Top Task
9875               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
9876                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
9877             -- Direct childs of source
9878                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
9879               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
9880                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
9881               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
9882                   l_wbs_number_tab(j) := l_wbs_number;
9883                   l_changed_flag_tab(j) := 'Y';
9884               ELSE
9885                       l_str1 := substr(l_wbs_number_tab(j), length(ref_branch_mask) + 2);
9886                   IF(instr(l_str1, '.') <> 0) THEN
9887                     l_str2 := substr(l_str1, instr(l_str1, '.'));
9888                     l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
9889                     l_str1 := to_char(to_number(l_str1) - 1);
9890                     l_wbs_number := ref_branch_mask || '.' || l_str1 || l_str2;
9891                     l_wbs_number_tab(j) := l_wbs_number;
9892                     l_changed_flag_tab(j) := 'Y';
9893                   ELSE
9894                     l_str1:= to_char(to_number(l_str1) - 1);
9895                     l_wbs_number := ref_branch_mask || '.' || l_str1;
9896                     l_wbs_number_tab(j) := l_wbs_number;
9897                     l_changed_flag_tab(j) := 'Y';
9898              END IF;
9899               END IF;
9900         END IF; -- src_wbs_level = 1
9901         END IF; --   l_display_sequence_tab(j) > src_seq_number
9902     END IF; -- l_element_version_id_tab(j) = src_elem_ver_id
9903  END LOOP;
9904 l_user_id := fnd_global.user_id;
9905 l_login_id := fnd_global.login_id;
9906 
9907 -- Locking should be implemnted here
9908 
9909  FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
9910  UPDATE PA_PROJ_ELEMENT_VERSIONS
9911  SET
9912         wbs_level                = l_wbs_level_tab(j)           ,
9913         wbs_number                   = l_wbs_number_tab(j)          ,
9914         last_update_date                 = sysdate          ,
9915         last_updated_by                  = l_user_id            ,
9916         last_update_login                = l_login_id           ,
9917     record_version_number        = l_record_version_tab(j)+1
9918  WHERE  element_version_id         = l_element_version_id_tab(j)
9919  AND l_changed_flag_tab(j)='Y';
9920 
9921 
9922 -- Update Relationship
9923 
9924       IF ref_object_type = 'PA_TASKS'
9925       THEN
9926          IF l_peer_or_sub = 'PEER'
9927          THEN
9928             OPEN cur_obj_rel( ref_elem_ver_id );
9929             FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
9930             CLOSE cur_obj_rel;
9931 
9932             l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
9933 
9934             IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
9935             THEN
9936                 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
9937                 l_task_version_from := null;
9938             ELSE
9939                 l_task_version_from  := v_cur_obj_rel_rec.object_id_from1;
9940                 l_struc_version_from := null;
9941             END IF;
9942          ELSE -- l_peer_or_sub = 'SUB'
9943                 --parent task is the reference task
9944             l_task_version_from  := ref_elem_ver_id;
9945             l_struc_version_from := null;
9946             l_relationship_subtype := 'TASK_TO_TASK';
9947 
9948 
9949          END IF;
9950       END IF; -- ref_object_type = 'PA_TASKS'
9951       -- No need to check for PA_STRUCTURES as this is indent and you can not indent below a structure
9952 
9953 
9954  --update relatonship of the task version p_task_version.
9955  --set structure_version_from and task_version_from accordingly.
9956  OPEN cur_obj_rel( p_task_version_id );
9957  FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
9958  CLOSE cur_obj_rel;
9959 
9960 --for task weighting
9961  OPEN get_task_weighting(p_task_version_id);
9962  FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
9963  CLOSE get_task_weighting;
9964 
9965 
9966  IF(l_task_version_from is not null) THEN
9967    l_version_from := l_task_version_from;
9968  ELSE
9969    l_version_from := l_struc_version_from;
9970  END IF;
9971 
9972  IF (l_version_from = p_task_version_id) THEN
9973    l_new_weighting := l_old_weighting;
9974  ELSE
9975    OPEN get_sub_tasks(l_version_from);
9976    FETCH get_sub_tasks into l_dummy;
9977    IF (get_sub_tasks%NOTFOUND) THEN
9978      l_new_weighting := 100;
9979      --bug 2673570
9980      OPEN check_progress_allowed(p_task_version_id);
9981      FETCH check_progress_allowed INTO l_progress_allowed;
9982      CLOSE check_progress_allowed;
9983 
9984      if l_progress_allowed = 'N' then
9985         l_new_weighting := 0;
9986      end if;
9987      --bug 2673570
9988    ELSE
9989      l_new_weighting := 0;
9990    END IF;
9991    CLOSE get_sub_tasks;
9992  END IF;
9993 
9994  PA_RELATIONSHIP_PVT.Update_Relationship
9995              (
9996               p_api_version                       => p_api_version
9997              ,p_init_msg_list                     => p_init_msg_list
9998              ,p_commit                            => p_commit
9999              ,p_validate_only                     => p_validate_only
10000              ,p_validation_level                  => p_validation_level
10001              ,p_calling_module                    => p_calling_module
10002              ,p_debug_mode                        => p_debug_mode
10003              ,p_max_msg_count                     => p_max_msg_count
10004              ,p_object_relationship_id            => v_cur_obj_rel_rec.object_relationship_id
10005              ,p_project_id_from                   => null
10006              ,p_structure_id_from                 => null
10007              ,p_structure_version_id_from         => l_struc_version_from
10008              ,p_task_version_id_from              => l_task_version_from
10009              ,p_project_id_to                     => null
10010              ,p_structure_id_to                   => null
10011              ,p_structure_version_id_to           => null
10012              ,p_task_version_id_to                => p_task_version_id
10013              ,p_relationship_type                 => 'S'
10014              ,p_relationship_subtype              => l_relationship_subtype
10015              ,p_weighting_percentage              => l_new_weighting
10016              ,p_record_version_number             => v_cur_obj_rel_rec.record_version_number
10017              ,x_return_status                     => l_return_status
10018              ,x_msg_count                         => l_msg_count
10019              ,x_msg_data                          => l_msg_data
10020             );
10021 
10022 
10023              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10024                 x_msg_count := FND_MSG_PUB.count_msg;
10025                 IF x_msg_count = 1 then
10026                    pa_interface_utils_pub.get_messages
10027                    (p_encoded        => FND_API.G_TRUE,
10028                     p_msg_index      => 1,
10029                     p_msg_count      => l_msg_count,
10030                     p_msg_data       => l_msg_data,
10031                     p_data           => l_data,
10032                     p_msg_index_out  => l_msg_index_out);
10033                     x_msg_data := l_data;
10034                 END IF;
10035              raise FND_API.G_EXC_ERROR;
10036              END IF;
10037 
10038 --for task weighting
10039      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
10040        p_task_version_id => l_old_parent_id
10041       ,x_return_status => l_return_status
10042       ,x_msg_count => l_msg_count
10043       ,x_msg_data => l_msg_data
10044      );
10045 
10046      x_msg_count := FND_MSG_PUB.count_msg;
10047      IF x_msg_count = 1 then
10048        pa_interface_utils_pub.get_messages
10049         (p_encoded        => FND_API.G_TRUE,
10050          p_msg_index      => 1,
10051          p_msg_count      => l_msg_count,
10052          p_msg_data       => l_msg_data,
10053          p_data           => l_data,
10054          p_msg_index_out  => l_msg_index_out);
10055          x_msg_data := l_data;
10056       END IF;
10057 
10058      --bug 2673570
10059      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
10060        p_task_version_id => p_task_version_id
10061       ,x_return_status => l_return_status
10062       ,x_msg_count => l_msg_count
10063       ,x_msg_data => l_msg_data
10064      );
10065 
10066      x_msg_count := FND_MSG_PUB.count_msg;
10067      IF x_msg_count = 1 then
10068        pa_interface_utils_pub.get_messages
10069         (p_encoded        => FND_API.G_TRUE,
10070          p_msg_index      => 1,
10071          p_msg_count      => l_msg_count,
10072          p_msg_data       => l_msg_data,
10073          p_data           => l_data,
10074          p_msg_index_out  => l_msg_index_out);
10075          x_msg_data := l_data;
10076       END IF;
10077      --bug 2673570
10078 --end changes for task weighting
10079 
10080 
10081 /*** End Update_task_version and Update_wbs_number code ***/
10082 
10083   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
10084     FROM pa_proj_element_versions
10085    WHERE element_version_id =  ( Select parent_structure_version_id
10086                                    from pa_proj_element_versions
10087                                   where element_version_id = p_task_version_id )
10088      AND object_type = 'PA_STRUCTURES';
10089 
10090 
10091   --Do financial task check
10092   --If financial
10093   OPEN cur_struc_type( l_structure_id );
10094   FETCH cur_struc_type INTO l_dummy_char;
10095   IF cur_struc_type%FOUND
10096   THEN
10097       --If structure has any published versions.
10098       l_published_version := 'N';
10099       OPEN cur_pub_versions( l_structure_id, l_project_id );
10100       FETCH cur_pub_versions INTO l_published_version;
10101       CLOSE cur_pub_versions;
10102 
10103 
10104       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
10105                                                      l_project_id);
10106       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
10107                                                   l_project_id);
10108 
10109       l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --indent in corresponding task in pa_tasks
10110 
10111       IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
10112          (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
10113 	OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
10114         THEN
10115 
10116           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
10117             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
10118             FROM PA_TASKS pt,
10119                  pa_proj_elem_ver_structure ppa,
10120                  PA_PROJ_ELEMENT_VERSIONS ppev
10121            WHERE ppev.element_version_id = p_task_version_id
10122              AND ppev.parent_structure_version_id = ppa.element_version_id
10123              AND ppev.project_id = ppa.project_id
10124              AND ppev.proj_element_id = pt.task_id;
10125 
10126 -- Merged from 85
10127            SELECT record_version_number, parent_task_id    --get old parent id for bug 2947492 (indent )
10128                  ,top_task_id          --bug 2967204
10129             INTO l_task_record_version_number, l_old_parent_task_id
10130                  ,l_old_top_task_id    --bug 2967204
10131             FROM pa_tasks
10132            WHERE task_id = l_task_id
10133              AND project_id = l_project_id;
10134 -- Merged from 85
10135 
10136 
10137           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
10138                          p_project_id                        => l_project_id
10139                         ,p_task_id                           => l_task_id
10140                         ,p_edit_mode                         => 'INDENT'
10141                         ,p_record_version_number             => l_task_record_version_number
10142                         ,p_wbs_record_version_number         => 1
10143                         ,x_return_status                     => l_return_status
10144                         ,x_msg_count                         => l_msg_count
10145                         ,x_msg_data                          => l_msg_data );
10146 
10147 -- Merged from 85
10148              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10149                 x_msg_count := FND_MSG_PUB.count_msg;
10150                 IF x_msg_count = 1 then
10151                    pa_interface_utils_pub.get_messages
10152                    (p_encoded        => FND_API.G_TRUE,
10153                     p_msg_index      => 1,
10154                     p_msg_count      => l_msg_count,
10155                     p_msg_data       => l_msg_data,
10156                     p_data           => l_data,
10157                     p_msg_index_out  => l_msg_index_out);
10158                     x_msg_data := l_data;
10159                 END IF;
10160                 raise FND_API.G_EXC_ERROR;
10161              END IF;
10162 
10163           --Bug 2947492   ( Indent )
10164           --
10165 
10166             OPEN get_parent_task_id( l_task_id , l_project_id );
10167             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
10168             CLOSE get_parent_task_id;
10169 
10170             --bug 2967204
10171             --Cannot move out of the current hierarchy
10172               IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
10173               THEN
10174                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10175                                        p_msg_name => 'PA_CANT_CHANGE_PARENT');
10176                   raise FND_API.G_EXC_ERROR;
10177               END IF;
10178             --End bug 2967204
10179 
10180             --First call the check_reparent ok
10181             --This should have been called in the beginning but due to lot of complexity involved in getting
10182             --new parent task id it is decided to call this later stage as long as  we rollback the whole operation
10183             --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
10184 
10185             /*PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
10186                      p_task_id                    => l_task_id
10187                     ,p_old_parent_task_id         => l_old_parent_task_id
10188                     ,p_new_parent_task_id         => l_parent_task_id
10189                     ,x_return_status              => l_return_status
10190                     ,x_msg_count                  => l_msg_count
10191                     ,x_msg_data                   => l_msg_data
10192                 );
10193 
10194              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10195                 x_msg_count := FND_MSG_PUB.count_msg;
10196                 IF x_msg_count = 1 then
10197                    pa_interface_utils_pub.get_messages
10198                    (p_encoded        => FND_API.G_TRUE,
10199                     p_msg_index      => 1,
10200                     p_msg_count      => l_msg_count,
10201                     p_msg_data       => l_msg_data,
10202                     p_data           => l_data,
10203                     p_msg_index_out  => l_msg_index_out);
10204                     x_msg_data := l_data;
10205                 END IF;
10206                 raise FND_API.G_EXC_ERROR;
10207              END IF;
10208              */  --commenting out. check mails form Venkatesh Jayaraman dated 22 Jan 04
10209 
10210 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
10211             l_plannable_tasks_tbl(1).impacted_task_id   := l_task_id;
10212             l_plannable_tasks_tbl(1).action             := 'REPARENT';
10213             l_plannable_tasks_tbl(1).old_parent_task_id := l_old_parent_task_id;
10214             l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
10215             l_plannable_tasks_tbl(1).top_task_id        := l_top_task_id;
10216 
10217 
10218             PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
10219                     p_project_id         => p_project_id
10220                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
10221                   , x_return_status      => l_return_status
10222                   , x_msg_data           => l_msg_data
10223                   , x_msg_count          => l_msg_count
10224                 );
10225 
10226              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10227                 x_msg_count := FND_MSG_PUB.count_msg;
10228                 IF x_msg_count = 1 then
10229                    pa_interface_utils_pub.get_messages
10230                    (p_encoded        => FND_API.G_TRUE,
10231                     p_msg_index      => 1,
10232                     p_msg_count      => l_msg_count,
10233                     p_msg_data       => l_msg_data,
10234                     p_data           => l_data,
10235                     p_msg_index_out  => l_msg_index_out);
10236                     x_msg_data := l_data;
10237                 END IF;
10238              raise FND_API.G_EXC_ERROR;
10239              END IF;
10240 bug 3010538 */
10241 
10242           --End Bug 2947492  ( Indent )
10243 
10244       END IF;
10245   END IF;
10246   CLOSE cur_struc_type;
10247 -- Merged from 85
10248 
10249   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
10250 
10251     -- Added for FP_M changes Bug 3305199 : Bhumesh
10252     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
10253 
10254        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
10255           p_structure_version_id => P_Structure_Version_ID
10256      ,p_dirty_flag           => 'Y'             --bug 3902282
10257      ,x_return_status        => x_return_status
10258      ,x_msg_count            => x_msg_count
10259      ,x_msg_data             => x_msg_data
10260        );
10261 
10262        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
10263          x_msg_count := FND_MSG_PUB.count_msg;
10264          If x_msg_count = 1 then
10265            pa_interface_utils_pub.get_messages
10266            (p_encoded        => FND_API.G_TRUE,
10267             p_msg_index      => 1,
10268             p_msg_count      => l_msg_count,
10269             p_msg_data       => l_msg_data,
10270             p_data           => l_data,
10271             p_msg_index_out  => l_msg_index_out);
10272             x_msg_data := l_data;
10273          End If;
10274          raise FND_API.G_EXC_ERROR;
10275        End If;
10276     End If;
10277     -- End of FP_M changes
10278 
10279     l_tasks_ver_ids.extend;
10280     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
10281 
10282     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
10283                        p_commit => FND_API.G_FALSE,
10284                        p_element_versions => l_tasks_ver_ids,
10285                        x_return_status => l_return_status,
10286                        x_msg_count => l_msg_count,
10287                        x_msg_data => l_msg_data);
10288 
10289      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10290        x_msg_count := FND_MSG_PUB.count_msg;
10291        if x_msg_count = 1 then
10292          pa_interface_utils_pub.get_messages
10293          (p_encoded        => FND_API.G_TRUE,
10294           p_msg_index      => 1,
10295           p_msg_count      => l_msg_count,
10296           p_msg_data       => l_msg_data,
10297           p_data           => l_data,
10298           p_msg_index_out  => l_msg_index_out);
10299           x_msg_data := l_data;
10300        end if;
10301        raise FND_API.G_EXC_ERROR;
10302      end if;
10303 
10304 --hsiu added for task status
10305 --if versioning is off, rollup.
10306      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
10307        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
10308                   p_structure_version_id => p_structure_version_id
10309                  ,p_element_version_id => p_task_version_id
10310                  ,x_return_status => l_return_status
10311                  ,x_msg_count => l_msg_count
10312                  ,x_msg_data => l_msg_data
10313        );
10314 
10315        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10316          x_msg_count := FND_MSG_PUB.count_msg;
10317          if x_msg_count = 1 then
10318            pa_interface_utils_pub.get_messages
10319            (p_encoded        => FND_API.G_TRUE,
10320             p_msg_index      => 1,
10321             p_msg_count      => l_msg_count,
10322             p_msg_data       => l_msg_data,
10323             p_data           => l_data,
10324             p_msg_index_out  => l_msg_index_out);
10325             x_msg_data := l_data;
10326          end if;
10327          raise FND_API.G_EXC_ERROR;
10328        end if;
10329      END IF;
10330 
10331 --end task status changes
10332 
10333   END IF;
10334 
10335 --bug 3010538 (Indent)
10336 
10337 --bug 3053281 --set flag if not (manual and workplan only)
10338 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
10339 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
10340 
10341 /*
10342 IF (l_shared = 'N') AND
10343    (l_wp_type = 'Y') AND
10344    (l_weighting_basis_Code = 'MANUAL') THEN
10345   --do not set the flag to 'Y'
10346   NULL;
10347 ELSE
10348 */
10349   --3035902: process update flag changes
10350   OPEN get_task_type_id(src_proj_element_id);
10351   FETCH get_task_type_id INTO l_task_type_id;
10352   CLOSE get_task_type_id;
10353 
10354   --set update process flag if necessary;
10355   IF (l_wp_process_flag = 'N') THEN
10356     --may need to update process flag
10357     IF ((l_shared = 'N') AND
10358         (l_wp_type = 'Y') AND
10359         (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
10360         (l_weighting_basis_code <> 'MANUAL'))
10361     THEN
10362       --split and workplan; only update if progressable task added
10363       l_wp_process_flag := 'Y';
10364     ELSIF ((l_shared = 'N') AND
10365            (l_wp_type = 'N')) THEN
10366       --split and financial; update
10367       l_wp_process_flag := 'Y';
10368     ELSIF (l_shared = 'Y') THEN
10369       l_wp_process_flag := 'Y';
10370     END IF;
10371   END IF;
10372 
10373   IF (l_wp_process_flag = 'Y') THEN
10374    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
10375    (
10376       p_calling_context       => 'SELF_SERVICE'
10377      ,p_project_id            => p_project_id
10378      ,p_structure_version_id  => p_structure_version_id
10379      ,p_update_wbs_flag       => 'Y'
10380      ,x_return_status         => l_return_status
10381      ,x_msg_count             => l_msg_count
10382      ,x_msg_data              => l_msg_data);
10383 
10384    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10385      x_msg_count := FND_MSG_PUB.count_msg;
10386      if x_msg_count = 1 then
10387        pa_interface_utils_pub.get_messages
10388        (p_encoded        => FND_API.G_TRUE,
10389         p_msg_index      => 1,
10390         p_msg_count      => l_msg_count,
10391         p_msg_data       => l_msg_data,
10392         p_data           => l_data,
10393         p_msg_index_out  => l_msg_index_out);
10394         x_msg_data := l_data;
10395      end if;
10396      raise FND_API.G_EXC_ERROR;
10397    end if;
10398 END IF;
10399   --3035902: end process update flag changes
10400 
10401   --ideally the following calls should have been cached. but due to time constraints
10402   --we need to write the code this way in multiple places.
10403   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
10404    THEN
10405        IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and  l_published_version = 'N' ) THEN
10406        --Indent
10407        pa_fp_refresh_elements_pub.set_process_flag_proj(
10408              p_project_id               => p_project_id
10409             ,p_request_id               => null
10410             ,p_process_code             => null
10411             ,p_refresh_required_flag    => 'Y'
10412             ,x_return_status            => l_return_status
10413             ,x_msg_count                => l_msg_count
10414             ,x_msg_data                 => l_msg_data );
10415 
10416         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10417            x_msg_count := FND_MSG_PUB.count_msg;
10418            if x_msg_count = 1 then
10419              pa_interface_utils_pub.get_messages
10420             (p_encoded        => FND_API.G_TRUE,
10421              p_msg_index      => 1,
10422              p_msg_count      => l_msg_count,
10423              p_msg_data       => l_msg_data,
10424              p_data           => l_data,
10425              p_msg_index_out  => l_msg_index_out);
10426              x_msg_data := l_data;
10427            end if;
10428            raise FND_API.G_EXC_ERROR;
10429         end if;
10430       END IF;
10431    END IF;
10432 
10433 --End bug 3010538 (Indent )
10434 
10435 --bug 3301192
10436    --check the task is a lowest task again and check whehter its no more a lowest task.
10437   l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
10438 
10439   IF l_lowest_task_flag1 = 'Y' AND
10440      l_lowest_task_flag2 = 'N'
10441   THEN
10442      IF l_wp_type = 'Y'
10443      THEN
10444      --now call call delete planning for task version id.
10445        l_task_ver_ids2.extend(1); /* Venky */
10446        l_task_ver_ids2(1) := p_task_version_id;
10447        /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
10448        /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
10449        DECLARE
10450            --p1 bug 3888432
10451            l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10452            CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
10453              SELECT resource_assignment_id
10454                FROM pa_resource_assignments
10455               WHERE wbs_element_Version_id = c_task_ver_id
10456                 AND ta_display_flag = 'N';
10457            l_assign_id    NUMBER := NULL;
10458        BEGIN
10459            OPEN get_assignment_id(p_task_version_id);
10460            FETCH get_assignment_id into l_assign_id;
10461            CLOSE get_assignment_id;
10462 
10463            IF (l_assign_id IS NOT NULL) THEN
10464              l_assign_ids.extend(1);
10465              l_assign_ids(1) := l_assign_id;
10466              pa_fp_planning_transaction_pub.delete_planning_transactions
10467              (
10468                p_context                      => 'WORKPLAN'
10469               ,p_task_or_res                  => 'ASSIGNMENT'
10470 ---            ,p_element_version_id_tbl       => l_task_ver_ids2
10471 ---         ,p_maintain_reporting_lines     => 'Y'
10472               ,p_resource_assignment_tbl => l_assign_ids
10473               ,x_return_status                => l_return_status
10474               ,x_msg_count                    => l_msg_count
10475               ,x_msg_data                     => l_msg_data
10476              );
10477            END IF;
10478        EXCEPTION
10479            WHEN OTHERS THEN
10480                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
10481                                         p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10482                                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
10483            RAISE FND_API.G_EXC_ERROR;
10484        END;
10485 
10486      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10487        x_msg_count := FND_MSG_PUB.count_msg;
10488        if x_msg_count = 1 then
10489          pa_interface_utils_pub.get_messages
10490          (p_encoded        => FND_API.G_TRUE,
10491           p_msg_index      => 1,
10492           p_msg_count      => l_msg_count,
10493           p_msg_data       => l_msg_data,
10494           p_data           => l_data,
10495           p_msg_index_out  => l_msg_index_out);
10496           x_msg_data := l_data;
10497        end if;
10498        raise FND_API.G_EXC_ERROR;
10499      end if;
10500      END IF;  --<<l_wp_type>>
10501   END IF; --<<l_lowest_task_flag1>>
10502 
10503   --bug 4149392
10504   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
10505   --end bug 4149392
10506 
10507   x_return_status := FND_API.G_RET_STS_SUCCESS;
10508 
10509   IF (p_commit = FND_API.G_TRUE) THEN
10510     COMMIT;
10511   END IF;
10512 
10513   IF (p_debug_mode = 'Y') THEN
10514     pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK END');
10515   END IF;
10516 
10517 EXCEPTION
10518   when FND_API.G_EXC_ERROR then
10519     if p_commit = FND_API.G_TRUE then
10520       rollback to indent_task_version_bulk;
10521     end if;
10522     x_return_status := FND_API.G_RET_STS_ERROR;
10523   when FND_API.G_EXC_UNEXPECTED_ERROR then
10524     if p_commit = FND_API.G_TRUE then
10525       rollback to indent_task_version_bulk;
10526     end if;
10527     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10528     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
10529                             p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10530                             p_error_text     => SUBSTRB(SQLERRM,1,240));
10531   when OTHERS then
10532     if p_commit = FND_API.G_TRUE then
10533       rollback to indent_task_version_bulk;
10534     end if;
10535     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10536     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
10537                             p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10538                             p_error_text     => SUBSTRB(SQLERRM,1,240));
10539     raise;
10540 
10541 END Indent_Task_Version_Bulk;
10542 
10543 -- Amit : Following procedure added for Bug 2838700
10544 
10545 PROCEDURE OUTDENT_TASK_VERSION_BULK (
10546  p_api_version                IN    NUMBER   :=1.0,
10547  p_init_msg_list              IN    VARCHAR2 :=FND_API.G_TRUE,
10548  p_commit             IN    VARCHAR2 :=FND_API.G_FALSE,
10549  p_validate_only              IN    VARCHAR2 :=FND_API.G_TRUE,
10550  p_validation_level       IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
10551  p_calling_module         IN    VARCHAR2 :='SELF_SERVICE',
10552  p_debug_mode             IN    VARCHAR2 :='N',
10553  p_max_msg_count          IN    NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10554  p_structure_version_id       IN    NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10555  p_task_version_id        IN    NUMBER,
10556  p_project_id             IN    NUMBER,
10557  p_record_version_number      IN    NUMBER,
10558  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10559  x_msg_count              OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
10560  x_msg_data           OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10561 ) IS
10562 
10563 
10564 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
10565     SELECT 'Y'
10566     FROM pa_proj_structure_types ppst
10567         ,pa_structure_types pst
10568     WHERE ppst.proj_element_id = c_structure_id
10569     AND ppst.structure_type_id = pst.structure_type_id
10570     AND pst.structure_type_class_code IN( 'FINANCIAL' );
10571 
10572 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
10573      SELECT 'Y'
10574      FROM dual
10575      WHERE EXISTS(
10576     SELECT 'xyz'
10577     FROM pa_proj_elem_ver_structure
10578     WHERE proj_element_id = c_structure_id
10579     AND project_id = c_project_id
10580     AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
10581         );
10582 
10583 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
10584     SELECT object_id_from1
10585     FROM pa_object_relationships
10586     WHERE object_id_to1 = c_elem_ver_id
10587     AND object_type_to = 'PA_TASKS'
10588     AND relationship_type = 'S';
10589 
10590 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
10591     SELECT object_id_from1
10592      , object_relationship_id
10593      , record_version_number
10594      , relationship_subtype
10595     FROM pa_object_relationships
10596     WHERE object_id_to1 = p_child_version_id
10597     AND relationship_type = 'S';
10598 
10599 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
10600 
10601 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
10602    SELECT a.object_id_from1
10603     , a.weighting_percentage
10604    FROM pa_object_relationships a
10605    WHERE a.object_id_to1 = c_task_version_id
10606    AND a.object_type_to = 'PA_TASKS'
10607    AND a.relationship_type = 'S'
10608    AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
10609 
10610 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
10611    SELECT '1'
10612    FROM dual
10613    WHERE EXISTS
10614        (SELECT  'xyz'
10615        FROM pa_object_relationships
10616        WHERE object_id_from1 = c_task_version_id
10617        AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
10618        AND relationship_type = 'S'
10619        );
10620 
10621 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
10622   SELECT ptt.prog_entry_enable_flag
10623   FROM    pa_task_types ptt
10624     , pa_proj_element_versions ppev,
10625           pa_proj_elements ppe
10626   WHERE  ppev.element_version_id = c_element_version_id
10627   AND    ppev.proj_element_id = ppe.proj_element_id
10628   AND    ppe.TYPE_ID   = ptt.task_type_id;
10629 
10630 CURSOR get_peer_tasks IS
10631   SELECT b.object_id_to1 object_id_to1
10632   FROM    pa_object_relationships a
10633     , pa_object_relationships b
10634   WHERE a.object_id_to1 = p_task_version_id
10635   AND a.object_type_to = 'PA_TASKS'
10636   AND a.object_id_from1 = b.object_id_from1
10637   AND a.object_type_from = b.object_type_from
10638   AND b.object_type_to = 'PA_TASKS'
10639   AND b.object_id_to1 <> p_task_version_id
10640   AND a.relationship_type = 'S'
10641   AND b.relationship_type = 'S';
10642 
10643   c_get_peer_tasks get_peer_tasks%ROWTYPE;
10644 
10645   --This cursor fetches all tasks that are child of ref task but now become child of p_task_version
10646   -- This case should not be possible for Outdent/Indent
10647   CURSOR cur_new_child(c_ref_task_version_id NUMBER, c_display_sequence NUMBER) IS
10648     SELECT por.object_id_to1, ppev.display_sequence, por.record_version_number, por.object_relationship_id
10649     FROM pa_object_relationships por,
10650            pa_proj_element_versions ppev
10651     WHERE object_id_from1 = c_ref_task_version_id
10652     AND object_id_to1 = element_version_id
10653     AND display_sequence > c_display_sequence
10654     AND relationship_type = 'S'
10655      order by display_sequence;
10656 
10657 
10658 
10659   l_api_name            CONSTANT VARCHAR(30) := 'OUTDENT_TASK_VERSION_BULK';
10660   l_api_version         CONSTANT NUMBER      := 1.0;
10661   l_return_status       VARCHAR2(1);
10662   l_msg_count           NUMBER;
10663   l_msg_data            VARCHAR2(250);
10664   l_data            VARCHAR2(250);
10665   l_msg_index_out       NUMBER;
10666 
10667   l_peer_or_sub         VARCHAR2(30);
10668   l_project_id          NUMBER;
10669   l_structure_id        NUMBER;
10670   l_ref_task_id         NUMBER;
10671   l_task_id                     NUMBER;
10672   l_task_record_version_number  NUMBER;
10673   l_wbs_record_version_number   NUMBER;
10674   l_dummy_char                  VARCHAR2(1);
10675   l_published_version           VARCHAR2(1);
10676   l_relationship_subtype        VARCHAR2(20);
10677   l_struc_version_from          NUMBER;
10678   l_task_version_from           NUMBER;
10679   l_version_from        NUMBER;
10680   l_versioned           VARCHAR2(1) := 'N';
10681   l_shared          VARCHAR2(1) := 'N';
10682   l_rollup_task_id      NUMBER;
10683 
10684   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
10685   l_parent_ver_id       NUMBER;
10686   l_error_msg_code      VARCHAR2(30);
10687 
10688   src_elem_ver_id       NUMBER;
10689   src_proj_element_id       NUMBER;
10690   src_wbs_number        VARCHAR2(240);
10691   src_seq_number        NUMBER;
10692   src_wbs_level         NUMBER;
10693   src_parent_str_ver_id     NUMBER;
10694   src_object_type       VARCHAR2(30);
10695 
10696   ref_elem_ver_id       NUMBER;
10697   ref_proj_element_id       NUMBER;
10698   ref_wbs_number        VARCHAR2(240);
10699   ref_seq_number        NUMBER;
10700   ref_wbs_level         NUMBER;
10701   ref_parent_str_ver_id     NUMBER;
10702   ref_object_type       VARCHAR2(30);
10703 
10704   l_old_parent_id       NUMBER;
10705   l_dummy           VARCHAR2(1);
10706 
10707   l_new_weighting       NUMBER(17,2);
10708   l_old_weighting       NUMBER(17,2);
10709   l_progress_allowed        VARCHAR2(1);
10710 
10711   l_element_version_id_tab  PA_FORECAST_GLOB.NumberTabTyp;
10712   l_proj_element_id_tab     PA_FORECAST_GLOB.NumberTabTyp;
10713   l_object_type_tab     PA_FORECAST_GLOB.VCTabTyp;
10714   l_project_id_tab      PA_FORECAST_GLOB.NumberTabTyp;
10715   l_parent_str_version_id_tab   PA_FORECAST_GLOB.NumberTabTyp;
10716   l_display_sequence_tab    PA_FORECAST_GLOB.NumberTabTyp;
10717   l_wbs_level_tab       PA_FORECAST_GLOB.NumberTabTyp;
10718   l_old_wbs_level_tab       PA_FORECAST_GLOB.NumberTabTyp;
10719   l_wbs_number_tab      PA_FORECAST_GLOB.VCTabTyp;
10720   l_record_version_tab      PA_FORECAST_GLOB.NumberTabTyp;
10721   l_changed_flag_tab        PA_FORECAST_GLOB.VC1TabTyp;
10722 
10723   l_wbs_number          VARCHAR2(1000);
10724   src_branch_mask       VARCHAR2(1000);
10725   ref_branch_mask       VARCHAR2(1000);
10726   l_str1            VARCHAR2(1000);
10727   l_str2            VARCHAR2(1000);
10728   l_number          NUMBER;
10729   l_new_wbs_number      VARCHAR2(1000);
10730   l_user_id         NUMBER;
10731   l_login_id            NUMBER;
10732   l_update_new_child_rels   VARCHAR2(1) := 'N';
10733   first_sub_task_below_src_flag boolean;
10734   last_sub_task_below_src      VARCHAR2(1000);
10735   temp_old_branch_mask      VARCHAR2(1000);
10736   temp_new_branch_mask      VARCHAR2(1000);
10737   last_sub_task_number      VARCHAR2(1000);
10738 
10739   --bug 2843737
10740   CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
10741     select object_id_from1
10742       from pa_object_relationships
10743      where object_id_to1 = c_object_id_to1
10744        and relationship_type = 'S';
10745   l_ref_parent_ver_id          NUMBER;
10746 --end bug 2843737
10747 
10748   CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
10749     select wbs_number
10750       from pa_proj_element_versions
10751      where element_version_id = c_elem_ver_id
10752      and object_type ='PA_TASKS';
10753 
10754   ref_parent_branch_mask        VARCHAR2(1000);
10755 
10756 -- hyau Bug 2852753
10757    l_delete_project_allowed      VARCHAR2(1);
10758    l_update_proj_num_allowed      VARCHAR2(1);
10759    l_update_proj_name_allowed    VARCHAR2(1);
10760    l_update_proj_desc_allowed    VARCHAR2(1);
10761    l_update_proj_dates_allowed    VARCHAR2(1);
10762    l_update_proj_status_allowed  VARCHAR2(1);
10763    l_update_proj_manager_allowed  VARCHAR2(1);
10764    l_update_proj_org_allowed      VARCHAR2(1);
10765    l_add_task_allowed            VARCHAR2(1);
10766    l_delete_task_allowed          VARCHAR2(1);
10767    l_update_task_num_allowed      VARCHAR2(1);
10768    l_update_task_name_allowed    VARCHAR2(1);
10769    l_update_task_dates_allowed    VARCHAR2(1);
10770    l_update_task_desc_allowed    VARCHAR2(1);
10771    l_update_parent_task_allowed  VARCHAR2(1);
10772    l_update_task_org_allowed      VARCHAR2(1);
10773 
10774    l_err_code         NUMBER        := 0;
10775    l_err_stack        VARCHAR2(200) := NULL;
10776    l_err_stage        VARCHAR2(200) := NULL;
10777 
10778    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
10779 
10780    CURSOR get_product_code ( c_project_id NUMBER ) IS
10781    SELECT pm_product_code
10782    FROM PA_PROJECTS_ALL
10783    WHERE project_id = c_project_id;
10784 
10785    l_cur_project_id      NUMBER;
10786    CURSOR cur_proj_id
10787    IS
10788      SELECT project_id
10789        FROM pa_proj_element_versions
10790       WHERE element_version_id = p_structure_version_id;
10791 
10792 -- end hyau Bug 2852753
10793 
10794 -- Merged from 85
10795 --Bug 2947492  ( outdent )
10796 
10797 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
10798 l_parent_task_id             NUMBER;
10799 l_old_parent_task_id         NUMBER;
10800 l_top_task_id                NUMBER;
10801 l_old_top_task_id            NUMBER;
10802 l_old_wbs_level              NUMBER;
10803 i                            NUMBER;
10804 
10805     CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER )
10806     IS
10807       SELECT parent_task_id, top_task_id
10808         FROM pa_tasks
10809        WHERE project_id = c_project_id
10810          AND task_id = c_task_id;
10811 
10812     CURSOR cur_new_child_task( c_project_id NUMBER, c_wbs_level NUMBER,
10813                                c_task_id NUMBER , c_parent_task_id NUMBER )
10814     IS
10815       SELECT pt.task_id, pt.top_task_id, pt.parent_task_id
10816         FROM pa_tasks pt, pa_proj_element_versions ppev
10817        WHERE pt.wbs_level = c_wbs_level
10818          AND parent_task_id = c_parent_task_id
10819          AND pt.project_id = c_project_id
10820          AND pt.task_id = ppev.proj_element_id
10821          AND ppev.display_sequence > ( SELECT display_sequence FROM pa_proj_element_versions
10822                                         WHERE project_id = c_project_id
10823                                           AND object_type = 'PA_TASKS'
10824                                           AND proj_element_id = c_task_id );
10825 
10826    --For financial tasks we can directly join with pa_proj-element_version using proj_element_id
10827    --bcoz this api will be called as long as there is only one version for financial otherwise
10828    --publishing will take care.
10829 
10830 --End Bug 2947492 ( outdent )
10831 -- Merged from 85
10832 
10833 --bug 3053281
10834   l_wp_type              VARCHAR2(1);
10835   l_weighting_basis_Code VARCHAR2(30);
10836 --end bug 3053281
10837 
10838   --3035902: process update flag changes
10839   cursor get_task_type_id(c_proj_element_id NUMBER) IS
10840       select type_id
10841         from pa_proj_elements
10842        where proj_element_id = c_proj_element_id;
10843   l_task_type_id      NUMBER;
10844   l_wp_process_flag   VARCHAR2(1);
10845   --3035902: end process update flag changes
10846 
10847 --bug 3069306
10848   Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
10849     select object_id_to1
10850       from pa_object_relationships
10851      where relationshiP_type = 'S'
10852        and object_type_to = 'PA_TASKS'
10853              start with object_id_to1 = c_task_ver_id
10854                and object_type_to = 'PA_TASKS'
10855                and relationship_type = 'S'
10856            connect by prior object_id_from1 = object_id_to1
10857                and prior object_type_from = object_type_to
10858                and prior relationship_type = relationship_type
10859  intersect
10860     select a.object_id_to1
10861       from pa_object_relationships a, pa_proj_element_versions b
10862      where a.relationshiP_type = 'S'
10863        and a.object_id_from1 = b.parent_structure_version_id
10864        and b.element_version_id = c_task_ver_id
10865        and a.object_type_from = 'PA_STRUCTURES';
10866   l_old_par_ver_id NUMBER;
10867   l_new_par_ver_id NUMBER;
10868 --end bug 3069306
10869 
10870 --bug 3301192
10871   /* Bug #: 3305199 SMukka                                                         */
10872   /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
10873   /* l_task_ver_ids2              PA_PLSQL_DATATYPES.IdTabTyp;                     */
10874   l_task_ver_ids2             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
10875   l_lowest_task_flag1         VARCHAR2(1);
10876   l_lowest_task_flag2         VARCHAR2(1);
10877   l_fin_task_flag             VARCHAR2(1);
10878 
10879 BEGIN
10880 
10881   pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK');
10882 
10883   IF (p_debug_mode = 'Y') THEN
10884     pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK begin');
10885   END IF;
10886 
10887   IF (p_commit = FND_API.G_TRUE) THEN
10888     savepoint OUTDENT_task_version_bulk;
10889   END IF;
10890 
10891   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
10892     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10893   END IF;
10894 
10895   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
10896     FND_MSG_PUB.initialize;
10897   END IF;
10898 
10899   --bug 4075697
10900   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
10901   --bug 4075697
10902 
10903 
10904   --3035902: process update flag changes
10905   l_wp_process_flag := 'N';
10906   --3035902: end process update flag changes
10907 
10908 -- hyau Bug 2852753
10909       IF p_calling_module = 'SELF_SERVICE' THEN
10910 
10911         OPEN cur_proj_id;
10912         FETCH cur_proj_id INTO l_cur_project_id;
10913         CLOSE cur_proj_id;
10914 
10915         OPEN get_product_code(l_cur_project_id);
10916         FETCH get_product_code INTO l_pm_product_code;
10917         CLOSE get_product_code;
10918 
10919         If l_pm_product_code IS NOT NULL THEN
10920           pa_pm_controls.Get_Project_actions_allowed
10921                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
10922                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
10923                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
10924                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
10925                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
10926                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
10927                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
10928                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
10929                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
10930                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
10931                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
10932                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
10933                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
10934                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
10935                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
10936                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
10937                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
10938                  P_ERROR_CODE                 => l_err_code,
10939          P_ERROR_STACK                    => l_err_stack,
10940          P_ERROR_STAGE                => l_err_stage );
10941 
10942           IF l_err_code <> 0 THEN
10943             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10944                                  p_msg_name       => l_err_stage);
10945           END IF;
10946       IF l_update_parent_task_allowed = 'N' THEN
10947               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10948                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
10949               raise FND_API.G_EXC_ERROR;
10950           END IF;
10951         END IF;
10952       END IF;
10953 
10954 -- end hyau Bug 2852753
10955 
10956   IF (p_structure_version_id IS NOT NULL) AND
10957        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
10958     IF ('N' = pa_proj_elements_utils.check_task_in_structure(
10959           p_structure_version_id,
10960           p_task_version_id)) THEN
10961       --deleting linked task. Error
10962       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
10963       raise FND_API.G_EXC_ERROR;
10964     END IF;
10965   END IF;
10966 
10967 --hsiu added, for dates rollup
10968 --need to get peer task before it has been outdented.
10969   OPEN get_peer_tasks;
10970   LOOP
10971     FETCH get_peer_tasks INTO c_get_peer_tasks;
10972     EXIT WHEN get_peer_tasks%NOTFOUND;
10973     l_tasks_ver_ids.extend;
10974     l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
10975 --added for task status rollup
10976     l_rollup_task_id := c_get_peer_tasks.object_id_to1;
10977   END LOOP;
10978   CLOSE get_peer_tasks;
10979 
10980   -- Get Source Task Information
10981   BEGIN
10982       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
10983       INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
10984       FROM PA_PROJ_ELEMENT_VERSIONS
10985       WHERE element_version_id = p_task_version_id
10986       AND project_id = p_project_id
10987       AND parent_structure_version_id = p_structure_version_id;
10988   EXCEPTION
10989     WHEN OTHERS THEN
10990     raise;
10991   END;
10992 
10993 
10994 -- Lifecycle Phase validation Changes should be implemented here
10995 
10996   IF src_wbs_level = 1 then
10997     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
10998                          ,p_msg_name       => 'PA_PS_CANNOT_OUTDENT');
10999     raise FND_API.G_EXC_ERROR;
11000   END IF;
11001 
11002   -- Get Refernce Task Information
11003 
11004   BEGIN
11005       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
11006       INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number,  ref_parent_str_ver_id, ref_object_type
11007       FROM PA_PROJ_ELEMENT_VERSIONS
11008       WHERE parent_structure_version_id = p_structure_version_id
11009       AND project_id = p_project_id
11010       AND (wbs_level = src_wbs_level-1)
11011           AND object_type = 'PA_TASKS'
11012       AND display_sequence =
11013         (SELECT max (display_sequence)
11014          FROM pa_proj_element_versions
11015          WHERE project_id = p_project_id
11016          AND parent_structure_version_id = p_structure_version_id
11017          AND (wbs_level = src_wbs_level-1)
11018          AND display_sequence < src_seq_number
11019          AND object_type = 'PA_TASKS');
11020   EXCEPTION
11021     WHEN OTHERS THEN
11022     raise;
11023     -- It will never return NO_DATA_FOUND as there will always at least one task with wbs_level-1
11024   END;
11025 
11026   IF src_wbs_level < ref_wbs_level then
11027     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
11028                          ,p_msg_name       => 'PA_PS_CANNOT_OUTDENT');
11029     raise FND_API.G_EXC_ERROR;
11030   END IF;
11031 
11032   -- While Outdenting always the source task will become peer of reference task
11033   l_peer_or_sub := 'PEER';
11034 
11035   OPEN get_ref_parent_id(ref_elem_ver_id);
11036   FETCH get_ref_parent_id into l_ref_parent_ver_id;
11037   CLOSE get_ref_parent_id;
11038 
11039   OPEN get_wbs_number(l_ref_parent_ver_id);
11040   FETCH get_wbs_number into ref_parent_branch_mask;
11041   CLOSE get_wbs_number;
11042 
11043 
11044 /*  IF src_wbs_level = ref_wbs_level then
11045     l_peer_or_sub := 'SUB';
11046   ELSE
11047     l_peer_or_sub := 'PEER';
11048   END IF;
11049 */
11050 
11051     -- Bug 8211519 :  Dissallowing 'Outdenting' of a task if the task has a subproject association.
11052     if (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
11053 							          , src_proj_element_id
11054 								        , p_task_version_id),'N') = 'Y') then
11055 
11056     	IF (p_debug_mode = 'Y') THEN
11057          pa_debug.debug('ERROR !!! PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK ');
11058       END IF;
11059 
11060       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11061                            p_msg_name => 'PA_PS_TASK_HAS_SUB_PROJ');
11062       raise FND_API.G_EXC_ERROR;
11063 
11064     end if;
11065 
11066     --Check if ok to OUTDENT this task
11067     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
11068          p_task_ver_id => p_task_version_id
11069         ,x_return_status      => l_return_status
11070         ,x_error_message_code => l_error_msg_code
11071     );
11072 
11073     IF (l_return_status <> 'Y') THEN
11074         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11075                              p_msg_name => l_error_msg_code);
11076         raise FND_API.G_EXC_ERROR;
11077     END IF;
11078 
11079     --check if ok to create
11080     OPEN get_parent_version_id(ref_elem_ver_id);
11081     FETCH get_parent_version_id into l_parent_ver_id;
11082     CLOSE get_parent_version_id;
11083 
11084     --bug 3069306
11085     --if financial task, check if changing parent ok
11086     IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
11087       OPEN get_top_task_ver_id(l_parent_ver_id);
11088       FETCH get_top_task_ver_id into l_new_par_ver_id;
11089       CLOSE get_top_task_ver_id;
11090 
11091       OPEN get_top_task_ver_id(p_task_version_id);
11092       FETCH get_top_task_ver_id into l_old_par_ver_id;
11093       CLOSE get_top_task_Ver_id;
11094 
11095       IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
11096         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11097                              p_msg_name => 'PA_CANT_CHANGE_PARENT');
11098         raise FND_API.G_EXC_ERROR;
11099       END IF;
11100     END IF;
11101     --end bug 3069306
11102 
11103     PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
11104          p_parent_task_ver_id => l_parent_ver_id
11105         ,x_return_status      => l_return_status
11106         ,x_error_message_code => l_error_msg_code
11107       );
11108 
11109       IF (l_return_status <> 'Y') THEN
11110         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11111                              p_msg_name => l_error_msg_code);
11112         raise FND_API.G_EXC_ERROR;
11113       END IF;
11114 
11115   -- Added for FP_M changes. Bug 3305199 : Bhumesh  xxx
11116 
11117   If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
11118         IN ('SHARE_PARTIAL')
11119   Then
11120 
11121     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
11122         p_task_version_id       => p_task_version_id
11123       , p_ref_task_version_id   => ref_elem_ver_id
11124       , x_return_status         => x_return_status
11125       , x_msg_count             => x_msg_count
11126       , x_msg_data              => x_msg_data
11127       , x_error_msg_code        => l_error_msg_code);
11128 
11129 --    IF (x_return_status <> 'Y') THEN  --Bug 3831786 Commented
11130     IF (x_return_status <> 'S') THEN    --Bug 3831786 Added
11131        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11132                 p_msg_name       => l_error_msg_code);
11133       raise FND_API.G_EXC_ERROR;
11134     End If;
11135   End If;
11136 
11137   --check the task is a lowest task bug 3301192
11138   l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
11139 
11140   -- End of FP_M changes
11141 
11142 /*
11143 
11144  The processing done by the followig two calls is made now as plsql table bulk processing
11145 
11146   PA_TASK_PUB1.Update_Task_Version
11147   ( p_validate_only          => FND_API.G_FALSE,
11148     p_ref_task_version_id    => l_ref_task_version_id,
11149     p_peer_or_sub            => 'PEER',
11150     p_task_version_id        => p_task_version_id,
11151     p_record_version_number  => p_record_version_number,
11152     p_action                 => 'OUTDENT',
11153     x_return_status          => l_return_status,
11154     x_msg_count              => l_msg_count,
11155     x_msg_data               => l_msg_data );
11156 
11157   PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
11158   ( p_commit                   => p_commit
11159    ,p_debug_mode               => p_debug_mode
11160    ,p_parent_structure_ver_id  => l_parent_structure_version_id
11161    ,p_task_id                  => p_task_version_id
11162    ,p_display_seq              => l_display_sequence
11163    ,p_action                   => 'OUTDENT'
11164    ,p_parent_task_id           => NULL
11165    ,x_return_status            => l_return_status );
11166 
11167 */
11168 
11169 
11170 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
11171 
11172 -- Logic Added for plsql table
11173 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
11174 
11175 l_element_version_id_tab.delete;
11176 l_proj_element_id_tab.delete;
11177 l_object_type_tab.delete;
11178 l_project_id_tab.delete;
11179 l_parent_str_version_id_tab.delete;
11180 l_display_sequence_tab.delete;
11181 l_wbs_level_tab.delete;
11182 l_old_wbs_level_tab.delete;
11183 l_wbs_number_tab.delete;
11184 l_record_version_tab.delete;
11185 l_changed_flag_tab.delete;
11186 
11187   BEGIN
11188             SELECT  distinct element_version_id, proj_element_id, object_type,
11189             project_id, parent_structure_version_id,
11190             display_sequence, wbs_level, wbs_number,
11191             record_version_number, 'N' changed_flag
11192              BULK COLLECT INTO l_element_version_id_tab,
11193             l_proj_element_id_tab, l_object_type_tab,
11194             l_project_id_tab, l_parent_str_version_id_tab,
11195             l_display_sequence_tab, l_wbs_level_tab,
11196             l_wbs_number_tab, l_record_version_tab,
11197             l_changed_flag_tab
11198             FROM
11199         pa_proj_element_versions
11200         WHERE
11201                  project_id = p_project_id
11202         AND parent_structure_version_id = p_structure_version_id
11203         AND object_type = 'PA_TASKS'
11204         AND(
11205         element_version_id = p_task_version_id  -- Source task itself
11206         OR element_version_id IN -- All tasks below the source task
11207         (select object_id_to1
11208         from pa_object_relationships
11209         where relationship_type = 'S'
11210                 and object_type_to = 'PA_TASKS'
11211         start with object_id_from1 = l_ref_parent_ver_id
11212         connect by object_id_from1 = PRIOR object_id_to1
11213                     and relationship_type = prior relationship_type
11214                     and relationship_type = 'S')
11215         )
11216         ORDER BY display_sequence ;
11217             l_old_wbs_level_tab := l_wbs_level_tab;
11218   EXCEPTION
11219     WHEN OTHERS THEN
11220         raise;
11221   END;
11222 
11223 --bug 4214825, commented out this code as this validation is not required in case of outdent
11224 /*--bug 3475920
11225 --Need loop to check all new subtasks and see if ok (for deliverable type task)
11226   FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11227     --check if moving to subtask ok
11228     IF (l_element_version_id_tab(j) <> p_task_version_id) Then
11229       IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_element_version_id_tab(j)) = 'Y' THEN
11230         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11231                              p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
11232         raise FND_API.G_EXC_ERROR;
11233       END IF;
11234     END IF;
11235   END LOOP;
11236 --end bug 3475920*/
11237 
11238 
11239 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
11240 -- Here we can also incorporate sequence number update. In OUTDENT sequence number does not change.
11241 
11242 -- Update wbs level
11243 
11244  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11245         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
11246             l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
11247             l_changed_flag_tab(j) := 'Y';
11248         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
11249             -- Direct Childs of source
11250             l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
11251             l_changed_flag_tab(j) := 'Y';
11252         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
11253             -- Exit level changes, IT means no Direct childs are left
11254             EXIT;
11255         END IF;
11256  END LOOP;
11257 
11258 
11259 -- Update wbs_number
11260 
11261 
11262  src_branch_mask := src_wbs_number;
11263  ref_branch_mask := ref_wbs_number;
11264  first_sub_task_below_src_flag := false;
11265 
11266 
11267  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11268         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
11269         IF src_wbs_level = 2 THEN -- This is going to be a top task
11270             l_wbs_number := to_char(to_number(ref_wbs_number)+1);
11271                 l_wbs_number_tab(j) := l_wbs_number;
11272                 l_changed_flag_tab(j) := 'Y';
11273                 l_new_wbs_number := l_wbs_number;
11274         ELSE
11275               l_number := instr(ref_wbs_number,'.', -1, 1);
11276               l_str1 := substr(ref_wbs_number, 1, l_number -1);
11277               l_str2 := substr(ref_wbs_number, l_number + 1);
11278               l_str2 := to_char(to_number(l_str2 + 1));
11279               l_wbs_number := l_str1 || '.' || l_str2;
11280               l_wbs_number_tab(j) := l_wbs_number;
11281               l_changed_flag_tab(j) := 'Y';
11282               l_new_wbs_number := l_wbs_number;
11283         END IF;
11284     ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
11285         IF l_display_sequence_tab(j) > src_seq_number THEN
11286         IF src_wbs_level = 2 THEN -- Source is going to be a top task
11287               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
11288                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
11289             -- Direct childs of source
11290                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
11291               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11292                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
11293               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
11294                   l_wbs_number_tab(j) := l_wbs_number;
11295                   l_changed_flag_tab(j) := 'Y';
11296               IF l_old_wbs_level_tab(j) = src_wbs_level+1 THEN
11297                 first_sub_task_below_src_flag := true;
11298                 last_sub_task_below_src := l_wbs_number;
11299               END IF;
11300               ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
11301                  AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
11302               IF first_sub_task_below_src_flag = false THEN
11303                   l_wbs_number := l_new_wbs_number || '.1';
11304                   first_sub_task_below_src_flag := true;
11305                   last_sub_task_below_src := l_wbs_number;
11306                   temp_old_branch_mask := l_wbs_number_tab(j);
11307                   temp_new_branch_mask := l_wbs_number;
11308                   l_wbs_number_tab(j) := l_wbs_number;
11309                   l_changed_flag_tab(j) := 'Y';
11310               ELSE
11311                 IF (l_old_wbs_level_tab(j) = src_wbs_level) THEN
11312                       l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
11313                   l_str1 := to_char(to_number(l_str1 + 1));
11314                   l_wbs_number := l_new_wbs_number || '.' || l_str1;
11315                   temp_old_branch_mask := l_wbs_number_tab(j);
11316                   temp_new_branch_mask := l_wbs_number;
11317                   l_wbs_number_tab(j) := l_wbs_number;
11318                   l_changed_flag_tab(j) := 'Y';
11319                   last_sub_task_below_src := l_wbs_number;
11320                 ELSE
11321                       l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
11322                   l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11323                       l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
11324                   l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
11325                   l_wbs_number_tab(j) := l_wbs_number;
11326                   l_changed_flag_tab(j) := 'Y';
11327                                 END IF;
11328               END IF;
11329               ELSE
11330                  IF(instr(l_wbs_number_tab(j), '.') <> 0) then
11331                  l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
11332                  l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
11333                  l_str1 := to_char(to_number(l_str1) + 1);
11334                          l_wbs_number := l_str1 || l_str2;
11335                  l_wbs_number_tab(j) := l_wbs_number;
11336                  l_changed_flag_tab(j) := 'Y';
11337                  ELSE
11338                      l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) + 1);
11339                  l_wbs_number_tab(j) := l_wbs_number;
11340                  l_changed_flag_tab(j) := 'Y';
11341              END IF;
11342               END IF;
11343         ELSE
11344               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
11345                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
11346             -- Direct childs of source
11347                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
11348               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11349                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
11350               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
11351                   l_wbs_number_tab(j) := l_wbs_number;
11352                   l_changed_flag_tab(j) := 'Y';
11353               IF (l_old_wbs_level_tab(j) = src_wbs_level+1) THEN
11354                 first_sub_task_below_src_flag := true;
11355                 last_sub_task_below_src := l_wbs_number;
11356               END IF;
11357               ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
11358                  AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
11359               IF first_sub_task_below_src_flag = false THEN
11360                   l_wbs_number := l_new_wbs_number || '.1';
11361                   first_sub_task_below_src_flag := true;
11362                   last_sub_task_below_src := l_wbs_number;
11363                   temp_old_branch_mask := l_wbs_number_tab(j);
11364                   temp_new_branch_mask := l_wbs_number;
11365                   l_wbs_number_tab(j) := l_wbs_number;
11366                   l_changed_flag_tab(j) := 'Y';
11367               ELSE
11368                 IF l_old_wbs_level_tab(j) = src_wbs_level THEN
11369                       l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
11370                   l_str1 := to_char(to_number(l_str1 + 1));
11371                   l_wbs_number := l_new_wbs_number || '.' || l_str1;
11372                   temp_old_branch_mask := l_wbs_number_tab(j);
11373                   temp_new_branch_mask := l_wbs_number;
11374                   l_wbs_number_tab(j) := l_wbs_number;
11375                   l_changed_flag_tab(j) := 'Y';
11376                   last_sub_task_below_src := l_wbs_number;
11377                 ELSE
11378                       l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
11379                   l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11380                       l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
11381                   l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
11382                   l_wbs_number_tab(j) := l_wbs_number;
11383                   l_changed_flag_tab(j) := 'Y';
11384                                 END IF;
11385               END IF;
11386               ELSE
11387                   l_str1 := substr(l_wbs_number_tab(j), length(ref_parent_branch_mask) + 2);
11388               IF(instr(l_str1, '.') <> 0) THEN
11389                 l_str2 := substr(l_str1, instr(l_str1, '.'));
11390                 l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
11391                 l_str1 := to_char(to_number(l_str1) + 1);
11392                 l_wbs_number := ref_parent_branch_mask || '.' || l_str1 || l_str2;
11393                 l_wbs_number_tab(j) := l_wbs_number;
11394                 l_changed_flag_tab(j) := 'Y';
11395               ELSE
11396                 l_str1:= to_char(to_number(l_str1) + 1);
11397                 l_wbs_number := ref_parent_branch_mask || '.' || l_str1;
11398                 l_wbs_number_tab(j) := l_wbs_number;
11399                 l_changed_flag_tab(j) := 'Y';
11400               END IF;
11401               END IF;
11402         END IF;
11403           END IF;
11404     END IF;
11405      END LOOP;
11406 
11407 
11408 l_user_id := fnd_global.user_id;
11409 l_login_id := fnd_global.login_id;
11410 
11411 -- Locking should be implemented here
11412 
11413  FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
11414  UPDATE PA_PROJ_ELEMENT_VERSIONS
11415  SET
11416         wbs_level                = l_wbs_level_tab(j)           ,
11417         wbs_number                   = l_wbs_number_tab(j)          ,
11418         last_update_date                 = sysdate          ,
11419         last_updated_by                  = l_user_id            ,
11420         last_update_login                = l_login_id           ,
11421     record_version_number        = l_record_version_tab(j)+1
11422  WHERE  element_version_id         = l_element_version_id_tab(j)
11423  AND l_changed_flag_tab(j)='Y';
11424 
11425 
11426 -- Update Relationship
11427 
11428       IF ref_object_type = 'PA_TASKS'
11429       THEN
11430          IF l_peer_or_sub = 'PEER'
11431          THEN
11432             OPEN cur_obj_rel( ref_elem_ver_id );
11433             FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
11434             CLOSE cur_obj_rel;
11435 
11436             l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
11437 
11438             IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
11439             THEN
11440                 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
11441                 l_task_version_from := null;
11442             ELSE
11443                 l_task_version_from  := v_cur_obj_rel_rec.object_id_from1;
11444                 l_struc_version_from := null;
11445             END IF;
11446 
11447         --There could be some tasks with sequence number greater than the p_task_version that now become
11448             --children of p_task_version.
11449         -- I don't think so that this is needed. This is not possible in any case
11450             l_update_new_child_rels := 'Y';
11451 
11452          ELSE -- l_peer_or_sub = 'SUB' Basically this case will not be for OUTDENT
11453                 --parent task is the reference task
11454             l_task_version_from  := ref_elem_ver_id;
11455             l_struc_version_from := null;
11456             l_relationship_subtype := 'TASK_TO_TASK';
11457          END IF;
11458      -- The following case is not possible for Indent/Outdent
11459       ELSIF ref_object_type = 'PA_STRUCTURES'
11460       THEN
11461          l_struc_version_from := ref_elem_ver_id;
11462          l_task_version_from  := null;
11463          l_relationship_subtype := 'STRUCTURE_TO_TASK';
11464       END IF; -- ref_object_type = 'PA_TASKS'
11465 
11466 
11467  --update relatonship of the task version p_task_version.
11468  --set structure_version_from and task_version_from accordingly.
11469  OPEN cur_obj_rel( p_task_version_id );
11470  FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
11471  CLOSE cur_obj_rel;
11472 
11473 --for task weighting
11474  OPEN get_task_weighting(p_task_version_id);
11475  FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
11476  CLOSE get_task_weighting;
11477 
11478 
11479  IF(l_task_version_from is not null) THEN
11480    l_version_from := l_task_version_from;
11481  ELSE
11482    l_version_from := l_struc_version_from;
11483  END IF;
11484 
11485  IF (l_version_from = p_task_version_id) THEN
11486    l_new_weighting := l_old_weighting;
11487  ELSE
11488    OPEN get_sub_tasks(l_version_from);
11489    FETCH get_sub_tasks into l_dummy;
11490    IF (get_sub_tasks%NOTFOUND) THEN
11491      l_new_weighting := 100;
11492      --bug 2673570
11493      OPEN check_progress_allowed(p_task_version_id);
11494      FETCH check_progress_allowed INTO l_progress_allowed;
11495      CLOSE check_progress_allowed;
11496 
11497      if l_progress_allowed = 'N' then
11498         l_new_weighting := 0;
11499      end if;
11500      --bug 2673570
11501    ELSE
11502      l_new_weighting := 0;
11503    END IF;
11504    CLOSE get_sub_tasks;
11505  END IF;
11506 
11507  PA_RELATIONSHIP_PVT.Update_Relationship
11508              (
11509               p_api_version                       => p_api_version
11510              ,p_init_msg_list                     => p_init_msg_list
11511              ,p_commit                            => p_commit
11512              ,p_validate_only                     => p_validate_only
11513              ,p_validation_level                  => p_validation_level
11514              ,p_calling_module                    => p_calling_module
11515              ,p_debug_mode                        => p_debug_mode
11516              ,p_max_msg_count                     => p_max_msg_count
11517              ,p_object_relationship_id            => v_cur_obj_rel_rec.object_relationship_id
11518              ,p_project_id_from                   => null
11519              ,p_structure_id_from                 => null
11520              ,p_structure_version_id_from         => l_struc_version_from
11521              ,p_task_version_id_from              => l_task_version_from
11522              ,p_project_id_to                     => null
11523              ,p_structure_id_to                   => null
11524              ,p_structure_version_id_to           => null
11525              ,p_task_version_id_to                => p_task_version_id
11526              ,p_relationship_type                 => 'S'
11527              ,p_relationship_subtype              => l_relationship_subtype
11528              ,p_weighting_percentage              => l_new_weighting
11529              ,p_record_version_number             => v_cur_obj_rel_rec.record_version_number
11530              ,x_return_status                     => l_return_status
11531              ,x_msg_count                         => l_msg_count
11532              ,x_msg_data                          => l_msg_data
11533             );
11534 
11535 
11536              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11537                 x_msg_count := FND_MSG_PUB.count_msg;
11538                 IF x_msg_count = 1 then
11539                    pa_interface_utils_pub.get_messages
11540                    (p_encoded        => FND_API.G_TRUE,
11541                     p_msg_index      => 1,
11542                     p_msg_count      => l_msg_count,
11543                     p_msg_data       => l_msg_data,
11544                     p_data           => l_data,
11545                     p_msg_index_out  => l_msg_index_out);
11546                     x_msg_data := l_data;
11547                 END IF;
11548              raise FND_API.G_EXC_ERROR;
11549              END IF;
11550 
11551 -- I don't think the following code is needed. This case is impossible in case of OUTDENT
11552      IF l_update_new_child_rels = 'Y' -- AND p_action IN( 'OUTDENT' )
11553      THEN
11554         FOR cur_new_child_rec in cur_new_child(ref_elem_ver_id, src_seq_number) LOOP
11555             OPEN get_sub_tasks(p_task_version_id);
11556             FETCH get_sub_tasks into l_dummy;
11557             IF (get_sub_tasks%NOTFOUND) THEN
11558               l_new_weighting := 100;
11559             ELSE
11560               l_new_weighting := 0;
11561             END IF;
11562             CLOSE get_sub_tasks;
11563 
11564             --bug 4099488
11565             IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_task_version_id, cur_new_child_rec.object_id_to1) = 'N' THEN
11566               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11567                                    p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
11568               raise FND_API.G_EXC_ERROR;
11569             END IF;
11570             --end bug 4099488
11571 
11572             PA_RELATIONSHIP_PVT.Update_Relationship
11573               (
11574               p_api_version                       => p_api_version
11575              ,p_init_msg_list                     => p_init_msg_list
11576              ,p_commit                            => p_commit
11577              ,p_validate_only                     => p_validate_only
11578              ,p_validation_level                  => p_validation_level
11579              ,p_calling_module                    => p_calling_module
11580              ,p_debug_mode                        => p_debug_mode
11581              ,p_max_msg_count                     => p_max_msg_count
11582              ,p_object_relationship_id            => cur_new_child_rec.object_relationship_id
11583              ,p_project_id_from                   => null
11584              ,p_structure_id_from                 => null
11585              ,p_structure_version_id_from         => null
11586              ,p_task_version_id_from              => p_task_version_id
11587              ,p_project_id_to                     => null
11588              ,p_structure_id_to                   => null
11589              ,p_structure_version_id_to           => null
11590              ,p_task_version_id_to                => cur_new_child_rec.object_id_to1
11591              ,p_relationship_type                 => 'S'
11592              ,p_relationship_subtype              => 'TASK_TO_TASK'
11593              ,p_weighting_percentage              => l_new_weighting
11594              ,p_record_version_number             => cur_new_child_rec.record_version_number
11595              ,x_return_status                     => x_return_status
11596              ,x_msg_count                         => x_msg_count
11597              ,x_msg_data                          => x_msg_data
11598             );
11599 
11600              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11601                 x_msg_count := FND_MSG_PUB.count_msg;
11602                 IF x_msg_count = 1 then
11603                    pa_interface_utils_pub.get_messages
11604                    (p_encoded        => FND_API.G_TRUE,
11605                     p_msg_index      => 1,
11606                     p_msg_count      => l_msg_count,
11607                     p_msg_data       => l_msg_data,
11608                     p_data           => l_data,
11609                     p_msg_index_out  => l_msg_index_out);
11610                     x_msg_data := l_data;
11611                 END IF;
11612              raise FND_API.G_EXC_ERROR;
11613              END IF;
11614 
11615         END LOOP;
11616      END IF;
11617 
11618 --for task weighting
11619      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
11620        p_task_version_id => l_old_parent_id
11621       ,x_return_status => l_return_status
11622       ,x_msg_count => l_msg_count
11623       ,x_msg_data => l_msg_data
11624      );
11625 
11626      x_msg_count := FND_MSG_PUB.count_msg;
11627      IF x_msg_count = 1 then
11628        pa_interface_utils_pub.get_messages
11629         (p_encoded        => FND_API.G_TRUE,
11630          p_msg_index      => 1,
11631          p_msg_count      => l_msg_count,
11632          p_msg_data       => l_msg_data,
11633          p_data           => l_data,
11634          p_msg_index_out  => l_msg_index_out);
11635          x_msg_data := l_data;
11636       END IF;
11637 
11638      --bug 2673570
11639      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
11640        p_task_version_id => p_task_version_id
11641       ,x_return_status => l_return_status
11642       ,x_msg_count => l_msg_count
11643       ,x_msg_data => l_msg_data
11644      );
11645 
11646      x_msg_count := FND_MSG_PUB.count_msg;
11647      IF x_msg_count = 1 then
11648        pa_interface_utils_pub.get_messages
11649         (p_encoded        => FND_API.G_TRUE,
11650          p_msg_index      => 1,
11651          p_msg_count      => l_msg_count,
11652          p_msg_data       => l_msg_data,
11653          p_data           => l_data,
11654          p_msg_index_out  => l_msg_index_out);
11655          x_msg_data := l_data;
11656       END IF;
11657      --bug 2673570
11658 --end changes for task weighting
11659 
11660 
11661 /*** End Update_task_version and Update_wbs_number code ***/
11662 
11663   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
11664     FROM pa_proj_element_versions
11665    WHERE element_version_id =  ( Select parent_structure_version_id
11666                                    from pa_proj_element_versions
11667                                   where element_version_id = p_task_version_id )
11668      AND object_type = 'PA_STRUCTURES';
11669 
11670 
11671   --Do financial task check
11672   --If financial
11673   OPEN cur_struc_type( l_structure_id );
11674   FETCH cur_struc_type INTO l_dummy_char;
11675   IF cur_struc_type%FOUND
11676   THEN
11677       --If structure has any published versions.
11678       l_published_version := 'N';
11679       OPEN cur_pub_versions( l_structure_id, l_project_id );
11680       FETCH cur_pub_versions INTO l_published_version;
11681       CLOSE cur_pub_versions;
11682 
11683 
11684       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
11685                                                      l_project_id);
11686       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
11687                                                   l_project_id);
11688 
11689 --o      IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y') THEN
11690       l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --outdent in corresponding task in pa_tasks
11691 
11692       IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
11693          (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
11694 	 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
11695 	 THEN
11696 
11697           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
11698             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
11699             FROM PA_TASKS pt,
11700                  pa_proj_elem_ver_structure ppa,
11701                  PA_PROJ_ELEMENT_VERSIONS ppev
11702            WHERE ppev.element_version_id = p_task_version_id
11703              AND ppev.parent_structure_version_id = ppa.element_version_id
11704              AND ppev.project_id = ppa.project_id
11705              AND ppev.proj_element_id = pt.task_id;
11706 
11707 -- Merged from 85
11708           SELECT record_version_number, parent_task_id, wbs_level    --get old parent id for bug 2947492 (outdent )
11709                  ,top_task_id
11710             INTO l_task_record_version_number, l_old_parent_task_id, l_old_wbs_level
11711                  ,l_old_top_task_id
11712             FROM pa_tasks
11713            WHERE task_id = l_task_id
11714              AND project_id = l_project_id;
11715 -- Merged from 85
11716 
11717 -- Merged from 85
11718           --Bug 2947492 ( outdent )
11719 
11720           --The following cursor will pick those taks that become child tasks of outdenting task
11721           --which were initially at the same level with display sequence greater than the outdenting task.
11722 /*
11723           i:= 0;
11724           FOR  cur_new_child_task_rec in cur_new_child_task( l_project_id, l_old_wbs_level,
11725                                                              l_task_id, l_old_parent_task_id ) LOOP
11726 
11727             i := i + 1;
11728 
11729             l_plannable_tasks_tbl(i).impacted_task_id   := cur_new_child_task_rec.task_id;
11730             l_plannable_tasks_tbl(i).action             := 'REPARENT';
11731             l_plannable_tasks_tbl(i).old_parent_task_id := cur_new_child_task_rec.parent_task_id;
11732             l_plannable_tasks_tbl(i).New_parent_task_id := l_task_id;
11733             l_plannable_tasks_tbl(i).top_task_id        := cur_new_child_task_rec.top_task_id;
11734 
11735             --First call the check_reparent ok
11736             --This should have been called in the beginning but due to lot of complexity involved in getting
11737             --new parent task id it is decided to call this later stage as long as  we rollback the whole operation
11738             --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
11739 
11740             PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
11741                      p_task_id                    => cur_new_child_task_rec.task_id
11742                     ,p_old_parent_task_id         => cur_new_child_task_rec.parent_task_id
11743                     ,p_new_parent_task_id         => l_task_id
11744                     ,x_return_status              => l_return_status
11745                     ,x_msg_count                  => l_msg_count
11746                     ,x_msg_data                   => l_msg_data
11747                 );
11748 
11749              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11750                 x_msg_count := FND_MSG_PUB.count_msg;
11751                 IF x_msg_count = 1 then
11752                    pa_interface_utils_pub.get_messages
11753                    (p_encoded        => FND_API.G_TRUE,
11754                     p_msg_index      => 1,
11755                     p_msg_count      => l_msg_count,
11756                     p_msg_data       => l_msg_data,
11757                     p_data           => l_data,
11758                     p_msg_index_out  => l_msg_index_out);
11759                     x_msg_data := l_data;
11760                 END IF;
11761                 raise FND_API.G_EXC_ERROR;
11762              END IF;
11763 
11764           END LOOP;
11765           --End Bug 2947492 ( outdent )
11766 */  ---commenitng out, please check venkatesh mail dated 22 jan 04
11767 
11768 -- Merged from 85
11769 
11770           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
11771                          p_project_id                        => l_project_id
11772                         ,p_task_id                           => l_task_id
11773                         ,p_edit_mode                         => 'OUTDENT'
11774                         ,p_record_version_number             => l_task_record_version_number
11775                         ,p_wbs_record_version_number         => 1
11776                         ,x_return_status                     => l_return_status
11777                         ,x_msg_count                         => l_msg_count
11778                         ,x_msg_data                          => l_msg_data );
11779 
11780   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11781                 x_msg_count := FND_MSG_PUB.count_msg;
11782                 IF x_msg_count = 1 then
11783                    pa_interface_utils_pub.get_messages
11784                    (p_encoded        => FND_API.G_TRUE,
11785                     p_msg_index      => 1,
11786                     p_msg_count      => l_msg_count,
11787                     p_msg_data       => l_msg_data,
11788                     p_data           => l_data,
11789                     p_msg_index_out  => l_msg_index_out);
11790                     x_msg_data := l_data;
11791                 END IF;
11792                 raise FND_API.G_EXC_ERROR;
11793              END IF;
11794 
11795           --Bug 2947492 (outdent )
11796           --
11797 
11798             OPEN get_parent_task_id( l_task_id , l_project_id );
11799             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
11800             CLOSE get_parent_task_id;
11801 
11802             --bug 2967204
11803             --Cannot move out of the current hierarchy
11804               IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
11805               THEN
11806                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11807                                        p_msg_name => 'PA_CANT_CHANGE_PARENT');
11808                   raise FND_API.G_EXC_ERROR;
11809               END IF;
11810             --End bug 2967204
11811 
11812 /*
11813             --First call the check_reparent ok
11814             --This should have been called in the beginning but due to lot of complexity involved in getting
11815             --new parent task id it is decided to call this later stage as long as  we rollback the whole operation
11816             --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
11817             PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
11818                      p_task_id                    => l_task_id
11819                     ,p_old_parent_task_id         => l_old_parent_task_id
11820                     ,p_new_parent_task_id         => l_parent_task_id
11821                     ,x_return_status              => l_return_status
11822                     ,x_msg_count                  => l_msg_count
11823                     ,x_msg_data                   => l_msg_data
11824                 );
11825 
11826              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11827                 x_msg_count := FND_MSG_PUB.count_msg;
11828                 IF x_msg_count = 1 then
11829                    pa_interface_utils_pub.get_messages
11830                    (p_encoded        => FND_API.G_TRUE,
11831                     p_msg_index      => 1,
11832                     p_msg_count      => l_msg_count,
11833                     p_msg_data       => l_msg_data,
11834                     p_data           => l_data,
11835                     p_msg_index_out  => l_msg_index_out);
11836                     x_msg_data := l_data;
11837                 END IF;
11838                 raise FND_API.G_EXC_ERROR;
11839              END IF;
11840 */  --check venkatesh mail dated 22 jan 04
11841 
11842 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
11843             i := NVL( l_plannable_tasks_tbl.last, 0 ) + 1;
11844 
11845             l_plannable_tasks_tbl(i).impacted_task_id   := l_task_id;
11846             l_plannable_tasks_tbl(i).action             := 'REPARENT';
11847             l_plannable_tasks_tbl(i).old_parent_task_id := l_old_parent_task_id;
11848             l_plannable_tasks_tbl(i).New_parent_task_id := l_parent_task_id;
11849             l_plannable_tasks_tbl(i).top_task_id        := l_top_task_id;
11850 
11851 
11852             PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
11853                     p_project_id         => p_project_id
11854                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
11855                   , x_return_status      => l_return_status
11856                   , x_msg_data           => l_msg_data
11857                   , x_msg_count          => l_msg_count
11858                 );
11859 
11860              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11861                 x_msg_count := FND_MSG_PUB.count_msg;
11862                 IF x_msg_count = 1 then
11863                    pa_interface_utils_pub.get_messages
11864                    (p_encoded        => FND_API.G_TRUE,
11865                     p_msg_index      => 1,
11866                     p_msg_count      => l_msg_count,
11867                     p_msg_data       => l_msg_data,
11868                     p_data           => l_data,
11869                     p_msg_index_out  => l_msg_index_out);
11870                     x_msg_data := l_data;
11871                 END IF;
11872              raise FND_API.G_EXC_ERROR;
11873              END IF;
11874 bug 3010538 */
11875 
11876           --End Bug 2947492 (outdent )
11877 
11878       END IF;
11879   END IF;
11880   CLOSE cur_struc_type;
11881 
11882 -- Added for date rollup; workplan only
11883 
11884   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
11885 
11886     -- Added for FP_M changes Bug 3305199 : Bhumesh
11887     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
11888 
11889        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
11890           p_structure_version_id => P_Structure_Version_ID
11891      ,p_dirty_flag           => 'Y'             --bug 3902282
11892      ,x_return_status        => x_return_status
11893      ,x_msg_count            => x_msg_count
11894      ,x_msg_data             => x_msg_data
11895        );
11896 
11897        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
11898          x_msg_count := FND_MSG_PUB.count_msg;
11899          If x_msg_count = 1 then
11900            pa_interface_utils_pub.get_messages
11901            (p_encoded        => FND_API.G_TRUE,
11902             p_msg_index      => 1,
11903             p_msg_count      => l_msg_count,
11904             p_msg_data       => l_msg_data,
11905             p_data           => l_data,
11906             p_msg_index_out  => l_msg_index_out);
11907             x_msg_data := l_data;
11908          End If;
11909          raise FND_API.G_EXC_ERROR;
11910        End If;
11911     End If;
11912     -- End of FP_M changes
11913 
11914     l_tasks_ver_ids.extend;
11915     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
11916 
11917 --added for task status rollup
11918     IF (l_rollup_task_id IS NULL) THEN
11919       l_rollup_task_id := p_task_version_id;
11920     END IF;
11921 
11922     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
11923                        p_commit => FND_API.G_FALSE,
11924                        p_element_versions => l_tasks_ver_ids,
11925                        x_return_status => l_return_status,
11926                        x_msg_count => l_msg_count,
11927                        x_msg_data => l_msg_data);
11928 
11929      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
11930        x_msg_count := FND_MSG_PUB.count_msg;
11931        if x_msg_count = 1 then
11932          pa_interface_utils_pub.get_messages
11933          (p_encoded        => FND_API.G_TRUE,
11934           p_msg_index      => 1,
11935           p_msg_count      => l_msg_count,
11936           p_msg_data       => l_msg_data,
11937           p_data           => l_data,
11938           p_msg_index_out  => l_msg_index_out);
11939           x_msg_data := l_data;
11940        end if;
11941        raise FND_API.G_EXC_ERROR;
11942      end if;
11943 
11944 --if versioning is off, rollup.
11945      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
11946        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
11947                   p_structure_version_id => p_structure_version_id
11948                  ,p_element_version_id => l_rollup_task_id
11949                  ,x_return_status => l_return_status
11950                  ,x_msg_count => l_msg_count
11951                  ,x_msg_data => l_msg_data
11952        );
11953 
11954        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
11955          x_msg_count := FND_MSG_PUB.count_msg;
11956          if x_msg_count = 1 then
11957            pa_interface_utils_pub.get_messages
11958            (p_encoded        => FND_API.G_TRUE,
11959             p_msg_index      => 1,
11960             p_msg_count      => l_msg_count,
11961             p_msg_data       => l_msg_data,
11962             p_data           => l_data,
11963             p_msg_index_out  => l_msg_index_out);
11964             x_msg_data := l_data;
11965          end if;
11966          raise FND_API.G_EXC_ERROR;
11967        end if;
11968      END IF;
11969 
11970   END IF;
11971 
11972 --bug 3010538  ( outdent )
11973 --bug 3053281 --set flag if not (manual and workplan only)
11974 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
11975 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
11976 /*
11977 IF (l_shared = 'N') AND
11978    (l_wp_type = 'Y') AND
11979    (l_weighting_basis_Code = 'MANUAL') THEN
11980   --do not set the flag to 'Y'
11981   NULL;
11982 ELSE
11983 */
11984   --3035902: process update flag changes
11985   OPEN get_task_type_id(src_proj_element_id);
11986   FETCH get_task_type_id INTO l_task_type_id;
11987   CLOSE get_task_type_id;
11988 
11989   --set update process flag if necessary;
11990   IF (l_wp_process_flag = 'N') THEN
11991     --may need to update process flag
11992     IF ((l_shared = 'N') AND
11993         (l_wp_type = 'Y') AND
11994         (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
11995         (l_weighting_basis_code <> 'MANUAL'))
11996     THEN
11997       --split and workplan; only update if progressable task added
11998       l_wp_process_flag := 'Y';
11999     ELSIF ((l_shared = 'N') AND
12000            (l_wp_type = 'N')) THEN
12001       --split and financial; update
12002       l_wp_process_flag := 'Y';
12003     ELSIF (l_shared = 'Y') THEN
12004       l_wp_process_flag := 'Y';
12005     END IF;
12006   END IF;
12007 
12008   --Bug No 3450684 SMukka Commented if condition
12009   --IF (l_wp_process_flag = 'Y') THEN
12010    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
12011    (
12012       p_calling_context       => 'SELF_SERVICE'
12013      ,p_project_id            => p_project_id
12014      ,p_structure_version_id  => p_structure_version_id
12015      ,p_update_wbs_flag       => 'Y'
12016      ,x_return_status         => l_return_status
12017      ,x_msg_count             => l_msg_count
12018      ,x_msg_data              => l_msg_data);
12019 
12020    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12021      x_msg_count := FND_MSG_PUB.count_msg;
12022      if x_msg_count = 1 then
12023        pa_interface_utils_pub.get_messages
12024        (p_encoded        => FND_API.G_TRUE,
12025         p_msg_index      => 1,
12026         p_msg_count      => l_msg_count,
12027         p_msg_data       => l_msg_data,
12028         p_data           => l_data,
12029         p_msg_index_out  => l_msg_index_out);
12030         x_msg_data := l_data;
12031      end if;
12032      raise FND_API.G_EXC_ERROR;
12033    end if;
12034 --end if;
12035   --3035902: end process update flag changes
12036 
12037   --ideally the following calls should have been cached. but due to time constraints
12038   --we need to write the code this way in multiple places.
12039   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
12040    THEN
12041        IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and  l_published_version = 'N' ) THEN
12042 
12043        --Outdent
12044        pa_fp_refresh_elements_pub.set_process_flag_proj(
12045              p_project_id               => p_project_id
12046             ,p_request_id               => null
12047             ,p_process_code             => null
12048             ,p_refresh_required_flag    => 'Y'
12049             ,x_return_status            => l_return_status
12050             ,x_msg_count                => l_msg_count
12051             ,x_msg_data                 => l_msg_data );
12052 
12053         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12054            x_msg_count := FND_MSG_PUB.count_msg;
12055            if x_msg_count = 1 then
12056              pa_interface_utils_pub.get_messages
12057             (p_encoded        => FND_API.G_TRUE,
12058              p_msg_index      => 1,
12059              p_msg_count      => l_msg_count,
12060              p_msg_data       => l_msg_data,
12061              p_data           => l_data,
12062              p_msg_index_out  => l_msg_index_out);
12063              x_msg_data := l_data;
12064            end if;
12065            raise FND_API.G_EXC_ERROR;
12066         end if;
12067       END IF;
12068    END IF;
12069 
12070 --End bug 3010538  ( outdent )
12071 
12072 --bug 3301192
12073    --check the task is a lowest task again and check whehter its no more a lowest task.
12074   l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
12075 
12076   IF l_lowest_task_flag1 = 'Y' AND
12077      l_lowest_task_flag2 = 'N'
12078   THEN
12079      IF l_wp_type = 'Y'
12080      THEN
12081      --now call call delete planning for task version id.
12082        l_task_ver_ids2.extend(1); /* Venky */
12083        l_task_ver_ids2(1) := p_task_version_id;
12084        /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
12085        /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
12086        DECLARE
12087            --p1 bug 3888432
12088            l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12089            CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
12090              SELECT resource_assignment_id
12091                FROM pa_resource_assignments
12092               WHERE wbs_element_Version_id = c_task_ver_id
12093                 AND ta_display_flag = 'N';
12094            l_assign_id    NUMBER := NULL;
12095        BEGIN
12096            OPEN get_assignment_id(p_task_version_id);
12097            FETCH get_assignment_id into l_assign_id;
12098            CLOSE get_assignment_id;
12099 
12100            IF (l_assign_id IS NOT NULL) THEN
12101              l_assign_ids.extend(1);
12102              l_assign_ids(1) := l_assign_id;
12103              pa_fp_planning_transaction_pub.delete_planning_transactions
12104              (
12105              p_context                      => 'WORKPLAN'
12106             ,p_task_or_res                  => 'ASSIGNMENT'
12107 --          ,p_element_version_id_tbl       => l_task_ver_ids2
12108 --          ,p_maintain_reporting_lines     => 'Y'
12109             ,p_resource_assignment_tbl => l_assign_ids
12110             ,x_return_status                => l_return_status
12111             ,x_msg_count                    => l_msg_count
12112             ,x_msg_data                     => l_msg_data
12113              );
12114            END IF;
12115        EXCEPTION
12116            WHEN OTHERS then
12117                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12118                                         p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12119                                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
12120            RAISE FND_API.G_EXC_ERROR;
12121        END;
12122      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12123        x_msg_count := FND_MSG_PUB.count_msg;
12124        if x_msg_count = 1 then
12125          pa_interface_utils_pub.get_messages
12126          (p_encoded        => FND_API.G_TRUE,
12127           p_msg_index      => 1,
12128           p_msg_count      => l_msg_count,
12129           p_msg_data       => l_msg_data,
12130           p_data           => l_data,
12131           p_msg_index_out  => l_msg_index_out);
12132           x_msg_data := l_data;
12133        end if;
12134        raise FND_API.G_EXC_ERROR;
12135      end if;
12136      END IF;  --<<l_wp_type>>
12137   END IF; --<<l_lowest_task_flag1>>
12138 --bug 3301192
12139 
12140   --bug 4149392
12141   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
12142   --end bug 4149392
12143 
12144   x_return_status := FND_API.G_RET_STS_SUCCESS;
12145 
12146   IF (p_commit = FND_API.G_TRUE) THEN
12147     COMMIT;
12148   END IF;
12149 
12150   IF (p_debug_mode = 'Y') THEN
12151     pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK END');
12152   END IF;
12153 
12154 EXCEPTION
12155   when FND_API.G_EXC_ERROR then
12156     if p_commit = FND_API.G_TRUE then
12157       rollback to OUTDENT_task_version_bulk;
12158     end if;
12159     x_return_status := FND_API.G_RET_STS_ERROR;
12160   when FND_API.G_EXC_UNEXPECTED_ERROR then
12161     if p_commit = FND_API.G_TRUE then
12162       rollback to OUTDENT_task_version_bulk;
12163     end if;
12164     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12165     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12166                             p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12167                             p_error_text     => SUBSTRB(SQLERRM,1,240));
12168   when OTHERS then
12169     if p_commit = FND_API.G_TRUE then
12170       rollback to OUTDENT_task_version_bulk;
12171     end if;
12172     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12173     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12174                             p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12175                             p_error_text     => SUBSTRB(SQLERRM,1,240));
12176     raise;
12177 
12178 END OUTDENT_Task_Version_Bulk;
12179 
12180 /*
12181    This API is called from Multiple Tasks Delete Page.
12182    The API expects the task version id in this fashion
12183    1. If both parent and child below it is selected for
12184       deletetion the only parent task id should be pass
12185       -ed
12186 
12187    2. If top task is selected and child below it is sel
12188       --ected, API expects only top task id as input
12189 
12190    3. If only child is selected then API expexts only
12191       child task  id.
12192 
12193 
12194  Note :
12195    Since the self service page expects the error message
12196    to be displayed in following order :
12197 
12198    Task name (task number) : Proper Error Message ..
12199 
12200    i.e Task name/number  and corresponding error
12201    message to that task version. in one line
12202 
12203    Both Task Name /Number and error message set as
12204    token for message PA_PS_TASK_NAME_NUM_ERR
12205 
12206 */
12207 
12208 PROCEDURE DELETE_TASK_VERSION_IN_BULK
12209 (p_task_version_id_tbl         IN  SYSTEM.PA_NUM_TBL_TYPE
12210 ,p_record_version_number_tbl   IN  SYSTEM.PA_NUM_TBL_TYPE
12211 ,p_structure_version_id        IN  NUMBER
12212 ,p_structure_type              IN  VARCHAR2        :='WORKPLAN'   -- 3305199
12213 ,x_return_status               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12214 ,x_msg_count                   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12215 ,x_msg_data                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12216 
12217 )
12218 
12219 IS
12220 l_debug_mode        VARCHAR2(1) ;
12221 l_element_number    pa_proj_elements.element_number%TYPE ;
12222 l_element_name      pa_proj_elements.name%TYPE ;
12223 l_msg_count         NUMBER := 0;
12224 l_msg_data          VARCHAR2(2000);
12225 l_return_status     VARCHAR2(1);
12226 l_dummy_app_name    VARCHAR2(30);
12227 l_enc_msg_data      VARCHAR2(2000);
12228 l_msg_name          VARCHAR2(30);
12229 l_msg_index_out     NUMBER ;
12230 
12231 TYPE l_error_msg_name_tbl_type IS TABLE OF
12232           fnd_new_messages.message_text%TYPE INDEX BY BINARY_INTEGER ;
12233 TYPE l_element_name_tbl_type IS TABLE OF
12234           pa_proj_elements.name%TYPE INDEX BY BINARY_INTEGER ;
12235 TYPE l_element_number_tbl_type IS TABLE OF
12236           pa_proj_elements.element_number%TYPE INDEX BY BINARY_INTEGER ;
12237 
12238 l_error_msg_name_tbl l_error_msg_name_tbl_type ;
12239 l_element_name_tbl   l_element_name_tbl_type ;
12240 l_element_number_tbl l_element_number_tbl_type ;
12241 j                  NUMBER ;
12242 
12243 
12244 BEGIN
12245 
12246     --hsiu: 3604086
12247     x_return_status := FND_API.G_RET_STS_SUCCESS;
12248 
12249     l_msg_count := 0;
12250     l_return_status := FND_API.G_RET_STS_SUCCESS;
12251     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N') ; -- Bug # 4605505.
12252     j := 0 ;
12253 
12254 --hsiu: commenting out due to p1 issue.
12255 --      savepoint should be issued only when p_commit
12256 --      is true, which is a missing parameter
12257 --    savepoint delete_bulk;
12258 
12259     FOR i in reverse p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
12260 
12261          IF l_debug_mode = 'Y' THEN
12262               pa_debug.debug('task id is :'||p_task_version_id_tbl(i));
12263               pa_debug.debug('record version id is :'||p_record_version_number_tbl(i));
12264          END IF ;
12265 
12266          -- initialization is required for every loop
12267          l_return_status := FND_API.G_RET_STS_SUCCESS ;
12268          l_msg_count := 0 ;
12269          l_msg_data := null ;
12270 
12271 
12272 
12273          -- call delete_task_version API
12274          PA_TASK_PUB1.Delete_Task_Version(p_task_version_id   =>   p_task_version_id_tbl(i)
12275                                    ,p_record_version_number       =>   p_record_version_number_tbl(i)
12276                    ,p_structure_type              => p_structure_type
12277                                    ,x_return_status               =>   l_return_status
12278                                    ,x_msg_count                   =>   l_msg_count
12279                                    ,x_msg_data                    =>   l_msg_data
12280                                    ,p_structure_version_id        =>   p_structure_version_id
12281                                    );
12282 
12283          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12284 
12285               j := j+1 ;
12286 
12287               SELECT e.element_number
12288                     ,e.name
12289                 INTO l_element_number
12290                     ,l_element_name
12291                 FROM pa_proj_elements  e
12292                     ,pa_proj_element_versions v
12293                WHERE v.element_version_id = p_task_version_id_tbl(i)
12294                  AND e.proj_element_id = v.proj_element_id ;
12295 
12296                PA_INTERFACE_UTILS_PUB.get_messages
12297                        (p_encoded        => FND_API.G_FALSE,     -- Get the encoded message.
12298                         p_msg_index      => 1,                   -- Get the message at index 1.
12299                         p_data           => l_enc_msg_data,
12300                         p_msg_index_out  => l_msg_index_out);
12301 
12302 
12303                l_error_msg_name_tbl(j) := l_enc_msg_data ;
12304                l_element_name_tbl(j)   := l_element_name ;
12305                l_element_number_tbl(j) := l_element_number ;
12306 
12307 
12308          END IF ;
12309 
12310     END LOOP ;
12311 
12312     IF j > 0 THEN
12313 
12314          --bug: 3641049
12315          --comment out rollback because if there is an error, it will be rollback twice causing an exception
12316          --rollback to delete_bulk;
12317 
12318          FND_MSG_PUB.initialize;
12319 
12320          FOR k in reverse l_element_name_tbl.FIRST..l_element_name_tbl.LAST  LOOP
12321 
12322               PA_UTILS.ADD_MESSAGE
12323                    (p_app_short_name => 'PA',
12324                     p_msg_name      => 'PA_PS_TASK_NAME_NUM_ERR',
12325                     p_token1        => 'TASK_NAME',
12326                     p_value1        =>  l_element_name_tbl(k),
12327                     p_token2        => 'TASK_NUMBER',
12328                     p_value2        =>  l_element_number_tbl(k),
12329                     p_token3        => 'MESSAGE',
12330                     p_value3        =>  l_error_msg_name_tbl(k)
12331                     );
12332 
12333 
12334          END LOOP ;
12335 
12336     END IF ;
12337 
12338     x_msg_count := FND_MSG_PUB.count_msg ;
12339 
12340     IF x_msg_count > 0 THEN
12341        x_return_status := 'E' ;
12342 --hsiu: commenting out due to p1 issue.
12343 --      savepoint should be issued only when p_commit
12344 --      is true, which is a missing parameter
12345 --       rollback to delete_bulk;
12346     END IF ;
12347 
12348 
12349 
12350     IF l_debug_mode = 'Y' THEN
12351        pa_debug.reset_curr_function;
12352     END IF ;
12353 
12354 EXCEPTION
12355 WHEN NO_DATA_FOUND THEN
12356      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12357      x_msg_count     := 1;
12358      x_msg_data      := SQLERRM;
12359 --hsiu: commenting out due to p1 issue.
12360 --      savepoint should be issued only when p_commit
12361 --      is true, which is a missing parameter
12362 --     rollback to delete_bulk;
12363      RETURN ;
12364 WHEN OTHERS THEN
12365      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12366      x_msg_count     := 1;
12367      x_msg_data      := SQLERRM;
12368 --hsiu: commenting out due to p1 issue.
12369 --      savepoint should be issued only when p_commit
12370 --      is true, which is a missing parameter
12371 --     rollback to delete_bulk;
12372      FND_MSG_PUB.add_exc_msg
12373              ( p_pkg_name       => 'PA_TASK_PUB1'
12374               ,p_procedure_name => 'DELETE_TASK_VERSION_IN_BULK' );
12375      IF l_debug_mode = 'Y' THEN
12376              pa_debug.write('DELETE_TASK_VERSION_IN_BULK' || G_PKG_NAME,SQLERRM,4);
12377              pa_debug.write('DELETE_TASK_VERSION_IN_BULK' || G_PKG_NAME,pa_debug.G_Err_Stack,4);
12378              pa_debug.reset_curr_function;
12379      END IF;
12380      RAISE ;
12381 
12382 END DELETE_TASK_VERSION_IN_BULK ;
12383 
12384 --margaret bug 3024607 add update task association
12385 --when relationship ID is NULL both p_task_id and (either p_associated_project_id or
12386 --p_associated_task_id) must be set - a new association is added.
12387 
12388 --when  relationship ID is not NULL and either p_associated_project_id or
12389 --p_associated_task_id are set, we just update the existing relationship
12390 -- with the new "TO" object and type. p_task_id must also be NOT NULL in this case
12391 
12392 --when relationship ID is not NULL and both p_associated_project_id and
12393 --p_associated_task_id are NULL, we delete this particular association.
12394 
12395 --This procedure was designed specifically to fit the flow of Self_Service Task Details page
12396 --(or any page that uses TaskAssociationsVO).
12397  PROCEDURE Update_Task_Association (
12398  p_api_version                    IN    NUMBER   :=1.0,
12399  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
12400  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
12401  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
12402  p_validation_level               IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
12403  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
12404  p_debug_mode                     IN    VARCHAR2 :='N',
12405  p_max_msg_count                  IN    NUMBER   :=NULL,
12406  p_associated_project_id          IN    NUMBER  := NULL,
12407  p_associated_task_id             IN    NUMBER  := NULL,
12408  p_associated_project_name        IN    VARCHAR2 :=NULL,
12409  p_associated_task_name           IN    VARCHAR2 :=NULL,
12410  p_task_id                        IN    NUMBER ,
12411  p_relationship_type              IN    VARCHAR2 :='A',
12412  p_relationship_id        IN    NUMBER  := NULL,
12413  p_record_version_number          IN    NUMBER  := NULL,
12414  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12415  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
12416  x_msg_data                       OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12417  x_relationship_id                OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
12418 ) IS
12419 
12420     l_return_status                 VARCHAR2(1);
12421     l_msg_count                     NUMBER;
12422     l_msg_data                      VARCHAR2(250);
12423     l_id_to                         NUMBER;
12424     l_type_to                       PA_OBJECT_RELATIONSHIPS.object_type_to%TYPE;
12425 
12426    l_data                          VARCHAR2(250);
12427    l_msg_index_out                 NUMBER;
12428    l_error_msg_code                VARCHAR2(30);
12429 
12430 BEGIN
12431 
12432  x_return_status := FND_API.G_RET_STS_SUCCESS;
12433 
12434   IF (p_debug_mode = 'Y') THEN
12435     pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_ASSOCIATION START');
12436   END IF;
12437 
12438   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12439       FND_MSG_PUB.initialize;
12440   END IF;
12441 
12442   IF (p_commit = FND_API.G_TRUE) THEN
12443       savepoint update_task_association;
12444   END IF;
12445 
12446  l_type_to := 'PA_PROJECTS';
12447  l_id_to   := p_associated_project_id;
12448 
12449  IF p_associated_task_id is not NULL THEN
12450      l_type_to := 'PA_TASKS';
12451      l_id_to   := p_associated_task_id;
12452  END IF;
12453 
12454  -- when creating a new relationship check both ids and object types
12455  IF p_relationship_id is NULL THEN
12456     IF p_task_id is NULL or l_id_to is NULL THEN
12457        x_return_status := FND_API.G_RET_STS_ERROR;
12458        l_error_msg_code:= 'PA_PS_TASK_NUMBER_NULL';
12459     ELSE
12460        IF p_task_id = l_id_to and l_type_to =  'PA_TASKS' then
12461           x_return_status := FND_API.G_RET_STS_ERROR;
12462           l_error_msg_code:= 'PA_TASK_ID_INVALID';
12463        END IF;
12464     END IF;
12465  END IF;
12466 
12467  -- when updating an existing relationship check both ids and object types
12468  IF p_relationship_id is not null and l_id_to is not null  THEN
12469     IF p_task_id = l_id_to and l_type_to =  'PA_TASKS' then
12470       x_return_status := FND_API.G_RET_STS_ERROR;
12471       l_error_msg_code:= 'PA_TASK_ID_INVALID';
12472     END IF;
12473  END IF;
12474 
12475   IF  x_return_status = FND_API.G_RET_STS_ERROR THEN
12476               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12477                                    p_msg_name       => l_error_msg_code);
12478   END IF;
12479 
12480  -- Create a new association row
12481  IF p_relationship_id is NULL and x_return_status = FND_API.G_RET_STS_SUCCESS THEN
12482      PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
12483        p_user_id => FND_GLOBAL.USER_ID
12484       ,p_object_type_from => 'PA_TASKS'
12485       ,p_object_id_from1 => p_task_id
12486       ,p_object_id_from2 => NULL
12487       ,p_object_id_from3 => NULL
12488       ,p_object_id_from4 => NULL
12489       ,p_object_id_from5 => NULL
12490       ,p_object_type_to => l_type_to
12491       ,p_object_id_to1 => l_id_to
12492       ,p_object_id_to2 => NULL
12493       ,p_object_id_to3 => NULL
12494       ,p_object_id_to4 => NULL
12495      ,p_object_id_to5 => NULL
12496       ,p_relationship_type => p_relationship_type
12497       ,p_relationship_subtype => NULL
12498      ,p_lag_day => NULL
12499       ,p_imported_lag => NULL
12500       ,p_priority => NULL
12501       ,p_pm_product_code => NULL
12502       ,p_comments => NULL
12503       ,p_status_code => NULL
12504      ,x_object_relationship_id => x_relationship_id
12505      ,x_return_status => x_return_status
12506         );
12507 
12508   END IF;
12509 
12510    IF p_relationship_id is not null and l_id_to is not null  THEN
12511       UPDATE PA_OBJECT_RELATIONSHIPS
12512       SET object_id_to1   = l_id_to
12513           ,object_type_to = l_type_to
12514       WHERE object_relationship_id = p_relationship_id;
12515       --WHERE object_id_from1 = p_task_id
12516       --AND   object_type_from = 'PA_TASKS'
12517       --AND   relationship_type = 'A';
12518    END IF;
12519 
12520    IF p_relationship_id is not null and l_id_to is  null  THEN
12521        Delete_Association(p_relationship_id,p_record_version_number, x_return_status);
12522    END IF;
12523 
12524 
12525     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12526       x_msg_count := FND_MSG_PUB.count_msg;
12527       IF x_msg_count = 1 then
12528         pa_interface_utils_pub.get_messages
12529          (p_encoded        => FND_API.G_TRUE,
12530           p_msg_index      => 1,
12531           p_msg_count      => x_msg_count,
12532           p_msg_data       => x_msg_data,
12533           p_data           => l_data,
12534           p_msg_index_out  => l_msg_index_out);
12535         x_msg_data := l_data;
12536       END IF;
12537       raise FND_API.G_EXC_ERROR;
12538     ELSE
12539        IF (p_commit = FND_API.G_TRUE) THEN
12540           COMMIT;
12541        END IF;
12542    END IF;
12543 
12544   IF (p_debug_mode = 'Y') THEN
12545     pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_ASSOCIATION END');
12546   END IF;
12547 
12548 
12549  EXCEPTION
12550     WHEN FND_API.G_EXC_ERROR THEN
12551       IF (p_commit = FND_API.G_TRUE) THEN
12552         ROLLBACK to update_task_association;
12553       END IF;
12554       x_msg_count := FND_MSG_PUB.count_msg;
12555       x_return_status := FND_API.G_RET_STS_ERROR;
12556     WHEN OTHERS THEN
12557       IF (p_commit = FND_API.G_TRUE) THEN
12558         ROLLBACK to update_task_association;
12559       END IF;
12560       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12561       x_msg_count := FND_MSG_PUB.count_msg;
12562       --put message
12563       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12564                               p_procedure_name => 'update_task_association',
12565                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12566       RAISE;
12567 
12568 END Update_Task_Association;
12569 
12570 
12571 
12572 --margaret bug 3024607 delete task association
12573 --if p_relationship_id is NOT NULL then only this ONE relationship is deleted
12574 --if p_relationship_id is NULL, then ALL associations are deleted.
12575  PROCEDURE Delete_Task_Associations(
12576  p_api_version                    IN    NUMBER   :=1.0,
12577  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
12578  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
12579  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
12580  p_validation_level               IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
12581  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
12582  p_debug_mode                     IN    VARCHAR2 :='N',
12583  p_max_msg_count                  IN    NUMBER   :=NULL,
12584  p_relationship_type              IN    VARCHAR2 :='A',
12585  p_relationship_id                IN    NUMBER  := NULL,
12586  p_task_id                        IN    NUMBER  := NULL,
12587  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12588  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
12589  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12590 ) IS
12591 
12592 
12593   CURSOR task_associations( p_task_id NUMBER )
12594    IS
12595      SELECT object_relationship_id
12596      FROM PA_OBJECT_RELATIONSHIPS
12597      WHERE relationship_type  = p_relationship_type
12598      AND (  (object_type_from = 'PA_TASKS' AND object_id_from1 = p_task_id)
12599           OR (object_type_to  = 'PA_TASKS' AND object_id_to1   = p_task_id));
12600 
12601    l_data                          VARCHAR2(250);
12602    l_msg_index_out                 NUMBER;
12603 
12604 BEGIN
12605  x_return_status := FND_API.G_RET_STS_SUCCESS;
12606 
12607   IF (p_debug_mode = 'Y') THEN
12608     pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_ASSOCIATION START');
12609   END IF;
12610 
12611   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12612       FND_MSG_PUB.initialize;
12613   END IF;
12614 
12615   IF (p_commit = FND_API.G_TRUE) THEN
12616       savepoint delete_task_association;
12617   END IF;
12618 
12619 --Delete just the requested relationship row
12620    IF p_relationship_id is not null THEN
12621        Delete_Association(p_relationship_id,null,x_return_status);
12622    ELSE
12623       IF p_task_id is not null THEN
12624          FOR task_associations_rec IN task_associations(p_task_id )  LOOP
12625             Delete_Association(task_associations_rec.object_relationship_id,null, x_return_status);
12626             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12627               EXIT;
12628             END IF;
12629          END LOOP;
12630       END IF;
12631    END IF;
12632 
12633   IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12634       x_msg_count := FND_MSG_PUB.count_msg;
12635       IF x_msg_count = 1 then
12636         pa_interface_utils_pub.get_messages
12637          (p_encoded        => FND_API.G_TRUE,
12638           p_msg_index      => 1,
12639           p_msg_count      => x_msg_count,
12640           p_msg_data       => x_msg_data,
12641           p_data           => l_data,
12642           p_msg_index_out  => l_msg_index_out);
12643         x_msg_data := l_data;
12644       END IF;
12645       raise FND_API.G_EXC_ERROR;
12646   ELSE
12647        IF (p_commit = FND_API.G_TRUE) THEN
12648           COMMIT;
12649        END IF;
12650   END IF;
12651 
12652 
12653  IF (p_debug_mode = 'Y') THEN
12654     pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_ASSOCIATIONS END');
12655   END IF;
12656 
12657 
12658  EXCEPTION
12659     WHEN FND_API.G_EXC_ERROR THEN
12660       IF (p_commit = FND_API.G_TRUE) THEN
12661         ROLLBACK to delete_task_association;
12662       END IF;
12663       x_msg_count := FND_MSG_PUB.count_msg;
12664       x_return_status := FND_API.G_RET_STS_ERROR;
12665     WHEN OTHERS THEN
12666       IF (p_commit = FND_API.G_TRUE) THEN
12667         ROLLBACK to delete_task_association;
12668       END IF;
12669       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12670       x_msg_count := FND_MSG_PUB.count_msg;
12671       --put message
12672       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12673                               p_procedure_name => 'delete_all_task_associations',
12674                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12675       RAISE;
12676 
12677 END Delete_Task_Associations;
12678 
12679 
12680 --Delete a single association - relationship_id required
12681  PROCEDURE Delete_Association(
12682  p_relationship_id                IN    NUMBER,
12683  p_record_version_number          IN    NUMBER  := NULL,
12684  x_return_status                  OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12685 ) IS
12686 
12687 BEGIN
12688 
12689    IF p_relationship_id is not null THEN
12690       PA_OBJECT_RELATIONSHIPS_PKG.DELETE_ROW(
12691        p_object_relationship_id => p_relationship_id
12692       ,p_object_type_from => NULL
12693       ,p_object_id_from1 => NULL
12694       ,p_object_id_from2 => NULL
12695       ,p_object_id_from3 => NULL
12696       ,p_object_id_from4 => NULL
12697       ,p_object_id_from5 => NULL
12698       ,p_object_type_to => NULL
12699       ,p_object_id_to1 => NULL
12700       ,p_object_id_to2 => NULL
12701       ,p_object_id_to3 => NULL
12702       ,p_object_id_to4 => NULL
12703       ,p_object_id_to5 => NULL
12704       ,p_record_version_number =>NULL
12705       ,p_pm_product_code => NULL
12706       ,x_return_status => x_return_status
12707     );
12708   END IF;
12709 
12710 
12711 EXCEPTION
12712     WHEN OTHERS THEN
12713       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12714       --x_msg_count := FND_MSG_PUB.count_msg;
12715       --put message
12716       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12717                               p_procedure_name => 'delete_association',
12718                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12719 
12720       RAISE;
12721 
12722 END Delete_Association;
12723 
12724 
12725 --margaret check if task has associations, returns Y/N
12726 FUNCTION has_Associations(
12727  p_task_id                   IN    NUMBER
12728  ,p_relationship_type         IN    VARCHAR2 :='A'
12729 )return VARCHAR2
12730 IS
12731   cursor relationship_exists(p_task_id NUMBER) IS
12732     select '1'
12733       from pa_object_relationships
12734      WHERE relationship_type  = p_relationship_type
12735      AND (  (object_type_from = 'PA_TASKS' AND object_id_from1 = p_task_id
12736              AND object_type_to in ( 'PA_STRUCTURES', 'PA_TASKS'))   --bug 4091647
12737           OR (object_type_to  = 'PA_TASKS' AND object_id_to1   = p_task_id
12738              AND object_type_from = 'PA_TASKS')); --bug 4091647
12739    l_dummy_char        VARCHAR2(1);
12740 
12741   BEGIN
12742    OPEN relationship_exists(p_task_id);
12743    FETCH relationship_exists into l_dummy_char;
12744    IF relationship_exists%NOTFOUND THEN
12745       close  relationship_exists; -- 5349975
12746       return 'N';
12747    ELSE
12748       close  relationship_exists; -- 5349975
12749       return 'Y';
12750    END IF;
12751 END has_Associations;
12752 
12753 
12754 --margaret check if project is associated to tasks, returns Y/N
12755 FUNCTION proj_has_task_associations(
12756  p_project_id                 IN    NUMBER
12757  ,p_relationship_type         IN    VARCHAR2 :='A'
12758 )return VARCHAR2
12759 IS
12760   cursor relationship_exists(p_project_id NUMBER) IS
12761     select '1'
12762       from pa_object_relationships
12763      WHERE relationship_type  = p_relationship_type
12764      AND  object_type_from = 'PA_TASKS'
12765      AND  object_type_to   = 'PA_PROJECTS' AND object_id_to1 = p_project_id;
12766 
12767    l_dummy_char        VARCHAR2(1);
12768 
12769   BEGIN
12770    OPEN relationship_exists(p_project_id);
12771    FETCH relationship_exists into l_dummy_char;
12772    IF relationship_exists%NOTFOUND THEN
12773       close  relationship_exists; -- 5349975
12774       return 'N';
12775    ELSE
12776       close  relationship_exists; -- 5349975
12777       return 'Y';
12778    END IF;
12779 END proj_has_task_associations;
12780 
12781 
12782 PROCEDURE Check_Task_Has_Association(
12783   p_task_id                  IN    NUMBER
12784  ,p_relationship_type        VARCHAR2 :='A'
12785  ,x_return_status            OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12786  ,x_msg_count                OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
12787  ,x_msg_data                 OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12788 
12789 )IS
12790  l_ret_code  VARCHAR2(1);
12791 BEGIN
12792    x_return_status := FND_API.G_RET_STS_SUCCESS;
12793    l_ret_code := has_Associations(p_task_id,p_relationship_type);
12794    IF l_ret_code = 'Y' THEN
12795          x_return_status := FND_API.G_RET_STS_ERROR;
12796          /*PA_UTILS.ADD_MESSAGE
12797                      (p_app_short_name => 'PA',
12798                       p_msg_name     => 'PA_TASK_HAS_ASSOCIATIONS');*/  --Bug 3831786 commented
12799          x_msg_data:='PA_TASK_HAS_ASSOCIATIONS'; --Bug No 3491544 Smukka Apr 07 2004
12800    END IF;
12801 END Check_Task_Has_Association;
12802 
12803 
12804 PROCEDURE Check_Proj_Associated_To_Tasks(
12805   p_project_id               IN    NUMBER
12806  ,p_relationship_type        VARCHAR2 :='A'
12807  ,x_return_status            OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12808  ,x_msg_count                OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
12809  ,x_msg_data                 OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12810 
12811 )IS
12812  l_ret_code  VARCHAR2(1);
12813 BEGIN
12814    x_return_status := FND_API.G_RET_STS_SUCCESS;
12815    l_ret_code := proj_has_task_associations(p_project_id,p_relationship_type);
12816    IF l_ret_code = 'Y' THEN
12817          x_return_status := FND_API.G_RET_STS_ERROR;
12818          PA_UTILS.ADD_MESSAGE
12819                      (p_app_short_name => 'PA',
12820                       p_msg_name     => 'PA_PROJECT_HAS_ASSOCIATIONS');
12821 
12822    END IF;
12823 END Check_Proj_Associated_to_Tasks;
12824 
12825 
12826 --margaret bug 3024607 delete project to task associations
12827 --if p_relationship_id is NOT NULL then only this ONE relationship is deleted
12828 --if p_relationship_id is NULL, then ALL associations are deleted.
12829  PROCEDURE Delete_Proj_To_Task_Assoc(
12830  p_api_version                    IN    NUMBER   :=1.0,
12831  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
12832  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
12833  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
12834  p_validation_level               IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
12835  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
12836  p_debug_mode                     IN    VARCHAR2 :='N',
12837  p_max_msg_count                  IN    NUMBER   :=NULL,
12838  p_relationship_type              IN    VARCHAR2 :='A',
12839  p_relationship_id                IN    NUMBER  := NULL,
12840  p_project_id                     IN    NUMBER  := NULL,
12841  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12842  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
12843  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12844 ) IS
12845 
12846 
12847   CURSOR task_associations( p_task_id NUMBER )
12848    IS
12849      SELECT object_relationship_id
12850      FROM PA_OBJECT_RELATIONSHIPS
12851      WHERE relationship_type  = p_relationship_type
12852      AND object_type_from = 'PA_TASKS'
12853      AND object_type_to   = 'PA_PROJECTS' AND object_id_to1   = p_project_id;
12854 
12855    l_data                          VARCHAR2(250);
12856    l_msg_index_out                 NUMBER;
12857 
12858 BEGIN
12859  x_return_status := FND_API.G_RET_STS_SUCCESS;
12860 
12861   IF (p_debug_mode = 'Y') THEN
12862     pa_debug.debug('PA_TASK_PUB1.Delete_Proj_To_Task_Assoc START');
12863   END IF;
12864   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12865       FND_MSG_PUB.initialize;
12866   END IF;
12867 
12868   IF (p_commit = FND_API.G_TRUE) THEN
12869       savepoint delete_prj_to_task_assoc;
12870   END IF;
12871 
12872 --Delete just the requested relationship row
12873    IF p_relationship_id is not null THEN
12874        Delete_Association(p_relationship_id,null,x_return_status);
12875    ELSE
12876       IF p_project_id is not null THEN
12877          FOR task_associations_rec IN task_associations(p_project_id )  LOOP
12878             Delete_Association(task_associations_rec.object_relationship_id,null, x_return_status);
12879             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12880               EXIT;
12881             END IF;
12882          END LOOP;
12883       END IF;
12884    END IF;
12885 
12886   IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12887       x_msg_count := FND_MSG_PUB.count_msg;
12888       IF x_msg_count = 1 then
12889         pa_interface_utils_pub.get_messages
12890          (p_encoded        => FND_API.G_TRUE,
12891           p_msg_index      => 1,
12892           p_msg_count      => x_msg_count,
12893           p_msg_data       => x_msg_data,
12894           p_data           => l_data,
12895           p_msg_index_out  => l_msg_index_out);
12896         x_msg_data := l_data;
12897       raise FND_API.G_EXC_ERROR;
12898     END IF;
12899   ELSE
12900        IF (p_commit = FND_API.G_TRUE) THEN
12901           COMMIT;
12902        END IF;
12903   END IF;
12904 
12905  IF (p_debug_mode = 'Y') THEN
12906     pa_debug.debug('PA_TASK_PUB1.Delete_Proj_To_Task_Assoc END');
12907   END IF;
12908 
12909  EXCEPTION
12910     WHEN FND_API.G_EXC_ERROR THEN
12911       IF (p_commit = FND_API.G_TRUE) THEN
12912         ROLLBACK to delete_prj_to_task_assoc;
12913       END IF;
12914       x_msg_count := FND_MSG_PUB.count_msg;
12915       x_return_status := FND_API.G_RET_STS_ERROR;
12916     WHEN OTHERS THEN
12917       IF (p_commit = FND_API.G_TRUE) THEN
12918         ROLLBACK to delete_prj_to_task_assoc;
12919       END IF;
12920       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12921       --put message
12922       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12923                               p_procedure_name => 'delete_proj_to_task_assoc',
12924                               p_error_text     => SUBSTRB(SQLERRM,1,240));
12925       RAISE;
12926 END Delete_Proj_To_Task_Assoc;
12927 
12928 
12929 PROCEDURE Copy_Task_Associations(
12930  p_api_version                    IN    NUMBER   :=1.0,
12931  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
12932  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
12933  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
12934  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
12935  p_debug_mode                     IN    VARCHAR2 :='N',
12936  p_max_msg_count                  IN    NUMBER   :=NULL,
12937  p_project_id_to                  IN    NUMBER   := NULL,
12938  p_project_id_from                IN    NUMBER   := NULL,
12939  p_relationship_type              IN    VARCHAR2 :='A',
12940  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12941  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
12942  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12943 
12944 )IS
12945   --Bug#3693794 : Performance fix.
12946   --Replaced pa_structures_tasks_v from the from clause
12947   --for cursor task_list. Replaced it with pa_proj_elements
12948   --table which will siffice the current requirement of
12949   --getting source and destination proj_element_id of the task.
12950 
12951   CURSOR task_list( p_project_id_to NUMBER, p_project_id_from NUMBER )
12952    IS
12953      Select  source.proj_element_id old_task_id
12954             ,destination.proj_element_id new_task_id
12955      from pa_proj_elements source          --Bug#3693794
12956          ,pa_proj_elements destination     --Bug#3693794
12957      where source.project_id = p_project_id_from
12958      and source.element_number = destination.element_number
12959      and destination.project_id = p_project_id_to;
12960 
12961    CURSOR task_association( task_id NUMBER, p_relationship_type VARCHAR2 )
12962    IS
12963      Select  object_type_to, object_id_to1
12964      from pa_object_relationships
12965      where object_type_from = 'PA_TASKS'
12966      and object_id_from1    = task_id
12967      and relationship_type  = p_relationship_type;
12968 
12969    l_object_type_to  pa_object_relationships.object_type_to%Type;
12970    l_object_id_to1   pa_object_relationships.object_id_to1%Type;
12971    x_relationship_id pa_object_relationships.object_relationship_id%type;
12972    l_ret_code  VARCHAR2(1);
12973    l_data                          VARCHAR2(250);
12974    l_msg_index_out                 NUMBER;
12975 
12976 BEGIN
12977 
12978   IF (p_debug_mode = 'Y') THEN
12979     pa_debug.debug('PA_TASK_PUB1.Copy_Task_Associations START');
12980   END IF;
12981 
12982    x_return_status := FND_API.G_RET_STS_SUCCESS;
12983 
12984    IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12985       FND_MSG_PUB.initialize;
12986    END IF;
12987 
12988   IF (p_commit = FND_API.G_TRUE) THEN
12989       savepoint copy_task_associations;
12990   END IF;
12991 
12992 
12993   FOR task_list_rec IN task_list(p_project_id_to, p_project_id_from )  LOOP
12994     l_ret_code := has_Associations(task_list_rec.new_task_id,p_relationship_type);
12995     IF l_ret_code <>'Y' THEN
12996      open task_association(task_list_rec.old_task_id,p_relationship_type);
12997      fetch task_association  into l_object_type_to, l_object_id_to1;
12998      IF task_association%found THEN
12999 
13000         PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
13001           p_user_id => FND_GLOBAL.USER_ID
13002              ,p_object_type_from => 'PA_TASKS'
13003              ,p_object_id_from1 => task_list_rec.new_task_id
13004              ,p_object_id_from2 => NULL
13005             ,p_object_id_from3 => NULL
13006             ,p_object_id_from4 => NULL
13007             ,p_object_id_from5 => NULL
13008             ,p_object_type_to => l_object_type_to
13009             ,p_object_id_to1 =>  l_object_id_to1
13010             ,p_object_id_to2 => NULL
13011             ,p_object_id_to3 => NULL
13012             ,p_object_id_to4 => NULL
13013             ,p_object_id_to5 => NULL
13014             ,p_relationship_type => p_relationship_type
13015             ,p_relationship_subtype => NULL
13016             ,p_lag_day => NULL
13017             ,p_imported_lag => NULL
13018             ,p_priority => NULL
13019             ,p_pm_product_code => NULL
13020             ,p_comments => NULL
13021             ,p_status_code => NULL
13022             ,x_object_relationship_id => x_relationship_id
13023             ,x_return_status => x_return_status);
13024 
13025          END IF;
13026          close  task_association;
13027          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13028             EXIT;
13029         END IF;
13030      END IF;
13031    END LOOP;
13032 
13033   IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13034       x_msg_count := FND_MSG_PUB.count_msg;
13035       IF x_msg_count = 1 then
13036         pa_interface_utils_pub.get_messages
13037          (p_encoded        => FND_API.G_TRUE,
13038           p_msg_index      => 1,
13039           p_msg_count      => x_msg_count,
13040           p_msg_data       => x_msg_data,
13041           p_data           => l_data,
13042           p_msg_index_out  => l_msg_index_out);
13043         x_msg_data := l_data;
13044       raise FND_API.G_EXC_ERROR;
13045     END IF;
13046   ELSE
13047        IF (p_commit = FND_API.G_TRUE) THEN
13048           COMMIT;
13049        END IF;
13050   END IF;
13051 
13052  IF (p_debug_mode = 'Y') THEN
13053     pa_debug.debug('PA_TASK_PUB1.Copy_Task_Associations END');
13054   END IF;
13055 
13056  EXCEPTION
13057     WHEN FND_API.G_EXC_ERROR THEN
13058       IF (p_commit = FND_API.G_TRUE) THEN
13059         ROLLBACK to copy_task_associations;
13060       END IF;
13061       x_msg_count := FND_MSG_PUB.count_msg;
13062       x_return_status := FND_API.G_RET_STS_ERROR;
13063     WHEN OTHERS THEN
13064       IF (p_commit = FND_API.G_TRUE) THEN
13065         ROLLBACK to copy_task_associations;
13066       END IF;
13067       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13068       --put message
13069       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13070                               p_procedure_name => 'Copy_Task_Associations',
13071                               p_error_text     => SUBSTRB(SQLERRM,1,240));
13072       RAISE;
13073 END Copy_Task_Associations;
13074 
13075 
13076 --FPM  bug 3301192
13077 --Planning and budget changes.
13078 --This apis is called from CREATE_TASKS api and AMG create_project, update_prohject and add_task apis
13079 PROCEDURE call_add_planning_txns(
13080  p_tasks_ver_ids                  IN    PA_NUM_1000_NUM,
13081  p_planned_effort                 IN    PA_NUM_1000_NUM,
13082  p_project_id                     IN    NUMBER,
13083  p_structure_version_id           IN    NUMBER,
13084  p_start_date                     IN    PA_DATE_1000_DATE,
13085  p_end_date                       IN    PA_DATE_1000_DATE,
13086  p_pm_product_code                IN    VARCHAR2  DEFAULT NULL, ---bug 3811243
13087  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13088  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
13089  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13090 ) IS
13091 /* Bug #: 3305199 SMukka                                                         */
13092 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13093 /* l_task_ver_ids            PA_PLSQL_DATATYPES.IdTabTyp;                        */
13094 l_task_ver_ids            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13095 l_planned_effort          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13096 l_start_dates             SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
13097 l_end_dates               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
13098 l_pm_product_code         SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();  ---bug 3811243
13099 
13100 l_msg_count         NUMBER := 0;
13101 l_msg_data          VARCHAR2(2000);
13102 l_return_status     VARCHAR2(1);
13103 l_data              VARCHAR2(2000);
13104 l_msg_index_out     NUMBER;
13105 API_ERROR           EXCEPTION;
13106 
13107 BEGIN
13108 
13109 IF nvl(p_tasks_ver_ids.LAST,0) > 0 THEN --Condition added for bug #3569905
13110      FOR i in p_tasks_ver_ids.FIRST..p_tasks_ver_ids.LAST LOOP
13111            IF p_tasks_ver_ids(i) IS NOT NULL AND
13112              (p_planned_effort(i) IS NOT NULL AND
13113               p_planned_effort(i) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
13114 														p_planned_effort(i) <> 0)  --bug 3802240: Added conditions to skip g_miss
13115            THEN
13116                IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_tasks_ver_ids(i) ) = 'Y'
13117                THEN
13118                     /* convert ids and planned effort to the called apis params types. */
13119                     l_task_ver_ids.extend(1); /* Venky */
13120                     l_task_ver_ids(l_task_ver_ids.count)     := p_tasks_ver_ids(i);
13121                     l_planned_effort.extend(1);
13122                     l_planned_effort(l_planned_effort.count)   := p_planned_effort(i);
13123                     l_start_dates.extend(1);
13124                     l_start_dates(l_start_dates.count)      := NVL( p_start_date(i), TRUNC(SYSDATE));
13125                     l_end_dates.extend(1);
13126                     l_end_dates(l_end_dates.count)        := NVL( p_end_date(i), TRUNC(SYSDATE));
13127                     ---bug 3811243
13128                     l_pm_product_code.extend();
13129                     l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
13130                END IF;
13131            END IF;
13132      END LOOP;
13133 END IF;
13134 
13135  IF l_task_ver_ids.exists(1)
13136  THEN
13137      /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
13138      /*moved pa_fp_planning_transaction_pub.add_planning_transactions into plsql block        */
13139      BEGIN
13140          pa_fp_planning_transaction_pub.add_planning_transactions(
13141             p_context                      => 'WORKPLAN'
13142            ,p_project_id                   => p_project_id
13143            ,p_struct_elem_version_id       => p_structure_version_id
13144            ,p_task_elem_version_id_tbl     => l_task_ver_ids
13145            ,p_planned_people_effort_tbl    => l_planned_effort
13146            ,p_start_date_tbl               => l_start_dates
13147            ,p_end_date_tbl                 => l_end_dates
13148            ,p_pm_product_code              => l_pm_product_code   --bug 3811243
13149            ,x_return_status                => l_return_status
13150            ,x_msg_count                    => l_msg_count
13151            ,x_msg_data                     => l_msg_data
13152           );
13153      EXCEPTION
13154          WHEN OTHERS THEN
13155               fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13156                                       p_procedure_name => 'call_add_planning_txns',
13157                                       p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
13158          raise API_ERROR;
13159      END;
13160    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
13161      x_msg_count := FND_MSG_PUB.count_msg;
13162      if x_msg_count = 1 then
13163        pa_interface_utils_pub.get_messages
13164        (p_encoded        => FND_API.G_TRUE,
13165         p_msg_index      => 1,
13166         p_msg_count      => l_msg_count,
13167         p_msg_data       => l_msg_data,
13168         p_data           => l_data,
13169         p_msg_index_out  => l_msg_index_out);
13170         x_msg_data := l_data;
13171      end if;
13172      raise API_ERROR;
13173    end if;
13174  END IF;
13175 
13176   x_return_status := FND_API.G_RET_STS_SUCCESS;
13177 EXCEPTION
13178 WHEN API_ERROR THEN
13179   x_return_status := FND_API.G_RET_STS_ERROR;
13180 WHEN OTHERS THEN
13181   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13182   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13183                           p_procedure_name => 'call_add_planning_txns',
13184                           p_error_text     => SUBSTRB(SQLERRM,1,240));
13185   raise;
13186 END call_add_planning_txns;
13187 
13188 PROCEDURE update_task_det_sch_info(
13189  p_api_version                    IN    NUMBER   :=1.0,
13190  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
13191  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
13192  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
13193  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
13194  p_debug_mode                     IN    VARCHAR2 :='N',
13195  p_task_ver_id                    IN    NUMBER,
13196  p_project_id                     IN    NUMBER,
13197  p_planned_effort                 IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13198  p_ETC_effort                     IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13199  p_structure_version_id           IN    NUMBER,
13200  p_object_type                    IN    VARCHAR2 := 'PA_TASKS',
13201  p_etc_cost                       IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13202  p_actual_effort                  IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13203  p_percent_complete               IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13204  p_res_assign_id                  IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13205  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13206  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
13207  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13208 ) IS
13209 
13210     l_msg_count                    NUMBER;
13211     l_msg_data                     VARCHAR2(250);
13212     l_data                          VARCHAR2(250);
13213     l_msg_index_out                 NUMBER;
13214     l_return_status                VARCHAR2(2);
13215     l_error_message_code           VARCHAR2(250);
13216 
13217    CURSOR cur_sch
13218    IS
13219    SELECT scheduled_start_date, scheduled_finish_date
13220      FROM pa_proj_elem_ver_schedule
13221     WHERE element_version_id = p_task_ver_id
13222       AND project_id = p_project_id
13223     ;
13224 
13225 
13226     /*  Bug # 3755089. Modified the following cursor. */
13227 
13228     cursor cur_progress (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13229                                 p_structure_version_id NUMBER) is
13230     select *
13231     from pa_progress_rollup ppr
13232     where ppr.project_id = p_project_id
13233     and ppr.object_id = p_object_id
13234     and ppr.object_version_id = p_object_version_id
13235     and ppr.structure_version_id = p_structure_version_id
13236     and ppr.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES') -- 4498610 : Added PA_STRUCTURES also
13237     and ppr.current_flag = 'Y'
13238     and ppr.as_of_date = (select max(as_of_date) from pa_progress_rollup ppr2
13239                            where ppr2.project_id = p_project_id
13240                            and ppr2.object_id = p_object_id
13241                            and ppr2.object_version_id = p_object_version_id
13242                            and ppr2.structure_version_id = p_structure_version_id
13243                        and ppr2.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES'));
13244 
13245     cur_progress_rec cur_progress%rowtype;
13246 
13247 
13248     cursor cur_progress2 (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13249                                 p_structure_version_id NUMBER, p_current_flag VARCHAR2) is
13250     select *
13251     from pa_progress_rollup ppr
13252     where ppr.project_id = p_project_id
13253     and ppr.object_id = p_object_id
13254     and ppr.object_version_id = p_object_version_id
13255     and ppr.structure_version_id IS NULL
13256     and ppr.current_flag = p_current_flag
13257     and ppr.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES'); -- 4498610 : Added PA_STRUCTURES also
13258     --bug 3959087, following code is commented as it is not needed
13259     /*and ppr.as_of_date = (select max(as_of_date) from pa_progress_rollup ppr2
13260                            where ppr2.project_id = p_project_id
13261                            and ppr2.object_id = p_object_id
13262                            and ppr2.object_version_id = p_object_version_id
13263                            and ppr2.structure_version_id IS NULL
13264                            and ppr2.current_flag = p_current_flag   --bug 3708948
13265                            and ppr2.object_type in ('PA_TASKS','PA_ASSIGNMENTS'));*/
13266 
13267     cursor cur_prev_planned_task_effort(p_project_id NUMBER, p_proj_element_id NUMBER
13268                         , p_structure_version_id NUMBER) is
13269     select (labor_effort+equipment_effort)
13270     from  pji_xbs_plans_v
13271     where  project_id = p_project_id
13272     and structure_version_id = p_structure_version_id
13273     and proj_element_id = p_proj_element_id
13274     and structure_type = 'WORKPLAN';
13275 
13276     cursor cur_prev_planned_assgn_effort(p_project_id NUMBER, p_task_id NUMBER
13277                                          , p_structure_version_id NUMBER, p_res_assign_id NUMBER) is
13278     select planned_quantity
13279     from  pa_task_assignments_v
13280     where  project_id = p_project_id
13281     and structure_version_id = p_structure_version_id
13282     and resource_assignment_id = p_res_assign_id
13283     and task_id = p_task_id;
13284 
13285     l_prev_planned_effort NUMBER := null;
13286 
13287     cursor cur_prev_etc_effort (p_project_id NUMBER, p_object_id NUMBER
13288                                          , p_structure_version_id NUMBER) is
13289     select (nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0)
13290        +nvl(subprj_ppl_etc_effort,0)+nvl(subprj_eqpmt_etc_effort,0))
13291     from pa_progress_rollup
13292     where  project_id = p_project_id
13293     and object_id = p_object_id
13294     and structure_version_id = p_structure_version_id
13295     and structure_type = 'WORKPLAN';
13296 
13297 --maansari5/9
13298     cursor cur_prev_etc_effort2 (p_project_id NUMBER, p_object_id NUMBER
13299                                          ) is
13300     select (nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0)
13301        +nvl(subprj_ppl_etc_effort,0)+nvl(subprj_eqpmt_etc_effort,0))
13302     from pa_progress_rollup
13303     where  project_id = p_project_id
13304     and object_id = p_object_id
13305     and structure_version_id is null
13306     and current_flag = 'Y'
13307     and structure_type = 'WORKPLAN';
13308 --maansari5/9
13309 
13310    l_prev_etc_effort NUMBER := null;
13311 
13312   l_task_ver_ids2             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13313   l_planned_effort2           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13314   l_start_dates               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13315   l_end_dates                 SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13316   l_SCHEDULED_START_DATE      DATE;
13317   l_SCHEDULED_END_DATE        DATE;
13318 
13319   l_progress_rollup_id NUMBER;
13320   l_login_id NUMBER := fnd_global.login_id;
13321   l_user_id  NUMBER := fnd_global.user_id;
13322 
13323   l_task_id NUMBER;
13324   l_object_id NUMBER;
13325   l_next_prog_cycle_date DATE;
13326   l_as_of_date DATE;
13327   l_percent_complete NUMBER;
13328   l_etc_effort NUMBER;
13329   l_planned_effort NUMBER;
13330   l_override_pc NUMBER := null;
13331   l_eff_rollup_pc NUMBER := null;
13332   l_earned_value NUMBER := null;
13333   l_proj_element_id NUMBER := null;
13334 
13335   l_version_enabled VARCHAr2(1):= 'N';  --maansari5/9
13336   l_weighting_basis VARCHAR2(30); ---Bug 6144931
13337 
13338 --maansari5/11
13339    CURSOR c_get_task_weight_method
13340    IS
13341    SELECT task_weight_basis_code
13342    FROM pa_proj_progress_attr
13343    WHERE project_id = p_project_id
13344    AND structure_type = 'WORKPLAN';
13345 
13346    CURSOR c_proj_element_id
13347    IS
13348    SELECT proj_element_id
13349    FROM pa_proj_element_versions
13350    WHERE project_id = p_project_id
13351    and parent_structure_version_id = p_structure_version_id
13352    and element_version_id = p_task_ver_id
13353    and object_type = decode(p_object_type, 'PA_ASSIGNMENTS','PA_TASKS', p_object_type); -- Bug 3856161 : Added Decode
13354 
13355    l_rollup_method    VARCHAR2(30);
13356    l_actual_finish_DATE DATE;
13357    l_actual_start_DATE  DATE;
13358    l_rollup_as_of_date  DATE;
13359 
13360    cursor c_max_as_of_date_wkg is
13361    select max(as_of_date)
13362    from pa_progress_rollup
13363    where project_id = p_project_id
13364 --   and object_version_id = p_task_ver_id Bug 3856161 : It shd always do rollup if record exists
13365 --   and object_type = p_object_type
13366    and structure_type = 'WORKPLAN'
13367    and structure_version_id = p_structure_version_id;
13368 
13369    l_debug_mode   VARCHAR2(1);
13370    l_dummy        NUMBER;
13371 
13372    -- Start modifications for Bug # 3879658.
13373 
13374    cursor cur_progress_status is
13375    select ptt.initial_progress_status_code
13376    from pa_task_types ptt, pa_proj_elements ppe, pa_proj_element_versions ppev
13377    where ppev.project_id = ppe.project_id
13378    and ppev.proj_element_id = ppe.proj_element_id
13379    and ppe.type_id = ptt.task_type_id
13380    and ppe.project_id = p_project_id
13381    and ppev.element_version_id = p_task_ver_id
13382    and ppev.parent_structure_version_id = p_structure_version_id;
13383 
13384    l_init_prog_status_code VARCHAR2(150) := NULL;
13385 
13386    -- End modifications for Bug # 3879658.
13387 
13388    --bug 3959087, start
13389    l_BASE_PERCENT_COMP_DERIV_CODE   VARCHAR2(30);
13390    l_lowest_level_task             VARCHAR2(1);
13391    l_assignment_exists             VARCHAR2(1);
13392    l_ppl_act_cost                  NUMBER;
13393    l_planned_cost                   NUMBER;
13394    l_actual_effort                  NUMBER;
13395    l_prj_currency_code VARCHAR2(15);
13396 
13397    CURSOR cur_proj_elements(c_proj_element_id NUMBER)
13398    IS
13399       SELECT decode( ppe.base_percent_comp_deriv_code, null, ptt.base_percent_comp_deriv_code, '^', ptt.base_percent_comp_deriv_code, ppe.base_percent_comp_deriv_code )
13400       from pa_proj_elements ppe
13401           ,pa_task_types ptt
13402       where ppe.project_id = p_project_id
13403       and ppe.proj_element_id = c_proj_element_id
13404       and ppe.type_id = ptt.task_type_id;
13405 
13406 
13407     cursor cur_get_costs(p_project_id NUMBER, p_object_id NUMBER, p_structure_version_id NUMBER) is
13408     select nvl(BRDN_COST, 0), nvl(ACT_LABOR_BRDN_COST, 0)
13409     from pji_xbs_plans_v
13410     where project_id = p_project_id
13411     and   proj_element_id = p_object_id
13412     and   structure_version_id = p_structure_version_id;
13413 
13414     cursor cur_rollup_percent (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13415                                 p_structure_version_id NUMBER) is
13416     select ppr.EFF_ROLLUP_PERCENT_COMP,ppr.completed_percentage, actual_start_date,  actual_finish_date -- 4498610 : Added completed_percentage, actual_start_date,  actual_finish_date
13417     from pa_progress_rollup ppr
13418     where ppr.project_id = p_project_id
13419     and ppr.object_id = p_object_id
13420     and ppr.object_version_id = p_object_version_id
13421     and ppr.structure_version_id = p_structure_version_id
13422     and ppr.object_type IN ('PA_TASKS','PA_STRUCTURES') -- -- Bug 4498610 : Added PA_STRUCTURES
13423     and ppr.current_flag = 'Y';
13424 
13425 
13426     cursor cur_rollup_percent2 (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13427                                 p_structure_version_id NUMBER) is
13428     select ppr.EFF_ROLLUP_PERCENT_COMP,ppr.completed_percentage, actual_start_date,  actual_finish_date -- 4498610 : Added completed_percentage, actual_start_date,  actual_finish_date
13429     from pa_progress_rollup ppr
13430     where ppr.project_id = p_project_id
13431     and ppr.object_id = p_object_id
13432     and ppr.object_version_id = p_object_version_id
13433     and ppr.structure_version_id IS NULL
13434     and ppr.current_flag = 'Y'
13435     and ppr.object_type IN ('PA_TASKS','PA_STRUCTURES') -- Bug 4498610 : Added PA_STRUCTURES
13436     ;
13437 
13438    --bug 3959087, end
13439 
13440     -- Bug 3976633 : Added cursor cur_progress_exists
13441     cursor cur_progress_exists (c_project_id NUMBER, c_object_id NUMBER, c_structure_version_id NUMBER, c_version_enabled_flag VARCHAR2) is
13442     select 'Y'
13443     from pa_progress_rollup ppr
13444     where ppr.project_id = c_project_id
13445     and ppr.object_id = c_object_id
13446     and ((c_version_enabled_flag = 'N' AND ppr.structure_version_id  IS NULL) OR (c_version_enabled_flag = 'Y' AND ppr.structure_version_id = p_structure_version_id))
13447     and ppr.object_type = 'PA_TASKS'
13448     and ppr.structure_type = 'WORKPLAN';
13449 
13450     l_progress_exists VARCHAR2(1):='N';
13451 
13452     --BUG 3919800, rtarway
13453     cursor cur_get_act_effort (p_project_id NUMBER, p_object_id NUMBER, p_structure_version_id NUMBER) is
13454     select nvl(ACT_LABOR_HRS, 0)+nvl(ACT_EQUIP_HRS,0)
13455     from pji_xbs_plans_v
13456     where project_id = p_project_id
13457     and   proj_element_id = p_object_id
13458     and   structure_version_id = p_structure_version_id ;
13459 
13460     l_curr_override_pc NUMBER; -- Bug 4498610
13461 
13462 BEGIN
13463 
13464       IF (p_debug_mode = 'Y') THEN
13465         pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO begin');
13466       END IF;
13467 
13468       IF (p_commit = FND_API.G_TRUE) THEN
13469         savepoint UPDATE_task_det_sch;
13470       END IF;
13471 
13472       l_debug_mode := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',fnd_global.user_id,fnd_global.login_id,275,null,null), 'N');
13473 
13474       IF l_debug_mode  = 'Y' THEN
13475         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO Start : Passed Parameters :', x_Log_Level=> 3);
13476         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_calling_module='||p_calling_module, x_Log_Level=> 3);
13477         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_task_ver_id='||p_task_ver_id, x_Log_Level=> 3);
13478         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_project_id='||p_project_id, x_Log_Level=> 3);
13479         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_planned_effort='||p_planned_effort, x_Log_Level=> 3);
13480         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_ETC_effort='||p_ETC_effort, x_Log_Level=> 3);
13481         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_structure_version_id='||p_structure_version_id, x_Log_Level=> 3);
13482         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_object_type='||p_object_type, x_Log_Level=> 3);
13483         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_etc_cost='||p_etc_cost, x_Log_Level=> 3);
13484         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_actual_effort='||p_actual_effort, x_Log_Level=> 3);
13485         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_percent_complete='||p_percent_complete, x_Log_Level=> 3);
13486         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_res_assign_id='||p_res_assign_id, x_Log_Level=> 3);
13487       END IF;
13488 
13489       l_version_enabled := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id);  --maansari5/9
13490 
13491       --The following actions are to be performed only when p_object_type = 'PA_TASKS'
13492 
13493       --IF (p_object_type = 'PA_TASKS') THEN --- Bug 4498610
13494       IF (p_object_type IN ('PA_TASKS','PA_STRUCTURES')) THEN --- Bug 4498610
13495 
13496         -- Bug Fix 5726773
13497  	-- Support negative quantities and amounts.
13498  	-- Commenting out the following validations.
13499  	/*
13500 	-- BEGIN: Code to raise error if negative etc values or planned values are entered.
13501         IF ((p_planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
13502         AND (nvl(p_planned_effort,0) < 0))  THEN
13503 
13504             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
13505                         ,p_msg_name       => 'PA_TP_NO_NEG_PLN');
13506 
13507             x_msg_data := 'PA_TP_NO_NEG_PLN';
13508             x_return_status := 'E';
13509             RAISE  FND_API.G_EXC_ERROR;
13510         END IF;
13511 
13512         IF (((p_etc_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and (nvl(p_etc_cost,0) < 0))
13513         or ((p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and (nvl(p_etc_effort,0) < 0))) THEN
13514 
13515             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
13516                         ,p_msg_name       => 'PA_TP_NO_NEG_ETC');
13517 
13518             x_msg_data := 'PA_TP_NO_NEG_ETC';
13519             x_return_status := 'E';
13520             RAISE  FND_API.G_EXC_ERROR;
13521         END IF;
13522 	*/
13523  	-- End of Bug Fix 5726773
13524 
13525         -- END: Code to raise error if negative etc values or planned values are entered.
13526         IF l_debug_mode  = 'Y' THEN
13527             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_version_enabled='||l_version_enabled, x_Log_Level=> 3);
13528         END IF;
13529 
13530         -- Get the task_id.
13531 
13532         select proj_element_id
13533         into l_task_id
13534         from pa_proj_element_versions
13535         where element_version_id = p_task_ver_id
13536         and parent_structure_version_id = p_structure_version_id;
13537 
13538         IF l_debug_mode  = 'Y' THEN
13539             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_id='||l_task_id, x_Log_Level=> 3);
13540         END IF;
13541         --bug 3959087
13542         SELECT project_currency_code  INTO  l_prj_currency_code  FROM pa_projects_all WHERE project_id = p_project_id;
13543 
13544         -- Bug 3856161 : This code will never excute for assignments, I don't know why has this written here
13545         -- Setting object_id for Tasks / Assignments.
13546         IF (p_object_type = 'PA_ASSIGNMENTS') THEN
13547             l_object_id := p_res_assign_id;
13548         ELSE
13549             l_object_id := l_task_id;
13550         END IF;
13551 
13552         IF l_debug_mode  = 'Y' THEN
13553             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_object_id='||l_object_id, x_Log_Level=> 3);
13554         END IF;
13555 
13556 
13557            -- Logic to make sure that planned value = etc value + actual value if etc is changed.
13558            -- If both planned value and etc value are changed, then planned value always takes precedence,
13559            -- set etc value as (planned value - actual value).
13560            -- Confirmed this logic with Clint Chow.
13561 
13562            IF ((nvl(p_planned_effort,0) > 0 and NVL( p_planned_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13563            or (nvl(p_etc_effort,0) > 0 and NVL(p_etc_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) THEN
13564 
13565             -- Get previous planned value.
13566             -- Bug 3856161 : This code will never excute for assignments, I don't know why has this written here
13567             IF p_object_type ='PA_ASSIGNMENTS' THEN
13568                 open cur_prev_planned_assgn_effort(p_project_id,l_task_id
13569                     ,p_structure_version_id,p_res_assign_id);
13570                 fetch cur_prev_planned_assgn_effort into l_prev_planned_effort;
13571                 close cur_prev_planned_assgn_effort;
13572             ELSE
13573                 open cur_prev_planned_task_effort(p_project_id,l_task_id,p_structure_version_id);
13574                 fetch cur_prev_planned_task_effort into l_prev_planned_effort;
13575                 close cur_prev_planned_task_effort;
13576             END IF;
13577 
13578             IF l_debug_mode  = 'Y' THEN
13579                 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_prev_planned_effort='||l_prev_planned_effort, x_Log_Level=> 3);
13580             END IF;
13581 
13582             -- Get previous etc value.
13583             --maansari5/9
13584             IF NVL(l_version_enabled,'N') = 'Y'
13585             THEN
13586                 open cur_prev_etc_effort(p_project_id,l_object_id,p_structure_version_id);
13587                 fetch cur_prev_etc_effort into l_prev_etc_effort;
13588                 close cur_prev_etc_effort;
13589             ELSE
13590                 open cur_prev_etc_effort2(p_project_id,l_object_id);
13591                 fetch cur_prev_etc_effort2 into l_prev_etc_effort;
13592                 close cur_prev_etc_effort2;
13593             END IF;
13594 
13595             IF l_debug_mode  = 'Y' THEN
13596                 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_prev_etc_effort='||l_prev_etc_effort, x_Log_Level=> 3);
13597             END IF;
13598 
13599             --maansari5/9
13600 
13601             -- Initialize the variables for planned effort and etc effort.
13602 
13603             l_planned_effort := null;
13604             l_etc_effort := null;
13605 
13606             -- If planned value has been updated set etc value as (planned value - actual value).
13607             --bug 3959087, start
13608             IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13609                 l_actual_effort := round(p_actual_effort, 5);
13610             ELSE
13611                 --BUG 3919800, rtarway
13612                     if p_calling_module <> 'AMG'
13613                     then
13614                          l_actual_effort := 0;
13615                     else
13616                          --BUG 3919800, rtarway
13617                          --get actual effort using cursor cur_get_act_effort
13618                          OPEN cur_get_act_effort(p_project_id,l_object_id,p_structure_version_id);
13619                          FETCH cur_get_act_effort into l_actual_effort;
13620                          CLOSE cur_get_act_effort;
13621                     end if;
13622             END IF;
13623             --bug 3959087, end
13624 
13625                IF l_debug_mode  = 'Y' THEN
13626                 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_actual_effort='||l_actual_effort, x_Log_Level=> 3);
13627             END IF;
13628 
13629                --maansari5/9
13630             IF (p_planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13631             --and (NVL(l_prev_planned_effort,0) <> NVL(p_planned_effort,0))) THEN  --bug 3959087
13632             THEN
13633                 --l_planned_effort := p_planned_effort; --bug 3959087
13634                 l_planned_effort := round(p_planned_effort, 5);
13635                     --BUG 3919800, rtarway
13636                     --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13637                     IF (l_actual_effort >= 0 ) THEN
13638                     --l_etc_effort := NVL(p_planned_effort,0) - NVL(p_actual_effort, 0); --bug 3959087
13639                     l_etc_effort := round((NVL(p_planned_effort,0) - NVL(l_actual_effort, 0)), 5);
13640                 END IF;
13641             -- else set planned value as (etc vallue + actual value).
13642             ELSIF (p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13643             --and (NVL(l_prev_etc_effort,0) <> nvl(p_etc_effort,0))) THEN --bug 3959087
13644             THEN
13645                 --l_etc_effort := NVL(p_etc_effort,0); --bug 3959087
13646                 l_etc_effort := NVL(round(p_etc_effort,5),0);
13647                     --BUG 3919800, rtarway
13648                     --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13649                     IF (l_actual_effort >= 0 ) THEN
13650                     -- l_planned_effort := NVL( p_etc_effort, 0) + NVL(p_actual_effort,0); --bug 3959087
13651                     l_planned_effort := round( (NVL( p_etc_effort, 0) + NVL(l_actual_effort,0)), 5);
13652                 END IF;
13653             END IF;
13654             --maansari5/9
13655            END IF; --   IF ((nvl(p_planned_effort,0) > 0 and NVL( p_planned_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13656 
13657 	   --Bug#6144931 START
13658 
13659            l_weighting_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
13660 
13661 	  IF l_weighting_basis = 'EFFORT' AND NVL(l_prev_planned_effort,0) <> NVL(l_planned_effort,0)
13662 	  THEN
13663 	      PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
13664                                p_project_id => p_project_id,
13665                                p_structure_version_id =>  p_structure_version_id,
13666                                p_update_wbs_flag => 'Y',
13667                                x_return_status => l_return_status,
13668                                x_msg_count => l_msg_count,
13669                                x_msg_data => l_msg_data
13670                              );
13671 
13672               IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13673                  l_msg_count := FND_MSG_PUB.count_msg;
13674                 IF l_msg_count > 0 THEN
13675                     x_msg_count := l_msg_count;
13676                     IF x_msg_count = 1 THEN
13677                        x_msg_data := l_msg_data;
13678                     END IF;
13679                     RAISE FND_API.G_EXC_ERROR;
13680                 END IF;
13681               END IF;
13682           END IF;
13683 
13684          --Bug#6144931 END
13685 
13686            IF l_debug_mode  = 'Y' THEN
13687             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_planned_effort='||l_planned_effort, x_Log_Level=> 3);
13688             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_etc_effort='||l_etc_effort, x_Log_Level=> 3);
13689            END IF;
13690 
13691            --bug 3959087,  start
13692            l_lowest_level_task := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_ver_id );
13693            l_assignment_exists := PA_PROGRESS_UTILS.check_assignment_exists(p_project_id, p_task_ver_id, 'PA_TASKS');
13694 
13695            IF l_debug_mode  = 'Y' THEN
13696             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_lowest_level_task='||l_lowest_level_task, x_Log_Level=> 3);
13697             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_assignment_exists='||l_assignment_exists, x_Log_Level=> 3);
13698            END IF;
13699            --bug 3959087,  end
13700 
13701            -- Call: pa_fp_planning_transaction_pub.update_planning_transactions().
13702 
13703           --IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_ver_id )  = 'Y' AND
13704           IF (l_lowest_level_task  = 'Y' AND --bug 3959087
13705           PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y'
13706           -- Progress Management Changes, Bug # 3420093.
13707           --AND PA_PROGRESS_UTILS.check_assignment_exists(p_project_id,p_task_ver_id,p_object_type) = 'N'  --bug 3864543
13708           AND l_assignment_exists = 'N'  --bug 3959087
13709           AND p_object_type = 'PA_TASKS'
13710           AND p_calling_module <> 'AMG')
13711           THEN
13712 
13713             OPEN cur_sch;
13714             FETCH cur_sch INTO l_SCHEDULED_START_DATE, l_SCHEDULED_END_DATE;
13715             CLOSE cur_sch;
13716                 IF l_debug_mode  = 'Y' THEN
13717                 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_SCHEDULED_START_DATE='||l_SCHEDULED_START_DATE, x_Log_Level=> 3);
13718                 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_SCHEDULED_END_DATE='||l_SCHEDULED_END_DATE, x_Log_Level=> 3);
13719                 END IF;
13720 
13721             l_task_ver_ids2.extend(1);
13722             l_planned_effort2.extend(1);
13723             l_start_dates.extend(1);
13724             l_end_dates.extend(1);
13725 
13726             l_task_ver_ids2(1)   := p_task_ver_id;
13727 
13728             /* Start Modifications to fix Bug # 3640498. */
13729 
13730             IF ((l_planned_effort = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) or  (nvl(l_planned_effort,0) = 0)) then
13731                 l_planned_effort2(1) := FND_API.G_MISS_NUM;
13732             ELSE
13733                 l_planned_effort2(1) := l_planned_effort;
13734             END IF;
13735 
13736             /* End Modifications to fix Bug # 3640498. */
13737 
13738             l_start_dates(1)     := l_SCHEDULED_START_DATE;
13739             l_end_dates(1)       := l_SCHEDULED_END_DATE;
13740 
13741             /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
13742             /*moved pa_fp_planning_transaction_pub.update_planning_transactions into plsql block        */
13743             BEGIN
13744                 IF NVL(l_prev_planned_effort,0) <> NVL(l_planned_effort,0)
13745                 THEN
13746                     IF l_debug_mode  = 'Y' THEN
13747                         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling update_planning_transactions', x_Log_Level=> 3);
13748                         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_ver_ids2='||p_task_ver_id, x_Log_Level=> 3);
13749                         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_planned_effort2='||l_planned_effort, x_Log_Level=> 3);
13750                         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_start_dates='||l_SCHEDULED_START_DATE, x_Log_Level=> 3);
13751                         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_end_dates='||l_SCHEDULED_END_DATE, x_Log_Level=> 3);
13752                     END IF;
13753 
13754                     pa_fp_planning_transaction_pub.update_planning_transactions
13755                     (
13756                         p_context                      => 'WORKPLAN'
13757                         ,p_struct_elem_version_id       => p_structure_version_id
13758                         ,p_task_elem_version_id_tbl     => l_task_ver_ids2
13759                         ,p_planned_people_effort_tbl    => l_planned_effort2
13760                         ,p_start_date_tbl               => l_start_dates
13761                         ,p_end_date_tbl                 => l_end_dates
13762                         ,x_return_status                => l_return_status
13763                         ,x_msg_count                    => l_msg_count
13764                         ,x_msg_data                     => l_msg_data
13765                     );
13766                 END IF;
13767             EXCEPTION
13768             WHEN OTHERS THEN
13769                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13770                         p_procedure_name => 'update_task_det_sch_info',
13771                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.update_planning_transactions:'||SQLERRM,1,240));
13772                 RAISE FND_API.G_EXC_ERROR;
13773             END;
13774           --end 3301192 fp changes
13775           END IF;  --<< l_planned_effort >>
13776 
13777           -- Progress Management Changes, Bug # 3420093.
13778 
13779           -- The following code inserts progress records into the pa_progress_rollup_table.
13780               -- this is required if only any of: p_etc_effort, p_etc_cost and p_percent_complete is not null
13781 
13782 
13783               --if ((nvl(p_etc_effort,0) > 0 and p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13784               --  or (nvl(p_etc_cost,0) > 0  and p_etc_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)  --maansari5/9
13785 
13786 
13787           l_next_prog_cycle_date := pa_progress_utils.get_next_progress_cycle(p_project_id => p_project_id , p_task_id  => l_task_id);
13788           IF l_debug_mode  = 'Y' THEN
13789             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_next_prog_cycle_date='||l_next_prog_cycle_date, x_Log_Level=> 3);
13790           END IF;
13791 
13792 
13793           IF   (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13794           THEN
13795             -- Progress Management Changes, Bug # 3420093.
13796             -- Begin logic to create pa_progress_rollup record for the Task / Assignment:
13797             -- Get the next progress cycle id.
13798             -- Bug 3856161 : Moving this code outside
13799             --l_next_prog_cycle_date := pa_progress_utils.get_next_progress_cycle(p_project_id => p_project_id
13800             --                              , p_task_id  => l_task_id);
13801             -- Progress Management Changes, Bug # 3420093.
13802             IF (p_percent_complete = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13803                 l_percent_complete := null;
13804             ELSE
13805                 --l_percent_complete := p_percent_complete; --bug 3959087
13806                 l_percent_complete := round(p_percent_complete, 2);
13807             END IF;
13808 
13809             -- Initializning the values for Override Percent Complete, Effective Rollup Percent Complete
13810             -- and Earned Value.
13811         -- Bug  3856161 : Reduced the scope of IF, now % cokplete should be rederived based on actual and etc too
13812               END IF;
13813 
13814           l_eff_rollup_pc := null;
13815           l_override_pc := null;
13816           l_earned_value := null;
13817 
13818               -- Setting values for Override Percent Complete, Effective Rollup Percent Complete
13819           -- and Earned Value.
13820 
13821           IF (p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13822             --l_override_pc := p_percent_complete; --bug 3959087
13823             l_override_pc := round(p_percent_complete, 2);
13824           END IF;
13825 
13826 
13827          --bug 3959087, calculate percent complete for lowest level tasks only, depending on derivation code, start
13828 
13829          /*IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13830         IF ((nvl(l_etc_effort,0)+nvl(p_actual_effort,0)) <> 0) THEN
13831         -- Bug 3856161
13832         --l_eff_rollup_pc := (nvl(l_etc_effort,0))/
13833         --         (nvl(l_etc_effort,0)+nvl(p_actual_effort,0));
13834         l_eff_rollup_pc := (nvl(p_actual_effort,0))/ (nvl(l_etc_effort,0)+nvl(p_actual_effort,0))*100;
13835         ELSE
13836             -- Bug 3856161
13837         --l_eff_rollup_pc := (nvl(l_etc_effort,0))/1;
13838         l_eff_rollup_pc := 0;
13839         END IF;
13840           -- Bug 3856161 : Reduced the scope of IF
13841          END IF;*/
13842 
13843         -- 4498610 : Added PA_TASKS condition
13844         IF p_object_type = 'PA_TASKS' AND NVL( l_lowest_level_task, 'N' ) = 'Y' AND l_assignment_exists = 'N'
13845         THEN
13846             OPEN cur_proj_elements(l_task_id);
13847             FETCH cur_proj_elements INTO l_BASE_PERCENT_COMP_DERIV_CODE;
13848             CLOSE cur_proj_elements;
13849             IF l_debug_mode  = 'Y' THEN
13850                 pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_BASE_PERCENT_COMP_DERIV_CODE='||l_BASE_PERCENT_COMP_DERIV_CODE, x_Log_Level=> 3);
13851             END IF;
13852 
13853             IF l_BASE_PERCENT_COMP_DERIV_CODE = 'EFFORT'
13854             THEN
13855                     --BUG 3919800, rtarway, commented IF
13856                    --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13857 
13858                 IF ((nvl(l_etc_effort,0)+nvl(l_actual_effort,0)) <> 0) THEN
13859                     l_eff_rollup_pc := round((nvl(l_actual_effort,0))/ (nvl(l_etc_effort,0)+nvl(l_actual_effort,0))*100, 2);
13860                 ELSE
13861                     l_eff_rollup_pc := 0;
13862                 END IF;
13863                 --END IF;
13864             ELSIF l_BASE_PERCENT_COMP_DERIV_CODE = 'COST'
13865             THEN
13866                OPEN cur_get_costs(p_project_id, l_task_id, p_structure_version_id);
13867                FETCH cur_get_costs INTO l_planned_cost, l_ppl_act_cost;
13868                CLOSE cur_get_costs;
13869 
13870                IF l_debug_mode  = 'Y' THEN
13871                     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_ppl_act_cost='||l_ppl_act_cost, x_Log_Level=> 3);
13872                     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_planned_cost='||l_planned_cost, x_Log_Level=> 3);
13873                END IF;
13874                IF (l_planned_cost <> 0)
13875                THEN
13876                 l_eff_rollup_pc := round((l_ppl_act_cost/l_planned_cost)*100, 2);
13877                ELSE
13878                 l_eff_rollup_pc := 0;
13879                END IF;
13880             END IF;
13881         ELSE      -- for summary level task fetch the rolledup percent from progress table
13882            IF NVL(l_version_enabled,'N') = 'Y'
13883            THEN
13884                OPEN cur_rollup_percent(p_project_id, l_task_id, p_task_ver_id, p_structure_version_id);
13885                FETCH cur_rollup_percent INTO l_eff_rollup_pc, l_curr_override_pc,l_actual_start_date,l_actual_finish_date ;
13886 	                   -- Bug 4498610 : Added l_curr_override_pc, l_actual_START_DATE, l_actual_FINISH_DATE
13887                CLOSE cur_rollup_percent;
13888            ELSE
13889                OPEN cur_rollup_percent2(p_project_id, l_task_id, p_task_ver_id, p_structure_version_id);
13890                FETCH cur_rollup_percent2 INTO l_eff_rollup_pc,l_curr_override_pc,l_actual_start_date,l_actual_finish_date ;
13891 	            -- Bug 4498610 : Added l_curr_override_pc, l_actual_START_DATE, l_actual_FINISH_DATE
13892                CLOSE cur_rollup_percent2;
13893            END IF;
13894         END IF;
13895 
13896         --bug 3959087, calculate percent complete for lowest level tasks only, depending on derivation code, end
13897 
13898         IF l_debug_mode  = 'Y' THEN
13899             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_percent_complete='||l_percent_complete, x_Log_Level=> 3);
13900             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_override_pc='||l_override_pc, x_Log_Level=> 3);
13901             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_eff_rollup_pc='||l_eff_rollup_pc, x_Log_Level=> 3);
13902             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_curr_override_pc='||l_curr_override_pc, x_Log_Level=> 3);
13903         END IF;
13904 
13905 
13906          OPEN c_get_task_weight_method;
13907          FETCH c_get_task_weight_method INTO l_rollup_method;
13908          CLOSE c_get_task_weight_method;
13909 
13910          OPEN c_proj_element_id;
13911          FETCH c_proj_element_id INTO l_proj_element_id;
13912          CLOSE c_proj_element_id;
13913 
13914          l_earned_value := nvl(l_override_pc,l_eff_rollup_pc) *
13915               PA_PROGRESS_UTILS.Get_BAC_Value(p_project_id,l_rollup_method
13916                   ,l_proj_element_id,p_structure_version_id
13917                   ,'WORKPLAN');
13918 
13919           --bug 3959087, start
13920           IF l_rollup_method = 'EFFORT'
13921           THEN
13922             l_earned_value := nvl(round(l_earned_value, 5),0);
13923           ELSE
13924             l_earned_value := nvl(pa_currency.round_trans_currency_amt(l_earned_value, l_prj_currency_code),0);
13925           END IF;
13926          --bug 3959087, end
13927 
13928          IF l_debug_mode  = 'Y' THEN
13929             pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_earned_value='||l_earned_value, x_Log_Level=> 3);
13930          END IF;
13931 
13932     --END IF; Bug 3856161
13933 
13934 
13935 
13936     --maansari5/11
13937      -- Bug 3856161 : Using l_eff_rollup_pc also
13938      IF NVL(l_percent_complete,l_eff_rollup_pc) > 0  AND NVL(l_percent_complete,l_eff_rollup_pc) <100
13939      THEN
13940       -- Bug 4498610 : Added nvl actual_start_date
13941     l_actual_START_DATE := nvl(l_actual_start_date,l_SCHEDULED_START_DATE);
13942     l_actual_finish_DATE := null;
13943      ELSIF NVL(l_percent_complete,l_eff_rollup_pc) > 0 AND NVL(l_percent_complete,l_eff_rollup_pc) =100
13944      THEN
13945            -- Bug 4498610 : Added nvl actual_start_date and finish_date
13946     l_actual_START_DATE := nvl(l_actual_start_date,l_SCHEDULED_START_DATE);
13947     l_actual_finish_DATE :=  nvl(l_actual_finish_date,l_SCHEDULED_END_DATE);
13948      END IF;
13949 
13950      IF l_debug_mode  = 'Y' THEN
13951     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_actual_START_DATE='||l_actual_START_DATE, x_Log_Level=> 3);
13952     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_actual_finish_DATE='||l_actual_finish_DATE, x_Log_Level=> 3);
13953      END IF;
13954 
13955      -- Progress Management Changes, Bug # 3420093.
13956      -- If workplan versioning is disabled for the project.
13957      -- Bug 3856161 : Added this IF condition
13958 
13959      IF   ( (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13960 
13961         -- Start modifications for Bug # 3879658.
13962 
13963             -- OR
13964         --(p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13965 
13966         -- End modifications for Bug # 3879658.
13967            )
13968      THEN
13969         -- Bug 4498610 : Added code below
13970         IF l_curr_override_pc IS NULL AND (l_percent_complete = l_eff_rollup_pc )THEN
13971 		l_percent_complete := null;
13972 	END IF;
13973 
13974      IF (l_version_enabled = 'N') THEN   --maansari5/9
13975          --- If progress exists, update the latest existing progress record
13976     open cur_progress2(p_project_id,l_object_id,p_task_ver_id,null,'Y');
13977     fetch cur_progress2 into cur_progress_rec;
13978     IF cur_progress2%found THEN
13979 
13980         update pa_progress_rollup set
13981         --as_of_date = l_next_prog_cycle_date,
13982         estimated_remaining_effort = null --l_etc_effort
13983         ,completed_percentage = l_percent_complete
13984         ,eff_rollup_percent_comp = l_eff_rollup_pc
13985         ,earned_value = l_earned_value
13986         ,actual_start_date    = l_actual_start_date
13987         ,actual_finish_date    = l_actual_finish_date
13988         ,last_update_date = sysdate
13989         ,last_updated_by = l_user_id
13990         --,creation_date = sysdate
13991         --,created_by = l_user_id
13992         ,last_update_login = l_login_id
13993         where progress_rollup_id = cur_progress_rec.progress_rollup_id;
13994 
13995         -- If progress does not exist, create a published progress record.
13996         l_rollup_as_of_date := cur_progress_rec.as_of_date;
13997 
13998         --bug no.3708948 start
13999         update pa_percent_completes set completed_percentage = l_percent_complete
14000         where project_id  = p_project_id
14001         and object_id = l_task_id
14002         and date_computed =l_rollup_as_of_date
14003         and current_flag = 'Y'
14004         and published_flag = 'Y';
14005         --bug no.3708948 end
14006     ELSE
14007          l_progress_rollup_id := null;
14008 
14009                     -- Start modifications for Bug # 3879658.
14010 
14011                     open cur_progress_status;
14012                     fetch cur_progress_status into l_init_prog_status_code;
14013                     close cur_progress_status;
14014 
14015                     -- End modifications for Bug # 3879658.
14016 
14017                       PA_PROGRESS_ROLLUP_PKG.INSERT_ROW(
14018                        X_PROGRESS_ROLLUP_ID              => l_progress_rollup_id
14019                       ,X_PROJECT_ID                      => p_project_id
14020                       ,X_OBJECT_ID                       => l_object_id
14021                       ,X_OBJECT_TYPE                     => p_object_type
14022                       ,X_AS_OF_DATE                      => l_next_prog_cycle_date
14023                       ,X_OBJECT_VERSION_ID               => p_task_ver_id
14024                       ,X_LAST_UPDATE_DATE                => SYSDATE
14025                       ,X_LAST_UPDATED_BY                 => l_user_id
14026                       ,X_CREATION_DATE                   => SYSDATE
14027                       ,X_CREATED_BY                      => l_user_id
14028                ,X_PROGRESS_STATUS_CODE            => l_init_prog_status_code -- Bug # 3879658 -- 'PROGRESS_STAT_ON_TRACK' --maansari5/11
14029                       ,X_LAST_UPDATE_LOGIN               => l_login_id
14030                       ,X_INCREMENTAL_WORK_QTY            => null
14031                       ,X_CUMULATIVE_WORK_QTY             => null
14032                       ,X_BASE_PERCENT_COMPLETE           => null
14033                       ,X_EFF_ROLLUP_PERCENT_COMP         => l_eff_rollup_pc
14034                       ,X_COMPLETED_PERCENTAGE            => l_percent_complete
14035                       ,X_ESTIMATED_START_DATE            => null
14036                       ,X_ESTIMATED_FINISH_DATE           => null
14037                       ,X_ACTUAL_START_DATE               => l_actual_start_DATE
14038                       ,X_ACTUAL_FINISH_DATE              => l_actual_finish_DATE
14039                       ,X_EST_REMAINING_EFFORT            => null  --l_etc_effort
14040                       ,X_BASE_PERCENT_COMP_DERIV_CODE    => null
14041                       ,X_BASE_PROGRESS_STATUS_CODE       => null
14042                       ,X_EFF_ROLLUP_PROG_STAT_CODE       => null
14043                       ,x_percent_complete_id             => null
14044                     ,X_STRUCTURE_TYPE                    => 'WORKPLAN'
14045                     ,X_PROJ_ELEMENT_ID                   => l_task_id
14046                     ,X_STRUCTURE_VERSION_ID              => null
14047                     ,X_PPL_ACT_EFFORT_TO_DATE            => null
14048                     ,X_EQPMT_ACT_EFFORT_TO_DATE          => null
14049                     ,X_EQPMT_ETC_EFFORT                  => null
14050                     ,X_OTH_ACT_COST_TO_DATE_TC           => null
14051                     ,X_OTH_ACT_COST_TO_DATE_FC           => null
14052                     ,X_OTH_ACT_COST_TO_DATE_PC           => null
14053                     ,X_OTH_ETC_COST_TC                   => null
14054                     ,X_OTH_ETC_COST_FC                   => null
14055                     ,X_OTH_ETC_COST_PC                   => null
14056                     ,X_PPL_ACT_COST_TO_DATE_TC           => null
14057                     ,X_PPL_ACT_COST_TO_DATE_FC           => null
14058                     ,X_PPL_ACT_COST_TO_DATE_PC           => null
14059                     ,X_PPL_ETC_COST_TC                   => null
14060                     ,X_PPL_ETC_COST_FC                   => null
14061                     ,X_PPL_ETC_COST_PC                   => null
14062                     ,X_EQPMT_ACT_COST_TO_DATE_TC         => null
14063                     ,X_EQPMT_ACT_COST_TO_DATE_FC         => null
14064                     ,X_EQPMT_ACT_COST_TO_DATE_PC         => null
14065                     ,X_EQPMT_ETC_COST_TC                 => null
14066                     ,X_EQPMT_ETC_COST_FC                 => null
14067                     ,X_EQPMT_ETC_COST_PC                 => null
14068                     ,X_EARNED_VALUE                      => l_earned_value
14069                     ,X_TASK_WT_BASIS_CODE                => null
14070                     ,X_SUBPRJ_PPL_ACT_EFFORT             => null
14071                     ,X_SUBPRJ_EQPMT_ACT_EFFORT           => null
14072                     ,X_SUBPRJ_PPL_ETC_EFFORT             => null
14073                     ,X_SUBPRJ_EQPMT_ETC_EFFORT           => null
14074                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_TC      => null
14075                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_FC      => null
14076                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_PC      => null
14077                     ,X_SUBPRJ_PPL_ACT_COST_TC            => null
14078                     ,X_SUBPRJ_PPL_ACT_COST_FC            => null
14079                     ,X_SUBPRJ_PPL_ACT_COST_PC            => null
14080                     ,X_SUBPRJ_EQPMT_ACT_COST_TC          => null
14081                     ,X_SUBPRJ_EQPMT_ACT_COST_FC          => null
14082                     ,X_SUBPRJ_EQPMT_ACT_COST_PC          => null
14083                     ,X_SUBPRJ_OTH_ETC_COST_TC            => null
14084                     ,X_SUBPRJ_OTH_ETC_COST_FC            => null
14085                     ,X_SUBPRJ_OTH_ETC_COST_PC            => null
14086                     ,X_SUBPRJ_PPL_ETC_COST_TC            => null
14087                     ,X_SUBPRJ_PPL_ETC_COST_FC            => null
14088                     ,X_SUBPRJ_PPL_ETC_COST_PC            => null
14089                     ,X_SUBPRJ_EQPMT_ETC_COST_TC          => null
14090                     ,X_SUBPRJ_EQPMT_ETC_COST_FC          => null
14091                     ,X_SUBPRJ_EQPMT_ETC_COST_PC          => null
14092                     ,X_SUBPRJ_EARNED_VALUE               => null
14093                     ,X_CURRENT_FLAG                      => 'Y'
14094                 ,X_PROJFUNC_COST_RATE_TYPE                   => null
14095                 ,X_PROJFUNC_COST_EXCHANGE_RATE               => null
14096               --  ,X_PROJFUNC_COST_RATE_DATE_TYPE              => null
14097                 ,X_PROJFUNC_COST_RATE_DATE                   => null
14098                 ,X_PROJ_COST_RATE_TYPE                       => null
14099                 ,X_PROJ_COST_EXCHANGE_RATE                   => null
14100               --  ,X_PROJ_COST_RATE_DATE_TYPE                  => null
14101                 ,X_PROJ_COST_RATE_DATE                       => null
14102                 ,X_TXN_CURRENCY_CODE                         => null
14103                 ,X_PROG_PA_PERIOD_NAME                       => PA_PROGRESS_UTILS.Prog_Get_Pa_Period_Name(l_next_prog_cycle_date)  --maansari5/11
14104                 ,X_PROG_GL_PERIOD_NAME                       => PA_PROGRESS_UTILS.Prog_Get_gl_Period_Name(l_next_prog_cycle_date)  --maansari5/11
14105                 ,X_OTH_QUANTITY_to_date              => null  --maansari5/9
14106                 ,X_OTH_ETC_QUANTITY              => null
14107         --bug 3621404
14108                 ,X_OTH_ACT_RAWCOST_TO_DATE_TC               => null
14109                 ,X_OTH_ACT_RAWCOST_TO_DATE_FC               => null
14110                 ,X_OTH_ACT_RAWCOST_TO_DATE_PC           => null
14111                 ,X_OTH_ETC_RAWCOST_TC           => null
14112                 ,X_OTH_ETC_RAWCOST_FC           => null
14113                 ,X_OTH_ETC_RAWCOST_PC           => null
14114                 ,X_PPL_ACT_RAWCOST_TO_DATE_TC   => null
14115                 ,X_PPL_ACT_RAWCOST_TO_DATE_FC   => null
14116                 ,X_PPL_ACT_RAWCOST_TO_DATE_PC   => null
14117                 ,X_PPL_ETC_RAWCOST_TC           => null
14118                 ,X_PPL_ETC_RAWCOST_FC           => null
14119                 ,X_PPL_ETC_RAWCOST_PC           => null
14120                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_TC   => null
14121                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_FC         => null
14122                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_PC         => null
14123                 ,X_EQPMT_ETC_RAWCOST_TC         => null
14124                 ,X_EQPMT_ETC_RAWCOST_FC         => null
14125                 ,X_EQPMT_ETC_RAWCOST_PC         => null
14126                 ,X_SP_OTH_ACT_RAWCOST_TODATE_TC    => null
14127                 ,X_SP_OTH_ACT_RAWCOST_TODATE_FC    => null
14128                 ,X_SP_OTH_ACT_RAWCOST_TODATE_PC    => null
14129                 ,X_SUBPRJ_PPL_ACT_RAWCOST_TC       => null
14130                 ,X_SUBPRJ_PPL_ACT_RAWCOST_FC       => null
14131                 ,X_SUBPRJ_PPL_ACT_RAWCOST_PC       => null
14132                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_TC     => null
14133                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_FC     => null
14134                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_PC     => null
14135                 ,X_SUBPRJ_OTH_ETC_RAWCOST_TC       => null
14136                 ,X_SUBPRJ_OTH_ETC_RAWCOST_FC       => null
14137                 ,X_SUBPRJ_OTH_ETC_RAWCOST_PC       => null
14138                 ,X_SUBPRJ_PPL_ETC_RAWCOST_TC       => null
14139                 ,X_SUBPRJ_PPL_ETC_RAWCOST_FC       => null
14140                 ,X_SUBPRJ_PPL_ETC_RAWCOST_PC       => null
14141                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_TC     => null
14142                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_FC     => null
14143                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_PC     => null
14144         );
14145                 --bug 3708948
14146 
14147                 l_rollup_as_of_date := l_next_prog_cycle_date;
14148 
14149 
14150     END IF; -- IF cur_progress2%found THEN
14151     CLOSE cur_progress2;
14152     --bug 3708948 commented as this is causing new record to be inserted, moved this code up  Satish
14153     --l_rollup_as_of_date := l_next_prog_cycle_date;
14154    -- If workplan versioning is enabled for the project.
14155     ELSE -- Version Enabled
14156         -- If working progress exists then update the working progress rec.
14157 
14158          /*  Bug # 3755089. Modified the following cursor. */
14159 
14160             open cur_progress(p_project_id,l_object_id,p_task_ver_id,p_structure_version_id);
14161             fetch cur_progress into cur_progress_rec;
14162             if cur_progress%found then
14163 
14164                 update pa_progress_rollup set
14165                 --as_of_date = l_next_prog_cycle_date,
14166                 estimated_remaining_effort = null --l_etc_effort
14167                 ,completed_percentage = l_percent_complete
14168                 ,eff_rollup_percent_comp = l_eff_rollup_pc
14169                 ,earned_value = l_earned_value
14170                 ,actual_start_date    = l_actual_start_date
14171                 ,actual_finish_date    = l_actual_finish_date
14172                 ,last_update_date = sysdate
14173                 ,last_updated_by = l_user_id
14174                 --,creation_date = sysdate
14175                 --,created_by = l_user_id
14176                 ,last_update_login = l_login_id
14177                 where progress_rollup_id = cur_progress_rec.progress_rollup_id;
14178 
14179                 l_rollup_as_of_date := cur_progress_rec.as_of_date;
14180 
14181             -- If working progress record does not exist.
14182             else
14183                 -- If published progress record exists, set the as_of_date for the progress record
14184 
14185                 close cur_progress;
14186                 open c_max_as_of_date_wkg;  ---4501133
14187                 fetch c_max_as_of_date_wkg into l_as_of_date;
14188                 close c_max_as_of_date_wkg;
14189                 if l_as_of_date is null then
14190 
14191                    open cur_progress2(p_project_id,l_object_id,p_task_ver_id,null,'Y');
14192                    fetch cur_progress2 into cur_progress_rec;
14193                    if cur_progress2%found then
14194 
14195                     if (cur_progress_rec.as_of_date > l_next_prog_cycle_date) then
14196                         l_as_of_date := cur_progress_rec.as_of_date;
14197                     else
14198                         l_as_of_date := l_next_prog_cycle_date;
14199                     end if;
14200 
14201                    /* Start code to fix issue in bug # 3755089. */
14202 
14203                   else
14204                     l_as_of_date := l_next_prog_cycle_date;
14205 
14206                     /* End code to fix issue in bug # 3755089. */
14207 
14208                   end if;
14209                   close cur_progress2;
14210                 end if;
14211 
14212                 l_rollup_as_of_date := l_as_of_date;
14213 
14214                 -- Create a working progress record for the Task / Assignment.
14215 
14216                     l_progress_rollup_id := null;
14217 
14218 
14219             -- Start modifications for Bug # 3879658.
14220 
14221             open cur_progress_status;
14222             fetch cur_progress_status into l_init_prog_status_code;
14223             close cur_progress_status;
14224 
14225             -- End modifications for Bug # 3879658.
14226 
14227                       PA_PROGRESS_ROLLUP_PKG.INSERT_ROW(
14228                        X_PROGRESS_ROLLUP_ID              => l_progress_rollup_id
14229                       ,X_PROJECT_ID                      => p_project_id
14230                       ,X_OBJECT_ID                       => l_object_id
14231                       ,X_OBJECT_TYPE                     => p_object_type
14232                       ,X_AS_OF_DATE                      => l_as_of_date
14233                       ,X_OBJECT_VERSION_ID               => p_task_ver_id
14234                       ,X_LAST_UPDATE_DATE                => SYSDATE
14235                       ,X_LAST_UPDATED_BY                 => l_user_id
14236                       ,X_CREATION_DATE                   => SYSDATE
14237                       ,X_CREATED_BY                      => l_user_id
14238                       ,X_PROGRESS_STATUS_CODE            => l_init_prog_status_code -- Bug # 3879658 -- 'PROGRESS_STAT_ON_TRACK'   --maansari5/11
14239                       ,X_LAST_UPDATE_LOGIN               => l_login_id
14240                       ,X_INCREMENTAL_WORK_QTY            => null
14241                       ,X_CUMULATIVE_WORK_QTY             => null
14242                       ,X_BASE_PERCENT_COMPLETE           => null
14243                       ,X_EFF_ROLLUP_PERCENT_COMP         => l_eff_rollup_pc
14244                       ,X_COMPLETED_PERCENTAGE            => l_percent_complete
14245                       ,X_ESTIMATED_START_DATE            => null
14246                       ,X_ESTIMATED_FINISH_DATE           => null
14247                       ,X_ACTUAL_START_DATE               => l_actual_start_DATE
14248                       ,X_ACTUAL_FINISH_DATE              => l_actual_finish_DATE
14249                       ,X_EST_REMAINING_EFFORT            => null --l_etc_effort
14250                       ,X_BASE_PERCENT_COMP_DERIV_CODE    => null
14251                       ,X_BASE_PROGRESS_STATUS_CODE       => null
14252                       ,X_EFF_ROLLUP_PROG_STAT_CODE       => null
14253                       ,x_percent_complete_id             => null
14254                     ,X_STRUCTURE_TYPE                    => 'WORKPLAN'
14255                     ,X_PROJ_ELEMENT_ID                   => l_task_id
14256                     ,X_STRUCTURE_VERSION_ID              => p_structure_version_id
14257                     ,X_PPL_ACT_EFFORT_TO_DATE            => null
14258                     ,X_EQPMT_ACT_EFFORT_TO_DATE          => null
14259                     ,X_EQPMT_ETC_EFFORT                  => null
14260                     ,X_OTH_ACT_COST_TO_DATE_TC           => null
14261                     ,X_OTH_ACT_COST_TO_DATE_FC           => null
14262                     ,X_OTH_ACT_COST_TO_DATE_PC           => null
14263                     ,X_OTH_ETC_COST_TC                   => null
14264                     ,X_OTH_ETC_COST_FC                   => null
14265                     ,X_OTH_ETC_COST_PC                   => null
14266                     ,X_PPL_ACT_COST_TO_DATE_TC           => null
14267                     ,X_PPL_ACT_COST_TO_DATE_FC           => null
14268                     ,X_PPL_ACT_COST_TO_DATE_PC           => null
14269                     ,X_PPL_ETC_COST_TC                   => null
14270                     ,X_PPL_ETC_COST_FC                   => null
14271                     ,X_PPL_ETC_COST_PC                   => null
14272                     ,X_EQPMT_ACT_COST_TO_DATE_TC         => null
14273                     ,X_EQPMT_ACT_COST_TO_DATE_FC         => null
14274                     ,X_EQPMT_ACT_COST_TO_DATE_PC         => null
14275                     ,X_EQPMT_ETC_COST_TC                 => null
14276                     ,X_EQPMT_ETC_COST_FC                 => null
14277                     ,X_EQPMT_ETC_COST_PC                 => null
14278                     ,X_EARNED_VALUE                      => l_earned_value
14279                     ,X_TASK_WT_BASIS_CODE                => null
14280                     ,X_SUBPRJ_PPL_ACT_EFFORT             => null
14281                     ,X_SUBPRJ_EQPMT_ACT_EFFORT           => null
14282                     ,X_SUBPRJ_PPL_ETC_EFFORT             => null
14283                     ,X_SUBPRJ_EQPMT_ETC_EFFORT           => null
14284                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_TC      => null
14285                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_FC      => null
14286                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_PC      => null
14287                     ,X_SUBPRJ_PPL_ACT_COST_TC            => null
14288                     ,X_SUBPRJ_PPL_ACT_COST_FC            => null
14289                     ,X_SUBPRJ_PPL_ACT_COST_PC            => null
14290                     ,X_SUBPRJ_EQPMT_ACT_COST_TC          => null
14291                     ,X_SUBPRJ_EQPMT_ACT_COST_FC          => null
14292                     ,X_SUBPRJ_EQPMT_ACT_COST_PC          => null
14293                     ,X_SUBPRJ_OTH_ETC_COST_TC            => null
14294                     ,X_SUBPRJ_OTH_ETC_COST_FC            => null
14295                     ,X_SUBPRJ_OTH_ETC_COST_PC            => null
14296                     ,X_SUBPRJ_PPL_ETC_COST_TC            => null
14297                     ,X_SUBPRJ_PPL_ETC_COST_FC            => null
14298                     ,X_SUBPRJ_PPL_ETC_COST_PC            => null
14299                     ,X_SUBPRJ_EQPMT_ETC_COST_TC          => null
14300                     ,X_SUBPRJ_EQPMT_ETC_COST_FC          => null
14301                     ,X_SUBPRJ_EQPMT_ETC_COST_PC          => null
14302                     ,X_SUBPRJ_EARNED_VALUE               => null
14303                     ,X_CURRENT_FLAG                      => 'Y' -- /*  Bug # 3755089. */
14304             ,X_PROJFUNC_COST_RATE_TYPE                   => null
14305             ,X_PROJFUNC_COST_EXCHANGE_RATE               => null
14306           --  ,X_PROJFUNC_COST_RATE_DATE_TYPE              => null
14307             ,X_PROJFUNC_COST_RATE_DATE                   => null
14308             ,X_PROJ_COST_RATE_TYPE                       => null
14309             ,X_PROJ_COST_EXCHANGE_RATE                   => null
14310           --  ,X_PROJ_COST_RATE_DATE_TYPE                  => null
14311             ,X_PROJ_COST_RATE_DATE                       => null
14312             ,X_TXN_CURRENCY_CODE                         => null
14313             ,X_PROG_PA_PERIOD_NAME                       => PA_PROGRESS_UTILS.Prog_Get_Pa_Period_Name(l_as_of_date)  --maansari5/11
14314             ,X_PROG_GL_PERIOD_NAME                       => PA_PROGRESS_UTILS.Prog_Get_gl_Period_Name(l_as_of_date)  --maansari5/11
14315             ,X_OTH_QUANTITY_to_date                              => null   --maansari5/9
14316             ,X_OTH_ETC_QUANTITY                          => null
14317 --bug 3621404
14318                 ,X_OTH_ACT_RAWCOST_TO_DATE_TC               => null
14319                 ,X_OTH_ACT_RAWCOST_TO_DATE_FC               => null
14320                 ,X_OTH_ACT_RAWCOST_TO_DATE_PC           => null
14321                 ,X_OTH_ETC_RAWCOST_TC           => null
14322                 ,X_OTH_ETC_RAWCOST_FC           => null
14323                 ,X_OTH_ETC_RAWCOST_PC           => null
14324                 ,X_PPL_ACT_RAWCOST_TO_DATE_TC   => null
14325                 ,X_PPL_ACT_RAWCOST_TO_DATE_FC   => null
14326                 ,X_PPL_ACT_RAWCOST_TO_DATE_PC   => null
14327                 ,X_PPL_ETC_RAWCOST_TC           => null
14328                 ,X_PPL_ETC_RAWCOST_FC           => null
14329                 ,X_PPL_ETC_RAWCOST_PC           => null
14330                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_TC   => null
14331                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_FC         => null
14332                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_PC         => null
14333                 ,X_EQPMT_ETC_RAWCOST_TC         => null
14334                 ,X_EQPMT_ETC_RAWCOST_FC         => null
14335                 ,X_EQPMT_ETC_RAWCOST_PC         => null
14336                 ,X_SP_OTH_ACT_RAWCOST_TODATE_TC    => null
14337                 ,X_SP_OTH_ACT_RAWCOST_TODATE_FC    => null
14338                 ,X_SP_OTH_ACT_RAWCOST_TODATE_PC    => null
14339                 ,X_SUBPRJ_PPL_ACT_RAWCOST_TC       => null
14340                 ,X_SUBPRJ_PPL_ACT_RAWCOST_FC       => null
14341                 ,X_SUBPRJ_PPL_ACT_RAWCOST_PC       => null
14342                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_TC     => null
14343                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_FC     => null
14344                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_PC     => null
14345                 ,X_SUBPRJ_OTH_ETC_RAWCOST_TC       => null
14346                 ,X_SUBPRJ_OTH_ETC_RAWCOST_FC       => null
14347                 ,X_SUBPRJ_OTH_ETC_RAWCOST_PC       => null
14348                 ,X_SUBPRJ_PPL_ETC_RAWCOST_TC       => null
14349                 ,X_SUBPRJ_PPL_ETC_RAWCOST_FC       => null
14350                 ,X_SUBPRJ_PPL_ETC_RAWCOST_PC       => null
14351                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_TC     => null
14352                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_FC     => null
14353                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_PC     => null
14354 );
14355 
14356    end if; -- if cur_progress%found then
14357    -- If working progress record does not exist.
14358 
14359     /* Start code to fix issue in bug # 3755089. */
14360 
14361     if cur_progress%isopen then
14362 
14363     /* End code to fix issue in bug # 3755089. */
14364 
14365         close cur_progress;
14366 
14367     /* Start code to fix issue in bug # 3755089. */
14368 
14369     end if;
14370 
14371     /* End code to fix issue in bug # 3755089. */
14372 
14373   end if; -- If workplan versioning is enabled for the project.
14374 
14375 
14376   -- end if;--IF   Bug 3856161 (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14377   END IF; -- Bug 3856161  ( (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14378 
14379 
14380     IF p_object_type = 'PA_TASKS' THEN-- Bug 4498610 : Added IF
14381     -- Bug 3976633 : Added cursor cur_progress_exists
14382     OPEN cur_progress_exists (p_project_id, l_task_id, p_structure_version_id, l_version_enabled);
14383     FETCH cur_progress_exists INTO l_progress_exists;
14384     CLOSE cur_progress_exists;
14385 
14386     IF  NVL(l_progress_exists, 'N') = 'Y' THEN -- Bug 3976633
14387 
14388     --maansari5/11
14389    OPEN c_get_task_weight_method;
14390    FETCH c_get_task_weight_method INTO l_rollup_method;
14391    CLOSE c_get_task_weight_method;
14392 
14393 
14394 
14395    -- Call rollup_progress_pvt api for this task.
14396    IF l_debug_mode  = 'Y' THEN
14397     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling Rollup For Tasks', x_Log_Level=> 3);
14398     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_id='||l_task_id, x_Log_Level=> 3);
14399     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_task_ver_id='||p_task_ver_id, x_Log_Level=> 3);
14400     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_method='||l_rollup_method, x_Log_Level=> 3);
14401     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_as_of_date='||l_rollup_as_of_date, x_Log_Level=> 3);
14402     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_as_of_date='||l_rollup_as_of_date, x_Log_Level=> 3);
14403    END IF;
14404 
14405    -- 4591321 : Always call populate_pji_tab_for_plan
14406                  pa_progress_pub.populate_pji_tab_for_plan(
14407                         p_init_msg_list         => FND_API.G_FALSE,
14408                         p_project_id            => p_project_id,
14409                         p_structure_version_id  => p_structure_version_id,
14410                         p_baselined_str_ver_id  => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id),
14411                         p_structure_type        => 'WORKPLAN',
14412                         x_return_status         => l_return_status,
14413                         x_msg_count             => l_msg_count,
14414                         x_msg_data              => l_msg_data
14415                         );
14416 
14417                  IF  l_return_status <> 'S' THEN
14418                     RAISE  FND_API.G_EXC_ERROR;
14419                  END IF;
14420 
14421     -- Bug 3861259 End
14422 
14423 
14424                 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
14425                  p_init_msg_list             => p_init_msg_list
14426                 ,p_commit                    => p_commit
14427                 ,p_validate_only             => p_validate_only
14428                 ,p_project_id                => p_project_id
14429                 ,p_structure_version_id      => p_structure_version_id
14430                 ,p_calling_module            => p_calling_module --BUG 3919800, rtarway
14431            --maansari5/10
14432                 ,p_object_type               => p_object_type
14433                 ,p_object_id                 => l_task_id
14434                 ,p_object_version_id         => p_task_ver_id
14435                 ,p_task_version_id           => p_task_ver_id
14436            --maansari5/10
14437                 ,p_wp_rollup_method          => l_rollup_method --maansari 5/11
14438                 ,p_structure_type            => 'WORKPLAN'      --maansari 5/11
14439                 ,p_as_of_date                => l_rollup_as_of_date
14440                 ,x_return_status             => l_return_status
14441                 ,x_msg_count                 => l_msg_count
14442                 ,x_msg_data                  => l_msg_data);
14443     END IF ;--IF    NVL(l_progress_exists, 'N') = 'Y' THEN
14444     END IF;-- p_object_type = 'PA_TASKS' THEN-- Bug 4498610 : Added END IF
14445   END IF; -- if (p_object_type ='PA_TASKS') then
14446 
14447     -- Code to insert progress records nto the pa_progress_rollup_table.
14448 
14449     /* END: The above actions are to be performed only when p_object_type = 'PA_TASKS'. */
14450 
14451 
14452     /* BEGIN: The following actions are to be performed only when p_object_type = 'PA_ASSIGNMENTS'. */
14453 
14454    IF (p_object_type ='PA_ASSIGNMENTS') then
14455 
14456     -- Call rollup API only is there is a working progress for the given task_version and
14457         -- structure_version. The as_of_date will then be the max(as_of_date() of the working progress.
14458      IF l_debug_mode  = 'Y' THEN
14459         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Entered For Assignments', x_Log_Level=> 3);
14460     END IF;
14461 
14462         --bug 4105720,  get the task id
14463     OPEN c_proj_element_id;
14464     FETCH c_proj_element_id INTO l_task_id;
14465     CLOSE c_proj_element_id;
14466 
14467     -- Bug 3976633 : Added cursor cur_progress_exists
14468     OPEN cur_progress_exists (p_project_id, l_task_id, p_structure_version_id, l_version_enabled);
14469     FETCH cur_progress_exists INTO l_progress_exists;
14470     CLOSE cur_progress_exists;
14471 
14472      IF l_debug_mode  = 'Y' THEN
14473         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_id '||l_task_id, x_Log_Level=> 3);
14474         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_progress_exists '||l_progress_exists, x_Log_Level=> 3);
14475     END IF;
14476 
14477     IF  NVL(l_progress_exists, 'N') = 'Y' THEN -- Bug 3976633
14478 
14479 
14480     open c_max_as_of_date_wkg;
14481     fetch c_max_as_of_date_wkg into l_rollup_as_of_date;
14482     --if (c_max_as_of_date_wkg%FOUND) then Bug 3856161
14483     IF l_rollup_as_of_date IS NOT NULL THEN
14484 
14485     --maansari5/11
14486             OPEN c_get_task_weight_method;
14487             FETCH c_get_task_weight_method INTO l_rollup_method;
14488             CLOSE c_get_task_weight_method;
14489 
14490                 --bug 4105720, moved this code above
14491                 /*OPEN c_proj_element_id;
14492                 FETCH c_proj_element_id INTO l_task_id;
14493                 CLOSE c_proj_element_id;*/
14494 
14495      IF l_debug_mode  = 'Y' THEN
14496         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling Rollup For Assignments', x_Log_Level=> 3);
14497         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_task_id='||l_task_id, x_Log_Level=> 3);
14498         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'p_task_ver_id='||p_task_ver_id, x_Log_Level=> 3);
14499         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_method='||l_rollup_method, x_Log_Level=> 3);
14500         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_as_of_date='||l_rollup_as_of_date, x_Log_Level=> 3);
14501         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'l_rollup_as_of_date='||l_rollup_as_of_date, x_Log_Level=> 3);
14502     END IF;
14503    -- 4591321 : Always call populate_pji_tab_for_plan
14504 
14505             pa_progress_pub.populate_pji_tab_for_plan(
14506                         p_init_msg_list         => FND_API.G_FALSE,
14507                         --p_calling_module        => p_calling_module,
14508                         p_project_id            => p_project_id,
14509                         p_structure_version_id  => p_structure_version_id,
14510                         p_baselined_str_ver_id  => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id),
14511                         p_structure_type        => 'WORKPLAN',
14512                         x_return_status         => l_return_status,
14513                         x_msg_count             => l_msg_count,
14514                         x_msg_data              => l_msg_data
14515                         );
14516                  IF  l_return_status <> 'S' THEN
14517                     RAISE  FND_API.G_EXC_ERROR;
14518                  END IF;
14519     -- Bug 3861259 End
14520 
14521 
14522 
14523         -- Call rollup_progress_pvt api for this task or assignment.
14524                 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
14525                  p_init_msg_list             => p_init_msg_list
14526                 ,p_commit                    => p_commit
14527                 ,p_validate_only             => p_validate_only
14528                 ,p_project_id                => p_project_id
14529                 ,p_structure_version_id      => p_structure_version_id
14530                 ,p_calling_module            => p_calling_module--BUG 3919800, rtarway
14531            --maansari5/10
14532                 ,p_object_type               => 'PA_TASKS' -- p_object_type Bug 3856161
14533                 ,p_object_id                 => l_task_id
14534                 ,p_object_version_id         => p_task_ver_id
14535                 ,p_task_version_id           => p_task_ver_id
14536            --maansari5/10
14537             ,p_wp_rollup_method          => l_rollup_method --maansari 5/11
14538                 ,p_structure_type            => 'WORKPLAN'      --maansari 5/11
14539                 ,p_as_of_date                => l_rollup_as_of_date
14540                 ,x_return_status             => l_return_status
14541                 ,x_msg_count                 => l_msg_count
14542                 ,x_msg_data                  => l_msg_data);
14543            -- Code to insert progress records nto the pa_progress_rollup_table.
14544 
14545     end if;
14546         close c_max_as_of_date_wkg;
14547     END IF; --   IF     NVL(l_progress_exists, 'N') = 'Y'
14548     end if;
14549 
14550     /* END: The above actions are to be performed only when p_object_type = 'PA_ASSIGNMENTS'. */
14551 
14552       if l_return_status <> FND_API.G_RET_STS_SUCCESS then
14553        x_msg_count := FND_MSG_PUB.count_msg;
14554        if x_msg_count = 1 then
14555          pa_interface_utils_pub.get_messages
14556          (p_encoded        => FND_API.G_TRUE,
14557           p_msg_index      => 1,
14558           p_msg_count      => l_msg_count,
14559           p_msg_data       => l_msg_data,
14560           p_data           => l_data,
14561           p_msg_index_out  => l_msg_index_out);
14562           x_msg_data := l_data;
14563        end if;
14564        raise FND_API.G_EXC_ERROR;
14565      end if;
14566 
14567     x_return_status := FND_API.G_RET_STS_SUCCESS;
14568 
14569 EXCEPTION
14570     WHEN FND_API.G_EXC_ERROR THEN
14571       IF (p_commit = FND_API.G_TRUE) THEN
14572         ROLLBACK to UPDATE_task_det_sch;
14573       END IF;
14574       x_msg_count := FND_MSG_PUB.count_msg;
14575       x_return_status := FND_API.G_RET_STS_ERROR;
14576     WHEN OTHERS THEN
14577       IF (p_commit = FND_API.G_TRUE) THEN
14578         ROLLBACK to UPDATE_task_det_sch;
14579       END IF;
14580       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14581       x_msg_count := FND_MSG_PUB.count_msg;
14582       --put message
14583       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
14584                               p_procedure_name => 'update_task_det_sch_info',
14585                               p_error_text     => SUBSTRB(SQLERRM,1,240));
14586       RAISE;
14587 
14588 END update_task_det_sch_info;
14589 
14590 
14591 -- API name                      : Copy_Tasks_In_Bulk
14592 -- Type                          : Public procedure
14593 -- Pre-reqs                      : None
14594 -- Return Value                  : N/A
14595 -- Prameters
14596 -- p_api_version          IN    NUMBER      N   Not Null    1.0
14597 -- p_init_msg_list    IN    VARCHAR2    N   Not Null    FND_API.TRUE
14598 -- p_commit               IN    VARCHAR2    N   Not Null    FND_API.G_FALSE
14599 -- p_validate_only    IN    VARCHAR2    N   Not Null    FND_API.G_TRUE
14600 -- p_validation_level     IN    NUMBER      N   Null        FND_API.G_VALID_LEVEL_FULL
14601 -- p_calling_module   IN    VARCHAR2    N   Null        SELF_SERVICE
14602 -- p_debug_mode           IN    VARCHAR2    N   Null        N
14603 -- p_max_msg_count        IN    NUMBER      N   NULL        PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14604 -- p_src_project_id       IN  NUMBER        N   NULL        PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14605 -- p_src_project_name     IN  VARCHAR2      N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14606 -- p_src_structre_id      IN  NUMBER        N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14607 -- p_src_structure_name   IN  VARCHAR2      N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14608 -- p_src_structure_version_id   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14609 -- p_src_structure_version_name IN  VARCHAR2 N  NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14610 -- p_src_task_version_id        IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14611 -- p_src_task_name  IN  VARCHAR2    N   NULL            PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14612 -- p_dest_structure_version_id  IN  NUMBER  N   NOT NULL
14613 -- p_dest_task_version_id   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14614 -- p_dest_project_id        IN NUMBER NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14615 -- p_copy_option            IN  VARCHAR2    N   NOT NULL
14616 -- p_peer_or_sub            IN  VARCHAR2    N   NOT NULL
14617 -- x_return_status          OUT     VARCHAR2    N   NULL
14618 -- x_msg_count              OUT     NUMBER      N   NULL
14619 -- x_msg_data               OUT     VARCHAR2    N   NULL
14620 --
14621 --  History
14622 --
14623 --  22-FEB-05                Created   avaithia
14624 --
14625 --
14626 
14627 PROCEDURE Copy_Tasks_In_Bulk
14628 (
14629  p_api_version            IN    NUMBER  :=1.0,
14630  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
14631  p_commit                 IN    VARCHAR2    :=FND_API.G_FALSE,
14632  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
14633  p_validation_level   IN    NUMBER      :=FND_API.G_VALID_LEVEL_FULL,
14634  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
14635  p_debug_mode             IN    VARCHAR2    :='N',
14636  p_max_msg_count          IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14637  p_src_project_id         IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14638  p_src_project_name       IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
14639  p_src_structure_id       IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14640  p_src_structure_name     IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
14641  p_src_structure_version_id IN NUMBER       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14642  p_src_structure_version_name   IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
14643  p_src_task_version_id_tbl  IN   SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
14644  p_src_task_name          IN    VARCHAR2     :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
14645  p_dest_structure_version_id    IN  NUMBER,
14646  p_dest_task_version_id IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14647  p_dest_project_id      IN  NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
14648  p_called_from_api      IN    VARCHAR2    := 'ABCD',
14649  p_copy_option        IN    VARCHAR2,
14650  p_peer_or_sub        IN    VARCHAR2,
14651  p_prefix             IN    VARCHAR2,
14652  p_structure_type              IN              VARCHAR2        :='WORKPLAN',
14653  p_cp_dependency_flag          IN              VARCHAR2        :='N',
14654  p_cp_deliverable_asso_flag    IN              VARCHAR2        :='N',
14655  p_cp_tk_assignments_flag      IN              VARCHAR2        :='N',
14656  p_cp_people_flag              IN              VARCHAR2        :='N',
14657  p_cp_financial_elem_flag      IN              VARCHAR2        :='N',
14658  p_cp_material_items_flag      IN              VARCHAR2        :='N',
14659  p_cp_equipment_flag           IN              VARCHAR2        :='N',
14660  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
14661  x_msg_count              OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
14662  x_msg_data               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
14663 ) IS
14664    l_api_name                      CONSTANT VARCHAR(30) := 'COPY_TASKS_IN_BULK';
14665    l_api_version                   CONSTANT NUMBER      := 1.0;
14666 
14667    l_return_status                 VARCHAR2(1);
14668    l_msg_count                     NUMBER;
14669    l_msg_data                      VARCHAR2(2000);
14670    l_data                          VARCHAR2(2000);
14671    l_msg_index_out                 NUMBER;
14672    l_error_msg_code                     VARCHAR2(250);
14673 
14674    l_src_project_id       NUMBER;
14675    l_src_structure_id         NUMBER;
14676    l_src_structure_version_id   NUMBER;
14677 
14678    l_dest_project_id       NUMBER ;
14679    l_task_unpub_ver_status_code  PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
14680    l_dest_structure_id    NUMBER;
14681    l_template_flag        VARCHAR2(1);
14682    l_fin_task_flag        VARCHAR2(1);
14683 
14684    l_shared               VARCHAR2(1);
14685    l_ver_enabled          VARCHAR2(1);
14686    l_copy_external_flag   VARCHAR2(1);
14687 
14688    l_delete_project_allowed      VARCHAR2(1);
14689    l_update_proj_num_allowed      VARCHAR2(1);
14690    l_update_proj_name_allowed    VARCHAR2(1);
14691    l_update_proj_desc_allowed    VARCHAR2(1);
14692    l_update_proj_dates_allowed    VARCHAR2(1);
14693    l_update_proj_status_allowed  VARCHAR2(1);
14694    l_update_proj_manager_allowed  VARCHAR2(1);
14695    l_update_proj_org_allowed      VARCHAR2(1);
14696    l_add_task_allowed            VARCHAR2(1);
14697    l_delete_task_allowed          VARCHAR2(1);
14698    l_update_task_num_allowed      VARCHAR2(1);
14699    l_update_task_name_allowed    VARCHAR2(1);
14700    l_update_task_dates_allowed    VARCHAR2(1);
14701    l_update_task_desc_allowed    VARCHAR2(1);
14702    l_update_parent_task_allowed  VARCHAR2(1);
14703    l_update_task_org_allowed      VARCHAR2(1);
14704 
14705    l_err_code         NUMBER        := 0;
14706    l_err_stack        VARCHAR2(200) := NULL;
14707    l_err_stage        VARCHAR2(200) := NULL;
14708 
14709    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
14710 
14711   CURSOR cur_proj_is_template(c_project_id NUMBER)
14712   IS     select 'Y'
14713            from pa_projects_all
14714           where project_id = c_project_id
14715             and template_flag = 'Y';
14716 
14717    CURSOR cur_dest_proj_id
14718    IS
14719      SELECT project_id
14720        FROM pa_proj_element_versions
14721       WHERE element_version_id = p_dest_task_version_id;
14722 
14723     CURSOR cur_struc_id( x_structure_version_id NUMBER, x_project_id NUMBER )
14724     IS
14725     SELECT proj_element_id
14726      FROM pa_proj_elem_ver_structure
14727     WHERE element_version_id = x_structure_version_id
14728     AND project_id = x_project_id;
14729 
14730    CURSOR get_product_code ( c_project_id NUMBER ) IS
14731    SELECT pm_product_code
14732    FROM PA_PROJECTS_ALL
14733    WHERE project_id = c_project_id;
14734 BEGIN
14735     pa_debug.init_err_stack ('PA_TASK_PUB1.COPY_TASKS_IN_BULK');
14736     x_return_status :=  FND_API.G_RET_STS_SUCCESS;
14737     IF (p_debug_mode = 'Y') THEN
14738       pa_debug.debug('PA_TASK_PUB1.COPY_TASKS_IN_BULK begin');
14739     END IF;
14740 
14741     IF (p_commit = FND_API.G_TRUE) THEN
14742       savepoint copy_tasks_in_bulk;
14743     END IF;
14744 
14745     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
14746       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14747     END IF;
14748 
14749     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
14750       FND_MSG_PUB.initialize;
14751     END IF;
14752 
14753 IF p_calling_module = 'SELF_SERVICE' THEN
14754 
14755         /*Product Code related validation*/
14756         /* This is not needed as now we are passing
14757            Destination Project ID from Self Service (TaskLiteVORowImpl.java - copyTasks method)
14758 
14759     OPEN cur_dest_proj_id;
14760     FETCH cur_dest_proj_id into l_dest_project_id;
14761     CLOSE cur_dest_proj_id;
14762         */
14763         l_dest_project_id := p_dest_project_id ;
14764 
14765         OPEN cur_proj_is_template(l_dest_project_id) ;
14766         FETCH cur_proj_is_template into l_template_flag ;
14767         CLOSE cur_proj_is_template;
14768 
14769         OPEN get_product_code(l_dest_project_id);
14770         FETCH get_product_code INTO l_pm_product_code;
14771         CLOSE get_product_code;
14772 
14773         If l_pm_product_code IS NOT NULL THEN
14774 
14775           pa_pm_controls.Get_Project_actions_allowed
14776                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
14777                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
14778                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
14779                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
14780                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
14781                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
14782                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
14783                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
14784                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
14785                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
14786                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
14787                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
14788                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
14789                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
14790                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
14791                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
14792                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
14793                  P_ERROR_CODE                 => l_err_code,
14794                  P_ERROR_STACK                    => l_err_stack,
14795                  P_ERROR_STAGE                => l_err_stage );
14796 
14797            IF l_err_code <> 0 THEN
14798                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14799                                  p_msg_name       => l_err_stage);
14800            END IF;
14801 
14802            IF l_add_task_allowed = 'N' THEN
14803                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14804                                    p_msg_name       => 'PA_PR_PM_CANNOT_COPY');
14805                 raise FND_API.G_EXC_ERROR;
14806            END IF;
14807 
14808         END IF;
14809 
14810     /*Project Name to ID validation*/
14811 /* All Name to ID validations can be skipped in case of SS
14812       IF ((p_src_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14813           (p_src_project_name IS NOT NULL)) OR
14814          ((p_src_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
14815           (p_src_project_id IS NOT NULL)) THEN
14816         --Call Check API.
14817           PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
14818             p_project_name   => p_src_project_name,
14819             p_project_id     => p_src_project_id,
14820             x_project_id     => l_src_project_id,
14821             x_return_status  => l_return_status,
14822             x_error_msg_code => l_error_msg_code);
14823 
14824            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14825               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14826                                    p_msg_name => l_error_msg_code);
14827            END IF;
14828        END IF;
14829 */
14830       /*Structure Name to ID Validation*/
14831 /*
14832       IF ((p_src_structure_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14833           (p_src_structure_name IS NOT NULL)) OR
14834          ((p_src_structure_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
14835           (p_src_structure_id IS NOT NULL)) THEN
14836         --Call Check API.
14837           PA_PROJECT_STRUCTURE_UTILS.Structure_Name_Or_Id
14838                            (
14839                               p_project_id             => l_src_project_id
14840                              ,p_structure_name         => p_src_structure_name
14841                              ,p_structure_id           => p_src_structure_id
14842                              ,x_structure_id           => l_src_structure_id
14843                              ,x_return_status          => l_return_status
14844                              ,x_error_message_code     => l_error_msg_code
14845                             );
14846 
14847            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14848               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14849                                    p_msg_name => l_error_msg_code);
14850            END IF;
14851       END IF;
14852 */
14853       /*Structure Version Name to ID conversion*/
14854 /*
14855       IF ((p_src_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
14856           (p_src_structure_version_name IS NOT NULL)) OR
14857          ((p_src_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
14858           (p_src_structure_version_id IS NOT NULL)) THEN
14859         --Call Check API.
14860            l_src_structure_version_id := p_src_structure_version_id;
14861           PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id
14862                                 (
14863                               p_structure_id            => l_src_structure_id
14864                              ,p_structure_version_name  => p_src_structure_version_name
14865                              ,p_structure_version_id    => p_src_structure_version_id
14866                              ,x_structure_version_id    => l_src_structure_version_id
14867                              ,x_return_status           => l_return_status
14868                              ,x_error_message_code      => l_error_msg_code
14869                             );
14870 
14871            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14872               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14873                                    p_msg_name => l_error_msg_code);
14874            END IF;
14875 
14876       END IF;
14877 */
14878       /*Mandatory Params check*/
14879       IF (p_src_project_id IS NULL OR p_src_structure_id IS NULL OR
14880        p_src_structure_version_id IS NULL )
14881       THEN
14882 --        dbms_output.put_line( 'Project Id '||l_src_project_id );
14883 --        dbms_output.put_line( 'Structure Id '||l_src_structure_id );
14884 --        dbms_output.put_line( 'Structure Ver Id '||l_src_structure_version_id );
14885 
14886           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14887                                 p_msg_name       => 'PA_PS_NOT_ENOUGH_PARAMS' );
14888            x_msg_data := ' BULK API : PA_PS_NOT_ENOUGH_PARAMS';
14889            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14890            RAISE  FND_API.G_EXC_ERROR;
14891       END IF;
14892 
14893     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
14894       x_msg_count := FND_MSG_PUB.count_msg;
14895       IF x_msg_count = 1 then
14896          pa_interface_utils_pub.get_messages
14897          (p_encoded        => FND_API.G_TRUE,
14898           p_msg_index      => 1,
14899           p_msg_count      => l_msg_count,
14900           p_msg_data       => l_msg_data,
14901           p_data           => l_data,
14902           p_msg_index_out  => l_msg_index_out);
14903          x_msg_data := l_data;
14904       END IF;
14905       raise FND_API.G_EXC_ERROR;
14906     END IF;
14907 
14908     IF p_copy_option NOT IN( 'PA_ENTIRE_VERSION', 'PA_TASK_ONLY', 'PA_TASK_SUBTASK'  )
14909     THEN
14910 
14911         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
14912                              p_msg_name       => 'PA_PS_WRONG_COPY_OPTION' );
14913         x_msg_data := 'PA_PS_WRONG_COPY_OPTION';
14914         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14915         RAISE  FND_API.G_EXC_ERROR;
14916     END IF;
14917 
14918     /*====================================================================
14919      ALL BASIC VALIDATIONS COMPLETE RELEVANT TO VALIDITY OF PASSED PARAMS
14920      ====================================================================*/
14921 
14922    /* Derive the Destination Structure ID (ProjElementId) from the passed pa_dest_structure_version_id*/
14923    OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id);
14924    FETCH cur_struc_id into l_dest_structure_id ;
14925    CLOSE cur_struc_id ;
14926 
14927    /*4201927 : Derive values for sharing enabled and Versioning Enabled */
14928        l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
14929                                                   l_dest_project_id);
14930 
14931        l_ver_enabled :=
14932 PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id);
14933 
14934    /* Derive the value for Copy External Flag*/
14935     IF p_src_project_id = l_dest_project_id
14936     THEN
14937         l_copy_external_flag := 'N';
14938     ELSE
14939         l_copy_external_flag := 'Y';
14940     ENd IF;
14941 
14942    /* Copied from Copy_Task API : task version status changes
14943       This need not be executed for each and every task */
14944 
14945 
14946    IF (l_template_flag = 'N') THEN
14947           --check if structure is shared
14948           --  if shared, check if versioned
14949           --    'WORKING' if versioned; 'PUBLISHED' if not
14950           --  if split, check if 'FINANCIAL'
14951           --    'PUBLISHED' if financial
14952           --    check if versioned
14953           --    'WORKING' if versioend; 'PUBLISHED' if not
14954           IF ('Y' = l_shared) THEN
14955             IF ('Y' = l_ver_enabled) THEN
14956               l_task_unpub_ver_status_code := 'WORKING';
14957             ELSE
14958               l_task_unpub_ver_status_code := 'PUBLISHED';
14959             END IF;
14960           ELSE --split
14961             IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_dest_structure_id,'FINANCIAL') AND
14962                 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_dest_structure_id,'WORKPLAN')) THEN
14963               l_task_unpub_ver_status_code := 'PUBLISHED';
14964             ELSE --workplan only
14965               IF ('Y' = l_ver_enabled) THEN
14966                 l_task_unpub_ver_status_code := 'WORKING';
14967               ELSE
14968                 l_task_unpub_ver_status_code := 'PUBLISHED';
14969               END IF;
14970             END IF;
14971           END IF;
14972    ELSE
14973           l_task_unpub_ver_status_code := 'WORKING';
14974    END IF;
14975 
14976    /*Derive valie for the p_fin_task_flag*/
14977         IF p_structure_type = 'WORKPLAN'
14978         THEN
14979            IF
14980            PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) =
14981            'SHARE_FULL'
14982            THEN
14983               l_fin_task_flag := 'Y';
14984            ELSE
14985               l_fin_task_flag := 'N';
14986            END IF;
14987         ELSE
14988             l_fin_task_flag := 'Y';
14989         END IF;
14990 
14991     /*Now retrieve the task version id's passed in the form of array table from the UI
14992     and call the Copy Task API (singular version)*/
14993 
14994 
14995 IF nvl(p_src_task_version_id_tbl.LAST,0)>0 THEN
14996     FOR i IN p_src_task_version_id_tbl.FIRST..p_src_task_version_id_tbl.LAST LOOP
14997                PA_TASK_PUB1.Copy_Task(
14998            p_init_msg_list         => FND_API.G_FALSE,
14999                p_src_project_id                      => p_src_project_id,
15000                p_src_project_name                    => p_src_project_name,
15001                p_src_structure_id                    => p_src_structure_id ,
15002                p_src_structure_name                  => p_src_structure_name,
15003                p_src_structure_version_id            => p_src_structure_version_id ,
15004                p_src_structure_version_name          => p_src_structure_version_name,
15005                p_src_task_version_id                 => p_src_task_version_id_tbl(i),
15006                p_src_task_name                       => p_src_task_name,
15007                p_dest_structure_id           => l_dest_structure_id,
15008                p_dest_structure_version_id           => p_dest_structure_version_id,
15009                p_dest_task_version_id                => p_dest_task_version_id,
15010                p_dest_project_id                     => l_dest_project_id,
15011                p_task_unpub_ver_status_code          => l_task_unpub_ver_status_code,
15012                p_fin_task_flag                       => l_fin_task_flag,
15013                p_sharing_enabled                     => l_shared,
15014                p_versioning_enabled                  => l_ver_enabled,
15015                p_copy_external_flag                  => l_copy_external_flag,
15016                p_copy_option                         => p_copy_option,
15017                p_peer_or_sub                         => p_peer_or_sub,
15018                p_prefix                              => p_prefix,
15019                p_structure_type                      => p_structure_type,
15020                p_cp_dependency_flag                  => p_cp_dependency_flag,
15021                p_cp_deliverable_asso_flag            => p_cp_deliverable_asso_flag,
15022                p_cp_tk_assignments_flag              => p_cp_tk_assignments_flag,
15023                p_cp_people_flag                      => p_cp_people_flag,
15024                p_cp_financial_elem_flag              => p_cp_financial_elem_flag,
15025                p_cp_material_items_flag              => p_cp_material_items_flag,
15026                p_cp_equipment_flag                   => p_cp_equipment_flag,
15027                p_called_from_bulk_api                => 'Y',
15028                x_return_status                       => x_return_status,
15029                x_msg_count                           => x_msg_count,
15030                x_msg_data                            => x_msg_data
15031                );
15032                if(x_return_status <> FND_API.G_RET_STS_SUCCESS)
15033                then
15034            RAISE FND_API.G_EXC_ERROR ;
15035                End if;
15036     END LOOP;
15037 
15038  END IF;
15039 
15040 END IF; /*End If Calling Module is self service*/
15041     IF (p_commit = FND_API.G_TRUE) THEN
15042       COMMIT;
15043     END IF;
15044 EXCEPTION
15045     when FND_API.G_EXC_ERROR then
15046       if p_commit = FND_API.G_TRUE then
15047          rollback to Copy_Tasks_in_bulk;
15048       end if;
15049       x_return_status := FND_API.G_RET_STS_ERROR;
15050       x_msg_count := Fnd_Msg_Pub.count_msg;
15051      IF x_msg_count = 1 AND x_msg_data IS NULL
15052       THEN
15053           Pa_Interface_Utils_Pub.get_messages
15054               ( p_encoded        => Fnd_Api.G_TRUE
15055               , p_msg_index      => 1
15056               , p_msg_count      => l_msg_count
15057               , p_msg_data       => l_msg_data
15058               , p_data           => l_data
15059               , p_msg_index_out  => l_msg_index_out);
15060        END IF;
15061        x_msg_data := l_data;
15062     when FND_API.G_EXC_UNEXPECTED_ERROR then
15063       if p_commit = FND_API.G_TRUE then
15064          rollback to Copy_Tasks_in_bulk;
15065       end if;
15066       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15067       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15068                               p_procedure_name => 'COPY_TASKS_IN_BULK',
15069                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15070     when OTHERS then
15071       if p_commit = FND_API.G_TRUE then
15072          rollback to Copy_Tasks_in_bulk;
15073       end if;
15074       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15075       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15076                               p_procedure_name => 'COPY_TASKS_IN_BULK',
15077                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15078       raise;
15079 
15080 END Copy_Tasks_In_Bulk;
15081 
15082 --- API name                      : MOVE_TASK_VERSIONS_IN_BULK
15083 -- Type                          : Public procedure
15084 -- Pre-reqs                      : None
15085 -- Return Value                  : N/A
15086 -- Prameters
15087 -- p_api_version          IN    NUMBER      N   Not Null    1.0
15088 -- p_init_msg_list        IN    VARCHAR2    N   Not Null    FND_API.TRUE
15089 -- p_commit               IN    VARCHAR2    N   Not Null    FND_API.G_FALSE
15090 -- p_validate_only        IN    VARCHAR2    N   Not Null    FND_API.G_TRUE
15091 -- p_validation_level     IN    NUMBER      N   Null        FND_API.G_VALID_LEVEL_FULL
15092 -- p_calling_module       IN    VARCHAR2    N   Null        SELF_SERVICE
15093 -- p_debug_mode           IN    VARCHAR2    N   Null        N
15094 -- p_max_msg_count        IN    NUMBER      N   NULL        PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15095 -- p_structure_version_id IN    NUMBER      N   NULL        PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15096 -- p_task_version_id_tbl  IN     SYSTEM.PA_NUM_TBL_TYPE N NOT NULL  SYSTEM.PA_NUM_TBL_TYPE()
15097 -- p_ref_task_version_id  IN     NUMBER     N   Not Null
15098 -- p_ref_project_id       IN     NUMBER     N   Not Null /*4269830*/
15099 -- p_peer_or_sub          IN     VARCHAR2   N   Not Null
15100 -- p_record_version_number_tbl  IN  SYSTEM.PA_NUM_TBL_TYPE N NOT NULL  SYSTEM.PA_NUM_TBL_TYPE()
15101 -- x_return_status          OUT     VARCHAR2    N   NULL
15102 -- x_msg_count              OUT     NUMBER      N   NULL
15103 -- x_msg_data               OUT     VARCHAR2    N   NULL
15104 --
15105 --  History
15106 --
15107 --  23-FEB-05                Created   avaithia
15108 --  29-MAR-05                Modified  avaithia   4269830 : Performance Tuning done
15109 --
15110 PROCEDURE MOVE_TASK_VERSIONS_IN_BULK
15111    (     p_api_version           IN     NUMBER   := 1.0,
15112      p_init_msg_list         IN     VARCHAR2 := FND_API.G_TRUE,
15113      p_commit                IN     VARCHAR2 := FND_API.G_FALSE,
15114      p_validate_only         IN     VARCHAR2 := FND_API.G_TRUE,
15115      p_validation_level      IN     NUMBER   := FND_API.G_VALID_LEVEL_FULL,
15116      p_calling_module        IN     VARCHAR2 := 'SELF_SERVICE',
15117      p_debug_mode            IN     VARCHAR2 := 'N',
15118      p_max_msg_count         IN     NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15119      p_structure_version_id  IN     NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15120      p_task_version_id_tbl   IN     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15121      p_ref_task_version_id   IN     NUMBER,
15122      p_ref_project_id        IN     NUMBER, /*4269830*/
15123      p_peer_or_sub           IN     VARCHAR2,
15124      p_record_version_number_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15125      x_return_status                 OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
15126      x_msg_count                     OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
15127      x_msg_data                      OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15128 )
15129 IS
15130    l_api_name                      CONSTANT VARCHAR(30) := 'MOVE_TASK_VERSIONS_IN_BULK';
15131    l_api_version                   CONSTANT NUMBER      := 1.0;
15132 
15133    l_return_status                 VARCHAR2(1);
15134    l_msg_count                     NUMBER;
15135    l_msg_data                      VARCHAR2(2000);
15136    l_data                          VARCHAR2(2000);
15137    l_msg_index_out                 NUMBER;
15138    l_error_msg_code                     VARCHAR2(250);
15139 
15140    l_delete_project_allowed      VARCHAR2(1);
15141    l_update_proj_num_allowed      VARCHAR2(1);
15142    l_update_proj_name_allowed    VARCHAR2(1);
15143    l_update_proj_desc_allowed    VARCHAR2(1);
15144    l_update_proj_dates_allowed    VARCHAR2(1);
15145    l_update_proj_status_allowed  VARCHAR2(1);
15146    l_update_proj_manager_allowed  VARCHAR2(1);
15147    l_update_proj_org_allowed      VARCHAR2(1);
15148    l_add_task_allowed            VARCHAR2(1);
15149    l_delete_task_allowed          VARCHAR2(1);
15150    l_update_task_num_allowed      VARCHAR2(1);
15151    l_update_task_name_allowed    VARCHAR2(1);
15152    l_update_task_dates_allowed    VARCHAR2(1);
15153    l_update_task_desc_allowed    VARCHAR2(1);
15154    l_update_parent_task_allowed  VARCHAR2(1);
15155    l_update_task_org_allowed      VARCHAR2(1);
15156 
15157    ref_task_temp_version_id       NUMBER; -- Added new variable for Bug 6628382
15158 
15159    l_err_code         NUMBER        := 0;
15160    l_err_stack        VARCHAR2(200) := NULL;
15161    l_err_stage        VARCHAR2(200) := NULL;
15162 
15163    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
15164 
15165    l_cur_project_id      NUMBER;
15166    CURSOR cur_proj_id
15167    IS
15168      SELECT project_id
15169        FROM pa_proj_element_versions
15170       WHERE element_version_id = p_structure_version_id;
15171 
15172    CURSOR get_product_code ( c_project_id NUMBER ) IS
15173    SELECT pm_product_code
15174    FROM PA_PROJECTS_ALL
15175    WHERE project_id = c_project_id;
15176 
15177    /*4269830 : Performance Enhancements : Start */
15178     CURSOR cur_struc_type( c_structure_id NUMBER )
15179     IS
15180       SELECT 'Y'
15181         FROM pa_proj_structure_types ppst
15182             ,pa_structure_types pst
15183        WHERE ppst.proj_element_id = c_structure_id
15184          AND ppst.structure_type_id = pst.structure_type_id
15185          AND pst.structure_type_class_code = 'FINANCIAL' ;
15186 
15187     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
15188       select 'Y'
15189         from pa_proj_elem_ver_structure
15190        where proj_element_id = c_structure_id
15191          AND project_id = c_project_id
15192          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
15193 
15194    l_versioned      VARCHAR2(1) := 'N';
15195    l_shared         VARCHAR2(1) := 'N';
15196    l_sharing_code   VARCHAR2(30);
15197 
15198    l_task_version_id            NUMBER;
15199    l_structure_id               NUMBER;
15200    l_published_version          VARCHAR2(1);
15201    l_wp_type                    VARCHAR2(1);
15202    l_fin_type			VARCHAR2(1);
15203 
15204    l_weighting_basis_code       VARCHAR2(30);
15205    l_check_third_party_flag     VARCHAR2(1);
15206    l_dummy_char        VARCHAR2(1);
15207 
15208    /*4269830 : Performance Enhancements : End*/
15209 
15210 BEGIN
15211     pa_debug.init_err_stack ('PA_TASK_PUB1.MOVE_TASK_VERSIONS_IN_BULK');
15212 
15213     x_return_status :=  FND_API.G_RET_STS_SUCCESS ;
15214 
15215     IF (p_debug_mode = 'Y') THEN
15216       pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSIONS_IN_BULK begin');
15217     END IF;
15218 
15219     IF (p_commit = FND_API.G_TRUE) THEN
15220       savepoint MOVE_TASK_VERSIONS_IN_BULK ;
15221     END IF;
15222 
15223     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
15224       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15225     END IF;
15226 
15227     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
15228       FND_MSG_PUB.initialize;
15229     END IF;
15230     IF p_calling_module = 'SELF_SERVICE' THEN
15231 
15232         /*Product Code related validation*/
15233 
15234         /* 4269830 : This is not needed as now we are passing
15235            Destination Project ID from Self Service (TaskLiteVORowImpl.java - moveTasks method)
15236         OPEN cur_proj_id ;
15237         FETCH cur_proj_id into l_cur_project_id;
15238         CLOSE cur_proj_id;
15239          */
15240         l_cur_project_id := p_ref_project_id;
15241 
15242         OPEN get_product_code(l_cur_project_id);
15243         FETCH get_product_code INTO l_pm_product_code;
15244         CLOSE get_product_code;
15245 
15246         If l_pm_product_code IS NOT NULL THEN
15247                 pa_pm_controls.Get_Project_actions_allowed
15248                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
15249                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
15250                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
15251                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
15252                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
15253                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
15254                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
15255                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
15256                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
15257                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
15258                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
15259                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
15260                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
15261                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
15262                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
15263                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
15264                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
15265                  P_ERROR_CODE                 => l_err_code,
15266                  P_ERROR_STACK                    => l_err_stack,
15267                  P_ERROR_STAGE                => l_err_stage );
15268 
15269                  IF l_err_code <> 0 THEN
15270                      PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15271                                  p_msg_name       => l_err_stage);
15272                  END IF;
15273                  IF l_update_parent_task_allowed = 'N' THEN
15274                        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15275                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
15276                        raise FND_API.G_EXC_ERROR;
15277                  END IF;
15278         End If;
15279 
15280     End If; /* End if calling module is self service*/
15281 
15282     /*4269830 : Performance Enhancements
15283       1)Derive the variables l_shared , l_sharing_code ,l_wp_type,l_fin_type
15284         l_versioned,l_structure_id,l_published_version,l_weighting_basis_Code
15285         ONLY once in the BULK API and pass it as params to the Move Task Version API
15286      */
15287 
15288      l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_ref_project_id);
15289      l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_ref_project_id);
15290 
15291      -- Bug Fix 4764891.
15292      -- The following lines have the structure types usage messed up.
15293      -- Correcting the structure types which are passed to the get_struct_type_for_version.
15294      -- l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
15295      -- l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
15296 
15297      l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
15298      l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
15299 
15300      -- End of Bug Fix 4764891.
15301 
15302      l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_ref_project_id);
15303      l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_ref_project_id);
15304      l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(p_ref_project_id);
15305 
15306      IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
15307          l_task_version_id := p_task_version_id_tbl(1);
15308 
15309          SELECT proj_element_id INTO l_structure_id
15310          FROM pa_proj_element_versions
15311         WHERE element_version_id =  ( Select parent_structure_version_id
15312                                    from pa_proj_element_versions
15313                                   where element_version_id = l_task_version_id )
15314           AND object_type = 'PA_STRUCTURES';
15315         -----------------------------------------------------------
15316         OPEN cur_struc_type( l_structure_id );
15317         FETCH cur_struc_type INTO l_dummy_char;
15318 
15319         IF cur_struc_type%FOUND
15320         THEN
15321              --If structure has any published versions.
15322              l_published_version := 'N';
15323              OPEN cur_pub_versions( l_structure_id, p_ref_project_id );
15324              FETCH cur_pub_versions INTO l_published_version;
15325              CLOSE cur_pub_versions;
15326         END IF;
15327 
15328         CLOSE cur_struc_type;
15329         -----------------------------------------------------------
15330      END IF;  -- End If Atleast one task has been selected for moving
15331 
15332     /*4269830 : End*/
15333 
15334     /*Now retrieve the task version id's passed in the form of array table from the UI
15335     and call the Move Task API (singular version)*/
15336 
15337     ref_task_temp_version_id := p_ref_task_version_id; -- Bug 6628382
15338 
15339 IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
15340     FOR i IN p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
15341                PA_TASK_PUB1.Move_Task_Version(
15342                p_init_msg_list                       => FND_API.G_FALSE,
15343                p_structure_version_id                => p_structure_version_id,
15344                p_task_version_id                     => p_task_version_id_tbl(i),
15345                p_ref_task_version_id                 => ref_task_temp_version_id, --p_ref_task_version_id, -- Bug 6628382
15346                p_peer_or_sub                         => p_peer_or_sub,
15347                p_record_version_number               => p_record_version_number_tbl(i),
15348                /*======================================================================
15349                4269830 : New params introduced for Perf Enhancement: Start
15350                 *=====================================================================*/
15351                p_ref_project_id                      => p_ref_project_id,
15352 	       p_structure_id			     => l_structure_id,
15353 	       p_published_version		     => l_published_version,
15354 	       p_shared 			     => l_shared ,
15355 	       p_sharing_code 			     => l_sharing_code,
15356 	       p_versioned			     => l_versioned,
15357                p_wp_type			     => l_wp_type,
15358 	       p_fin_type			     => l_fin_type,
15359 	       p_weighting_basis_code	             => l_weighting_basis_code,
15360 	       p_check_third_party_flag              => l_check_third_party_flag,
15361                /*======================================================================
15362                4269830 : New params introduced for Perf Enhancement : End
15363                *======================================================================*/
15364                p_called_from_bulk_api                => 'Y',
15365                x_return_status                       => x_return_status,
15366                x_msg_count                           => x_msg_count,
15367                x_msg_data                            => x_msg_data
15368                );
15369                IF x_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
15370                    RAISE FND_API.G_EXC_ERROR ;
15371                END IF;
15372                ref_task_temp_version_id := p_task_version_id_tbl(i);   -- Bug 6628382
15373     END LOOP;
15374 
15375  END IF;
15376 
15377     IF (p_commit = FND_API.G_TRUE) THEN
15378       COMMIT;
15379     END IF;
15380 
15381 EXCEPTION
15382     when FND_API.G_EXC_ERROR then
15383       if p_commit = FND_API.G_TRUE then
15384          rollback to MOVE_TASK_VERSIONS_IN_BULK;
15385       end if;
15386       x_return_status := FND_API.G_RET_STS_ERROR;
15387       x_msg_count  := Fnd_Msg_Pub.count_msg;
15388 
15389       IF x_msg_count = 1 AND x_msg_data IS NULL
15390       THEN
15391           Pa_Interface_Utils_Pub.get_messages
15392               ( p_encoded        => Fnd_Api.G_FALSE
15393               , p_msg_index      => 1
15394               , p_msg_count      => l_msg_count
15395               , p_msg_data       => l_msg_data
15396               , p_data           => l_data
15397               , p_msg_index_out  => l_msg_index_out);
15398           x_msg_data := l_data;
15399       END IF;
15400 
15401     when FND_API.G_EXC_UNEXPECTED_ERROR then
15402       if p_commit = FND_API.G_TRUE then
15403          rollback to MOVE_TASK_VERSIONS_IN_BULK;
15404       end if;
15405       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15406       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15407                               p_procedure_name => 'MOVE_TASK_VERSIONS_IN_BULK',
15408                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15409     when OTHERS then
15410       if p_commit = FND_API.G_TRUE then
15411          rollback to MOVE_TASK_VERSIONS_IN_BULK;
15412       end if;
15413       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15414       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15415                               p_procedure_name => 'MOVE_TASK_VERSIONS_IN_BULK',
15416                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15417       raise;
15418 END MOVE_TASK_VERSIONS_IN_BULK ;
15419 
15420 -- 4218932 Added below update api for update task page for  bulk approach
15421 
15422 PROCEDURE Update_Task_All_Info(
15423  p_api_version                      IN      NUMBER      :=1.0,
15424  p_init_msg_list                    IN      VARCHAR2    :=FND_API.G_TRUE,
15425  p_commit                           IN      VARCHAR2    :=FND_API.G_FALSE,
15426  p_validate_only                    IN      VARCHAR2    :=FND_API.G_TRUE,
15427  p_validation_level                 IN      NUMBER      :=FND_API.G_VALID_LEVEL_FULL,
15428  p_calling_module                   IN      VARCHAR2    :='SELF_SERVICE',
15429  p_debug_mode                       IN      VARCHAR2    :='N',
15430  p_max_msg_count                    IN      NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15431  p_task_id_tbl                      IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15432  --Begin:5867373:p_task_number_tbl's data-type has been changed to varchar2(100)
15433  p_task_number_tbl                  IN      SYSTEM.PA_VARCHAR2_100_TBL_TYPE  := SYSTEM.PA_VARCHAR2_100_TBL_TYPE(),
15434  --End:5867373:
15435  p_task_name_tbl                    IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15436  p_task_description_tbl             IN      SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE(),
15437  p_task_manager_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15438  p_task_manager_name_tbl            IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15439  p_carrying_out_org_id_tbl          IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15440  p_carrying_out_org_name_tbl        IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15441  p_priority_code_tbl                IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15442  p_TYPE_ID_tbl                      IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15443  p_status_code_tbl                  IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15444  p_inc_proj_progress_flag_tbl       IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15445  p_transaction_start_date_tbl       IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15446  p_transaction_finish_date_tbl      IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15447  p_work_type_id_tbl                 IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15448  p_service_type_code_tbl            IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15449  p_work_item_code_tbl               IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15450  p_uom_code_tbl                     IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15451  p_record_version_number_tbl        IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15452  -- Update_Schedule_Version
15453  p_scheduled_start_date_tbl         IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15454  p_scheduled_end_date_tbl           IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15455  p_pev_schedule_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15456  p_milestone_flag_tbl               IN      SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE(),
15457  p_critical_flag_tbl                IN      SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE(),
15458  p_WQ_PLANNED_QUANTITY_tbl          IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15459  p_early_start_date_tbl             IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15460  p_early_end_date_tbl               IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15461  p_late_start_date_tbl              IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15462  p_late_end_date_tbl                IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15463  p_constraint_type_code_tbl         IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15464  p_constraint_date_tbl              IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15465  p_sch_rec_ver_num_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15466  -- update_task_det_sch_info
15467  p_task_version_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15468  p_percent_complete_tbl             IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15469  p_ETC_effort_tbl                   IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15470  p_structure_version_id_tbl         IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15471  p_project_id_tbl                   IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15472  p_planned_effort_tbl               IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15473  p_actual_effort_tbl                IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15474  -- Update_Task_Weighting
15475  p_object_relationship_id_tbl       IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15476  p_weighting_percentage_tbl         IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15477  p_obj_rec_ver_num_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15478  p_task_weight_method               IN      VARCHAR2,
15479  -- common
15480  x_return_status                    OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
15481  x_msg_count                        OUT     NOCOPY NUMBER, --File.Sql.39 bug 4440895
15482  x_msg_data                         OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15483 ) IS
15484 
15485    l_api_name                      CONSTANT VARCHAR(30) := 'Update_Task_All_Info';
15486    l_api_version                   CONSTANT NUMBER      := 1.0;
15487 
15488    l_return_status                 VARCHAR2(1);
15489    l_msg_count                     NUMBER;
15490    l_msg_data                      VARCHAR2(250);
15491    l_data                          VARCHAR2(250);
15492    l_msg_index_out                 NUMBER;
15493 
15494 BEGIN
15495     pa_debug.init_err_stack ('PA_TASK_PUB1.Update_Task_All_Info');
15496 
15497     IF (p_debug_mode = 'Y') THEN
15498       pa_debug.debug('PA_TASK_PUB1.Update_Task_All_Info begin');
15499     END IF;
15500 
15501     IF (p_commit = FND_API.G_TRUE) THEN
15502       savepoint update_Task_all_info;
15503     END IF;
15504 
15505     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
15506       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15507     END IF;
15508 
15509     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
15510       FND_MSG_PUB.initialize;
15511     END IF;
15512 
15513     x_return_status := FND_API.G_RET_STS_SUCCESS;
15514 
15515     IF nvl(p_task_id_tbl.last,0) >= 1 THEN
15516 
15517         FOR i in p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
15518 
15519             PA_TASK_PUB1.Update_Task
15520             (
15521                   p_task_id                              => p_task_id_tbl(i)
15522                  ,p_task_number                          => p_task_number_tbl(i)
15523                  ,p_task_name                            => p_task_name_tbl(i)
15524                  ,p_task_manager_id                      => p_task_manager_id_tbl(i)
15525                  ,p_task_manager_name                    => p_task_manager_name_tbl(i)
15526                  ,p_record_version_number                => p_record_version_number_tbl(i)
15527                  ,P_TASK_DESCRIPTION                     => P_TASK_DESCRIPTION_tbl(i)
15528                  ,P_CARRYING_OUT_ORG_NAME                => P_CARRYING_OUT_ORG_NAME_tbl(i)
15529                  ,P_PRIORITY_CODE                        => P_PRIORITY_CODE_tbl(i)
15530                  ,P_STATUS_CODE                          => P_STATUS_CODE_tbl(i)
15531                  ,P_INC_PROJ_PROGRESS_FLAG               => P_INC_PROJ_PROGRESS_FLAG_tbl(i)
15532                  ,p_transaction_start_date               => p_transaction_start_date_tbl(i)
15533                  ,p_transaction_finish_date              => p_transaction_finish_date_tbl(i)
15534                  ,p_service_type_code                    => p_service_type_code_tbl(i)
15535                  ,p_work_type_id                         => p_work_type_id_tbl(i)
15536                  ,p_work_item_code                       => p_work_item_code_tbl(i)
15537                  ,p_uom_code                             => p_uom_code_tbl(i)
15538                  ,p_type_id                              => p_type_id_tbl(i)
15539                  ,p_carrying_out_org_id                  => p_carrying_out_org_id_tbl(i)
15540                  ,x_return_status                        => l_return_status
15541                  ,x_msg_count                            => l_msg_count
15542                  ,x_msg_data                             => l_msg_data
15543             );
15544 
15545             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15546                 x_msg_count := FND_MSG_PUB.count_msg;
15547                 IF x_msg_count = 1 then
15548                     pa_interface_utils_pub.get_messages
15549                     (
15550                         p_encoded        => FND_API.G_TRUE,
15551                         p_msg_index      => 1,
15552                         p_msg_count      => l_msg_count,
15553                         p_msg_data       => l_msg_data,
15554                         p_data           => l_data,
15555                         p_msg_index_out  => l_msg_index_out
15556                     );
15557                     x_msg_data := l_data;
15558                 END IF;
15559               raise FND_API.G_EXC_ERROR;
15560             END IF;
15561 
15562             PA_TASK_PUB1.Update_Schedule_Version
15563             (
15564                   p_scheduled_start_date                => p_scheduled_start_date_tbl(i)
15565                  ,p_scheduled_end_date                  => p_scheduled_end_date_tbl(i)
15566                  ,p_record_version_number               => p_sch_rec_ver_num_tbl(i)
15567                  ,p_pev_schedule_id                     => p_pev_schedule_id_tbl(i)
15568                  ,P_MILESTONE_FLAG                      => P_MILESTONE_FLAG_tbl(i)
15569                  ,P_CRITICAL_FLAG                       => P_CRITICAL_FLAG_tbl(i)
15570                  ,p_WQ_PLANNED_QUANTITY                 => p_WQ_PLANNED_QUANTITY_tbl(i)
15571                  ,p_early_start_date                    => p_early_start_date_tbl(i)
15572                  ,p_early_end_date                      => p_early_end_date_tbl(i)
15573                  ,p_late_start_date                     => p_late_start_date_tbl(i)
15574                  ,p_late_end_date                       => p_late_end_date_tbl(i)
15575                  ,p_constraint_date                     => p_constraint_date_tbl(i)
15576                  ,p_constraint_type_code                => p_constraint_type_code_tbl(i)
15577                  ,x_return_status                       => l_return_status
15578                  ,x_msg_count                           => l_msg_count
15579                  ,x_msg_data                            => l_msg_data
15580             );
15581 
15582             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15583                 x_msg_count := FND_MSG_PUB.count_msg;
15584                 IF x_msg_count = 1 then
15585                     pa_interface_utils_pub.get_messages
15586                     (
15587                         p_encoded        => FND_API.G_TRUE,
15588                         p_msg_index      => 1,
15589                         p_msg_count      => l_msg_count,
15590                         p_msg_data       => l_msg_data,
15591                         p_data           => l_data,
15592                         p_msg_index_out  => l_msg_index_out
15593                     );
15594                     x_msg_data := l_data;
15595                 END IF;
15596               raise FND_API.G_EXC_ERROR;
15597             END IF;
15598 
15599             PA_TASK_PUB1.update_task_det_sch_info
15600             (
15601                   p_task_ver_id                         => p_task_version_id_tbl(i)
15602                  ,p_percent_complete                    => p_percent_complete_tbl(i)
15603                  ,p_ETC_effort                          => p_ETC_effort_tbl(i)
15604                  ,p_structure_version_id                => p_structure_version_id_tbl(i)
15605                  ,p_project_id                          => p_project_id_tbl(i)
15606                  ,p_planned_effort                      => p_planned_effort_tbl(i)
15607                  ,p_actual_effort                       => p_actual_effort_tbl(i)
15608                  ,x_return_status                       => l_return_status
15609                  ,x_msg_count                           => l_msg_count
15610                  ,x_msg_data                            => l_msg_data
15611             );
15612 
15613             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15614                 x_msg_count := FND_MSG_PUB.count_msg;
15615                 IF x_msg_count = 1 then
15616                     pa_interface_utils_pub.get_messages
15617                     (
15618                         p_encoded        => FND_API.G_TRUE,
15619                         p_msg_index      => 1,
15620                         p_msg_count      => l_msg_count,
15621                         p_msg_data       => l_msg_data,
15622                         p_data           => l_data,
15623                         p_msg_index_out  => l_msg_index_out
15624                     );
15625                     x_msg_data := l_data;
15626                 END IF;
15627               raise FND_API.G_EXC_ERROR;
15628             END IF;
15629 
15630             IF p_task_weight_method = 'MANUAL' THEN
15631 
15632                 PA_TASK_PUB1.Update_Task_Weighting
15633                 (
15634                       p_object_relationship_id              => p_object_relationship_id_tbl(i)
15635                      ,p_weighting_percentage                => p_weighting_percentage_tbl(i)
15636                      ,p_record_version_number               => p_obj_rec_ver_num_tbl(i)
15637                      ,x_return_status                       => l_return_status
15638                      ,x_msg_count                           => l_msg_count
15639                      ,x_msg_data                            => l_msg_data
15640                 );
15641 
15642                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15643                     x_msg_count := FND_MSG_PUB.count_msg;
15644                     IF x_msg_count = 1 then
15645                         pa_interface_utils_pub.get_messages
15646                         (
15647                             p_encoded        => FND_API.G_TRUE,
15648                             p_msg_index      => 1,
15649                             p_msg_count      => l_msg_count,
15650                             p_msg_data       => l_msg_data,
15651                             p_data           => l_data,
15652                             p_msg_index_out  => l_msg_index_out
15653                         );
15654                         x_msg_data := l_data;
15655                     END IF;
15656                   raise FND_API.G_EXC_ERROR;
15657                 END IF;
15658             END IF;
15659 
15660         END LOOP;
15661 
15662     END IF;
15663 
15664     IF (p_commit = FND_API.G_TRUE) THEN
15665       COMMIT;
15666     END IF;
15667 
15668     IF (p_debug_mode = 'Y') THEN
15669       pa_debug.debug('PA_TASK_PUB1.Update_Task_All_Info END');
15670     END IF;
15671 
15672  EXCEPTION
15673     when FND_API.G_EXC_ERROR then
15674       if p_commit = FND_API.G_TRUE then
15675          rollback to update_Task_all_info;
15676       end if;
15677       x_return_status := FND_API.G_RET_STS_ERROR;
15678     when FND_API.G_EXC_UNEXPECTED_ERROR then
15679       if p_commit = FND_API.G_TRUE then
15680          rollback to update_Task_all_info;
15681       end if;
15682       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15683       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15684                               p_procedure_name => 'Update_Task_All_Info',
15685                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15686     when OTHERS then
15687       if p_commit = FND_API.G_TRUE then
15688          rollback to update_Task_all_info;
15689       end if;
15690       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15691       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15692                               p_procedure_name => 'Update_Task_All_Info',
15693                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15694       raise;
15695 
15696 END Update_Task_All_Info;
15697 
15698 -- 4429929 : Added  CANCEL_TASK
15699 PROCEDURE CANCEL_TASK(
15700   p_calling_module		IN      VARCHAR2        :='SELF_SERVICE'
15701  ,p_api_version                 IN      NUMBER          :=1.0
15702  ,p_init_msg_list               IN      VARCHAR2        :=FND_API.G_TRUE
15703  ,p_validate_only               IN      VARCHAR2        :=FND_API.G_FALSE
15704  ,p_validation_level            IN      NUMBER          :=FND_API.G_VALID_LEVEL_FULL
15705  ,p_calling_mode		IN      VARCHAR2        :=null
15706  ,p_task_id			IN	NUMBER
15707  ,p_task_version_id		IN	NUMBER
15708  ,p_project_id			IN	NUMBER
15709  ,p_cancel_status_code		IN	VARCHAR2
15710  ,x_return_status		OUT	NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15711  ,x_msg_count			OUT	NOCOPY NUMBER --File.Sql.39 bug 4440895
15712  ,x_msg_data			OUT	NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15713 )
15714 IS
15715 l_debug_mode		VARCHAR2(1);
15716 l_module_name		VARCHAR2(100):= 'PA_TASK_PUB1.CANCEL_TASK';
15717 l_error_message_code	VARCHAR2(32);
15718 
15719 -- 4533534  : Included join of pa_proj_elem_ver_structure too
15720 CURSOR c_get_all_task_versions(c_task_id NUMBER, c_project_id NUMBER) IS
15721 SELECT ver.element_version_id, str.status_code
15722 FROM pa_proj_element_versions ver
15723 , pa_proj_elem_ver_structure str
15724 WHERE ver.project_id = c_project_id
15725 AND ver.proj_element_id = c_task_id
15726 AND ver.project_id = str.project_id
15727 and ver.parent_structure_version_id = str.element_version_id
15728 ;
15729 
15730 -- 4533534  : Commnted this cusror and written new simplified cusror
15731 /*
15732 CURSOR c_get_links(c_task_version_id NUMBER, c_project_id NUMBER) IS
15733 SELECT
15734   ppv2.project_id                     sub_project_id
15735  ,ppv2.element_version_id             sub_structure_ver_id
15736  ,ppv1.project_id                     parent_project_id
15737  ,ppv1.parent_structure_version_id    parent_structure_ver_id
15738  ,ppv1.element_version_id             parent_task_version_id
15739  ,ppv1.wbs_number		      parent_wbs_number
15740  ,por1.object_id_from1                link_task_ver_id
15741  ,por1.object_relationship_id         object_relationship_id
15742  ,por1.record_version_number	      record_version_number
15743  ,ppv1.task_unpub_ver_status_code     task_unpub_ver_status_code
15744 FROM
15745      pa_proj_element_versions ppv1 -- linking task
15746     ,pa_proj_element_versions ppv2 -- linked project
15747     ,pa_object_relationships por1
15748     ,pa_object_relationships por2
15749     ,(SELECT object_id_from1, object_id_to1
15750        FROM pa_object_relationships
15751        START WITH object_id_from1 = c_task_version_id
15752        and relationship_type = 'S'
15753        CONNECT BY object_id_from1 = PRIOR  object_id_to1
15754        and relationship_type = 'S'
15755        UNION
15756        SELECT to_number(null) object_id_from1, c_task_version_id object_id_to1
15757        FROM DUAL
15758        ) pobj
15759 WHERE
15760      ppv2.element_version_id = por1.object_id_to1
15761  AND por1.object_id_from1 = por2.object_id_to1
15762  AND por2.object_id_from1 = ppv1.element_version_id
15763  AND ppv1.element_version_id = pobj.object_id_to1
15764  AND ppv2.object_type = 'PA_STRUCTURES'
15765  AND por1.relationship_type in ( 'LW', 'LF' )
15766  AND ppv1.project_id=c_project_id
15767  ;
15768 */
15769 CURSOR c_get_links(c_task_version_id NUMBER) IS
15770  SELECT
15771   ppv.project_id                     sub_project_id
15772  ,ppv.element_version_id             sub_structure_ver_id
15773  ,por.object_id_from1                link_task_ver_id
15774  ,por.object_relationship_id         object_relationship_id
15775  ,por.record_version_number	     record_version_number
15776  ,por.relationship_type              relationship_type
15777 FROM
15778     pa_proj_element_versions ppv -- linked project
15779     ,pa_object_relationships por
15780     ,(SELECT object_id_from1, object_id_to1  -- Get all sub tasks including linking tasks
15781        FROM pa_object_relationships
15782        START WITH object_id_from1 = c_task_version_id
15783        and relationship_type = 'S'
15784        CONNECT BY object_id_from1 = PRIOR  object_id_to1
15785        and relationship_type = 'S'
15786        ) pobj
15787 WHERE
15788 pobj.object_id_to1 = por.object_id_from1
15789 AND por.relationship_type = 'LW' -- 4533534 : It shd be LW only otherwsie it will give error PA_NO_RECORD_VERSION_NUMBER
15790 AND por.object_id_to1 = ppv.element_version_id
15791 AND ppv.object_type = 'PA_STRUCTURES'
15792  ;
15793 
15794  l_version_enabled	VARCHAR2(1);
15795 
15796 BEGIN
15797 	x_return_status := FND_API.G_RET_STS_SUCCESS;
15798 	l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
15799 	SAVEPOINT CANCEL_TASK_SP;
15800 
15801 	IF l_debug_mode = 'Y' THEN
15802 		pa_debug.write(l_module_name,'Cancel Task Passed Parameters', 3);
15803 		pa_debug.write(l_module_name,'p_task_id='||p_task_id, 3);
15804 		pa_debug.write(l_module_name,'p_task_version_id='||p_task_version_id, 3);
15805 		pa_debug.write(l_module_name,'p_project_id='||p_project_id, 3);
15806 		pa_debug.write(l_module_name,'p_cancel_status_code='||p_cancel_status_code, 3);
15807 	END IF;
15808 
15809 	IF p_init_msg_list = 'T' THEN
15810 		FND_MSG_PUB.initialize;
15811 	END IF;
15812 
15813 	IF l_debug_mode = 'Y' THEN
15814 		pa_debug.write(l_module_name,'Calling Check_chg_stat_cancel_ok', 3);
15815 	END IF;
15816 
15817 	PA_PROJ_ELEMENTS_UTILS.Check_chg_stat_cancel_ok
15818 		(
15819 		 p_task_id             => p_task_id
15820 		,p_task_version_id     => p_task_version_id
15821 		,p_new_task_status     => p_cancel_status_code
15822 		,x_return_status       => x_return_status
15823 		,x_error_message_code  => l_error_message_code
15824              );
15825 
15826 	IF l_debug_mode = 'Y' THEN
15827 		pa_debug.write(l_module_name,'After Call Check_chg_stat_cancel_ok x_return_status='||x_return_status, 3);
15828 	END IF;
15829 
15830 	IF (x_return_status <> 'S') THEN
15831 		PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15832 			p_msg_name => l_error_message_code);
15833                 raise FND_API.G_EXC_ERROR;
15834 	END IF;
15835 	IF l_debug_mode = 'Y' THEN
15836 		pa_debug.write(l_module_name,'Calling set_new_tasks_to_TBD', 3);
15837 	END IF;
15838 
15839 	PA_TASK_PVT1.set_new_tasks_to_tbd(
15840                 p_project_id               => p_project_id
15841                ,p_task_id                  => p_task_id
15842                ,p_task_status              => p_cancel_status_code
15843                ,x_return_status            => x_return_status
15844                ,x_msg_count                => x_msg_count
15845                ,x_msg_data                 => x_msg_data);
15846 
15847 	IF l_debug_mode = 'Y' THEN
15848 		pa_debug.write(l_module_name,'After Call set_new_tasks_to_TBD x_return_status='||x_return_status, 3);
15849 	END IF;
15850 
15851 	IF (x_return_status <> 'S') THEN
15852                 raise FND_API.G_EXC_ERROR;
15853 	END IF;
15854 
15855 	IF l_debug_mode = 'Y' THEN
15856 		pa_debug.write(l_module_name,'Calling push_down_task_status', 3);
15857 	END IF;
15858 
15859 	PA_PROGRESS_PUB.push_down_task_status(
15860 		p_calling_module		=> p_calling_module
15861 		,p_task_status			=> p_cancel_status_code
15862 		,p_project_id			=> p_project_id
15863 		,p_object_id			=> p_task_id
15864 		,p_object_version_id		=> p_task_version_id
15865 		,p_object_type			=> 'PA_TASKS'
15866 		,x_return_status		=> x_return_status
15867 		,x_msg_count			=> x_msg_count
15868 		,x_msg_data			=> x_msg_data
15869 		);
15870 	IF l_debug_mode = 'Y' THEN
15871 		pa_debug.write(l_module_name,'After Call push_down_task_status x_return_status='||x_return_status, 3);
15872 	END IF;
15873 
15874 	IF (x_return_status <> 'S') THEN
15875                 raise FND_API.G_EXC_ERROR;
15876 	END IF;
15877 
15878 	l_version_enabled := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id);
15879 
15880 	IF l_debug_mode = 'Y' THEN
15881 		pa_debug.write(l_module_name,'Call Delete_SubProject_Association l_version_enabled='||l_version_enabled, 3);
15882 	END IF;
15883 
15884 	FOR l_all_tasks IN c_get_all_task_versions(p_task_id, p_project_id) LOOP
15885 		IF l_debug_mode = 'Y' THEN
15886 			pa_debug.write(l_module_name,'l_all_tasks.element_version_id='||l_all_tasks.element_version_id, 3);
15887 			pa_debug.write(l_module_name,'l_all_tasks.status_code='||l_all_tasks.status_code, 3);
15888 		END IF;
15889 		--4533534
15890 		IF ((l_version_enabled = 'N') OR (l_version_enabled = 'Y' AND l_all_tasks.status_code = 'STRUCTURE_WORKING'))
15891 		THEN
15892 			--4533534
15893 			--FOR l_all_links IN c_get_links(l_all_tasks.element_version_id, p_project_id) LOOP
15894 			FOR l_all_links IN c_get_links(l_all_tasks.element_version_id) LOOP
15895 				IF l_debug_mode = 'Y' THEN
15896 					pa_debug.write(l_module_name,'l_all_links.sub_project_id='||l_all_links.sub_project_id, 3);
15897 					pa_debug.write(l_module_name,'l_all_links.sub_structure_ver_id='||l_all_links.sub_structure_ver_id, 3);
15898 					--pa_debug.write(l_module_name,'l_all_links.parent_project_id='||l_all_links.parent_project_id, 3);
15899 					--pa_debug.write(l_module_name,'l_all_links.parent_structure_ver_id='||l_all_links.parent_structure_ver_id, 3);
15900 					--pa_debug.write(l_module_name,'l_all_links.parent_task_version_id='||l_all_links.parent_task_version_id, 3);
15901 					--pa_debug.write(l_module_name,'l_all_links.parent_wbs_number='||l_all_links.parent_wbs_number, 3);
15902 					pa_debug.write(l_module_name,'l_all_links.link_task_ver_id='||l_all_links.link_task_ver_id, 3);
15903 					pa_debug.write(l_module_name,'l_all_links.object_relationship_id='||l_all_links.object_relationship_id, 3);
15904 					pa_debug.write(l_module_name,'l_all_links.record_version_number='||l_all_links.record_version_number, 3);
15905 					--pa_debug.write(l_module_name,'l_all_links.task_unpub_ver_status_code='||l_all_links.task_unpub_ver_status_code, 3);
15906 					pa_debug.write(l_module_name,'l_all_links.relationship_type='||l_all_links.relationship_type, 3);
15907 				END IF;
15908 				--4533534
15909 				--IF ((l_version_enabled = 'N') OR (l_version_enabled = 'Y' AND NVL(l_all_links.task_unpub_ver_status_code,'WORKING') <> 'PUBLISHED'))
15910 
15911 				PA_RELATIONSHIP_PUB.Delete_SubProject_Association
15912 						( p_init_msg_list		=> FND_API.G_FALSE,
15913 						p_calling_module		=> p_calling_module,
15914 						p_object_relationships_id	=> l_all_links.object_relationship_id,
15915 						p_record_version_number		=> l_all_links.record_version_number,
15916 						x_return_status			=> x_return_status,
15917 						x_msg_count			=> x_msg_count,
15918 						x_msg_data			=> x_msg_data
15919 						);
15920 				IF l_debug_mode = 'Y' THEN
15921 					pa_debug.write(l_module_name,'After Call Delete_SubProject_Association x_return_status='||x_return_status, 3);
15922 				END IF;
15923 
15924 				IF (x_return_status <> 'S') THEN
15925 					raise FND_API.G_EXC_ERROR;
15926 				END IF;
15927 			END LOOP;
15928 		END IF;
15929 	END LOOP;
15930 EXCEPTION
15931     when FND_API.G_EXC_ERROR then
15932       x_return_status := FND_API.G_RET_STS_ERROR;
15933       x_msg_count := fnd_msg_pub.count_msg;
15934       ROLLBACK to CANCEL_TASK_SP;
15935     when FND_API.G_EXC_UNEXPECTED_ERROR then
15936       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15937       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15938                               p_procedure_name => 'CANCEL_TASK',
15939                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15940       x_msg_count := fnd_msg_pub.count_msg;
15941       ROLLBACK to CANCEL_TASK_SP;
15942     when OTHERS then
15943       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15944       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15945                               p_procedure_name => 'CANCEL_TASK',
15946                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15947       x_msg_count := fnd_msg_pub.count_msg;
15948       ROLLBACK to CANCEL_TASK_SP;
15949       raise;
15950 END CANCEL_TASK;
15951 
15952 -- Bug Fix 5593736.
15953 
15954 PROCEDURE INDENT_MULTI_TASK_VERSION
15955 (p_api_version                  IN      NUMBER          := 1.0
15956 ,p_init_msg_list                IN      VARCHAR2        := FND_API.G_TRUE
15957 ,p_commit                       IN      VARCHAR2        := FND_API.G_FALSE
15958 ,p_validate_only                IN      VARCHAR2        := FND_API.G_TRUE
15959 ,p_validation_level             IN      NUMBER          := FND_API.G_VALID_LEVEL_FULL
15960 ,p_calling_module               IN      VARCHAR2        := 'SELF_SERVICE'
15961 ,p_debug_mode                   IN      VARCHAR2        := 'N'
15962 ,p_max_msg_count                IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15963 ,p_project_id                   IN      NUMBER
15964 ,p_structure_version_id         IN      NUMBER
15965 ,p_structure_type               IN      VARCHAR2        :='WORKPLAN'
15966 ,p_task_version_id_tbl          IN      SYSTEM.PA_NUM_TBL_TYPE
15967 ,p_record_version_number_tbl    IN      SYSTEM.PA_NUM_TBL_TYPE
15968 ,p_display_sequence_tbl         IN      SYSTEM.PA_NUM_TBL_TYPE
15969 ,x_return_status                OUT     NOCOPY VARCHAR2
15970 ,x_msg_count                    OUT     NOCOPY NUMBER
15971 ,x_msg_data                     OUT     NOCOPY VARCHAR2)
15972 IS
15973 
15974 l_api_name            	CONSTANT VARCHAR(30) := 'INDENT_MULTI_TASK_VERSION';
15975 l_api_version         	CONSTANT NUMBER      := 1.0;
15976 l_return_status       	VARCHAR2(1);
15977 l_msg_count           	NUMBER;
15978 l_msg_data            	VARCHAR2(250);
15979 l_data              	VARCHAR2(250);
15980 l_msg_index_out       	NUMBER;
15981 
15982 h 		  	NUMBER := 0;
15983 i 		  	NUMBER := 0;
15984 j 			NUMBER := 0;
15985 k 			NUMBER := 0;
15986 l			NUMBER := 0;
15987 m			NUMBER := 0;
15988 l_count 		NUMBER := 0;
15989 l_error_count 		NUMBER := 0;
15990 l_msg_code		VARCHAR2(30) := null;
15991 
15992 TYPE l_task_in_rec_type IS RECORD
15993 (task_version_id        NUMBER      := null
15994 ,record_version_number  NUMBER      := null
15995 ,display_sequence       NUMBER      := null);
15996 
15997 l_current l_task_in_rec_type;
15998 
15999 TYPE l_task_in_tbl_type IS TABLE OF l_task_in_rec_type INDEX BY BINARY_INTEGER;
16000 
16001 l_task_in_tbl l_task_in_tbl_type;
16002 
16003 TYPE l_task_error_rec_type IS RECORD
16004 (task_name           	VARCHAR2(300)   := null
16005 ,task_number     	VARCHAR2(300)   := null
16006 ,error_msg         	VARCHAR2(2000)  := null);
16007 
16008 TYPE l_task_error_tbl_type IS TABLE OF l_task_error_rec_type INDEX BY BINARY_INTEGER;
16009 
16010 l_task_error_tbl l_task_error_tbl_type;
16011 
16012 cursor l_cur_task_attr(c_project_id NUMBER, c_element_version_id NUMBER) is
16013 select ppe.name, ppev.wbs_number  --Bug 6878138
16014 from pa_proj_elements ppe, pa_proj_element_versions ppev
16015 where ppe.project_id = ppev.project_id
16016 and ppe.proj_element_id = ppev.proj_element_id
16017 and ppev.project_id = c_project_id
16018 and ppev.element_version_id = c_element_version_id;
16019 
16020 l_rec_task_attr l_cur_task_attr%rowtype;
16021 
16022 BEGIN
16023 
16024   pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION');
16025 
16026   IF (p_debug_mode = 'Y') THEN
16027     pa_debug.debug('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION BEGIN');
16028   END IF;
16029 
16030   IF (p_commit = FND_API.G_TRUE) THEN
16031     savepoint indent_multi_task_version;
16032   END IF;
16033 
16034   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16035     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16036   END IF;
16037 
16038   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
16039     FND_MSG_PUB.initialize;
16040   END IF;
16041 
16042   x_return_status := FND_API.G_RET_STS_SUCCESS;
16043 
16044   -- Copy the input paramters to the local pl/sql table.
16045   for h in p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST
16046   loop
16047 	  l_task_in_tbl(h).task_version_id  	   := p_task_version_id_tbl(h);
16048 	  l_task_in_tbl(h).record_version_number   := p_record_version_number_tbl(h);
16049 	  l_task_in_tbl(h).display_sequence 	   := p_display_sequence_tbl(h);
16050   end loop;
16051 
16052   -- Sort the tasks for indent in ascending order of display sequence.
16053   -- Assuming that the user will generally choose less than a thousand items
16054   -- we have implemeneted an insertion sort for good sorting efficiency.
16055    l_count := l_task_in_tbl.count;
16056 
16057    i := 1;
16058 
16059 	while (i <= l_count)
16060 	loop
16061     		l_current := l_task_in_tbl(i);
16062     		j := i;
16063 		while ((j > 1) AND (l_task_in_tbl(j-1).display_sequence > l_current.display_sequence))
16064 		loop
16065 			l_task_in_tbl(j) := l_task_in_tbl(j-1);
16066 			j :=  (j-1);
16067 		end loop;
16068 		l_task_in_tbl(j) := l_current;
16069 	     	i := (i + 1);
16070 	end loop;
16071 
16072   -- Loop through the sorted list and indent each task version.
16073   for k in 1..l_count
16074   loop
16075 	   -- Clear the message stack.
16076   	   FND_MSG_PUB.initialize;
16077 
16078 	   -- Call the API: PA_TASK_PUB1.INDENT_TASK_VERSION_BULK().
16079   	   PA_TASK_PUB1.INDENT_TASK_VERSION_BULK
16080   	   (p_api_version	     => p_api_version
16081    	   , p_init_msg_list 	     => p_init_msg_list
16082    	   , p_commit 		     => p_commit
16083    	   , p_validate_only	     => p_validate_only
16084    	   , p_validation_level      => p_validation_level
16085    	   , p_calling_module        => p_calling_module
16086    	   , p_debug_mode            => p_debug_mode
16087    	   , p_max_msg_count         => p_max_msg_count
16088    	   , p_structure_version_id  => p_structure_version_id
16089    	   , p_task_version_id       => l_task_in_tbl(k).task_version_id
16090    	   , p_project_id	     => p_project_id
16091    	   , p_record_version_number => l_task_in_tbl(k).record_version_number
16092    	   , x_return_status	     => l_return_status
16093    	   , x_msg_count             => l_msg_count
16094    	   , x_msg_data              => l_msg_data);
16095 
16096   	   if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
16097 
16098 		  -- Store the task name and task number in the local pl/sql error table.
16099 	   	  open l_cur_task_attr(p_project_id, l_task_in_tbl(k).task_version_id);
16100   		  fetch l_cur_task_attr into l_task_error_tbl(k).task_name, l_task_error_tbl(k).task_number ;
16101 		  close l_cur_task_attr;
16102 
16103 		  -- Store the message code for the error message reported in the local pl/sql error table.
16104 		  PA_INTERFACE_UTILS_PUB.get_messages
16105            	  (p_encoded          => FND_API.G_FALSE     -- Get the encoded message.
16106                    , p_msg_index      => 1                   -- Get the message at index 1.
16107                    , p_data           => l_task_error_tbl(k).error_msg
16108                    , p_msg_index_out  => l_msg_index_out);
16109 
16110   	   end if;
16111 
16112   end loop; -- loop k.
16113 
16114   -- Populate the tokenized error messages in the error stack:
16115   l_error_count := l_task_error_tbl.count;
16116 
16117   if (l_error_count > 0) then
16118 
16119 	 -- Set the return status to error.
16120   	 x_return_status := FND_API.G_RET_STS_ERROR;
16121 
16122 	 -- Clear all previous messages from the message stack.
16123   	 FND_MSG_PUB.initialize;
16124 
16125 	 -- Populate the generic error message.
16126 	 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
16127 
16128 	 -- Loop through the local pl/sql error table to populate the tokenized error messages.
16129          -- Bug Fix 5920784
16130          -- Modified the following line to loop through the original task count rather than the error msg table count.
16131 
16132 	 -- for l in 1..l_error_count
16133 	 FOR l in 1..l_count
16134          -- End of Bug Fix 5920784
16135 
16136 	 loop
16137 	 	if (l_task_error_tbl.exists(l)) then
16138 	 	 	PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
16139 	 				     ,'TASKNAME',l_task_error_tbl(l).task_name
16140 					     ,'TASKNUMBER',l_task_error_tbl(l).task_number
16141 					     ,'ERRORMSG', l_task_error_tbl(l).error_msg);
16142 		end if;
16143 	 end loop;
16144 
16145   	 raise FND_API.G_EXC_ERROR;
16146 
16147   end if;
16148 
16149   IF (p_commit = FND_API.G_TRUE) THEN
16150   	 COMMIT;
16151   END IF;
16152 
16153   IF (p_debug_mode = 'Y') THEN
16154     pa_debug.debug('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION END');
16155   END IF;
16156 
16157 EXCEPTION
16158 
16159   when FND_API.G_EXC_ERROR then
16160     if p_commit = FND_API.G_TRUE then
16161       rollback to indent_multi_task_version;
16162     end if;
16163     x_return_status := FND_API.G_RET_STS_ERROR;
16164 
16165   when FND_API.G_EXC_UNEXPECTED_ERROR then
16166     if p_commit = FND_API.G_TRUE then
16167       rollback to indent_multi_task_version;
16168     end if;
16169     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16170     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16171                             p_procedure_name => 'INDENT_MULTI_TASK_VERSION',
16172                             p_error_text     => SUBSTRB(SQLERRM,1,240));
16173   when OTHERS then
16174     if p_commit = FND_API.G_TRUE then
16175       rollback to indent_multi_task_version;
16176     end if;
16177     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16178     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16179                             p_procedure_name => 'INDENT_MULTI_TASK_VERSION',
16180                             p_error_text     => SUBSTRB(SQLERRM,1,240));
16181 
16182     raise;
16183 
16184 END INDENT_MULTI_TASK_VERSION;
16185 
16186 PROCEDURE OUTDENT_MULTI_TASK_VERSION
16187 (p_api_version                  IN      NUMBER          := 1.0
16188 ,p_init_msg_list                IN      VARCHAR2        := FND_API.G_TRUE
16189 ,p_commit                       IN      VARCHAR2        := FND_API.G_FALSE
16190 ,p_validate_only                IN      VARCHAR2        := FND_API.G_TRUE
16191 ,p_validation_level             IN      NUMBER          := FND_API.G_VALID_LEVEL_FULL
16192 ,p_calling_module               IN      VARCHAR2        := 'SELF_SERVICE'
16193 ,p_debug_mode                   IN      VARCHAR2        := 'N'
16194 ,p_max_msg_count                IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16195 ,p_project_id                   IN      NUMBER
16196 ,p_structure_version_id         IN      NUMBER
16197 ,p_structure_type               IN      VARCHAR2        :='WORKPLAN'
16198 ,p_task_version_id_tbl          IN      SYSTEM.PA_NUM_TBL_TYPE
16199 ,p_record_version_number_tbl    IN      SYSTEM.PA_NUM_TBL_TYPE
16200 ,p_display_sequence_tbl         IN      SYSTEM.PA_NUM_TBL_TYPE
16201 ,x_return_status                OUT     NOCOPY VARCHAR2
16202 ,x_msg_count                    OUT     NOCOPY NUMBER
16203 ,x_msg_data                     OUT     NOCOPY VARCHAR2)
16204 IS
16205 
16206 l_api_name            	CONSTANT VARCHAR(30) := 'OUTDENT_MULTI_TASK_VERSION';
16207 l_api_version         	CONSTANT NUMBER      := 1.0;
16208 l_return_status       	VARCHAR2(1);
16209 l_msg_count           	NUMBER;
16210 l_msg_data            	VARCHAR2(250);
16211 l_data              	VARCHAR2(250);
16212 l_msg_index_out       	NUMBER;
16213 
16214 h 		  	NUMBER := 0;
16215 i 		  	NUMBER := 0;
16216 j 			NUMBER := 0;
16217 k 			NUMBER := 0;
16218 l			NUMBER := 0;
16219 m			NUMBER := 0;
16220 l_count 		NUMBER := 0;
16221 l_error_count 		NUMBER := 0;
16222 l_msg_code		VARCHAR2(30) := null;
16223 
16224 TYPE l_task_in_rec_type IS RECORD
16225 (task_version_id        NUMBER      := null
16226 ,record_version_number  NUMBER      := null
16227 ,display_sequence       NUMBER      := null);
16228 
16229 l_current l_task_in_rec_type;
16230 
16231 TYPE l_task_in_tbl_type IS TABLE OF l_task_in_rec_type INDEX BY BINARY_INTEGER;
16232 
16233 l_task_in_tbl l_task_in_tbl_type;
16234 
16235 TYPE l_task_error_rec_type IS RECORD
16236 (task_name           	VARCHAR2(300)   := null
16237 ,task_number     	VARCHAR2(300)   := null
16238 ,error_msg         	VARCHAR2(2000)  := null);
16239 
16240 TYPE l_task_error_tbl_type IS TABLE OF l_task_error_rec_type INDEX BY BINARY_INTEGER;
16241 
16242 l_task_error_tbl l_task_error_tbl_type;
16243 
16244 cursor l_cur_task_attr(c_project_id NUMBER, c_element_version_id NUMBER) is
16245 select ppe.name, ppev.wbs_number  --Bug	6878138
16246 from pa_proj_elements ppe, pa_proj_element_versions ppev
16247 where ppe.project_id = ppev.project_id
16248 and ppe.proj_element_id = ppev.proj_element_id
16249 and ppev.project_id = c_project_id
16250 and ppev.element_version_id = c_element_version_id;
16251 
16252 l_rec_task_attr l_cur_task_attr%rowtype;
16253 
16254 BEGIN
16255 
16256   pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION');
16257 
16258   IF (p_debug_mode = 'Y') THEN
16259     pa_debug.debug('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION BEGIN');
16260   END IF;
16261 
16262   IF (p_commit = FND_API.G_TRUE) THEN
16263     savepoint outdent_multi_task_version;
16264   END IF;
16265 
16266   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16267     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16268   END IF;
16269 
16270   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
16271     FND_MSG_PUB.initialize;
16272   END IF;
16273 
16274   x_return_status := FND_API.G_RET_STS_SUCCESS;
16275 
16276   -- Copy the input paramters to the local pl/sql table.
16277   for h in p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST
16278   loop
16279 	  l_task_in_tbl(h).task_version_id  	   := p_task_version_id_tbl(h);
16280 	  l_task_in_tbl(h).record_version_number   := p_record_version_number_tbl(h);
16281 	  l_task_in_tbl(h).display_sequence 	   := p_display_sequence_tbl(h);
16282   end loop;
16283 
16284   -- Sort the tasks for outdent in descending order of display sequence.
16285   -- Assuming that the user will generally choose less than a thousand items
16286   -- we have implemeneted an insertion sort for good sorting efficiency.
16287    l_count := l_task_in_tbl.count;
16288 
16289    i := 1;
16290 
16291 	while (i <= l_count)
16292 	loop
16293     		l_current := l_task_in_tbl(i);
16294     		j := i;
16295 		while ((j > 1) AND (l_task_in_tbl(j-1).display_sequence < l_current.display_sequence))
16296 		loop
16297 			l_task_in_tbl(j) := l_task_in_tbl(j-1);
16298 			j :=  (j-1);
16299 		end loop;
16300 		l_task_in_tbl(j) := l_current;
16301 	     	i := (i + 1);
16302 	end loop;
16303 
16304   -- Loop through the sorted list and outdent each task version.
16305   for k in 1..l_count
16306   loop
16307 	   -- Clear the message stack.
16308   	   FND_MSG_PUB.initialize;
16309 
16310 	   -- Call the API: PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK().
16311   	   PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK
16312   	   (p_api_version	     => p_api_version
16313    	   , p_init_msg_list 	     => p_init_msg_list
16314    	   , p_commit 		     => p_commit
16315    	   , p_validate_only	     => p_validate_only
16316    	   , p_validation_level      => p_validation_level
16317    	   , p_calling_module        => p_calling_module
16318    	   , p_debug_mode            => p_debug_mode
16319    	   , p_max_msg_count         => p_max_msg_count
16320    	   , p_structure_version_id  => p_structure_version_id
16321    	   , p_task_version_id       => l_task_in_tbl(k).task_version_id
16322    	   , p_project_id	     => p_project_id
16323    	   , p_record_version_number => l_task_in_tbl(k).record_version_number
16324    	   , x_return_status	     => l_return_status
16325    	   , x_msg_count             => l_msg_count
16326    	   , x_msg_data              => l_msg_data);
16327 
16328   	   if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
16329 
16330 		  -- Store the task name and task number in the local pl/sql error table.
16331 	   	  open l_cur_task_attr(p_project_id, l_task_in_tbl(k).task_version_id);
16332   		  fetch l_cur_task_attr into l_task_error_tbl(k).task_name, l_task_error_tbl(k).task_number ;
16333 		  close l_cur_task_attr;
16334 
16335 		  -- Store the message code for the error message reported in the local pl/sql error table.
16336 		  PA_INTERFACE_UTILS_PUB.get_messages
16337            	  (p_encoded          => FND_API.G_FALSE     -- Get the encoded message.
16338                    , p_msg_index      => 1                   -- Get the message at index 1.
16339                    , p_data           => l_task_error_tbl(k).error_msg
16340                    , p_msg_index_out  => l_msg_index_out);
16341 
16342   	   end if;
16343 
16344   end loop; -- loop k.
16345 
16346   -- Populate the tokenized error messages in the error stack:
16347   l_error_count := l_task_error_tbl.count;
16348 
16349   if (l_error_count > 0) then
16350 
16351 	 -- Set the return status to error.
16352   	 x_return_status := FND_API.G_RET_STS_ERROR;
16353 
16354 	 -- Clear all previous messages from the message stack.
16355   	 FND_MSG_PUB.initialize;
16356 
16357 	 -- Populate the generic error message.
16358 	 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
16359 
16360 	 -- Loop through the local pl/sql error table to populate the tokenized error messages.
16361 	 for l in 1..l_error_count
16362 	 loop
16363 		if (l_task_error_tbl.exists(l)) then
16364 	 	 	PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
16365 	 				     ,'TASKNAME',l_task_error_tbl(l).task_name
16366 					     ,'TASKNUMBER',l_task_error_tbl(l).task_number
16367 					     ,'ERRORMSG', l_task_error_tbl(l).error_msg);
16368 		end if;
16369 	 end loop;
16370 
16371   	 raise FND_API.G_EXC_ERROR;
16372 
16373   end if;
16374 
16375   IF (p_commit = FND_API.G_TRUE) THEN
16376   	 COMMIT;
16377   END IF;
16378 
16379   IF (p_debug_mode = 'Y') THEN
16380     pa_debug.debug('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION END');
16381   END IF;
16382 
16383 EXCEPTION
16384 
16385   when FND_API.G_EXC_ERROR then
16386     if p_commit = FND_API.G_TRUE then
16387       rollback to outdent_multi_task_version;
16388     end if;
16389     x_return_status := FND_API.G_RET_STS_ERROR;
16390 
16391   when FND_API.G_EXC_UNEXPECTED_ERROR then
16392     if p_commit = FND_API.G_TRUE then
16393       rollback to outdent_multi_task_version;
16394     end if;
16395     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16396     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16397                             p_procedure_name => 'OUTDENT_MULTI_TASK_VERSION',
16398                             p_error_text     => SUBSTRB(SQLERRM,1,240));
16399   when OTHERS then
16400     if p_commit = FND_API.G_TRUE then
16401       rollback to outdent_multi_task_version;
16402     end if;
16403     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16404     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16405                             p_procedure_name => 'OUTDENT_MULTI_TASK_VERSION',
16406                             p_error_text     => SUBSTRB(SQLERRM,1,240));
16407 
16408     raise;
16409 
16410 END OUTDENT_MULTI_TASK_VERSION;
16411 
16412 -- End of Bug Fix 5593736.
16413 
16414 END PA_TASK_PUB1;