DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_TASK_PUB1

Source


1 PACKAGE BODY PA_TASK_PUB1 AS
2 /* $Header: PATSK1PB.pls 120.39.12020000.6 2013/04/25 13:25:30 bpottipa 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_context       IN    VARCHAR2    N   Null    TASK
20 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21 -- p_object_type          IN    VARCHAR2    N   Not Null
22 -- p_project_id       IN    NUMBER  N   Not Null
23 -- p_task_number          IN    VARCHAR2    N   Not Null
24 -- p_task_name        IN    VARCHAR2    N   Not Null
25 -- p_task_description   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
26 -- p_location_id          IN    NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27 -- p_country          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28 -- p_territory_code IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29 -- p_state_region   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30 -- p_city               IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31 -- p_task_manager_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32 -- p_task_manager_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33 -- p_carrying_out_org_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34 -- p_carrying_out_org_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35 -- p_priority_code  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36 -- p_TYPE_ID          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37 -- p_status_code          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38 -- p_inc_proj_progress_flag IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
39 -- p_pm_product_code    IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
40 -- p_pm_task_reference  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
41 -- p_closed_date          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
44 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
45 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
46 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
47 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
48 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
49 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
50 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
51 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
52 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
53 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
54 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
55 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
56 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
57 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
58  --FP M development bug 3301192
59 -- p_structure_type        IN      VARCHAR2 := 'WORKPLAN',
60 -- p_financial_flag        IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
61  --End FPM changes
62 -- x_task_id          OUT   NUMBER  N   Not Null
63 -- x_return_status  OUT     VARCHAR2    N   Null
64 -- x_msg_count        OUT   NUMBER  N   Null
65 -- x_msg_data         OUT   VARCHAR2    N   Null
66 --
67 --  History
68 --
69 --  23-OCT-01   Majid Ansari             -Created
70 --
71 --
72 
73 PROCEDURE Create_Task(
74  p_api_version        IN    NUMBER  :=1.0,
75  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
76  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
77  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
78  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
79  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
80  p_debug_mode         IN    VARCHAR2    :='N',
81  p_context	      IN	VARCHAR2	:='TASK',  -- bug#11928067
82  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
83  p_object_type        IN    VARCHAR2,
84  p_project_id         IN    NUMBER,
85  p_structure_id         IN    NUMBER,
86  p_structure_version_id IN    NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
87  p_task_number        IN    VARCHAR2,
88  p_task_name          IN    VARCHAR2,
89  p_ref_task_id          IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
90  p_peer_or_sub          IN    VARCHAR2    :='PEER',
91  p_task_description IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
92  p_location_id        IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
93  p_country              IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
94  p_territory_code         IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
95  p_state_region           IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
96  p_city             IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
97  p_task_manager_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
98  p_task_manager_name    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
99  p_carrying_out_org_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
100  p_carrying_out_org_name    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
101  p_priority_code          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
102  p_TYPE_ID            IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
103  p_status_code        IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
104  p_inc_proj_progress_flag   IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
105  p_pm_product_code  IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
106  p_pm_task_reference    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
107  p_closed_date        IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
108  p_scheduled_start_date IN    DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
109  p_scheduled_finish_date IN   DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
110  p_link_task_flag        IN   VARCHAR2 := 'N',
111  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
112  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
113  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
114  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
115  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
116  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
117  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
118  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
119  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
120  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
121  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
122  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
123  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
124  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
125  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
126  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
127  p_address_id    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
128  p_address1      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
129  p_work_type_id  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
130  p_service_type_code IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
131  p_chargeable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
132  p_billable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
133  p_receive_project_invoice_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
134 
135  p_task_weighting_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
136  p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
137  p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
138  p_wq_actual_entry_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
139  p_task_progress_entry_page_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
140  p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
141  p_parent_structure_id        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
142  p_phase_code                 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
143  p_phase_version_id           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
144  -- xxlu added task DFF attributes
145  p_tk_attribute_category     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
146  p_tk_attribute1     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
147  p_tk_attribute2     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
148  p_tk_attribute3     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
149  p_tk_attribute4     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
150  p_tk_attribute5     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
151  p_tk_attribute6     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
152  p_tk_attribute7     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
153  p_tk_attribute8     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
154  p_tk_attribute9     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
155  p_tk_attribute10    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
156  -- end xxlu changes
157  --FP M development bug 330119
158  p_structure_type        IN      VARCHAR2 := 'WORKPLAN',
159  p_financial_flag        IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
160  p_Base_Perc_Comp_Deriv_Code     IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
161  --End FPM changes bug 330119
162  --bug 13923366
163  p_pm_source_code  IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
164  --bug 13923366
165  x_task_id              IN OUT  NOCOPY NUMBER, --File.Sql.39 bug 4440895
166  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
167  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
168  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
169 ) IS
170 
171    l_api_name                      CONSTANT VARCHAR(30) := 'CREATE_TASK';
172    l_api_version                   CONSTANT NUMBER      := 1.0;
173 
174    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
175    l_return_status                 VARCHAR2(1);
176    l_msg_count                     NUMBER;
177    l_msg_data                      VARCHAR2(250);
178    l_data                          VARCHAR2(250);
179    l_msg_index_out                 NUMBER;
180    l_error_msg_code                     VARCHAR2(250);
181 
182    l_carrying_out_org_id           NUMBER;
183    -- added for Bug: 4537865
184    l_new_carrying_out_org_id	   NUMBER;
185    -- added for Bug: 4537865
186    l_task_manager_id               NUMBER;
187    l_task_progress_entry_page_id   NUMBER;
188 
189 -- hyau Bug 2852753
190    l_delete_project_allowed      VARCHAR2(1);
191    l_update_proj_num_allowed      VARCHAR2(1);
192    l_update_proj_name_allowed    VARCHAR2(1);
193    l_update_proj_desc_allowed    VARCHAR2(1);
194    l_update_proj_dates_allowed    VARCHAR2(1);
195    l_update_proj_status_allowed  VARCHAR2(1);
196    l_update_proj_manager_allowed  VARCHAR2(1);
197    l_update_proj_org_allowed      VARCHAR2(1);
198    l_add_task_allowed            VARCHAR2(1);
199    l_delete_task_allowed          VARCHAR2(1);
200    l_update_task_num_allowed      VARCHAR2(1);
201    l_update_task_name_allowed    VARCHAR2(1);
202    l_update_task_dates_allowed    VARCHAR2(1);
203    l_update_task_desc_allowed    VARCHAR2(1);
204    l_update_parent_task_allowed  VARCHAR2(1);
205    l_update_task_org_allowed      VARCHAR2(1);
206 
207    l_err_code         NUMBER        := 0;
208    l_err_stack        VARCHAR2(200) := NULL;
209    l_err_stage        VARCHAR2(200) := NULL;
210 
211    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
212 
213    CURSOR get_product_code ( c_project_id NUMBER ) IS
214    SELECT pm_product_code
215    FROM PA_PROJECTS_ALL
216    WHERE project_id = c_project_id;
217 
218 -- end hyau Bug 2852753
219 
220 BEGIN
221     pa_debug.init_err_stack ('PA_TASK_PUB1.CREATE_TASK');
222 
223     IF (p_debug_mode = 'Y') THEN
224       pa_debug.debug('PA_TASK_PUB1.CREATE_TASK begin');
225     END IF;
226 
227     IF (p_commit = FND_API.G_TRUE) THEN
228       savepoint create_Task;
229     END IF;
230 
231     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
232       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
233     END IF;
234 
235 
236     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
237       FND_MSG_PUB.initialize;
238     END IF;
239 
240 --Bug 2168170
241 
242 --hsiu: bug 2669388
243 /*
244 --dbms_output.put_line('task number');
245       IF p_task_number IS NULL
246       THEN
247           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
248                                p_msg_name => 'PA_PS_TASK_NUMBER_NULL');
249           raise FND_API.G_EXC_ERROR;
250       END IF;
251 
252 --dbms_output.put_line('task name');
253       IF p_task_name IS NULL
254       THEN
255           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
256                                p_msg_name => 'PA_PS_TASK_NAME_NULL');
257           raise FND_API.G_EXC_ERROR;
258       END IF;
259 
260 --Bug 2168170
261 
262       IF PA_PROJ_ELEMENTS_UTILS.Check_element_number_Unique
263              (
264                p_element_number  => rtrim(p_task_number)
265               ,p_element_id      => null
266               ,p_project_id      => p_project_id
267               ,p_structure_id    => p_parent_structure_id
268               ,p_object_type     => 'PA_TASKS'
269              ) = 'N'
270       THEN
271           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
272                                p_msg_name => 'PA_PS_TASK_NOT_NUM_UNIQ');
273           raise FND_API.G_EXC_ERROR;
274 
275       END IF;
276 */
277 --end bug 2669388
278 
279 -- hyau Bug 2852753
280       IF p_calling_module = 'SELF_SERVICE'
281       and p_link_task_flag = 'N' -- Bug # 5072032.
282       THEN
283 
284         OPEN get_product_code(p_project_id);
285         FETCH get_product_code INTO l_pm_product_code;
286         CLOSE get_product_code;
287 
288         If l_pm_product_code IS NOT NULL THEN
289           pa_pm_controls.Get_Project_actions_allowed
290                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
291                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
292                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
293                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
294                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
295                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
296                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
297                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
298                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
299                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
300                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
301                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
302                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
303                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
304                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
305                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
306                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
307                  P_ERROR_CODE                 => l_err_code,
308          P_ERROR_STACK                    => l_err_stack,
309          P_ERROR_STAGE                => l_err_stage );
310           IF l_err_code <> 0 THEN
311             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
312                                  p_msg_name       => l_err_stage);
313           END IF;
314       IF l_add_task_allowed = 'N' THEN
315               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
316                                    p_msg_name       => 'PA_PR_PM_CANNOT_ADDTASK');
317               raise FND_API.G_EXC_ERROR;
318           END IF;
319         END IF;
320       END IF;
321 
322 -- end hyau Bug 2852753
323 
324 --dbms_output.put_line( 'Before check_task_mgr_name_or_id' );
325 --my_error_msg( 'Before check_task_mgr_name_or_id' );
326 
327 --The following check is required bcoz AMG passes only task manager id but not task manager
328 --name. So for AMG p_check_id_flag should always be 'Y' not 'A'.
329 --Confirmed with Selva.
330 
331     IF (p_calling_module = 'AMG')
332     THEN
333         --Check Task Manager and Task Manager Id
334       IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
335           (p_task_manager_name IS NOT NULL)) OR
336          ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
337           (p_task_manager_id IS NOT NULL)) THEN
338         --Call Check API.
339           pa_tasks_maint_utils.check_task_mgr_name_or_id(
340             p_task_mgr_name => p_task_manager_name,
341             p_task_mgr_id => p_task_manager_id,
342             p_project_id => p_project_id,
343             p_check_id_flag => 'Y',
344             x_task_mgr_id => l_task_manager_id,
345             x_return_status => l_return_status,
346             x_error_msg_code => l_error_msg_code);
347         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
348           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
349                                p_msg_name => l_error_msg_code);
350         END IF;
351       END IF; --End Name-Id Conversion
352     END IF;
353 
354     IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
355         --Check Task Manager and Task Manager Id
356 
357 --dbms_output.put_line('task manager');
358       IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
359           (p_task_manager_name IS NOT NULL)) OR
360          ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
361           (p_task_manager_id IS NOT NULL)) THEN
362         --Call Check API.
363           pa_tasks_maint_utils.check_task_mgr_name_or_id(
364             p_task_mgr_name => p_task_manager_name,
365             p_task_mgr_id => p_task_manager_id,
366             p_project_id => p_project_id,
367             --p_check_id_flag => PA_STARTUP.G_Check_ID_Flag,
368             p_check_id_flag => 'A',             --bug fix 2646762
369             x_task_mgr_id => l_task_manager_id,
370             x_return_status => l_return_status,
371             x_error_msg_code => l_error_msg_code);
372 --dbms_output.put_line( 'l_error_msg_code '||l_error_msg_code );
373         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
374           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
375                                p_msg_name => l_error_msg_code);
376         END IF;
377         --dbms_output.put_line( 'Task manager id '||l_task_manager_id||'flag '||PA_STARTUP.G_Check_ID_Flag );
378       END IF; --End Name-Id Conversion
379 
380 --dbms_output.put_line('carrying out org');
381     --Check Carrying out organization name and Carrying out organization Id
382       IF ((p_carrying_out_org_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
383           (p_carrying_out_org_name IS NOT NULL)) OR
384          ((p_carrying_out_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
385           (p_carrying_out_org_id IS NOT NULL)) THEN
386 
387 --dbms_output.put_line( 'Before Check_OrgName_Or_Id' );
388 
389   IF p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
390   THEN
391      l_carrying_out_org_id := FND_API.G_MISS_NUM;
392   ELSE
393      l_carrying_out_org_id := p_carrying_out_org_id;
394   END IF;
395 
396         pa_hr_org_utils.Check_OrgName_Or_Id
397             (p_organization_id      => l_carrying_out_org_id
398              ,p_organization_name   => p_carrying_out_org_name
399              ,p_check_id_flag       => 'Y'
400           -- ,x_organization_id     => l_carrying_out_org_id		* commented for Bug: 4537865
401              ,x_organization_id	    => l_new_carrying_out_org_id		-- added for Bug: 4537865
402              ,x_return_status       => l_return_status
403              ,x_error_msg_code      => l_error_msg_code);
404 
405         -- added for Bug: 4537865
406 	IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
407 		l_carrying_out_org_id := l_new_carrying_out_org_id;
408 	END IF;
409         -- added for Bug: 4537865
410 
411         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
412               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
413                                    p_msg_name       => l_error_msg_code);
414         END IF;
415       END IF; --End Name-Id Conversion
416     ELSE
417        l_task_manager_id     := p_task_manager_id;
418        l_carrying_out_org_id := p_carrying_out_org_id;
419     END IF;
420 
421     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
422       x_msg_count := FND_MSG_PUB.count_msg;
423       IF x_msg_count = 1 then
424          pa_interface_utils_pub.get_messages
425          (p_encoded        => FND_API.G_TRUE,
426           p_msg_index      => 1,
427           p_msg_count      => l_msg_count,
428           p_msg_data       => l_msg_data,
429           p_data           => l_data,
430           p_msg_index_out  => l_msg_index_out);
431          x_msg_data := l_data;
432       END IF;
433       raise FND_API.G_EXC_ERROR;
434     END IF;
435 
436     IF ((p_task_progress_entry_page <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
437         (p_task_progress_entry_page IS NOT NULL)) OR
438        ((p_task_progress_entry_page_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
439         (p_task_progress_entry_page_id IS NOT NULL)) THEN
440 
441       IF (p_task_progress_entry_page_ID = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
442         l_task_progress_entry_page_id := FND_API.G_MISS_NUM;
443       ELSE
444         l_task_progress_entry_page_id := p_task_progress_entry_page_id;
445       END IF;
446 
447       pa_page_layout_utils.Check_pagelayout_Name_Or_Id(
448         p_pagelayout_name => p_task_progress_entry_page
449        ,p_pagetype_code => 'AI'
450        ,x_pagelayout_id => l_task_progress_entry_page_id
451        ,x_return_status => l_return_status
452        ,x_error_message_code => l_error_msg_code
453       );
454 
455       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
456               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
457                                    p_msg_name       => l_error_msg_code);
458       END IF;
459     END IF;
460 
461     -- 3944597 Added code to validate task type , if it is not null and not G_PA_MISS_NUM
462     -- check task type is valid and effective
463     -- if it is not valid or not effective , throw error message
464 
465     IF ( p_TYPE_ID IS NOT NULL AND p_TYPE_ID  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN
466        IF ('N' = PA_TASK_TYPE_UTILS.check_tk_type_effective(p_TYPE_ID)) THEN
467           PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_EFF_TASK_TYPE_ERR');
468           l_return_status := FND_API.G_RET_STS_ERROR;
469        END IF;
470     END IF;
471 
472     -- 3944597 end
473 
474     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
475       x_msg_count := FND_MSG_PUB.count_msg;
476       IF x_msg_count = 1 then
477          pa_interface_utils_pub.get_messages
478          (p_encoded        => FND_API.G_TRUE,
479           p_msg_index      => 1,
480           p_msg_count      => l_msg_count,
481           p_msg_data       => l_msg_data,
482           p_data           => l_data,
483           p_msg_index_out  => l_msg_index_out);
484          x_msg_data := l_data;
485       END IF;
486       raise FND_API.G_EXC_ERROR;
487     END IF;
488 
489 --dbms_output.put_line( 'Inside CREATE_TASK API '||p_project_id );
490 
491 --my_error_msg( 'Inside CREATE_TASK API '||p_project_id  );
492 
493 --my_error_msg( 'Ref Task Id in create task'||p_ref_task_id );
494 
495 --dbms_output.put_line('create task pvt');
496     -- xxlu added task DFF attributes
497 	-- Added p_context attribute for bug#11928067 to differentiate the linked project
498     PA_TASK_PVT1.Create_Task(
499               p_api_version       => p_api_version
500              ,p_init_msg_list         => p_init_msg_list
501              ,p_commit              => p_commit
502              ,p_validate_only         => p_validate_only
503              ,p_validation_level    => p_validation_level
504              ,p_calling_module        => p_calling_module
505              ,p_debug_mode        => p_debug_mode
506 			 ,p_context           => p_context
507              ,p_max_msg_count         => p_max_msg_count
508              ,p_ref_task_id         => p_ref_task_id
509              ,p_peer_or_sub         => p_peer_or_sub
510              ,p_object_type       => p_object_type
511              ,p_project_id        => p_project_id
512              ,p_structure_id        => p_structure_id
513              ,p_structure_version_id => p_structure_version_id
514              ,p_task_number       => rtrim(p_task_number)
515              ,p_task_name         => rtrim(p_task_name)
516              ,p_task_description      => rtrim(p_task_description)
517              ,p_location_id       => p_location_id
518              ,p_country             => p_country
519              ,p_territory_code        => p_territory_code
520              ,p_state_region          => p_state_region
521              ,p_city                => p_city
522              ,p_task_manager_id => l_task_manager_id
523              ,p_carrying_out_org_id => l_carrying_out_org_id
524              ,p_priority_code         => p_priority_code
525              ,p_TYPE_ID           => p_TYPE_ID
526              ,p_status_code       => p_status_code
527              ,p_inc_proj_progress_flag  => p_inc_proj_progress_flag
528              ,p_pm_product_code => p_pm_product_code
529              ,p_pm_task_reference   => p_pm_task_reference
530              ,p_closed_date       => p_closed_date
531              ,p_scheduled_start_date => p_scheduled_start_date
532              ,p_scheduled_finish_date => p_scheduled_finish_date
533              ,p_link_task_flag        => p_link_task_flag
534              ,p_attribute_category   => p_attribute_category
535              ,p_attribute1   => rtrim(p_attribute1)
536              ,p_attribute2   => rtrim(p_attribute2)
537              ,p_attribute3   => rtrim(p_attribute3)
538              ,p_attribute4   => rtrim(p_attribute4)
539              ,p_attribute5   => rtrim(p_attribute5)
540              ,p_attribute6   => rtrim(p_attribute6)
541              ,p_attribute7   => rtrim(p_attribute7)
542              ,p_attribute8   => rtrim(p_attribute8)
543              ,p_attribute9   => rtrim(p_attribute9)
544              ,p_attribute10  => rtrim(p_attribute10)
545              ,p_attribute11  => rtrim(p_attribute11)
546              ,p_attribute12  => rtrim(p_attribute12)
547              ,p_attribute13  => rtrim(p_attribute13)
548              ,p_attribute14  => rtrim(p_attribute14)
549              ,p_attribute15  => rtrim(p_attribute15)
550                       ,p_address_id                        => p_address_id
551                       ,p_address1                          => p_address1
552                       ,p_work_type_id                      => p_work_type_id
553                       ,p_service_type_code                 => p_service_type_code
554                       ,p_chargeable_flag                   => p_chargeable_flag
555                       ,p_billable_flag                     => p_billable_flag
556                       ,p_receive_project_invoice_flag      => p_receive_project_invoice_flag
557                    ,p_task_weighting_deriv_code => p_task_weighting_deriv_code
558                    ,p_work_item_code => p_work_item_code
559                    ,p_uom_code => p_uom_code
560                    ,p_wq_actual_entry_code => p_wq_actual_entry_code
561                    ,p_task_progress_entry_page_id => l_task_progress_entry_page_id
562                    ,p_task_progress_entry_page => p_task_progress_entry_page
563                    ,p_parent_structure_id      => p_parent_structure_id
564                    ,p_phase_code               => p_phase_code
565                    ,p_phase_version_id         => p_phase_version_id
566              ,p_tk_attribute_category    => p_tk_attribute_category
567              ,p_tk_attribute1    => p_tk_attribute1
568              ,p_tk_attribute2    => p_tk_attribute2
569              ,p_tk_attribute3    => p_tk_attribute3
570              ,p_tk_attribute4    => p_tk_attribute4
571              ,p_tk_attribute5    => p_tk_attribute5
572              ,p_tk_attribute6    => p_tk_attribute6
573              ,p_tk_attribute7    => p_tk_attribute7
574              ,p_tk_attribute8    => p_tk_attribute8
575              ,p_tk_attribute9    => p_tk_attribute9
576              ,p_tk_attribute10 => p_tk_attribute10
577                 -- Begin : Added for FP_M changes Bug 3305199
578         ,p_structure_type        => p_structure_type
579         ,p_financial_flag        => p_financial_flag
580         ,p_Base_Perc_Comp_Deriv_Code => p_Base_Perc_Comp_Deriv_Code
581                 -- End : Added for FP_M changes Bug 3305199
582 			 ,p_pm_source_code      => p_pm_source_code --bug 13923366
583              ,x_task_id             => x_task_id
584              ,x_return_status         => l_return_status
585              ,x_msg_count         => l_msg_count
586              ,x_msg_data          => l_msg_data
587              );
588              -- end xxlu changes
589 --dbms_output.put_line( 'After CREATE_TASK API ' );
590 
591     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
592       x_msg_count := FND_MSG_PUB.count_msg;
593       IF x_msg_count = 1 then
594          pa_interface_utils_pub.get_messages
595          (p_encoded        => FND_API.G_TRUE,
596           p_msg_index      => 1,
597           p_msg_count      => l_msg_count,
598           p_msg_data       => l_msg_data,
599           p_data           => l_data,
600           p_msg_index_out  => l_msg_index_out);
601          x_msg_data := l_data;
602       END IF;
603       raise FND_API.G_EXC_ERROR;
604     END IF;
605 
606     --x_task_id := l_task_id;
607     x_return_status := FND_API.G_RET_STS_SUCCESS;
608 
609     IF (p_commit = FND_API.G_TRUE) THEN
610       COMMIT;
611     END IF;
612 
613     IF (p_debug_mode = 'Y') THEN
614       pa_debug.debug('PA_TASK_PUB1.CREATE_TASK END');
615     END IF;
616 EXCEPTION
617     when FND_API.G_EXC_ERROR then
618       if p_commit = FND_API.G_TRUE then
619          rollback to create_task;
620       end if;
621       x_return_status := FND_API.G_RET_STS_ERROR;
622     when FND_API.G_EXC_UNEXPECTED_ERROR 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     when OTHERS then
631       if p_commit = FND_API.G_TRUE then
632          rollback to create_task;
633       end if;
634       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
635       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
636                               p_procedure_name => 'CREATE_TASK',
637                               p_error_text     => SUBSTRB(SQLERRM,1,240));
638       raise;
639 END Create_Task;
640 
641 -- API name                      : Update_Task
642 -- Type                          : Public procedure
643 -- Pre-reqs                      : None
644 -- Return Value                  : N/A
645 -- Prameters
646 -- p_api_version          IN    NUMBER  N   Not Null    1.0
647 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
648 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
649 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
650 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
651 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
652 -- p_debug_mode       IN    VARCHAR2    N   Null    N
653 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
654 -- p_task_id          IN    NUMBER  N   Not Null
655 -- p_task_number          IN    VARCHAR2    N   Not Null
656 -- p_task_name        IN    VARCHAR2    N   Not Null
657 -- p_task_description   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
658 -- p_location_id          IN    NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
659 -- p_country          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
660 -- p_territory_code IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
661 -- p_state_region   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
662 -- p_city               IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
663 -- p_task_manager_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
664 -- p_task_manager_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
665 -- p_carrying_out_org_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
666 -- p_carrying_out_org_name  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
667 -- p_priority_code  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
668 -- p_TYPE_ID          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
669 -- p_status_code          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
670 -- p_inc_proj_progress_flag IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
671 -- p_pm_product_code    IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
672 -- p_pm_task_reference  IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
673 -- p_closed_date          IN    VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
674 -- p_transaction_start_date IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
675 -- p_transaction_finish_date IN   DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
676 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
677 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
678 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
679 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
680 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
681 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
682 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
683 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
684 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
685 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
686 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
687 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
688 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
689 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
690 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
691 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
692 -- p_record_version_number  IN  NUMBER  N   Not Null
693 -- x_return_status  OUT     VARCHAR2    N   Null
694 -- x_msg_count        OUT   NUMBER  N   Null
695 -- x_msg_data         OUT   VARCHAR2    N   Null
696 --
697 --  History
698 --
699 --  23-OCT-01   Majid Ansari             -Created
700 --  31-JUL-02   H Siu                    -Added transaction dates
701 --
702 
703 PROCEDURE Update_Task(
704  p_api_version        IN    NUMBER  :=1.0,
705  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
706  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
707  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
708  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
709  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
710  p_debug_mode         IN    VARCHAR2    :='N',
711  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
712  p_ref_task_id          IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
713  p_peer_or_sub          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
714  p_task_id              IN  NUMBER,
715  p_task_number        IN    VARCHAR2,
716  p_task_name          IN    VARCHAR2,
717  p_task_description IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
718  p_location_id        IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
719  p_country              IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
720  p_territory_code         IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
721  p_state_region           IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
722  p_city             IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
723  p_task_manager_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
724  p_task_manager_name    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
725  p_carrying_out_org_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
726  p_carrying_out_org_name    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
727  p_priority_code          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
728  p_TYPE_ID            IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
729  p_status_code        IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
730  p_inc_proj_progress_flag   IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
731  p_pm_product_code  IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
732  P_PM_SOURCE_CODE                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Added for Huawei 15876400
733  p_pm_task_reference    IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
734  p_closed_date        IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
735  p_transaction_start_date IN    DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
736  p_transaction_finish_date IN   DATE    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
737  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
738  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
739  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
740  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
741  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
742  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
743  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
744  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
745  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
746  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
747  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
748  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
749  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
750  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
751  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
752  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
753  p_address_id    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
754  p_address1      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
755  p_work_type_id  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
756  p_service_type_code IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
757  p_chargeable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
758  p_billable_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
759  p_receive_project_invoice_flag IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
760 
761  p_task_weighting_deriv_code IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
762  p_work_item_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
763  p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
764  p_wq_actual_entry_code IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
765  p_task_progress_entry_page_id IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
766  p_task_progress_entry_page IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
767  p_parent_structure_id      IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
768  p_phase_code               IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
769  p_phase_version_id         IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
770 
771  p_record_version_number    IN  NUMBER,
772  -- xxlu added task DFF attributes
773  p_tk_attribute_category     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
774  p_tk_attribute1     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
775  p_tk_attribute2     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
776  p_tk_attribute3     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
777  p_tk_attribute4     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
778  p_tk_attribute5     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
779  p_tk_attribute6     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
780  p_tk_attribute7     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
781  p_tk_attribute8     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
782  p_tk_attribute9     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
783  p_tk_attribute10    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
784  -- end xxlu changes
785  p_Base_Perc_Comp_Deriv_Code     IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
786  p_gen_etc_src_code      IN      VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
787  -- Bug#3491609 : Workflow Chanegs FP M
788  p_wf_item_type          IN    pa_proj_elements.wf_item_type%TYPE       :=NULL,
789  p_wf_process            IN    pa_proj_elements.wf_process%TYPE         :=NULL,
790  p_wf_lead_days          IN    pa_proj_elements.wf_start_lead_days%TYPE :=NULL,
791  p_wf_enabled_flag       IN    pa_proj_elements.enable_wf_flag%TYPE     :=NULL,
792   -- Bug#3491609 : Workflow Chanegs FP M
793  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
794  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
795  x_msg_data             OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
796  p_shared                IN      VARCHAR2 := 'X' -- Bug 3451073
797 ,p_dates_check            in VARCHAR2 := 'Y'    --bug 8301015
798 
799 ) IS
800    l_api_name                      CONSTANT VARCHAR(30) := 'UPDATE_TASK';
801    l_api_version                   CONSTANT NUMBER      := 1.0;
802 
803    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
804    l_return_status                 VARCHAR2(1);
805    l_msg_count                     NUMBER;
806    l_msg_data                      VARCHAR2(250);
807    l_data                          VARCHAR2(250);
808    l_msg_index_out                 NUMBER;
809    l_error_msg_code                VARCHAR2(250);
810    l_dummy                         VARCHAR2(1);
811 
812    l_carrying_out_org_id           NUMBER;
813    -- added for bug 4537865
814    l_new_carrying_out_org_id	   NUMBER;
815    -- added for bug 4537865
816    l_task_manager_id               NUMBER;
817    l_task_progress_entry_page_id   NUMBER;
818 
819    --task manager changes;
820    l_cur_task_mgr_person_id        NUMBER;
821    l_cur_task_mgr_person           VARCHAR2(250);
822    l_project_id                    NUMBER;
823 
824    CURSOR get_mgr_info IS
825       select ppe.MANAGER_PERSON_ID, papf.FULL_NAME
826         from pa_proj_elements ppe, per_all_people_f papf
827        where ppe.proj_element_id = p_task_id
828          AND ppe.manager_person_id = papf.person_id
829          AND  trunc(sysdate) between papf.effective_start_date
830              and nvl(papf.effective_end_date, sysdate+1);      --Included by avaithia for Bug # 3448680
831         --end task manager changes
832 
833 -- hyau Bug 2852753
834    l_delete_project_allowed      VARCHAR2(1);
835    l_update_proj_num_allowed      VARCHAR2(1);
836    l_update_proj_name_allowed    VARCHAR2(1);
837    l_update_proj_desc_allowed    VARCHAR2(1);
838    l_update_proj_dates_allowed    VARCHAR2(1);
839    l_update_proj_status_allowed  VARCHAR2(1);
840    l_update_proj_manager_allowed  VARCHAR2(1);
841    l_update_proj_org_allowed      VARCHAR2(1);
842    l_add_task_allowed            VARCHAR2(1);
843    l_delete_task_allowed          VARCHAR2(1);
844    l_update_task_num_allowed      VARCHAR2(1);
845    l_update_task_name_allowed    VARCHAR2(1);
846    l_update_task_dates_allowed    VARCHAR2(1);
847    l_update_task_desc_allowed    VARCHAR2(1);
848    l_update_parent_task_allowed  VARCHAR2(1);
849    l_update_task_org_allowed      VARCHAR2(1);
850 
851    l_err_code         NUMBER        := 0;
852    l_err_stack        VARCHAR2(200) := NULL;
853    l_err_stage        VARCHAR2(200) := NULL;
854 
855    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
856 
857    CURSOR get_product_code ( c_project_id NUMBER ) IS
858    SELECT pm_product_code
859    FROM PA_PROJECTS_ALL
860    WHERE project_id = c_project_id;
861 
862    l_cur_project_id      NUMBER;
863    CURSOR cur_proj_id IS
864      SELECT project_id
865        FROM pa_proj_elements
866       WHERE proj_element_id = p_task_id;
867 
868    CURSOR cur_trans_dates ( c_task_id NUMBER ) IS
869      SELECT START_DATE, COMPLETION_DATE
870      FROM pa_tasks
871      WHERE task_id = c_task_id;
872 
873    CURSOR cur_task_attr IS
874      SELECT pe.ELEMENT_NUMBER, pe.NAME, pe.DESCRIPTION, hou.name
875        FROM pa_proj_elements pe, hr_all_organization_units hou
876       WHERE pe.proj_element_id = p_task_id
877         AND pe.carrying_out_organization_id = hou.organization_id;
878 
879    --Bug 3940203 avaithia <start>
880    CURSOR cur_is_fin_task IS
881      SELECT task_id
882        FROM PA_TASKS
883       WHERE task_id = p_task_id ;
884 
885    l_tsk_id           PA_TASKS.task_id%TYPE ;
886    l_err_message       fnd_new_messages.message_text%TYPE  ;
887    --Bug 3940203 avaithia <End>
888 
889    l_trans_start_date  DATE;
890    l_trans_finish_date DATE;
891    l_task_number       VARCHAR2(100);
892    l_task_name         VARCHAR2(240);
893    l_task_description  VARCHAR2(2000);
894    l_organization_name VARCHAR2(240);
895 
896 -- end hyau Bug 2852753
897 BEGIN
898 
899 --dbms_output.put_line( 'Entered ' );
900 
901     pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK');
902 
903     IF (p_debug_mode = 'Y') THEN
904       pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK begin');
905     END IF;
906 
907     IF (p_commit = FND_API.G_TRUE) THEN
908       savepoint update_Task;
909     END IF;
910 
911     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
912       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
913     END IF;
914 
915 
916     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
917       FND_MSG_PUB.initialize;
918     END IF;
919 
920     --Bug 3940203 avaithia <<Start>>
921     -- From Forms and SelfService ,User should not be able to null out Organisation Field
922     -- for Financial Tasks (because Organisation field is a NOT NULL Column in pa_tasks table)
923 
924     -- Actually ,If No Org. Value is passed from UI ,(If user explicitly nulls out the org. field)
925     -- in PA_TASKS table , the Org. for the task is defaulted as the Project's Org.
926 
927     -- Current Behaviour is : Though it is populating default org.id (project's org.id) for task
928     --                        in pa_tasks table,In UI it is showing Org. field as NULL
929 
930     -- We should not allow this (Org. field being nulled out )
931     -- Note : Same should be the case with AMG also .Because ,AMG changes will be reflected in UI
932 
933        IF p_calling_module = 'SELF_SERVICE' OR
934           p_calling_module = 'FORMS' OR
935           p_calling_module = 'AMG'
936        THEN
937             OPEN cur_is_fin_task ;
938             FETCH cur_is_fin_task INTO l_tsk_id ;
939 
940             IF cur_is_fin_task%FOUND THEN
941                 CLOSE cur_is_fin_task ;
942                 --The task is a financial task
943                 --So,If Organisation is passed as NULL
944                 --Then throw error message
945 
946                 --In Self Service ,We pass Organisation Name anyway.So,If it is not passed throw error
947                 --In FORMS / AMG ,We may be getting the Org. ID .So,Check If any of name or id is available,it is ok.
948                 --        If both are not available then throw error.
949 
950                 IF (p_carrying_out_org_name IS NULL)
951                     OR (p_carrying_out_org_name =PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
952 
953                     l_err_message := FND_MESSAGE.GET_STRING('PA','PA_SU_NO_ORG');
954                     --Now,Organisation Name is not passed .
955                     --If it is AMG /FORMS ,If Org.Id is not also there ,throw error
956                     IF p_calling_module = 'AMG' OR p_calling_module = 'FORMS' THEN
957 
958                         IF (p_carrying_out_org_id IS NULL)
959                         THEN /*We should not check for MISS_NUM In case of AMG/FORMS - Review Comment Incorporated :3940203 */
960 
961                             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
962                                                  p_msg_name       => 'PA_PS_TASK_NAME_NUM_ERR',
963                                                  p_token1         => 'TASK_NAME',
964                                                  p_value1         => p_task_name,
965                                                  p_token2         => 'TASK_NUMBER',
966                                          p_value2         => p_task_number,
967                                                  p_token3         => 'MESSAGE',
968                                                  p_value3         => l_err_message);
969                             RAISE FND_API.G_EXC_ERROR ;
970                         END IF;
971 
972                     ELSE -- This is case of Self Service
973                              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
974                                                  p_msg_name       => 'PA_PS_TASK_NAME_NUM_ERR',
975                                                  p_token1         => 'TASK_NAME',
976                                                  p_value1         => p_task_name,
977                                                  p_token2         => 'TASK_NUMBER',
978                                                  p_value2         => p_task_number,
979                                                  p_token3         => 'MESSAGE',
980                                                  p_value3         => l_err_message);
981                             RAISE FND_API.G_EXC_ERROR ;
982                     END IF ; --End If AMG Context
983                 END IF;      --End If Org.Name is NULL
984             END IF;          --End If Financial Task
985 
986        END IF;
987 
988     --Bug 3940203 avaithia <<End>>
989 
990 -- hyau Bug 2852753
991       IF p_calling_module = 'SELF_SERVICE' THEN
992 
993         OPEN cur_proj_id;
994         FETCH cur_proj_id INTO l_cur_project_id;
995         CLOSE cur_proj_id;
996 
997         OPEN get_product_code(l_cur_project_id);
998         FETCH get_product_code INTO l_pm_product_code;
999         CLOSE get_product_code;
1000 
1001         If l_pm_product_code IS NOT NULL THEN
1002           pa_pm_controls.Get_Project_actions_allowed
1003                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
1004                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
1005                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
1006                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
1007                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
1008                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
1009                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
1010                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
1011                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
1012                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
1013                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
1014                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
1015                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
1016                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
1017                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
1018                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
1019                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
1020                  P_ERROR_CODE                 => l_err_code,
1021          P_ERROR_STACK                    => l_err_stack,
1022          P_ERROR_STAGE                => l_err_stage );
1023 
1024           IF l_err_code <> 0 THEN
1025             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1026                                  p_msg_name       => l_err_stage);
1027           END IF;
1028 
1029           OPEN cur_task_attr;
1030           FETCH cur_task_attr INTO l_task_number, l_task_name, l_task_description, l_organization_name;
1031           CLOSE cur_task_attr;
1032 
1033           -- Check Update Task number
1034           IF ( l_task_number <> p_task_number ) THEN
1035         IF l_update_task_num_allowed = 'N' THEN
1036               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1037                                    p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_NUM');
1038               raise FND_API.G_EXC_ERROR;
1039             END IF;
1040           END IF;
1041 
1042           -- Check Update Task Name
1043           IF ( l_task_name <> p_task_name ) THEN
1044         IF l_update_task_name_allowed = 'N' THEN
1045               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1046                                    p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_NAME');
1047               raise FND_API.G_EXC_ERROR;
1048             END IF;
1049           END IF;
1050 
1051           -- If financial task exists, Check Update Task Date
1052           IF ('Y' = PA_PROJECT_DATES_UTILS.CHECK_FINANCIAL_TASK_EXISTS(p_proj_element_id => p_task_id)) THEN
1053             OPEN cur_trans_dates(p_task_id);
1054             FETCH cur_trans_dates INTO l_trans_start_date, l_trans_finish_date;
1055             CLOSE cur_trans_dates;
1056 
1057             -- if dates are different then check the pm controls
1058             IF ( nvl(p_transaction_start_date, sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) OR
1059                ( nvl(p_transaction_finish_date, sysdate) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) THEN
1060 
1061               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
1062                  ( 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
1063                  ( l_trans_start_date is null and p_transaction_start_date is not null) OR
1064                  ( l_trans_start_date is not null and p_transaction_start_date is null) OR
1065                  ( l_trans_finish_date is null and p_transaction_finish_date is not null) OR
1066                  ( l_trans_finish_date is not null and p_transaction_finish_date is null) THEN
1067               IF l_update_task_dates_allowed = 'N' THEN
1068                     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1069                                          p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_DATES');
1070                     raise FND_API.G_EXC_ERROR;
1071                   END IF;
1072               END IF;
1073             END IF;
1074           END IF;
1075 
1076           -- Check Update Task Description
1077           IF (l_task_description is not null and p_task_description is not null and l_task_description <> p_task_description ) OR
1078              (l_task_description is null and p_task_description is not null) OR
1079              (l_task_description is not null and p_task_description is null) THEN
1080            IF l_update_task_desc_allowed = 'N' THEN
1081                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1082                                       p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_DESC');
1083                  raise FND_API.G_EXC_ERROR;
1084                END IF;
1085           END IF;
1086 
1087           -- Check Update Task Organization
1088           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
1089              (l_organization_name is null and p_carrying_out_org_name is not null) OR
1090              (l_organization_name is not null and p_carrying_out_org_name is null) THEN
1091            IF l_update_task_org_allowed = 'N' THEN
1092                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1093                                       p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_ORG');
1094                  raise FND_API.G_EXC_ERROR;
1095                END IF;
1096           END IF;
1097 
1098         END IF;
1099       END IF;
1100 
1101 -- end hyau Bug 2852753
1102 
1103 
1104 --dbms_output.put_line( 'Lock row ' );
1105 
1106 IF (p_calling_module <> 'FORMS')
1107 THEN
1108     --Lock row
1109     IF( p_validate_only <> FND_API.G_TRUE) THEN
1110       BEGIN
1111         select 'x' into l_dummy
1112         from PA_PROJ_ELEMENTS
1113         where proj_element_id = p_task_id
1114         and record_version_number = p_record_version_number
1115         for update of record_version_number NOWAIT;
1116       EXCEPTION
1117         WHEN TIMEOUT_ON_RESOURCE THEN
1118           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1119                                p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1120           l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1121         WHEN NO_DATA_FOUND THEN
1122           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1123                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
1124           l_msg_data := 'PA_XC_RECORD_CHANGED';
1125         WHEN OTHERS THEN
1126           IF SQLCODE = -54 then
1127              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1128                                   p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1129              l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1130           ELSE
1131              raise;
1132           END IF;
1133       END;
1134     ELSE
1135 --dbms_output.put_line( 'check record_version_number ' );
1136 
1137       --check record_version_number
1138       BEGIN
1139         select 'x' into l_dummy
1140         from PA_PROJ_ELEMENTS
1141         where proj_element_id = p_task_id
1142         and record_version_number = p_record_version_number;
1143       EXCEPTION
1144         WHEN NO_DATA_FOUND THEN
1145           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1146                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
1147           l_msg_data := 'PA_XC_RECORD_CHANGED';
1148         WHEN OTHERS THEN
1149           RAISE;
1150       END;
1151     END IF;
1152 
1153       l_msg_count := FND_MSG_PUB.count_msg;
1154 
1155       IF l_msg_count > 0 THEN
1156          x_msg_count := l_msg_count;
1157          x_return_status := 'E';
1158          RAISE  FND_API.G_EXC_ERROR;
1159       END IF;
1160 END IF;
1161 
1162 --Bug 2168170
1163       IF p_task_number IS NULL
1164       THEN
1165           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1166                                p_msg_name => 'PA_PS_TASK_NUMBER_NULL');
1167           raise FND_API.G_EXC_ERROR;
1168       END IF;
1169 
1170       IF p_task_name IS NULL
1171       THEN
1172           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1173                                p_msg_name => 'PA_PS_TASK_NAME_NULL');
1174           raise FND_API.G_EXC_ERROR;
1175       END IF;
1176 
1177 --Bug 2168170
1178 
1179 --dbms_output.put_line( 'Before calling Name to Id conv ' );
1180 
1181 --my_error_msg( 'Before calling Name to Id conv. ' );
1182 --The following check is required bcoz AMG passes only task manager id but not task manager
1183 --name. So for AMG p_check_id_flag should always be 'Y' not 'A'.
1184 --Confirmed with Selva.
1185 
1186     IF (p_calling_module = 'AMG')
1187     THEN
1188         --Check Task Manager and Task Manager Id
1189       IF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1190           (p_task_manager_name IS NOT NULL)) OR
1191          ((p_task_manager_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1192           (p_task_manager_id IS NOT NULL)) THEN
1193         --Call Check API.
1194           select project_id into l_project_id
1195           from PA_PROJ_ELEMENTS
1196           where proj_element_id = p_task_id;
1197 
1198           select MANAGER_PERSON_ID into l_cur_task_mgr_person_id
1199           from pa_proj_elements
1200           where proj_element_id = p_task_id;
1201 
1202           If (p_task_manager_id <> l_cur_task_mgr_person_id)
1203              OR (l_cur_task_mgr_person_id IS NULL)
1204              OR (p_task_manager_id IS NULL) THEN
1205           --end changes for task manager
1206 
1207             pa_tasks_maint_utils.check_task_mgr_name_or_id(
1208              p_task_mgr_name => p_task_manager_name,
1209              p_task_mgr_id => p_task_manager_id,
1210              p_project_id => l_project_id,
1211              p_check_id_flag => 'Y',
1212              x_task_mgr_id => l_task_manager_id,
1213              x_return_status => l_return_status,
1214              x_error_msg_code => l_error_msg_code);
1215              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1216                  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1217                                p_msg_name => l_error_msg_code);
1218 	         raise FND_API.G_EXC_ERROR;                      -- bug 4165509
1219              END IF;
1220           ELSE
1221             l_task_manager_id := l_cur_task_mgr_person_id;
1222           END IF;
1223       END IF; --End Name-Id Conversion
1224     END IF;
1225 
1226     IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
1227       --Check Task Manager and Task Manager Id
1228       /* Bug 2769960 -- added check for task_manager is passed as null
1229          If task manager is passed as null it means user want to remove task manager.
1230      there is no way in self service, so that  mgr_id is passed but not mgr_name
1231       */
1232       IF p_task_manager_name IS NULL THEN
1233     l_task_manager_id := null;
1234       ELSIF ((p_task_manager_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1235              (p_task_manager_name IS NOT NULL)) THEN
1236         --Call Check API.
1237         --added for task manager changes
1238           select project_id into l_project_id
1239           from PA_PROJ_ELEMENTS
1240           where proj_element_id = p_task_id;
1241 
1242           OPEN get_mgr_info;
1243           FETCH get_mgr_info INTO l_cur_task_mgr_person_id, l_cur_task_mgr_person;
1244           CLOSE get_mgr_info;
1245 
1246           If (p_task_manager_id <> l_cur_task_mgr_person_id or p_task_manager_name <> l_cur_task_mgr_person)
1247              --hsiu: added for bug 2688475
1248              --need these validation for expired project members
1249              -- who are still task managers
1250              OR (l_cur_task_mgr_person_id IS NULL)
1251              OR (p_task_manager_id IS NULL)
1252              OR (l_cur_task_mgr_person IS NULL)
1253              OR (p_task_manager_name IS NULL) THEN
1254           --end changes for task manager
1255 
1256             pa_tasks_maint_utils.check_task_mgr_name_or_id(
1257               p_task_mgr_name => p_task_manager_name,
1258               p_task_mgr_id => p_task_manager_id,
1259               p_project_id => l_project_id,
1260               p_check_id_flag => 'A',        --bug fix 2646762
1261               x_task_mgr_id => l_task_manager_id,
1262               x_return_status => l_return_status,
1263               x_error_msg_code => l_error_msg_code);
1264 
1265             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1266                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1267                                  p_msg_name => l_error_msg_code);
1268 	        raise FND_API.G_EXC_ERROR;        -- bug 4165509
1269             END IF;
1270 
1271             --task manager changes
1272             --hsiu: added for bug 2688475
1273           ELSE
1274              l_task_manager_id := l_cur_task_mgr_person_id;
1275           END IF;
1276           --end task manager changes
1277       END IF; --End Name-Id Conversion
1278 
1279     --Check Carrying out organization name and Carrying out organization Id
1280       IF ((p_carrying_out_org_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1281           (p_carrying_out_org_name IS NOT NULL)) OR
1282          ((p_carrying_out_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1283           (p_carrying_out_org_id IS NOT NULL)) THEN
1284 --dbms_output.put_line( 'Before calling Name to Id conv : Check_OrgName_Or_Id' );
1285 
1286 --dbms_output.put_line( 'Before Id to name p_carrying_out_org_id '||p_carrying_out_org_id );
1287 --dbms_output.put_line( 'Before Id to name p_carrying_out_org_name '||p_carrying_out_org_name );
1288 
1289 --my_error_msg( 'p_carrying_out_org_id '||p_carrying_out_org_id );
1290 --my_error_msg( 'p_carrying_out_org_name '||p_carrying_out_org_name );
1291 
1292         IF p_carrying_out_org_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1293         THEN
1294             l_carrying_out_org_id := FND_API.G_MISS_NUM;
1295         ELSE
1296             l_carrying_out_org_id := p_carrying_out_org_id;
1297         END IF;
1298 
1299         pa_hr_org_utils.Check_OrgName_Or_Id
1300             (p_organization_id      => l_carrying_out_org_id
1301              ,p_organization_name   => p_carrying_out_org_name
1302              ,p_check_id_flag       => 'A'
1303            --,x_organization_id     => l_carrying_out_org_id	  * commented for Bug: 4537865
1304              ,x_organization_id	    => l_new_carrying_out_org_id  -- added for bug 4537865
1305              ,x_return_status       => l_return_status
1306              ,x_error_msg_code      => l_error_msg_code);
1307 
1308         -- added for bug 4537865
1309 	IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1310 		l_carrying_out_org_id := l_new_carrying_out_org_id;
1311 	END IF;
1312         -- added for bug 4537865
1313 --dbms_output.put_line( 'After Id to name p_carrying_out_org_id '||p_carrying_out_org_id );
1314 --dbms_output.put_line( 'After Id to name l_carrying_out_org_id '||l_carrying_out_org_id );
1315 
1316 
1317         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1318               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1319                                    p_msg_name       => l_error_msg_code);
1320         END IF;
1321       END IF; --End Name-Id Conversion
1322     ELSE
1323        l_task_manager_id     := p_task_manager_id;
1324        l_carrying_out_org_id := p_carrying_out_org_id;
1325     END IF;
1326 --dbms_output.put_line( 'After calling Name to Id conv : Check_OrgName_Or_Id' );
1327     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1328       x_msg_count := FND_MSG_PUB.count_msg;
1329       IF x_msg_count = 1 then
1330          pa_interface_utils_pub.get_messages
1331          (p_encoded        => FND_API.G_TRUE,
1332           p_msg_index      => 1,
1333           p_msg_count      => l_msg_count,
1334           p_msg_data       => l_msg_data,
1335           p_data           => l_data,
1336           p_msg_index_out  => l_msg_index_out);
1337          x_msg_data := l_data;
1338       END IF;
1339       raise FND_API.G_EXC_ERROR;
1340     END IF;
1341 
1342     IF ((p_task_progress_entry_page <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
1343         (p_task_progress_entry_page IS NOT NULL)) OR
1344        ((p_task_progress_entry_page_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
1345         (p_task_progress_entry_page_id IS NOT NULL)) THEN
1346 
1347       IF (p_task_progress_entry_page_ID = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1348         l_task_progress_entry_page_id := FND_API.G_MISS_NUM;
1349       ELSE
1350         l_task_progress_entry_page_id := p_task_progress_entry_page_id;
1351       END IF;
1352 
1353       pa_page_layout_utils.Check_pagelayout_Name_Or_Id(
1354         p_pagelayout_name => p_task_progress_entry_page
1355        ,p_pagetype_code => 'AI'
1356        ,x_pagelayout_id => l_task_progress_entry_page_id
1357        ,x_return_status => l_return_status
1358        ,x_error_message_code => l_error_msg_code
1359       );
1360 
1361       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1362               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1363                                    p_msg_name       => l_error_msg_code);
1364       END IF;
1365 
1366 
1367     END IF;
1368 
1369     /*Bug 4089623 Lead Days Cannot be negative */
1370     IF  ( nvl(p_wf_lead_days,0) < 0 )
1371     THEN
1372          PA_UTILS.add_message('PA','PA_INVALID_LEAD_DAYS');
1373          l_return_status := FND_API.G_RET_STS_ERROR;
1374     END IF;
1375 
1376     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1377       x_msg_count := FND_MSG_PUB.count_msg;
1378       IF x_msg_count = 1 then
1379          pa_interface_utils_pub.get_messages
1380          (p_encoded        => FND_API.G_TRUE,
1381           p_msg_index      => 1,
1382           p_msg_count      => l_msg_count,
1383           p_msg_data       => l_msg_data,
1384           p_data           => l_data,
1385           p_msg_index_out  => l_msg_index_out);
1386          x_msg_data := l_data;
1387       END IF;
1388       raise FND_API.G_EXC_ERROR;
1389     END IF;
1390 
1391 --my_error_msg( 'Before calling private API. ' );
1392 
1393 --dbms_output.put_line( 'Before calling private API.' );
1394     PA_TASK_PVT1.Update_Task(
1395               p_api_version       => p_api_version
1396              ,p_init_msg_list         => p_init_msg_list
1397              ,p_commit              => p_commit
1398              ,p_validate_only         => p_validate_only
1399              ,p_validation_level    => p_validation_level
1400              ,p_calling_module  => p_calling_module
1401              ,p_debug_mode        => p_debug_mode
1402              ,p_max_msg_count         => p_max_msg_count
1403              ,p_ref_task_id         => p_ref_task_id
1404              ,p_peer_or_sub         => p_peer_or_sub
1405              ,p_task_id             => p_task_id
1406              ,p_task_number       => rtrim(p_task_number)
1407              ,p_task_name         => rtrim(p_task_name)
1408              ,p_task_description    => rtrim(p_task_description)
1409              ,p_location_id       => p_location_id
1410              ,p_country             => p_country
1411              ,p_territory_code  => p_territory_code
1412              ,p_state_region    => p_state_region
1413              ,p_city                => p_city
1414              ,p_task_manager_id => l_task_manager_id
1415              ,p_carrying_out_org_id => l_carrying_out_org_id
1416              ,p_priority_code         => p_priority_code
1417              ,p_TYPE_ID           => p_TYPE_ID
1418              ,p_status_code       => p_status_code
1419              ,p_inc_proj_progress_flag  => p_inc_proj_progress_flag
1420              ,p_pm_product_code => p_pm_product_code
1421 			 ,P_PM_SOURCE_CODE				  => P_PM_SOURCE_CODE -- Huawei 15876400 source code
1422              ,p_pm_task_reference   => p_pm_task_reference
1423              ,p_closed_date       => p_closed_date
1424              ,p_transaction_start_date => p_transaction_start_date
1425              ,p_transaction_finish_date => p_transaction_finish_date
1426              ,p_attribute_category  => p_attribute_category
1427              ,p_attribute1   => rtrim(p_attribute1)
1428              ,p_attribute2   => rtrim(p_attribute2)
1429              ,p_attribute3   => rtrim(p_attribute3)
1430              ,p_attribute4   => rtrim(p_attribute4)
1431              ,p_attribute5   => rtrim(p_attribute5)
1432              ,p_attribute6   => rtrim(p_attribute6)
1433              ,p_attribute7   => rtrim(p_attribute7)
1434              ,p_attribute8   => rtrim(p_attribute8)
1435              ,p_attribute9   => rtrim(p_attribute9)
1436              ,p_attribute10  => rtrim(p_attribute10)
1437              ,p_attribute11  => rtrim(p_attribute11)
1438              ,p_attribute12  => rtrim(p_attribute12)
1439              ,p_attribute13  => rtrim(p_attribute13)
1440              ,p_attribute14  => rtrim(p_attribute14)
1441              ,p_attribute15  => rtrim(p_attribute15)
1442                       ,p_address_id                        => p_address_id
1443                       ,p_address1                          => p_address1
1444                       ,p_work_type_id                      => p_work_type_id
1445                       ,p_service_type_code                 => p_service_type_code
1446                       ,p_chargeable_flag                   => p_chargeable_flag
1447                       ,p_billable_flag                     => p_billable_flag
1448                       ,p_receive_project_invoice_flag      => p_receive_project_invoice_flag
1449                    ,p_task_weighting_deriv_code => p_task_weighting_deriv_code
1450                    ,p_work_item_code => p_work_item_code
1451                    ,p_uom_code => p_uom_code
1452                    ,p_wq_actual_entry_code => p_wq_actual_entry_code
1453                    ,p_task_progress_entry_page_id => l_task_progress_entry_page_id
1454                    ,p_task_progress_entry_page => p_task_progress_entry_page
1455                    ,p_parent_structure_id        => p_parent_structure_id
1456                    ,p_phase_code                 => p_phase_code
1457                    ,p_phase_version_id           => p_phase_version_id
1458 
1459              ,p_record_version_number => p_record_version_number
1460              ,p_tk_attribute_category    => p_tk_attribute_category
1461              ,p_tk_attribute1    => p_tk_attribute1
1462              ,p_tk_attribute2    => p_tk_attribute2
1463              ,p_tk_attribute3    => p_tk_attribute3
1464              ,p_tk_attribute4    => p_tk_attribute4
1465              ,p_tk_attribute5    => p_tk_attribute5
1466              ,p_tk_attribute6    => p_tk_attribute6
1467              ,p_tk_attribute7    => p_tk_attribute7
1468              ,p_tk_attribute8    => p_tk_attribute8
1469              ,p_tk_attribute9    => p_tk_attribute9
1470              ,p_tk_attribute10 => p_tk_attribute10
1471                 -- Begin : Added for FP_M changes Bug 3305199
1472         ,p_Base_Perc_Comp_Deriv_Code => p_Base_Perc_Comp_Deriv_Code
1473                 -- End : Added for FP_M changes Bug 3305199
1474              ,p_gen_etc_src_code        => p_gen_etc_src_code
1475              ,p_wf_item_type    => p_wf_item_type
1476              ,p_wf_process      => p_wf_process
1477              ,p_wf_lead_days    => p_wf_lead_days
1478              ,p_wf_enabled_flag => p_wf_enabled_flag
1479              ,x_return_status           => l_return_status
1480              ,x_msg_count           => x_msg_count
1481              ,x_msg_data            => x_msg_data
1482          ,p_shared                  => p_shared       -- Bug 3451073
1483          ,p_dates_check =>p_dates_check --bug 8301015
1484              );
1485 
1486 --dbms_output.put_line( 'After calling private API.' );
1487 
1488     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1489       x_msg_count := FND_MSG_PUB.count_msg;
1490       IF x_msg_count = 1 then
1491          pa_interface_utils_pub.get_messages
1492          (p_encoded        => FND_API.G_TRUE,
1493           p_msg_index      => 1,
1494           p_msg_count      => l_msg_count,
1495           p_msg_data       => l_msg_data,
1496           p_data           => l_data,
1497           p_msg_index_out  => l_msg_index_out);
1498          x_msg_data := l_data;
1499       END IF;
1500       raise FND_API.G_EXC_ERROR;
1501     END IF;
1502 
1503     x_return_status := FND_API.G_RET_STS_SUCCESS;
1504 
1505     IF (p_commit = FND_API.G_TRUE) THEN
1506       COMMIT;
1507     END IF;
1508 
1509     IF (p_debug_mode = 'Y') THEN
1510       pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK END');
1511     END IF;
1512 EXCEPTION
1513     when FND_API.G_EXC_ERROR 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_ERROR;
1518     when FND_API.G_EXC_UNEXPECTED_ERROR then
1519       if p_commit = FND_API.G_TRUE then
1520          rollback to update_task;
1521       end if;
1522       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1523       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1524                               p_procedure_name => 'UPDATE_TASK',
1525                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1526     when OTHERS then
1527       if p_commit = FND_API.G_TRUE then
1528          rollback to update_task;
1529       end if;
1530       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1531       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1532                               p_procedure_name => 'UPDATE_TASK',
1533                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1534       raise;
1535 
1536 END Update_Task;
1537 
1538 -- API name                      : Create_Task_version
1539 -- Type                          : Public procedure
1540 -- Pre-reqs                      : None
1541 -- Return Value                  : N/A
1542 -- Prameters
1543 -- p_api_version          IN    NUMBER  N   Not Null    1.0
1544 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
1545 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
1546 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
1547 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
1548 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
1549 -- p_debug_mode       IN    VARCHAR2    N   Null    N
1550 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1551 -- p_ref_task_version_id    IN  NUMBER  N   Not Null
1552 -- p_peer_or_sub    IN  VARCHAR2    N   Not Null
1553 -- p_task_id    IN  NUMBER  N   Not Null
1554 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1555 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1556 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1557 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1558 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1559 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1560 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1561 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1562 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1563 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1564 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1565 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1566 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1567 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1568 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1569 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1570 -- x_task_version_id    OUT NUMBER  N   Null
1571 -- x_return_status  OUT     VARCHAR2    N   Null
1572 -- x_msg_count        OUT   NUMBER  N   Null
1573 -- x_msg_data         OUT   VARCHAR2    N   Null
1574 --
1575 --  History
1576 --
1577 --  23-OCT-01   Majid Ansari             -Created
1578 --
1579 
1580 PROCEDURE Create_Task_Version(
1581  p_api_version        IN    NUMBER  :=1.0,
1582  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
1583  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
1584  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
1585  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
1586  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
1587  p_debug_mode         IN    VARCHAR2    :='N',
1588  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1589  p_ref_task_version_id  IN  NUMBER,
1590  p_peer_or_sub        IN    VARCHAR2,
1591  p_task_id              IN  NUMBER,
1592  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1593  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1594  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1595  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1596  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1597  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1598  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1599  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1600  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1601  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1602  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1603  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1604  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1605  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1606  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1607  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1608 
1609  p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1610  p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
1611 --bug 3301192
1612 p_financial_task_flag                IN VARCHAR2 := 'N',
1613 --bug 3301192
1614  x_task_version_id  OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
1615  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1616  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
1617  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1618 ) IS
1619    l_api_name                      CONSTANT VARCHAR(30) := 'CREATE_TASK_VERSION';
1620    l_api_version                   CONSTANT NUMBER      := 1.0;
1621 
1622    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1623    l_return_status                 VARCHAR2(1);
1624    l_msg_count                     NUMBER;
1625    l_msg_data                      VARCHAR2(250);
1626    l_data                          VARCHAR2(250);
1627    l_msg_index_out                 NUMBER;
1628    l_error_msg_code                     VARCHAR2(250);
1629 
1630    l_carrying_out_org_id           NUMBER;
1631    l_task_manager_id               NUMBER;
1632 BEGIN
1633 
1634     pa_debug.init_err_stack ('PA_TASK_PUB1.CREATE_TASK_VERSION');
1635 
1636     IF (p_debug_mode = 'Y') THEN
1637        pa_debug.debug('PA_TASK_PUB1.CREATE_TASK_VERSION begin');
1638     END IF;
1639 
1640     IF (p_commit = FND_API.G_TRUE) THEN
1641       savepoint create_Task_version;
1642     END IF;
1643 
1644     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
1645       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1646     END IF;
1647 
1648 
1649     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
1650       FND_MSG_PUB.initialize;
1651     END IF;
1652 
1653 --dbms_output.put_line( 'Before private API' );
1654 
1655     PA_TASK_PVT1.Create_Task_Version(
1656              p_api_version        => p_api_version
1657             ,p_init_msg_list          => p_init_msg_list
1658             ,p_commit               => p_commit
1659             ,p_validate_only          => p_validate_only
1660             ,p_validation_level => p_validation_level
1661             ,p_calling_module         => p_calling_module
1662             ,p_debug_mode         => p_debug_mode
1663             ,p_max_msg_count          => p_max_msg_count
1664             ,p_ref_task_version_id  => p_ref_task_version_id
1665             ,p_peer_or_sub        => p_peer_or_sub
1666             ,p_task_id              => p_task_id
1667             ,p_attribute_category   => p_attribute_category
1668             ,p_attribute1    => p_attribute1
1669             ,p_attribute2    => p_attribute2
1670             ,p_attribute3    => p_attribute3
1671             ,p_attribute4    => p_attribute4
1672             ,p_attribute5    => p_attribute5
1673             ,p_attribute6    => p_attribute6
1674             ,p_attribute7    => p_attribute7
1675             ,p_attribute8    => p_attribute8
1676             ,p_attribute9    => p_attribute9
1677             ,p_attribute10   => p_attribute10
1678             ,p_attribute11   => p_attribute11
1679             ,p_attribute12   => p_attribute12
1680             ,p_attribute13   => p_attribute13
1681             ,p_attribute14   => p_attribute14
1682             ,p_attribute15   => p_attribute15
1683         ,p_WEIGHTING_PERCENTAGE => p_WEIGHTING_PERCENTAGE
1684         ,p_TASK_UNPUB_VER_STATUS_CODE => p_TASK_UNPUB_VER_STATUS_CODE
1685         ,p_financial_task_flag  => p_financial_task_flag        -- FP_M changes : Bug 3305199 : Bhumesh
1686             ,x_task_version_id => x_task_version_id
1687             ,x_return_status   => x_return_status
1688             ,x_msg_count     => x_msg_count
1689             ,x_msg_data        => x_msg_data
1690             );
1691 
1692 --dbms_output.put_line( 'Status after private call in public API '||x_return_status );
1693     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1694     --IF (x_return_status <> 'S' ) THEN
1695       x_msg_count := FND_MSG_PUB.count_msg;
1696       IF x_msg_count = 1 then
1697          pa_interface_utils_pub.get_messages
1698          (p_encoded        => FND_API.G_TRUE,
1699           p_msg_index      => 1,
1700           p_msg_count      => l_msg_count,
1701           p_msg_data       => l_msg_data,
1702           p_data           => l_data,
1703           p_msg_index_out  => l_msg_index_out);
1704          x_msg_data := l_data;
1705       END IF;
1706 --dbms_output.put_line( 'raising exception '||x_return_status );
1707 
1708       raise FND_API.G_EXC_ERROR;
1709     END IF;
1710 
1711 --dbms_output.put_line( 'Final status '||x_return_status );
1712 
1713     x_return_status := FND_API.G_RET_STS_SUCCESS;
1714 
1715 --dbms_output.put_line( 'Final status asasas'||x_return_status );
1716 
1717     IF (p_commit = FND_API.G_TRUE) THEN
1718       COMMIT;
1719     END IF;
1720 
1721     IF (p_debug_mode = 'Y') THEN
1722       pa_debug.debug('PA_PROJECT_STRUCTURE_PUB1.CREATE_TASK_VERSION END');
1723     END IF;
1724 EXCEPTION
1725     when FND_API.G_EXC_ERROR then
1726       if p_commit = FND_API.G_TRUE then
1727          rollback to create_task_version;
1728       end if;
1729       x_return_status := FND_API.G_RET_STS_ERROR;
1730 --dbms_output.put_line( 'Status in public API exception '||x_return_status );
1731 
1732     when FND_API.G_EXC_UNEXPECTED_ERROR then
1733       if p_commit = FND_API.G_TRUE then
1734          rollback to create_task_version;
1735       end if;
1736       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1737       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1738                               p_procedure_name => 'CREATE_TASK_VERSION',
1739                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1740     when OTHERS then
1741       if p_commit = FND_API.G_TRUE then
1742          rollback to create_task_version;
1743       end if;
1744       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1745       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1746                               p_procedure_name => 'CREATE_TASK_VERSION',
1747                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1748       raise;
1749 END Create_Task_Version;
1750 
1751 -- API name                      : Update_Task_version
1752 -- Type                          : Public procedure
1753 -- Pre-reqs                      : None
1754 -- Return Value                  : N/A
1755 -- Prameters
1756 -- p_api_version          IN    NUMBER  N   Not Null    1.0
1757 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
1758 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
1759 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
1760 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
1761 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
1762 -- p_debug_mode       IN    VARCHAR2    N   Null    N
1763 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1764 -- p_task_version_id    IN  NUMBER  N   Null
1765 --   p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1766 --   p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1767 --   p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1768 --   p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1769 --   p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1770 --   p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1771 --   p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1772 --   p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1773 --   p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1774 --   p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1775 --   p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1776 --   p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1777 --   p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1778 --   p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1779 --   p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1780 --   p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1781 -- p_record_version_number  IN  NUMBER
1782 -- x_return_status  OUT     VARCHAR2    N   Null
1783 -- x_msg_count        OUT   NUMBER  N   Null
1784 -- x_msg_data         OUT   VARCHAR2    N   Null
1785 --
1786 --  History
1787 --
1788 --  23-OCT-01   Majid Ansari             -Created
1789 --
1790 --
1791 
1792 PROCEDURE Update_Task_Version(
1793  p_api_version        IN    NUMBER  :=1.0,
1794  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
1795  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
1796  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
1797  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
1798  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
1799  p_debug_mode         IN    VARCHAR2    :='N',
1800  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1801  p_ref_task_version_id  IN  NUMBER,
1802  p_peer_or_sub        IN    VARCHAR2,
1803  p_task_version_id  IN  NUMBER,
1804  p_attribute_category    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1805  p_attribute1    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1806  p_attribute2    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1807  p_attribute3    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1808  p_attribute4    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1809  p_attribute5    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1810  p_attribute6    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1811  p_attribute7    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1812  p_attribute8    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1813  p_attribute9    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1814  p_attribute10   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1815  p_attribute11   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1816  p_attribute12   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1817  p_attribute13   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1818  p_attribute14   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1819  p_attribute15   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
1820  p_record_version_number    IN  NUMBER,
1821  p_action          IN    VARCHAR2 := 'NULL',
1822 
1823  p_WEIGHTING_PERCENTAGE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
1824  p_TASK_UNPUB_VER_STATUS_CODE IN VARCHAR2 := NULL,
1825 
1826  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
1827  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
1828  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1829 ) IS
1830    l_api_name                      CONSTANT VARCHAR(30) := 'UPDATE_TASK_VERSION';
1831    l_api_version                   CONSTANT NUMBER      := 1.0;
1832 
1833    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
1834    l_return_status                 VARCHAR2(1);
1835    l_msg_count                     NUMBER;
1836    l_msg_data                      VARCHAR2(250);
1837    l_data                          VARCHAR2(250);
1838    l_msg_index_out                 NUMBER;
1839    l_error_msg_code                VARCHAR2(250);
1840    l_dummy                         VARCHAR2(1);
1841 
1842    --l_carrying_out_org_id           NUMBER;
1843    --l_task_manager_id               NUMBER;
1844 BEGIN
1845 
1846     pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK_VERSION');
1847 
1848     IF (p_debug_mode = 'Y') THEN
1849        pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_VERSION begin');
1850     END IF;
1851 
1852     IF (p_commit = FND_API.G_TRUE) THEN
1853       savepoint update_Task_version;
1854     END IF;
1855 
1856     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
1857       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1858     END IF;
1859 
1860 
1861     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
1862       FND_MSG_PUB.initialize;
1863     END IF;
1864 
1865     --Lock row
1866     IF( p_validate_only <> FND_API.G_TRUE) THEN
1867       BEGIN
1868         select 'x' into l_dummy
1869         from PA_PROJ_ELEMENT_VERSIONS
1870         where element_version_id = p_task_version_id
1871         and record_version_number = p_record_version_number
1872         for update of record_version_number NOWAIT;
1873       EXCEPTION
1874         WHEN TIMEOUT_ON_RESOURCE THEN
1875           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1876                                p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1877           l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1878         WHEN NO_DATA_FOUND THEN
1879           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1880                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
1881           l_msg_data := 'PA_XC_RECORD_CHANGED';
1882         WHEN OTHERS THEN
1883           IF SQLCODE = -54 then
1884              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1885                                   p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
1886              l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1887           ELSE
1888              raise;
1889           END IF;
1890       END;
1891     ELSE
1892       --check record_version_number
1893       BEGIN
1894         select 'x' into l_dummy
1895         from PA_PROJ_ELEMENT_VERSIONS
1896         where element_version_id = p_task_version_id
1897         and record_version_number = p_record_version_number;
1898       EXCEPTION
1899         WHEN NO_DATA_FOUND THEN
1900           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1901                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
1902           l_msg_data := 'PA_XC_RECORD_CHANGED';
1903         WHEN OTHERS THEN
1904           RAISE;
1905       END;
1906     END IF;
1907 
1908       l_msg_count := FND_MSG_PUB.count_msg;
1909       IF l_msg_count > 0 THEN
1910          x_msg_count := l_msg_count;
1911          x_return_status := 'E';
1912          RAISE  FND_API.G_EXC_ERROR;
1913       END IF;
1914 
1915 
1916 --dbms_output.put_line('call update task version pvt');
1917    PA_TASK_PVT1.Update_Task_Version(
1918              p_api_version        => p_api_version
1919             ,p_init_msg_list          => p_init_msg_list
1920             ,p_commit               => p_commit
1921             ,p_validate_only          => p_validate_only
1922             ,p_validation_level => p_validation_level
1923             ,p_calling_module         => p_calling_module
1924             ,p_debug_mode         => p_debug_mode
1925             ,p_max_msg_count          => p_max_msg_count
1926             ,p_ref_task_version_id  => p_ref_task_version_id
1927             ,p_peer_or_sub        => p_peer_or_sub
1928             ,p_task_version_id  => p_task_version_id
1929             ,p_attribute_category    => p_attribute_category
1930             ,p_attribute1    => p_attribute1
1931             ,p_attribute2    => p_attribute2
1932             ,p_attribute3    => p_attribute3
1933             ,p_attribute4    => p_attribute4
1934             ,p_attribute5    => p_attribute5
1935             ,p_attribute6    => p_attribute6
1936             ,p_attribute7    => p_attribute7
1937             ,p_attribute8    => p_attribute8
1938             ,p_attribute9    => p_attribute9
1939             ,p_attribute10   => p_attribute10
1940             ,p_attribute11   => p_attribute11
1941             ,p_attribute12   => p_attribute12
1942             ,p_attribute13   => p_attribute13
1943             ,p_attribute14   => p_attribute14
1944             ,p_attribute15   => p_attribute15
1945             ,p_record_version_number => p_record_version_number
1946             ,p_action          => p_action
1947         ,p_WEIGHTING_PERCENTAGE => p_WEIGHTING_PERCENTAGE
1948         ,p_TASK_UNPUB_VER_STATUS_CODE => p_TASK_UNPUB_VER_STATUS_CODE
1949             ,x_return_status   => l_return_status
1950             ,x_msg_count     => x_msg_count
1951             ,x_msg_data        => x_msg_data
1952             );
1953 
1954     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1955       x_msg_count := FND_MSG_PUB.count_msg;
1956       IF x_msg_count = 1 then
1957          pa_interface_utils_pub.get_messages
1958          (p_encoded        => FND_API.G_TRUE,
1959           p_msg_index      => 1,
1960           p_msg_count      => l_msg_count,
1961           p_msg_data       => l_msg_data,
1962           p_data           => l_data,
1963           p_msg_index_out  => l_msg_index_out);
1964          x_msg_data := l_data;
1965       END IF;
1966       raise FND_API.G_EXC_ERROR;
1967     END IF;
1968 
1969     x_return_status := FND_API.G_RET_STS_SUCCESS;
1970 
1971     IF (p_commit = FND_API.G_TRUE) THEN
1972       COMMIT;
1973     END IF;
1974 
1975     IF (p_debug_mode = 'Y') THEN
1976       pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_VERSION END');
1977     END IF;
1978 EXCEPTION
1979     when FND_API.G_EXC_ERROR 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_ERROR;
1984     when FND_API.G_EXC_UNEXPECTED_ERROR then
1985       if p_commit = FND_API.G_TRUE then
1986          rollback to update_task_version;
1987       end if;
1988       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1989       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1990                               p_procedure_name => 'UPDATE_TASK_VERSION',
1991                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1992     when OTHERS then
1993       if p_commit = FND_API.G_TRUE then
1994          rollback to update_task_version;
1995       end if;
1996       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1997       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
1998                               p_procedure_name => 'UPDATE_TASK_VERSION',
1999                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2000       raise;
2001 END update_task_version;
2002 
2003 -- API name                      : Delete_Task_version
2004 -- Type                          : Public procedure
2005 -- Pre-reqs                      : None
2006 -- Return Value                  : N/A
2007 -- Prameters
2008 -- p_api_version          IN    NUMBER  N   Not Null    1.0
2009 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
2010 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
2011 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
2012 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
2013 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
2014 -- p_debug_mode       IN    VARCHAR2    N   Null    N
2015 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2016 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2017 -- p_task_version_id    IN  NUMBER  N   Null
2018 -- p_record_version_number  IN  NUMBER
2019 -- x_return_status  OUT     VARCHAR2    N   Null
2020 -- x_msg_count        OUT   NUMBER  N   Null
2021 -- x_msg_data         OUT   VARCHAR2    N   Null
2022 --
2023 --  History
2024 --
2025 --  23-OCT-01   Majid Ansari             -Created
2026 --
2027 --
2028 
2029 PROCEDURE Delete_Task_Version(
2030  p_api_version        IN    NUMBER  :=1.0,
2031  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
2032  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
2033  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
2034  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
2035  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
2036  p_debug_mode         IN    VARCHAR2    :='N',
2037  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2038  p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2039  p_task_version_id  IN  NUMBER,
2040  p_record_version_number    IN  NUMBER,
2041  p_called_from_api      IN    VARCHAR2    := 'ABCD',
2042  p_structure_type       IN    VARCHAR2    := 'WORKPLAN',   --bug 3301192
2043  p_calling_from         IN    VARCHAR2    := 'XYZ',  -- Bug 6023347
2044  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2045  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
2046  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2047 ) IS
2048    l_api_name                      CONSTANT VARCHAR(30) := 'DELETE_TASK_VERSION';
2049    l_api_version                   CONSTANT NUMBER      := 1.0;
2050 
2051    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2052    l_return_status                 VARCHAR2(1);
2053    l_msg_count                     NUMBER;
2054    l_msg_data                      VARCHAR2(250);
2055    l_data                          VARCHAR2(250);
2056    l_msg_index_out                 NUMBER;
2057    l_error_msg_code                VARCHAR2(250);
2058    l_dummy                         VARCHAR2(1);
2059    l_err_code                      NUMBER := 0;
2060    l_err_stack                     VARCHAR2(630);
2061    l_err_stage                     VARCHAR2(80);
2062    --l_carrying_out_org_id         NUMBER;
2063    --l_task_manager_id             NUMBER;
2064 
2065 -- hyau Bug 2852753
2066    l_delete_project_allowed      VARCHAR2(1);
2067    l_update_proj_num_allowed      VARCHAR2(1);
2068    l_update_proj_name_allowed    VARCHAR2(1);
2069    l_update_proj_desc_allowed    VARCHAR2(1);
2070    l_update_proj_dates_allowed    VARCHAR2(1);
2071    l_update_proj_status_allowed  VARCHAR2(1);
2072    l_update_proj_manager_allowed  VARCHAR2(1);
2073    l_update_proj_org_allowed      VARCHAR2(1);
2074    l_add_task_allowed            VARCHAR2(1);
2075    l_delete_task_allowed          VARCHAR2(1);
2076    l_update_task_num_allowed      VARCHAR2(1);
2077    l_update_task_name_allowed    VARCHAR2(1);
2078    l_update_task_dates_allowed    VARCHAR2(1);
2079    l_update_task_desc_allowed    VARCHAR2(1);
2080    l_update_parent_task_allowed  VARCHAR2(1);
2081    l_update_task_org_allowed      VARCHAR2(1);
2082 
2083    x_err_code         NUMBER        := 0;
2084    x_err_stack        VARCHAR2(200) := NULL;
2085    x_err_stage        VARCHAR2(200) := NULL;
2086    l_error_occured                 VARCHAR2(1) := 'N' ; --Bug2929411
2087 
2088    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
2089 
2090    CURSOR get_product_code ( c_project_id NUMBER ) IS
2091    SELECT pm_product_code
2092    FROM PA_PROJECTS_ALL
2093    WHERE project_id = c_project_id;
2094 
2095    l_project_id      NUMBER;
2096    CURSOR cur_proj_id
2097    IS
2098      SELECT project_id
2099        FROM pa_proj_element_versions
2100       WHERE element_version_id = p_task_version_id;
2101 
2102 -- end hyau Bug 2852753
2103 
2104 
2105 --hsiu: added for task version status
2106    CURSOR get_task_info(c_task_version_id NUMBER) IS
2107      select a.project_id, b.proj_element_id, parent_structure_version_id,
2108             TASK_UNPUB_VER_STATUS_CODE, b.link_task_flag
2109        from pa_proj_element_versions a,
2110             pa_proj_elements b    --bug 4501280
2111       where element_version_id = c_task_version_id
2112     --bug 4501280
2113         AND a.proj_element_id = b.proj_element_id
2114         AND a.project_id = b.project_id
2115     --bug 4501280
2116       ;
2117    l_task_info_rec   get_task_info%ROWTYPE;
2118 --end changes for task version status
2119 
2120   l_structure_version_id   pa_proj_element_versions.parent_structure_version_id%TYPE ;
2121 
2122 -- Bug Fix 4576640
2123 -- Adding a new check to stop users from deleting a linked task.
2124 -- Example:
2125 -- P1 - T1
2126 --      T2-P2
2127 -- In the above scenario we are not allowing the user to delete T2, as this is causing issues in PJI.
2128 -- Though this is a corner case as this happens only in deleting a task in a program which already has a
2129 -- published version.
2130 -- As per the bug updates, we are now stopping user from deleting a linked task and now user has to delete
2131 -- the link manually and then delete the task.
2132 
2133 CURSOR is_linked_task(c_task_version_id NUMBER) IS
2134 SELECT 'Y'
2135 FROM DUAL
2136 WHERE EXISTS(
2137    SELECT pors.object_relationship_id
2138      FROM pa_object_relationships pors,
2139           pa_object_relationships pors1
2140     WHERE pors1.object_id_from1 = c_task_version_id
2141       AND pors.object_id_from1 = pors1.object_id_to1
2142       AND pors1.relationship_type = 'S'
2143       AND pors.relationship_type IN ('LW','LF')
2144       AND pors.object_id_from2 <> pors.object_id_to2
2145       AND pors.object_type_from = 'PA_TASKS'
2146       AND pors.object_type_to = 'PA_STRUCTURES');
2147 
2148 l_linked_task VARCHAR2(1);
2149 --anurag
2150 l_ntf_id NUMBER;
2151 
2152 cursor task_ntf(c_task_id NUMBER,c_project_id NUMBER) IS
2153   SELECT max(notification_id) ntf_id
2154                FROM   WF_NOTIFICATIONS WFN
2155 	           WHERE  message_type = 'PATASKWF'
2156                AND    status = 'OPEN'
2157 			   --bug 13395163
2158 			   --bug 14284485
2159                AND    EXISTS (
2160                           SELECT /*+ NO_UNNEST */ 1
2161                           FROM   WF_NOTIFICATION_ATTRIBUTES
2162                           WHERE  notification_id = wfn.notification_id
2163                           AND    name = 'TASK_NUMBER'
2164                           AND    text_value like (select element_number from pa_proj_elements
2165 												  where proj_element_id = c_task_id)
2166                              )
2167                AND    EXISTS (
2168                           SELECT /*+ NO_UNNEST */ 1
2169                           FROM   WF_NOTIFICATION_ATTRIBUTES
2170                           WHERE  notification_id = wfn.notification_id
2171                           AND    name = 'PROJECT_NUMBER'
2172                           AND    text_value like (select segment1 from pa_projects_all
2173 												  where project_id = c_project_id)
2174                              );
2175 
2176 
2177 BEGIN
2178 
2179     pa_debug.init_err_stack ('PA_TASK_PUB1.DELETE_TASK_VERSION');
2180 
2181     IF (p_debug_mode = 'Y') THEN
2182        pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_VERSION begin');
2183     END IF;
2184 
2185     IF (p_commit = FND_API.G_TRUE) THEN
2186       savepoint delete_Task_version;
2187     END IF;
2188 
2189     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2190       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2191     END IF;
2192 
2193 
2194     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
2195       FND_MSG_PUB.initialize;
2196     END IF;
2197 
2198 IF p_calling_module <> 'FORMS'
2199 THEN
2200     --Lock row
2201     IF( p_validate_only <> FND_API.G_TRUE) THEN
2202       BEGIN
2203         select 'x' into l_dummy
2204         from PA_PROJ_ELEMENT_VERSIONS
2205         where element_version_id = p_task_version_id
2206         and record_version_number = p_record_version_number
2207         for update of record_version_number NOWAIT;
2208       EXCEPTION
2209         WHEN TIMEOUT_ON_RESOURCE THEN
2210           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2211                                p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2212           l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2213           l_error_occured  := 'Y' ; --Bug2929411
2214         WHEN NO_DATA_FOUND THEN
2215           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2216                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
2217           l_msg_data := 'PA_XC_RECORD_CHANGED';
2218           l_error_occured  := 'Y' ; --Bug2929411
2219         WHEN OTHERS THEN
2220           IF SQLCODE = -54 then
2221              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2222                                   p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
2223              l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
2224              l_error_occured := 'Y' ; --Bug2929411
2225           ELSE
2226              raise;
2227           END IF;
2228       END;
2229     ELSE
2230       --check record_version_number
2231       BEGIN
2232         select 'x' into l_dummy
2233         from PA_PROJ_ELEMENT_VERSIONS
2234         where element_version_id = p_task_version_id
2235         and record_version_number = p_record_version_number;
2236       EXCEPTION
2237         WHEN NO_DATA_FOUND THEN
2238           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2239                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
2240           l_msg_data := 'PA_XC_RECORD_CHANGED';
2241           l_error_occured := 'Y' ; --Bug2929411
2242         WHEN OTHERS THEN
2243           RAISE;
2244       END;
2245     END IF;
2246 
2247       l_msg_count := FND_MSG_PUB.count_msg;
2248 
2249       IF l_msg_count > 0 AND l_error_occured = 'Y' THEN
2250          x_msg_count := l_msg_count;
2251          x_return_status := 'E';
2252          RAISE  FND_API.G_EXC_ERROR;
2253       END IF;
2254 END IF;  --<< p_calling module >>
2255 
2256 -- hyau Bug 2852753
2257       IF p_calling_module = 'SELF_SERVICE' THEN
2258 
2259         OPEN cur_proj_id;
2260         FETCH cur_proj_id INTO l_project_id;
2261         CLOSE cur_proj_id;
2262 
2263         OPEN get_product_code(l_project_id);
2264         FETCH get_product_code INTO l_pm_product_code;
2265         CLOSE get_product_code;
2266 
2267         If l_pm_product_code IS NOT NULL THEN
2268           pa_pm_controls.Get_Project_actions_allowed
2269                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
2270                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
2271                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
2272                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
2273                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
2274                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
2275                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
2276                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
2277                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
2278                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
2279                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
2280                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
2281                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
2282                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
2283                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
2284                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
2285                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
2286                  P_ERROR_CODE                 => x_err_code,
2287          P_ERROR_STACK                    => x_err_stack,
2288          P_ERROR_STAGE                => x_err_stage );
2289 
2290           IF x_err_code <> 0 THEN
2291             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2292                                  p_msg_name       => x_err_stage);
2293           END IF;
2294       IF l_delete_task_allowed = 'N' THEN
2295               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2296                                    p_msg_name       => 'PA_PR_PM_CANNOT_DELETE');
2297               raise FND_API.G_EXC_ERROR;
2298           END IF;
2299         END IF;
2300       END IF;
2301 
2302 -- end hyau Bug 2852753
2303 
2304     --hsiu: task version status changes
2305     --check delete task ok
2306     OPEN get_task_info(p_task_version_id);
2307     FETCH get_task_info into l_task_info_rec;
2308     CLOSE get_task_info;
2309 
2310     /* Bug 4068685 : If p_structure_version_id is not passed to this Delete_Task_Version API
2311                      then it will be defaulted to MISS_NUM .In that case ,Use the retrieved value of
2312                      parent_structure_version_id from l_task_info_rec
2313     */
2314 	--anurag
2315 	open task_ntf(l_task_info_rec.proj_element_id,l_task_info_rec.project_id);
2316 	fetch task_ntf into l_ntf_id;
2317 	close task_ntf;
2318 	if(l_ntf_id is not null)
2319 	then
2320 	update  WF_NOTIFICATIONS
2321 	set status = 'CLOSED'
2322 	where notification_id = l_ntf_id ;
2323 	end if;
2324 
2325     IF (p_structure_version_id IS NOT NULL)
2326        AND (p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
2327     THEN
2328         l_structure_version_id := l_task_info_rec.parent_structure_version_id ;
2329     ELSE
2330         l_structure_version_id := p_structure_version_id ;
2331     END IF;
2332 
2333     /*In the following function call , changed value of p_parent_structure_ver_id parameter
2334       from p_structure_version_id to l_structure_version_id
2335       for Bug 4068685
2336     */
2337     --6023347: No need to check tasks if complete version is to be deleted from Workplan Version Disabling
2338     IF p_calling_from <> 'DEL_WP_STRUC_DISABLE_VERSION' THEN  -- 6023347
2339       --Check if it is okay to delete task version. Also checks financial task
2340       PA_PROJ_ELEMENTS_UTILS.Check_Del_all_task_Ver_Ok(p_project_id => l_task_info_rec.project_id
2341                             ,p_task_version_id => p_task_version_id
2342                             ,p_parent_structure_ver_id => l_structure_version_id -- 4068685
2343                             ,x_return_status => l_return_status
2344                             ,x_error_message_code => l_error_msg_code);
2345       IF (l_return_status <> 'S') THEN
2346         PA_UTILS.ADD_MESSAGE('PA', l_error_msg_code);
2347         l_msg_data := l_error_msg_code;
2348         RAISE FND_API.G_EXC_ERROR;
2349       END IF;
2350     END IF; -- 6023347
2351 
2352     -- Bug Fix 4576640.
2353     -- Now stopping the user from deleting a linked task.
2354 
2355     OPEN is_linked_task(p_task_version_id);
2356     FETCH is_linked_task INTO l_linked_task;
2357     CLOSE is_linked_task;
2358 
2359     IF l_linked_task = 'Y' THEN
2360        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
2361                             p_msg_name       => 'PA_PS_CANT_DEL_LINKED_TASK');
2362        RAISE FND_API.G_EXC_ERROR;
2363     END IF;
2364 
2365 -- End of Bug Fix 4576640.
2366 
2367     --ok to delete. decide whether to delete or modify version status
2368     --Check if shared
2369 --bug 4501280
2370    IF l_task_info_rec.link_task_flag = 'N'
2371    THEN
2372 --bug 4501280
2373     IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_task_info_rec.project_id) = 'Y') THEN
2374       --sharing enabled
2375       IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_task_info_rec.project_id) = 'Y') THEN
2376         --versioning on
2377         IF (l_task_info_rec.task_unpub_ver_status_code = 'PUBLISHED' OR
2378             l_task_info_rec.task_unpub_ver_status_code = 'TO_BE_DELETED')
2379             AND p_called_from_api <> 'DELETE_STRUCTURE_VERSION' THEN          -- Bug 3056077. We need to delete the task versions
2380           --change status to TO_BE_DELETED                                    -- when the structure version is to be deleted.
2381 
2382             -- 3955848 Added following code to validate task to deliverable association deletion
2383             -- related validations , p_delete_or_validate is passed as 'V' because only validation will be done
2384 
2385             PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
2386              (
2387                  p_task_element_id      => l_task_info_rec.proj_element_id
2388                 ,p_project_id           => l_task_info_rec.project_id
2389                 ,p_task_version_id      => p_task_version_id
2390                 ,p_delete_or_validate   => 'V'
2391                 ,x_return_status        => x_return_status
2392                 ,x_msg_count            => x_msg_count
2393                 ,x_msg_data             => x_msg_data
2394              );
2395 
2396              IF x_return_status = FND_API.G_RET_STS_ERROR then
2397                  RAISE FND_API.G_EXC_ERROR;
2398              End If;
2399 
2400             -- 3955848 end
2401 
2402           PA_TASK_PVT1.update_task_ver_delete_status(
2403                  p_task_version_id => p_task_version_id
2404                 ,x_return_status => l_return_status
2405                 ,x_msg_count => x_msg_count
2406                 ,x_msg_data => x_msg_data);
2407 
2408           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2409             x_msg_count := FND_MSG_PUB.count_msg;
2410             IF x_msg_count = 1 then
2411               pa_interface_utils_pub.get_messages
2412                (p_encoded        => FND_API.G_TRUE,
2413                 p_msg_index      => 1,
2414                 p_msg_count      => l_msg_count,
2415                 p_msg_data       => l_msg_data,
2416                 p_data           => l_data,
2417                 p_msg_index_out  => l_msg_index_out);
2418               x_msg_data := l_data;
2419             END IF;
2420             raise FND_API.G_EXC_ERROR;
2421           END IF;
2422 
2423           return; --only set the version status
2424         ELSE --not published
2425           NULL; --continue to delete
2426         END IF; --task version status
2427       ELSE -- versioning off
2428         NULL; --continue to delete
2429       END IF;
2430     ELSE --not shared
2431       IF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_task_info_rec.parent_structure_version_id, 'FINANCIAL') = 'Y') THEN
2432         --Financial structure
2433         NULL; --continue to delete
2434       ELSE --Workplan structure
2435         --check if versioning is on
2436         IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_task_info_rec.project_id) = 'Y') THEN
2437           --versioning on
2438           IF (l_task_info_rec.task_unpub_ver_status_code = 'PUBLISHED' OR
2439               l_task_info_rec.task_unpub_ver_status_code = 'TO_BE_DELETED')
2440               AND p_called_from_api <> 'DELETE_STRUCTURE_VERSION' THEN          -- Bug 3056077. We need to delete the task versions
2441             --change status to TO_BE_DELETED                                    -- when the structure version is to be deleted.
2442 
2443             -- 3955848 Added following code to validate task to deliverable association deletion
2444             -- related validations , p_delete_or_validate is passed as 'V' because only validation will be done
2445 
2446             PA_DELIVERABLE_PUB.delete_dlv_task_asscn_in_bulk
2447              (
2448                  p_task_element_id      => l_task_info_rec.proj_element_id
2449                 ,p_project_id           => l_task_info_rec.project_id
2450                 ,p_task_version_id      => p_task_version_id
2451                 ,p_delete_or_validate   => 'V'
2452                 ,x_return_status        => x_return_status
2453                 ,x_msg_count            => x_msg_count
2454                 ,x_msg_data             => x_msg_data
2455              );
2456 
2457              IF x_return_status = FND_API.G_RET_STS_ERROR then
2458                  RAISE FND_API.G_EXC_ERROR;
2459              End If;
2460 
2461             -- 3955848 end
2462 
2463             PA_TASK_PVT1.update_task_ver_delete_status(
2464                  p_task_version_id => p_task_version_id
2465                 ,x_return_status => l_return_status
2466                 ,x_msg_count => x_msg_count
2467                 ,x_msg_data => x_msg_data);
2468 
2469             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2470               x_msg_count := FND_MSG_PUB.count_msg;
2471               IF x_msg_count = 1 then
2472                 pa_interface_utils_pub.get_messages
2473                  (p_encoded        => FND_API.G_TRUE,
2474                   p_msg_index      => 1,
2475                   p_msg_count      => l_msg_count,
2476                   p_msg_data       => l_msg_data,
2477                   p_data           => l_data,
2478                   p_msg_index_out  => l_msg_index_out);
2479                 x_msg_data := l_data;
2480               END IF;
2481               raise FND_API.G_EXC_ERROR;
2482             END IF;
2483 
2484             return; --only set the status
2485           ELSE
2486             NULL; --delete task version
2487           END IF;
2488         ELSE
2489           --versioning off
2490           NULL; --delete task version
2491         END IF;
2492       END IF;
2493     END IF;
2494   END IF;   --bug 4501280
2495     --end task version status changes
2496 
2497 
2498 --dbms_output.put_line('delete pvt');
2499     PA_TASK_PVT1.Delete_Task_Version(
2500              p_api_version        => p_api_version
2501             ,p_init_msg_list          => p_init_msg_list
2502             ,p_commit               => p_commit
2503             ,p_validate_only          => p_validate_only
2504             ,p_validation_level => p_validation_level
2505             ,p_calling_module         => p_calling_module
2506             ,p_debug_mode         => p_debug_mode
2507             ,p_max_msg_count          => p_max_msg_count
2508             ,p_structure_version_id => l_structure_version_id -- Old Value : p_structure_version_id : 4068685
2509             ,p_task_version_id  => p_task_version_id
2510             ,p_record_version_number => p_record_version_number
2511             ,p_called_from_api       => p_called_from_api
2512         ,p_structure_type        => p_structure_type     -- FP_M changes 3305199
2513             ,x_return_status        => l_return_status
2514             ,x_msg_count          => x_msg_count
2515             ,x_msg_data             => x_msg_data
2516             );
2517 
2518     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2519       x_msg_count := FND_MSG_PUB.count_msg;
2520       IF x_msg_count = 1 then
2521          pa_interface_utils_pub.get_messages
2522          (p_encoded        => FND_API.G_TRUE,
2523           p_msg_index      => 1,
2524           p_msg_count      => l_msg_count,
2525           p_msg_data       => l_msg_data,
2526           p_data           => l_data,
2527           p_msg_index_out  => l_msg_index_out);
2528          x_msg_data := l_data;
2529       END IF;
2530       raise FND_API.G_EXC_ERROR;
2531     END IF;
2532 
2533     x_return_status := FND_API.G_RET_STS_SUCCESS;
2534 
2535     IF (p_commit = FND_API.G_TRUE) THEN
2536       COMMIT;
2537     END IF;
2538 
2539     IF (p_debug_mode = 'Y') THEN
2540       pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_VERSION END');
2541     END IF;
2542 EXCEPTION
2543     when FND_API.G_EXC_ERROR then
2544       if p_commit = FND_API.G_TRUE then
2545          rollback to delete_task_version;
2546       end if;
2547       x_return_status := FND_API.G_RET_STS_ERROR;
2548     when FND_API.G_EXC_UNEXPECTED_ERROR then
2549       if p_commit = FND_API.G_TRUE then
2550          rollback to delete_task_version;
2551       end if;
2552       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2553       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
2554                               p_procedure_name => 'DELETE_TASK_VERSION',
2555                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2556     when OTHERS then
2557       if p_commit = FND_API.G_TRUE then
2558          rollback to delete_task_version;
2559       end if;
2560       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2561       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
2562                               p_procedure_name => 'DELETE_TASK_VERSION',
2563                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2564       raise;
2565 END delete_task_version;
2566 
2567 -- API name                      : Create_Schedule_Version
2568 -- Type                          : Public procedure
2569 -- Pre-reqs                      : None
2570 -- Return Value                  : N/A
2571 -- Prameters
2572 -- p_api_version          IN    NUMBER  N   Not Null    1.0
2573 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
2574 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
2575 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
2576 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
2577 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
2578 -- p_debug_mode       IN    VARCHAR2    N   Null    N
2579 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2580 -- p_element_version_id IN  NUMBER  N   Not Null
2581 -- p_calendar_id    IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2582 -- p_calendar_name  IN  VARCHAR2    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2583 -- p_scheduled_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2584 -- p_scheduled_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2585 -- p_obligation_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2586 -- p_obligation_end_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2587 -- p_actual_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2588 -- p_actual_finish_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2589 -- p_estimate_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2590 -- p_estimate_finish_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2591 -- p_duration   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2592 -- p_early_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2593 -- p_early_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2594 -- p_late_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2595 -- p_late_end_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2596 -- p_milestone_flag IN  VARCHAR2    N   NULL    N
2597 -- p_critical_flag  IN  VARCHAR2    N   NULL    N
2598 -- x_pev_schedule_id    OUT NUMBER  N   NULL
2599 -- x_return_status  OUT     VARCHAR2    N   Null
2600 -- x_msg_count        OUT   NUMBER  N   Null
2601 -- x_msg_data         OUT   VARCHAR2    N   Null
2602 --
2603 --  History
2604 --
2605 --  23-OCT-01   Majid Ansari             -Created
2606 --  16-OCT-02   XXLU                     - Added DFF parameters.
2607 --
2608 
2609 PROCEDURE Create_Schedule_Version(
2610  p_api_version        IN    NUMBER  :=1.0,
2611  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
2612  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
2613  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
2614  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
2615  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
2616  p_debug_mode         IN    VARCHAR2    :='N',
2617  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2618  p_element_version_id   IN  NUMBER,
2619  p_calendar_id        IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2620  p_calendar_name          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2621  p_scheduled_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2622  p_scheduled_end_date   IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2623  p_obligation_start_date IN DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2624  p_obligation_end_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2625  p_actual_start_date    IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2626  p_actual_finish_date   IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2627  p_estimate_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2628  p_estimate_finish_date IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2629  p_duration             IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2630  p_early_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2631  p_early_end_date         IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2632  p_late_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2633  p_late_end_date          IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2634  p_milestone_flag         IN    VARCHAR2    :='N',
2635  p_critical_flag          IN    VARCHAR2    :='N',
2636 
2637  p_WQ_PLANNED_QUANTITY  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2638  p_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2639  p_PLANNED_EQUIP_EFFORT       IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,   --bug 3305199
2640  --bug 3305199 schedule options
2641  p_def_sch_tool_tsk_type       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2642  p_def_sch_tool_tsk_type_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2643  p_constraint_type_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2644  p_constraint_date             IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2645  p_free_slack                  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2646  p_total_slack                 IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2647  p_effort_driven_flag          IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2648  p_level_assignments_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2649  --end bug 3305199
2650  p_ext_act_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2651  p_ext_remain_duration         IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2652  p_ext_sch_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2653  p_attribute_category     IN    pa_proj_elem_ver_schedule.attribute_category%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2654  p_attribute1             IN    pa_proj_elem_ver_schedule.attribute1%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2655  p_attribute2             IN    pa_proj_elem_ver_schedule.attribute2%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2656  p_attribute3             IN    pa_proj_elem_ver_schedule.attribute3%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2657  p_attribute4             IN    pa_proj_elem_ver_schedule.attribute4%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2658  p_attribute5             IN    pa_proj_elem_ver_schedule.attribute5%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2659  p_attribute6             IN    pa_proj_elem_ver_schedule.attribute6%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2660  p_attribute7             IN    pa_proj_elem_ver_schedule.attribute7%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2661  p_attribute8             IN    pa_proj_elem_ver_schedule.attribute8%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2662  p_attribute9             IN    pa_proj_elem_ver_schedule.attribute9%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2663  p_attribute10            IN    pa_proj_elem_ver_schedule.attribute10%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2664  p_attribute11            IN    pa_proj_elem_ver_schedule.attribute11%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2665  p_attribute12            IN    pa_proj_elem_ver_schedule.attribute12%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2666  p_attribute13            IN    pa_proj_elem_ver_schedule.attribute13%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2667  p_attribute14            IN    pa_proj_elem_ver_schedule.attribute14%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2668  p_attribute15            IN    pa_proj_elem_ver_schedule.attribute15%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2669  x_pev_schedule_id  OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
2670  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2671  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
2672  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2673 ) IS
2674    l_api_name                      CONSTANT VARCHAR(30) := 'CREATE_SCHEDULE_VERSION';
2675    l_api_version                   CONSTANT NUMBER      := 1.0;
2676 
2677    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2678    l_return_status                 VARCHAR2(1);
2679    l_msg_count                     NUMBER;
2680    l_msg_data                      VARCHAR2(250);
2681    l_data                          VARCHAR2(250);
2682    l_msg_index_out                 NUMBER;
2683    l_error_msg_code                     VARCHAR2(250);
2684 BEGIN
2685     pa_debug.init_err_stack ('PA_TASK_PUB1.create_schedule_VERSION');
2686 
2687     IF (p_debug_mode = 'Y') THEN
2688       pa_debug.debug('PA_TASK_PUB1.CREATE_SCHEDULE_VERSION begin');
2689     END IF;
2690 
2691     IF (p_commit = FND_API.G_TRUE) THEN
2692       savepoint create_schedule_version;
2693     END IF;
2694 
2695     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2696       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2697     END IF;
2698 
2699 
2700     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
2701       FND_MSG_PUB.initialize;
2702     END IF;
2703 
2704     PA_TASK_PVT1.Create_Schedule_Version(
2705              p_api_version        => p_api_version
2706             ,p_init_msg_list          => p_init_msg_list
2707             ,p_commit               => p_commit
2708             ,p_validate_only          => p_validate_only
2709             ,p_validation_level => p_validation_level
2710             ,p_calling_module         => p_calling_module
2711             ,p_debug_mode         => p_debug_mode
2712             ,p_max_msg_count          => p_max_msg_count
2713             ,p_element_version_id   => p_element_version_id
2714             ,p_calendar_id        => p_calendar_id
2715             ,p_scheduled_start_date => p_scheduled_start_date
2716             ,p_scheduled_end_date   => p_scheduled_end_date
2717             ,p_obligation_start_date => p_obligation_start_date
2718             ,p_obligation_end_date  => p_obligation_end_date
2719             ,p_actual_start_date    => p_actual_start_date
2720             ,p_actual_finish_date   => p_actual_finish_date
2721             ,p_estimate_start_date  => p_estimate_start_date
2722             ,p_estimate_finish_date => p_estimate_finish_date
2723             ,p_duration             => p_duration
2724             ,p_early_start_date => p_early_start_date
2725             ,p_early_end_date         => p_early_end_date
2726             ,p_late_start_date  => p_late_start_date
2727             ,p_late_end_date          => p_late_end_date
2728             ,p_milestone_flag         => p_milestone_flag
2729             ,p_critical_flag          => p_critical_flag
2730             ,x_pev_schedule_id  => x_pev_schedule_id
2731             ,p_wq_planned_quantity => p_wq_planned_quantity
2732             ,p_planned_effort      => p_planned_effort
2733             ,p_PLANNED_EQUIP_EFFORT => p_PLANNED_EQUIP_EFFORT
2734             ,p_def_sch_tool_tsk_type_code => p_def_sch_tool_tsk_type_code
2735             ,p_constraint_type_code       => p_constraint_type_code
2736             ,p_constraint_date            => p_constraint_date
2737             ,p_free_slack                 => p_free_slack
2738             ,p_total_slack                => p_total_slack
2739             ,p_effort_driven_flag         => p_effort_driven_flag
2740             ,p_level_assignments_flag     => p_level_assignments_flag
2741             ,p_ext_act_duration           => p_ext_act_duration
2742             ,p_ext_remain_duration        => p_ext_remain_duration
2743             ,p_ext_sch_duration           => p_ext_sch_duration
2744             ,p_attribute_category               => p_attribute_category
2745             ,p_attribute1                       => p_attribute1
2746             ,p_attribute2                       => p_attribute2
2747             ,p_attribute3                       => p_attribute3
2748             ,p_attribute4                       => p_attribute4
2749             ,p_attribute5                       => p_attribute5
2750             ,p_attribute6                       => p_attribute6
2751             ,p_attribute7                       => p_attribute7
2752             ,p_attribute8                       => p_attribute8
2753             ,p_attribute9                       => p_attribute9
2754             ,p_attribute10                    => p_attribute10
2755             ,p_attribute11                    => p_attribute11
2756             ,p_attribute12                    => p_attribute12
2757             ,p_attribute13                    => p_attribute13
2758             ,p_attribute14                    => p_attribute14
2759             ,p_attribute15                    => p_attribute15
2760             ,x_return_status          => l_return_status
2761             ,x_msg_count          => x_msg_count
2762             ,x_msg_data             => x_msg_data
2763             );
2764 
2765     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2766       x_msg_count := FND_MSG_PUB.count_msg;
2767       IF x_msg_count = 1 then
2768          pa_interface_utils_pub.get_messages
2769          (p_encoded        => FND_API.G_TRUE,
2770           p_msg_index      => 1,
2771           p_msg_count      => l_msg_count,
2772           p_msg_data       => l_msg_data,
2773           p_data           => l_data,
2774           p_msg_index_out  => l_msg_index_out);
2775          x_msg_data := l_data;
2776       END IF;
2777       raise FND_API.G_EXC_ERROR;
2778     END IF;
2779 
2780     x_return_status := FND_API.G_RET_STS_SUCCESS;
2781 
2782     IF (p_commit = FND_API.G_TRUE) THEN
2783       COMMIT;
2784     END IF;
2785 
2786     IF (p_debug_mode = 'Y') THEN
2787       pa_debug.debug('PA_TASK_PUB1.CREATE_SCHEDULE_VERSION END');
2788     END IF;
2789 EXCEPTION
2790     when FND_API.G_EXC_ERROR then
2791       if p_commit = FND_API.G_TRUE then
2792          rollback to create_schedule_version;
2793       end if;
2794       x_return_status := FND_API.G_RET_STS_ERROR;
2795     when FND_API.G_EXC_UNEXPECTED_ERROR then
2796       if p_commit = FND_API.G_TRUE then
2797          rollback to create_schedule_version;
2798       end if;
2799       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2800       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
2801                               p_procedure_name => 'CREATE_SCHEDULE_VERSION',
2802                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2803     when OTHERS then
2804       if p_commit = FND_API.G_TRUE then
2805          rollback to create_schedule_version;
2806       end if;
2807       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2808       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
2809                               p_procedure_name => 'CREATE_SCHEDULE_VERSION',
2810                               p_error_text     => SUBSTRB(SQLERRM,1,240));
2811       raise;
2812 
2813 END Create_Schedule_Version;
2814 
2815 
2816 -- API name                      : Update_Schedule_Version
2817 -- Type                          : Public procedure
2818 -- Pre-reqs                      : None
2819 -- Return Value                  : N/A
2820 -- Prameters
2821 -- p_api_version          IN    NUMBER  N   Not Null    1.0
2822 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
2823 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
2824 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
2825 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
2826 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
2827 -- p_debug_mode       IN    VARCHAR2    N   Null    N
2828 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2829 -- p_element_version_id IN  NUMBER  N   Not Null
2830 -- p_calendar_id    IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2831 -- p_calendar_name  IN  VARCHAR2    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2832 -- p_scheduled_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2833 -- p_scheduled_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2834 -- p_obligation_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2835 -- p_obligation_end_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2836 -- p_actual_start_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2837 -- p_actual_finish_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2838 -- p_estimate_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2839 -- p_estimate_finish_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2840 -- p_duration   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2841 -- p_early_start_date   IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2842 -- p_early_end_date IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2843 -- p_late_start_date    IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2844 -- p_late_end_date  IN  DATE    N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2845 -- p_milestone_flag IN  VARCHAR2    N   NULL    N
2846 -- p_critical_flag  IN  VARCHAR2    N   NULL    N
2847 -- x_pev_schedule_id    OUT NUMBER  N   NULL
2848 -- x_return_status  OUT     VARCHAR2    N   Null
2849 -- x_msg_count        OUT   NUMBER  N   Null
2850 -- x_msg_data         OUT   VARCHAR2    N   Null
2851 --
2852 --  History
2853 --
2854 --  23-OCT-01   Majid Ansari             -Created
2855 --  16-OCT-02   XXLU                     - Added DFF parameters.
2856 --
2857 
2858 PROCEDURE Update_Schedule_Version(
2859  p_api_version        IN    NUMBER  :=1.0,
2860  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
2861  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
2862  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
2863  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
2864  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
2865  p_debug_mode         IN    VARCHAR2    :='N',
2866  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2867  p_pev_schedule_id  IN  NUMBER,
2868  p_calendar_id        IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2869  p_calendar_name          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2870  p_scheduled_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2871  p_scheduled_end_date   IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2872  p_obligation_start_date IN DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2873  p_obligation_end_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2874  p_actual_start_date    IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2875  p_actual_finish_date   IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2876  p_estimate_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2877  p_estimate_finish_date IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2878  p_duration             IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2879  p_early_start_date IN  DATE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2880  p_early_end_date         IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2881  p_late_start_date  IN  DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2882  p_late_end_date          IN    DATE          :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2883  p_milestone_flag         IN    VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
2884  p_critical_flag          IN    VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- Bug 2791410
2885 
2886  p_WQ_PLANNED_QUANTITY  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2887  p_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2888  p_PLANNED_EQUIP_EFFORT       IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,   --bug 3305199
2889  --bug 3305199 schedule options
2890  p_def_sch_tool_tsk_type       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2891  p_def_sch_tool_tsk_type_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2892  p_constraint_type_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2893  p_constraint_date             IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
2894  p_free_slack                  IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2895  p_total_slack                 IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
2896  p_effort_driven_flag          IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2897  p_level_assignments_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2898  --end bug 3305199
2899 
2900  p_record_version_number IN   NUMBER,
2901  p_ext_act_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2902  p_ext_remain_duration         IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2903  p_ext_sch_duration            IN NUMBER:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM, --Bug no 3450684
2904  p_attribute_category     IN    pa_proj_elem_ver_schedule.attribute_category%TYPE :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2905  p_attribute1             IN    pa_proj_elem_ver_schedule.attribute1%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2906  p_attribute2             IN    pa_proj_elem_ver_schedule.attribute2%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2907  p_attribute3             IN    pa_proj_elem_ver_schedule.attribute3%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2908  p_attribute4             IN    pa_proj_elem_ver_schedule.attribute4%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2909  p_attribute5             IN    pa_proj_elem_ver_schedule.attribute5%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2910  p_attribute6             IN    pa_proj_elem_ver_schedule.attribute6%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2911  p_attribute7             IN    pa_proj_elem_ver_schedule.attribute7%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2912  p_attribute8             IN    pa_proj_elem_ver_schedule.attribute8%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2913  p_attribute9             IN    pa_proj_elem_ver_schedule.attribute9%TYPE        :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2914  p_attribute10            IN    pa_proj_elem_ver_schedule.attribute10%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2915  p_attribute11            IN    pa_proj_elem_ver_schedule.attribute11%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2916  p_attribute12            IN    pa_proj_elem_ver_schedule.attribute12%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2917  p_attribute13            IN    pa_proj_elem_ver_schedule.attribute13%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2918  p_attribute14            IN    pa_proj_elem_ver_schedule.attribute14%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2919  p_attribute15            IN    pa_proj_elem_ver_schedule.attribute15%TYPE       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
2920  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
2921  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
2922  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2923 ) IS
2924 
2925    l_api_name                      CONSTANT VARCHAR(30) := 'Update_Schedule_Version';
2926    l_api_version                   CONSTANT NUMBER      := 1.0;
2927 
2928    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
2929    l_return_status                 VARCHAR2(1);
2930    l_msg_count                     NUMBER;
2931    l_msg_data                      VARCHAR2(250);
2932    l_data                          VARCHAR2(250);
2933    l_msg_index_out                 NUMBER;
2934    l_error_msg_code                VARCHAR2(250);
2935    l_dummy                         VARCHAR2(1);
2936 
2937 -- hyau Bug 2852753
2938    l_delete_project_allowed      VARCHAR2(1);
2939    l_update_proj_num_allowed      VARCHAR2(1);
2940    l_update_proj_name_allowed    VARCHAR2(1);
2941    l_update_proj_desc_allowed    VARCHAR2(1);
2942    l_update_proj_dates_allowed    VARCHAR2(1);
2943    l_update_proj_status_allowed  VARCHAR2(1);
2944    l_update_proj_manager_allowed  VARCHAR2(1);
2945    l_update_proj_org_allowed      VARCHAR2(1);
2946    l_add_task_allowed            VARCHAR2(1);
2947    l_delete_task_allowed          VARCHAR2(1);
2948    l_update_task_num_allowed      VARCHAR2(1);
2949    l_update_task_name_allowed    VARCHAR2(1);
2950    l_update_task_dates_allowed    VARCHAR2(1);
2951    l_update_task_desc_allowed    VARCHAR2(1);
2952    l_update_parent_task_allowed  VARCHAR2(1);
2953    l_update_task_org_allowed      VARCHAR2(1);
2954 
2955    l_err_code         NUMBER        := 0;
2956    l_err_stack        VARCHAR2(200) := NULL;
2957    l_err_stage        VARCHAR2(200) := NULL;
2958 
2959    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
2960 
2961    CURSOR get_product_code ( c_project_id NUMBER ) IS
2962    SELECT pm_product_code
2963    FROM PA_PROJECTS_ALL
2964    WHERE project_id = c_project_id;
2965 
2966    l_project_id      NUMBER;
2967 
2968    CURSOR cur_proj_id
2969    IS
2970      SELECT project_id
2971        FROM pa_proj_elem_ver_schedule
2972       WHERE pev_schedule_id = p_pev_schedule_id;
2973 
2974    CURSOR cur_schedule_dates IS
2975    SELECT SCHEDULED_START_DATE, SCHEDULED_FINISH_DATE
2976    FROM pa_proj_elem_ver_schedule
2977    WHERE pev_schedule_id = p_pev_schedule_id;
2978 
2979    l_cur_sch_start_date  DATE;
2980    l_cur_sch_end_date    DATE;
2981 
2982    l_Structure_Version_ID   NUMBER;
2983 
2984 -- end hyau Bug 2852753
2985 
2986 BEGIN
2987 
2988     pa_debug.init_err_stack ('PA_TASK_PUB1.update_schedule_VERSION');
2989 
2990     IF (p_debug_mode = 'Y') THEN
2991       pa_debug.debug('PA_TASK_PUB1.update_SCHEDULE_VERSION begin');
2992     END IF;
2993 
2994     IF (p_commit = FND_API.G_TRUE) THEN
2995       savepoint update_schedule_version;
2996     END IF;
2997 
2998     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
2999       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3000     END IF;
3001 
3002 
3003     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
3004       FND_MSG_PUB.initialize;
3005     END IF;
3006 
3007     -- Added for FP_M changes 3305199
3008 
3009     OPEN cur_proj_id;
3010     FETCH cur_proj_id INTO l_project_id;
3011     CLOSE cur_proj_id;
3012 
3013     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_Project_ID) = 'Y' Then
3014 
3015        Select a.Parent_Structure_Version_ID
3016        Into   l_Structure_Version_ID
3017        From   PA_Proj_Element_Versions a,  pa_proj_elem_ver_schedule b
3018        Where  a.Element_Version_ID = b.Element_Version_ID
3019        and    b.pev_schedule_id = p_pev_schedule_id;
3020 
3021        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
3022           p_structure_version_id => l_Structure_Version_ID
3023      ,p_dirty_flag           => 'Y'             --bug 3902282
3024      ,x_return_status        => x_return_status
3025      ,x_msg_count            => x_msg_count
3026      ,x_msg_data             => x_msg_data
3027        );
3028 
3029        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
3030          x_msg_count := FND_MSG_PUB.count_msg;
3031          If x_msg_count = 1 then
3032            pa_interface_utils_pub.get_messages
3033            (p_encoded        => FND_API.G_TRUE,
3034             p_msg_index      => 1,
3035             p_msg_count      => l_msg_count,
3036             p_msg_data       => l_msg_data,
3037             p_data           => l_data,
3038             p_msg_index_out  => l_msg_index_out);
3039             x_msg_data := l_data;
3040          End If;
3041          raise FND_API.G_EXC_ERROR;
3042        End If;
3043     End If;
3044     -- End of FP_M changes
3045 
3046 -- hyau Bug 2852753
3047       IF p_calling_module = 'SELF_SERVICE' THEN
3048 
3049         OPEN cur_proj_id;
3050         FETCH cur_proj_id INTO l_project_id;
3051         CLOSE cur_proj_id;
3052 
3053         OPEN get_product_code(l_project_id);
3054         FETCH get_product_code INTO l_pm_product_code;
3055         CLOSE get_product_code;
3056 
3057         If l_pm_product_code IS NOT NULL THEN
3058           -- check to see if the schedule dates are actually different
3059           OPEN cur_schedule_dates;
3060           FETCH cur_schedule_dates INTO l_cur_sch_start_date, l_cur_sch_end_date;
3061           CLOSE cur_schedule_dates;
3062 
3063           --Bug 3736889
3064 --          IF ((p_scheduled_start_date is not null) and  (p_scheduled_start_date - l_cur_sch_start_date <> 0 )) OR
3065 --             ((p_scheduled_end_date is not null) and (p_scheduled_end_date - l_cur_sch_end_date <> 0)) THEN
3066           IF ((p_scheduled_start_date is not null) and
3067           (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) and
3068           (p_scheduled_start_date - l_cur_sch_start_date <> 0 )) OR
3069              ((p_scheduled_end_date is not null) and
3070           (p_scheduled_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) and
3071           (p_scheduled_end_date - l_cur_sch_end_date <> 0)) THEN
3072 
3073             pa_pm_controls.Get_Project_actions_allowed
3074                   (P_PM_PRODUCT_CODE                => l_pm_product_code,
3075                    P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
3076                    P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
3077                    P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
3078                    P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
3079                    P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
3080                    P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
3081                    P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
3082                    P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
3083                    P_ADD_TASK_ALLOWED               => l_add_task_allowed,
3084                    P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
3085                    P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
3086                    P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
3087                    P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
3088                    P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
3089                    P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
3090                    P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
3091                    P_ERROR_CODE             => l_err_code,
3092                P_ERROR_STACK                    => l_err_stack,
3093            P_ERROR_STAGE                => l_err_stage );
3094 
3095             IF l_err_code <> 0 THEN
3096               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3097                                    p_msg_name       => l_err_stage);
3098             END IF;
3099         IF l_update_task_dates_allowed = 'N' THEN
3100                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3101                                      p_msg_name       => 'PA_PR_PM_NO_CHG_TASK_DATES');
3102                 raise FND_API.G_EXC_ERROR;
3103             END IF;
3104           END IF;
3105         END IF;
3106       END IF;
3107 
3108 -- end hyau Bug 2852753
3109 
3110 
3111     --Lock row
3112     IF( p_validate_only <> FND_API.G_TRUE) THEN
3113       BEGIN
3114         select 'x' into l_dummy
3115         from PA_PROJ_ELEM_VER_SCHEDULE
3116         where pev_schedule_id = p_pev_schedule_id
3117         and record_version_number = p_record_version_number
3118         for update of record_version_number NOWAIT;
3119       EXCEPTION
3120         WHEN TIMEOUT_ON_RESOURCE THEN
3121           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3122                                p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
3123           l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
3124         WHEN NO_DATA_FOUND THEN
3125           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3126                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
3127           l_msg_data := 'PA_XC_RECORD_CHANGED';
3128         WHEN OTHERS THEN
3129           IF SQLCODE = -54 then
3130              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3131                                   p_msg_name       => 'PA_XC_ROW_ALREADY_LOCKED');
3132              l_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
3133           ELSE
3134              raise;
3135           END IF;
3136       END;
3137     ELSE
3138       --check record_version_number
3139       BEGIN
3140         select 'x' into l_dummy
3141         from PA_PROJ_ELEM_VER_SCHEDULE
3142         where pev_schedule_id = p_pev_schedule_id
3143         and record_version_number = p_record_version_number;
3144       EXCEPTION
3145         WHEN NO_DATA_FOUND THEN
3146           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3147                                p_msg_name       => 'PA_XC_RECORD_CHANGED');
3148           l_msg_data := 'PA_XC_RECORD_CHANGED';
3149         WHEN OTHERS THEN
3150           RAISE;
3151       END;
3152     END IF;
3153 
3154       l_msg_count := FND_MSG_PUB.count_msg;
3155 
3156       IF l_msg_count > 0 THEN
3157          x_msg_count := l_msg_count;
3158          x_return_status := 'E';
3159          RAISE  FND_API.G_EXC_ERROR;
3160       END IF;
3161 
3162 
3163     PA_TASK_PVT1.Update_Schedule_Version(
3164              p_api_version        => p_api_version
3165             ,p_init_msg_list          => p_init_msg_list
3166             ,p_commit               => p_commit
3167             ,p_validate_only          => p_validate_only
3168             ,p_validation_level => p_validation_level
3169             ,p_calling_module         => p_calling_module
3170             ,p_debug_mode         => p_debug_mode
3171             ,p_max_msg_count          => p_max_msg_count
3172             ,p_pev_schedule_id  => p_pev_schedule_id
3173             ,p_calendar_id        => p_calendar_id
3174             ,p_scheduled_start_date => p_scheduled_start_date
3175             ,p_scheduled_end_date   => p_scheduled_end_date
3176             ,p_obligation_start_date => p_obligation_start_date
3177             ,p_obligation_end_date  => p_obligation_end_date
3178             ,p_actual_start_date    => p_actual_start_date
3179             ,p_actual_finish_date   => p_actual_finish_date
3180             ,p_estimate_start_date  => p_estimate_start_date
3181             ,p_estimate_finish_date => p_estimate_finish_date
3182             ,p_duration             => p_duration
3183             ,p_early_start_date => p_early_start_date
3184             ,p_early_end_date         => p_early_end_date
3185             ,p_late_start_date  => p_late_start_date
3186             ,p_late_end_date          => p_late_end_date
3187             ,p_milestone_flag         => p_milestone_flag
3188             ,p_critical_flag          => p_critical_flag
3189             ,p_WQ_PLANNED_QUANTITY    => p_WQ_PLANNED_QUANTITY
3190             ,p_PLANNED_EFFORT         => p_PLANNED_EFFORT
3191             ,p_PLANNED_EQUIP_EFFORT   => p_PLANNED_EQUIP_EFFORT
3192             ,p_def_sch_tool_tsk_type_code => p_def_sch_tool_tsk_type_code
3193             ,p_constraint_type_code       => p_constraint_type_code
3194             ,p_constraint_date            => p_constraint_date
3195             ,p_free_slack                 => p_free_slack
3196             ,p_total_slack                => p_total_slack
3197             ,p_effort_driven_flag         => p_effort_driven_flag
3198             ,p_level_assignments_flag     => p_level_assignments_flag
3199             ,p_record_version_number => p_record_version_number
3200             ,p_ext_act_duration           => p_ext_act_duration
3201             ,p_ext_remain_duration        => p_ext_remain_duration
3202             ,p_ext_sch_duration           => p_ext_sch_duration
3203             ,p_attribute_category               => p_attribute_category
3204             ,p_attribute1                       => p_attribute1
3205             ,p_attribute2                       => p_attribute2
3206             ,p_attribute3                       => p_attribute3
3207             ,p_attribute4                       => p_attribute4
3208             ,p_attribute5                       => p_attribute5
3209             ,p_attribute6                       => p_attribute6
3210             ,p_attribute7                       => p_attribute7
3211             ,p_attribute8                       => p_attribute8
3212             ,p_attribute9                       => p_attribute9
3213             ,p_attribute10                    => p_attribute10
3214             ,p_attribute11                    => p_attribute11
3215             ,p_attribute12                    => p_attribute12
3216             ,p_attribute13                    => p_attribute13
3217             ,p_attribute14                    => p_attribute14
3218             ,p_attribute15                    => p_attribute15
3219             ,x_return_status          => l_return_status
3220             ,x_msg_count          => x_msg_count
3221             ,x_msg_data             => x_msg_data
3222             );
3223 
3224     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3225       x_msg_count := FND_MSG_PUB.count_msg;
3226       IF x_msg_count = 1 then
3227          pa_interface_utils_pub.get_messages
3228          (p_encoded        => FND_API.G_TRUE,
3229           p_msg_index      => 1,
3230           p_msg_count      => l_msg_count,
3231           p_msg_data       => l_msg_data,
3232           p_data           => l_data,
3233           p_msg_index_out  => l_msg_index_out);
3234          x_msg_data := l_data;
3235       END IF;
3236       raise FND_API.G_EXC_ERROR;
3237     END IF;
3238 
3239     x_return_status := FND_API.G_RET_STS_SUCCESS;
3240 
3241     IF (p_commit = FND_API.G_TRUE) THEN
3242       COMMIT;
3243     END IF;
3244 
3245     IF (p_debug_mode = 'Y') THEN
3246       pa_debug.debug('PA_TASK_PUB1.UPDATE_SCHEDULE_VERSION END');
3247     END IF;
3248 EXCEPTION
3249     when FND_API.G_EXC_ERROR then
3250       if p_commit = FND_API.G_TRUE then
3251          rollback to update_schedule_version;
3252       end if;
3253       x_return_status := FND_API.G_RET_STS_ERROR;
3254     when FND_API.G_EXC_UNEXPECTED_ERROR then
3255       if p_commit = FND_API.G_TRUE then
3256          rollback to update_schedule_version;
3257       end if;
3258       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3259       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
3260                               p_procedure_name => 'UPDATE_SCHEDULE_VERSION',
3261                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3262     when OTHERS then
3263       if p_commit = FND_API.G_TRUE then
3264          rollback to update_schedule_version;
3265       end if;
3266       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3267       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
3268                               p_procedure_name => 'UPDATE_SCHEDULE_VERSION',
3269                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3270       raise;
3271 END Update_Schedule_Version;
3272 
3273 -- API name                      : Copy_Task
3274 -- Type                          : Public procedure
3275 -- Pre-reqs                      : None
3276 -- Return Value                  : N/A
3277 -- Prameters
3278 -- p_api_version          IN    NUMBER  N   Not Null    1.0
3279 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
3280 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
3281 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
3282 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
3283 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
3284 -- p_debug_mode       IN    VARCHAR2    N   Null    N
3285 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3286 -- p_src_project_id IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3287 -- p_src_project_name   IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3288 -- p_src_structre_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3289 -- p_src_structure_name IN  VARCHAR2    N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3290 -- p_src_structure_version_id   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3291 -- p_src_structure_version_name IN  VARCHAR2    N   null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3292 -- p_src_task_version_id    IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3293 -- p_src_task_name  IN  VARCHAR2    N   null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
3294 -- p_dest_structure_id      IN NUMBER N null   PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3295 -- p_dest_structure_version_id  IN  NUMBER  N   NOT Null
3296 -- p_dest_task_version_id   IN  NUMBER  N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3297 -- p_dest_project_id        IN  NUMBER :=   PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3298 -- p_task_unpub_ver_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3299 -- p_fin_task_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3300 -- p_sharing_enabled      IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3301 -- p_versioning_enabled   IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3302 -- p_copy_option    IN  VARCHAR2    N   NOT NULL
3303 -- p_peer_or_sub    IN  VARCHAR2    N   Not Null
3304 -- p_called_from_bulk_api IN VARCHAR2 N NULL
3305 -- x_return_status  OUT     VARCHAR2    N   Null
3306 -- x_msg_count        OUT   NUMBER  N   Null
3307 -- x_msg_data         OUT   VARCHAR2    N   Null
3308 --
3309 --  History
3310 --
3311 --  23-OCT-01   Majid Ansari             -Created --
3312 --
3313 
3314 PROCEDURE Copy_Task(
3315  p_api_version        IN    NUMBER  :=1.0,
3316  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
3317  p_commit               IN  VARCHAR2    :=FND_API.G_FALSE,
3318  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
3319  p_validation_level IN  NUMBER  :=FND_API.G_VALID_LEVEL_FULL,
3320  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
3321  p_debug_mode         IN    VARCHAR2    :='N',
3322  p_max_msg_count          IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3323  p_src_project_id         IN    NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3324  p_src_project_name IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3325  p_src_structure_id IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3326  p_src_structure_name   IN  VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3327  p_src_structure_version_id IN NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3328  p_src_structure_version_name   IN  VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3329  p_src_task_version_id  IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3330  p_src_task_name          IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3331  p_dest_structure_id      IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,  -- 4201927
3332  p_dest_structure_version_id    IN  NUMBER,
3333  p_dest_task_version_id IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
3334  p_dest_project_id        IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,  -- 4201927
3335  p_task_unpub_ver_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR, -- 4201927
3336  p_fin_task_flag      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3337  p_sharing_enabled      IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3338  p_versioning_enabled   IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3339  p_copy_external_flag   IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
3340  p_called_from_api      IN    VARCHAR2    := 'ABCD',
3341  p_copy_option        IN    VARCHAR2,
3342  p_peer_or_sub        IN    VARCHAR2,
3343  p_prefix               IN    VARCHAR2,
3344  -- Added for FP_M changes. Refer to tracking Bug 3305199
3345  p_structure_type              IN              VARCHAR2        :='WORKPLAN',
3346  p_cp_dependency_flag          IN              VARCHAR2        :='N',
3347  p_cp_deliverable_asso_flag    IN              VARCHAR2        :='N',
3348  p_cp_tk_assignments_flag      IN              VARCHAR2        :='N',
3349  p_cp_cost_code_flag           IN              VARCHAR2        :='N',  -- bug#16083858
3350  p_cp_people_flag              IN              VARCHAR2        :='N',
3351  p_cp_financial_elem_flag      IN              VARCHAR2        :='N',
3352  p_cp_material_items_flag      IN              VARCHAR2        :='N',
3353  p_cp_equipment_flag           IN              VARCHAR2        :='N',
3354  -- End of FP_M changes
3355  p_called_from_bulk_api        IN              VARCHAR2        :='N',  -- 4201927
3356   p_user_defn_att_flag        IN              VARCHAR2        :='N',  -- Added for 14209636
3357  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
3358  x_msg_count          OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
3359  x_msg_data             OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3360 ) IS
3361    l_api_name                      CONSTANT VARCHAR(30) := 'COPY_TASK';
3362    l_api_version                   CONSTANT NUMBER      := 1.0;
3363 
3364    l_task_id                       PA_PROJ_ELEMENTS.PROJ_ELEMENT_ID%TYPE;
3365    l_return_status                 VARCHAR2(1);
3366    l_msg_count                     NUMBER;
3367    l_msg_data                      VARCHAR2(2000);   --bug 3637956
3368    l_data                          VARCHAR2(2000);   --bug 3637956
3369    l_msg_index_out                 NUMBER;
3370    l_error_msg_code                     VARCHAR2(250);
3371 
3372    l_src_project_id       NUMBER;
3373    l_src_structure_id         NUMBER;
3374    l_src_structure_version_id   NUMBER;
3375    l_src_task_version_id    NUMBER;
3376 
3377 -- hyau Bug 2852753
3378    l_delete_project_allowed      VARCHAR2(1);
3379    l_update_proj_num_allowed      VARCHAR2(1);
3380    l_update_proj_name_allowed    VARCHAR2(1);
3381    l_update_proj_desc_allowed    VARCHAR2(1);
3382    l_update_proj_dates_allowed    VARCHAR2(1);
3383    l_update_proj_status_allowed  VARCHAR2(1);
3384    l_update_proj_manager_allowed  VARCHAR2(1);
3385    l_update_proj_org_allowed      VARCHAR2(1);
3386    l_add_task_allowed            VARCHAR2(1);
3387    l_delete_task_allowed          VARCHAR2(1);
3388    l_update_task_num_allowed      VARCHAR2(1);
3389    l_update_task_name_allowed    VARCHAR2(1);
3390    l_update_task_dates_allowed    VARCHAR2(1);
3391    l_update_task_desc_allowed    VARCHAR2(1);
3392    l_update_parent_task_allowed  VARCHAR2(1);
3393    l_update_task_org_allowed      VARCHAR2(1);
3394 
3395    l_err_code         NUMBER        := 0;
3396    l_err_stack        VARCHAR2(200) := NULL;
3397    l_err_stage        VARCHAR2(200) := NULL;
3398 
3399    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
3400 
3401   ----------------------------------- FP_M changes : Begin
3402   -- Refer to tracking bug 3305199
3403     /* Bug #: 3305199 SMukka                                                         */
3404     /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3405     /* l_Old_Task_Versions_Tab        PA_PLSQL_DATATYPES.IdTabTyp;                   */
3406     /* l_New_Task_Versions_Tab        PA_PLSQL_DATATYPES.IdTabTyp;                   */
3407     l_Old_Task_Versions_Tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3408     l_New_Task_Versions_Tab        SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3409     Rec_Count                      NUMBER;
3410   ----------------------------------- FP_M changes : End
3411 
3412     --Added for 14209636
3413      l_orig_proj_pk_value_pairs      EGO_COL_NAME_VALUE_PAIR_ARRAY;
3414   l_new_proj_pk_value_pairs       EGO_COL_NAME_VALUE_PAIR_ARRAY;
3415  l_orig_task_pk_value_pairs      EGO_COL_NAME_VALUE_PAIR_ARRAY;
3416  l_new_task_pk_value_pairs       EGO_COL_NAME_VALUE_PAIR_ARRAY;
3417   -- l_Src_Proj_Element_id NUMBER;
3418    l_errorcode      NUMBER;
3419   /* not required
3420   CURSOR cur_dest_proj_element_id(c_dest_task_version_id NUMBER,c_project_id NUMBER)
3421    IS
3422      SELECT proj_element_id
3423        FROM pa_proj_element_versions
3424       WHERE element_version_id = c_dest_task_version_id and project_id=c_project_id;
3425    */
3426    -- End of 14209636
3427 
3428 
3429    CURSOR get_product_code ( c_project_id NUMBER ) IS
3430    SELECT pm_product_code
3431    FROM PA_PROJECTS_ALL
3432    WHERE project_id = c_project_id;
3433 
3434  -- end hyau Bug 2852753
3435 
3436 --hsiu
3437 --added for advanced structure - versioning
3438     l_versioned    VARCHAR2(1) := 'N';
3439     l_shared       VARCHAR2(1) := 'N';
3440 --end changes
3441 
3442 --hsiu
3443 --added for task weighing
3444     CURSOR get_cur_task_ver_weighting(c_ver_id NUMBER) IS
3445      select WEIGHTING_PERCENTAGE
3446        from pa_object_relationships
3447       where object_id_to1 = c_ver_id
3448         and object_type_to = 'PA_TASKS'
3449         and relationship_type = 'S';
3450 --end changes
3451 
3452 /* Bug 2680486 -- Performance changes -- Selected project_id also in the following cursor, which will
3453                   be used in other cursors. Also  Restructured it to avoid  Non-mergable view issue */
3454 
3455    CURSOR cur_obj_rel( x_element_version_id NUMBER )
3456    IS
3457      SELECT b.element_version_id task_version_id, b.display_sequence display_sequence, b.proj_element_id,
3458             b.parent_Structure_version_id parent_Structure_version_id, b.wbs_level wbs_level,
3459         b.project_id,
3460             b.attribute_category,
3461             b.attribute1,
3462             b.attribute2,
3463             b.attribute3,
3464             b.attribute4,
3465             b.attribute5,
3466             b.attribute6,
3467             b.attribute7,
3468             b.attribute8,
3469             b.attribute9,
3470             b.attribute10,
3471             b.attribute11,
3472             b.attribute12,
3473             b.attribute13,
3474             b.attribute14,
3475             b.attribute15,
3476         Financial_Task_Flag     -- FP_M changes 3305199 Bhumesh
3477       FROM  pa_proj_element_versions b,
3478             pa_proj_elements c
3479      WHERE b.proj_element_id = c.proj_element_id
3480        AND c.link_task_flag = 'N'
3481        AND p_copy_option IN ( 'PA_TASK_SUBTASK', 'PA_ENTIRE_VERSION' )
3482 /*
3483         -- Added for FP_M changes : Bug 3305199
3484     and ( p_structure_type = 'WORKPLAN' OR
3485           ( p_structure_type = 'FINANCIAL' and Financial_Task_Flag = 'Y')
3486         )
3487     -- End of FP_M changes : Bug 3305199
3488 */
3489        AND b.element_version_id IN ( SELECT object_id_to1
3490               FROM pa_object_relationships
3491              WHERE relationship_type = 'S'
3492         START WITH object_id_from1 = x_element_version_id AND relationship_type = 'S'
3493         CONNECT BY object_id_from1 = PRIOR object_id_to1 AND relationship_type = prior relationship_type AND relationship_type = 'S' )
3494      UNION
3495     SELECT  element_version_id task_version_id, display_sequence display_sequence, ppev.proj_element_id proj_element_id,
3496            parent_Structure_version_id parent_Structure_version_id, wbs_level wbs_level,
3497        project_id,
3498             attribute_category,
3499             attribute1,
3500             attribute2,
3501             attribute3,
3502             attribute4,
3503             attribute5,
3504             attribute6,
3505             attribute7,
3506             attribute8,
3507             attribute9,
3508             attribute10,
3509             attribute11,
3510             attribute12,
3511             attribute13,
3512             attribute14,
3513             attribute15,
3514         Financial_Task_Flag     -- FP_M changes 3305199 Bhumesh
3515       FROM pa_proj_element_versions ppev
3516      WHERE ppev.element_version_id = p_src_task_version_id
3517 /* not required any more
3518         -- Added for FP_M changes : Bug 3305199
3519     and ( p_structure_type = 'WORKPLAN' OR
3520           ( p_structure_type = 'FINANCIAL' and Financial_Task_Flag = 'Y')
3521         )
3522     -- End of FP_M changes : Bug 3305199
3523 */
3524        AND p_copy_option IN( 'PA_TASK_ONLY', 'PA_TASK_SUBTASK' )  --here PA_TASK_SUBTASK is included in the in list to
3525                                                                   --include the task version id since it will not have any peer
3526                                                                   --relationship record in object rel table.
3527      ORDER BY 2;
3528 
3529   CURSOR cur_proj_elems( p_proj_element_id NUMBER )
3530   IS
3531     SELECT
3532           PROJ_ELEMENT_ID
3533          ,PROJECT_ID
3534          ,OBJECT_TYPE
3535          ,ELEMENT_NUMBER
3536          ,NAME
3537          ,DESCRIPTION
3538          ,STATUS_CODE
3539          ,WF_STATUS_CODE
3540          ,PM_SOURCE_CODE
3541          ,PM_SOURCE_REFERENCE
3542          ,CLOSED_DATE
3543          ,LOCATION_ID
3544          ,MANAGER_PERSON_ID
3545          ,CARRYING_OUT_ORGANIZATION_ID
3546          ,TYPE_ID
3547          ,PRIORITY_CODE
3548          ,INC_PROJ_PROGRESS_FLAG
3549          ,RECORD_VERSION_NUMBER
3550          ,REQUEST_ID
3551          ,PROGRAM_APPLICATION_ID
3552          ,PROGRAM_ID
3553          ,PROGRAM_UPDATE_DATE
3554          ,ATTRIBUTE_CATEGORY
3555          ,ATTRIBUTE1
3556          ,ATTRIBUTE2
3557          ,ATTRIBUTE3
3558          ,ATTRIBUTE4
3559          ,ATTRIBUTE5
3560          ,ATTRIBUTE6
3561          ,ATTRIBUTE7
3562          ,ATTRIBUTE8
3563          ,ATTRIBUTE9
3564          ,ATTRIBUTE10
3565          ,ATTRIBUTE11
3566          ,ATTRIBUTE12
3567          ,ATTRIBUTE13
3568          ,ATTRIBUTE14
3569          ,ATTRIBUTE15
3570          ,WQ_ITEM_CODE
3571          ,WQ_UOM_CODE
3572          ,WQ_ACTUAL_ENTRY_CODE
3573          ,TASK_PROGRESS_ENTRY_PAGE_ID
3574          ,PARENT_STRUCTURE_ID
3575          ,PHASE_CODE
3576          ,PHASE_VERSION_ID
3577          ,WF_ITEM_TYPE
3578          ,WF_PROCESS
3579          ,WF_START_LEAD_DAYS
3580          ,BASE_PERCENT_COMP_DERIV_CODE
3581       FROM pa_proj_elements
3582      WHERE proj_element_id = p_proj_element_id;
3583 
3584 cur_proj_elems_rec cur_proj_elems%ROWTYPE;
3585 
3586 
3587 /* Bug 2680486 -- Performance changes -- Commented the following cursor definition. Restructured it to
3588                                         avoid  Non-mergable view issue*/
3589 
3590 /* CURSOR cur_rev_parent_task( x_child_task_id NUMBER, x_wbs_level NUMBER )
3591  IS
3592    SELECT a.object_id_from1 parent_task_id
3593     FROM( SELECT object_id_from1
3594             FROM pa_object_relationships
3595            WHERE relationship_type = 'S'
3596       START WITH OBJECT_ID_TO1 = x_child_task_id
3597 --hsiu: bug 2669388
3598 --      START WITH object_id_from1 = x_child_task_id
3599       --traverse reverse
3600       CONNECT BY object_id_to1 = PRIOR object_id_from1 AND relationship_type = 'S' ) a, pa_proj_element_versions b
3601    WHERE a.object_id_from1 = b.element_version_id
3602      AND b.wbs_level = x_wbs_level;
3603 */
3604 
3605  CURSOR cur_rev_parent_task( x_child_task_id NUMBER, x_wbs_level NUMBER )
3606  IS
3607    SELECT b.element_version_id parent_task_id
3608     FROM  pa_proj_element_versions b
3609    WHERE  b.wbs_level = x_wbs_level
3610      AND b.element_version_id IN ( SELECT object_id_from1
3611             FROM pa_object_relationships
3612            WHERE relationship_type = 'S'
3613       START WITH OBJECT_ID_TO1 = x_child_task_id
3614 --hsiu: bug 2669388
3615 --      START WITH object_id_from1 = x_child_task_id
3616       --traverse reverse
3617       CONNECT BY object_id_to1 = PRIOR object_id_from1 AND relationship_type = 'S'
3618              AND relationship_type = PRIOR relationship_type) ;
3619 
3620 
3621 /* Bug 2680486 -- Performance changes -- Passing project_id also to use the index in the following cursor */
3622 
3623  CURSOR cur_struc_id( x_structure_version_id NUMBER, x_project_id NUMBER )
3624  IS
3625    SELECT proj_element_id
3626      FROM pa_proj_elem_ver_structure
3627     WHERE element_version_id = x_structure_version_id
3628     AND project_id = x_project_id;
3629 
3630 
3631  CURSOR cur_struc_type( x_structure_id NUMBER )
3632  IS
3633    SELECT 'Y'
3634      FROM pa_proj_structure_types ppst
3635          ,pa_structure_types pst
3636     WHERE ppst.proj_element_id = x_structure_id
3637       AND ppst.structure_type_id = pst.structure_type_id
3638       AND pst.structure_type_class_code = 'WORKPLAN';
3639 
3640     CURSOR cur_struc_type2( c_structure_id NUMBER )
3641     IS
3642       SELECT 'Y'
3643         FROM pa_proj_structure_types ppst
3644             ,pa_structure_types pst
3645        WHERE ppst.proj_element_id = c_structure_id
3646          AND ppst.structure_type_id = pst.structure_type_id
3647          AND pst.structure_type_class_code IN( 'FINANCIAL' );
3648 
3649 /* Bug 2623999 -- Commented the following cursor def'n and added a new one below it.
3650                   We should check a structure version is and not structure id to
3651           find out a structure version is publised or not */
3652 /*    CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
3653       select 'Y'
3654         from pa_proj_elem_ver_structure
3655        where proj_element_id = c_structure_id
3656          AND project_id = c_project_id
3657          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3658 */
3659 
3660     --bug 3074706
3661     --added project_id
3662     CURSOR cur_pub_versions( c_structure_version_id NUMBER, c_project_id NUMBER ) is
3663       select 'Y'
3664         from pa_proj_elem_ver_structure
3665        where element_version_id = c_structure_version_id
3666          and project_id = c_project_id
3667          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
3668     --end bug 3074706
3669 
3670    CURSOR cur_dest_proj_id
3671    IS
3672      SELECT project_id
3673        FROM pa_proj_element_versions
3674       WHERE element_version_id = p_dest_task_version_id;
3675 
3676    /* Added the Cursor For Bug #3573143*/
3677    CURSOR cur_task_id (c_element_version_id IN NUMBER, c_project_id IN NUMBER) IS
3678      SELECT proj_element_id
3679      FROM pa_proj_element_versions
3680      where element_version_id = c_element_version_id
3681      AND project_id = c_project_id;
3682    l_cur_task_id cur_task_id%ROWTYPE;
3683    /* Ended Bug 3573143*/
3684 
3685    -- xxlu added task DFF attributes
3686    CURSOR cur_task_attr (c_task_id IN NUMBER) IS
3687      SELECT *
3688      FROM pa_tasks
3689      WHERE task_id = c_task_id;
3690    l_cur_task_attr cur_task_attr%ROWTYPE;
3691    -- end xxlu changes
3692 
3693  l_dest_project_id      NUMBER;
3694 
3695  l_dummy_char        VARCHAR2(1);
3696  l_task_number       VARCHAR2(100);
3697  l_task_name         VARCHAR2(240);
3698  l_structure_id      NUMBER;
3699  l_project_id        NUMBER;
3700  l_published_version VARCHAR2(1);
3701  l_copy_node_flag    VARCHAR2(1);
3702  l_ref_task_id       NUMBER;
3703  l_ref_project_id    NUMBER;
3704 
3705  l_old_wbs_level     NUMBER;
3706 
3707  l_ref_task_version_id  NUMBER;
3708  l_peer_or_sub          VARCHAR2(4);
3709  l_task_version_id      NUMBER;
3710  l_pev_schedule_id      NUMBER;
3711  l_element_version_id   NUMBER;
3712 
3713 --Hsiu added for date rollup
3714 --bug 3991067
3715 --  l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
3716   l_tasks_ver_ids PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
3717   l_task_cnt NUMBER := 0;
3718 --end bug 3991067
3719 
3720 --hsiu added for task weighting
3721   l_weighting           NUMBER(17,2);
3722 
3723 --hsiu added for task status rollup
3724   l_rollup_task_id NUMBER;
3725 
3726   cursor sub_task_exists(l_parent_task_version_id NUMBER) IS
3727     select '1'
3728       from pa_object_relationships
3729      where object_id_from1 = l_parent_task_version_id
3730        and object_type_from IN ('PA_TASKS','PA_STRUCTURES')
3731        and object_type_to IN ('PA_TASKS','PA_STRUCTURES')
3732        and relationship_type = 'S';
3733 
3734 --hsiu added for task version status
3735   CURSOR cur_proj_is_template(c_project_id NUMBER)
3736   IS     select 'Y'
3737            from pa_projects_all
3738           where project_id = c_project_id
3739             and template_flag = 'Y';
3740   l_template_flag VARCHAR2(1);
3741 
3742   l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
3743 --end hsiu changes
3744 
3745   -- xxlu added for DFF attributes for calling create_schedule_version
3746   CURSOR cur_proj_elem_ver_sch(c_element_version_id NUMBER, c_project_id NUMBER) IS
3747   SELECT * FROM pa_proj_elem_ver_schedule
3748   WHERE project_id = c_project_id
3749   AND element_version_id = c_element_version_id;
3750 
3751   v_cur_sch  cur_proj_elem_ver_sch%ROWTYPE;
3752 
3753   -- end xxlu changes
3754 
3755 --hsiu added for task status
3756   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
3757     select object_id_from1
3758       from pa_object_relationships
3759      where object_id_to1 = c_elem_ver_id
3760        and object_type_to = 'PA_TASKS'
3761        and relationship_type = 'S';
3762   l_parent_ver_id NUMBER;
3763 
3764 --hsiu added for bug 2669388
3765   CURSOR get_ref_tk_wbs(c_element_version_id NUMBER) IS
3766     select WBS_LEVEL
3767       from pa_proj_element_versions
3768      where element_version_id = c_element_version_id;
3769 
3770 -- bug#16083858
3771  	 CURSOR check_cost_code_enabled(c_project_id NUMBER) IS
3772  	         select 'Y' from dual where
3773  	         EXISTS
3774  	         (SELECT *
3775  	          FROM pa_projects_all
3776  	          WHERE project_id = c_project_id
3777  	          AND CBS_VERSION_ID IS NOT NULL
3778  	          AND CBS_ENABLE_FLAG = 'Y');
3779 
3780  	 -- bug#16083858
3781  	 CURSOR check_same_cbs_exist(c_src_project_id NUMBER, c_trgt_project_id NUMBER) IS
3782  	         select 'Y' from dual where
3783  	         EXISTS
3784  	         (SELECT *
3785  	          FROM pa_projects_all
3786  	          WHERE project_id = c_src_project_id
3787  	          AND nvl(CBS_VERSION_ID,-1) = nvl((select CBS_VERSION_ID from pa_projects_all
3788  	          WHERE project_id = c_trgt_project_id),-1)); -- added nvl condition bug#16713476
3789 
3790  	   l_src_prj_cbs_enabled         VARCHAR2(1) := 'N';  --bug#16083858
3791  	   l_dest_prj_cbs_enabled        VARCHAR2(1) := 'N';  --bug#16083858
3792  	   l_same_cbs_flag       VARCHAR2(1) := 'N';  --bug#16083858
3793 
3794  	  l_cp_tk_assignments_flag      VARCHAR2(1)        :='N';  -- bug#16083858
3795  	  l_cp_people_flag              VARCHAR2(1)        :='N';  -- bug#16083858
3796  	  l_cp_financial_elem_flag      VARCHAR2(1)        :='N';  -- bug#16083858
3797  	  l_cp_material_items_flag      VARCHAR2(1)        :='N';  -- bug#16083858
3798  	  l_cp_equipment_flag           VARCHAR2(1)        :='N';  -- bug#16083858
3799  	   L_TEMP VARCHAR2(1) := 'N';
3800 
3801 
3802   l_ref_tk_wbs_level    NUMBER;
3803   l_src_tasks_found boolean := false; --Bug2741989
3804 
3805   --3035902: process update flag changes
3806   l_wp_process_flag VARCHAR2(1);
3807   l_wp_type         VARCHAR2(1);
3808 
3809   l_src_wp_type     VARCHAR2(1); -- 4223490
3810 
3811   l_weighting_basis_code VARCHAR2(30);
3812   --3035902: end process update flag changes
3813 
3814   /* Included for Bug 4201927*/
3815   l_ver_enabled   VARCHAR2(1);
3816   l_copy_external_flag  VARCHAR2(1);
3817 
3818 --bug 3301192 fin plan
3819 /* Bug #: 3305199 SMukka                                                         */
3820 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
3821 /* l_old_task_ver_ids          PA_PLSQL_DATATYPES.IdTabTyp;                      */
3822 /* l_new_task_ver_ids          PA_PLSQL_DATATYPES.IdTabTyp;                      */
3823 /* l_old_task_ids              PA_PLSQL_DATATYPES.IdTabTyp;                      */
3824 /* l_new_task_ids              PA_PLSQL_DATATYPES.IdTabTyp;                      */
3825 
3826 l_old_task_ver_ids          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3827 l_new_task_ver_ids          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3828 
3829 l_old_task_ids              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3830 l_new_task_ids              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
3831 
3832 l_lowest_task_flag1         VARCHAR2(1);
3833 l_lowest_task_flag2         VARCHAR2(1);
3834 l_fin_task_flag             VARCHAR2(1);  -- fin html changes
3835 --bug 3301192 fin plan
3836 
3837 
3838     -- for bug# 3905123 , added cursor and local variable
3839 
3840     CURSOR cur_is_top_task( task_ver_id NUMBER, struct_ver_id number)
3841     IS
3842            SELECT
3843                     'x'
3844            FROM
3845                     pa_object_relationships obj
3846            WHERE
3847                     obj.object_id_to1 = task_ver_id
3848                 AND obj.object_id_from1 = struct_ver_id
3849                 AND object_type_from = 'PA_STRUCTURES'
3850                 AND object_type_to = 'PA_TASKS'
3851                 AND relationship_type = 'S'
3852                 AND relationship_subtype = 'STRUCTURE_TO_TASK';
3853 
3854     is_top_task_in_dest varchar2(1) := 'N';
3855     is_top_task   varchar2(1) := NULL;
3856 
3857     -- 3905123 end
3858 
3859     -- for bug# 12931302
3860     l_current_tk_wbs_level    NUMBER;
3861     l_diff_bw_tk_wbs_level    NUMBER;
3862     is_diff_calculated boolean := false;
3863     -- 12931302 end
3864 
3865 BEGIN
3866     pa_debug.init_err_stack ('PA_TASK_PUB1.COPY_TASK');
3867 
3868     IF (p_debug_mode = 'Y') THEN
3869       pa_debug.debug('PA_TASK_PUB1.COPY_TASK begin');
3870     END IF;
3871 
3872     IF (p_commit = FND_API.G_TRUE) THEN
3873       savepoint copy_task;
3874     END IF;
3875 
3876     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
3877       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3878     END IF;
3879 
3880     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
3881       FND_MSG_PUB.initialize;
3882     END IF;
3883 
3884     --bug 4075697  copy_task
3885     PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
3886     --bug 4075697
3887 
3888     --3035902: process update flag changes
3889     l_wp_process_flag := 'N';
3890     --3035902: end process update flag changes
3891 
3892   -- Added for FP_M changes. Bug 3305199 : Bhumesh  xxx
3893 
3894    If p_called_from_bulk_api = 'N' THEN -- 4201927
3895 
3896   OPEN cur_dest_proj_id;
3897   FETCH cur_dest_proj_id INTO l_dest_project_id;
3898   CLOSE cur_dest_proj_id;
3899 
3900    ELSE --If called from Bulk API
3901         l_dest_project_id := p_dest_project_id ;
3902    END IF;
3903 
3904  /* bug#16083858 CBS enhancement
3905  	   *  checking whether the source and destination projects are cbs enabled
3906  	   */
3907  	   -- start of cbs enabled validation
3908  	   OPEN check_cost_code_enabled(p_src_project_id);
3909  	   FETCH check_cost_code_enabled INTO L_TEMP;
3910  	   CLOSE check_cost_code_enabled;
3911  	                 IF L_TEMP='Y' THEN
3912  	                  l_src_prj_cbs_enabled := 'Y'; -- CBS enabled
3913  	                 ELSE
3914  	                  l_src_prj_cbs_enabled := 'N'; -- CBS disabled
3915  	                 END IF;
3916  	   L_TEMP := 'N';
3917  	   OPEN check_cost_code_enabled(p_dest_project_id);
3918  	   FETCH check_cost_code_enabled INTO L_TEMP;
3919  	   CLOSE check_cost_code_enabled;
3920  	                 IF L_TEMP='Y' THEN
3921  	                  l_dest_prj_cbs_enabled := 'Y'; -- CBS enabled
3922  	                 ELSE
3923  	                  l_dest_prj_cbs_enabled := 'N'; -- CBS disabled
3924  	                 END IF;
3925  	         L_TEMP := 'N';
3926  	         OPEN check_same_cbs_exist(p_src_project_id, p_dest_project_id);
3927  	         FETCH check_same_cbs_exist INTO L_TEMP;
3928  	         CLOSE check_same_cbs_exist;
3929  	                 IF L_TEMP='Y' THEN
3930  	                  l_same_cbs_flag := 'Y'; -- CBS enabled
3931  	                 ELSE
3932  	                  l_same_cbs_flag := 'N'; -- CBS disabled
3933  	                 END IF;
3934 
3935 
3936  	         -- end of cbs enabled validation
3937  	         /* bug#16083858 CBS enhancement
3938  	         *         If destination project is not CBS enabled and if the source project is
3939  	         *         CBS enabled then resource assignments should not be copied.
3940  	         *        If destination project is CBS enabled and if the source project is
3941  	         *        not CBS enabled then also resource assignments should not be copied.
3942  	         */
3943  	                 l_cp_tk_assignments_flag  := p_cp_tk_assignments_flag  ;
3944  	                 l_cp_people_flag          := p_cp_people_flag          ;
3945  	                 l_cp_financial_elem_flag  := p_cp_financial_elem_flag  ;
3946  	                 l_cp_material_items_flag  := p_cp_material_items_flag  ;
3947  	                 l_cp_equipment_flag       := p_cp_equipment_flag       ;
3948  	         IF (((l_src_prj_cbs_enabled <> l_dest_prj_cbs_enabled) OR (l_same_cbs_flag = 'N'))
3949  	                 AND (p_cp_cost_code_flag = 'Y')) THEN
3950  	                 l_cp_tk_assignments_flag  := 'N';
3951  	                 l_cp_people_flag          := 'N';
3952  	                 l_cp_financial_elem_flag  := 'N';
3953  	                 l_cp_material_items_flag  := 'N';
3954  	                 l_cp_equipment_flag       := 'N';
3955  	         END IF;
3956 
3957  	         IF ((l_same_cbs_flag = 'N')) THEN
3958  	                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3959  	                                    p_msg_name       => 'PA_DIFF_CBS_CANNOT_COPY');
3960  	               raise FND_API.G_EXC_ERROR;
3961  	         END IF;
3962 
3963 
3964 /*  If p_structure_type = 'WORKPLAN' and
3965      PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id)
3966         IN ('SHARE_PARTIAL')
3967   Then
3968 
3969     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
3970         p_task_version_id       =>
3971       , p_ref_task_version_id   => p_dest_task_version_id
3972       , x_return_status         => x_return_status
3973       , x_msg_count             => x_msg_count
3974       , x_msg_data              => x_msg_data
3975       , x_error_msg_code        => l_error_msg_code);
3976 
3977     IF (x_return_status <> 'Y') THEN
3978        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3979                 p_msg_name       => l_error_msg_code);
3980       raise FND_API.G_EXC_ERROR;
3981     End If;
3982   End If;
3983 */  --moved below
3984 
3985   -- End of FP_M changes
3986 
3987 -- hyau Bug 2852753
3988       IF p_calling_module = 'SELF_SERVICE' THEN
3989 
3990         --3035902: process update flag changes
3991         l_weighting_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_dest_project_id);
3992         l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_dest_structure_version_id, 'WORKPLAN');
3993         --3035902: end process update flag changes
3994 
3995 
3996         OPEN get_product_code(l_dest_project_id);
3997         FETCH get_product_code INTO l_pm_product_code;
3998         CLOSE get_product_code;
3999 
4000       If p_called_from_bulk_api = 'N' THEN
4001 
4002         If l_pm_product_code IS NOT NULL THEN
4003           pa_pm_controls.Get_Project_actions_allowed
4004                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
4005                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
4006                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
4007                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
4008                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
4009                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
4010                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
4011                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
4012                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
4013                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
4014                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
4015                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
4016                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
4017                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
4018                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
4019                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
4020                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
4021                  P_ERROR_CODE                 => l_err_code,
4022          P_ERROR_STACK                    => l_err_stack,
4023          P_ERROR_STAGE                => l_err_stage );
4024 
4025           IF l_err_code <> 0 THEN
4026             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4027                                  p_msg_name       => l_err_stage);
4028           END IF;
4029       IF l_add_task_allowed = 'N' THEN
4030               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4031                                    p_msg_name       => 'PA_PR_PM_CANNOT_COPY');
4032               raise FND_API.G_EXC_ERROR;
4033           END IF;
4034         END IF;
4035 
4036       End IF; -- End p_called_from_bulk_Api is N
4037       END IF;
4038 
4039 -- end hyau Bug 2852753
4040 
4041 ----dbms_output.put_line( 'Before Id to name conv.' );
4042 
4043 /* Performance Bug 4201927 : Commenting as this API not called in Move Task version Context
4044 IF p_called_from_api <> 'MOVE_TASK_VERSION'
4045 THEN
4046 */
4047  --do not do any validations if called from Move task version API.
4048     IF (p_calling_module = 'SELF_SERVICE') OR (p_calling_module = 'EXCHANGE') THEN
4049 
4050 
4051      If p_called_from_bulk_api = 'N' THEN
4052 
4053       IF ((p_src_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4054           (p_src_project_name IS NOT NULL)) OR
4055          ((p_src_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4056           (p_src_project_id IS NOT NULL)) THEN
4057         --Call Check API.
4058           PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
4059             p_project_name   => p_src_project_name,
4060             p_project_id     => p_src_project_id,
4061             x_project_id     => l_src_project_id,
4062             x_return_status  => l_return_status,
4063             x_error_msg_code => l_error_msg_code);
4064            --dbms_output.put_line('after proj name 2 id conv: '||l_src_project_id);
4065            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4066               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4067                                    p_msg_name => l_error_msg_code);
4068            END IF;
4069        END IF;
4070 
4071       IF ((p_src_structure_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4072           (p_src_structure_name IS NOT NULL)) OR
4073          ((p_src_structure_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4074           (p_src_structure_id IS NOT NULL)) THEN
4075         --Call Check API.
4076           PA_PROJECT_STRUCTURE_UTILS.Structure_Name_Or_Id
4077                            (
4078                               p_project_id             => l_src_project_id
4079                              ,p_structure_name         => p_src_structure_name
4080                              ,p_structure_id           => p_src_structure_id
4081                              ,x_structure_id           => l_src_structure_id
4082                              ,x_return_status          => l_return_status
4083                              ,x_error_message_code     => l_error_msg_code
4084                             );
4085 --dbms_output.put_line('after struct name 2 id conv: '||l_src_structure_id);
4086            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4087               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4088                                    p_msg_name => l_error_msg_code);
4089            END IF;
4090       END IF; --End Name-Id Conversion
4091 
4092 --dbms_output.put_line( 'Before Id to name conv. Structure_Version_Name_Or_Id' );
4093       IF ((p_src_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4094           (p_src_structure_version_name IS NOT NULL)) OR
4095          ((p_src_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4096           (p_src_structure_version_id IS NOT NULL)) THEN
4097         --Call Check API.
4098            l_src_structure_version_id := p_src_structure_version_id;
4099           PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id
4100                                 (
4101                               p_structure_id            => l_src_structure_id
4102                              ,p_structure_version_name  => p_src_structure_version_name
4103                              ,p_structure_version_id    => p_src_structure_version_id
4104                              ,x_structure_version_id    => l_src_structure_version_id
4105                              ,x_return_status           => l_return_status
4106                              ,x_error_message_code      => l_error_msg_code
4107                             );
4108 --dbms_output.put_line('after struct ver name 2 id conv: '||l_src_structure_version_id);
4109            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4110               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4111                                    p_msg_name => l_error_msg_code);
4112            END IF;
4113 
4114       END IF; --End Name-Id Conversion
4115 
4116        /*Task Name to ID Conversion : This is not needed in case of call from SS (i.e) Copy Bulk API */
4117        IF ((p_src_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
4118           (p_src_task_name IS NOT NULL)) OR
4119          ((p_src_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
4120           (p_src_task_version_id IS NOT NULL)) THEN
4121         --Call Check API.
4122 
4123 --dbms_output.put_line( 'Before Id to name conv. task_Ver_Name_Or_Id' );
4124 
4125           PA_PROJ_ELEMENTS_UTILS.task_Ver_Name_Or_Id
4126                            (
4127                               p_task_name              => p_src_task_name
4128                              ,p_task_version_id        => p_src_task_version_id
4129                              ,p_structure_version_id   => l_src_structure_version_id
4130                              ,x_task_version_id        => l_src_task_version_id
4131                              ,x_return_status          => l_return_status
4132                              ,x_error_msg_code     => l_error_msg_code
4133                             );
4134            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4135               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4136                                    p_msg_name => l_error_msg_code);
4137            END IF;
4138       END IF; --End Name-Id Conversion
4139 
4140  /*4201927 : Moved this code outside the Loop*/
4141 -- bug 3301192  financial HTML changes
4142         IF p_structure_type = 'WORKPLAN'
4143         THEN
4144            IF
4145 PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) =
4146 'SHARE_FULL'
4147            THEN
4148               l_fin_task_flag := 'Y';
4149            ELSE
4150               l_fin_task_flag := 'N';
4151            END IF;
4152         ELSE
4153             l_fin_task_flag := 'Y';
4154         END IF;
4155   -- bug 3301192  financial HTML changes
4156   /*4201927 : Moved this code outside the Loop*/
4157 
4158       /*4201927 Start <<B>> */
4159        OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id );
4160        FETCH cur_struc_id INTO l_structure_id;--This is Destination StructureID
4161        CLOSE cur_struc_id;
4162 
4163 
4164        OPEN cur_proj_is_template(l_dest_project_id);
4165        FETCH cur_proj_is_template into l_template_flag;
4166        IF cur_proj_is_template%NOTFOUND THEN
4167             l_template_flag := 'N';
4168        END IF;
4169        CLOSE cur_proj_is_template;
4170 
4171        /*4201927 : Moved this code outside the Loop*/
4172        l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
4173                                                   l_dest_project_id);
4174        /*4201927 : Moved this code outside the Loop*/
4175 
4176        /*4201927 : Deriving whether versioned or not only once*/
4177        l_ver_enabled :=
4178 PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id);
4179 
4180        /*4201927 : <<C>> Value for Copy External Flag*/
4181        IF p_src_project_id = l_dest_project_id
4182        THEN
4183            l_copy_external_flag := 'N';
4184        ELSE
4185            l_copy_external_flag := 'Y';
4186        ENd IF;
4187 
4188        --hsiu added for task version status changes
4189        IF (l_template_flag = 'N') THEN
4190           --check if structure is shared
4191           --  if shared, check if versioned
4192           --    'WORKING' if versioned; 'PUBLISHED' if not
4193           --  if split, check if 'FINANCIAL'
4194           --    'PUBLISHED' if financial
4195           --    check if versioned
4196           --    'WORKING' if versioend; 'PUBLISHED' if not
4197           IF ('Y' = l_shared) THEN
4198             IF ('Y' = l_ver_enabled) THEN
4199               l_task_unpub_ver_status_code := 'WORKING';
4200             ELSE
4201               l_task_unpub_ver_status_code := 'PUBLISHED';
4202             END IF;
4203           ELSE --split
4204             IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id,'FINANCIAL') AND
4205                 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id,'WORKPLAN')) THEN
4206               l_task_unpub_ver_status_code := 'PUBLISHED';
4207             ELSE --workplan only
4208               IF ('Y' = l_ver_enabled) THEN
4209                 l_task_unpub_ver_status_code := 'WORKING';
4210               ELSE
4211                 l_task_unpub_ver_status_code := 'PUBLISHED';
4212               END IF;
4213             END IF;
4214           END IF;
4215         ELSE
4216           l_task_unpub_ver_status_code := 'WORKING';
4217         END IF;
4218 --end task version status changes
4219 
4220       /*4201927 End <<B>> */
4221     Else -- If called from copy bulk APi
4222      l_src_structure_version_id := p_src_structure_version_id;
4223      l_src_project_id := p_src_project_id ;
4224      l_src_structure_id := p_src_structure_id ;
4225      l_src_task_version_id := p_src_task_version_id ;
4226 
4227      l_task_unpub_ver_status_code := p_task_unpub_ver_status_code;
4228      l_structure_id := p_dest_structure_id ;
4229      l_fin_task_flag := p_fin_task_flag;
4230 
4231      l_shared :=p_sharing_enabled ;
4232      l_ver_enabled := p_versioning_enabled;
4233      l_copy_external_flag := p_copy_external_flag;
4234      -- as we have already derived this value in copy bulk api
4235 
4236     End If ; --  If p_called_from_bulk_api = 'N'
4237 
4238     END IF;  -- End If Calling module is SS or Exchange
4239 
4240 
4241     IF l_src_project_id IS NULL OR l_src_structure_id IS NULL OR
4242        l_src_structure_version_id IS NULL OR (l_src_task_version_id IS NULL AND p_copy_option <> 'PA_ENTIRE_VERSION')
4243     THEN
4244         /* This Copy API not used in Move Task version context : Hence this check is not needed : 4201927
4245         IF p_called_from_api <> 'MOVE_TASK_VERSION'
4246         THEN
4247         */
4248 
4249            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4250                                 p_msg_name       => 'PA_PS_NOT_ENOUGH_PARAMS' );
4251            x_msg_data := 'COPY TASK : PA_PS_NOT_ENOUGH_PARAMS';
4252            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4253            RAISE  FND_API.G_EXC_ERROR;
4254         /*END IF;  : 4201927 */
4255     END IF;
4256 
4257 /* 4201927 : Perf Fix : END IF;  --move_task_version check. */
4258 
4259     -- 4223490 Included for Copy External Flow
4260     IF l_copy_external_flag = 'Y' THEN
4261        l_src_wp_type :=  PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_src_structure_version_id,'WORKPLAN');
4262     ELSE
4263        l_src_wp_type := l_wp_type;
4264     END IF;
4265 
4266     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4267       x_msg_count := FND_MSG_PUB.count_msg;
4268       IF x_msg_count = 1 then
4269          pa_interface_utils_pub.get_messages
4270          (p_encoded        => FND_API.G_TRUE,
4271           p_msg_index      => 1,
4272           p_msg_count      => l_msg_count,
4273           p_msg_data       => l_msg_data,
4274           p_data           => l_data,
4275           p_msg_index_out  => l_msg_index_out);
4276          x_msg_data := l_data;
4277       END IF;
4278       raise FND_API.G_EXC_ERROR;
4279     END IF;
4280     --If source task is empty and user not selected copy PA_ENTIRE_VERSION
4281     IF ( l_src_task_version_id IS NULL AND
4282          l_src_structure_version_id IS NOT NULL AND
4283          p_copy_option <> 'PA_ENTIRE_VERSION' ) OR
4284        ( p_copy_option NOT IN( 'PA_ENTIRE_VERSION', 'PA_TASK_ONLY', 'PA_TASK_SUBTASK'  ) )
4285     THEN
4286         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4287                              p_msg_name       => 'PA_PS_WRONG_COPY_OPTION' );
4288         x_msg_data := 'PA_PS_WRONG_COPY_OPTION';
4289         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4290         RAISE  FND_API.G_EXC_ERROR;
4291     END IF;
4292 
4293     IF p_copy_option = 'PA_TASK_ONLY' OR p_copy_option = 'PA_TASK_SUBTASK'
4294     THEN
4295        l_element_version_id := l_src_task_version_id;
4296 
4297        /*4201927 : This API not used in Move Task Version Context
4298        --If called from move_task versionsd then just copy parameter in l_element_verion_id var.
4299        IF p_called_from_api = 'MOVE_TASK_VERSION'
4300        THEN
4301           l_element_version_id := p_src_task_version_id;
4302        END IF;
4303        */
4304 
4305     ELSIF p_copy_option = 'PA_ENTIRE_VERSION'
4306     THEN
4307        l_element_version_id := l_src_structure_version_id;
4308     END IF;
4309     IF p_dest_structure_version_id = p_dest_task_version_id THEN
4310        --Copying under a structure;
4311        l_ref_task_version_id := p_dest_structure_version_id;
4312 
4313        --hsiu: bug 2669388
4314        l_ref_tk_wbs_level := 0;
4315        --end bug 2669388
4316     ELSE
4317        l_ref_task_version_id := p_dest_task_version_id;
4318        --hsiu: bug 2669388
4319        OPEN get_ref_tk_wbs(l_ref_task_version_id);
4320        FETCH get_ref_tk_wbs into l_ref_tk_wbs_level;
4321        CLOSE get_ref_tk_wbs;
4322 
4323        IF (p_peer_or_sub = 'SUB') THEN
4324          l_ref_tk_wbs_level := l_ref_tk_wbs_level;
4325        ELSE
4326          l_ref_tk_wbs_level := l_ref_tk_wbs_level-1;
4327        END IF;
4328        --end bug 2669388
4329     END IF;
4330 
4331     l_peer_or_sub := p_peer_or_sub;
4332     --hsiu task status changes
4333     --check if ok to create subtask
4334     IF (l_peer_or_sub = 'PEER') THEN
4335       OPEN get_parent_version_id(l_ref_task_version_id);
4336       FETCH get_parent_version_id into l_parent_ver_id;
4337       CLOSE get_parent_version_id;
4338       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
4339          p_parent_task_ver_id => l_parent_ver_id
4340         ,x_return_status      => l_return_status
4341         ,x_error_message_code => l_error_msg_code);
4342 
4343       IF (l_return_status <> 'Y') THEN
4344         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4345                              p_msg_name => l_error_msg_code);
4346         raise FND_API.G_EXC_ERROR;
4347       END IF;
4348     ELSE
4349       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
4350          p_parent_task_ver_id => l_ref_task_version_id
4351         ,x_return_status      => l_return_status
4352         ,x_error_message_code => l_error_msg_code
4353       );
4354       IF (l_return_status <> 'Y') THEN
4355         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4356                              p_msg_name => l_error_msg_code);
4357         raise FND_API.G_EXC_ERROR;
4358       END IF;
4359     END IF;
4360     --end task status changes
4361 /* not required in the context of copy_task bcoz when a task is copied, copied as financial if copied under Fin tab and
4362    workplan if copied under WP tab for a partial share structures.
4363 If p_structure_type = 'WORKPLAN' and
4364    PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) = 'SHARE_PARTIAL'
4365 Then
4366   IF p_dest_structure_version_id <> p_dest_task_version_id  -- reference should not be str ver
4367   THEN
4368     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
4369         p_task_version_id       => l_element_version_id
4370       , p_ref_task_version_id   => l_ref_task_version_id
4371       , x_return_status         => x_return_status
4372       , x_msg_count             => x_msg_count
4373       , x_msg_data              => x_msg_data
4374       , x_error_msg_code        => l_error_msg_code);
4375 
4376     IF (x_return_status <> 'Y') THEN
4377        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4378                             p_msg_name       => l_error_msg_code);
4379       raise FND_API.G_EXC_ERROR;
4380     End If;
4381   END IF;
4382 End If;
4383 */
4384 
4385   --check the task is a lowest task bug 3301192
4386   IF p_dest_structure_version_id <> p_dest_task_version_id  /* reference should not be str ver */
4387   THEN
4388       l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_dest_task_version_id );
4389   END IF;
4390 
4391     --dbms_output.put_line( 'l_element_version_id '||l_element_version_id );
4392 
4393     ----------------------------------------------
4394     Rec_Count := 0;  -- <-- Added for FP_M changes
4395     -- Refer to tracking bug 3305199
4396     ----------------------------------------------
4397     FOR cur_obj_rel_rec IN cur_obj_rel(  l_element_version_id )  LOOP
4398 
4399     l_src_tasks_found := true; -- Bug2741989
4400     --For Bug 12931302
4401     --Set the value of wbs_level for curent task in l_current_tk_wbs_level.
4402     l_current_tk_wbs_level := cur_obj_rel_rec.wbs_level;
4403     --Find out differnce b/w first task wbs level and one.
4404     if is_diff_calculated = false
4405     then
4406 	l_diff_bw_tk_wbs_level := l_current_tk_wbs_level - 1;
4407 	is_diff_calculated := true;
4408     end if;
4409     --Bug 12931302
4410         OPEN cur_proj_elems( cur_obj_rel_rec.proj_element_id );
4411         FETCH cur_proj_elems INTO cur_proj_elems_rec;
4412         CLOSE cur_proj_elems;
4413 
4414          IF   length( p_prefix||cur_proj_elems_rec.element_number ) > 100 OR
4415               length( p_prefix||cur_proj_elems_rec.name ) > 240
4416          THEN
4417              l_task_number := SUBSTR( p_prefix||cur_proj_elems_rec.element_number, 1, 100 );
4418              l_task_name   := SUBSTR( p_prefix||cur_proj_elems_rec.name, 1, 240 );
4419          ELSE
4420              l_task_number := p_prefix||cur_proj_elems_rec.element_number;
4421              l_task_name   := p_prefix||cur_proj_elems_rec.name;
4422          END IF;
4423 
4424       /*4201927 */
4425         IF cur_obj_rel%ROWCOUNT = 1
4426         THEN
4427       /* Bug 2680486 -- Performance changes -- Passed project_id also in the following statement */
4428 
4429           OPEN cur_struc_id( cur_obj_rel_rec.parent_structure_version_id, cur_obj_rel_rec.project_id );
4430           FETCH cur_struc_id INTO l_structure_id;
4431           CLOSE cur_struc_id;
4432         END IF;
4433         l_structure_id := p_dest_structure_id ;
4434         /*4201927 */
4435 
4436 --dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Task' );
4437 --dbms_output.put_line( 'Org Id '||cur_proj_elems_rec.carrying_out_organization_id);
4438 
4439        /*4201927 : This Copy API not used in Move Task Version Context , Hence Commenting
4440         IF (p_called_from_api <> 'MOVE_TASK_VERSION') THEN */
4441 --bug 2846700
4442 --the rest has been moved above create_task_version
4443 
4444           /* 4201927 This l_structure_id correspond's to the destination project's structure id
4445              for the passed p_dest_structure_version_id.
4446              In Copy Bulk API we are already deriving this value and passing
4447              as p_dest_structure_id
4448              Also,This code need not be present inside FOR LOP for each and every task
4449 
4450              Hence moving it outside the loop
4451 */
4452          /* OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id );
4453           FETCH cur_struc_id INTO l_structure_id;  -- (<<A>>)
4454           CLOSE cur_struc_id;
4455        */
4456              /*This code refers to finding whether the destination is a template or project
4457              It need not be present inside the loop
4458 /*
4459           --hsiu: added for task version status
4460           OPEN cur_proj_is_template(l_dest_project_id);
4461           FETCH cur_proj_is_template into l_template_flag;
4462           IF cur_proj_is_template%NOTFOUND THEN
4463             l_template_flag := 'N';
4464           END IF;
4465           CLOSE cur_proj_is_template;
4466           4201927 */
4467           /* ============ Moved this block of code above the FOR LOOP tagged by <<B>> =====*/
4468 
4469 --bug 2846700
4470         /* END IF; 4201927*/
4471 
4472 --hsiu modified for calculating weighting.
4473         OPEN get_cur_task_ver_weighting(cur_obj_rel_rec.task_version_id);
4474         FETCH get_cur_task_ver_weighting into l_weighting;
4475         CLOSE get_cur_task_ver_weighting;
4476 
4477         IF  cur_obj_rel%ROWCOUNT > 1
4478         THEN
4479 	   --Bug 12931302
4480            IF l_old_wbs_level < l_current_tk_wbs_level
4481            THEN
4482               l_peer_or_sub := 'SUB';
4483            ELSIF l_old_wbs_level = l_current_tk_wbs_level
4484            THEN
4485               l_peer_or_sub := 'PEER';
4486            ELSE
4487               --if the new task being created is the lower level than the previous one.
4488               --write logic to find out the task at cur_obj_rel_rec.wbs_level
4489               -- t1
4490               --   t1.1
4491               --   t1.2
4492               --       t1.2.1
4493               --       t1.2.2
4494               --             t1.2.2.1
4495               --   t1.3 ( new task created here. For this task the ref is t1.2 )
4496               l_peer_or_sub := 'PEER';
4497 --hsiu: bug 269388
4498 --              OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level);
4499               --OPEN cur_rev_parent_task( l_ref_task_version_id, cur_obj_rel_rec.wbs_level + l_ref_tk_wbs_level);
4500 	      --Begin Bug 12931302
4501 	      -- (l_current_tk_wbs_level - l_diff_bw_tk_wbs_level) will return the relative
4502 	      -- wbs_level for the current task.
4503 	      -- If we copy t1.1 and select the Placement as "1", then t1.1.2(wbs_level is 3) was created as peer of
4504 	      -- t1.1.1.1(wbs_level is 4) because of wbs_level for the task t1.1.2 is 3 and ref_tk_wbs_level is 1 (because we selected 1 as placement).
4505 	      -- and system calculated wbs_level for the new task (t1.1.2) as 4.
4506 	      -- Below code will ensure that task t1.1.2 should be peer of t1.1.1 not t1.1.1.1
4507 	      -- Task                        wbs_level from db     Relative wbs_level by below code
4508 	      --   t1.1                        2                       1
4509               --       t1.1.1                  3                       2
4510               --         t1.1.1.1              4                       3
4511               --           t1.1.1.1.1          5                       4
4512               --       t1.1.2                  3                       2
4513               --         t1.1.2.1              4                       3
4514 
4515               OPEN cur_rev_parent_task( l_ref_task_version_id, l_current_tk_wbs_level - l_diff_bw_tk_wbs_level + l_ref_tk_wbs_level);
4516 	      --End Bug 12931302
4517 --end bug 2669388
4518               FETCH cur_rev_parent_task INTO l_ref_task_version_id;
4519           /** Code added for Bug 4046751 . **/
4520           -- While doing Copy Tasks of the structure below
4521               -- t1
4522               --   t1.1
4523               --       t1.1.1
4524               --             t1.1.1.1
4525           --       t1.1.2
4526           -- If we Copy t1.1, then task t1.1.2 was being created as a peer task of t1.1.1.1.
4527           -- The code below will ensure that its p_ref_task_id is set to t1.1.1 and not t1.1.1.1
4528           IF cur_rev_parent_task%NOTFOUND then
4529               CLOSE cur_rev_parent_task;
4530           OPEN cur_rev_parent_task( l_ref_task_version_id, l_current_tk_wbs_level);
4531               FETCH cur_rev_parent_task INTO l_ref_task_version_id;
4532           END if;
4533           /** Code changes end for BUg 4046751 **/
4534               CLOSE cur_rev_parent_task;
4535            END IF;
4536 --hsiu added, for task weighting
4537         ELSIF cur_obj_rel%ROWCOUNT = 1 THEN
4538           IF (l_peer_or_sub = 'PEER') THEN
4539             l_weighting := 0;
4540           ELSE --'SUB'
4541             OPEN sub_task_exists(l_ref_task_version_id);
4542             FETCH sub_task_exists into l_dummy_char;
4543             IF sub_task_exists%NOTFOUND THEN
4544               If (p_copy_option <> 'PA_ENTIRE_VERSION') THEN
4545                 l_weighting := 100;
4546               END IF;
4547             ELSE
4548               l_weighting := 0;
4549             END IF;
4550           END IF;
4551 --end task weighting modification
4552         END IF;
4553 
4554         /* This code need not execute for each and every task in LOOP
4555            4201927 : Moved this code to tagging marked by <<B>>
4556          -- Start of block moved
4557 
4558 ----dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Task_Version' );
4559 --hsiu added for task version status changes
4560         IF (l_template_flag = 'N') THEN
4561           --check if structure is shared
4562           --  if shared, check if versioned
4563           --    'WORKING' if versioned; 'PUBLISHED' if not
4564           --  if split, check if 'FINANCIAL'
4565           --    'PUBLISHED' if financial
4566           --    check if versioned
4567           --    'WORKING' if versioend; 'PUBLISHED' if not
4568           IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(l_dest_project_id)) THEN
4569             IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id)) THEN
4570               l_task_unpub_ver_status_code := 'WORKING';
4571             ELSE
4572               l_task_unpub_ver_status_code := 'PUBLISHED';
4573             END IF;
4574           ELSE --split
4575             IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'FINANCIAL')  AND
4576                 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_structure_id, 'WORKPLAN')) THEN
4577               l_task_unpub_ver_status_code := 'PUBLISHED';
4578             ELSE --workplan only
4579               IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id)) THEN
4580                 l_task_unpub_ver_status_code := 'WORKING';
4581               ELSE
4582                 l_task_unpub_ver_status_code := 'PUBLISHED';
4583               END IF;
4584             END IF;
4585           END IF;
4586         ELSE
4587           l_task_unpub_ver_status_code := 'WORKING';
4588         END IF;
4589 --end task version status changes
4590 
4591         End Moving Code to <<B>> for 4201927*/
4592 
4593 --bug 2846700
4594 --moved here from above to get correct referenct task id and peer_or_sub value
4595       /*  IF p_called_from_api <> 'MOVE_TASK_VERSION'
4596         THEN
4597        4201927 : This Copy API not used in Move Task version Context
4598        Hence Commented
4599       */
4600           --added for task version status
4601 
4602           /* Bug 3573143 */
4603           OPEN cur_task_id(p_src_task_version_id, p_src_project_id);
4604       FETCH cur_task_id INTO l_cur_task_id;
4605       CLOSE cur_task_id;
4606       /* Ended Bug 3573143 */
4607           -- xxlu added task DFF attributes
4608 
4609       /* Commented the following code Bug 3573143 */
4610           /* OPEN cur_task_attr(p_src_structure_id); */
4611       OPEN cur_task_attr(l_cur_task_id.proj_element_id); -- Added Bug 3573143
4612           FETCH cur_task_attr INTO l_cur_task_attr;
4613           CLOSE cur_task_attr;
4614 
4615           l_task_id := null;     --bug 2625556
4616 
4617           /* Bug 2623999 -- added the following select to get the ref_task_id*/
4618           --bug 2846700
4619           --modified sql to get correct reference task
4620     --mwasowic: handle a  case when we're copying the top task and
4621     -- l_ref_task_version_id is really a structure version id, bug 3587047
4622 
4623     IF p_dest_structure_version_id = p_dest_task_version_id THEN
4624 
4625           -- 3905123 added below code
4626 
4627           -- check whether source task is top task or not
4628           -- if source task is top task
4629           --    in destination structure, check the task is getting created as PEER or SUB
4630           --    if task is getting created as SUB
4631           --        pass l_ref_task_id as NULL
4632           --    else
4633           --        derive proj_element_id for the destination task and pass as l_ref_task_id
4634           --    end if
4635           -- else
4636           --    if copy_option is 'PA_TASK_ONLY' or 'PA_TASK_SUBTASK' and source task is not the top task
4637           --       and first task is getting created in destination structure then
4638           --        pass l_ref_task_id as NULL
4639           --        ( this code will be only called once while creating the first top task in dest struct,
4640           --          which is not the top task in source structure , copy option is PA_TASK_ONLY or PA_TASK_SUBTASK )
4641           --    else
4642           --        derive proj_element_id for the destination and pass as l_ref_task_id
4643           --    end if
4644           -- end if
4645 
4646           -- Exp : Copy Option is 'ENTIRE_STRUCTURE' and source structure is
4647 
4648           --        |_T1        ( l_ref_task_id will be passed as NULL )
4649           --        |  |_T1.1   ( l_ref_task_id will be passed as detn task T1's proj_element_id )
4650           --        |_T2        ( l_ref_task_id will be passed as detn task T1's proj_element_id )
4651 
4652           is_top_task := null;
4653 
4654           open cur_is_top_task(cur_obj_rel_rec.task_version_id, l_src_structure_version_id);
4655           fetch cur_is_top_task INTO is_top_task;
4656           CLOSE cur_is_top_task;
4657 
4658           IF is_top_task = 'x' THEN
4659             IF l_peer_or_sub = 'PEER' THEN
4660               SELECT proj_element_id
4661               INTO l_ref_task_id
4662               FROM pa_proj_element_versions
4663               WHERE element_version_id = l_ref_task_version_id;
4664             ELSE
4665               l_ref_task_id := null;
4666             END IF;
4667           ELSE
4668               IF is_top_task_in_dest = 'N' AND (p_copy_option IN ('PA_TASK_ONLY','PA_TASK_SUBTASK')) THEN
4669                   l_ref_task_id := NULL;
4670               ELSE
4671                   SELECT proj_element_id
4672                   INTO l_ref_task_id
4673                   FROM pa_proj_element_versions
4674                   WHERE element_version_id = l_ref_task_version_id;
4675               END IF;
4676           END IF;
4677 
4678           -- 3905123 end
4679     ELSE
4680           SELECT proj_element_id
4681           INTO l_ref_task_id
4682           FROM pa_proj_element_versions
4683           WHERE element_version_id = l_ref_task_version_id;
4684           --commented for bug 2846700
4685           --WHERE element_version_id = p_dest_task_version_id;
4686     END IF;
4687 
4688     -- 3905123 , once the first task is created in destination, change the value of is_top_task_in_dest var to 'Y'
4689 
4690     IF is_top_task_in_dest = 'N' AND p_dest_structure_version_id = p_dest_task_version_id THEN
4691         is_top_task_in_dest := 'Y';
4692     END IF;
4693 
4694     -- 3905123 end
4695 
4696           --3035902: process update flag changes
4697           --set update process flag if necessary;
4698 
4699           IF (l_wp_process_flag = 'N') THEN
4700             --may need to update process flag
4701             IF ((l_shared = 'N') AND
4702                 (l_wp_type = 'Y') AND
4703                 (pa_task_type_utils.check_tk_type_progressable(cur_proj_elems_rec.TYPE_ID)='Y') AND
4704                 (l_weighting_basis_code <> 'MANUAL'))
4705             THEN
4706               --split and workplan; only update if progressable task added
4707               l_wp_process_flag := 'Y';
4708             ELSIF ((l_shared = 'N') AND
4709                    (l_wp_type = 'N')) THEN
4710               --split and financial; update
4711               l_wp_process_flag := 'Y';
4712             ELSIF (l_shared = 'Y') THEN
4713               l_wp_process_flag := 'Y';
4714             END IF;
4715           END IF;
4716           --3035902: end process update flag changes
4717 
4718           PA_TASK_PVT1.Create_Task(
4719                        p_api_version            => p_api_version
4720                        ,p_init_msg_list         => p_init_msg_list
4721                        ,p_commit                  => p_commit
4722                        ,p_validate_only         => p_validate_only
4723                        ,p_validation_level    => p_validation_level
4724                        ,p_calling_module            => p_calling_module
4725                        ,p_debug_mode            => p_debug_mode
4726                        ,p_max_msg_count         => p_max_msg_count
4727                        ,p_object_type           => cur_proj_elems_rec.object_type
4728                        ,p_project_id            => l_dest_project_id
4729                        ,p_structure_id            => l_structure_id
4730                        ,p_structure_version_id    => p_dest_structure_version_id
4731                        ,p_task_number           => l_task_number
4732                ,p_task_name               => l_task_name
4733                        ,p_task_description    => cur_proj_elems_rec.description
4734                        ,p_location_id           => cur_proj_elems_rec.location_id
4735                      --p_country                  => null
4736                      --p_territory_code         => null
4737                      --p_state_region           => null
4738                      --p_city                       => null
4739                        ,p_task_manager_id           => cur_proj_elems_rec.manager_person_id
4740                      --p_task_manager_name    => null
4741                       ,p_carrying_out_org_id      => cur_proj_elems_rec.carrying_out_organization_id
4742                      --p_carrying_out_org_name    => null
4743                        ,p_priority_code         => cur_proj_elems_rec.priority_code
4744                        ,p_TYPE_ID                 => cur_proj_elems_rec.TYPE_ID
4745                      --,p_status_code           => cur_proj_elems_rec.status_code
4746                        ,p_inc_proj_progress_flag  => cur_proj_elems_rec.inc_proj_progress_flag
4747                      --,p_pm_product_code           => cur_proj_elems_rec.pm_product_code
4748                      --,p_pm_task_reference   => cur_proj_elems_rec.pm_task_reference
4749                        ,p_closed_date           => cur_proj_elems_rec.closed_date
4750                      --p_scheduled_start_date     => null
4751                      --p_scheduled_finish_date    => null
4752                        ,p_attribute_category      => cur_proj_elems_rec.attribute_category
4753                        ,p_attribute1            => cur_proj_elems_rec.attribute1
4754                        ,p_attribute2            => cur_proj_elems_rec.attribute2
4755                        ,p_attribute3            => cur_proj_elems_rec.attribute3
4756                        ,p_attribute4            => cur_proj_elems_rec.attribute4
4757                        ,p_attribute5            => cur_proj_elems_rec.attribute5
4758                        ,p_attribute6            => cur_proj_elems_rec.attribute6
4759                        ,p_attribute7            => cur_proj_elems_rec.attribute7
4760                        ,p_attribute8            => cur_proj_elems_rec.attribute8
4761                        ,p_attribute9            => cur_proj_elems_rec.attribute9
4762                        ,p_attribute10           => cur_proj_elems_rec.attribute10
4763                        ,p_attribute11           => cur_proj_elems_rec.attribute11
4764                        ,p_attribute12           => cur_proj_elems_rec.attribute12
4765                        ,p_attribute13           => cur_proj_elems_rec.attribute13
4766                        ,p_attribute14           => cur_proj_elems_rec.attribute14
4767                        ,p_attribute15           => cur_proj_elems_rec.attribute15
4768                        ,p_task_weighting_deriv_code =>NULL
4769                        ,p_work_item_code        =>cur_proj_elems_rec.WQ_ITEM_CODE
4770                        ,p_uom_code              =>cur_proj_elems_rec.WQ_UOM_CODE
4771                        ,p_wq_actual_entry_code  =>cur_proj_elems_rec.WQ_ACTUAL_ENTRY_CODE
4772                        ,p_task_progress_entry_page_id =>cur_proj_elems_rec.TASK_PROGRESS_ENTRY_PAGE_ID
4773                        ,p_parent_structure_id     => cur_proj_elems_rec.parent_structure_id
4774 /* hy Bug 2767403 Fix - Should not copy phase when copy task
4775                        ,p_phase_code              => cur_proj_elems_rec.phase_code
4776                        ,p_phase_version_id        => cur_proj_elems_rec.phase_version_id
4777  end hy Bug 2767403 Fix */
4778                        ,p_tk_attribute_category  => l_cur_task_attr.attribute_category
4779                        ,p_tk_attribute1  => l_cur_task_attr.attribute1
4780                        ,p_tk_attribute2  => l_cur_task_attr.attribute2
4781                        ,p_tk_attribute3  => l_cur_task_attr.attribute3
4782                        ,p_tk_attribute4  => l_cur_task_attr.attribute4
4783                        ,p_tk_attribute5  => l_cur_task_attr.attribute5
4784                        ,p_tk_attribute6  => l_cur_task_attr.attribute6
4785                        ,p_tk_attribute7  => l_cur_task_attr.attribute7
4786                        ,p_tk_attribute8  => l_cur_task_attr.attribute8
4787                        ,p_tk_attribute9  => l_cur_task_attr.attribute9
4788                        ,p_tk_attribute10 => l_cur_task_attr.attribute10
4789                        ,p_peer_or_sub    => l_peer_or_sub /* Bug 2623999 -- added this parameter*/ --bug 2846700: modified to use l_peer_or_sub
4790                        ,p_ref_task_id    => l_ref_task_id /* Bug 2623999 -- added this parameter*/
4791                        ,p_structure_type => p_structure_type
4792                         -- Bug#3811846 : added p_base_perc_comp_deriv_code
4793                        ,p_base_perc_comp_deriv_code     =>  cur_proj_elems_rec.base_percent_comp_deriv_code
4794                         -- Bug#3491609 : Workflow Chanegs FP M
4795                        ,p_wf_item_type   => cur_proj_elems_rec.wf_item_type
4796                        ,p_wf_process     => cur_proj_elems_rec.wf_process
4797                        ,p_wf_lead_days   => cur_proj_elems_rec.wf_start_lead_days
4798                         -- Bug#3491609 : Workflow Chanegs FP M
4799                        ,x_task_id         => l_task_id
4800                        ,x_return_status  => l_return_status
4801                        ,x_msg_count  => l_msg_count
4802                        ,x_msg_data        => l_msg_data );
4803            -- end xxlu changes
4804         /* 4201927 : THIS COPY API is not used in MOVE_TASK_VERSION context
4805            hence commenting
4806         ELSIF p_called_from_api = 'MOVE_TASK_VERSION'
4807         THEN
4808           l_task_id := cur_obj_rel_rec.proj_element_id;
4809         END IF;
4810         4201927*/
4811 
4812         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4813           x_msg_count := FND_MSG_PUB.count_msg;
4814           IF x_msg_count = 1 then
4815             pa_interface_utils_pub.get_messages
4816                          (p_encoded        => FND_API.G_TRUE,
4817                           p_msg_index      => 1,
4818                           p_msg_count      => l_msg_count,
4819                           p_msg_data       => l_msg_data,
4820                           p_data           => l_data,
4821                           p_msg_index_out  => l_msg_index_out);
4822                           x_msg_data := l_data;
4823           END IF;
4824           raise FND_API.G_EXC_ERROR;
4825         END IF;
4826 --end bug 2846700
4827 
4828 
4829 /* Added for 14209636 */
4830 IF (p_user_defn_att_flag='Y') THEN
4831 	l_orig_proj_pk_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(EGO_COL_NAME_VALUE_PAIR_OBJ('PROJECT_ID', p_src_project_id));
4832   l_new_proj_pk_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(EGO_COL_NAME_VALUE_PAIR_OBJ('PROJECT_ID', p_dest_project_id));
4833 l_new_task_pk_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(EGO_COL_NAME_VALUE_PAIR_OBJ('PROJ_ELEMENT_ID', l_task_id));
4834 /* not required
4835 	if(p_src_task_version_id is not NULL) THEN
4836 	OPEN cur_dest_proj_element_id(p_src_task_version_id,p_src_project_id);
4837 	FETCH cur_dest_proj_element_id into l_Src_Proj_Element_id;
4838 	CLOSE cur_dest_proj_element_id;
4839 	END IF;
4840 */
4841 	l_orig_task_pk_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY(EGO_COL_NAME_VALUE_PAIR_OBJ('PROJ_ELEMENT_ID', cur_obj_rel_rec.proj_element_id));
4842 
4843 			   EGO_USER_ATTRS_DATA_PUB.Copy_User_Attrs_Data (
4844 								 p_api_version                      => 1.0
4845 										,p_application_id                   => 275
4846 										 ,p_object_name                      => 'PA_PROJECTS'
4847 										  ,p_old_pk_col_value_pairs           => l_orig_proj_pk_value_pairs
4848 										 ,p_old_dtlevel_col_value_pairs      => l_orig_task_pk_value_pairs
4849 										 ,p_new_pk_col_value_pairs           => l_new_proj_pk_value_pairs
4850 										,p_new_dtlevel_col_value_pairs      => l_new_task_pk_value_pairs
4851 										 ,p_commit                           => FND_API.G_TRUE
4852 										 ,x_return_status                    => x_return_status
4853 										 ,x_errorcode                        => l_errorcode
4854 									   ,x_msg_count                        => x_msg_count
4855 										,x_msg_data                         => l_msg_data );
4856 
4857 					IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4858                      x_msg_count := FND_MSG_PUB.count_msg;
4859                      IF x_msg_count = 1 then
4860                          pa_interface_utils_pub.get_messages
4861                          (p_encoded        => FND_API.G_TRUE,
4862                           p_msg_index      => 1,
4863                           p_msg_count      => x_msg_count,
4864                           p_msg_data       => l_msg_data,
4865                           p_data           => l_data,
4866                           p_msg_index_out  => l_msg_index_out);
4867                           x_msg_data := l_data;
4868                      END IF;
4869                      raise FND_API.G_EXC_ERROR;
4870                   END IF;
4871 END IF;
4872 /* End for 14209636 */
4873 
4874 
4875         PA_TASK_PUB1.Create_Task_Version(
4876                   p_api_version       => p_api_version
4877                  ,p_init_msg_list         => p_init_msg_list
4878                  ,p_commit              => p_commit
4879                  ,p_validate_only         => p_validate_only
4880                  ,p_validation_level    => p_validation_level
4881                  ,p_calling_module        => p_calling_module
4882                  ,p_debug_mode        => p_debug_mode
4883                  ,p_max_msg_count         => p_max_msg_count
4884                  ,p_ref_task_version_id => l_ref_task_version_id
4885                  ,p_peer_or_sub       => l_peer_or_sub
4886                  ,p_task_id             => l_task_id
4887                  ,p_attribute_category  => cur_obj_rel_rec.attribute_category
4888                  ,p_attribute1        => cur_obj_rel_rec.attribute1
4889                  ,p_attribute2        => cur_obj_rel_rec.attribute2
4890                  ,p_attribute3        => cur_obj_rel_rec.attribute3
4891                  ,p_attribute4        => cur_obj_rel_rec.attribute4
4892                  ,p_attribute5        => cur_obj_rel_rec.attribute5
4893                  ,p_attribute6        => cur_obj_rel_rec.attribute6
4894                  ,p_attribute7        => cur_obj_rel_rec.attribute7
4895                  ,p_attribute8        => cur_obj_rel_rec.attribute8
4896                  ,p_attribute9        => cur_obj_rel_rec.attribute9
4897                  ,p_attribute10       => cur_obj_rel_rec.attribute10
4898                  ,p_attribute11       => cur_obj_rel_rec.attribute11
4899                  ,p_attribute12       => cur_obj_rel_rec.attribute12
4900                  ,p_attribute13       => cur_obj_rel_rec.attribute13
4901                  ,p_attribute14       => cur_obj_rel_rec.attribute14
4902                  ,p_attribute15       => cur_obj_rel_rec.attribute15
4903                  ,p_WEIGHTING_PERCENTAGE => l_weighting
4904                  ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
4905                  ,p_financial_task_flag        => l_fin_task_flag      --bug 3301192
4906                  ,x_task_version_id       => l_task_version_id
4907                  ,x_return_status         => l_return_status
4908                  ,x_msg_count               => l_msg_count
4909                  ,x_msg_data                => l_msg_data
4910                 );
4911 
4912                   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4913                      x_msg_count := FND_MSG_PUB.count_msg;
4914                      IF x_msg_count = 1 then
4915                          pa_interface_utils_pub.get_messages
4916                          (p_encoded        => FND_API.G_TRUE,
4917                           p_msg_index      => 1,
4918                           p_msg_count      => l_msg_count,
4919                           p_msg_data       => l_msg_data,
4920                           p_data           => l_data,
4921                           p_msg_index_out  => l_msg_index_out);
4922                           x_msg_data := l_data;
4923                      END IF;
4924                      raise FND_API.G_EXC_ERROR;
4925                   END IF;
4926 
4927 /* bug#16083858 Adding logic to check if cbs is enabled
4928  	                 * and whether cost codes should be copied.
4929  	                 */
4930  	                 IF ((l_src_prj_cbs_enabled = 'Y')
4931  	                         AND (l_dest_prj_cbs_enabled = 'Y')
4932  	                         AND (p_cp_cost_code_flag = 'Y' or l_cp_tk_assignments_flag = 'Y')
4933  	                         AND (l_same_cbs_flag = 'Y'))THEN
4934 
4935 
4936  	                         PA_ALTERNATE_TASK_PVT.Copy_Cost_Codes_From_Task
4937  	                         (p_Source_Task_Id     => cur_obj_rel_rec.proj_element_id,
4938  	              p_Target_Task_Id     => l_task_id,
4939  	              X_Return_Status      => l_return_status,
4940  	              X_Msg_Data           => l_msg_data,
4941  	              X_Msg_Count          => l_msg_count);
4942 
4943 
4944 
4945  	                          IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4946  	                      x_msg_count := FND_MSG_PUB.count_msg;
4947  	                      IF x_msg_count = 1 then
4948  	                          pa_interface_utils_pub.get_messages
4949  	                          (p_encoded        => FND_API.G_TRUE,
4950  	                           p_msg_index      => 1,
4951  	                           p_msg_count      => l_msg_count,
4952  	                           p_msg_data       => l_msg_data,
4953  	                           p_data           => l_data,
4954  	                           p_msg_index_out  => l_msg_index_out);
4955  	                           x_msg_data := l_data;
4956  	                      END IF;
4957  	                      raise FND_API.G_EXC_ERROR;
4958  	                   END IF;
4959 
4960  	                 END IF;
4961 
4962         --------------------------------------------- FP_M changes: Begin
4963     -- Refer to tracking bug 3305199
4964         -- Populate the source and destination task version ID in
4965         -- PL/SQL tables
4966 
4967         Rec_Count := Rec_Count + 1;
4968         l_old_task_versions_tab.extend(1);
4969         l_new_task_versions_tab.extend(1);
4970         l_Old_Task_Versions_Tab(Rec_Count) := cur_obj_rel_rec.Task_Version_ID;
4971     l_New_Task_Versions_Tab(Rec_Count) := l_task_version_id;
4972 
4973         --bug 3301192 fin plan
4974         l_old_task_ver_ids.extend(1); /* Venky */
4975         l_new_task_ver_ids.extend(1); /* Venky */
4976         l_old_task_ids.extend(1); /* Venky */
4977         l_new_task_ids.extend(1); /* Venky */
4978         l_old_task_ver_ids(Rec_Count) := cur_obj_rel_rec.Task_Version_ID;
4979         l_old_task_ids(Rec_Count)     := cur_obj_rel_rec.proj_element_id;
4980         l_new_task_ver_ids(Rec_Count) := l_task_version_id;
4981         l_new_task_ids(Rec_Count)     := l_task_id;
4982         --bug 3301192 fin plan
4983 
4984         --------------------------------------------- FP_M changes: End
4985 
4986         --set the reference id.
4987         --l_ref_task_version_id := cur_obj_rel_rec.task_version_id;
4988         l_ref_task_version_id := l_task_version_id;
4989         l_old_wbs_level :=  l_current_tk_wbs_level;
4990 
4991         --If structure type is workplan.
4992         OPEN cur_struc_type( l_structure_id );
4993         FETCH cur_struc_type INTO l_dummy_char;
4994         IF cur_struc_type%FOUND
4995         THEN
4996 
4997            --dbms_output.put_line( 'Before PA_TASK_PUB1.Create_Scheduele_version' );
4998 
4999           /*4201927 : This Copy API not called in Move Task Version Context.
5000             Hence Commenting
5001           IF p_called_from_api <> 'MOVE_TASK_VERSION'
5002           THEN
5003           */
5004 --Hsiu added for date rollup; workplan only
5005 --bug 3991067
5006             l_task_cnt := l_task_cnt + 1;
5007             l_tasks_ver_ids(l_task_cnt) := l_task_version_id;
5008 --            l_tasks_ver_ids.extend;
5009 --            l_tasks_ver_ids(l_tasks_ver_ids.count) := l_task_version_id;
5010 --end bug 3991067
5011 --hsiu added for task status rollup
5012             l_rollup_task_id := l_task_version_id;
5013 --note: as long as one of the id of the new task is selected, the rollup will work.
5014             -- xxlu
5015             --bug 3074706
5016             --added src_project_id
5017 --            OPEN cur_proj_elem_ver_sch(p_src_structure_version_id, l_src_project_id);  --Bug No 3609001
5018 --            OPEN cur_proj_elem_ver_sch(p_src_task_version_id, l_src_project_id);         --Bug No 3609001
5019             OPEN cur_proj_elem_ver_sch(cur_obj_rel_rec.task_version_id, l_src_project_id);         --Bug No 3675385
5020             FETCH cur_proj_elem_ver_sch INTO v_cur_sch;
5021             CLOSE cur_proj_elem_ver_sch;
5022 
5023             PA_TASK_PVT1.Create_Schedule_Version(
5024                       p_api_version               => p_api_version
5025                      ,p_init_msg_list           => p_init_msg_list
5026                      ,p_commit                => p_commit
5027                      ,p_validate_only           => p_validate_only
5028                      ,p_validation_level            => p_validation_level
5029                      ,p_calling_module          => p_calling_module
5030                      ,p_debug_mode                => p_debug_mode
5031                      ,p_max_msg_count           => p_max_msg_count
5032                      ,p_element_version_id    => l_task_version_id
5033                      ,p_scheduled_start_date  => v_cur_sch.SCHEDULED_START_DATE
5034                      ,p_scheduled_end_date    => v_cur_sch.scheduled_finish_date
5035                      ,p_attribute_category            => v_cur_sch.attribute_category
5036                      ,p_attribute1                    => v_cur_sch.attribute1
5037                      ,p_attribute2                    => v_cur_sch.attribute2
5038                      ,p_attribute3                    => v_cur_sch.attribute3
5039                      ,p_attribute4                    => v_cur_sch.attribute4
5040                      ,p_attribute5                    => v_cur_sch.attribute5
5041                      ,p_attribute6                    => v_cur_sch.attribute6
5042                      ,p_attribute7                    => v_cur_sch.attribute7
5043                      ,p_attribute8                    => v_cur_sch.attribute8
5044                      ,p_attribute9                    => v_cur_sch.attribute9
5045                      ,p_attribute10                   => v_cur_sch.attribute10
5046                      ,p_attribute11                   => v_cur_sch.attribute11
5047                      ,p_attribute12                   => v_cur_sch.attribute12
5048                      ,p_attribute13                   => v_cur_sch.attribute13
5049                      ,p_attribute14                   => v_cur_sch.attribute14
5050                      ,p_attribute15                   => v_cur_sch.attribute15
5051                      ,p_def_sch_tool_tsk_type_code        => v_cur_sch.DEF_SCH_TOOL_TSK_TYPE_CODE
5052                      ,p_constraint_type_code              => v_cur_sch.CONSTRAINT_TYPE_CODE
5053                      ,p_constraint_date                   => v_cur_sch.CONSTRAINT_DATE
5054                      ,p_free_slack                        => v_cur_sch.FREE_SLACK
5055                      ,p_total_slack                       => v_cur_sch.TOTAL_SLACK
5056                      ,p_effort_driven_flag                => v_cur_sch.EFFORT_DRIVEN_FLAG
5057                      ,p_level_assignments_flag            => v_cur_sch.LEVEL_ASSIGNMENTS_FLAG
5058                      ,p_ext_act_duration                  => v_cur_sch.EXT_ACT_DURATION
5059                      ,p_ext_remain_duration               => v_cur_sch.EXT_REMAIN_DURATION
5060                      ,p_ext_sch_duration                  => v_cur_sch.EXT_SCH_DURATION
5061                      ,x_pev_schedule_id         => l_pev_schedule_id
5062                      ,x_return_status           => l_return_status
5063                      ,x_msg_count                 => l_msg_count
5064                      ,x_msg_data                  => l_msg_data
5065                  );
5066               -- end xxlu changes
5067           /*END IF; 4201927 : This Copy API not called in Move Task Version Context. */
5068 
5069                   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5070                      x_msg_count := FND_MSG_PUB.count_msg;
5071                      IF x_msg_count = 1 then
5072                          pa_interface_utils_pub.get_messages
5073                          (p_encoded        => FND_API.G_TRUE,
5074                           p_msg_index      => 1,
5075                           p_msg_count      => l_msg_count,
5076                           p_msg_data       => l_msg_data,
5077                           p_data           => l_data,
5078                           p_msg_index_out  => l_msg_index_out);
5079                           x_msg_data := l_data;
5080                      END IF;
5081                      raise FND_API.G_EXC_ERROR;
5082                   END IF;
5083         END IF;
5084         CLOSE cur_struc_type;
5085 
5086     END LOOP;
5087 
5088 
5089     -- Added for FP_M changes 3305199 : Bhumesh
5090 
5091     If P_cp_Dependency_Flag = 'Y' then
5092       PA_Relationship_Pvt.Copy_Intra_Dependency (
5093     P_Source_Ver_Tbl  => l_Old_Task_Versions_Tab,
5094     P_Destin_Ver_Tbl  => l_New_Task_Versions_Tab,
5095     X_Return_Status   => X_Return_Status,
5096     X_Msg_Count       => X_Msg_Count,
5097     X_Msg_Data        => X_Msg_Data
5098       );
5099 
5100       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5101          RAISE FND_API.G_EXC_ERROR;
5102       END IF;
5103 
5104       PA_RELATIONSHIP_PVT.Copy_Inter_Project_Dependency (
5105     P_Source_Ver_Tbl     => l_Old_Task_Versions_Tab,
5106     P_Destin_Ver_Tbl     => l_New_Task_Versions_Tab,
5107     X_Return_Status      => X_Return_Status,
5108     X_Msg_Count          => X_Msg_Count,
5109     X_Msg_Data           => X_Msg_Data
5110       );
5111       IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5112          RAISE FND_API.G_EXC_ERROR;
5113       END IF;
5114 
5115     End If;
5116     -- End of FP_M changes
5117 
5118     /* Bug2741989 -- Following message is populated in stack */
5119     IF (NOT l_src_tasks_found  AND p_copy_option = 'PA_ENTIRE_VERSION')THEN
5120            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5121                                 p_msg_name       => 'PA_CANT_COPY_EMPTY_STRUCT_VER' );
5122            x_msg_data := 'PA_CANT_COPY_EMPTY_STRUCT_VER';
5123            x_return_status := FND_API.G_RET_STS_ERROR;
5124            RAISE  FND_API.G_EXC_ERROR;
5125     END IF;
5126 
5127 /* Bug 2623999 coomnted out the code below. It is redundant and causing issues */
5128 /*
5129   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
5130     FROM pa_proj_element_versions
5131    WHERE element_version_id =  p_dest_structure_version_id
5132      AND object_type = 'PA_STRUCTURES';
5133 
5134   --Do financial task check
5135   --If financial
5136   OPEN cur_struc_type2( l_structure_id );
5137   FETCH cur_struc_type2 INTO l_dummy_char;
5138   IF cur_struc_type2%FOUND
5139   THEN
5140       --If structure has any published versions.
5141       l_published_version := 'N';
5142       OPEN cur_pub_versions( l_structure_id, l_project_id );
5143       FETCH cur_pub_versions INTO l_published_version;
5144       CLOSE cur_pub_versions;
5145 
5146 --hsiu
5147 --changes for versioning
5148       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
5149                                                      l_project_id);
5150       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
5151                                                   l_project_id);
5152 
5153       IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y') THEN
5154 --      IF NVL( l_published_version, 'N' ) = 'N'
5155 --      THEN
5156 --end changes
5157 
5158           --get the reference task and project ids
5159           SELECT proj_element_id, project_id
5160             INTO l_ref_task_id, l_ref_project_id
5161             FROM pa_proj_element_versions
5162            WHERE element_version_id = p_dest_task_version_id;
5163 
5164           --get the task and project ids
5165           SELECT proj_element_id, project_id
5166             INTO l_task_id, l_project_id
5167             FROM pa_proj_element_versions
5168            WHERE element_version_id = p_src_task_version_id;
5169 
5170           IF p_copy_option = 'PA_TASK_ONLY'
5171           THEN
5172              l_copy_node_flag := 'S';  ---copy selected task only
5173           ELSIF p_copy_option = 'PA_TASK_SUBTASK'
5174           THEN
5175              l_copy_node_flag := 'T';  ---copy selected task and sub tasks
5176           ELSIF p_copy_option = 'PA_ENTIRE_VERSION'
5177           THEN
5178              l_copy_node_flag := 'P';  ---copy entire project
5179           END IF;
5180 
5181           PA_TASKS_MAINT_PUB.Copy_Task(
5182                          p_reference_project_id              => l_ref_project_id
5183                         ,p_reference_task_id                 => l_ref_task_id
5184                         ,p_project_id                        => l_project_id
5185                         ,p_task_id                           => l_task_id
5186                         ,p_project_name => NULL
5187                         ,p_task_name => NULL
5188                         ,p_peer_or_sub                       => p_peer_or_sub
5189                         ,p_copy_node_flag                    => l_copy_node_flag
5190                         ,p_task_prefix                       => p_prefix
5191                         ,p_wbs_record_version_number         => 1
5192                         ,x_return_status                     => l_return_status
5193                         ,x_msg_count                         => l_msg_count
5194                         ,x_msg_data                          => l_msg_data );
5195 
5196           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5197               x_msg_count := FND_MSG_PUB.count_msg;
5198              IF x_msg_count = 1 then
5199                 pa_interface_utils_pub.get_messages
5200                 (p_encoded        => FND_API.G_TRUE,
5201                  p_msg_index      => 1,
5202                  p_msg_count      => l_msg_count,
5203                  p_msg_data       => l_msg_data,
5204                  p_data           => l_data,
5205                  p_msg_index_out  => l_msg_index_out);
5206                  x_msg_data := l_data;
5207              END IF;
5208              raise FND_API.G_EXC_ERROR;
5209           END IF;
5210       END IF;
5211   END IF;
5212   CLOSE cur_struc_type2;
5213 */
5214 
5215   /* 4201927: This value is already derived as the variable l_wp_type */
5216   /*IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_dest_structure_version_id, 'WORKPLAN') = 'Y' then
5217    */
5218     IF l_wp_type = 'Y' then
5219     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup_Unlimited(
5220                        p_commit => FND_API.G_FALSE,
5221                        p_element_versions => l_tasks_ver_ids,
5222                        x_return_status => l_return_status,
5223                        x_msg_count => l_msg_count,
5224                        x_msg_data => l_msg_data);
5225 
5226      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5227        x_msg_count := FND_MSG_PUB.count_msg;
5228        if x_msg_count = 1 then
5229          pa_interface_utils_pub.get_messages
5230          (p_encoded        => FND_API.G_TRUE,
5231           p_msg_index      => 1,
5232           p_msg_count      => l_msg_count,
5233           p_msg_data       => l_msg_data,
5234           p_data           => l_data,
5235           p_msg_index_out  => l_msg_index_out);
5236           x_msg_data := l_data;
5237        end if;
5238        raise FND_API.G_EXC_ERROR;
5239      end if;
5240 
5241 --hsiu added for task status
5242 --if versioning is off, rollup.
5243 
5244       /* 4201927 : Replaced Call to Version ENabled with l_ver_enabled */
5245      /*IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_dest_project_id)) AND*/
5246        IF ('N' = l_ver_enabled) AND
5247         (l_rollup_task_id IS NOT NULL) THEN
5248        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
5249                   p_structure_version_id => p_dest_structure_version_id
5250                  ,p_element_version_id => l_rollup_task_id
5251                  ,x_return_status => l_return_status
5252                  ,x_msg_count => l_msg_count
5253                  ,x_msg_data => l_msg_data
5254        );
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 
5271      END IF;
5272 
5273 --end task status changes
5274 
5275   END IF;
5276 
5277 
5278 --bug 3301192  fin plan changes
5279 declare
5280 /* Bug #: 3305199 SMukka                                                         */
5281 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
5282 /* l_task_ver_ids2              PA_PLSQL_DATATYPES.IdTabTyp;                     */
5283 l_task_ver_ids2              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
5284 /* 4201927 : This value is already derived l_wp_type                    VARCHAR2(1); */
5285 /* 4201927 : This value is already derived l_copy_external_flag         VARCHAR2(1); */
5286 begin
5287 
5288   /* 4201927 : This value is already derived
5289   l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_dest_structure_version_id, 'WORKPLAN');
5290    4201927 */
5291     --3305199: deliverable changes
5292     IF (p_cp_deliverable_asso_flag = 'Y' AND l_wp_type = 'Y') THEN
5293       PA_DELIVERABLE_PUB.COPY_ASSOCIATIONS
5294       (p_validate_only           => FND_API.G_FALSE
5295       ,p_src_task_versions_tab   => l_Old_Task_Versions_Tab
5296       ,p_dest_task_versions_tab  => l_New_Task_Versions_Tab
5297       ,x_return_status           => l_return_status
5298       ,x_msg_count               => l_msg_count
5299       ,x_msg_data                => l_msg_data);
5300 
5301       if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5302         x_msg_count := FND_MSG_PUB.count_msg;
5303         if x_msg_count = 1 then
5304           pa_interface_utils_pub.get_messages
5305                (p_encoded        => FND_API.G_TRUE,
5306                 p_msg_index      => 1,
5307                 p_msg_count      => l_msg_count,
5308                 p_msg_data       => l_msg_data,
5309                 p_data           => l_data,
5310                 p_msg_index_out  => l_msg_index_out);
5311           x_msg_data := l_data;
5312         end if;
5313         raise FND_API.G_EXC_ERROR;
5314       end if;
5315     END IF;
5316     --3305199: end deliverable changes
5317 
5318   /*=====================P1 BUG 4210796 ===================
5319    * COPY PLANNING TXNS MOVED BEFORE DELETE PLANNING TXNS CALL
5320    * =======================================================*/
5321 
5322    -- START OF BLOCK MOVED
5323    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
5324   THEN
5325 
5326     /* 4201927 : l_copy_external_flag is already derived as in <<C>>
5327     IF p_src_project_id = l_dest_project_id
5328     THEN
5329         l_copy_external_flag := 'N';
5330     ELSE
5331         l_copy_external_flag := 'Y';
5332     ENd IF;
5333     */
5334 
5335     /*Smukka Bug No. 3474141 Date 03/01/2004                                                  */
5336     /*moved pa_fp_planning_transaction_pub.copy_planning_transactions into plsql block        */
5337     BEGIN
5338         pa_fp_planning_transaction_pub.copy_planning_transactions(
5339           p_context                    => 'WORKPLAN'
5340          ,p_copy_external_flag         =>  l_copy_external_flag
5341          ,p_src_project_id             =>  p_src_project_id
5342          ,p_target_project_id          =>  l_dest_project_id
5343        --,p_src_element_id_tbl         =>  l_old_task_ids
5344          ,p_src_version_id_tbl        =>   l_old_task_ver_ids
5345        --,p_targ_element_id_tbl      =>    l_new_task_ids
5346          ,p_targ_version_id_tbl     =>     l_new_task_ver_ids
5347          ,p_copy_people_flag            => l_cp_people_flag             --bug#16083858
5348          ,p_copy_equip_flag             => l_cp_equipment_flag          --bug#16083858
5349          ,p_copy_mat_item_flag          => l_cp_material_items_flag     --bug#16083858
5350          ,p_copy_fin_elem_flag          => l_cp_financial_elem_flag     --bug#16083858
5351  --      ,p_maintain_reporting_lines    => 'Y'
5352          ,x_return_status               => l_return_status
5353          ,x_msg_count                   => l_msg_count
5354          ,x_msg_data                    => l_msg_data
5355         );
5356     EXCEPTION
5357         WHEN OTHERS THEN
5358              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5359                                      p_procedure_name => 'COPY_TASK',
5360                                      p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.copy_planning_transactions:'||SQLERRM,1,240));
5361         RAISE FND_API.G_EXC_ERROR;
5362     END;
5363 
5364 
5365            if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5366               x_msg_count := FND_MSG_PUB.count_msg;
5367              if x_msg_count = 1 then
5368                 pa_interface_utils_pub.get_messages
5369                (p_encoded        => FND_API.G_TRUE,
5370                 p_msg_index      => 1,
5371                 p_msg_count      => l_msg_count,
5372                 p_msg_data       => l_msg_data,
5373                 p_data           => l_data,
5374                 p_msg_index_out  => l_msg_index_out);
5375                 x_msg_data := l_data;
5376              end if;
5377              raise FND_API.G_EXC_ERROR;
5378             end if;
5379  END IF;
5380 
5381    -- END OF BLOCK MOVED FOR P1 BUG 4210796
5382 
5383   IF l_wp_type = 'Y' AND p_dest_structure_version_id <> p_dest_task_version_id
5384   THEN
5385        l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_dest_task_version_id );
5386 
5387        IF l_lowest_task_flag1 = 'Y' AND
5388           l_lowest_task_flag2 = 'N'  /* reference task is no more a lowest task therefore call delete planning api */
5389        THEN
5390            l_task_ver_ids2.extend(1); /* Venky */
5391            l_task_ver_ids2(1) := p_dest_task_version_id;
5392            /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
5393            /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
5394            DECLARE
5395              --p1 bug 3888432
5396              l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
5397              CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
5398                SELECT resource_assignment_id
5399                  FROM pa_resource_assignments
5400                 WHERE wbs_element_Version_id = c_task_ver_id
5401                   AND ta_display_flag = 'N';
5402              l_assign_id    NUMBER := NULL;
5403            BEGIN
5404              OPEN get_assignment_id(p_dest_task_version_id);
5405              FETCH get_assignment_id into l_assign_id;
5406              CLOSE get_assignment_id;
5407 
5408              IF (l_assign_id IS NOT NULL) THEN
5409                l_assign_ids.extend(1);
5410                l_assign_ids(1) := l_assign_id;
5411                pa_fp_planning_transaction_pub.delete_planning_transactions
5412                (
5413                  p_context                      => 'WORKPLAN'
5414                 ,p_task_or_res                  => 'ASSIGNMENT'
5415 --                ,p_element_version_id_tbl       => l_task_ver_ids2
5416 --              ,p_maintain_reporting_lines     => 'Y'
5417                 ,p_resource_assignment_tbl => l_assign_ids
5418                 ,x_return_status                => l_return_status
5419                 ,x_msg_count                    => l_msg_count
5420                 ,x_msg_data                     => l_msg_data
5421                );
5422              END IF;
5423            EXCEPTION
5424                WHEN OTHERS THEN
5425                     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5426                                             p_procedure_name => 'COPY_TASK',
5427                                             p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
5428                RAISE FND_API.G_EXC_ERROR;
5429            END;
5430 
5431            if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5432               x_msg_count := FND_MSG_PUB.count_msg;
5433              if x_msg_count = 1 then
5434                 pa_interface_utils_pub.get_messages
5435                (p_encoded        => FND_API.G_TRUE,
5436                 p_msg_index      => 1,
5437                 p_msg_count      => l_msg_count,
5438                 p_msg_data       => l_msg_data,
5439                 p_data           => l_data,
5440                 p_msg_index_out  => l_msg_index_out);
5441                 x_msg_data := l_data;
5442              end if;
5443              raise FND_API.G_EXC_ERROR;
5444             end if;
5445        END IF;
5446   END IF;
5447 
5448 /*==========================================================================================
5449   MOVED THIS BLOCK OF CODE FOR COPYING PLANNING TRANSACTIONS before DELETING PLANNING TXNS .
5450   THIS FIX IS NEEDED FOR P1 BUG 4210796 . REFER *** MAANSARI  02/28/05 12:59 pm ***
5451   FOR THE SOLUTION STRATEGY
5452 
5453   IF l_wp_type = 'Y'
5454   THEN
5455 
5456     /* 4201927 : l_copy_external_flag is already derived as in <<C>>
5457     IF p_src_project_id = l_dest_project_id
5458     THEN
5459         l_copy_external_flag := 'N';
5460     ELSE
5461         l_copy_external_flag := 'Y';
5462     ENd IF;
5463     */
5464 
5465     /*Smukka Bug No. 3474141 Date 03/01/2004                                                  */
5466     /*moved pa_fp_planning_transaction_pub.copy_planning_transactions into plsql block        */
5467     /* P1 4210796
5468     BEGIN
5469         pa_fp_planning_transaction_pub.copy_planning_transactions(
5470           p_context                    => 'WORKPLAN'
5471          ,p_copy_external_flag         =>  l_copy_external_flag
5472          ,p_src_project_id             =>  p_src_project_id
5473          ,p_target_project_id          =>  l_dest_project_id
5474        --,p_src_element_id_tbl         =>  l_old_task_ids
5475          ,p_src_version_id_tbl        =>   l_old_task_ver_ids
5476        --,p_targ_element_id_tbl      =>    l_new_task_ids
5477          ,p_targ_version_id_tbl     =>     l_new_task_ver_ids
5478          ,p_copy_people_flag            => p_cp_people_flag
5479          ,p_copy_equip_flag             => p_cp_equipment_flag
5480          ,p_copy_mat_item_flag          => p_cp_material_items_flag
5481          ,p_copy_fin_elem_flag          => p_cp_financial_elem_flag
5482  --      ,p_maintain_reporting_lines    => 'Y'
5483          ,x_return_status               => l_return_status
5484          ,x_msg_count                   => l_msg_count
5485          ,x_msg_data                    => l_msg_data
5486         );
5487     EXCEPTION
5488         WHEN OTHERS THEN
5489              fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5490                                      p_procedure_name => 'COPY_TASK',
5491                                      p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.copy_planning_transactions:'||SQLERRM,1,240));
5492         RAISE FND_API.G_EXC_ERROR;
5493     END;
5494 
5495 
5496            if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5497               x_msg_count := FND_MSG_PUB.count_msg;
5498              if x_msg_count = 1 then
5499                 pa_interface_utils_pub.get_messages
5500                (p_encoded        => FND_API.G_TRUE,
5501                 p_msg_index      => 1,
5502                 p_msg_count      => l_msg_count,
5503                 p_msg_data       => l_msg_data,
5504                 p_data           => l_data,
5505                 p_msg_index_out  => l_msg_index_out);
5506                 x_msg_data := l_data;
5507              end if;
5508              raise FND_API.G_EXC_ERROR;
5509             end if;
5510  END IF;
5511 
5512  END OF BLOCK MOVED FOR  P1 BUG 4210796
5513  ======================================================================*/
5514 end;
5515 --bug 3301192  fin plan changes
5516 
5517     --3035902: process update flag changes
5518     --set process flag
5519     --Bug No 3450684 SMukka Commented if condition
5520     --IF (l_wp_process_flag = 'Y') THEN
5521       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
5522       (
5523         p_calling_context       => 'SELF_SERVICE'
5524        ,p_project_id            => l_dest_project_id
5525        ,p_structure_version_id  => p_dest_structure_version_id
5526        ,p_update_wbs_flag       => 'Y'
5527        ,x_return_status         => l_return_status
5528        ,x_msg_count             => l_msg_count
5529        ,x_msg_data              => l_msg_data);
5530 
5531        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
5532          x_msg_count := FND_MSG_PUB.count_msg;
5533          if x_msg_count = 1 then
5534            pa_interface_utils_pub.get_messages
5535            (p_encoded        => FND_API.G_TRUE,
5536             p_msg_index      => 1,
5537             p_msg_count      => l_msg_count,
5538             p_msg_data       => l_msg_data,
5539             p_data           => l_data,
5540             p_msg_index_out  => l_msg_index_out);
5541             x_msg_data := l_data;
5542          end if;
5543          raise FND_API.G_EXC_ERROR;
5544        end if;
5545     --END IF;
5546     --3035902: process update flag changes
5547 
5548     --bug 4149392
5549     PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
5550     --end bug 4149392
5551 
5552     x_return_status := FND_API.G_RET_STS_SUCCESS;
5553 
5554     IF (p_commit = FND_API.G_TRUE) THEN
5555       COMMIT;
5556     END IF;
5557 
5558     IF (p_debug_mode = 'Y') THEN
5559       pa_debug.debug('PA_TASK_PUB1.COPY_TASK END');
5560     END IF;
5561 EXCEPTION
5562     when FND_API.G_EXC_ERROR then
5563       if p_commit = FND_API.G_TRUE then
5564          rollback to Copy_Task;
5565       end if;
5566       x_return_status := FND_API.G_RET_STS_ERROR;
5567     when FND_API.G_EXC_UNEXPECTED_ERROR then
5568       if p_commit = FND_API.G_TRUE then
5569          rollback to Copy_Task;
5570       end if;
5571       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5572       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5573                               p_procedure_name => 'COPY_TASK',
5574                               p_error_text     => SUBSTRB(SQLERRM,1,240));
5575     when OTHERS then
5576       if p_commit = FND_API.G_TRUE then
5577          rollback to Copy_Task;
5578       end if;
5579       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5580       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
5581                               p_procedure_name => 'COPY_TASK',
5582                               p_error_text     => SUBSTRB(SQLERRM,1,240));
5583       raise;
5584 END Copy_Task;
5585 
5586 -- API name                      : Move_Task
5587 -- Type                          : Public procedure
5588 -- Pre-reqs                      : None
5589 -- Return Value                  : N/A
5590 -- Prameters
5591 -- p_api_version          IN    NUMBER  N   Not Null    1.0
5592 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
5593 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
5594 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
5595 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
5596 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
5597 -- p_debug_mode       IN    VARCHAR2    N   Null    N
5598 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5599 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5600 -- p_task_version_id    IN  NUMBER  N   Not Null
5601 -- p_ref_task_version_id    IN  NUMBER  N   Not Null
5602 -- p_ref_project_id         IN  NUMBER  N Null
5603 -- p_peer_or_sub    IN  VARCHAR2    N   Not Null
5604 -- prefix   IN  VARCHAR2    N   Not Null
5605 -- x_return_status  OUT     VARCHAR2    N   Null
5606 -- x_msg_count        OUT   NUMBER  N   Null
5607 -- x_msg_data         OUT   VARCHAR2    N   Null
5608 --
5609 --  History
5610 --
5611 --  23-OCT-01   Andrew Lee             -Created
5612 --
5613 --
5614 
5615 PROCEDURE MOVE_TASK_VERSION (
5616  p_api_version           IN NUMBER   := 1.0,
5617  p_init_msg_list             IN VARCHAR2 := FND_API.G_TRUE,
5618  p_commit                  IN   VARCHAR2 := FND_API.G_FALSE,
5619  p_validate_only             IN VARCHAR2 := FND_API.G_TRUE,
5620  p_validation_level    IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL,
5621  p_calling_module            IN VARCHAR2 := 'SELF_SERVICE',
5622  p_debug_mode            IN VARCHAR2 := 'N',
5623  p_max_msg_count             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5624  p_structure_version_id    IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5625  p_task_version_id     IN   NUMBER,
5626  p_ref_task_version_id     IN   NUMBER,
5627 /*4269830 : Performance Enhancements :  Start*/
5628  p_ref_project_id          IN   NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5629  p_structure_id            IN   NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
5630  p_published_version       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5631  p_shared                  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5632  p_sharing_code            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5633  p_versioned		   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5634  p_wp_type		   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5635  p_fin_type		   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5636  p_weighting_basis_code    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5637  p_check_third_party_flag  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
5638 /*4269830 : Performance Enhancements : End */
5639  p_peer_or_sub           IN VARCHAR2,
5640  p_record_version_number   IN NUMBER,
5641  p_called_from_bulk_api   IN VARCHAR2 := 'N' ,
5642  x_return_status             OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
5643  x_msg_count             OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
5644  x_msg_data                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5645 ) IS
5646   l_api_name                 CONSTANT VARCHAR(30) := 'MOVE_TASK_VERSION';
5647   l_api_version              CONSTANT NUMBER      := 1.0;
5648 
5649   l_return_status            VARCHAR2(1);
5650   l_msg_count                NUMBER;
5651   l_msg_data                 VARCHAR2(250);
5652   l_data                     VARCHAR2(250);
5653   l_msg_index_out            NUMBER;
5654 
5655   l_ref_display_sequence     NUMBER;
5656   l_display_sequence         NUMBER;
5657   l_ref_parent_struct_ver_id NUMBER;
5658   l_parent_struct_ver_id     NUMBER;
5659 
5660   l_parent_id                NUMBER;
5661   l_parent_task_id           NUMBER;
5662   l_parent_object_type       PA_PROJ_ELEMENT_VERSIONS.object_type%TYPE;
5663 
5664   l_project_id                  NUMBER;
5665   l_ref_task_id                 NUMBER;
5666   l_task_id                     NUMBER;
5667   l_task_record_version_number  NUMBER;
5668   l_wbs_record_version_number   NUMBER;
5669 
5670   l_record_version_number       NUMBER;
5671   l_published_version  VARCHAR2(1);
5672   l_dummy_char        VARCHAR2(1);
5673   l_structure_id      NUMBER;
5674   l_structure_ver_id  NUMBER;
5675   --l_project_id        NUMBER;
5676   --l_ref_task_id       NUMBER;
5677   --l_task_id           NUMBER;
5678 
5679 --hsiu
5680 --added for advanced structure - versioning
5681     l_versioned    VARCHAR2(1) := 'N';
5682     l_shared       VARCHAR2(1) := 'N';
5683 
5684 --end changes
5685 
5686 --hyau
5687 --added for lifecycle version
5688     l_proj_element_id  NUMBER;
5689 -- end changes
5690 
5691     CURSOR cur_struc_type( c_structure_id NUMBER )
5692     IS
5693       SELECT 'Y'
5694         FROM pa_proj_structure_types ppst
5695             ,pa_structure_types pst
5696        WHERE ppst.proj_element_id = c_structure_id
5697          AND ppst.structure_type_id = pst.structure_type_id
5698          AND pst.structure_type_class_code IN( 'FINANCIAL' );
5699 
5700     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
5701       select 'Y'
5702         from pa_proj_elem_ver_structure
5703        where proj_element_id = c_structure_id
5704          AND project_id = c_project_id
5705          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
5706 
5707 --hsiu added, for dates rollup
5708    CURSOR get_peer_tasks
5709    IS
5710      select b.object_id_to1 object_id_to1
5711        from pa_object_relationships a,
5712             pa_object_relationships b
5713       where a.object_id_to1 = p_task_version_id
5714         and a.object_type_to = 'PA_TASKS'
5715         and a.relationship_type = 'S' -- Bug # 4622939.
5716         and a.object_id_from1 = b.object_id_from1
5717         and a.object_type_from = b.object_type_from
5718         and b.object_type_to = 'PA_TASKS'
5719         and b.relationship_type = 'S' -- Bug # 4622939.
5720         and b.object_id_to1 <> p_task_version_id;
5721    c_get_peer_tasks get_peer_tasks%ROWTYPE;
5722 
5723 --Hsiu added, for dates rollup
5724   /* Bug 5768425 Start*/
5725   --l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
5726   l_tasks_ver_ids        PA_STRUCT_TASK_ROLLUP_PUB.pa_element_version_id_tbl_typ;
5727   l_task_cnt NUMBER 			:= 0;
5728   /* Bug 5768425 End */
5729 
5730 --hsiu added for task status rollup
5731   l_old_peer_task_id  NUMBER;
5732 
5733 --hsiu added for task status
5734   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
5735     select object_id_from1
5736       from pa_object_relationships
5737      where object_id_to1 = c_elem_ver_id
5738        and object_type_to = 'PA_TASKS'
5739        and relationship_type = 'S';
5740   l_parent_ver_id NUMBER;
5741   l_error_msg_code VARCHAR2(30);
5742 
5743 -- hyau Bug 2852753
5744    l_delete_project_allowed      VARCHAR2(1);
5745    l_update_proj_num_allowed      VARCHAR2(1);
5746    l_update_proj_name_allowed    VARCHAR2(1);
5747    l_update_proj_desc_allowed    VARCHAR2(1);
5748    l_update_proj_dates_allowed    VARCHAR2(1);
5749    l_update_proj_status_allowed  VARCHAR2(1);
5750    l_update_proj_manager_allowed  VARCHAR2(1);
5751    l_update_proj_org_allowed      VARCHAR2(1);
5752    l_add_task_allowed            VARCHAR2(1);
5753    l_delete_task_allowed          VARCHAR2(1);
5754    l_update_task_num_allowed      VARCHAR2(1);
5755    l_update_task_name_allowed    VARCHAR2(1);
5756    l_update_task_dates_allowed    VARCHAR2(1);
5757    l_update_task_desc_allowed    VARCHAR2(1);
5758    l_update_parent_task_allowed  VARCHAR2(1);
5759    l_update_task_org_allowed      VARCHAR2(1);
5760 
5761    l_err_code         NUMBER        := 0;
5762    l_err_stack        VARCHAR2(200) := NULL;
5763    l_err_stage        VARCHAR2(200) := NULL;
5764 
5765    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
5766 
5767    CURSOR get_product_code ( c_project_id NUMBER ) IS
5768    SELECT pm_product_code
5769    FROM PA_PROJECTS_ALL
5770    WHERE project_id = c_project_id;
5771 
5772    l_cur_project_id      NUMBER;
5773    CURSOR cur_proj_id
5774    IS
5775      SELECT project_id
5776        FROM pa_proj_element_versions
5777       WHERE element_version_id = p_structure_version_id;
5778 
5779 -- Merged from 85
5780 -- end hyau Bug 2852753
5781 
5782  l_old_top_task_id    NUMBER;   --bug 2967204
5783 
5784 --Bug 2947492 ( move )
5785 
5786 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
5787 --l_parent_task_id             NUMBER;
5788 l_old_parent_task_id             NUMBER;
5789 l_top_task_id                NUMBER;
5790 
5791 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
5792     SELECT parent_task_id, top_task_id FROM pa_tasks
5793      WHERE project_id = c_project_id and task_id = c_task_id;
5794 
5795 --End Bug 2947492  ( move )
5796 -- Merged from 85
5797 
5798 --bug 3053281
5799   l_wp_type              VARCHAR2(1);
5800   l_weighting_basis_Code VARCHAR2(30);
5801   l_wp_process_flag      VARCHAR2(1);
5802 --end bug 3053281
5803 --3035902: process update flag changes
5804   cursor get_task_type_id(c_proj_element_id NUMBER) IS
5805       select type_id
5806         from pa_proj_elements
5807        where proj_element_id = c_proj_element_id;
5808   l_task_type_id      NUMBER;
5809 --3035902: end process update flag changes
5810 
5811 --bug 3911698
5812 --cursor to get all child
5813   cursor get_child_ver_id(c_task_ver_id NUMBER) IS
5814     select object_id_to1
5815       from pa_object_relationships
5816      where relationship_type = 'S'
5817        and object_type_to = 'PA_TASKS'
5818      start with object_id_from1 = c_task_ver_id
5819        and object_type_from = 'PA_TASKS'
5820      connect by prior object_id_to1 = object_id_from1
5821             and prior object_type_to = object_type_from
5822             and prior relationship_type = relationship_type
5823     UNION
5824     select element_version_id
5825       from pa_proj_element_versions
5826      where element_version_id = c_task_ver_id;
5827   l_child_ver_id NUMBER;
5828 --end bug 3911698
5829 
5830 
5831 --bug 3069306
5832   Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
5833     select object_id_to1
5834       from pa_object_relationships
5835      where relationshiP_type = 'S'
5836        and object_type_to = 'PA_TASKS'
5837              start with object_id_to1 = c_task_ver_id
5838                and object_type_to = 'PA_TASKS'
5839            connect by prior object_id_from1 = object_id_to1
5840                and prior object_type_from = object_type_to
5841                and prior relationship_type = relationship_type
5842  intersect
5843     select a.object_id_to1
5844       from pa_object_relationships a, pa_proj_element_versions b
5845      where a.relationshiP_type = 'S'
5846        and a.object_id_from1 = b.parent_structure_version_id
5847        and b.element_version_id = c_task_ver_id
5848        and a.object_type_from = 'PA_STRUCTURES';
5849   l_old_par_ver_id NUMBER;
5850   l_new_par_ver_id NUMBER;
5851 --end bug 3069306
5852 
5853 --bug 3301192 fin plan changes
5854   l_lowest_task_flag1         VARCHAR2(1);
5855   l_lowest_task_flag2         VARCHAR2(1);
5856   l_fin_task_flag             VARCHAR2(1);
5857 --bug 3301192
5858 --
5859   l_ref_parent_task_ver_id    NUMBER;   --Bug 3475920
5860 
5861   /*4269830*/
5862   l_sharing_code VARCHAR2(30);
5863   l_fin_type     VARCHAR2(1);
5864   l_check_third_party_flag VARCHAR2(1);
5865   /*4269830*/
5866 
5867 BEGIN
5868 
5869 
5870   pa_debug.init_err_stack ('PA_TASK_PUB1.MOVE_TASK_VERSION');
5871 
5872   IF (p_debug_mode = 'Y') THEN
5873     pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSION begin');
5874   END IF;
5875 
5876   IF (p_commit = FND_API.G_TRUE) THEN
5877     savepoint move_task_version;
5878   END IF;
5879 
5880   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
5881     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5882   END IF;
5883 
5884   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
5885     FND_MSG_PUB.initialize;
5886   END IF;
5887 
5888   --bug 4075697
5889   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
5890   --bug 4075697
5891 
5892   IF p_called_from_bulk_api = 'Y'/*4269830*/
5893   THEN
5894       l_cur_project_id := p_ref_project_id;
5895       l_project_id := p_ref_project_id;
5896       l_structure_id   := p_structure_id  ;
5897       l_structure_ver_id := p_structure_version_id ;
5898       l_published_version := p_published_version;
5899       l_shared		  := p_shared;
5900       l_sharing_code	  := p_sharing_code;
5901       l_versioned	  := p_versioned;
5902       l_wp_type		  := p_wp_type;
5903       l_fin_type	  := p_fin_type;
5904       l_weighting_basis_code := p_weighting_basis_code;
5905       l_check_third_party_flag := p_check_third_party_flag;
5906   ELSE
5907 
5908   /* 4269830 <Existing Block> <<--A-->> */
5909   OPEN cur_proj_id;
5910   FETCH cur_proj_id INTO l_cur_project_id;
5911   CLOSE cur_proj_id;
5912 
5913   l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_cur_project_id);
5914   l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
5915   l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id,'WORKPLAN');
5916   l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(l_cur_project_id);
5917   l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_cur_project_id);
5918   l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(l_cur_project_id);
5919   l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_cur_project_id);
5920 
5921   END IF; /*4269830*/
5922 
5923   --bug 3911698
5924   --check if reference task is child of moving task
5925   OPEN get_child_ver_id(p_task_version_id);
5926   LOOP
5927     FETCH get_child_ver_id into l_child_ver_id;
5928     EXIT when get_child_ver_id%NOTFOUND;
5929     IF l_child_ver_id = p_ref_task_version_id THEN
5930       CLOSE get_child_ver_id;
5931       --add error PA_TSK_MV_BELOW_SELF
5932       PA_UTILS.ADD_MESSAGE('PA', 'PA_TSK_MV_BELOW_SELF');
5933       raise FND_API.G_EXC_ERROR;
5934     END IF;
5935   END LOOP;
5936   CLOSE get_child_ver_id;
5937   --end bug 3911698
5938 
5939   -- Added for FP_M changes. Bug 3305199 : xxx
5940   If l_sharing_code = 'SHARE_PARTIAL' /*4269830 : Replaced function usage with l_sharing_code*/
5941   Then
5942 
5943     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
5944         p_task_version_id       => p_task_version_id
5945       , p_ref_task_version_id   => p_ref_task_version_id
5946       , x_return_status         => x_return_status
5947       , x_msg_count             => x_msg_count
5948       , x_msg_data              => x_msg_data
5949       , x_error_msg_code        => l_error_msg_code);
5950     --Bug No 3491045
5951     --Replaced the return status value to 'S' from 'Y'
5952     IF (x_return_status <> 'S') THEN
5953        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5954                 p_msg_name       => l_error_msg_code);
5955       raise FND_API.G_EXC_ERROR;
5956     End If;
5957   End If;
5958   -- End of FP_M changes
5959 
5960   --3035902: process update flag changes
5961   l_wp_process_flag := 'N';
5962   --3035902: end process update flag changes
5963 -- hyau Bug 2852753
5964 
5965     IF  p_called_from_bulk_api = 'N' THEN
5966       IF p_calling_module = 'SELF_SERVICE' THEN
5967 
5968         OPEN get_product_code(l_cur_project_id);
5969         FETCH get_product_code INTO l_pm_product_code;
5970         CLOSE get_product_code;
5971 
5972         If l_pm_product_code IS NOT NULL THEN
5973           pa_pm_controls.Get_Project_actions_allowed
5974                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
5975                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
5976                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
5977                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
5978                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
5979                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
5980                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
5981                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
5982                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
5983                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
5984                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
5985                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
5986                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
5987                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
5988                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
5989                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
5990                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
5991                  P_ERROR_CODE                 => l_err_code,
5992          P_ERROR_STACK                    => l_err_stack,
5993          P_ERROR_STAGE                => l_err_stage );
5994 
5995           IF l_err_code <> 0 THEN
5996             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5997                                  p_msg_name       => l_err_stage);
5998           END IF;
5999       IF l_update_parent_task_allowed = 'N' THEN
6000               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6001                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
6002               raise FND_API.G_EXC_ERROR;
6003           END IF;
6004         END IF;
6005       END IF;
6006   END IF ; -- Called From Bulk API is 'N'
6007 -- end hyau Bug 2852753
6008 
6009 
6010   -- hyau
6011   -- Lifecycle Phase validation Changes. Check if task has phase associated with it
6012   IF (p_task_version_id IS NOT NULL) AND
6013        (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6014 
6015   SELECT proj_element_id
6016   INTO l_proj_element_id
6017   FROM PA_PROJ_ELEMENT_VERSIONS
6018   WHERE element_version_id = p_task_version_id;
6019 
6020     IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
6021               l_proj_element_id)) THEN
6022       --Indenting a task with phase. Error
6023       PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_MOVE_PHASE_TASK');
6024     END IF;
6025 
6026     l_msg_count := FND_MSG_PUB.count_msg;
6027     if l_msg_count > 0 then
6028       x_msg_count := l_msg_count;
6029       if x_msg_count = 1 then
6030         pa_interface_utils_pub.get_messages
6031         (p_encoded        => FND_API.G_TRUE,
6032          p_msg_index      => 1,
6033          p_msg_count      => l_msg_count,
6034          p_msg_data       => l_msg_data,
6035          p_data           => l_data,
6036          p_msg_index_out  => l_msg_index_out);
6037         x_msg_data := l_data;
6038       end if;
6039       raise FND_API.G_EXC_ERROR;
6040     end if;
6041   END IF;
6042   -- end hyau. Lifecycle Phase validation Changes.
6043 
6044   -- get the display sequence of the reference task
6045   SELECT display_sequence, parent_structure_version_id
6046   INTO   l_ref_display_sequence, l_ref_parent_struct_ver_id
6047   FROM   PA_PROJ_ELEMENT_VERSIONS
6048   WHERE  element_version_id = p_ref_task_version_id;
6049 
6050   -- get the display sequence of the task being moved
6051   SELECT display_sequence, parent_structure_version_id
6052   INTO   l_display_sequence, l_parent_struct_ver_id
6053   FROM   PA_PROJ_ELEMENT_VERSIONS
6054   WHERE  element_version_id = p_task_version_id;
6055 
6056   -- get the parent of the task being moved
6057   SELECT object_id_from1, object_type_from
6058   INTO   l_parent_id, l_parent_object_type
6059   FROM   PA_OBJECT_RELATIONSHIPS
6060   WHERE  object_type_to = 'PA_TASKS'
6061   AND    object_id_to1 = p_task_version_id
6062   AND    relationship_type = 'S'
6063   AND    object_type_from in ('PA_STRUCTURES', 'PA_TASKS');
6064 
6065 --hsiu added, for dates rollup
6066 --need to get peer task before it has been moved.
6067   OPEN get_peer_tasks;
6068   LOOP
6069     FETCH get_peer_tasks INTO c_get_peer_tasks;
6070     EXIT WHEN get_peer_tasks%NOTFOUND;
6071     /* Bug 5768425 Start */
6072     --l_tasks_ver_ids.extend;
6073     --l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
6074     l_task_cnt := l_task_cnt + 1;
6075     l_tasks_ver_ids(l_task_cnt) := c_get_peer_tasks.object_id_to1;
6076     /* Bug 5768425 End */
6077     l_old_peer_task_id := c_get_peer_tasks.object_id_to1;
6078   END LOOP;
6079   CLOSE get_peer_tasks;
6080 
6081   if l_parent_object_type = 'PA_STRUCTURES' then
6082     l_parent_task_id := NULL;
6083   else
6084     l_parent_task_id := l_parent_id;
6085   end if;
6086 
6087   --hsiu added for task status
6088     --check if ok to move this task
6089     PA_PROJ_ELEMENTS_UTILS.check_move_task_ok(
6090       p_task_ver_id => p_task_version_id
6091      ,x_return_status => l_return_status
6092      ,x_error_message_code => l_error_msg_code
6093     );
6094     IF (l_return_status <> 'Y') THEN
6095       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6096                            p_msg_name => l_error_msg_code);
6097       raise FND_API.G_EXC_ERROR;
6098     END IF;
6099 
6100     --check if ok to create subtask
6101     IF (p_peer_or_sub = 'PEER') THEN
6102       OPEN get_parent_version_id(p_ref_task_version_id);
6103       FETCH get_parent_version_id into l_parent_ver_id;
6104       CLOSE get_parent_version_id;
6105 
6106       --bug 3069306
6107       --if financial task, check if changing parent ok
6108       IF (l_fin_type = 'Y') THEN /*4269830 : replaced Function usage with l_fin_type*/
6109         OPEN get_top_task_ver_id(l_parent_ver_id);
6110         FETCH get_top_task_ver_id into l_new_par_ver_id;
6111         CLOSE get_top_task_ver_id;
6112 
6113         IF l_new_par_ver_id IS NULL THEN   /*Bug 11776896*/
6114           OPEN get_parent_version_id(p_task_version_id);
6115           FETCH get_parent_version_id into l_old_par_ver_id;
6116           CLOSE get_parent_version_id;
6117           l_new_par_ver_id := l_parent_ver_id;
6118         ELSE
6119           OPEN get_top_task_ver_id(p_task_version_id);
6120           FETCH get_top_task_ver_id into l_old_par_ver_id;
6121           CLOSE get_top_task_Ver_id;
6122         END IF;
6123 
6124         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
6125           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6126                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
6127           raise FND_API.G_EXC_ERROR;
6128         END IF;
6129       END IF;
6130       --end bug 3069306
6131 
6132       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
6133          p_parent_task_ver_id => l_parent_ver_id
6134         ,x_return_status      => l_return_status
6135         ,x_error_message_code => l_error_msg_code
6136       );
6137 
6138       IF (l_return_status <> 'Y') THEN
6139         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6140                              p_msg_name => l_error_msg_code);
6141         raise FND_API.G_EXC_ERROR;
6142       END IF;
6143 
6144       --bug 4099488
6145       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
6146         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6147                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
6148         raise FND_API.G_EXC_ERROR;
6149       END IF;
6150       --end bug 4099488
6151     ELSE
6152       --bug 3069306
6153       --if financial task, check if changing parent ok
6154       IF (l_fin_type = 'Y') THEN /*	4269830: Replaced Function call with l_fin_type*/
6155         OPEN get_top_task_ver_id(p_ref_task_version_id);
6156         FETCH get_top_task_ver_id into l_new_par_ver_id;
6157         CLOSE get_top_task_ver_id;
6158 
6159         OPEN get_top_task_ver_id(p_task_version_id);
6160         FETCH get_top_task_ver_id into l_old_par_ver_id;
6161         CLOSE get_top_task_Ver_id;
6162 
6163         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
6164           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6165                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
6166           raise FND_API.G_EXC_ERROR;
6167         END IF;
6168       END IF;
6169       --end bug 3069306
6170 
6171       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
6172          p_parent_task_ver_id => p_ref_task_version_id
6173         ,x_return_status      => l_return_status
6174         ,x_error_message_code => l_error_msg_code
6175       );
6176 
6177       IF (l_return_status <> 'Y') THEN
6178         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6179                              p_msg_name => l_error_msg_code);
6180         raise FND_API.G_EXC_ERROR;
6181       END IF;
6182 
6183       --bug 4099488
6184       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_ref_task_version_id, p_task_version_id) = 'N' THEN
6185         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6186                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
6187         raise FND_API.G_EXC_ERROR;
6188       END IF;
6189       --end bug 4099488
6190     END IF;
6191 
6192   --end task status changes
6193 
6194   --bug 3301192 fin plan changes.
6195   --check whether the reference task was lowest task before
6196   --check the task is a lowest task bug 3301192
6197 
6198   IF l_ref_parent_struct_ver_id <> p_ref_task_version_id
6199   THEN
6200      l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_ref_task_version_id );
6201   END IF;
6202 --
6203   --Bug No 3475920
6204   IF p_peer_or_sub = 'PEER' THEN
6205      l_ref_parent_task_ver_id:=PA_PROJ_ELEMENTS_UTILS.GET_PARENT_TASK_VERSION_ID(p_ref_task_version_id);
6206   ELSE
6207      l_ref_parent_task_ver_id:=p_ref_task_version_id;
6208   END IF;
6209 --
6210   IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,l_ref_parent_task_ver_id) = 'Y' THEN
6211      PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6212                           p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
6213      RAISE FND_API.G_EXC_ERROR;
6214   END IF;
6215 --
6216   PA_TASK_PUB1.Update_Task_Version
6217   ( p_validate_only      => FND_API.G_FALSE,
6218     p_ref_task_version_id    => p_ref_task_version_id,
6219     p_peer_or_sub              => p_peer_or_sub,
6220     p_task_version_id        => p_task_version_id,
6221     p_record_version_number  => p_record_version_number,
6222     p_action                 => 'MOVE',
6223     x_return_status      => l_return_status,
6224     x_msg_count              => l_msg_count,
6225     x_msg_data             => l_msg_data );
6226 
6227     x_msg_count := FND_MSG_PUB.count_msg;
6228 
6229 --dbms_output.put_line( 'Count '|| x_msg_count );
6230 
6231   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6232     x_msg_count := FND_MSG_PUB.count_msg;
6233     IF x_msg_count = 1 then
6234       pa_interface_utils_pub.get_messages
6235       (p_encoded        => FND_API.G_TRUE,
6236        p_msg_index      => 1,
6237        p_msg_count      => l_msg_count,
6238        p_msg_data       => l_msg_data,
6239        p_data           => l_data,
6240        p_msg_index_out  => l_msg_index_out);
6241       x_msg_data := l_data;
6242     END IF;
6243     raise FND_API.G_EXC_ERROR;
6244   END IF;
6245 
6246 
6247 /*  SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
6248     FROM pa_proj_element_versions
6249    WHERE element_version_id =  p_structure_version_id
6250      AND object_type = 'PA_STRUCTURES';*/
6251 
6252   IF p_called_from_bulk_api = 'N' -- 4269830
6253   THEN
6254 
6255   SELECT proj_element_id, project_id, element_version_id INTO l_structure_id, l_project_id, l_structure_ver_id
6256     FROM pa_proj_element_versions
6257    WHERE element_version_id =  ( Select parent_structure_version_id
6258                                    from pa_proj_element_versions
6259                                   where element_version_id = p_task_version_id )
6260      AND object_type = 'PA_STRUCTURES';
6261   END IF;  -- 4269830
6262 
6263 IF p_calling_module NOT in ( 'FORMS', 'AMG' )
6264 THEN
6265 
6266   IF p_called_from_bulk_api ='N'  -- 4269830 : Already derived in BULK API
6267   then
6268 
6269   --Do financial task check
6270   --If financial
6271   OPEN cur_struc_type( l_structure_id );
6272   FETCH cur_struc_type INTO l_dummy_char;
6273   IF cur_struc_type%FOUND
6274   THEN
6275       --If structure has any published versions.
6276       l_published_version := 'N';
6277       OPEN cur_pub_versions( l_structure_id, l_project_id );
6278       FETCH cur_pub_versions INTO l_published_version;
6279       CLOSE cur_pub_versions;
6280 
6281   END IF; --4269830
6282   CLOSE cur_struc_type;--4269830
6283 
6284   END IF;--4269830
6285 
6286 --hsiu
6287 --changes for versioning
6288 /*      4269830 :
6289         This code has been moved to block tagged by <<--A-->>
6290 
6291       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
6292                                                      l_project_id);
6293       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
6294                                                   l_project_id);
6295 */
6296 
6297       IF l_fin_type = 'Y'  -- 4269830 this is equivalent to  cur_struc_type%FOUND
6298       THEN
6299 
6300       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.
6301 
6302       IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y') OR
6303          (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
6304 	OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
6305 	THEN
6306 --      IF NVL( l_published_version, 'N' ) = 'N'
6307 --      THEN
6308 --end changes
6309 
6310             --hsiu  Fixed parent_structure_version_id condition
6311           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
6312             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
6313             FROM PA_TASKS pt,
6314                  pa_proj_elem_ver_structure ppa,
6315                  PA_PROJ_ELEMENT_VERSIONS ppev
6316            WHERE ppev.element_version_id = p_task_version_id
6317              AND ppev.project_id = ppa.project_id
6318              AND ppev.parent_structure_version_id = ppa.element_version_id
6319              AND ppev.proj_element_id = pt.task_id;
6320 
6321           SELECT proj_element_id
6322             INTO l_ref_task_id
6323             FROM PA_PROJ_ELEMENT_VERSIONS
6324            WHERE element_version_id = p_ref_task_version_id;
6325 -- merged from 85
6326            SELECT record_version_number, parent_task_id    --get old parent id for bug 2947492 (move )
6327                  ,top_task_id       --bug 2967204
6328             INTO l_record_version_number, l_old_parent_task_id
6329                  ,l_old_top_task_id --bug 2967204
6330             FROM pa_tasks
6331            WHERE task_id = l_task_id
6332              AND project_id = l_project_id;
6333 -- merged from 85
6334 
6335     x_msg_count := FND_MSG_PUB.count_msg;
6336 
6337 --dbms_output.put_line( 'before move task old '|| x_msg_count );
6338 
6339           PA_TASKS_MAINT_PUB.Move_Task(
6340                    p_reference_project_id              => l_project_id
6341                   ,p_reference_task_id                 => l_ref_task_id
6342                   ,p_project_id                        => l_project_id
6343                   ,p_task_id                           => l_task_id
6344                   ,p_peer_or_sub                       => p_peer_or_sub
6345                   ,p_record_version_number             => l_record_version_number
6346                   ,p_wbs_record_version_number         => 1      --temporarily passing 1. Lock project is commented out in PA_TASKS_MAIN_PUB.Move_Task api.
6347                   ,x_return_status                     => l_return_status
6348                   ,x_msg_count                         => l_msg_count
6349                   ,x_msg_data                          => l_msg_data );
6350 
6351     x_msg_count := FND_MSG_PUB.count_msg;
6352 
6353 --dbms_output.put_line( 'After move task old '|| x_msg_count );
6354 
6355 
6356           IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6357               x_msg_count := FND_MSG_PUB.count_msg;
6358              IF x_msg_count = 1 then
6359                 pa_interface_utils_pub.get_messages
6360                 (p_encoded        => FND_API.G_TRUE,
6361                  p_msg_index      => 1,
6362                  p_msg_count      => l_msg_count,
6363                  p_msg_data       => l_msg_data,
6364                  p_data           => l_data,
6365                  p_msg_index_out  => l_msg_index_out);
6366                  x_msg_data := l_data;
6367             END IF;
6368             raise FND_API.G_EXC_ERROR;
6369          END IF;
6370 
6371 -- merged from 85
6372           --Bug 2947492   ( Move )
6373           --
6374 
6375             OPEN get_parent_task_id( l_task_id , l_project_id );
6376             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
6377             CLOSE get_parent_task_id;
6378 
6379             --bug 2967204
6380             --Cannot move out of the current hierarchy
6381               IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
6382               THEN
6383                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
6384                                        p_msg_name => 'PA_CANT_CHANGE_PARENT');
6385                   raise FND_API.G_EXC_ERROR;
6386               END IF;
6387             --End bug 2967204
6388 
6389 /*
6390             --First call the check_reparent ok
6391             --This should have been called in the beginning but due to lot of complexity involved in getting
6392             --new parent task id it is decided to call this later stage as long as  we rollback the whole operation
6393             --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
6394 
6395             PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
6396                      p_task_id                    => l_task_id
6397                     ,p_old_parent_task_id         => l_old_parent_task_id
6398                     ,p_new_parent_task_id         => l_parent_task_id
6399                     ,x_return_status              => l_return_status
6400                     ,x_msg_count                  => l_msg_count
6401                     ,x_msg_data                   => l_msg_data
6402                 );
6403 
6404              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6405                 x_msg_count := FND_MSG_PUB.count_msg;
6406                 IF x_msg_count = 1 then
6407                    pa_interface_utils_pub.get_messages
6408                    (p_encoded        => FND_API.G_TRUE,
6409                     p_msg_index      => 1,
6410                     p_msg_count      => l_msg_count,
6411                     p_msg_data       => l_msg_data,
6412                     p_data           => l_data,
6413                     p_msg_index_out  => l_msg_index_out);
6414                     x_msg_data := l_data;
6415                 END IF;
6416                 raise FND_API.G_EXC_ERROR;
6417              END IF;
6418 */   --commenting out, please refer mails from venkatesh dates 22 jan 04
6419 
6420 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
6421             l_plannable_tasks_tbl(1).impacted_task_id   := l_task_id;
6422             l_plannable_tasks_tbl(1).action             := 'REPARENT';
6423             l_plannable_tasks_tbl(1).old_parent_task_id := l_old_parent_task_id;
6424             l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
6425             l_plannable_tasks_tbl(1).top_task_id        := l_top_task_id;
6426 
6427             PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
6428                     p_project_id         => l_project_id
6429                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
6430                   , x_return_status      => l_return_status
6431                   , x_msg_data           => l_msg_data
6432                   , x_msg_count          => l_msg_count
6433                 );
6434 
6435              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
6436                 x_msg_count := FND_MSG_PUB.count_msg;
6437                 IF x_msg_count = 1 then
6438                    pa_interface_utils_pub.get_messages
6439                    (p_encoded        => FND_API.G_TRUE,
6440                     p_msg_index      => 1,
6441                     p_msg_count      => l_msg_count,
6442                     p_msg_data       => l_msg_data,
6443                     p_data           => l_data,
6444                     p_msg_index_out  => l_msg_index_out);
6445                     x_msg_data := l_data;
6446                 END IF;
6447              raise FND_API.G_EXC_ERROR;
6448              END IF;
6449 bug 3010538 */
6450 
6451           --End Bug 2947492  ( Move )
6452       END IF;
6453 
6454    -- END IF; 4269830
6455    -- CLOSE cur_struc_type; 4269830
6456 
6457    END IF; -- 4269830 IF l_fin_type ='Y'
6458 -- merged from 85
6459 END IF; --<<p_calling_module >>
6460 
6461 --bug 3010538 (move )
6462 --bug 3053281 --set flag if not (manual and workplan only)
6463 
6464 /*	4269830 :
6465         This code has been moved to block tagged by <<--A-->>
6466 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_parent_struct_ver_id, 'WORKPLAN');
6467 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(l_project_id);
6468 */
6469   --3035902: process update flag changes
6470   OPEN get_task_type_id(l_proj_element_id);
6471   FETCH get_task_type_id INTO l_task_type_id;
6472   CLOSE get_task_type_id;
6473 
6474   --set update process flag if necessary;
6475   IF (l_wp_process_flag = 'N') THEN
6476     --may need to update process flag
6477     IF ((l_shared = 'N') AND
6478         (l_wp_type = 'Y') AND
6479         (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
6480         (l_weighting_basis_code <> 'MANUAL'))
6481     THEN
6482       --split and workplan; only update if progressable task added
6483       l_wp_process_flag := 'Y';
6484     ELSIF ((l_shared = 'N') AND
6485            (l_wp_type = 'N')) THEN
6486       --split and financial; update
6487       l_wp_process_flag := 'Y';
6488     ELSIF (l_shared = 'Y') THEN
6489       l_wp_process_flag := 'Y';
6490     END IF;
6491   END IF;
6492   --3035902: end process update flag changes
6493 /* commented for process update flag changes
6494 IF (l_shared = 'N') AND
6495    (l_wp_type = 'Y') AND
6496    (l_weighting_basis_Code = 'MANUAL') THEN
6497   --do not set the flag to 'Y'
6498   NULL;
6499 ELSE
6500 */
6501   --3035902: process update flag changes
6502   --Bug No 3450684 SMukka Commented if condition
6503 --  IF (l_wp_process_flag = 'Y') THEN
6504   --set the flag
6505    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
6506    (
6507       p_calling_context       => 'SELF_SERVICE'
6508      ,p_project_id            => l_project_id
6509      ,p_structure_version_id  => l_parent_struct_ver_id
6510      ,p_update_wbs_flag       => 'Y'
6511      ,x_return_status         => l_return_status
6512      ,x_msg_count             => l_msg_count
6513      ,x_msg_data              => l_msg_data);
6514 
6515    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6516      x_msg_count := FND_MSG_PUB.count_msg;
6517      if x_msg_count = 1 then
6518        pa_interface_utils_pub.get_messages
6519        (p_encoded        => FND_API.G_TRUE,
6520         p_msg_index      => 1,
6521         p_msg_count      => l_msg_count,
6522         p_msg_data       => l_msg_data,
6523         p_data           => l_data,
6524         p_msg_index_out  => l_msg_index_out);
6525         x_msg_data := l_data;
6526      end if;
6527      raise FND_API.G_EXC_ERROR;
6528    end if;
6529   --3035902: end process update flag changes
6530 --END IF;
6531 
6532 
6533    IF l_fin_type = 'Y' /*     4269830: Replaced Function call with l_fin_type*/
6534    THEN
6535        IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and  l_published_version = 'N' ) THEN
6536    --Move
6537        pa_fp_refresh_elements_pub.set_process_flag_proj(
6538              p_project_id               => l_project_id
6539             ,p_request_id               => null
6540             ,p_process_code             => null
6541             ,p_refresh_required_flag    => 'Y'
6542             ,x_return_status            => l_return_status
6543             ,x_msg_count                => l_msg_count
6544             ,x_msg_data                 => l_msg_data );
6545 
6546         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6547            x_msg_count := FND_MSG_PUB.count_msg;
6548            if x_msg_count = 1 then
6549              pa_interface_utils_pub.get_messages
6550             (p_encoded        => FND_API.G_TRUE,
6551              p_msg_index      => 1,
6552              p_msg_count      => l_msg_count,
6553              p_msg_data       => l_msg_data,
6554              p_data           => l_data,
6555              p_msg_index_out  => l_msg_index_out);
6556              x_msg_data := l_data;
6557            end if;
6558            raise FND_API.G_EXC_ERROR;
6559         end if;
6560       END IF;
6561    END IF;
6562 
6563 
6564 --End bug 3010538 (move)
6565 
6566 
6567 --Hsiu added for date rollup; workplan only
6568 --dbms_output.put_line('check structure version type '||l_structure_ver_id);
6569   IF l_wp_type = 'Y' then /*4269830 Function call replaced by l_wp_type*/
6570 
6571     -- Added for FP_M changes Bug 3305199 : Bhumesh
6572     If l_check_third_party_flag  = 'Y' Then /*4269830 Function call replaced by l_check_third_party_flag*/
6573 
6574        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
6575           p_structure_version_id => P_Structure_Version_ID
6576      ,p_dirty_flag           => 'Y'             --bug 3902282
6577      ,x_return_status        => x_return_status
6578      ,x_msg_count            => x_msg_count
6579      ,x_msg_data             => x_msg_data
6580        );
6581 
6582        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
6583          x_msg_count := FND_MSG_PUB.count_msg;
6584          If x_msg_count = 1 then
6585            pa_interface_utils_pub.get_messages
6586            (p_encoded        => FND_API.G_TRUE,
6587             p_msg_index      => 1,
6588             p_msg_count      => l_msg_count,
6589             p_msg_data       => l_msg_data,
6590             p_data           => l_data,
6591             p_msg_index_out  => l_msg_index_out);
6592             x_msg_data := l_data;
6593          End If;
6594          raise FND_API.G_EXC_ERROR;
6595        End If;
6596     End If;
6597     -- End of FP_M changes
6598 
6599      /* Bug 5768425 Start */
6600     --l_tasks_ver_ids.extend;
6601     --l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
6602     l_task_cnt := l_task_cnt + 1;
6603     l_tasks_ver_ids(l_task_cnt) := p_task_version_id;
6604 
6605     --PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
6606     PA_STRUCT_TASK_ROLLUP_PUB.TASKS_ROLLUP_UNLIMITED(
6607                        p_commit => FND_API.G_FALSE,
6608                        p_element_versions => l_tasks_ver_ids,
6609                        x_return_status => l_return_status,
6610                        x_msg_count => l_msg_count,
6611                        x_msg_data => l_msg_data);
6612 
6613     /* Bug 5768425 End */
6614 
6615      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6616        x_msg_count := FND_MSG_PUB.count_msg;
6617        if x_msg_count = 1 then
6618          pa_interface_utils_pub.get_messages
6619          (p_encoded        => FND_API.G_TRUE,
6620           p_msg_index      => 1,
6621           p_msg_count      => l_msg_count,
6622           p_msg_data       => l_msg_data,
6623           p_data           => l_data,
6624           p_msg_index_out  => l_msg_index_out);
6625           x_msg_data := l_data;
6626        end if;
6627        raise FND_API.G_EXC_ERROR;
6628      end if;
6629 
6630 --hsiu added for task status
6631 --if versioning is off, rollup.
6632      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
6633        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
6634                   p_structure_version_id => l_structure_ver_id
6635                  ,p_element_version_id => p_task_version_id
6636                  ,x_return_status => l_return_status
6637                  ,x_msg_count => l_msg_count
6638                  ,x_msg_data => l_msg_data
6639        );
6640 
6641        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6642          x_msg_count := FND_MSG_PUB.count_msg;
6643          if x_msg_count = 1 then
6644            pa_interface_utils_pub.get_messages
6645            (p_encoded        => FND_API.G_TRUE,
6646             p_msg_index      => 1,
6647             p_msg_count      => l_msg_count,
6648             p_msg_data       => l_msg_data,
6649             p_data           => l_data,
6650             p_msg_index_out  => l_msg_index_out);
6651             x_msg_data := l_data;
6652          end if;
6653          raise FND_API.G_EXC_ERROR;
6654        end if;
6655 
6656        IF (l_old_peer_task_id IS NOT NULL) THEN
6657          PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
6658                   p_structure_version_id => l_structure_ver_id
6659                  ,p_element_version_id => l_old_peer_task_id
6660                  ,x_return_status => l_return_status
6661                  ,x_msg_count => l_msg_count
6662                  ,x_msg_data => l_msg_data
6663          );
6664 
6665          if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6666            x_msg_count := FND_MSG_PUB.count_msg;
6667            if x_msg_count = 1 then
6668              pa_interface_utils_pub.get_messages
6669              (p_encoded        => FND_API.G_TRUE,
6670               p_msg_index      => 1,
6671               p_msg_count      => l_msg_count,
6672               p_msg_data       => l_msg_data,
6673               p_data           => l_data,
6674               p_msg_index_out  => l_msg_index_out);
6675               x_msg_data := l_data;
6676            end if;
6677            raise FND_API.G_EXC_ERROR;
6678          end if;
6679        END IF;
6680 
6681      END IF;
6682 
6683 --end task status changes
6684 
6685   END IF;
6686 
6687 --bug 3301192  fin plan changes
6688 declare
6689 /* Bug #: 3305199 SMukka                                                         */
6690 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
6691 /* l_task_ver_ids2              PA_PLSQL_DATATYPES.IdTabTyp;                     */
6692 l_task_ver_ids2              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
6693 /*l_wp_type                    VARCHAR2(1); Commented for 4269830 - This value is already derived*/
6694 begin
6695   /*4269830 Commented for 4269830 - This value is already derived
6696   l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_ver_id, 'WORKPLAN');
6697    */
6698   IF l_wp_type = 'Y'
6699      AND l_ref_parent_struct_ver_id <> p_ref_task_version_id /* make sure that the reference is not a str ver */
6700   THEN
6701       l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_ref_task_version_id );
6702       IF l_lowest_task_flag1 = 'Y' AND
6703          l_lowest_task_flag2 = 'N'
6704       THEN
6705            l_task_ver_ids2.extend(1); /* Venky */
6706            l_task_ver_ids2(1) := p_ref_task_version_id;
6707            /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
6708            /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
6709            DECLARE
6710              --p1 bug 3888432
6711              l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
6712              CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
6713                SELECT resource_assignment_id
6714                  FROM pa_resource_assignments
6715                 WHERE wbs_element_Version_id = c_task_ver_id
6716                   AND ta_display_flag = 'N';
6717              l_assign_id    NUMBER := NULL;
6718            BEGIN
6719              OPEN get_assignment_id(p_ref_task_version_id);
6720              FETCH get_assignment_id into l_assign_id;
6721              CLOSE get_assignment_id;
6722 
6723              IF (l_assign_id IS NOT NULL) THEN
6724                l_assign_ids.extend(1);
6725                l_assign_ids(1) := l_assign_id;
6726                pa_fp_planning_transaction_pub.delete_planning_transactions
6727                (
6728                 p_context                      => 'WORKPLAN'
6729                ,p_task_or_res                  => 'ASSIGNMENT'
6730 --               ,p_element_version_id_tbl       => l_task_ver_ids2
6731 --              ,p_maintain_reporting_lines     => 'Y'
6732                ,p_resource_assignment_tbl => l_assign_ids
6733                ,x_return_status                => l_return_status
6734                ,x_msg_count                    => l_msg_count
6735                ,x_msg_data                     => l_msg_data
6736                );
6737              END IF;
6738            EXCEPTION
6739               WHEN OTHERS THEN
6740                    fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
6741                                            p_procedure_name => 'MOVE_TASK_VERSION',
6742                                            p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
6743               RAISE FND_API.G_EXC_ERROR;
6744            END;
6745            if l_return_status <> FND_API.G_RET_STS_SUCCESS then
6746               x_msg_count := FND_MSG_PUB.count_msg;
6747              if x_msg_count = 1 then
6748                 pa_interface_utils_pub.get_messages
6749                (p_encoded        => FND_API.G_TRUE,
6750                 p_msg_index      => 1,
6751                 p_msg_count      => l_msg_count,
6752                 p_msg_data       => l_msg_data,
6753                 p_data           => l_data,
6754                 p_msg_index_out  => l_msg_index_out);
6755                 x_msg_data := l_data;
6756              end if;
6757              raise FND_API.G_EXC_ERROR;
6758             end if;
6759       END IF;
6760   END IF;
6761 end;
6762 
6763   --bug 4149392
6764   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
6765   --end bug 4149392
6766 
6767   x_return_status := FND_API.G_RET_STS_SUCCESS;
6768 
6769   IF (p_commit = FND_API.G_TRUE) THEN
6770     COMMIT;
6771   END IF;
6772 
6773   IF (p_debug_mode = 'Y') THEN
6774     pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSION END');
6775   END IF;
6776 EXCEPTION
6777   when FND_API.G_EXC_ERROR then
6778     if p_commit = FND_API.G_TRUE then
6779       rollback to move_task_version;
6780     end if;
6781     x_return_status := FND_API.G_RET_STS_ERROR;
6782   when FND_API.G_EXC_UNEXPECTED_ERROR then
6783     if p_commit = FND_API.G_TRUE then
6784       rollback to move_task_version;
6785     end if;
6786     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6787     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
6788                             p_procedure_name => 'MOVE_TASK_VERSION',
6789                             p_error_text     => SUBSTRB(SQLERRM,1,240));
6790   when OTHERS then
6791     if p_commit = FND_API.G_TRUE then
6792       rollback to move_task_version;
6793     end if;
6794     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6795     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
6796                             p_procedure_name => 'MOVE_TASK_VERSION',
6797                             p_error_text     => SUBSTRB(SQLERRM,1,240));
6798     raise;
6799 END Move_Task_version;
6800 
6801 -- API name                      : Indent_Task_Version
6802 -- Type                          : Public procedure
6803 -- Pre-reqs                      : None
6804 -- Return Value                  : N/A
6805 -- Prameters
6806 -- p_api_version          IN    NUMBER  N   Not Null    1.0
6807 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
6808 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
6809 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
6810 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
6811 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
6812 -- p_debug_mode       IN    VARCHAR2    N   Null    N
6813 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6814 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6815 -- p_task_version_id    IN  NUMBER  N   Not Null
6816 -- x_return_status  OUT     VARCHAR2    N   Null
6817 -- x_msg_count        OUT   NUMBER  N   Null
6818 -- x_msg_data         OUT   VARCHAR2    N   Null
6819 --
6820 --  History
6821 --
6822 --  23-OCT-01   Andrew Lee             -Created
6823 --
6824 --
6825 
6826 PROCEDURE INDENT_TASK_VERSION (
6827  p_api_version            IN    NUMBER   :=1.0,
6828  p_init_msg_list            IN  VARCHAR2 :=FND_API.G_TRUE,
6829  p_commit                   IN  VARCHAR2 :=FND_API.G_FALSE,
6830  p_validate_only            IN  VARCHAR2 :=FND_API.G_TRUE,
6831  p_validation_level         IN  NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
6832  p_calling_module           IN  VARCHAR2 :='SELF_SERVICE',
6833  p_debug_mode             IN    VARCHAR2 :='N',
6834  p_max_msg_count            IN  NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6835  p_structure_version_id     IN      NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
6836  p_task_version_id          IN  NUMBER,
6837  p_record_version_number    IN      NUMBER,
6838  x_return_status            OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
6839  x_msg_count              OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
6840  x_msg_data                 OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6841 ) IS
6842 
6843 
6844   l_api_name               CONSTANT VARCHAR(30) := 'INDENT_TASK_VERSION';
6845   l_api_version            CONSTANT NUMBER      := 1.0;
6846 
6847   l_wbs_level              NUMBER;
6848   l_display_sequence       NUMBER;
6849   l_prev_wbs_level         NUMBER;
6850   l_prev_display_sequence  NUMBER;
6851   l_ref_task_version_id    NUMBER;
6852   l_peer_or_sub            VARCHAR2(30);
6853   l_parent_structure_version_id NUMBER;
6854 
6855   l_return_status            VARCHAR2(1);
6856   l_msg_count                NUMBER;
6857   l_msg_data                 VARCHAR2(250);
6858   l_data                     VARCHAR2(250);
6859   l_msg_index_out            NUMBER;
6860 
6861   l_project_id                  NUMBER;
6862   l_structure_id                NUMBER;
6863   l_ref_task_id                 NUMBER;
6864   l_task_id                     NUMBER;
6865   l_task_record_version_number  NUMBER;
6866   l_wbs_record_version_number   NUMBER;
6867   l_dummy_char                  VARCHAR2(1);
6868   l_published_version           VARCHAR2(1);
6869 
6870 --hsiu
6871 --added for advanced structure - versioning
6872     l_versioned    VARCHAR2(1) := 'N';
6873     l_shared       VARCHAR2(1) := 'N';
6874 --end changes
6875 
6876 --hyau
6877 --added for lifecycle version
6878     l_proj_element_id  NUMBER;
6879     src_proj_element_id       NUMBER; -- Bug 6881272
6880 -- end changes
6881 
6882     CURSOR cur_struc_type( c_structure_id NUMBER )
6883     IS
6884       SELECT 'Y'
6885         FROM pa_proj_structure_types ppst
6886             ,pa_structure_types pst
6887        WHERE ppst.proj_element_id = c_structure_id
6888          AND ppst.structure_type_id = pst.structure_type_id
6889          AND pst.structure_type_class_code IN( 'FINANCIAL' );
6890 
6891     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
6892       select 'Y'
6893         from pa_proj_elem_ver_structure
6894        where proj_element_id = c_structure_id
6895          AND project_id = c_project_id
6896          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
6897 
6898 --Hsiu added for date rollup
6899   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
6900 
6901 --hsiu added for task status
6902   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
6903     select object_id_from1
6904       from pa_object_relationships
6905      where object_id_to1 = c_elem_ver_id
6906        and object_type_to = 'PA_TASKS'
6907        and relationship_type = 'S';
6908   l_parent_ver_id NUMBER;
6909   l_error_msg_code VARCHAR2(30);
6910 
6911 BEGIN
6912   pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_TASK_VERSION');
6913 
6914   IF (p_debug_mode = 'Y') THEN
6915     pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION begin');
6916   END IF;
6917 
6918   IF (p_commit = FND_API.G_TRUE) THEN
6919     savepoint indent_task_version;
6920   END IF;
6921 
6922   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
6923     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6924   END IF;
6925 
6926   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
6927     FND_MSG_PUB.initialize;
6928   END IF;
6929 
6930 ----dbms_output.put_line( 'Indent Task Stage 1 ' );
6931 --hsiu
6932 --added on 08-JAN-2002
6933 --check if task are linked task
6934 -- Bug 6881272: ABLE TO INDENT THE TASK OF THE WBS WITH THE LINKED PROJECT
6935 
6936   BEGIN
6937       SELECT proj_element_id,project_id
6938       INTO src_proj_element_id,l_project_id
6939       FROM PA_PROJ_ELEMENT_VERSIONS
6940       WHERE element_version_id = p_task_version_id
6941       AND parent_structure_version_id = p_structure_version_id;
6942   EXCEPTION
6943     WHEN OTHERS THEN
6944     raise;
6945   END;
6946 
6947   IF (p_structure_version_id IS NOT NULL) AND
6948        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6949 -- Bug 6881272: ABLE TO INDENT THE TASK OF THE WBS WITH THE LINKED PROJECT
6950       IF (Nvl(pa_relationship_utils.check_task_has_sub_proj(l_project_id
6951 							          , src_proj_element_id
6952 								        , p_task_version_id),'N') = 'Y') THEN
6953       --deleting linked task. Error
6954       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
6955     END IF;
6956 
6957     l_msg_count := FND_MSG_PUB.count_msg;
6958     if l_msg_count > 0 then
6959       x_msg_count := l_msg_count;
6960       if x_msg_count = 1 then
6961         pa_interface_utils_pub.get_messages
6962         (p_encoded        => FND_API.G_TRUE,
6963          p_msg_index      => 1,
6964          p_msg_count      => l_msg_count,
6965          p_msg_data       => l_msg_data,
6966          p_data           => l_data,
6967          p_msg_index_out  => l_msg_index_out);
6968         x_msg_data := l_data;
6969       end if;
6970       raise FND_API.G_EXC_ERROR;
6971     end if;
6972   END IF;
6973 
6974   -- hyau
6975   -- Lifecycle Phase validation Changes. Check if task has phase associated with it
6976   IF (p_task_version_id IS NOT NULL) AND
6977        (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6978 
6979   SELECT proj_element_id, wbs_level, display_sequence, parent_structure_version_id
6980   INTO l_proj_element_id, l_wbs_level, l_display_sequence, l_parent_structure_version_id
6981   FROM PA_PROJ_ELEMENT_VERSIONS
6982   WHERE element_version_id = p_task_version_id;
6983 
6984     IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
6985               l_proj_element_id)) THEN
6986       --Indenting a task with phase. Error
6987       PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
6988     END IF;
6989 
6990     l_msg_count := FND_MSG_PUB.count_msg;
6991     if l_msg_count > 0 then
6992       x_msg_count := l_msg_count;
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   END IF;
7006   -- end hyau. Lifecycle Phase validation Changes.
7007 
7008 --dbms_output.put_line( 'Indent Task Stage 2 ' );
7009 
7010 
7011 /*   Moved up for performance bug 2832807
7012   SELECT wbs_level, display_sequence, parent_structure_version_id
7013   INTO l_wbs_level, l_display_sequence, l_parent_structure_version_id
7014   FROM PA_PROJ_ELEMENT_VERSIONS
7015   WHERE element_version_id = p_task_version_id;
7016 */
7017 
7018 --dbms_output.put_line( 'Indent Task Stage 3 ' );
7019 
7020 
7021   if l_display_sequence = 1 then
7022     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7023                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
7024   end if;
7025 
7026 --dbms_output.put_line( 'Indent Task Stage 4 ' );
7027 
7028 --need to specify parent structure version id
7029   SELECT wbs_level, element_version_id
7030   INTO l_prev_wbs_level, l_ref_task_version_id
7031   FROM PA_PROJ_ELEMENT_VERSIONS
7032   WHERE display_sequence = l_display_sequence - 1
7033     AND parent_structure_version_id = l_parent_structure_version_id;
7034 
7035 --dbms_output.put_line( 'Indent Task Stage 5 ' );
7036 
7037 
7038   if l_wbs_level > l_prev_wbs_level then
7039     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7040                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
7041   end if;
7042 
7043   l_msg_count := FND_MSG_PUB.count_msg;
7044   if l_msg_count > 0 then
7045     x_msg_count := l_msg_count;
7046     if x_msg_count = 1 then
7047       pa_interface_utils_pub.get_messages
7048       (p_encoded        => FND_API.G_TRUE,
7049        p_msg_index      => 1,
7050        p_msg_count      => l_msg_count,
7051        p_msg_data       => l_msg_data,
7052        p_data           => l_data,
7053        p_msg_index_out  => l_msg_index_out);
7054       x_msg_data := l_data;
7055     end if;
7056     raise FND_API.G_EXC_ERROR;
7057   end if;
7058 
7059 --dbms_output.put_line( 'Indent Task Stage 6 ' );
7060 
7061   if l_wbs_level = l_prev_wbs_level then
7062     l_peer_or_sub := 'SUB';
7063   else
7064     l_peer_or_sub := 'PEER';
7065 
7066 --dbms_output.put_line( 'Indent Task Stage 7 ' );
7067 
7068 --need to specify which structure version
7069 --need to specify parent in the inner select statement
7070     SELECT element_version_id
7071     INTO l_ref_task_version_id
7072     FROM PA_PROJ_ELEMENT_VERSIONS
7073     WHERE wbs_level = l_wbs_level + 1
7074     AND   object_type = 'PA_TASKS'
7075     AND   display_sequence < l_display_sequence
7076     AND   parent_structure_version_id = l_parent_structure_version_id
7077     AND   display_sequence =
7078           (SELECT max(display_sequence)
7079            FROM PA_PROJ_ELEMENT_VERSIONS
7080            WHERE wbs_level = l_wbs_level + 1
7081            AND   object_type = 'PA_TASKS'
7082            AND   display_sequence < l_display_sequence
7083            AND parent_structure_version_id = l_parent_structure_version_id);
7084 --dbms_output.put_line( 'Indent Task Stage 8 ' );
7085 
7086   end if;
7087 
7088 
7089     --hsiu added for task status
7090     --Check if ok to indent this task
7091     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
7092          p_task_ver_id => p_task_version_id
7093         ,x_return_status      => l_return_status
7094         ,x_error_message_code => l_error_msg_code
7095     );
7096 
7097     IF (l_return_status <> 'Y') THEN
7098         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7099                              p_msg_name => l_error_msg_code);
7100         raise FND_API.G_EXC_ERROR;
7101     END IF;
7102 
7103     --check if ok to create subtask
7104     IF (l_peer_or_sub = 'PEER') THEN
7105       OPEN get_parent_version_id(l_ref_task_version_id);
7106       FETCH get_parent_version_id into l_parent_ver_id;
7107       CLOSE get_parent_version_id;
7108       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7109          p_parent_task_ver_id => l_parent_ver_id
7110         ,x_return_status      => l_return_status
7111         ,x_error_message_code => l_error_msg_code
7112       );
7113 
7114       IF (l_return_status <> 'Y') THEN
7115         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7116                              p_msg_name => l_error_msg_code);
7117         raise FND_API.G_EXC_ERROR;
7118       END IF;
7119     ELSE
7120       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7121          p_parent_task_ver_id => l_ref_task_version_id
7122         ,x_return_status      => l_return_status
7123         ,x_error_message_code => l_error_msg_code
7124       );
7125 
7126       IF (l_return_status <> 'Y') THEN
7127         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7128                              p_msg_name => l_error_msg_code);
7129         raise FND_API.G_EXC_ERROR;
7130       END IF;
7131     END IF;
7132 
7133   --end task status changes
7134 
7135 
7136 --dbms_output.put_line( 'Indent Task Stage 9 ' );
7137 
7138   PA_TASK_PUB1.Update_Task_Version
7139   ( p_validate_only      => FND_API.G_FALSE,
7140     p_ref_task_version_id    => l_ref_task_version_id,
7141     p_peer_or_sub              => l_peer_or_sub,
7142     p_task_version_id        => p_task_version_id,
7143     p_record_version_number  => p_record_version_number,
7144     x_return_status          => l_return_status,
7145     x_msg_count              => l_msg_count,
7146     x_msg_data               => l_msg_data );
7147 
7148 --dbms_output.put_line( 'Indent Task Stage 10 ' );
7149 
7150 
7151   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7152     x_msg_count := FND_MSG_PUB.count_msg;
7153     IF x_msg_count = 1 then
7154       pa_interface_utils_pub.get_messages
7155       (p_encoded        => FND_API.G_TRUE,
7156        p_msg_index      => 1,
7157        p_msg_count      => l_msg_count,
7158        p_msg_data       => l_msg_data,
7159        p_data           => l_data,
7160        p_msg_index_out  => l_msg_index_out);
7161       x_msg_data := l_data;
7162     END IF;
7163     raise FND_API.G_EXC_ERROR;
7164   END IF;
7165 
7166 
7167 --dbms_output.put_line( 'Indent Task Stage 11 ' );
7168 
7169   -- Update WBS numbers
7170   SELECT parent_structure_version_id
7171   INTO l_parent_structure_version_id
7172   FROM PA_PROJ_ELEMENT_VERSIONS
7173   WHERE element_version_id = p_task_version_id;
7174 
7175 --dbms_output.put_line( 'Indent Task Stage 12 ' );
7176 
7177 
7178   PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
7179   ( p_commit                   => p_commit
7180    ,p_debug_mode               => p_debug_mode
7181    ,p_parent_structure_ver_id  => l_parent_structure_version_id
7182    ,p_task_id                  => p_task_version_id
7183    ,p_display_seq              => l_display_sequence
7184    ,p_action                   => 'INDENT'
7185    ,p_parent_task_id           => NULL
7186    ,x_return_status            => l_return_status );
7187 
7188 
7189   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7190     FROM pa_proj_element_versions
7191    WHERE element_version_id =  ( Select parent_structure_version_id
7192                                    from pa_proj_element_versions
7193                                   where element_version_id = p_task_version_id )
7194      AND object_type = 'PA_STRUCTURES';
7195 
7196 
7197   --Do financial task check
7198   --If financial
7199   OPEN cur_struc_type( l_structure_id );
7200   FETCH cur_struc_type INTO l_dummy_char;
7201   IF cur_struc_type%FOUND
7202   THEN
7203       --If structure has any published versions.
7204       l_published_version := 'N';
7205       OPEN cur_pub_versions( l_structure_id, l_project_id );
7206       FETCH cur_pub_versions INTO l_published_version;
7207       CLOSE cur_pub_versions;
7208 
7209 --hsiu
7210 --changes for versioning
7211       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
7212                                                      l_project_id);
7213       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
7214                                                   l_project_id);
7215 
7216       IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y')
7217       OR ((l_published_version = 'Y') AND (l_shared = 'N')) -- Bug # 5064340. -- To accomodate split financial tasks.
7218       THEN
7219 --      IF NVL( l_published_version, 'N' ) = 'N'
7220 --      THEN
7221 --end changes
7222 
7223           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
7224             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
7225             FROM PA_TASKS pt,
7226                  pa_proj_elem_ver_structure ppa,
7227                  PA_PROJ_ELEMENT_VERSIONS ppev
7228            WHERE ppev.element_version_id = p_task_version_id
7229              AND ppev.parent_structure_version_id = ppa.element_version_id
7230              AND ppev.project_id = ppa.project_id
7231              AND ppev.proj_element_id = pt.task_id;
7232 
7233           SELECT proj_element_id
7234             INTO l_ref_task_id
7235             FROM PA_PROJ_ELEMENT_VERSIONS
7236            WHERE element_version_id = l_ref_task_version_id;
7237 
7238           SELECT record_version_number INTO l_task_record_version_number
7239             FROM pa_tasks
7240            WHERE task_id = l_task_id
7241              AND project_id = l_project_id;
7242 
7243 
7244           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
7245                          p_project_id                        => l_project_id
7246                         ,p_task_id                           => l_task_id
7247                         ,p_edit_mode                         => 'INDENT'
7248                         ,p_record_version_number             => l_task_record_version_number
7249                         ,p_wbs_record_version_number         => 1
7250                         ,x_return_status                     => l_return_status
7251                         ,x_msg_count                         => l_msg_count
7252                         ,x_msg_data                          => l_msg_data );
7253 
7254 --dbms_output.put_line( 'Indent Task Stage 19 ' );
7255 
7256       END IF;
7257   END IF;
7258   CLOSE cur_struc_type;
7259 
7260   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7261     x_msg_count := FND_MSG_PUB.count_msg;
7262     IF x_msg_count = 1 then
7263       pa_interface_utils_pub.get_messages
7264       (p_encoded        => FND_API.G_TRUE,
7265        p_msg_index      => 1,
7266        p_msg_count      => l_msg_count,
7267        p_msg_data       => l_msg_data,
7268        p_data           => l_data,
7269        p_msg_index_out  => l_msg_index_out);
7270       x_msg_data := l_data;
7271     END IF;
7272     raise FND_API.G_EXC_ERROR;
7273   END IF;
7274 
7275 --Hsiu added for date rollup; workplan only
7276 
7277   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(l_parent_structure_version_id, 'WORKPLAN') = 'Y' then
7278     l_tasks_ver_ids.extend;
7279     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
7280 
7281     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
7282                        p_commit => FND_API.G_FALSE,
7283                        p_element_versions => l_tasks_ver_ids,
7284                        x_return_status => l_return_status,
7285                        x_msg_count => l_msg_count,
7286                        x_msg_data => l_msg_data);
7287 
7288      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7289        x_msg_count := FND_MSG_PUB.count_msg;
7290        if x_msg_count = 1 then
7291          pa_interface_utils_pub.get_messages
7292          (p_encoded        => FND_API.G_TRUE,
7293           p_msg_index      => 1,
7294           p_msg_count      => l_msg_count,
7295           p_msg_data       => l_msg_data,
7296           p_data           => l_data,
7297           p_msg_index_out  => l_msg_index_out);
7298           x_msg_data := l_data;
7299        end if;
7300        raise FND_API.G_EXC_ERROR;
7301      end if;
7302 
7303 --hsiu added for task status
7304 --if versioning is off, rollup.
7305      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
7306        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
7307                   p_structure_version_id => p_structure_version_id
7308                  ,p_element_version_id => p_task_version_id
7309                  ,x_return_status => l_return_status
7310                  ,x_msg_count => l_msg_count
7311                  ,x_msg_data => l_msg_data
7312        );
7313 
7314        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7315          x_msg_count := FND_MSG_PUB.count_msg;
7316          if x_msg_count = 1 then
7317            pa_interface_utils_pub.get_messages
7318            (p_encoded        => FND_API.G_TRUE,
7319             p_msg_index      => 1,
7320             p_msg_count      => l_msg_count,
7321             p_msg_data       => l_msg_data,
7322             p_data           => l_data,
7323             p_msg_index_out  => l_msg_index_out);
7324             x_msg_data := l_data;
7325          end if;
7326          raise FND_API.G_EXC_ERROR;
7327        end if;
7328      END IF;
7329 
7330 --end task status changes
7331 
7332   END IF;
7333 
7334   x_return_status := FND_API.G_RET_STS_SUCCESS;
7335 
7336   IF (p_commit = FND_API.G_TRUE) THEN
7337     COMMIT;
7338   END IF;
7339 
7340   IF (p_debug_mode = 'Y') THEN
7341     pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION END');
7342   END IF;
7343 
7344 EXCEPTION
7345   when FND_API.G_EXC_ERROR then
7346     if p_commit = FND_API.G_TRUE then
7347       rollback to indent_task_version;
7348     end if;
7349     x_return_status := FND_API.G_RET_STS_ERROR;
7350   when FND_API.G_EXC_UNEXPECTED_ERROR then
7351     if p_commit = FND_API.G_TRUE then
7352       rollback to indent_task_version;
7353     end if;
7354     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7355     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
7356                             p_procedure_name => 'INDENT_TASK_VERSION',
7357                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7358   when OTHERS then
7359     if p_commit = FND_API.G_TRUE then
7360       rollback to indent_task_version;
7361     end if;
7362     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7363     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
7364                             p_procedure_name => 'INDENT_TASK_VERSION',
7365                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7366     raise;
7367 
7368 END Indent_Task_Version;
7369 
7370 
7371 -- API name                      : Outdent_Task_Version
7372 -- Type                          : Public procedure
7373 -- Pre-reqs                      : None
7374 -- Return Value                  : N/A
7375 -- Prameters
7376 -- p_api_version          IN    NUMBER  N   Not Null    1.0
7377 -- p_init_msg_list  IN  VARCHAR2    N   Not Null    FND_API.TRUE
7378 -- p_commit             IN  VARCHAR2    N   Not Null    FND_API.G_FALSE
7379 -- p_validate_only  IN  VARCHAR2    N   Not Null    FND_API.G_TRUE
7380 -- p_validation_level   IN  NUMBER  N   Null    FND_API.G_VALID_LEVEL_FULL
7381 -- p_calling_module IN  VARCHAR2    N   Null    SELF_SERVICE
7382 -- p_debug_mode       IN    VARCHAR2    N   Null    N
7383 -- p_max_msg_count  IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7384 -- p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7385 -- p_task_version_id    IN  NUMBER  N   Not Null
7386 -- x_return_status  OUT     VARCHAR2    N   Null
7387 -- x_msg_count        OUT   NUMBER  N   Null
7388 -- x_msg_data         OUT   VARCHAR2    N   Null
7389 --
7390 --  History
7391 --
7392 --  23-OCT-01   Andrew Lee             -Created
7393 --
7394 --
7395 
7396 PROCEDURE OUTDENT_TASK_VERSION (
7397  p_api_version            IN    NUMBER   :=1.0,
7398  p_init_msg_list          IN    VARCHAR2 :=FND_API.G_TRUE,
7399  p_commit             IN    VARCHAR2 :=FND_API.G_FALSE,
7400  p_validate_only          IN    VARCHAR2 :=FND_API.G_TRUE,
7401  p_validation_level       IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
7402  p_calling_module         IN    VARCHAR2 :='SELF_SERVICE',
7403  p_debug_mode             IN    VARCHAR2 :='N',
7404  p_max_msg_count          IN    NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7405  p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
7406  p_task_version_id        IN    NUMBER,
7407  p_record_version_number  IN    NUMBER,
7408  x_return_status         OUT    NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
7409  x_msg_count             OUT    NOCOPY NUMBER, --File.Sql.39 bug 4440895
7410  x_msg_data          OUT    NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7411 )
7412 IS
7413 
7414   l_api_name                      CONSTANT VARCHAR(30) := 'OUTDENT_TASK_VERSION';
7415   l_api_version                   CONSTANT NUMBER      := 1.0;
7416 
7417   l_wbs_level                     NUMBER;
7418   l_display_sequence              NUMBER;
7419   l_ref_task_version_id           NUMBER;
7420   l_parent_structure_version_id   NUMBER;
7421 
7422   l_return_status            VARCHAR2(1);
7423   l_msg_count                NUMBER;
7424   l_msg_data                 VARCHAR2(250);
7425   l_data                     VARCHAR2(250);
7426   l_msg_index_out            NUMBER;
7427 
7428   l_project_id                  NUMBER;
7429   l_ref_task_id                 NUMBER;
7430   l_task_id                     NUMBER;
7431   l_task_record_version_number  NUMBER;
7432   l_wbs_record_version_number   NUMBER;
7433   l_dummy_char                  VARCHAR2(1);
7434   l_published_version           VARCHAR2(1);
7435   l_structure_id                NUMBER;
7436 
7437 --hsiu
7438 --added for advanced structure - versioning
7439     l_versioned    VARCHAR2(1) := 'N';
7440     l_shared       VARCHAR2(1) := 'N';
7441 --end changes
7442 
7443     CURSOR cur_struc_type( c_structure_id NUMBER )
7444     IS
7445       SELECT 'Y'
7446         FROM pa_proj_structure_types ppst
7447             ,pa_structure_types pst
7448        WHERE ppst.proj_element_id = c_structure_id
7449          AND ppst.structure_type_id = pst.structure_type_id
7450          AND pst.structure_type_class_code IN( 'FINANCIAL' );
7451 
7452     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
7453       select 'Y'
7454         from pa_proj_elem_ver_structure
7455        where proj_element_id = c_structure_id
7456          AND project_id = c_project_id
7457          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
7458 
7459 --hsiu added, for dates rollup
7460    CURSOR get_peer_tasks
7461    IS
7462      select b.object_id_to1 object_id_to1
7463        from pa_object_relationships a,
7464             pa_object_relationships b
7465       where a.object_id_to1 = p_task_version_id
7466         and a.object_type_to = 'PA_TASKS'
7467         and a.object_id_from1 = b.object_id_from1
7468         and a.object_type_from = b.object_type_from
7469         and b.object_type_to = 'PA_TASKS'
7470         and b.object_id_to1 <> p_task_version_id;
7471    c_get_peer_tasks get_peer_tasks%ROWTYPE;
7472 
7473 --Hsiu added, for dates rollup
7474   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
7475 --hsiu added, for task status
7476   l_rollup_task_id NUMBER;
7477 
7478 --hsiu added for task status
7479   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
7480     select object_id_from1
7481       from pa_object_relationships
7482      where object_id_to1 = c_elem_ver_id
7483        and object_type_to = 'PA_TASKS'
7484        and relationship_type = 'S';
7485   l_parent_ver_id NUMBER;
7486   l_error_msg_code VARCHAR2(30);
7487 BEGIN
7488   pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_TASK_VERSION');
7489 
7490   IF (p_debug_mode = 'Y') THEN
7491     pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION begin');
7492   END IF;
7493 
7494   IF (p_commit = FND_API.G_TRUE) THEN
7495     savepoint outdent_task_version;
7496   END IF;
7497 
7498   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
7499     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7500   END IF;
7501 
7502   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
7503     FND_MSG_PUB.initialize;
7504   END IF;
7505 
7506 --hsiu
7507 --added on 08-JAN-2002
7508 --check if task are linked task
7509   IF (p_structure_version_id IS NOT NULL) AND
7510        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7511     IF ('N' = pa_proj_elements_utils.check_task_in_structure(
7512           p_structure_version_id,
7513           p_task_version_id)) THEN
7514       --deleting linked task. Error
7515       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
7516     END IF;
7517 
7518     l_msg_count := FND_MSG_PUB.count_msg;
7519     if l_msg_count > 0 then
7520       x_msg_count := l_msg_count;
7521       if x_msg_count = 1 then
7522         pa_interface_utils_pub.get_messages
7523         (p_encoded         => FND_API.G_TRUE,
7524          p_msg_index      => 1,
7525          p_msg_count      => l_msg_count,
7526          p_msg_data       => l_msg_data,
7527          p_data           => l_data,
7528          p_msg_index_out  => l_msg_index_out);
7529         x_msg_data := l_data;
7530       end if;
7531       raise FND_API.G_EXC_ERROR;
7532     end if;
7533   END IF;
7534 
7535 --hsiu added, for dates rollup
7536 --need to get peer task before it has been outdented.
7537   OPEN get_peer_tasks;
7538   LOOP
7539     FETCH get_peer_tasks INTO c_get_peer_tasks;
7540     EXIT WHEN get_peer_tasks%NOTFOUND;
7541     l_tasks_ver_ids.extend;
7542     l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
7543 --added for task status rollup
7544     l_rollup_task_id := c_get_peer_tasks.object_id_to1;
7545   END LOOP;
7546   CLOSE get_peer_tasks;
7547 
7548 
7549   SELECT wbs_level, display_sequence, parent_structure_version_id
7550   INTO l_wbs_level, l_display_sequence, l_parent_structure_version_id
7551   FROM PA_PROJ_ELEMENT_VERSIONS
7552   WHERE element_version_id = p_task_version_id;
7553 
7554   if l_wbs_level = 1 then
7555     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
7556                          ,p_msg_name       => 'PA_PS_CANNOT_OUTDENT');
7557   end if;
7558 
7559   l_msg_count := FND_MSG_PUB.count_msg;
7560   if l_msg_count > 0 then
7561     x_msg_count := l_msg_count;
7562     if x_msg_count = 1 then
7563       pa_interface_utils_pub.get_messages
7564       (p_encoded        => FND_API.G_TRUE,
7565        p_msg_index      => 1,
7566        p_msg_count      => l_msg_count,
7567        p_msg_data       => l_msg_data,
7568        p_data           => l_data,
7569        p_msg_index_out  => l_msg_index_out);
7570       x_msg_data := l_data;
7571     end if;
7572     raise FND_API.G_EXC_ERROR;
7573   end if;
7574 
7575   --get the reference task version of p_task_version_id
7576   SELECT element_version_id
7577   INTO l_ref_task_version_id
7578   FROM PA_PROJ_ELEMENT_VERSIONS
7579   WHERE wbs_level = l_wbs_level - 1
7580   AND   object_type = 'PA_TASKS'
7581   AND   parent_structure_version_id = l_parent_structure_version_id
7582   AND   display_sequence < l_display_sequence
7583   AND   display_sequence =
7584         (SELECT max(display_sequence)
7585          FROM PA_PROJ_ELEMENT_VERSIONS
7586          WHERE wbs_level = l_wbs_level - 1
7587          AND   object_type = 'PA_TASKS'
7588          AND   parent_structure_version_id = l_parent_structure_version_id
7589          AND   display_sequence < l_display_sequence);
7590 
7591 --hsiu added for task status
7592     --Check if ok to outdent this task
7593     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
7594          p_task_ver_id => p_task_version_id
7595         ,x_return_status      => l_return_status
7596         ,x_error_message_code => l_error_msg_code
7597     );
7598 
7599     IF (l_return_status <> 'Y') THEN
7600         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7601                              p_msg_name => l_error_msg_code);
7602         raise FND_API.G_EXC_ERROR;
7603     END IF;
7604 
7605   OPEN get_parent_version_id(l_ref_task_version_id);
7606   FETCH get_parent_version_id into l_parent_ver_id;
7607   CLOSE get_parent_version_id;
7608   PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
7609          p_parent_task_ver_id => l_parent_ver_id
7610         ,x_return_status      => l_return_status
7611         ,x_error_message_code => l_error_msg_code
7612   );
7613 
7614   IF (l_return_status <> 'Y') THEN
7615     PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
7616                          p_msg_name => l_error_msg_code);
7617     raise FND_API.G_EXC_ERROR;
7618   END IF;
7619 --task status changes ends
7620 
7621 --dbms_output.put_line( 'Before Update_Task_Version ' );
7622 
7623   PA_TASK_PUB1.Update_Task_Version
7624   ( p_validate_only      => FND_API.G_FALSE,
7625     p_ref_task_version_id    => l_ref_task_version_id,
7626     p_peer_or_sub        => 'PEER',
7627     p_task_version_id        => p_task_version_id,
7628     p_record_version_number  => p_record_version_number,
7629     p_action                 => 'OUTDENT',
7630     x_return_status          => l_return_status,
7631     x_msg_count              => l_msg_count,
7632     x_msg_data               => l_msg_data );
7633 
7634   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7635     x_msg_count := FND_MSG_PUB.count_msg;
7636     IF x_msg_count = 1 then
7637       pa_interface_utils_pub.get_messages
7638       (p_encoded        => FND_API.G_TRUE,
7639        p_msg_index      => 1,
7640        p_msg_count      => l_msg_count,
7641        p_msg_data       => l_msg_data,
7642        p_data           => l_data,
7643        p_msg_index_out  => l_msg_index_out);
7644       x_msg_data := l_data;
7645     END IF;
7646     raise FND_API.G_EXC_ERROR;
7647   END IF;
7648 
7649 --dbms_output.put_line( 'Before Update WBS numbers ' );
7650 
7651   -- Update WBS numbers
7652   SELECT parent_structure_version_id
7653   INTO l_parent_structure_version_id
7654   FROM PA_PROJ_ELEMENT_VERSIONS
7655   WHERE element_version_id = p_task_version_id;
7656 
7657   PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
7658   ( p_commit                   => p_commit
7659    ,p_debug_mode               => p_debug_mode
7660    ,p_parent_structure_ver_id  => l_parent_structure_version_id
7661    ,p_task_id                  => p_task_version_id
7662    ,p_display_seq              => l_display_sequence
7663    ,p_action                   => 'OUTDENT'
7664    ,p_parent_task_id           => NULL
7665    ,x_return_status            => l_return_status );
7666 
7667 /*  SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7668     FROM pa_proj_element_versions
7669    WHERE element_version_id =  p_structure_version_id
7670      AND object_type = 'PA_STRUCTURES';*/
7671 
7672   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
7673     FROM pa_proj_element_versions
7674    WHERE element_version_id =  ( Select parent_structure_version_id
7675                                    from pa_proj_element_versions
7676                                   where element_version_id = p_task_version_id )
7677      AND object_type = 'PA_STRUCTURES';
7678 
7679   --Do financial task check
7680   --If financial
7681   OPEN cur_struc_type( l_structure_id );
7682   FETCH cur_struc_type INTO l_dummy_char;
7683   IF cur_struc_type%FOUND
7684   THEN
7685       --If structure has any published versions.
7686       l_published_version := 'N';
7687       OPEN cur_pub_versions( l_structure_id, l_project_id );
7688       FETCH cur_pub_versions INTO l_published_version;
7689       CLOSE cur_pub_versions;
7690 
7691 --hsiu
7692 --changes for versioning
7693       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
7694                                                      l_project_id);
7695       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
7696                                                   l_project_id);
7697       IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y')
7698       OR ((l_published_version = 'Y') AND (l_shared = 'N')) -- Bug # 5064340. -- To accomodate split financial tasks.
7699       THEN
7700 --      IF NVL( l_published_version, 'N' ) = 'N'
7701 --      THEN
7702 --end changes
7703 
7704          SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
7705            INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
7706            FROM PA_TASKS pt,
7707                 pa_proj_elem_ver_structure ppa,
7708                 PA_PROJ_ELEMENT_VERSIONS ppev
7709           WHERE ppev.element_version_id = p_task_version_id
7710             AND ppev.parent_structure_version_id = ppa.element_version_id
7711             AND ppev.project_id = ppa.project_id
7712             AND ppev.proj_element_id = pt.task_id;
7713 
7714          SELECT proj_element_id
7715            INTO l_ref_task_id
7716            FROM PA_PROJ_ELEMENT_VERSIONS
7717           WHERE element_version_id = l_ref_task_version_id;
7718 
7719           SELECT record_version_number INTO l_task_record_version_number
7720             FROM pa_tasks
7721            WHERE task_id = l_task_id
7722              AND project_id = l_project_id;
7723 
7724           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
7725                          p_project_id                        => l_project_id
7726                         ,p_task_id                           => l_task_id
7727                         ,p_edit_mode                         => 'OUTDENT'
7728                         ,p_record_version_number             => l_task_record_version_number
7729                         ,p_wbs_record_version_number         => 1
7730                         ,x_return_status                     => l_return_status
7731                         ,x_msg_count                         => l_msg_count
7732                         ,x_msg_data                          => l_msg_data );
7733       END IF;
7734   END IF;
7735   CLOSE cur_struc_type;
7736 
7737   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
7738     x_msg_count := FND_MSG_PUB.count_msg;
7739     IF x_msg_count = 1 then
7740       pa_interface_utils_pub.get_messages
7741       (p_encoded        => FND_API.G_TRUE,
7742        p_msg_index      => 1,
7743        p_msg_count      => l_msg_count,
7744        p_msg_data       => l_msg_data,
7745        p_data           => l_data,
7746        p_msg_index_out  => l_msg_index_out);
7747       x_msg_data := l_data;
7748     END IF;
7749     raise FND_API.G_EXC_ERROR;
7750   END IF;
7751 
7752 --dbms_output.put_line( 'After Move task ' );
7753 
7754 --Hsiu added for date rollup; workplan only
7755 
7756   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(l_parent_structure_version_id, 'WORKPLAN') = 'Y' then
7757     l_tasks_ver_ids.extend;
7758     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
7759 
7760 --added for task status rollup
7761     IF (l_rollup_task_id IS NULL) THEN
7762       l_rollup_task_id := p_task_version_id;
7763     END IF;
7764 
7765     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
7766                        p_commit => FND_API.G_FALSE,
7767                        p_element_versions => l_tasks_ver_ids,
7768                        x_return_status => l_return_status,
7769                        x_msg_count => l_msg_count,
7770                        x_msg_data => l_msg_data);
7771 
7772      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7773        x_msg_count := FND_MSG_PUB.count_msg;
7774        if x_msg_count = 1 then
7775          pa_interface_utils_pub.get_messages
7776          (p_encoded        => FND_API.G_TRUE,
7777           p_msg_index      => 1,
7778           p_msg_count      => l_msg_count,
7779           p_msg_data       => l_msg_data,
7780           p_data           => l_data,
7781           p_msg_index_out  => l_msg_index_out);
7782           x_msg_data := l_data;
7783        end if;
7784        raise FND_API.G_EXC_ERROR;
7785      end if;
7786 
7787 --hsiu added for task status
7788 --if versioning is off, rollup.
7789      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
7790        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
7791                   p_structure_version_id => p_structure_version_id
7792                  ,p_element_version_id => l_rollup_task_id
7793                  ,x_return_status => l_return_status
7794                  ,x_msg_count => l_msg_count
7795                  ,x_msg_data => l_msg_data
7796        );
7797 
7798        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7799          x_msg_count := FND_MSG_PUB.count_msg;
7800          if x_msg_count = 1 then
7801            pa_interface_utils_pub.get_messages
7802            (p_encoded        => FND_API.G_TRUE,
7803             p_msg_index      => 1,
7804             p_msg_count      => l_msg_count,
7805             p_msg_data       => l_msg_data,
7806             p_data           => l_data,
7807             p_msg_index_out  => l_msg_index_out);
7808             x_msg_data := l_data;
7809          end if;
7810          raise FND_API.G_EXC_ERROR;
7811        end if;
7812      END IF;
7813 
7814 --end task status changes
7815 
7816   END IF;
7817 
7818   x_return_status := FND_API.G_RET_STS_SUCCESS;
7819 
7820   IF (p_commit = FND_API.G_TRUE) THEN
7821     COMMIT;
7822   END IF;
7823 
7824   IF (p_debug_mode = 'Y') THEN
7825     pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION END');
7826   END IF;
7827 
7828 EXCEPTION
7829   when FND_API.G_EXC_ERROR then
7830     if p_commit = FND_API.G_TRUE then
7831       rollback to outdent_task_version;
7832     end if;
7833     x_return_status := FND_API.G_RET_STS_ERROR;
7834   when FND_API.G_EXC_UNEXPECTED_ERROR then
7835     if p_commit = FND_API.G_TRUE then
7836       rollback to outdent_task_version;
7837     end if;
7838     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7839     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
7840                             p_procedure_name => 'OUTDENT_TASK_VERSION',
7841                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7842   when OTHERS then
7843     if p_commit = FND_API.G_TRUE then
7844       rollback to outdent_task_version;
7845     end if;
7846     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7847     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
7848                             p_procedure_name => 'OUTDENT_TASK_VERSION',
7849                             p_error_text     => SUBSTRB(SQLERRM,1,240));
7850     raise;
7851 END Outdent_Task_Version;
7852 
7853 -- API name                      : Create_tasks
7854 -- Type                          : Wrapper Public procedure
7855 -- Pre-reqs                      : None
7856 -- Return Value                  : N/A
7857 -- Prameters
7858 -- p_project_id            IN NUMBER
7859 -- p_ref_task_version_id   IN NUMBER
7860 -- p_structure_id          IN NUMBER
7861 -- p_structure_version_id  IN NUMBER
7862 -- p_outline_level         IN PA_NUM_1000_NUM
7863 -- p_task_number           IN PA_VC_1000_150
7864 -- p_task_name             IN PA_VC_1000_2000
7865 -- p_scheduled_start_date  IN PA_DATE_1000_DATE
7866 -- p_scheduled_finish_date IN PA_DATE_1000_DATE
7867 -- p_task_manager_id       IN PA_NUM_1000_NUM
7868 -- p_task_manager_name     IN PA_VC_1000_150
7869   --FP M Development Changes
7870 -- p_planned_effort              IN              PA_NUM_1000_NUM
7871 -- p_dependencies                IN              PA_VC_1000_4000
7872 -- p_dependency_ids              IN              PA_NUM_1000_NUM
7873 -- p_structure_type              IN              VARCHAR2        :='WORKPLAN'
7874 -- p_financial_flag              IN              VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7875 -- p_resources                   IN              PA_VC_1000_4000
7876 -- p_resource_ids                IN              PA_NUM_1000_NUM
7877 -- p_mapped_task                 IN              PA_VC_1000_4000
7878 -- p_mapped_task_id              IN              PA_NUM_1000_NUM
7879   --End FP M Development Changes
7880 -- x_msg_count             OUT NUMBER
7881 -- x_msg_data              OUT VARCHAR2
7882 -- x_return_status         OUT VARCHAR2
7883 -- x_return_status  OUT     VARCHAR2    N   Null
7884 -- x_msg_count        OUT   NUMBER  N   Null
7885 -- x_msg_data         OUT   VARCHAR2    N   Null
7886 --
7887 --  History
7888 --
7889 --  23-OCT-01   Andrew Lee             -Created
7890 --
7891 --
7892 
7893 PROCEDURE CREATE_TASKS
7894 ( p_project_id            IN NUMBER
7895  ,p_ref_task_version_id   IN NUMBER
7896  ,p_structure_id          IN NUMBER
7897  ,p_structure_version_id  IN NUMBER
7898  ,p_outline_level         IN PA_NUM_1000_NUM
7899  ,p_task_number           IN PA_VC_1000_150
7900  ,p_task_name             IN PA_VC_1000_2000
7901  ,p_scheduled_start_date  IN PA_DATE_1000_DATE
7902  ,p_scheduled_finish_date IN PA_DATE_1000_DATE
7903  ,p_task_manager_id       IN PA_NUM_1000_NUM
7904  ,p_task_manager_name     IN PA_VC_1000_150
7905  ,p_TYPE_ID               IN PA_NUM_1000_NUM
7906   --FP M Development Changes bug 330119
7907  ,p_planned_effort              IN              PA_NUM_1000_NUM
7908  ,p_planned_equip_effort        IN              PA_NUM_1000_NUM
7909  ,p_dependencies                IN              PA_VC_1000_4000
7910  ,p_dependency_ids              IN              PA_NUM_1000_NUM
7911  ,p_structure_type              IN              VARCHAR2        :='WORKPLAN'
7912  ,p_financial_flag              IN              VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7913  ,p_use_in_fin_plan             IN              PA_VC_1000_10
7914  ,p_resources                   IN              PA_VC_1000_4000
7915  ,p_resource_ids                IN              PA_NUM_1000_NUM
7916  ,p_mapped_task                 IN              PA_VC_1000_4000
7917  ,p_mapped_task_id              IN              PA_NUM_1000_NUM
7918   --End FP M Development Changes bug 330119
7919  ,x_msg_count             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7920  ,x_msg_data              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7921  ,x_return_status         OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
7922 IS
7923   i                    NUMBER;
7924   l_msg_count          NUMBER;
7925   l_return_status      VARCHAR2(1);
7926   l_msg_data           VARCHAR2(2000);
7927   l_data               VARCHAR2(2000);
7928   l_msg_index_out      NUMBER;
7929 
7930   l_outline_level      NUMBER;
7931   l_prev_outline_level NUMBER;
7932   l_ref_task_ver_id    NUMBER;
7933   l_peer_or_sub        VARCHAR2(20);
7934   l_task_id            NUMBER;
7935   l_task_version_id    NUMBER;
7936   API_ERROR            EXCEPTION;
7937 
7938   TYPE reference_tasks IS TABLE OF NUMBER
7939        INDEX BY BINARY_INTEGER;
7940 
7941   -- This table stores reference task version IDs for a particular outline
7942   -- level. This provides a lookup to find the last task version created
7943   -- at that level.
7944   l_outline_task_ref reference_tasks;
7945   l_pev_schedule_id  NUMBER;
7946   l_ref_proj_eleme_id NUMBER;
7947 
7948   CURSOR cur_ref_proj_elem_id( p_ref_task_ver_id NUMBER )
7949   IS
7950     SELECT proj_element_id
7951       FROM pa_proj_element_versions
7952      WHERE element_version_id = p_ref_task_ver_id
7953        AND object_type = 'PA_TASKS';
7954 
7955 --Hsiu added for date rollup
7956   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
7957 
7958 -- anlee task weighting
7959   l_top_sub_count NUMBER;
7960 -- anlee End of changes
7961 
7962 -- hsiu added for task version status
7963   CURSOR cur_proj_is_template(c_project_id NUMBER)
7964   IS     select 'Y'
7965            from pa_projects_all
7966           where project_id = c_project_id
7967             and template_flag = 'Y';
7968   l_template_flag VARCHAR2(1);
7969 
7970   l_task_unpub_ver_status_code PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
7971 
7972   CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
7973     select object_id_from1
7974       from pa_object_relationships
7975      where object_id_to1 = c_elem_ver_id
7976        and object_type_to = 'PA_TASKS'
7977        and relationship_type = 'S';
7978   l_parent_ver_id NUMBER;
7979   l_error_msg_code VARCHAR2(30);
7980 --end task version status changes
7981 
7982     l_versioned    VARCHAR2(1) := 'N';
7983     l_shared       VARCHAR2(1) := 'N';
7984     l_published_ver_exists  VARCHAR2(1);
7985     l_wp_process_flag    VARCHAR2(1);
7986 --bug 3053281
7987   l_wp_type              VARCHAR2(1);
7988   l_weighting_basis_Code VARCHAR2(30);
7989 --end bug 3053281
7990 
7991   CURSOR get_base_ref_obj_type IS
7992     select object_type
7993       from pa_proj_element_versions
7994      where element_version_id = p_ref_task_version_id;
7995   l_ref_obj_type VARCHAR2(30);
7996 
7997   -- Added for FP_M changes : Bug 3305199 : Bhumesh
7998     l_Share_Code          VARCHAR2(30);
7999     l_Financial_Flag      VARCHAR2(1) := 'N';
8000 
8001 --bug 3301192
8002   /* Bug #: 3305199 SMukka                                                         */
8003   /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
8004   /* l_task_ver_ids              PA_PLSQL_DATATYPES.IdTabTyp;                      */
8005   l_task_ver_ids              SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
8006 
8007 BEGIN
8008 
8009   --Clear Error Messages.
8010   FND_MSG_PUB.initialize;
8011 
8012   savepoint create_tasks;
8013 
8014   if p_project_id is null then
8015     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8016                          ,p_msg_name       => 'PA_NO_PROJECT_ID');
8017   end if;
8018 
8019   if p_ref_task_version_id is null then
8020     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8021                          ,p_msg_name       => 'PA_NO_TASK_VERSION_ID');
8022   end if;
8023 
8024   if p_structure_version_id is null then
8025     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8026                          ,p_msg_name       => 'PA_NO_STRUCTURE_VERSION_ID');
8027   end if;
8028 
8029   l_msg_count := FND_MSG_PUB.count_msg;
8030   if l_msg_count > 0 then
8031     x_msg_count := l_msg_count;
8032     if x_msg_count = 1 then
8033       pa_interface_utils_pub.get_messages
8034       (p_encoded        => FND_API.G_TRUE,
8035        p_msg_index      => 1,
8036        p_msg_count      => l_msg_count,
8037        p_msg_data       => l_msg_data,
8038        p_data           => l_data,
8039        p_msg_index_out  => l_msg_index_out);
8040       x_msg_data := l_data;
8041     end if;
8042     raise API_ERROR;
8043   end if;
8044 
8045 --bug 3053281 --set flag if not (manual and workplan only)
8046   l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
8047   l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
8048 
8049 --bug 3010538
8050 --Added the following lines to cache versioning and sharing information
8051   l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
8052                                                      p_project_id);
8053   l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
8054                                                   p_project_id);
8055   --check whether there exists any published version.
8056   l_published_ver_exists := PA_PROJECT_STRUCTURE_UTILS.CHECK_PUBLISHED_VER_EXISTS( p_project_id, p_structure_id );
8057 --end bug 3010538
8058   --3035902: process update flag changes
8059   l_wp_process_flag := 'N';
8060   --3035902: end process update flag changes
8061 
8062   l_outline_task_ref(0) := p_ref_task_version_id;
8063   l_prev_outline_level := NULL;
8064 
8065   -- anlee task weighting
8066   l_top_sub_count := 0;
8067   -- anlee End of changes
8068 
8069   --hsiu: added for task version status
8070   OPEN cur_proj_is_template(p_project_id);
8071   FETCH cur_proj_is_template into l_template_flag;
8072   IF cur_proj_is_template%NOTFOUND THEN
8073     l_template_flag := 'N';
8074   END IF;
8075   CLOSE cur_proj_is_template;
8076   --added for task version status
8077 
8078   --added for bug 3125370
8079   OPEN get_base_ref_obj_type;
8080   FETCH get_base_ref_obj_type into l_ref_obj_type;
8081   CLOSE get_base_ref_obj_type;
8082   --bug 3125370
8083 
8084   -- Added for FP_M changes. Tracking Bug 3305199
8085     l_financial_flag := 'N';
8086 
8087   for i in 1..1000 LOOP
8088     if p_outline_level(i) is null AND p_task_name(i) IS NOT NULL AND p_task_number(i) IS NOT NULL then
8089       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8090                            ,p_msg_name       => 'PA_PS_TSK_WBS_LVL_ERR');
8091       x_msg_count := 1;
8092       pa_interface_utils_pub.get_messages
8093           (p_encoded        => FND_API.G_TRUE,
8094            p_msg_index      => 1,
8095            p_msg_count      => l_msg_count,
8096            p_msg_data       => l_msg_data,
8097            p_data           => l_data,
8098            p_msg_index_out  => l_msg_index_out);
8099            x_msg_data := l_data;
8100       raise API_ERROR;
8101     end if;
8102 
8103     if p_outline_level(i) is null then
8104       exit;
8105     end if;
8106 
8107     l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id);
8108     -- Added for FP_M changes. Tracking Bug 3305199 : Bhumesh
8109 /*
8110     IF l_Share_Code IN ('SHARE_FULL', 'SHARE_PARTIAL') then
8111        If P_Structure_Type = 'FINANCIAL' THEN
8112       l_Financial_Flag := 'N';
8113        Else
8114       l_Financial_Flag := 'Y';
8115        End If;
8116 
8117        If P_Structure_Type = 'WORKPLAN' THEN
8118           IF l_Share_Code = 'SHARE_PARTIAL' then
8119          l_Financial_Flag := 'N';
8120           Else
8121          l_Financial_Flag := 'Y';
8122           End If;
8123        End If;
8124     End IF;
8125 */
8126    IF l_shared = 'Y'
8127    THEN
8128        If P_Structure_Type = 'WORKPLAN' AND
8129           l_Share_Code = 'SHARE_PARTIAL' then
8130           l_Financial_Flag := 'N';
8131        Else
8132          l_Financial_Flag := 'Y';
8133        End If;
8134 
8135    ELSE
8136        If P_Structure_Type = 'WORKPLAN' THEN
8137           l_Financial_Flag := 'N';
8138        Else
8139           l_Financial_Flag := 'Y';
8140        End If;
8141     End IF;
8142     -- End of FP_M changes
8143 
8144     --bug 3125370: add condition for reference object_type
8145     if (instr(to_char(p_outline_level(i)), '.') <> 0) OR
8146        (l_ref_obj_type = 'PA_STRUCTURES' and p_outline_level(i) = 0) then
8147       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8148                            ,p_msg_name       => 'PA_PS_OUTLINE_LEVEL_INVALID');
8149 
8150       x_msg_count := 1;
8151       pa_interface_utils_pub.get_messages
8152       (p_encoded        => FND_API.G_TRUE,
8153        p_msg_index      => 1,
8154        p_msg_count      => l_msg_count,
8155        p_msg_data       => l_msg_data,
8156        p_data           => l_data,
8157        p_msg_index_out  => l_msg_index_out);
8158        x_msg_data := l_data;
8159       raise API_ERROR;
8160     end if;
8161 
8162     l_outline_level := p_outline_level(i);
8163 
8164     if l_prev_outline_level is not null then
8165       if l_outline_level > l_prev_outline_level then
8166         if (l_outline_level - l_prev_outline_level) > 1 then
8167           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8168                                ,p_msg_name       => 'PA_PS_OUTLINE_LEVEL_INVALID');
8169 
8170           x_msg_count := 1;
8171           pa_interface_utils_pub.get_messages
8172           (p_encoded        => FND_API.G_TRUE,
8173            p_msg_index      => 1,
8174            p_msg_count      => l_msg_count,
8175            p_msg_data       => l_msg_data,
8176            p_data           => l_data,
8177            p_msg_index_out  => l_msg_index_out);
8178            x_msg_data := l_data;
8179           raise API_ERROR;
8180         end if;
8181 
8182         l_ref_task_ver_id := l_outline_task_ref(l_prev_outline_level);
8183         l_peer_or_sub := 'SUB';
8184       else
8185         l_ref_task_ver_id := l_outline_task_ref(l_outline_level);
8186         l_peer_or_sub := 'PEER';
8187       end if;
8188     else
8189       -- First task to insert
8190       if l_outline_level not in (0, 1) then
8191         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
8192                              ,p_msg_name       => 'PA_PS_OUTLINE_LEVEL_INVALID');
8193 
8194         x_msg_count := 1;
8195         pa_interface_utils_pub.get_messages
8196         (p_encoded        => FND_API.G_TRUE,
8197          p_msg_index      => 1,
8198          p_msg_count      => l_msg_count,
8199          p_msg_data       => l_msg_data,
8200          p_data           => l_data,
8201          p_msg_index_out  => l_msg_index_out);
8202          x_msg_data := l_data;
8203         raise API_ERROR;
8204       end if;
8205 
8206       l_ref_task_ver_id := l_outline_task_ref(0);
8207       if l_outline_level = 0 then
8208         l_peer_or_sub := 'PEER';
8209       else
8210         l_peer_or_sub := 'SUB';
8211       end if;
8212     end if;
8213 
8214 --my_error_msg( 'before PA_TASK_PUB1.CREATE_TASK' );
8215 
8216     OPEN cur_ref_proj_elem_id( l_ref_task_ver_id );
8217     FETCH cur_ref_proj_elem_id INTO l_ref_proj_eleme_id;   --For ref task id
8218     CLOSE cur_ref_proj_elem_id;
8219 
8220 --my_error_msg( 'Ref Task Id in CREATE_TASKS'||l_ref_proj_eleme_id );
8221 
8222     --hsiu added for task status
8223     --check if ok to create subtask
8224 
8225 /*  --commented; validation done in private api
8226 
8227     IF (l_peer_or_sub = 'PEER') THEN
8228       OPEN get_parent_version_id(l_ref_task_ver_id);
8229       FETCH get_parent_version_id into l_parent_ver_id;
8230       CLOSE get_parent_version_id;
8231       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
8232          p_parent_task_ver_id => l_parent_ver_id
8233         ,x_return_status      => l_return_status
8234         ,x_error_message_code => l_error_msg_code
8235       );
8236 
8237       IF (l_return_status <> 'Y') THEN
8238         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8239                              p_msg_name => l_error_msg_code);
8240         raise API_ERROR;
8241       END IF;
8242     ELSE
8243       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
8244          p_parent_task_ver_id => l_ref_task_ver_id
8245         ,x_return_status      => l_return_status
8246         ,x_error_message_code => l_error_msg_code
8247       );
8248 
8249       IF (l_return_status <> 'Y') THEN
8250         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
8251                              p_msg_name => l_error_msg_code);
8252         raise API_ERROR;
8253       END IF;
8254     END IF;
8255 */
8256     --end task status changes
8257 
8258     -- CREATE_TASK
8259    l_task_id := NULL;
8260 
8261    --3035902: process update flag changes
8262    IF (l_wp_process_flag = 'N') THEN
8263      --may need to update process flag
8264      IF ((l_shared = 'N') AND
8265          (l_wp_type = 'Y')) THEN
8266        --split and workplan; only update if progressable task added
8267        l_wp_process_flag := 'Y';
8268      ELSIF ((l_shared = 'N') AND
8269             (l_wp_type = 'N')) THEN
8270        --split and financial; update
8271        l_wp_process_flag := 'Y';
8272      ELSIF (l_shared = 'Y') THEN
8273        l_wp_process_flag := 'Y';
8274      END IF;
8275    END IF;
8276    --3035902: end process update flag changes
8277 
8278    PA_TASK_PUB1.CREATE_TASK
8279    ( p_validate_only          => FND_API.G_FALSE
8280     ,p_object_type            => 'PA_TASKS'
8281     ,p_project_id             => p_project_id
8282     ,p_ref_task_id            => l_ref_proj_eleme_id
8283     ,p_peer_or_sub            => l_peer_or_sub
8284     ,p_structure_id           => p_structure_id
8285     ,p_structure_version_id    => p_structure_version_id
8286     ,p_task_number            => p_task_number(i)
8287     ,p_task_name              => p_task_name(i)
8288     ,p_task_manager_id        => p_task_manager_id(i)
8289     ,p_task_manager_name      => p_task_manager_name(i)
8290     ,p_scheduled_start_date   => p_scheduled_start_date(i)--Changed in BUG fix 3927343
8291     ,p_scheduled_finish_date  => p_scheduled_finish_date(i)--Changed in BUG fix 3927343
8292     ,p_TYPE_ID                => p_TYPE_ID  (i)
8293     ,p_structure_type         => p_structure_type
8294     ,x_task_id                => l_task_id
8295     ,x_return_status          => l_return_status
8296     ,x_msg_count              => l_msg_count
8297     ,x_msg_data               => l_msg_data);
8298 
8299    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8300      x_msg_count := FND_MSG_PUB.count_msg;
8301      if x_msg_count = 1 then
8302        pa_interface_utils_pub.get_messages
8303        (p_encoded        => FND_API.G_TRUE,
8304         p_msg_index      => 1,
8305         p_msg_count      => l_msg_count,
8306         p_msg_data       => l_msg_data,
8307         p_data           => l_data,
8308         p_msg_index_out  => l_msg_index_out);
8309         x_msg_data := l_data;
8310      end if;
8311      raise API_ERROR;
8312    end if;
8313 
8314 --my_error_msg( 'before PA_TASK_PUB1.CREATE_TASK_VERSION' );
8315 
8316 /* commented out because flag value is set before create task
8317 --bug 3010538
8318 IF (l_shared = 'N') AND
8319    (l_wp_type = 'Y') AND
8320    (l_weighting_basis_Code = 'MANUAL') THEN
8321   --do not set the flag to 'Y'
8322   NULL;
8323 ELSE
8324 */
8325   --3035902: process update flag changes
8326   --set the flag if flag is Y; otherwise keep current value
8327   --Bug No 3450684 SMukka Commented if condition
8328   --IF l_wp_process_flag = 'Y' THEN
8329    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
8330    (
8331       p_calling_context       => 'SELF_SERVICE'
8332      ,p_project_id            => p_project_id
8333      ,p_structure_version_id  => p_structure_version_id
8334      ,p_update_wbs_flag       => l_wp_process_flag
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 FND_API.G_EXC_ERROR;
8352    end if;
8353   --END IF;
8354   --3035902: end process update flag changes
8355 
8356   --ideally the following calls should have been cached. but due to time constraints
8357   --we need to write the code this way in multiple places.
8358   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
8359    THEN
8360        IF ( l_versioned = 'N' ) OR
8361           ( l_shared = 'N' ) OR    --This wont happen bcoz for adding tasks to a financial structure we dont use this api
8362           ( l_versioned = 'Y' AND l_shared = 'Y' AND l_published_ver_exists = 'N' )THEN
8363        --create_tasks
8364        pa_fp_refresh_elements_pub.set_process_flag_proj(
8365              p_project_id               => p_project_id
8366             ,p_request_id               => null
8367             ,p_process_code             => null
8368             ,p_refresh_required_flag    => 'Y'
8369             ,x_return_status            => l_return_status
8370             ,x_msg_count                => l_msg_count
8371             ,x_msg_data                 => l_msg_data );
8372 
8373         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8374            x_msg_count := FND_MSG_PUB.count_msg;
8375            if x_msg_count = 1 then
8376              pa_interface_utils_pub.get_messages
8377             (p_encoded        => FND_API.G_TRUE,
8378              p_msg_index      => 1,
8379              p_msg_count      => l_msg_count,
8380              p_msg_data       => l_msg_data,
8381              p_data           => l_data,
8382              p_msg_index_out  => l_msg_index_out);
8383              x_msg_data := l_data;
8384            end if;
8385            raise FND_API.G_EXC_ERROR;
8386         end if;
8387      END IF;
8388    END IF;
8389 
8390 
8391 --End bug 3010538
8392 
8393 --hsiu: task version status changes
8394    IF (l_template_flag = 'N') THEN
8395           --check if structure is shared
8396           --  if shared, check if versioned
8397           --    'WORKING' if versioned; 'PUBLISHED' if not
8398           --  if split, check if 'FINANCIAL'
8399           --    'PUBLISHED' if financial
8400           --    check if versioned
8401           --    'WORKING' if versioend; 'PUBLISHED' if not
8402 --     IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id)) THEN
8403 --       IF ('Y' = PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(p_project_id)) THEN --Replaced these line with the following for performance.
8404 --Code added for bug 3010538 also does the same check.
8405      IF ('Y' = l_shared) THEN
8406        IF ('Y' = l_versioned) THEN
8407 
8408          l_task_unpub_ver_status_code := 'WORKING';
8409        ELSE
8410          l_task_unpub_ver_status_code := 'PUBLISHED';
8411        END IF;
8412      ELSE --split
8413        IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(p_structure_id, 'FINANCIAL')  AND
8414            'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(p_structure_id, 'WORKPLAN')) THEN
8415          l_task_unpub_ver_status_code := 'PUBLISHED';
8416        ELSE --workplan only
8417           --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.
8418           IF ('Y' = l_versioned) THEN
8419            l_task_unpub_ver_status_code := 'WORKING';
8420          ELSE
8421            l_task_unpub_ver_status_code := 'PUBLISHED';
8422          END IF;
8423        END IF;
8424      END IF;
8425    ELSE
8426      l_task_unpub_ver_status_code := 'WORKING';
8427    END IF;
8428 --end task version status changes
8429 
8430 
8431    --CREATE_TASK_VERSION
8432    PA_TASK_PUB1.CREATE_TASK_VERSION
8433    ( p_validate_only        => FND_API.G_FALSE
8434     ,p_ref_task_version_id  => l_ref_task_ver_id
8435     ,p_peer_or_sub          => l_peer_or_sub
8436     ,p_task_id              => l_task_id
8437     ,p_TASK_UNPUB_VER_STATUS_CODE => l_task_unpub_ver_status_code
8438     ,p_financial_task_flag  => l_Financial_Flag
8439     ,x_task_version_id      => l_task_version_id
8440     ,x_return_status        => l_return_status
8441     ,x_msg_count            => l_msg_count
8442     ,x_msg_data             => l_msg_data);
8443 
8444    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8445      x_msg_count := FND_MSG_PUB.count_msg;
8446      if x_msg_count = 1 then
8447        pa_interface_utils_pub.get_messages
8448        (p_encoded        => FND_API.G_TRUE,
8449         p_msg_index      => 1,
8450         p_msg_count      => l_msg_count,
8451         p_msg_data       => l_msg_data,
8452         p_data           => l_data,
8453         p_msg_index_out  => l_msg_index_out);
8454         x_msg_data := l_data;
8455      end if;
8456      raise API_ERROR;
8457    end if;
8458 
8459 
8460 --Hsiu added
8461 --inherit task type
8462    PA_TASK_PVT1.Inherit_task_type_attr(
8463                 p_task_id => l_task_id
8464                ,p_task_version_id => l_task_version_id
8465                ,x_return_status => l_return_status
8466                ,x_msg_count => l_msg_count
8467                ,x_msg_data => l_msg_data
8468    );
8469 
8470    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8471      x_msg_count := FND_MSG_PUB.count_msg;
8472      if x_msg_count = 1 then
8473        pa_interface_utils_pub.get_messages
8474        (p_encoded        => FND_API.G_TRUE,
8475         p_msg_index      => 1,
8476         p_msg_count      => l_msg_count,
8477         p_msg_data       => l_msg_data,
8478         p_data           => l_data,
8479         p_msg_index_out  => l_msg_index_out);
8480         x_msg_data := l_data;
8481      end if;
8482      raise API_ERROR;
8483    end if;
8484 --end inherit task type
8485 
8486 --my_error_msg( 'before PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION' );
8487 --Changes for 8566495 anuragag
8488 --We will create record in pa_proj_elem_ver_schedules now for tasks created via change management flow.
8489 -- PA_TASK_PVT1.G_CHG_DOC_CNTXT will be equal to 1 only when the task is created via CD flow.
8490    if (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' OR PA_TASK_PVT1.G_CHG_DOC_CNTXT = 1) then
8491      PA_TASK_PUB1.CREATE_SCHEDULE_VERSION
8492      ( p_validate_only           => FND_API.G_FALSE
8493       ,p_element_version_id      => l_task_version_id
8494       ,p_scheduled_start_date    => nvl(p_scheduled_start_date(i), sysdate)
8495       ,p_scheduled_end_date      => nvl(p_scheduled_finish_date(i),nvl(p_scheduled_start_date(i), sysdate))
8496       ,p_planned_effort          => p_planned_effort(i)
8497       ,p_Planned_Equip_Effort    => p_planned_equip_effort(i)
8498       ,x_pev_schedule_id         => l_pev_schedule_id
8499       ,x_return_status           => l_return_status
8500       ,x_msg_count           => l_msg_count
8501       ,x_msg_data            => l_msg_data );
8502 
8503      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8504        x_msg_count := FND_MSG_PUB.count_msg;
8505        if x_msg_count = 1 then
8506          pa_interface_utils_pub.get_messages
8507          (p_encoded        => FND_API.G_TRUE,
8508           p_msg_index      => 1,
8509           p_msg_count      => l_msg_count,
8510           p_msg_data       => l_msg_data,
8511           p_data           => l_data,
8512           p_msg_index_out  => l_msg_index_out);
8513           x_msg_data := l_data;
8514        end if;
8515        raise API_ERROR;
8516      end if;
8517 
8518 -- Hsiu added for date rollup; workplan only
8519      l_tasks_ver_ids.extend;
8520      l_tasks_ver_ids(l_tasks_ver_ids.count) := l_task_version_id;
8521 	 --anuragag bug 8566495 - we will validate the task start and end date
8522 	PA_TASKS_MAINT_UTILS.check_start_date(
8523 											p_project_id =>  p_project_id,
8524 											p_parent_task_id => NULL,
8525 											p_task_id => l_task_id,
8526 											p_start_date => p_scheduled_start_date(i),
8527 											x_return_status =>l_return_status,
8528 											x_msg_count =>l_msg_count,
8529 											x_msg_data =>l_msg_data);
8530 
8531 
8532 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8533       l_msg_count := 1;
8534 	  x_msg_data := l_msg_data;
8535       if l_msg_count = 1 then
8536          pa_interface_utils_pub.get_messages
8537          (p_encoded        => FND_API.G_TRUE,
8538           p_msg_index      => 1,
8539           p_msg_count      => l_msg_count,
8540           p_msg_data       => l_msg_data,
8541           p_data           => l_data,
8542           p_msg_index_out  => l_msg_index_out);
8543           --x_msg_data := l_data;
8544 		  x_msg_count := 1;
8545 		  FND_MESSAGE.SET_NAME('PA',x_msg_data);
8546 		  --FND_MESSAGE.GET_ENCODED := x_msg_data;
8547 		  FND_MSG_PUB.ADD;
8548        end if;
8549 
8550 
8551       raise API_ERROR;
8552     END IF;
8553 
8554 	PA_TASKS_MAINT_UTILS.check_end_date(
8555 											p_project_id =>  p_project_id,
8556 											p_parent_task_id => NULL,
8557 											p_task_id => l_task_id,
8558 											p_end_date => p_scheduled_finish_date(i),
8559 											x_return_status =>l_return_status,
8560 											x_msg_count =>l_msg_count,
8561 											x_msg_data =>l_msg_data);
8562 
8563 
8564 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
8565       l_msg_count := 1;
8566 	  x_msg_data := l_msg_data;
8567       if l_msg_count = 1 then
8568          pa_interface_utils_pub.get_messages
8569          (p_encoded        => FND_API.G_TRUE,
8570           p_msg_index      => 1,
8571           p_msg_count      => l_msg_count,
8572           p_msg_data       => l_msg_data,
8573           p_data           => l_data,
8574           p_msg_index_out  => l_msg_index_out);
8575           --x_msg_data := l_data;
8576 		  x_msg_count:=1;
8577 		  FND_MESSAGE.SET_NAME('PA',x_msg_data);
8578 		  --FND_MESSAGE.GET_ENCODED := x_msg_data;
8579 		  FND_MSG_PUB.ADD;
8580        end if;
8581       raise API_ERROR;
8582     END IF;
8583 
8584 	--end anuragag changes for 8566495
8585 
8586    end if;
8587 
8588 
8589    -- anlee task weighting
8590    if l_outline_level = 1 then
8591      l_top_sub_count := l_top_sub_count + 1;
8592    end if;
8593    -- anlee End of changes
8594 
8595    l_outline_task_ref(l_outline_level) := l_task_version_id;
8596    l_prev_outline_level := l_outline_level;
8597   end LOOP;
8598 
8599 
8600   --bug 3301192 call the budgets apis
8601   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. */
8602      PA_TASK_PUB1.call_add_planning_txns(
8603          p_tasks_ver_ids                  => l_tasks_ver_ids,
8604          p_planned_effort                 => p_planned_effort,
8605          p_project_id                     => p_project_id,
8606          p_structure_version_id           => p_structure_version_id,
8607          p_start_date                     => p_scheduled_start_date,
8608          p_end_date                       => p_scheduled_finish_date,
8609          x_return_status                  => l_return_status,
8610          x_msg_count                      => l_msg_count,
8611          x_msg_data                       => l_msg_data
8612       );
8613 
8614      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8615        x_msg_count := FND_MSG_PUB.count_msg;
8616        if x_msg_count = 1 then
8617          pa_interface_utils_pub.get_messages
8618          (p_encoded        => FND_API.G_TRUE,
8619           p_msg_index      => 1,
8620           p_msg_count      => l_msg_count,
8621           p_msg_data       => l_msg_data,
8622           p_data           => l_data,
8623           p_msg_index_out  => l_msg_index_out);
8624           x_msg_data := l_data;
8625        end if;
8626        raise API_ERROR;
8627      end if;
8628 
8629      --now call call delete planning for reference task version id.
8630      IF (p_ref_task_version_id <> p_structure_version_id) AND
8631         (p_outline_level(1) > 0)
8632      THEN
8633        l_task_ver_ids.extend(1); /* Venky */
8634        l_task_ver_ids(1) := p_ref_task_version_id;
8635        /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
8636        /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
8637        DECLARE
8638            --p1 bug 3888432
8639            l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
8640            CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
8641              SELECT resource_assignment_id
8642                FROM pa_resource_assignments
8643               WHERE wbs_element_Version_id = c_task_ver_id
8644                 AND ta_display_flag = 'N';
8645            l_assign_id    NUMBER := NULL;
8646        BEGIN
8647            OPEN get_assignment_id(p_ref_task_version_id);
8648            FETCH get_assignment_id into l_assign_id;
8649            CLOSE get_assignment_id;
8650 
8651            IF (l_assign_id IS NOT NULL) THEN
8652              l_assign_ids.extend(1);
8653              l_assign_ids(1) := l_assign_id;
8654              pa_fp_planning_transaction_pub.delete_planning_transactions
8655              (
8656               p_context                      => 'WORKPLAN'
8657              ,p_task_or_res                  => 'ASSIGNMENT'
8658              --,p_element_version_id_tbl       => l_task_ver_ids
8659              ,p_resource_assignment_tbl => l_assign_ids
8660              ,x_return_status                => l_return_status
8661              ,x_msg_count                    => l_msg_count
8662              ,x_msg_data                     => l_msg_data
8663              );
8664            END IF;
8665        EXCEPTION
8666            WHEN OTHERS THEN
8667                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_STRUCTURE_TASK_PUB',
8668                                         p_procedure_name => 'CREATE_TASKS',
8669                                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
8670            RAISE API_ERROR;
8671        END;
8672      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8673        x_msg_count := FND_MSG_PUB.count_msg;
8674        if x_msg_count = 1 then
8675          pa_interface_utils_pub.get_messages
8676          (p_encoded        => FND_API.G_TRUE,
8677           p_msg_index      => 1,
8678           p_msg_count      => l_msg_count,
8679           p_msg_data       => l_msg_data,
8680           p_data           => l_data,
8681           p_msg_index_out  => l_msg_index_out);
8682           x_msg_data := l_data;
8683        end if;
8684        raise API_ERROR;
8685      end if;
8686      END IF;  --<<p_ref_task_version_id<>p_structure_version_id)
8687 
8688   end if;
8689 
8690   --bug 3301192 call the budgets apis
8691 
8692 --Hsiu added for date rollup; workplan only
8693 
8694   if PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
8695     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
8696                        p_commit => FND_API.G_FALSE,
8697                        p_element_versions => l_tasks_ver_ids,
8698                        x_return_status => l_return_status,
8699                        x_msg_count => l_msg_count,
8700                        x_msg_data => l_msg_data);
8701 
8702      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8703        x_msg_count := FND_MSG_PUB.count_msg;
8704        if x_msg_count = 1 then
8705          pa_interface_utils_pub.get_messages
8706          (p_encoded        => FND_API.G_TRUE,
8707           p_msg_index      => 1,
8708           p_msg_count      => l_msg_count,
8709           p_msg_data       => l_msg_data,
8710           p_data           => l_data,
8711           p_msg_index_out  => l_msg_index_out);
8712           x_msg_data := l_data;
8713        end if;
8714        raise API_ERROR;
8715      end if;
8716 
8717 --    IF (PA_PROJECT_STRUCTURE_UTILS.check_sharing_enabled(p_project_id) = 'Y') AND
8718 --       (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.
8719     IF (l_shared = 'Y') AND
8720        (l_versioned = 'N')
8721 THEN
8722 
8723       PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
8724                   p_structure_version_id => p_structure_version_id
8725                  ,x_return_status => l_return_status
8726                  ,x_msg_count => l_msg_count
8727                  ,x_msg_data => l_msg_data
8728       );
8729 
8730       IF (l_return_status <> 'S') THEN
8731         x_msg_count := l_msg_count;
8732         x_msg_data := l_msg_data;
8733         RAISE API_ERROR;
8734       END IF;
8735     END IF;
8736 
8737     -- anlee task weighting
8738     PA_TASK_PUB1.Calc_Task_Weights(
8739      p_element_versions => l_tasks_ver_ids
8740     ,p_outline_level    => p_outline_level
8741     ,p_top_sub_count    => l_top_sub_count
8742     ,x_return_status    => l_return_status
8743     ,x_msg_count        => l_msg_count
8744     ,x_msg_data         => l_msg_data );
8745 
8746     if l_return_status <> FND_API.G_RET_STS_SUCCESS then
8747       x_msg_count := FND_MSG_PUB.count_msg;
8748       if x_msg_count = 1 then
8749         pa_interface_utils_pub.get_messages
8750         (p_encoded        => FND_API.G_TRUE,
8751          p_msg_index      => 1,
8752          p_msg_count      => l_msg_count,
8753          p_msg_data       => l_msg_data,
8754          p_data           => l_data,
8755          p_msg_index_out  => l_msg_index_out);
8756          x_msg_data := l_data;
8757       end if;
8758       raise API_ERROR;
8759     end if;
8760     -- anlee end of changes
8761 
8762   END IF;
8763 
8764   x_return_status := FND_API.G_RET_STS_SUCCESS;
8765 EXCEPTION
8766 WHEN API_ERROR THEN
8767   rollback to create_tasks;
8768   x_return_status := FND_API.G_RET_STS_ERROR;
8769 WHEN OTHERS THEN
8770   rollback to create_tasks;
8771   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8772   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_STRUCTURE_TASK_PUB',
8773                           p_procedure_name => 'CREATE_TASKS',
8774                           p_error_text     => SUBSTRB(SQLERRM,1,240));
8775   raise;
8776 END CREATE_TASKS;
8777 
8778 
8779 -- anlee task weighting
8780 -- API name                  : Calc_Task_Weights
8781 -- Type                      : Utility
8782 -- Pre-reqs                  : None
8783 -- Return Value              : N/A
8784 -- Prameters
8785 -- p_commit                IN  VARCHAR2 := FND_API.G_FALSE
8786 -- p_element_versions      IN  PA_NUM_1000_NUM
8787 -- p_outline_level         IN  PA_NUM_1000_NUM
8788 -- p_top_peer_count        IN  NUMBER
8789 -- p_top_sub_count         IN  NUMBER
8790 -- x_msg_count             OUT NUMBER
8791 -- x_msg_data              OUT VARCHAR2
8792 -- x_return_status         OUT VARCHAR2
8793 --
8794 --  History
8795 --
8796 --  17-SEP-02   Andrew Lee             -Created
8797 --
8798 --
8799 
8800 PROCEDURE CALC_TASK_WEIGHTS
8801 ( p_element_versions      IN PA_NUM_1000_NUM
8802  ,p_outline_level         IN PA_NUM_1000_NUM
8803  ,p_top_sub_count         IN NUMBER
8804  ,x_msg_count             OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
8805  ,x_msg_data              OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
8806  ,x_return_status         OUT NOCOPY VARCHAR2 ) --File.Sql.39 bug 4440895
8807 IS
8808   CURSOR get_child_count(c_parent_element_version_id NUMBER)
8809   IS
8810   SELECT count(object_id_to1)
8811   FROM PA_OBJECT_RELATIONSHIPS
8812   WHERE object_id_from1 = c_parent_element_version_id
8813   AND   object_type_to = 'PA_TASKS'
8814   AND   relationship_type = 'S'
8815   AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
8816 
8817   CURSOR get_summed_duration(c_parent_element_version_id NUMBER)
8818   IS
8819   SELECT sum(ppevs.duration)
8820   FROM pa_proj_elem_ver_schedule ppevs,
8821        pa_object_relationships por,
8822        pa_proj_element_versions ppev,
8823        pa_proj_elements ppe,
8824        pa_task_types ptt
8825   WHERE por.object_id_from1 = c_parent_element_version_id
8826   AND   por.object_type_to = 'PA_TASKS'
8827   AND   por.relationship_type = 'S'
8828   AND   por.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8829   AND   por.object_id_to1 = ppevs.element_version_id
8830   AND   por.object_id_to1 = ppev.element_version_id
8831   AND   ppev.proj_element_id = ppe.proj_element_id
8832   AND   ppe.project_id  = ppevs.project_id       /* for bug 2822963 */
8833   AND   ppe.TYPE_ID   = ptt.task_type_id
8834   AND   ptt.object_type = 'PA_TASKS'            /* for bug 3279978 FP M Enhancement */
8835   AND   ptt.prog_entry_enable_flag = 'Y';
8836 
8837   CURSOR get_task_duration(c_element_version_id NUMBER,c_project_id NUMBER)
8838   IS
8839   SELECT duration
8840   FROM pa_proj_elem_ver_schedule
8841   WHERE element_version_id = c_element_version_id
8842   AND   project_id = c_project_id;   /* for bug 2822963 */
8843 
8844   CURSOR get_parent(c_element_version_id NUMBER)
8845   IS
8846   SELECT object_id_from1
8847   FROM pa_object_relationships
8848   WHERE object_id_to1 = c_element_version_id
8849   AND   object_type_to = 'PA_TASKS'
8850   AND   relationship_type = 'S'
8851   AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
8852 
8853   CURSOR check_progress_allowed(c_element_version_id NUMBER)
8854   IS
8855   SELECT ptt.prog_entry_enable_flag, ppe.project_id     /* for bug 2822963 */
8856   FROM   pa_task_types ptt,
8857          pa_proj_element_versions ppev,
8858          pa_proj_elements ppe
8859   WHERE  ppev.element_version_id = c_element_version_id
8860   AND    ppev.proj_element_id = ppe.proj_element_id
8861   AND    ptt.object_type = 'PA_TASKS'            /* for bug 3279978 FP M Enhancement */
8862   AND    ppe.TYPE_ID   = ptt.task_type_id;
8863 
8864   CURSOR get_existing_weights(c_parent_element_version_id NUMBER)
8865   IS
8866   SELECT sum(weighting_percentage)
8867   FROM   PA_OBJECT_RELATIONSHIPS
8868   WHERE  object_id_from1 = c_parent_element_version_id
8869   AND    object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8870   AND    object_type_to = 'PA_TASKS'
8871   AND    relationship_type = 'S';
8872 
8873   -- Bug 3098574. This cursor gives the number of progressible tasks
8874   -- under a parent. This count will be used to pro-rate the task weightage
8875   -- on all the child tasks equally.
8876   CURSOR get_progressible_child_count(c_parent_element_version_id NUMBER)
8877   IS
8878   SELECT count(rel.object_id_to1)
8879   FROM PA_OBJECT_RELATIONSHIPS rel,pa_proj_element_versions ver,pa_proj_elements ele,pa_task_types tt
8880   WHERE rel.object_id_from1 = c_parent_element_version_id
8881   AND   rel.object_type_to = 'PA_TASKS'
8882   AND   rel.relationship_type = 'S'
8883   AND   rel.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8884   AND   rel.object_id_to1 = ver.element_version_id
8885   AND   ver.proj_element_id = ele.proj_element_id
8886   AND   ele.type_id = tt.task_type_id
8887   AND   tt.object_type = 'PA_TASKS'            /* for bug 3279978 FP M Enhancement */
8888   AND   tt.prog_entry_enable_flag = 'Y';
8889 
8890   l_progressible_child_count NUMBER; -- Bug 3098574.
8891 
8892   -- Bug 3098574. This table will store the number of progressible tasks
8893   -- under a parent. This is used in order to cache the data.
8894   TYPE prog_child_count IS TABLE OF NUMBER
8895        INDEX BY BINARY_INTEGER;
8896   l_prog_child_count     prog_child_count;
8897 
8898   TYPE durations IS TABLE OF NUMBER
8899        INDEX BY BINARY_INTEGER;
8900 
8901   -- This table stores the summed duration for all of the child tasks of a parent task/structure. The
8902   -- index is the parent element version id.
8903   l_durations durations;
8904   l_is_sub_new VARCHAR2(1);
8905   l_outline_level NUMBER;
8906   l_parent_element_version_id NUMBER;
8907   l_element_version_id NUMBER;
8908   l_total_sub_count NUMBER;
8909   l_total_duration NUMBER;
8910   l_progress_allowed VARCHAR2(1);
8911   l_task_duration NUMBER;
8912 --  l_task_weight PA_OBJECT_RELATIONSHIPS.weighting_percentage%TYPE;
8913   l_task_weight NUMBER;
8914   l_existing_weight NUMBER;
8915   l_remaining_weight NUMBER;
8916   l_project_id NUMBER;
8917 
8918 --Start Changes for bug 3083950
8919   l_debug_mode              VARCHAR2(1);
8920   l_module_name             VARCHAR2(100) := 'pa.plsql.PA_TASK_PUB1';
8921   l_temp_number             NUMBER(17,2);
8922   l_diff_number             NUMBER;
8923   l_sum_temp_number         NUMBER(17,4);
8924   l_constant_temp_number    NUMBER(17,4) := 0.0100;
8925 
8926   l_debug_level2                  CONSTANT NUMBER := 2;
8927   l_debug_level3                  CONSTANT NUMBER := 3;
8928   l_debug_level4                  CONSTANT NUMBER := 4;
8929   l_debug_level5                  CONSTANT NUMBER := 5;
8930   l_debug_level6                  CONSTANT NUMBER := 6;
8931 
8932 
8933   TYPE task_weightage_tbl IS TABLE OF NUMBER
8934      INDEX BY BINARY_INTEGER;
8935 
8936 
8937   l_task_weightage_tbl     task_weightage_tbl;
8938   --End Changes for bug 3083950
8939 
8940 BEGIN
8941 
8942     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
8943 
8944     IF l_debug_mode = 'Y' THEN
8945           pa_debug.g_err_stage:= 'Entering CALC_TASK_WEIGHTS';
8946           pa_debug.write(l_module_name,pa_debug.g_err_stage,
8947                                    l_debug_level2);
8948 
8949 
8950           pa_debug.set_curr_function( p_function   => 'PA_TASK_PUB1.CALC_TASK_WEIGHTS',
8951                                  p_debug_mode => l_debug_mode );
8952 
8953      END IF;
8954 
8955 
8956   l_is_sub_new := NULL;
8957 
8958   -- Loop through all of the newly created tasks from create_tasks
8959   for i in 1..1000 LOOP
8960     if p_outline_level(i) is null then
8961       exit;
8962     end if;
8963 
8964     OPEN get_parent(p_element_versions(i));
8965     FETCH get_parent INTO l_parent_element_version_id;
8966     CLOSE get_parent;
8967 
8968     l_element_version_id := p_element_versions(i);
8969     l_outline_level := p_outline_level(i);
8970 
8971     if l_outline_level = 0 then
8972       -- Automatically update task weighting as zero
8973       UPDATE PA_OBJECT_RELATIONSHIPS
8974       SET weighting_percentage = 0
8975       WHERE object_id_from1 = l_parent_element_version_id
8976       AND   object_id_to1 = l_element_version_id
8977       AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
8978       AND   object_type_to = 'PA_TASKS'
8979       AND   relationship_type = 'S';
8980     elsif l_outline_level = 1 then
8981       if l_is_sub_new is NULL then
8982         -- Determine whether there we any existing tasks for this level before
8983         -- create_tasks was called
8984         OPEN get_child_count(l_parent_element_version_id);
8985         FETCH get_child_count INTO l_total_sub_count;
8986         CLOSE get_child_count;
8987 
8988         if l_total_sub_count > p_top_sub_count then
8989           l_is_sub_new := 'N';
8990         else
8991           l_is_sub_new := 'Y';
8992         end if;
8993       end if;
8994 
8995       if l_is_sub_new = 'N' then
8996         -- There were existing tasks at this level, populate
8997         -- task weights of new tasks to 0
8998         UPDATE PA_OBJECT_RELATIONSHIPS
8999         SET weighting_percentage = 0
9000         WHERE object_id_from1 = l_parent_element_version_id
9001         AND   object_id_to1 = l_element_version_id
9002         AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9003         AND   object_type_to = 'PA_TASKS'
9004         AND   relationship_type = 'S';
9005       else
9006         -- There were no existing tasks at this level, populate
9007         -- the correct task weight
9008         OPEN check_progress_allowed(l_element_version_id);
9009         FETCH check_progress_allowed INTO l_progress_allowed,l_project_id;  /* for bug 2822963 */
9010         CLOSE check_progress_allowed;
9011 
9012         if l_progress_allowed = 'N' then
9013           -- Populate task weight as zero
9014           UPDATE PA_OBJECT_RELATIONSHIPS
9015           SET weighting_percentage = 0
9016           WHERE object_id_from1 = l_parent_element_version_id
9017           AND   object_id_to1 = l_element_version_id
9018           AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9019           AND   object_type_to = 'PA_TASKS'
9020           AND   relationship_type = 'S';
9021         else
9022 
9023           if l_durations.exists(l_parent_element_version_id) then
9024             NULL;
9025           else
9026             OPEN get_summed_duration(l_parent_element_version_id);
9027             FETCH get_summed_duration INTO l_total_duration;
9028             CLOSE get_summed_duration;
9029 
9030             l_durations(l_parent_element_version_id) := l_total_duration;
9031           end if;
9032 
9033           OPEN get_task_duration(l_element_version_id,l_project_id); /* for bug 2822963 */
9034           FETCH get_task_duration INTO l_task_duration;
9035           CLOSE get_task_duration;
9036 
9037           -- Bug 3098574. When the summed duration of the child tasks
9038           -- of a parent is 0, get the number of child tasks and calculate
9039           -- the weighatage as 1 / number of tasks * 100.
9040 /*          IF (l_durations(l_parent_element_version_id) IS NULL) OR
9041              (l_durations(l_parent_element_version_id) = 0) THEN
9042             l_task_weight := 0;
9043           ELSE*/
9044 
9045             IF (l_durations(l_parent_element_version_id) IS NULL) OR
9046              (l_durations(l_parent_element_version_id) = 0) THEN
9047                IF l_prog_child_count.exists(l_parent_element_version_id) THEN
9048                     l_progressible_child_count := l_prog_child_count(l_parent_element_version_id);
9049                ELSE
9050                     OPEN get_progressible_child_count(l_parent_element_version_id);
9051                     FETCH get_progressible_child_count into l_progressible_child_count;
9052                     CLOSE get_progressible_child_count;
9053                     l_prog_child_count(l_parent_element_version_id) := l_progressible_child_count;
9054                END IF;
9055 
9056                IF l_progressible_child_count  <> 0 THEN
9057                     l_task_weight := ( 1 / l_progressible_child_count ) * 100;
9058                ELSE -- This should never occur.
9059                     l_task_weight := 0;
9060                END IF;
9061             ELSE
9062                l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
9063             END IF;
9064 
9065             OPEN get_existing_weights(l_parent_element_version_id);
9066             FETCH get_existing_weights INTO l_existing_weight;
9067             CLOSE get_existing_weights;
9068 
9069             l_remaining_weight := 100 - l_existing_weight;
9070             -- l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100; Bug 3098574.
9071 
9072             --Start Changes for bug 3083950
9073             -- The Bug is that the final sum of wieghting percentage of all childs of a task does not summ to 100
9074             -- Is caused as while dtoring in the database the weighting % is rounding upto 2nd decimal
9075             -- Strategy here is to store the difference of weighting % we lose or gain while truncating to 2nd decimal
9076             -- against the parent task id in local table for all its child task and as the sum of difference goes above -0.01
9077             -- or below -0.01 just increase or decrease the task weightage of the child task being processed by 0.01
9078             -- 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
9079             IF l_debug_mode = 'Y' THEN
9080                  pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
9081                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9082             END IF;
9083 
9084             l_temp_number := l_task_weight;
9085 
9086             IF l_debug_mode = 'Y' THEN
9087                  pa_debug.g_err_stage:= 'Value of l_temp_number' || l_temp_number;
9088                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9089             END IF;
9090 
9091             l_diff_number := l_task_weight - l_temp_number;
9092 
9093             IF l_debug_mode = 'Y' THEN
9094                  pa_debug.g_err_stage:= 'Value of l_diff_number' || l_diff_number;
9095                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9096             END IF;
9097 
9098             IF(l_diff_number <> 0) THEN
9099 
9100                  IF l_debug_mode = 'Y' THEN
9101                       pa_debug.g_err_stage:= 'Value of l_parent_element_version_id' || l_parent_element_version_id;
9102                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9103                  END IF;
9104 
9105                  IF l_task_weightage_tbl.exists(l_parent_element_version_id) THEN
9106                       l_sum_temp_number := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
9107 
9108                       IF l_debug_mode = 'Y' THEN
9109                            pa_debug.g_err_stage:= 'Value of l_sum_temp_number' || l_sum_temp_number;
9110                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9111 
9112                            pa_debug.g_err_stage:= 'Value of l_constant_temp_number' || l_constant_temp_number;
9113                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9114                       END IF;
9115                       IF( l_sum_temp_number >= l_constant_temp_number ) THEN
9116                            l_task_weight := l_task_weight + 0.01;
9117                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number - 0.01;
9118                            IF l_debug_mode = 'Y' THEN
9119                                 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
9120                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9121                            END IF;
9122                       ELSIF ( l_sum_temp_number <= -l_constant_temp_number ) THEN
9123                            l_task_weight := l_task_weight - 0.01;
9124                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number + 0.01;
9125                            IF l_debug_mode = 'Y' THEN
9126                                 pa_debug.g_err_stage:= 'In else IF Value of l_task_weight' || l_task_weight;
9127                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9128                            END IF;
9129                       ELSE
9130                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
9131                            IF l_debug_mode = 'Y' THEN
9132                                 pa_debug.g_err_stage:= 'in else Value of l_task_weight' || l_task_weight;
9133                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9134                            END IF;
9135                       END IF;
9136                  ELSE
9137                       l_task_weightage_tbl(l_parent_element_version_id) := l_diff_number;
9138                  END IF;
9139 
9140                  IF l_debug_mode = 'Y' THEN
9141                       pa_debug.g_err_stage:= 'Value of task_weightage_tbl' || l_task_weightage_tbl(l_parent_element_version_id);
9142                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9143                  END IF;
9144 
9145             END IF;
9146 
9147             --End Changes for bug 3083950
9148 
9149             if(abs(l_remaining_weight - l_task_weight) <= .05) then
9150               l_task_weight := l_remaining_weight;
9151             end if;
9152 
9153           --END IF; Bug 3098574.
9154           UPDATE PA_OBJECT_RELATIONSHIPS
9155           SET weighting_percentage = l_task_weight
9156           WHERE object_id_from1 = l_parent_element_version_id
9157           AND   object_id_to1 = l_element_version_id
9158           AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9159           AND   object_type_to = 'PA_TASKS'
9160           AND   relationship_type = 'S';
9161         end if;
9162       end if;
9163     else
9164       -- In this case, outline level is > 1
9165       -- There will never be pre-existing tasks on these levels
9166       OPEN check_progress_allowed(l_element_version_id);
9167       FETCH check_progress_allowed INTO l_progress_allowed,l_project_id; /* for bug 2822963 */
9168       CLOSE check_progress_allowed;
9169 
9170       if l_progress_allowed = 'N' then
9171         -- Populate task weight as zero
9172         UPDATE PA_OBJECT_RELATIONSHIPS
9173         SET weighting_percentage = 0
9174         WHERE object_id_from1 = l_parent_element_version_id
9175         AND   object_id_to1 = l_element_version_id
9176         AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9177         AND   object_type_to = 'PA_TASKS'
9178         AND   relationship_type = 'S';
9179       else
9180 
9181         if l_durations.exists(l_parent_element_version_id) then
9182           NULL;
9183         else
9184           OPEN get_summed_duration(l_parent_element_version_id);
9185           FETCH get_summed_duration INTO l_total_duration;
9186           CLOSE get_summed_duration;
9187 
9188           l_durations(l_parent_element_version_id) := l_total_duration;
9189         end if;
9190 
9191         OPEN get_task_duration(l_element_version_id,l_project_id);  /* for bug 2822963 */
9192         FETCH get_task_duration INTO l_task_duration;
9193         CLOSE get_task_duration;
9194 
9195          -- Bug 3098574. When the summed duration of the child tasks
9196          -- of a parent is 0, get the number of child tasks and calculate
9197          -- the weighatage as 1 / number of tasks * 100.
9198         /*IF (l_durations(l_parent_element_version_id) IS NULL) OR
9199            (l_durations(l_parent_element_version_id) = 0) THEN
9200           l_task_weight := 0;
9201         ELSE*/
9202 
9203          IF (l_durations(l_parent_element_version_id) IS NULL) OR
9204           (l_durations(l_parent_element_version_id) = 0) THEN
9205             IF l_prog_child_count.exists(l_parent_element_version_id) THEN
9206                  l_progressible_child_count := l_prog_child_count(l_parent_element_version_id);
9207             ELSE
9208                  OPEN get_progressible_child_count(l_parent_element_version_id);
9209                  FETCH get_progressible_child_count into l_progressible_child_count;
9210                  CLOSE get_progressible_child_count;
9211                  l_prog_child_count(l_parent_element_version_id) := l_progressible_child_count;
9212             END IF;
9213             IF l_progressible_child_count  <> 0 THEN
9214                  l_task_weight := ( 1 / l_progressible_child_count ) * 100;
9215             ELSE -- This should never occur.
9216                  l_task_weight := 0;
9217             END IF;
9218 
9219          ELSE
9220             l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100;
9221          END IF;
9222 
9223           OPEN get_existing_weights(l_parent_element_version_id);
9224           FETCH get_existing_weights INTO l_existing_weight;
9225           CLOSE get_existing_weights;
9226 
9227           l_remaining_weight := 100 - l_existing_weight;
9228           --l_task_weight := (l_task_duration / l_durations(l_parent_element_version_id)) * 100; Bug 3098574.
9229 
9230             --Start Changes for bug 3083950
9231             -- The Bug is that the final sum of wieghting percentage of all childs of a task does not summ to 100
9232             -- Is caused as while dtoring in the database the weighting % is rounding upto 2nd decimal
9233             -- Strategy here is to store the difference of weighting % we lose or gain while truncating to 2nd decimal
9234             -- against the parent task id in local table for all its child task and as the sum of difference goes above -0.01
9235             -- or below -0.01 just increase or decrease the task weightage of the child task being processed by 0.01
9236             -- 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
9237 
9238             IF l_debug_mode = 'Y' THEN
9239                  pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
9240                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9241             END IF;
9242 
9243             l_temp_number := l_task_weight;
9244 
9245             IF l_debug_mode = 'Y' THEN
9246                  pa_debug.g_err_stage:= 'Value of l_temp_number' || l_temp_number;
9247                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9248             END IF;
9249 
9250             l_diff_number := l_task_weight - l_temp_number;
9251 
9252             IF l_debug_mode = 'Y' THEN
9253                  pa_debug.g_err_stage:= 'Value of l_diff_number' || l_diff_number;
9254                  pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9255             END IF;
9256 
9257             IF(l_diff_number <> 0) THEN
9258 
9259                  IF l_debug_mode = 'Y' THEN
9260                       pa_debug.g_err_stage:= 'Value of l_parent_element_version_id' || l_parent_element_version_id;
9261                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9262                  END IF;
9263 
9264                  IF l_task_weightage_tbl.exists(l_parent_element_version_id) THEN
9265 
9266                       l_sum_temp_number := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
9267 
9268                       IF l_debug_mode = 'Y' THEN
9269                            pa_debug.g_err_stage:= 'Value of l_sum_temp_number' || l_sum_temp_number;
9270                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9271 
9272                            pa_debug.g_err_stage:= 'Value of l_constant_temp_number' || l_constant_temp_number;
9273                            pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9274                       END IF;
9275 
9276                       IF( l_sum_temp_number >= l_constant_temp_number ) THEN
9277                            l_task_weight := l_task_weight + 0.01;
9278                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number - 0.01;
9279                            IF l_debug_mode = 'Y' THEN
9280                                 pa_debug.g_err_stage:= 'Value of l_task_weight' || l_task_weight;
9281                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9282                            END IF;
9283                       ELSIF ( l_sum_temp_number <= -l_constant_temp_number ) THEN
9284                            l_task_weight := l_task_weight - 0.01;
9285                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number + 0.01;
9286                            IF l_debug_mode = 'Y' THEN
9287                                 pa_debug.g_err_stage:= 'In else IF Value of l_task_weight' || l_task_weight;
9288                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9289                            END IF;
9290                       ELSE
9291                            l_task_weightage_tbl(l_parent_element_version_id) := l_task_weightage_tbl(l_parent_element_version_id) + l_diff_number;
9292                            IF l_debug_mode = 'Y' THEN
9293                                 pa_debug.g_err_stage:= 'in else Value of l_task_weight' || l_task_weight;
9294                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9295                            END IF;
9296                       END IF;
9297                  ELSE
9298                       l_task_weightage_tbl(l_parent_element_version_id) := l_diff_number;
9299                  END IF;
9300 
9301                  IF l_debug_mode = 'Y' THEN
9302                       pa_debug.g_err_stage:= 'Value of task_weightage_tbl' || l_task_weightage_tbl(l_parent_element_version_id);
9303                       pa_debug.write(l_module_name,pa_debug.g_err_stage,l_debug_level3);
9304                  END IF;
9305 
9306             END IF;
9307             --End  Changes for bug 3083950
9308 
9309           if(abs(l_remaining_weight - l_task_weight) <= .05) then
9310             l_task_weight := l_remaining_weight;
9311           end if;
9312         --END IF; Bug 3098574.
9313         UPDATE PA_OBJECT_RELATIONSHIPS
9314         SET weighting_percentage = l_task_weight
9315         WHERE object_id_from1 = l_parent_element_version_id
9316         AND   object_id_to1 = l_element_version_id
9317         AND   object_type_from IN ('PA_STRUCTURES', 'PA_TASKS')
9318         AND   object_type_to = 'PA_TASKS'
9319         AND   relationship_type = 'S';
9320       end if;
9321     end if;
9322 
9323   end LOOP;
9324 
9325      IF l_debug_mode = 'Y' THEN
9326           pa_debug.reset_curr_function;
9327      END IF;
9328 
9329   x_return_status := FND_API.G_RET_STS_SUCCESS;
9330 EXCEPTION
9331 WHEN OTHERS THEN
9332   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9333   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
9334                           p_procedure_name => 'CALC_TASK_WEIGHTS',
9335                           p_error_text     => SUBSTRB(SQLERRM,1,240));
9336      IF l_debug_mode = 'Y' THEN
9337           pa_debug.reset_curr_function;
9338      END IF;
9339 
9340   raise;
9341 END CALC_TASK_WEIGHTS;
9342 
9343 --   API name                      : Update_Task_Weighting
9344 --   Type                          : Public Procedure
9345 --   Pre-reqs                      : None
9346 --   Return Value                  : N/A
9347 --   Parameters
9348 --   p_api_version                       IN  NUMBER      := 1.0
9349 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
9350 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
9351 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
9352 --   p_validation_level                  IN  VARCHAR2    := 100
9353 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
9354 --   p_debug_mode                        IN  VARCHAR2    := 'N'
9355 --   p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9356 --   p_object_relationship_id            IN  NUMBER
9357 --   p_weighting_percentage              IN  NUMBER
9358 --   p_record_version_number             IN  NUMBER
9359 --   x_return_status                     OUT VARCHAR2
9360 --   x_msg_count                         OUT NUMBER
9361 --   x_msg_data                          OUT VARCHAR2
9362 --
9363 --  History
9364 --
9365 --  20-SEP-02   hyau             -Created
9366 --
9367 --
9368   procedure Update_Task_Weighting
9369   (
9370    p_api_version                       IN  NUMBER      := 1.0
9371    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
9372    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
9373    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
9374    ,p_validation_level                  IN  VARCHAR2    := 100
9375    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
9376    ,p_debug_mode                        IN  VARCHAR2    := 'N'
9377    ,p_max_msg_count                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9378    ,p_object_relationship_id            IN  NUMBER
9379    ,p_weighting_percentage              IN  NUMBER
9380    ,p_record_version_number             IN  NUMBER
9381    ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9382    ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
9383    ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9384   )
9385   IS
9386 
9387   BEGIN
9388 
9389     pa_debug.init_err_stack ('PA_TASK_PUB1.UPDATE_TASK_WEIGHTING');
9390 
9391     IF (p_debug_mode = 'Y') THEN
9392       pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_WEIGHTING begin');
9393     END IF;
9394 
9395     IF (p_commit = FND_API.G_TRUE) THEN
9396       savepoint update_task_weighting;
9397     END IF;
9398 
9399     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
9400       FND_MSG_PUB.initialize;
9401     END IF;
9402 
9403     PA_TASK_PVT1.Update_Task_Weighting(
9404      p_object_relationship_id      => p_object_relationship_id
9405     ,p_weighting_percentage        => p_weighting_percentage
9406     ,p_record_version_number       => p_record_version_number
9407     ,x_return_status               => x_return_status
9408         ,x_msg_count                   => x_msg_count
9409     ,x_msg_data                    => x_msg_data
9410     );
9411 
9412 EXCEPTION
9413     when FND_API.G_EXC_ERROR then
9414       if p_commit = FND_API.G_TRUE then
9415          rollback to update_task_weighting;
9416       end if;
9417       x_return_status := FND_API.G_RET_STS_ERROR;
9418     when FND_API.G_EXC_UNEXPECTED_ERROR then
9419       if p_commit = FND_API.G_TRUE then
9420          rollback to update_task_weighting;
9421       end if;
9422       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9423       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
9424                               p_procedure_name => 'UPDATE_TASK_WEIGHTING',
9425                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9426     when OTHERS then
9427       if p_commit = FND_API.G_TRUE then
9428          rollback to update_task_weighting;
9429       end if;
9430       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9431       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
9432                               p_procedure_name => 'UPDATE_TASK_WEIGHTING',
9433                               p_error_text     => SUBSTRB(SQLERRM,1,240));
9434       raise;
9435 
9436 END Update_Task_Weighting;
9437 
9438 -- Amit : Following procedure added for Bug 2838700
9439 
9440 PROCEDURE INDENT_TASK_VERSION_BULK (
9441  p_api_version                IN    NUMBER   :=1.0,
9442  p_init_msg_list              IN    VARCHAR2 :=FND_API.G_TRUE,
9443  p_commit             IN    VARCHAR2 :=FND_API.G_FALSE,
9444  p_validate_only              IN    VARCHAR2 :=FND_API.G_TRUE,
9445  p_validation_level       IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
9446  p_calling_module         IN    VARCHAR2 :='SELF_SERVICE',
9447  p_debug_mode             IN    VARCHAR2 :='N',
9448  p_max_msg_count          IN    NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9449  p_structure_version_id       IN    NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
9450  p_task_version_id        IN    NUMBER,
9451  p_project_id             IN    NUMBER,
9452  p_record_version_number      IN    NUMBER,
9453  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
9454  x_msg_count              OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
9455  x_msg_data           OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
9456 ) IS
9457 
9458 
9459 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
9460     SELECT 'Y'
9461     FROM pa_proj_structure_types ppst
9462         ,pa_structure_types pst
9463     WHERE ppst.proj_element_id = c_structure_id
9464     AND ppst.structure_type_id = pst.structure_type_id
9465     AND pst.structure_type_class_code IN( 'FINANCIAL' );
9466 
9467 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
9468      SELECT 'Y'
9469      FROM dual
9470      WHERE EXISTS(
9471     SELECT 'xyz'
9472     FROM pa_proj_elem_ver_structure
9473     WHERE proj_element_id = c_structure_id
9474     AND project_id = c_project_id
9475     AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
9476         );
9477 
9478 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
9479     SELECT object_id_from1
9480     FROM pa_object_relationships
9481     WHERE object_id_to1 = c_elem_ver_id
9482     AND object_type_to = 'PA_TASKS'
9483     AND relationship_type = 'S';
9484 
9485 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
9486     SELECT object_id_from1
9487      , object_relationship_id
9488      , record_version_number
9489      , relationship_subtype
9490     FROM pa_object_relationships
9491     WHERE object_id_to1 = p_child_version_id
9492     AND relationship_type = 'S';
9493 
9494 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
9495 
9496 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
9497    SELECT a.object_id_from1
9498     , a.weighting_percentage
9499    FROM pa_object_relationships a
9500    WHERE a.object_id_to1 = c_task_version_id
9501    AND a.object_type_to = 'PA_TASKS'
9502    AND a.relationship_type = 'S'
9503    AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
9504 
9505 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
9506    SELECT '1'
9507    FROM dual
9508    WHERE EXISTS
9509        (SELECT  'xyz'
9510        FROM pa_object_relationships
9511        WHERE object_id_from1 = c_task_version_id
9512        AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
9513        AND relationship_type = 'S'
9514        );
9515 
9516 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
9517   SELECT ptt.prog_entry_enable_flag
9518   FROM    pa_task_types ptt
9519     , pa_proj_element_versions ppev,
9520           pa_proj_elements ppe
9521   WHERE  ppev.element_version_id = c_element_version_id
9522   AND    ppev.proj_element_id = ppe.proj_element_id
9523   AND    ptt.object_type = 'PA_TASKS'            /* for bug 3279978 FP M Enhancement */
9524   AND    ppe.TYPE_ID   = ptt.task_type_id;
9525 
9526 
9527 
9528   l_api_name            CONSTANT VARCHAR(30) := 'INDENT_TASK_VERSION_BULK';
9529   l_api_version         CONSTANT NUMBER      := 1.0;
9530   l_return_status       VARCHAR2(1);
9531   l_msg_count           NUMBER;
9532   l_msg_data            VARCHAR2(250);
9533   l_data            VARCHAR2(250);
9534   l_msg_index_out       NUMBER;
9535 
9536   l_peer_or_sub         VARCHAR2(30);
9537   l_project_id          NUMBER;
9538   l_structure_id        NUMBER;
9539   l_ref_task_id         NUMBER;
9540   l_task_id                     NUMBER;
9541   l_task_record_version_number  NUMBER;
9542   l_wbs_record_version_number   NUMBER;
9543   l_dummy_char                  VARCHAR2(1);
9544   l_published_version           VARCHAR2(1);
9545   l_relationship_subtype        VARCHAR2(20);
9546   l_struc_version_from          NUMBER;
9547   l_task_version_from           NUMBER;
9548   l_version_from        NUMBER;
9549   l_versioned           VARCHAR2(1) := 'N';
9550   l_shared          VARCHAR2(1) := 'N';
9551 
9552   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
9553   l_parent_ver_id       NUMBER;
9554   l_error_msg_code      VARCHAR2(30);
9555 
9556   src_elem_ver_id       NUMBER;
9557   src_proj_element_id       NUMBER;
9558   src_wbs_number        VARCHAR2(240);
9559   src_seq_number        NUMBER;
9560   src_wbs_level         NUMBER;
9561   src_parent_str_ver_id     NUMBER;
9562   src_object_type       VARCHAR2(30);
9563 
9564   ref_elem_ver_id       NUMBER;
9565   ref_proj_element_id       NUMBER;
9566   ref_wbs_number        VARCHAR2(240);
9567   ref_seq_number        NUMBER;
9568   ref_wbs_level         NUMBER;
9569   ref_parent_str_ver_id     NUMBER;
9570   ref_object_type       VARCHAR2(30);
9571 
9572   l_old_parent_id       NUMBER;
9573   l_dummy           VARCHAR2(1);
9574 
9575   l_new_weighting       NUMBER(17,2);
9576   l_old_weighting       NUMBER(17,2);
9577   l_progress_allowed        VARCHAR2(1);
9578 
9579   l_element_version_id_tab  PA_FORECAST_GLOB.NumberTabTyp;
9580   l_proj_element_id_tab     PA_FORECAST_GLOB.NumberTabTyp;
9581   l_object_type_tab     PA_FORECAST_GLOB.VCTabTyp;
9582   l_project_id_tab      PA_FORECAST_GLOB.NumberTabTyp;
9583   l_parent_str_version_id_tab   PA_FORECAST_GLOB.NumberTabTyp;
9584   l_display_sequence_tab    PA_FORECAST_GLOB.NumberTabTyp;
9585   l_wbs_level_tab       PA_FORECAST_GLOB.NumberTabTyp;
9586   l_wbs_number_tab      PA_FORECAST_GLOB.VCTabTyp;
9587   l_record_version_tab      PA_FORECAST_GLOB.NumberTabTyp;
9588   l_changed_flag_tab        PA_FORECAST_GLOB.VC1TabTyp;
9589 
9590   l_wbs_number          VARCHAR2(1000);
9591   src_branch_mask       VARCHAR2(1000);
9592   ref_branch_mask       VARCHAR2(1000);
9593   l_str1            VARCHAR2(1000);
9594   l_str2            VARCHAR2(1000);
9595   l_number          NUMBER;
9596   l_new_wbs_number      VARCHAR2(1000);
9597   l_user_id         NUMBER;
9598   l_login_id            NUMBER;
9599 
9600 --bug 2843737
9601   CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
9602     select object_id_from1
9603       from pa_object_relationships
9604      where object_id_to1 = c_object_id_to1
9605        and relationship_type = 'S';
9606   l_ref_parent_ver_id          NUMBER;
9607 --end bug 2843737
9608 
9609    CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
9610     select wbs_number
9611       from pa_proj_element_versions
9612      where element_version_id = c_elem_ver_id
9613      and object_type ='PA_TASKS';
9614 
9615 -- hyau Bug 2852753
9616    l_delete_project_allowed      VARCHAR2(1);
9617    l_update_proj_num_allowed      VARCHAR2(1);
9618    l_update_proj_name_allowed    VARCHAR2(1);
9619    l_update_proj_desc_allowed    VARCHAR2(1);
9620    l_update_proj_dates_allowed    VARCHAR2(1);
9621    l_update_proj_status_allowed  VARCHAR2(1);
9622    l_update_proj_manager_allowed  VARCHAR2(1);
9623    l_update_proj_org_allowed      VARCHAR2(1);
9624    l_add_task_allowed            VARCHAR2(1);
9625    l_delete_task_allowed          VARCHAR2(1);
9626    l_update_task_num_allowed      VARCHAR2(1);
9627    l_update_task_name_allowed    VARCHAR2(1);
9628    l_update_task_dates_allowed    VARCHAR2(1);
9629    l_update_task_desc_allowed    VARCHAR2(1);
9630    l_update_parent_task_allowed  VARCHAR2(1);
9631    l_update_task_org_allowed      VARCHAR2(1);
9632 
9633    l_err_code         NUMBER        := 0;
9634    l_err_stack        VARCHAR2(200) := NULL;
9635    l_err_stage        VARCHAR2(200) := NULL;
9636 
9637    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
9638 
9639    CURSOR get_product_code ( c_project_id NUMBER ) IS
9640    SELECT pm_product_code
9641    FROM PA_PROJECTS_ALL
9642    WHERE project_id = c_project_id;
9643 
9644    l_cur_project_id      NUMBER;
9645    CURSOR cur_proj_id
9646    IS
9647      SELECT project_id
9648        FROM pa_proj_element_versions
9649       WHERE element_version_id = p_structure_version_id;
9650 
9651 -- end hyau Bug 2852753
9652 
9653 -- Merged from 85
9654 --Bug 2947492 ( indent )
9655 
9656 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
9657 l_parent_task_id             NUMBER;
9658 l_old_parent_task_id             NUMBER;
9659 l_top_task_id                NUMBER;
9660 l_old_top_task_id            NUMBER;  --bug 2967204
9661 
9662 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
9663     SELECT parent_task_id, top_task_id FROM pa_tasks
9664      WHERE project_id = c_project_id and task_id = c_task_id;
9665 
9666 --End Bug 2947492  ( indent )
9667 -- Merged from 85
9668 
9669 --bug 3053281
9670   l_wp_type              VARCHAR2(1);
9671   l_weighting_basis_Code VARCHAR2(30);
9672 --end bug 3053281
9673 
9674   --3035902: process update flag changes
9675   cursor get_task_type_id(c_proj_element_id NUMBER) IS
9676       select type_id
9677         from pa_proj_elements
9678        where proj_element_id = c_proj_element_id;
9679   l_task_type_id      NUMBER;
9680   l_wp_process_flag   VARCHAR2(1);
9681   --3035902: end process update flag changes
9682 
9683 --bug 3069306
9684   Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
9685     select object_id_to1
9686       from pa_object_relationships
9687      where relationshiP_type = 'S'
9688        and object_type_to = 'PA_TASKS'
9689              start with object_id_to1 = c_task_ver_id
9690                and object_type_to = 'PA_TASKS'
9691                and relationship_type = 'S'
9692            connect by prior object_id_from1 = object_id_to1
9693                and prior object_type_from = object_type_to
9694                and prior relationship_type = relationship_type
9695  intersect
9696     select a.object_id_to1
9697       from pa_object_relationships a, pa_proj_element_versions b
9698      where a.relationshiP_type = 'S'
9699        and a.object_id_from1 = b.parent_structure_version_id
9700        and b.element_version_id = c_task_ver_id
9701        and a.object_type_from = 'PA_STRUCTURES';
9702   l_old_par_ver_id NUMBER;
9703   l_new_par_ver_id NUMBER;
9704 --end bug 3069306
9705 
9706 --bug 3301192
9707   /* Bug #: 3305199 SMukka                                                         */
9708   /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
9709   /* l_task_ver_ids2              PA_PLSQL_DATATYPES.IdTabTyp;                     */
9710   l_task_ver_ids2             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
9711   l_lowest_task_flag1         VARCHAR2(1);
9712   l_lowest_task_flag2         VARCHAR2(1);
9713   l_fin_task_flag             VARCHAR2(1);
9714 
9715   --bug 4214825, start
9716   l_ref_tsk_version_id      NUMBER;
9717 
9718   CURSOR cur_get_ref_tsk_ver_id(c_src_wbs_level NUMBER) IS
9719   SELECT element_version_id
9720   FROM PA_PROJ_ELEMENT_VERSIONS
9721   WHERE parent_structure_version_id = p_structure_version_id
9722   AND project_id = p_project_id
9723   AND wbs_level = c_src_wbs_level
9724   AND object_type = 'PA_TASKS'
9725   AND display_sequence < src_seq_number
9726   AND display_sequence =
9727         (SELECT max (display_sequence)
9728          FROM pa_proj_element_versions
9729          WHERE project_id = p_project_id
9730          AND parent_structure_version_id = p_structure_version_id
9731          AND wbs_level = c_src_wbs_level
9732          AND display_sequence < src_seq_number
9733          AND object_type = 'PA_TASKS');
9734   --bug 4214825, end
9735 
9736 BEGIN
9737 
9738   pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK');
9739 
9740   IF (p_debug_mode = 'Y') THEN
9741     pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK begin');
9742   END IF;
9743 
9744   IF (p_commit = FND_API.G_TRUE) THEN
9745     savepoint indent_task_version_bulk;
9746   END IF;
9747 
9748   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
9749     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9750   END IF;
9751 
9752   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
9753     FND_MSG_PUB.initialize;
9754   END IF;
9755 
9756   --bug 4075697
9757   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
9758   --bug 4075697
9759 
9760   --3035902: process update flag changes
9761   l_wp_process_flag := 'N';
9762   --3035902: end process update flag changes
9763 -- hyau Bug 2852753
9764       IF p_calling_module = 'SELF_SERVICE' THEN
9765 
9766         OPEN cur_proj_id;
9767         FETCH cur_proj_id INTO l_cur_project_id;
9768         CLOSE cur_proj_id;
9769 
9770         OPEN get_product_code(l_cur_project_id);
9771         FETCH get_product_code INTO l_pm_product_code;
9772         CLOSE get_product_code;
9773 
9774         If l_pm_product_code IS NOT NULL THEN
9775           pa_pm_controls.Get_Project_actions_allowed
9776                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
9777                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
9778                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
9779                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
9780                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
9781                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
9782                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
9783                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
9784                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
9785                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
9786                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
9787                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
9788                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
9789                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
9790                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
9791                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
9792                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
9793                  P_ERROR_CODE                 => l_err_code,
9794          P_ERROR_STACK                    => l_err_stack,
9795          P_ERROR_STAGE                => l_err_stage );
9796 
9797           IF l_err_code <> 0 THEN
9798             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9799                                  p_msg_name       => l_err_stage);
9800           END IF;
9801       IF l_update_parent_task_allowed = 'N' THEN
9802               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9803                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
9804               raise FND_API.G_EXC_ERROR;
9805           END IF;
9806         END IF;
9807       END IF;
9808 
9809 -- end hyau Bug 2852753
9810 
9811 -- Bug 6881272: ABLE TO INDENT THE TASK OF THE WBS WITH THE LINKED PROJECT
9812 
9813   BEGIN
9814       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9815       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
9816       FROM PA_PROJ_ELEMENT_VERSIONS
9817       WHERE element_version_id = p_task_version_id
9818       AND project_id = p_project_id
9819       AND parent_structure_version_id = p_structure_version_id;
9820   EXCEPTION
9821     WHEN OTHERS THEN
9822     raise;
9823   END;
9824 
9825 
9826 
9827   IF (p_structure_version_id IS NOT NULL) AND
9828        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
9829 -- Bug 6881272: ABLE TO INDENT THE TASK OF THE WBS WITH THE LINKED PROJECT
9830     IF (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
9831 							          , src_proj_element_id
9832 								        , p_task_version_id),'N') = 'Y') THEN
9833       --deleting linked task. Error
9834       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
9835       raise FND_API.G_EXC_ERROR;
9836     END IF;
9837   END IF;
9838 
9839   -- Get Source Task Information
9840   BEGIN
9841       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9842       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
9843       FROM PA_PROJ_ELEMENT_VERSIONS
9844       WHERE element_version_id = p_task_version_id
9845       AND project_id = p_project_id
9846       AND parent_structure_version_id = p_structure_version_id;
9847   EXCEPTION
9848     WHEN OTHERS THEN
9849     raise;
9850   END;
9851 
9852 -- Locking should be implemented here
9853 
9854   -- Lifecycle Phase validation Changes. Check if task has phase associated with it
9855   IF (p_task_version_id IS NOT NULL) AND
9856        (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
9857 
9858     IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
9859               src_proj_element_id)) THEN
9860       --Indenting a task with phase. Error
9861       PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
9862       raise FND_API.G_EXC_ERROR;
9863     END IF;
9864   END IF;
9865 
9866 
9867   IF src_seq_number = 1 then
9868     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
9869                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
9870     raise FND_API.G_EXC_ERROR;
9871   END IF;
9872 
9873   /* Bug 2843737 Added logic to populate the error message when you try to indent lowest task
9874      Also restructured the logic to get the reference task */
9875 
9876  -- Get the previous task information. If its wbs_level is equal to src_wbs_level then this will become refernce task
9877  -- Otherwise we will again fetch the correct reference task
9878 
9879   SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9880   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
9881   FROM PA_PROJ_ELEMENT_VERSIONS
9882   WHERE display_sequence = src_seq_number - 1
9883   AND parent_structure_version_id = p_structure_version_id
9884   AND project_id = p_project_id
9885   AND object_type = 'PA_TASKS';
9886 
9887   IF src_wbs_level > ref_wbs_level then
9888     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
9889                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
9890     raise FND_API.G_EXC_ERROR;
9891   END IF;
9892 
9893   IF src_wbs_level = ref_wbs_level then
9894     l_peer_or_sub := 'SUB';
9895     --bug 4214825, start
9896     l_ref_tsk_version_id := ref_elem_ver_id;
9897     --bug 4214825, end
9898   ELSE
9899     l_peer_or_sub := 'PEER';
9900 
9901     SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9902     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
9903     FROM PA_PROJ_ELEMENT_VERSIONS
9904     WHERE parent_structure_version_id = p_structure_version_id
9905     AND project_id = p_project_id
9906     AND wbs_level = src_wbs_level+1
9907     AND object_type = 'PA_TASKS'
9908     AND display_sequence < src_seq_number
9909      AND display_sequence =
9910         (SELECT max (display_sequence)
9911          FROM pa_proj_element_versions
9912          WHERE project_id = p_project_id
9913          AND parent_structure_version_id = p_structure_version_id
9914          AND wbs_level = src_wbs_level+1
9915          AND display_sequence < src_seq_number
9916          AND object_type = 'PA_TASKS');
9917 
9918   --bug 4214825, start
9919   OPEN cur_get_ref_tsk_ver_id(src_wbs_level);
9920   FETCH cur_get_ref_tsk_ver_id INTO l_ref_tsk_version_id;
9921   CLOSE cur_get_ref_tsk_ver_id;
9922   --bug 4214825, end
9923 
9924 
9925   END IF;
9926 
9927 
9928 /* Bug 2843737 -- Commented the code to get the refernec task. It is now being done above
9929   -- Get Refernce Task Information
9930 
9931   BEGIN
9932       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
9933       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
9934       FROM PA_PROJ_ELEMENT_VERSIONS
9935       WHERE parent_structure_version_id = p_structure_version_id
9936       AND project_id = p_project_id
9937       AND (wbs_level = src_wbs_level OR wbs_level = src_wbs_level+1) -- Sub or Peer
9938           AND object_type = 'PA_TASKS'
9939       AND display_sequence < src_seq_number
9940       AND display_sequence =
9941         (SELECT max (display_sequence)
9942          FROM pa_proj_element_versions
9943          WHERE project_id = p_project_id
9944          AND parent_structure_version_id = p_structure_version_id
9945          AND (wbs_level = src_wbs_level OR wbs_level = src_wbs_level+1) -- Sub or Peer
9946          AND display_sequence < src_seq_number
9947          AND object_type = 'PA_TASKS');
9948   EXCEPTION
9949     WHEN OTHERS THEN
9950     raise;
9951   END;
9952 */
9953 
9954     --Bug No 3475920 Smukka 25/May/04 Checking for deliverable
9955     --bug 4214825, pass the correct ref_task_version
9956     --IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id,ref_elem_ver_id) = 'Y' THEN
9957     IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_ref_tsk_version_id) = 'Y' THEN
9958        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9959                             p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
9960        raise FND_API.G_EXC_ERROR;
9961     END IF;
9962 
9963     --Check if ok to indent this task
9964     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
9965          p_task_ver_id => p_task_version_id
9966         ,x_return_status      => l_return_status
9967         ,x_error_message_code => l_error_msg_code
9968     );
9969 
9970     IF (l_return_status <> 'Y') THEN
9971         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9972                              p_msg_name => l_error_msg_code);
9973         raise FND_API.G_EXC_ERROR;
9974     END IF;
9975 
9976     --check if ok to create subtask
9977     IF (l_peer_or_sub = 'PEER') THEN
9978       OPEN get_parent_version_id(ref_elem_ver_id);
9979       FETCH get_parent_version_id into l_parent_ver_id;
9980       CLOSE get_parent_version_id;
9981 
9982       --bug 3069306
9983       --if financial task, check if changing parent ok
9984       IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
9985         OPEN get_top_task_ver_id(l_parent_ver_id);
9986         FETCH get_top_task_ver_id into l_new_par_ver_id;
9987         CLOSE get_top_task_ver_id;
9988 
9989         OPEN get_top_task_ver_id(p_task_version_id);
9990         FETCH get_top_task_ver_id into l_old_par_ver_id;
9991         CLOSE get_top_task_Ver_id;
9992 
9993         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
9994           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
9995                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
9996           raise FND_API.G_EXC_ERROR;
9997         END IF;
9998       END IF;
9999       --end bug 3069306
10000 
10001       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
10002          p_parent_task_ver_id => l_parent_ver_id
10003         ,x_return_status      => l_return_status
10004         ,x_error_message_code => l_error_msg_code
10005       );
10006 
10007       IF (l_return_status <> 'Y') THEN
10008         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10009                              p_msg_name => l_error_msg_code);
10010         raise FND_API.G_EXC_ERROR;
10011       END IF;
10012 
10013       --bug 4099488
10014       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
10015         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10016                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
10017         raise FND_API.G_EXC_ERROR;
10018       END IF;
10019       --end bug 4099488
10020     ELSE
10021       --bug 3069306
10022       --if financial task, check if changing parent ok
10023       IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
10024         OPEN get_top_task_ver_id(ref_elem_ver_id);
10025         FETCH get_top_task_ver_id into l_new_par_ver_id;
10026         CLOSE get_top_task_ver_id;
10027 
10028         OPEN get_top_task_ver_id(p_task_version_id);
10029         FETCH get_top_task_ver_id into l_old_par_ver_id;
10030         CLOSE get_top_task_Ver_id;
10031 
10032         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
10033           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10034                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
10035           raise FND_API.G_EXC_ERROR;
10036         END IF;
10037       END IF;
10038       --end bug 3069306
10039 
10040 
10041       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
10042          p_parent_task_ver_id => ref_elem_ver_id
10043         ,x_return_status      => l_return_status
10044         ,x_error_message_code => l_error_msg_code
10045       );
10046 
10047       IF (l_return_status <> 'Y') THEN
10048         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10049                              p_msg_name => l_error_msg_code);
10050         raise FND_API.G_EXC_ERROR;
10051       END IF;
10052 
10053       --bug 4099488
10054       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(ref_elem_ver_id, p_task_version_id) = 'N' THEN
10055         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10056                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
10057         raise FND_API.G_EXC_ERROR;
10058       END IF;
10059       --end bug 4099488
10060     END IF;
10061 
10062   -- Added for FP_M changes. Bug 3305199 : Bhumesh  xxx
10063 
10064   If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
10065         IN ('SHARE_PARTIAL')
10066   Then
10067 
10068     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
10069         p_task_version_id       => p_task_version_id
10070       , p_ref_task_version_id   => ref_elem_ver_id
10071       , x_return_status         => x_return_status
10072       , x_msg_count             => x_msg_count
10073       , x_msg_data              => x_msg_data
10074       , x_error_msg_code        => l_error_msg_code);
10075 
10076     IF (x_return_status <> 'S') THEN -- 4275757 : Changed from 'Y' to 'S'
10077        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10078                 p_msg_name       => l_error_msg_code);
10079       raise FND_API.G_EXC_ERROR;
10080     End If;
10081   End If;
10082 
10083   --check the task is a lowest task bug 3301192
10084   l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
10085 
10086   -- End of FP_M changes
10087 /*
10088 
10089  The processing done by the followig two calls is made now as plsql table bulk processing
10090 
10091   PA_TASK_PUB1.Update_Task_Version
10092   ( p_validate_only      => FND_API.G_FALSE,
10093     p_ref_task_version_id    => l_ref_task_version_id,
10094     p_peer_or_sub              => l_peer_or_sub,
10095     p_task_version_id        => p_task_version_id,
10096     p_record_version_number  => p_record_version_number,
10097     x_return_status          => l_return_status,
10098     x_msg_count              => l_msg_count,
10099     x_msg_data               => l_msg_data );
10100 
10101   PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
10102   ( p_commit                   => p_commit
10103    ,p_debug_mode               => p_debug_mode
10104    ,p_parent_structure_ver_id  => l_parent_structure_version_id
10105    ,p_task_id                  => p_task_version_id
10106    ,p_display_seq              => l_display_sequence
10107    ,p_action                   => 'INDENT'
10108    ,p_parent_task_id           => NULL
10109    ,x_return_status            => l_return_status );
10110 
10111 */
10112 
10113 
10114 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
10115 
10116 -- Logic Added for plsql table
10117 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
10118 
10119 l_element_version_id_tab.delete;
10120 l_proj_element_id_tab.delete;
10121 l_object_type_tab.delete;
10122 l_project_id_tab.delete;
10123 l_parent_str_version_id_tab.delete;
10124 l_display_sequence_tab.delete;
10125 l_wbs_level_tab.delete;
10126 l_wbs_number_tab.delete;
10127 l_record_version_tab.delete;
10128 l_changed_flag_tab.delete;
10129 
10130 If (l_peer_or_sub = 'SUB') THEN
10131   OPEN get_ref_parent_id(ref_elem_ver_id);
10132   FETCH get_ref_parent_id into l_ref_parent_ver_id;
10133   CLOSE get_ref_parent_id;
10134 ELSE
10135   OPEN get_ref_parent_id(p_task_version_id);
10136   FETCH get_ref_parent_id into l_ref_parent_ver_id;
10137   CLOSE get_ref_parent_id;
10138 END IF;
10139 
10140   BEGIN
10141        -- Using OR is beneficial than using UNION here
10142 
10143             SELECT  element_version_id, proj_element_id, object_type,
10144             project_id, parent_structure_version_id,
10145             display_sequence, wbs_level, wbs_number,
10146             record_version_number, 'N' changed_flag
10147              BULK COLLECT INTO l_element_version_id_tab,
10148             l_proj_element_id_tab, l_object_type_tab,
10149             l_project_id_tab, l_parent_str_version_id_tab,
10150             l_display_sequence_tab, l_wbs_level_tab,
10151             l_wbs_number_tab, l_record_version_tab,
10152             l_changed_flag_tab
10153             FROM
10154         pa_proj_element_versions
10155         WHERE
10156                  project_id = p_project_id
10157         AND parent_structure_version_id = p_structure_version_id
10158         AND object_type = 'PA_TASKS'
10159         AND(
10160         element_version_id = p_task_version_id  -- Source task itself
10161         OR (element_version_id IN -- All tasks below the source task with wbs_level >= src_wbs_level-1
10162         (select object_id_to1
10163         from pa_object_relationships
10164         where relationship_type = 'S'
10165                 and object_type_to = 'PA_TASKS'
10166         start with object_id_from1 = l_ref_parent_ver_id
10167         connect by object_id_from1 = PRIOR object_id_to1
10168                     and relationship_type = PRIOR relationship_type
10169                     and relationship_type = 'S')
10170         )
10171         and display_sequence > src_seq_number)
10172         ORDER BY display_sequence ;
10173   EXCEPTION
10174     WHEN OTHERS THEN
10175         raise;
10176   END;
10177 
10178 
10179 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
10180 -- Here we can also incorporate sequence number update. In indent sequence number does not change.
10181 
10182 -- Update wbs level
10183 
10184  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
10185         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
10186             l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
10187             l_changed_flag_tab(j) := 'Y';
10188         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
10189             -- Direct Childs of source
10190             l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
10191             l_changed_flag_tab(j) := 'Y';
10192         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
10193             -- Exit level changes, IT means no Direct childs are left
10194             EXIT;
10195         END IF;
10196  END LOOP;
10197 
10198 
10199 -- Update wbs_number
10200 
10201  src_branch_mask := src_wbs_number;
10202 
10203  -- ref_branch_mask shd be the wbs_number of parent of source
10204  --ref_branch_mask := substr(ref_wbs_number, 1, instr(ref_wbs_number,'.', -1, 1)-1);
10205 
10206  OPEN get_wbs_number(l_ref_parent_ver_id);
10207  FETCH get_wbs_number into ref_branch_mask;
10208  CLOSE get_wbs_number;
10209 
10210 
10211 
10212  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
10213         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
10214         IF l_peer_or_sub = 'SUB' THEN
10215                 l_wbs_number := ref_wbs_number || '.1';
10216             l_wbs_number_tab(j) := l_wbs_number;
10217             l_changed_flag_tab(j) := 'Y';
10218             l_new_wbs_number := l_wbs_number;
10219         ELSE
10220               l_number := instr(ref_wbs_number,'.', -1, 1);
10221               l_str1 := substr(ref_wbs_number, 1, l_number -1);
10222               l_str2 := substr(ref_wbs_number, l_number + 1);
10223               l_str2 := to_char(to_number(l_str2 + 1));
10224               l_wbs_number := l_str1 || '.' || l_str2;
10225               l_wbs_number_tab(j) := l_wbs_number;
10226               l_changed_flag_tab(j) := 'Y';
10227               l_new_wbs_number := l_wbs_number;
10228         END IF;
10229     ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
10230         IF l_display_sequence_tab(j) > src_seq_number THEN
10231         IF src_wbs_level = 1 THEN -- This was top task
10232               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
10233                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
10234             -- Direct childs of source
10235                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
10236               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
10237                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
10238               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
10239                   l_wbs_number_tab(j) := l_wbs_number;
10240                   l_changed_flag_tab(j) := 'Y';
10241               ELSIF(instr(l_wbs_number_tab(j), '.') <> 0) then
10242             -- Not in Direct Childs, But lower tasks
10243                   l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
10244                   l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
10245                   l_str1 := to_char(to_number(l_str1) - 1);
10246                   l_wbs_number := l_str1 || l_str2;
10247                   l_wbs_number_tab(j) := l_wbs_number;
10248                   l_changed_flag_tab(j) := 'Y';
10249               ELSIF (instr(l_wbs_number_tab(j), '.') = 0) then
10250                   l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) - 1);
10251                   l_wbs_number_tab(j) := l_wbs_number;
10252                   l_changed_flag_tab(j) := 'Y';
10253               END IF;
10254         ELSE -- src_wbs_level <> 1 Source was not a Top Task
10255               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
10256                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
10257             -- Direct childs of source
10258                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
10259               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
10260                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
10261               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
10262                   l_wbs_number_tab(j) := l_wbs_number;
10263                   l_changed_flag_tab(j) := 'Y';
10264               ELSE
10265                       l_str1 := substr(l_wbs_number_tab(j), length(ref_branch_mask) + 2);
10266                   IF(instr(l_str1, '.') <> 0) THEN
10267                     l_str2 := substr(l_str1, instr(l_str1, '.'));
10268                     l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
10269                     l_str1 := to_char(to_number(l_str1) - 1);
10270                     l_wbs_number := ref_branch_mask || '.' || l_str1 || l_str2;
10271                     l_wbs_number_tab(j) := l_wbs_number;
10272                     l_changed_flag_tab(j) := 'Y';
10273                   ELSE
10274                     l_str1:= to_char(to_number(l_str1) - 1);
10275                     l_wbs_number := ref_branch_mask || '.' || l_str1;
10276                     l_wbs_number_tab(j) := l_wbs_number;
10277                     l_changed_flag_tab(j) := 'Y';
10278              END IF;
10279               END IF;
10280         END IF; -- src_wbs_level = 1
10281         END IF; --   l_display_sequence_tab(j) > src_seq_number
10282     END IF; -- l_element_version_id_tab(j) = src_elem_ver_id
10283  END LOOP;
10284 l_user_id := fnd_global.user_id;
10285 l_login_id := fnd_global.login_id;
10286 
10287 -- Locking should be implemnted here
10288 
10289  FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
10290  UPDATE PA_PROJ_ELEMENT_VERSIONS
10291  SET
10292         wbs_level                = l_wbs_level_tab(j)           ,
10293         wbs_number                   = l_wbs_number_tab(j)          ,
10294         last_update_date                 = sysdate          ,
10295         last_updated_by                  = l_user_id            ,
10296         last_update_login                = l_login_id           ,
10297     record_version_number        = l_record_version_tab(j)+1
10298  WHERE  element_version_id         = l_element_version_id_tab(j)
10299  AND l_changed_flag_tab(j)='Y';
10300 
10301 
10302 -- Update Relationship
10303 
10304       IF ref_object_type = 'PA_TASKS'
10305       THEN
10306          IF l_peer_or_sub = 'PEER'
10307          THEN
10308             OPEN cur_obj_rel( ref_elem_ver_id );
10309             FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
10310             CLOSE cur_obj_rel;
10311 
10312             l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
10313 
10314             IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
10315             THEN
10316                 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
10317                 l_task_version_from := null;
10318             ELSE
10319                 l_task_version_from  := v_cur_obj_rel_rec.object_id_from1;
10320                 l_struc_version_from := null;
10321             END IF;
10322          ELSE -- l_peer_or_sub = 'SUB'
10323                 --parent task is the reference task
10324             l_task_version_from  := ref_elem_ver_id;
10325             l_struc_version_from := null;
10326             l_relationship_subtype := 'TASK_TO_TASK';
10327 
10328 
10329          END IF;
10330       END IF; -- ref_object_type = 'PA_TASKS'
10331       -- No need to check for PA_STRUCTURES as this is indent and you can not indent below a structure
10332 
10333 
10334  --update relatonship of the task version p_task_version.
10335  --set structure_version_from and task_version_from accordingly.
10336  OPEN cur_obj_rel( p_task_version_id );
10337  FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
10338  CLOSE cur_obj_rel;
10339 
10340 --for task weighting
10341  OPEN get_task_weighting(p_task_version_id);
10342  FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
10343  CLOSE get_task_weighting;
10344 
10345 
10346  IF(l_task_version_from is not null) THEN
10347    l_version_from := l_task_version_from;
10348  ELSE
10349    l_version_from := l_struc_version_from;
10350  END IF;
10351 
10352  IF (l_version_from = p_task_version_id) THEN
10353    l_new_weighting := l_old_weighting;
10354  ELSE
10355    OPEN get_sub_tasks(l_version_from);
10356    FETCH get_sub_tasks into l_dummy;
10357    IF (get_sub_tasks%NOTFOUND) THEN
10358      l_new_weighting := 100;
10359      --bug 2673570
10360      OPEN check_progress_allowed(p_task_version_id);
10361      FETCH check_progress_allowed INTO l_progress_allowed;
10362      CLOSE check_progress_allowed;
10363 
10364      if l_progress_allowed = 'N' then
10365         l_new_weighting := 0;
10366      end if;
10367      --bug 2673570
10368    ELSE
10369      l_new_weighting := 0;
10370    END IF;
10371    CLOSE get_sub_tasks;
10372  END IF;
10373 
10374  PA_RELATIONSHIP_PVT.Update_Relationship
10375              (
10376               p_api_version                       => p_api_version
10377              ,p_init_msg_list                     => p_init_msg_list
10378              ,p_commit                            => p_commit
10379              ,p_validate_only                     => p_validate_only
10380              ,p_validation_level                  => p_validation_level
10381              ,p_calling_module                    => p_calling_module
10382              ,p_debug_mode                        => p_debug_mode
10383              ,p_max_msg_count                     => p_max_msg_count
10384              ,p_object_relationship_id            => v_cur_obj_rel_rec.object_relationship_id
10385              ,p_project_id_from                   => null
10386              ,p_structure_id_from                 => null
10387              ,p_structure_version_id_from         => l_struc_version_from
10388              ,p_task_version_id_from              => l_task_version_from
10389              ,p_project_id_to                     => null
10390              ,p_structure_id_to                   => null
10391              ,p_structure_version_id_to           => null
10392              ,p_task_version_id_to                => p_task_version_id
10393              ,p_relationship_type                 => 'S'
10394              ,p_relationship_subtype              => l_relationship_subtype
10395              ,p_weighting_percentage              => l_new_weighting
10396              ,p_record_version_number             => v_cur_obj_rel_rec.record_version_number
10397              ,x_return_status                     => l_return_status
10398              ,x_msg_count                         => l_msg_count
10399              ,x_msg_data                          => l_msg_data
10400             );
10401 
10402 
10403              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10404                 x_msg_count := FND_MSG_PUB.count_msg;
10405                 IF x_msg_count = 1 then
10406                    pa_interface_utils_pub.get_messages
10407                    (p_encoded        => FND_API.G_TRUE,
10408                     p_msg_index      => 1,
10409                     p_msg_count      => l_msg_count,
10410                     p_msg_data       => l_msg_data,
10411                     p_data           => l_data,
10412                     p_msg_index_out  => l_msg_index_out);
10413                     x_msg_data := l_data;
10414                 END IF;
10415              raise FND_API.G_EXC_ERROR;
10416              END IF;
10417 
10418 --for task weighting
10419      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
10420        p_task_version_id => l_old_parent_id
10421       ,x_return_status => l_return_status
10422       ,x_msg_count => l_msg_count
10423       ,x_msg_data => l_msg_data
10424      );
10425 
10426      x_msg_count := FND_MSG_PUB.count_msg;
10427      IF x_msg_count = 1 then
10428        pa_interface_utils_pub.get_messages
10429         (p_encoded        => FND_API.G_TRUE,
10430          p_msg_index      => 1,
10431          p_msg_count      => l_msg_count,
10432          p_msg_data       => l_msg_data,
10433          p_data           => l_data,
10434          p_msg_index_out  => l_msg_index_out);
10435          x_msg_data := l_data;
10436       END IF;
10437 
10438      --bug 2673570
10439      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
10440        p_task_version_id => p_task_version_id
10441       ,x_return_status => l_return_status
10442       ,x_msg_count => l_msg_count
10443       ,x_msg_data => l_msg_data
10444      );
10445 
10446      x_msg_count := FND_MSG_PUB.count_msg;
10447      IF x_msg_count = 1 then
10448        pa_interface_utils_pub.get_messages
10449         (p_encoded        => FND_API.G_TRUE,
10450          p_msg_index      => 1,
10451          p_msg_count      => l_msg_count,
10452          p_msg_data       => l_msg_data,
10453          p_data           => l_data,
10454          p_msg_index_out  => l_msg_index_out);
10455          x_msg_data := l_data;
10456       END IF;
10457      --bug 2673570
10458 --end changes for task weighting
10459 
10460 
10461 /*** End Update_task_version and Update_wbs_number code ***/
10462 
10463   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
10464     FROM pa_proj_element_versions
10465    WHERE element_version_id =  ( Select parent_structure_version_id
10466                                    from pa_proj_element_versions
10467                                   where element_version_id = p_task_version_id )
10468      AND object_type = 'PA_STRUCTURES';
10469 
10470 
10471   --Do financial task check
10472   --If financial
10473   OPEN cur_struc_type( l_structure_id );
10474   FETCH cur_struc_type INTO l_dummy_char;
10475   IF cur_struc_type%FOUND
10476   THEN
10477       --If structure has any published versions.
10478       l_published_version := 'N';
10479       OPEN cur_pub_versions( l_structure_id, l_project_id );
10480       FETCH cur_pub_versions INTO l_published_version;
10481       CLOSE cur_pub_versions;
10482 
10483 
10484       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
10485                                                      l_project_id);
10486       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
10487                                                   l_project_id);
10488 
10489       l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --indent in corresponding task in pa_tasks
10490 
10491       IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
10492          (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
10493 	OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
10494         THEN
10495 
10496           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
10497             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
10498             FROM PA_TASKS pt,
10499                  pa_proj_elem_ver_structure ppa,
10500                  PA_PROJ_ELEMENT_VERSIONS ppev
10501            WHERE ppev.element_version_id = p_task_version_id
10502              AND ppev.parent_structure_version_id = ppa.element_version_id
10503              AND ppev.project_id = ppa.project_id
10504              AND ppev.proj_element_id = pt.task_id;
10505 
10506 -- Merged from 85
10507            SELECT record_version_number, parent_task_id    --get old parent id for bug 2947492 (indent )
10508                  ,top_task_id          --bug 2967204
10509             INTO l_task_record_version_number, l_old_parent_task_id
10510                  ,l_old_top_task_id    --bug 2967204
10511             FROM pa_tasks
10512            WHERE task_id = l_task_id
10513              AND project_id = l_project_id;
10514 -- Merged from 85
10515 
10516 
10517           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
10518                          p_project_id                        => l_project_id
10519                         ,p_task_id                           => l_task_id
10520                         ,p_edit_mode                         => 'INDENT'
10521                         ,p_record_version_number             => l_task_record_version_number
10522                         ,p_wbs_record_version_number         => 1
10523                         ,x_return_status                     => l_return_status
10524                         ,x_msg_count                         => l_msg_count
10525                         ,x_msg_data                          => l_msg_data );
10526 
10527 -- Merged from 85
10528              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10529                 x_msg_count := FND_MSG_PUB.count_msg;
10530                 IF x_msg_count = 1 then
10531                    pa_interface_utils_pub.get_messages
10532                    (p_encoded        => FND_API.G_TRUE,
10533                     p_msg_index      => 1,
10534                     p_msg_count      => l_msg_count,
10535                     p_msg_data       => l_msg_data,
10536                     p_data           => l_data,
10537                     p_msg_index_out  => l_msg_index_out);
10538                     x_msg_data := l_data;
10539                 END IF;
10540                 raise FND_API.G_EXC_ERROR;
10541              END IF;
10542 
10543           --Bug 2947492   ( Indent )
10544           --
10545 
10546             OPEN get_parent_task_id( l_task_id , l_project_id );
10547             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
10548             CLOSE get_parent_task_id;
10549 
10550             --bug 2967204
10551             --Cannot move out of the current hierarchy
10552               IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
10553               THEN
10554                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10555                                        p_msg_name => 'PA_CANT_CHANGE_PARENT');
10556                   raise FND_API.G_EXC_ERROR;
10557               END IF;
10558             --End bug 2967204
10559 
10560             --First call the check_reparent ok
10561             --This should have been called in the beginning but due to lot of complexity involved in getting
10562             --new parent task id it is decided to call this later stage as long as  we rollback the whole operation
10563             --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
10564 
10565             /*PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
10566                      p_task_id                    => l_task_id
10567                     ,p_old_parent_task_id         => l_old_parent_task_id
10568                     ,p_new_parent_task_id         => l_parent_task_id
10569                     ,x_return_status              => l_return_status
10570                     ,x_msg_count                  => l_msg_count
10571                     ,x_msg_data                   => l_msg_data
10572                 );
10573 
10574              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10575                 x_msg_count := FND_MSG_PUB.count_msg;
10576                 IF x_msg_count = 1 then
10577                    pa_interface_utils_pub.get_messages
10578                    (p_encoded        => FND_API.G_TRUE,
10579                     p_msg_index      => 1,
10580                     p_msg_count      => l_msg_count,
10581                     p_msg_data       => l_msg_data,
10582                     p_data           => l_data,
10583                     p_msg_index_out  => l_msg_index_out);
10584                     x_msg_data := l_data;
10585                 END IF;
10586                 raise FND_API.G_EXC_ERROR;
10587              END IF;
10588              */  --commenting out. check mails form Venkatesh Jayaraman dated 22 Jan 04
10589 
10590 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
10591             l_plannable_tasks_tbl(1).impacted_task_id   := l_task_id;
10592             l_plannable_tasks_tbl(1).action             := 'REPARENT';
10593             l_plannable_tasks_tbl(1).old_parent_task_id := l_old_parent_task_id;
10594             l_plannable_tasks_tbl(1).New_parent_task_id := l_parent_task_id;
10595             l_plannable_tasks_tbl(1).top_task_id        := l_top_task_id;
10596 
10597 
10598             PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
10599                     p_project_id         => p_project_id
10600                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
10601                   , x_return_status      => l_return_status
10602                   , x_msg_data           => l_msg_data
10603                   , x_msg_count          => l_msg_count
10604                 );
10605 
10606              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
10607                 x_msg_count := FND_MSG_PUB.count_msg;
10608                 IF x_msg_count = 1 then
10609                    pa_interface_utils_pub.get_messages
10610                    (p_encoded        => FND_API.G_TRUE,
10611                     p_msg_index      => 1,
10612                     p_msg_count      => l_msg_count,
10613                     p_msg_data       => l_msg_data,
10614                     p_data           => l_data,
10615                     p_msg_index_out  => l_msg_index_out);
10616                     x_msg_data := l_data;
10617                 END IF;
10618              raise FND_API.G_EXC_ERROR;
10619              END IF;
10620 bug 3010538 */
10621 
10622           --End Bug 2947492  ( Indent )
10623 
10624       END IF;
10625   END IF;
10626   CLOSE cur_struc_type;
10627 -- Merged from 85
10628 
10629   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
10630 
10631     -- Added for FP_M changes Bug 3305199 : Bhumesh
10632     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
10633 
10634        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
10635           p_structure_version_id => P_Structure_Version_ID
10636      ,p_dirty_flag           => 'Y'             --bug 3902282
10637      ,x_return_status        => x_return_status
10638      ,x_msg_count            => x_msg_count
10639      ,x_msg_data             => x_msg_data
10640        );
10641 
10642        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
10643          x_msg_count := FND_MSG_PUB.count_msg;
10644          If x_msg_count = 1 then
10645            pa_interface_utils_pub.get_messages
10646            (p_encoded        => FND_API.G_TRUE,
10647             p_msg_index      => 1,
10648             p_msg_count      => l_msg_count,
10649             p_msg_data       => l_msg_data,
10650             p_data           => l_data,
10651             p_msg_index_out  => l_msg_index_out);
10652             x_msg_data := l_data;
10653          End If;
10654          raise FND_API.G_EXC_ERROR;
10655        End If;
10656     End If;
10657     -- End of FP_M changes
10658 
10659     l_tasks_ver_ids.extend;
10660     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
10661 
10662     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
10663                        p_commit => FND_API.G_FALSE,
10664                        p_element_versions => l_tasks_ver_ids,
10665                        x_return_status => l_return_status,
10666                        x_msg_count => l_msg_count,
10667                        x_msg_data => l_msg_data);
10668 
10669      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10670        x_msg_count := FND_MSG_PUB.count_msg;
10671        if x_msg_count = 1 then
10672          pa_interface_utils_pub.get_messages
10673          (p_encoded        => FND_API.G_TRUE,
10674           p_msg_index      => 1,
10675           p_msg_count      => l_msg_count,
10676           p_msg_data       => l_msg_data,
10677           p_data           => l_data,
10678           p_msg_index_out  => l_msg_index_out);
10679           x_msg_data := l_data;
10680        end if;
10681        raise FND_API.G_EXC_ERROR;
10682      end if;
10683 
10684 --hsiu added for task status
10685 --if versioning is off, rollup.
10686      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
10687        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
10688                   p_structure_version_id => p_structure_version_id
10689                  ,p_element_version_id => p_task_version_id
10690                  ,x_return_status => l_return_status
10691                  ,x_msg_count => l_msg_count
10692                  ,x_msg_data => l_msg_data
10693        );
10694 
10695        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10696          x_msg_count := FND_MSG_PUB.count_msg;
10697          if x_msg_count = 1 then
10698            pa_interface_utils_pub.get_messages
10699            (p_encoded        => FND_API.G_TRUE,
10700             p_msg_index      => 1,
10701             p_msg_count      => l_msg_count,
10702             p_msg_data       => l_msg_data,
10703             p_data           => l_data,
10704             p_msg_index_out  => l_msg_index_out);
10705             x_msg_data := l_data;
10706          end if;
10707          raise FND_API.G_EXC_ERROR;
10708        end if;
10709      END IF;
10710 
10711 --end task status changes
10712 
10713   END IF;
10714 
10715 --bug 3010538 (Indent)
10716 
10717 --bug 3053281 --set flag if not (manual and workplan only)
10718 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
10719 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
10720 
10721 /*
10722 IF (l_shared = 'N') AND
10723    (l_wp_type = 'Y') AND
10724    (l_weighting_basis_Code = 'MANUAL') THEN
10725   --do not set the flag to 'Y'
10726   NULL;
10727 ELSE
10728 */
10729   --3035902: process update flag changes
10730   OPEN get_task_type_id(src_proj_element_id);
10731   FETCH get_task_type_id INTO l_task_type_id;
10732   CLOSE get_task_type_id;
10733 
10734   --set update process flag if necessary;
10735   IF (l_wp_process_flag = 'N') THEN
10736     --may need to update process flag
10737     IF ((l_shared = 'N') AND
10738         (l_wp_type = 'Y') AND
10739         (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
10740         (l_weighting_basis_code <> 'MANUAL'))
10741     THEN
10742       --split and workplan; only update if progressable task added
10743       l_wp_process_flag := 'Y';
10744     ELSIF ((l_shared = 'N') AND
10745            (l_wp_type = 'N')) THEN
10746       --split and financial; update
10747       l_wp_process_flag := 'Y';
10748     ELSIF (l_shared = 'Y') THEN
10749       l_wp_process_flag := 'Y';
10750     END IF;
10751   END IF;
10752 
10753   IF (l_wp_process_flag = 'Y') THEN
10754    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
10755    (
10756       p_calling_context       => 'SELF_SERVICE'
10757      ,p_project_id            => p_project_id
10758      ,p_structure_version_id  => p_structure_version_id
10759      ,p_update_wbs_flag       => 'Y'
10760      ,x_return_status         => l_return_status
10761      ,x_msg_count             => l_msg_count
10762      ,x_msg_data              => l_msg_data);
10763 
10764    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10765      x_msg_count := FND_MSG_PUB.count_msg;
10766      if x_msg_count = 1 then
10767        pa_interface_utils_pub.get_messages
10768        (p_encoded        => FND_API.G_TRUE,
10769         p_msg_index      => 1,
10770         p_msg_count      => l_msg_count,
10771         p_msg_data       => l_msg_data,
10772         p_data           => l_data,
10773         p_msg_index_out  => l_msg_index_out);
10774         x_msg_data := l_data;
10775      end if;
10776      raise FND_API.G_EXC_ERROR;
10777    end if;
10778 END IF;
10779   --3035902: end process update flag changes
10780 
10781   --ideally the following calls should have been cached. but due to time constraints
10782   --we need to write the code this way in multiple places.
10783   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
10784    THEN
10785        IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and  l_published_version = 'N' ) THEN
10786        --Indent
10787        pa_fp_refresh_elements_pub.set_process_flag_proj(
10788              p_project_id               => p_project_id
10789             ,p_request_id               => null
10790             ,p_process_code             => null
10791             ,p_refresh_required_flag    => 'Y'
10792             ,x_return_status            => l_return_status
10793             ,x_msg_count                => l_msg_count
10794             ,x_msg_data                 => l_msg_data );
10795 
10796         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10797            x_msg_count := FND_MSG_PUB.count_msg;
10798            if x_msg_count = 1 then
10799              pa_interface_utils_pub.get_messages
10800             (p_encoded        => FND_API.G_TRUE,
10801              p_msg_index      => 1,
10802              p_msg_count      => l_msg_count,
10803              p_msg_data       => l_msg_data,
10804              p_data           => l_data,
10805              p_msg_index_out  => l_msg_index_out);
10806              x_msg_data := l_data;
10807            end if;
10808            raise FND_API.G_EXC_ERROR;
10809         end if;
10810       END IF;
10811    END IF;
10812 
10813 --End bug 3010538 (Indent )
10814 
10815 --bug 3301192
10816    --check the task is a lowest task again and check whehter its no more a lowest task.
10817   l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
10818 
10819   IF l_lowest_task_flag1 = 'Y' AND
10820      l_lowest_task_flag2 = 'N'
10821   THEN
10822      IF l_wp_type = 'Y'
10823      THEN
10824      --now call call delete planning for task version id.
10825        l_task_ver_ids2.extend(1); /* Venky */
10826        l_task_ver_ids2(1) := p_task_version_id;
10827        /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
10828        /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
10829        DECLARE
10830            --p1 bug 3888432
10831            l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
10832            CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
10833              SELECT resource_assignment_id
10834                FROM pa_resource_assignments
10835               WHERE wbs_element_Version_id = c_task_ver_id
10836                 AND ta_display_flag = 'N';
10837            l_assign_id    NUMBER := NULL;
10838        BEGIN
10839            OPEN get_assignment_id(p_task_version_id);
10840            FETCH get_assignment_id into l_assign_id;
10841            CLOSE get_assignment_id;
10842 
10843            IF (l_assign_id IS NOT NULL) THEN
10844              l_assign_ids.extend(1);
10845              l_assign_ids(1) := l_assign_id;
10846              pa_fp_planning_transaction_pub.delete_planning_transactions
10847              (
10848                p_context                      => 'WORKPLAN'
10849               ,p_task_or_res                  => 'ASSIGNMENT'
10850 ---            ,p_element_version_id_tbl       => l_task_ver_ids2
10851 ---         ,p_maintain_reporting_lines     => 'Y'
10852               ,p_resource_assignment_tbl => l_assign_ids
10853               ,x_return_status                => l_return_status
10854               ,x_msg_count                    => l_msg_count
10855               ,x_msg_data                     => l_msg_data
10856              );
10857            END IF;
10858        EXCEPTION
10859            WHEN OTHERS THEN
10860                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
10861                                         p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10862                                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
10863            RAISE FND_API.G_EXC_ERROR;
10864        END;
10865 
10866      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
10867        x_msg_count := FND_MSG_PUB.count_msg;
10868        if x_msg_count = 1 then
10869          pa_interface_utils_pub.get_messages
10870          (p_encoded        => FND_API.G_TRUE,
10871           p_msg_index      => 1,
10872           p_msg_count      => l_msg_count,
10873           p_msg_data       => l_msg_data,
10874           p_data           => l_data,
10875           p_msg_index_out  => l_msg_index_out);
10876           x_msg_data := l_data;
10877        end if;
10878        raise FND_API.G_EXC_ERROR;
10879      end if;
10880      END IF;  --<<l_wp_type>>
10881   END IF; --<<l_lowest_task_flag1>>
10882 
10883   --bug 4149392
10884   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
10885   --end bug 4149392
10886 
10887   x_return_status := FND_API.G_RET_STS_SUCCESS;
10888 
10889   IF (p_commit = FND_API.G_TRUE) THEN
10890     COMMIT;
10891   END IF;
10892 
10893   IF (p_debug_mode = 'Y') THEN
10894     pa_debug.debug('PA_TASK_PUB1.INDENT_TASK_VERSION_BULK END');
10895   END IF;
10896 
10897 EXCEPTION
10898   when FND_API.G_EXC_ERROR then
10899     if p_commit = FND_API.G_TRUE then
10900       rollback to indent_task_version_bulk;
10901     end if;
10902     x_return_status := FND_API.G_RET_STS_ERROR;
10903   when FND_API.G_EXC_UNEXPECTED_ERROR then
10904     if p_commit = FND_API.G_TRUE then
10905       rollback to indent_task_version_bulk;
10906     end if;
10907     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10908     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
10909                             p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10910                             p_error_text     => SUBSTRB(SQLERRM,1,240));
10911   when OTHERS then
10912     if p_commit = FND_API.G_TRUE then
10913       rollback to indent_task_version_bulk;
10914     end if;
10915     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10916     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
10917                             p_procedure_name => 'INDENT_TASK_VERSION_BULK',
10918                             p_error_text     => SUBSTRB(SQLERRM,1,240));
10919     raise;
10920 
10921 END Indent_Task_Version_Bulk;
10922 
10923 -- Amit : Following procedure added for Bug 2838700
10924 
10925 PROCEDURE OUTDENT_TASK_VERSION_BULK (
10926  p_api_version                IN    NUMBER   :=1.0,
10927  p_init_msg_list              IN    VARCHAR2 :=FND_API.G_TRUE,
10928  p_commit             IN    VARCHAR2 :=FND_API.G_FALSE,
10929  p_validate_only              IN    VARCHAR2 :=FND_API.G_TRUE,
10930  p_validation_level       IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
10931  p_calling_module         IN    VARCHAR2 :='SELF_SERVICE',
10932  p_debug_mode             IN    VARCHAR2 :='N',
10933  p_max_msg_count          IN    NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10934  p_structure_version_id       IN    NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
10935  p_task_version_id        IN    NUMBER,
10936  p_project_id             IN    NUMBER,
10937  p_record_version_number      IN    NUMBER,
10938  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
10939  x_msg_count              OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
10940  x_msg_data           OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
10941 ) IS
10942 
10943 
10944 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
10945     SELECT 'Y'
10946     FROM pa_proj_structure_types ppst
10947         ,pa_structure_types pst
10948     WHERE ppst.proj_element_id = c_structure_id
10949     AND ppst.structure_type_id = pst.structure_type_id
10950     AND pst.structure_type_class_code IN( 'FINANCIAL' );
10951 
10952 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
10953      SELECT 'Y'
10954      FROM dual
10955      WHERE EXISTS(
10956     SELECT 'xyz'
10957     FROM pa_proj_elem_ver_structure
10958     WHERE proj_element_id = c_structure_id
10959     AND project_id = c_project_id
10960     AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
10961         );
10962 
10963 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
10964     SELECT object_id_from1
10965     FROM pa_object_relationships
10966     WHERE object_id_to1 = c_elem_ver_id
10967     AND object_type_to = 'PA_TASKS'
10968     AND relationship_type = 'S';
10969 
10970 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
10971     SELECT object_id_from1
10972      , object_relationship_id
10973      , record_version_number
10974      , relationship_subtype
10975     FROM pa_object_relationships
10976     WHERE object_id_to1 = p_child_version_id
10977     AND relationship_type = 'S';
10978 
10979 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
10980 
10981 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
10982    SELECT a.object_id_from1
10983     , a.weighting_percentage
10984    FROM pa_object_relationships a
10985    WHERE a.object_id_to1 = c_task_version_id
10986    AND a.object_type_to = 'PA_TASKS'
10987    AND a.relationship_type = 'S'
10988    AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
10989 
10990 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
10991    SELECT '1'
10992    FROM dual
10993    WHERE EXISTS
10994        (SELECT  'xyz'
10995        FROM pa_object_relationships
10996        WHERE object_id_from1 = c_task_version_id
10997        AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
10998        AND relationship_type = 'S'
10999        );
11000 
11001 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
11002   SELECT ptt.prog_entry_enable_flag
11003   FROM    pa_task_types ptt
11004     , pa_proj_element_versions ppev,
11005           pa_proj_elements ppe
11006   WHERE  ppev.element_version_id = c_element_version_id
11007   AND    ppev.proj_element_id = ppe.proj_element_id
11008   AND    ppe.TYPE_ID   = ptt.task_type_id;
11009 
11010 CURSOR get_peer_tasks IS
11011   SELECT b.object_id_to1 object_id_to1
11012   FROM    pa_object_relationships a
11013     , pa_object_relationships b
11014   WHERE a.object_id_to1 = p_task_version_id
11015   AND a.object_type_to = 'PA_TASKS'
11016   AND a.object_id_from1 = b.object_id_from1
11017   AND a.object_type_from = b.object_type_from
11018   AND b.object_type_to = 'PA_TASKS'
11019   AND b.object_id_to1 <> p_task_version_id
11020   AND a.relationship_type = 'S'
11021   AND b.relationship_type = 'S';
11022 
11023   c_get_peer_tasks get_peer_tasks%ROWTYPE;
11024 
11025   --This cursor fetches all tasks that are child of ref task but now become child of p_task_version
11026   -- This case should not be possible for Outdent/Indent
11027   CURSOR cur_new_child(c_ref_task_version_id NUMBER, c_display_sequence NUMBER) IS
11028     SELECT por.object_id_to1, ppev.display_sequence, por.record_version_number, por.object_relationship_id
11029     FROM pa_object_relationships por,
11030            pa_proj_element_versions ppev
11031     WHERE object_id_from1 = c_ref_task_version_id
11032     AND object_id_to1 = element_version_id
11033     AND display_sequence > c_display_sequence
11034     AND relationship_type = 'S'
11035      order by display_sequence;
11036 
11037 
11038 
11039   l_api_name            CONSTANT VARCHAR(30) := 'OUTDENT_TASK_VERSION_BULK';
11040   l_api_version         CONSTANT NUMBER      := 1.0;
11041   l_return_status       VARCHAR2(1);
11042   l_msg_count           NUMBER;
11043   l_msg_data            VARCHAR2(250);
11044   l_data            VARCHAR2(250);
11045   l_msg_index_out       NUMBER;
11046 
11047   l_peer_or_sub         VARCHAR2(30);
11048   l_project_id          NUMBER;
11049   l_structure_id        NUMBER;
11050   l_ref_task_id         NUMBER;
11051   l_task_id                     NUMBER;
11052   l_task_record_version_number  NUMBER;
11053   l_wbs_record_version_number   NUMBER;
11054   l_dummy_char                  VARCHAR2(1);
11055   l_published_version           VARCHAR2(1);
11056   l_relationship_subtype        VARCHAR2(20);
11057   l_struc_version_from          NUMBER;
11058   l_task_version_from           NUMBER;
11059   l_version_from        NUMBER;
11060   l_versioned           VARCHAR2(1) := 'N';
11061   l_shared          VARCHAR2(1) := 'N';
11062   l_rollup_task_id      NUMBER;
11063 
11064   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
11065   l_parent_ver_id       NUMBER;
11066   l_error_msg_code      VARCHAR2(30);
11067 
11068   src_elem_ver_id       NUMBER;
11069   src_proj_element_id       NUMBER;
11070   src_wbs_number        VARCHAR2(240);
11071   src_seq_number        NUMBER;
11072   src_wbs_level         NUMBER;
11073   src_parent_str_ver_id     NUMBER;
11074   src_object_type       VARCHAR2(30);
11075 
11076   ref_elem_ver_id       NUMBER;
11077   ref_proj_element_id       NUMBER;
11078   ref_wbs_number        VARCHAR2(240);
11079   ref_seq_number        NUMBER;
11080   ref_wbs_level         NUMBER;
11081   ref_parent_str_ver_id     NUMBER;
11082   ref_object_type       VARCHAR2(30);
11083 
11084   l_old_parent_id       NUMBER;
11085   l_dummy           VARCHAR2(1);
11086 
11087   l_new_weighting       NUMBER(17,2);
11088   l_old_weighting       NUMBER(17,2);
11089   l_progress_allowed        VARCHAR2(1);
11090 
11091   l_element_version_id_tab  PA_FORECAST_GLOB.NumberTabTyp;
11092   l_proj_element_id_tab     PA_FORECAST_GLOB.NumberTabTyp;
11093   l_object_type_tab     PA_FORECAST_GLOB.VCTabTyp;
11094   l_project_id_tab      PA_FORECAST_GLOB.NumberTabTyp;
11095   l_parent_str_version_id_tab   PA_FORECAST_GLOB.NumberTabTyp;
11096   l_display_sequence_tab    PA_FORECAST_GLOB.NumberTabTyp;
11097   l_wbs_level_tab       PA_FORECAST_GLOB.NumberTabTyp;
11098   l_old_wbs_level_tab       PA_FORECAST_GLOB.NumberTabTyp;
11099   l_wbs_number_tab      PA_FORECAST_GLOB.VCTabTyp;
11100   l_record_version_tab      PA_FORECAST_GLOB.NumberTabTyp;
11101   l_changed_flag_tab        PA_FORECAST_GLOB.VC1TabTyp;
11102 
11103   l_wbs_number          VARCHAR2(1000);
11104   src_branch_mask       VARCHAR2(1000);
11105   ref_branch_mask       VARCHAR2(1000);
11106   l_str1            VARCHAR2(1000);
11107   l_str2            VARCHAR2(1000);
11108   l_number          NUMBER;
11109   l_new_wbs_number      VARCHAR2(1000);
11110   l_user_id         NUMBER;
11111   l_login_id            NUMBER;
11112   l_update_new_child_rels   VARCHAR2(1) := 'N';
11113   first_sub_task_below_src_flag boolean;
11114   last_sub_task_below_src      VARCHAR2(1000);
11115   temp_old_branch_mask      VARCHAR2(1000);
11116   temp_new_branch_mask      VARCHAR2(1000);
11117   last_sub_task_number      VARCHAR2(1000);
11118 
11119   --bug 2843737
11120   CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
11121     select object_id_from1
11122       from pa_object_relationships
11123      where object_id_to1 = c_object_id_to1
11124        and relationship_type = 'S';
11125   l_ref_parent_ver_id          NUMBER;
11126 --end bug 2843737
11127 
11128   CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
11129     select wbs_number
11130       from pa_proj_element_versions
11131      where element_version_id = c_elem_ver_id
11132      and object_type ='PA_TASKS';
11133 
11134   ref_parent_branch_mask        VARCHAR2(1000);
11135 
11136 -- hyau Bug 2852753
11137    l_delete_project_allowed      VARCHAR2(1);
11138    l_update_proj_num_allowed      VARCHAR2(1);
11139    l_update_proj_name_allowed    VARCHAR2(1);
11140    l_update_proj_desc_allowed    VARCHAR2(1);
11141    l_update_proj_dates_allowed    VARCHAR2(1);
11142    l_update_proj_status_allowed  VARCHAR2(1);
11143    l_update_proj_manager_allowed  VARCHAR2(1);
11144    l_update_proj_org_allowed      VARCHAR2(1);
11145    l_add_task_allowed            VARCHAR2(1);
11146    l_delete_task_allowed          VARCHAR2(1);
11147    l_update_task_num_allowed      VARCHAR2(1);
11148    l_update_task_name_allowed    VARCHAR2(1);
11149    l_update_task_dates_allowed    VARCHAR2(1);
11150    l_update_task_desc_allowed    VARCHAR2(1);
11151    l_update_parent_task_allowed  VARCHAR2(1);
11152    l_update_task_org_allowed      VARCHAR2(1);
11153 
11154    l_err_code         NUMBER        := 0;
11155    l_err_stack        VARCHAR2(200) := NULL;
11156    l_err_stage        VARCHAR2(200) := NULL;
11157 
11158    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
11159 
11160    CURSOR get_product_code ( c_project_id NUMBER ) IS
11161    SELECT pm_product_code
11162    FROM PA_PROJECTS_ALL
11163    WHERE project_id = c_project_id;
11164 
11165    l_cur_project_id      NUMBER;
11166    CURSOR cur_proj_id
11167    IS
11168      SELECT project_id
11169        FROM pa_proj_element_versions
11170       WHERE element_version_id = p_structure_version_id;
11171 
11172 -- end hyau Bug 2852753
11173 
11174 -- Merged from 85
11175 --Bug 2947492  ( outdent )
11176 
11177 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
11178 l_parent_task_id             NUMBER;
11179 l_old_parent_task_id         NUMBER;
11180 l_top_task_id                NUMBER;
11181 l_old_top_task_id            NUMBER;
11182 l_old_wbs_level              NUMBER;
11183 i                            NUMBER;
11184 
11185     CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER )
11186     IS
11187       SELECT parent_task_id, top_task_id
11188         FROM pa_tasks
11189        WHERE project_id = c_project_id
11190          AND task_id = c_task_id;
11191 
11192     CURSOR cur_new_child_task( c_project_id NUMBER, c_wbs_level NUMBER,
11193                                c_task_id NUMBER , c_parent_task_id NUMBER )
11194     IS
11195       SELECT pt.task_id, pt.top_task_id, pt.parent_task_id
11196         FROM pa_tasks pt, pa_proj_element_versions ppev
11197        WHERE pt.wbs_level = c_wbs_level
11198          AND parent_task_id = c_parent_task_id
11199          AND pt.project_id = c_project_id
11200          AND pt.task_id = ppev.proj_element_id
11201          AND ppev.display_sequence > ( SELECT display_sequence FROM pa_proj_element_versions
11202                                         WHERE project_id = c_project_id
11203                                           AND object_type = 'PA_TASKS'
11204                                           AND proj_element_id = c_task_id );
11205 
11206    --For financial tasks we can directly join with pa_proj-element_version using proj_element_id
11207    --bcoz this api will be called as long as there is only one version for financial otherwise
11208    --publishing will take care.
11209 
11210 --End Bug 2947492 ( outdent )
11211 -- Merged from 85
11212 
11213 --bug 3053281
11214   l_wp_type              VARCHAR2(1);
11215   l_weighting_basis_Code VARCHAR2(30);
11216 --end bug 3053281
11217 
11218   --3035902: process update flag changes
11219   cursor get_task_type_id(c_proj_element_id NUMBER) IS
11220       select type_id
11221         from pa_proj_elements
11222        where proj_element_id = c_proj_element_id;
11223   l_task_type_id      NUMBER;
11224   l_wp_process_flag   VARCHAR2(1);
11225   --3035902: end process update flag changes
11226 
11227 --bug 3069306
11228   Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
11229     select object_id_to1
11230       from pa_object_relationships
11231      where relationshiP_type = 'S'
11232        and object_type_to = 'PA_TASKS'
11233              start with object_id_to1 = c_task_ver_id
11234                and object_type_to = 'PA_TASKS'
11235                and relationship_type = 'S'
11236            connect by prior object_id_from1 = object_id_to1
11237                and prior object_type_from = object_type_to
11238                and prior relationship_type = relationship_type
11239  intersect
11240     select a.object_id_to1
11241       from pa_object_relationships a, pa_proj_element_versions b
11242      where a.relationshiP_type = 'S'
11243        and a.object_id_from1 = b.parent_structure_version_id
11244        and b.element_version_id = c_task_ver_id
11245        and a.object_type_from = 'PA_STRUCTURES';
11246   l_old_par_ver_id NUMBER;
11247   l_new_par_ver_id NUMBER;
11248 --end bug 3069306
11249 
11250 --bug 3301192
11251   /* Bug #: 3305199 SMukka                                                         */
11252   /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
11253   /* l_task_ver_ids2              PA_PLSQL_DATATYPES.IdTabTyp;                     */
11254   l_task_ver_ids2             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
11255   l_lowest_task_flag1         VARCHAR2(1);
11256   l_lowest_task_flag2         VARCHAR2(1);
11257   l_fin_task_flag             VARCHAR2(1);
11258 
11259 --Bug 16013002
11260 --Cursor to check if there are any child tasks (which are set to financial tasks) are present to
11261 --ref task but now become child of p_task_version_id
11262 CURSOR cur_child_tasks_exists(c_ref_task_version_id NUMBER, c_display_sequence NUMBER) IS
11263     SELECT 'Y'
11264     FROM pa_object_relationships por,
11265            pa_proj_element_versions ppev
11266     WHERE object_id_from1 = c_ref_task_version_id
11267     AND object_id_to1 = element_version_id
11268     AND display_sequence > c_display_sequence
11269     AND relationship_type = 'S'
11270     AND financial_task_flag='Y';
11271 l_child_task_exists            VARCHAR2(1) ;
11272 --Bug 16013002
11273 BEGIN
11274 
11275   pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK');
11276 
11277   IF (p_debug_mode = 'Y') THEN
11278     pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK begin');
11279   END IF;
11280 
11281   IF (p_commit = FND_API.G_TRUE) THEN
11282     savepoint OUTDENT_task_version_bulk;
11283   END IF;
11284 
11285   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
11286     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11287   END IF;
11288 
11289   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
11290     FND_MSG_PUB.initialize;
11291   END IF;
11292 
11293   --bug 4075697
11294   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
11295   --bug 4075697
11296 
11297 
11298   --3035902: process update flag changes
11299   l_wp_process_flag := 'N';
11300   --3035902: end process update flag changes
11301 
11302 -- hyau Bug 2852753
11303       IF p_calling_module = 'SELF_SERVICE' THEN
11304 
11305         OPEN cur_proj_id;
11306         FETCH cur_proj_id INTO l_cur_project_id;
11307         CLOSE cur_proj_id;
11308 
11309         OPEN get_product_code(l_cur_project_id);
11310         FETCH get_product_code INTO l_pm_product_code;
11311         CLOSE get_product_code;
11312 
11313         If l_pm_product_code IS NOT NULL THEN
11314           pa_pm_controls.Get_Project_actions_allowed
11315                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
11316                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
11317                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
11318                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
11319                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
11320                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
11321                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
11322                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
11323                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
11324                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
11325                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
11326                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
11327                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
11328                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
11329                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
11330                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
11331                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
11332                  P_ERROR_CODE                 => l_err_code,
11333          P_ERROR_STACK                    => l_err_stack,
11334          P_ERROR_STAGE                => l_err_stage );
11335 
11336           IF l_err_code <> 0 THEN
11337             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11338                                  p_msg_name       => l_err_stage);
11339           END IF;
11340       IF l_update_parent_task_allowed = 'N' THEN
11341               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11342                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
11343               raise FND_API.G_EXC_ERROR;
11344           END IF;
11345         END IF;
11346       END IF;
11347 
11348 -- end hyau Bug 2852753
11349 
11350   IF (p_structure_version_id IS NOT NULL) AND
11351        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
11352     IF ('N' = pa_proj_elements_utils.check_task_in_structure(
11353           p_structure_version_id,
11354           p_task_version_id)) THEN
11355       --deleting linked task. Error
11356       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
11357       raise FND_API.G_EXC_ERROR;
11358     END IF;
11359   END IF;
11360 
11361 --hsiu added, for dates rollup
11362 --need to get peer task before it has been outdented.
11363   OPEN get_peer_tasks;
11364   LOOP
11365     FETCH get_peer_tasks INTO c_get_peer_tasks;
11366     EXIT WHEN get_peer_tasks%NOTFOUND;
11367     l_tasks_ver_ids.extend;
11368     l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
11369 --added for task status rollup
11370     l_rollup_task_id := c_get_peer_tasks.object_id_to1;
11371   END LOOP;
11372   CLOSE get_peer_tasks;
11373 
11374   -- Get Source Task Information
11375   BEGIN
11376       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
11377       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
11378       FROM PA_PROJ_ELEMENT_VERSIONS
11379       WHERE element_version_id = p_task_version_id
11380       AND project_id = p_project_id
11381       AND parent_structure_version_id = p_structure_version_id;
11382   EXCEPTION
11383     WHEN OTHERS THEN
11384     raise;
11385   END;
11386 
11387 
11388 -- Lifecycle Phase validation Changes should be implemented here
11389 
11390   IF src_wbs_level = 1 then
11391     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
11392                          ,p_msg_name       => 'PA_PS_CANNOT_OUTDENT');
11393     raise FND_API.G_EXC_ERROR;
11394   END IF;
11395 
11396   -- Get Refernce Task Information
11397 
11398   BEGIN
11399       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
11400       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
11401       FROM PA_PROJ_ELEMENT_VERSIONS
11402       WHERE parent_structure_version_id = p_structure_version_id
11403       AND project_id = p_project_id
11404       AND (wbs_level = src_wbs_level-1)
11405           AND object_type = 'PA_TASKS'
11406       AND display_sequence =
11407         (SELECT max (display_sequence)
11408          FROM pa_proj_element_versions
11409          WHERE project_id = p_project_id
11410          AND parent_structure_version_id = p_structure_version_id
11411          AND (wbs_level = src_wbs_level-1)
11412          AND display_sequence < src_seq_number
11413          AND object_type = 'PA_TASKS');
11414   EXCEPTION
11415     WHEN OTHERS THEN
11416     raise;
11417     -- It will never return NO_DATA_FOUND as there will always at least one task with wbs_level-1
11418   END;
11419 
11420   IF src_wbs_level < ref_wbs_level then
11421     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
11422                          ,p_msg_name       => 'PA_PS_CANNOT_OUTDENT');
11423     raise FND_API.G_EXC_ERROR;
11424   END IF;
11425 
11426   -- While Outdenting always the source task will become peer of reference task
11427   l_peer_or_sub := 'PEER';
11428 
11429   OPEN get_ref_parent_id(ref_elem_ver_id);
11430   FETCH get_ref_parent_id into l_ref_parent_ver_id;
11431   CLOSE get_ref_parent_id;
11432 
11433   OPEN get_wbs_number(l_ref_parent_ver_id);
11434   FETCH get_wbs_number into ref_parent_branch_mask;
11435   CLOSE get_wbs_number;
11436 
11437 
11438 /*  IF src_wbs_level = ref_wbs_level then
11439     l_peer_or_sub := 'SUB';
11440   ELSE
11441     l_peer_or_sub := 'PEER';
11442   END IF;
11443 */
11444 
11445     -- Bug 8211519 :  Dissallowing 'Outdenting' of a task if the task has a subproject association.
11446     if (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
11447 							          , src_proj_element_id
11448 								        , p_task_version_id),'N') = 'Y') then
11449 
11450     	IF (p_debug_mode = 'Y') THEN
11451          pa_debug.debug('ERROR !!! PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK ');
11452       END IF;
11453 
11454       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11455                            p_msg_name => 'PA_PS_TASK_HAS_SUB_PROJ');
11456       raise FND_API.G_EXC_ERROR;
11457 
11458     end if;
11459 
11460     --Check if ok to OUTDENT this task
11461     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
11462          p_task_ver_id => p_task_version_id
11463         ,x_return_status      => l_return_status
11464         ,x_error_message_code => l_error_msg_code
11465     );
11466 
11467     IF (l_return_status <> 'Y') THEN
11468         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11469                              p_msg_name => l_error_msg_code);
11470         raise FND_API.G_EXC_ERROR;
11471     END IF;
11472 
11473     --check if ok to create
11474     OPEN get_parent_version_id(ref_elem_ver_id);
11475     FETCH get_parent_version_id into l_parent_ver_id;
11476     CLOSE get_parent_version_id;
11477 
11478     --bug 3069306
11479     --if financial task, check if changing parent ok
11480     IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
11481       OPEN get_top_task_ver_id(l_parent_ver_id);
11482       FETCH get_top_task_ver_id into l_new_par_ver_id;
11483       CLOSE get_top_task_ver_id;
11484 
11485       OPEN get_top_task_ver_id(p_task_version_id);
11486       FETCH get_top_task_ver_id into l_old_par_ver_id;
11487       CLOSE get_top_task_Ver_id;
11488 
11489       IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
11490         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11491                              p_msg_name => 'PA_CANT_CHANGE_PARENT');
11492         raise FND_API.G_EXC_ERROR;
11493       END IF;
11494     END IF;
11495     --end bug 3069306
11496 
11497     PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
11498          p_parent_task_ver_id => l_parent_ver_id
11499         ,x_return_status      => l_return_status
11500         ,x_error_message_code => l_error_msg_code
11501       );
11502 
11503       IF (l_return_status <> 'Y') THEN
11504         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11505                              p_msg_name => l_error_msg_code);
11506         raise FND_API.G_EXC_ERROR;
11507       END IF;
11508 
11509 --Bug 16013002
11510 -- Check if the task which is going to outdent is financial or not
11511 l_fin_task_flag  := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(src_proj_element_id);
11512 IF l_fin_task_flag='Y' THEN
11513 OPEN cur_child_tasks_exists(ref_elem_ver_id, src_seq_number);
11514 FETCH cur_child_tasks_exists INTO l_child_task_exists;
11515 -- check if there exists peer tasks (which are set to financial tasks) below to the task which is going to outdent
11516 IF cur_child_tasks_exists%FOUND THEN
11517 --validating if it is ok to create subtask
11518  pa_task_utils.check_create_subtask_ok(x_task_id => src_proj_element_id
11519                                        , x_err_code => l_err_code
11520                                        , x_err_stage => l_err_stage
11521                                        , x_err_stack => l_err_stack);
11522       IF (l_err_code <> 0) THEN
11523         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11524                              p_msg_name => substrb(l_err_stage,1,30));
11525         raise FND_API.G_EXC_ERROR;
11526       END IF;
11527 END IF;
11528 CLOSE cur_child_tasks_exists;
11529 END IF;
11530 --Bug 16013002
11531   -- Added for FP_M changes. Bug 3305199 : Bhumesh  xxx
11532 
11533   If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
11534         IN ('SHARE_PARTIAL')
11535   Then
11536 
11537     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
11538         p_task_version_id       => p_task_version_id
11539       , p_ref_task_version_id   => ref_elem_ver_id
11540       , x_return_status         => x_return_status
11541       , x_msg_count             => x_msg_count
11542       , x_msg_data              => x_msg_data
11543       , x_error_msg_code        => l_error_msg_code);
11544 
11545 --    IF (x_return_status <> 'Y') THEN  --Bug 3831786 Commented
11546     IF (x_return_status <> 'S') THEN    --Bug 3831786 Added
11547        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11548                 p_msg_name       => l_error_msg_code);
11549       raise FND_API.G_EXC_ERROR;
11550     End If;
11551   End If;
11552 
11553   --check the task is a lowest task bug 3301192
11554   l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
11555 
11556   -- End of FP_M changes
11557 
11558 /*
11559 
11560  The processing done by the followig two calls is made now as plsql table bulk processing
11561 
11562   PA_TASK_PUB1.Update_Task_Version
11563   ( p_validate_only          => FND_API.G_FALSE,
11564     p_ref_task_version_id    => l_ref_task_version_id,
11565     p_peer_or_sub            => 'PEER',
11566     p_task_version_id        => p_task_version_id,
11567     p_record_version_number  => p_record_version_number,
11568     p_action                 => 'OUTDENT',
11569     x_return_status          => l_return_status,
11570     x_msg_count              => l_msg_count,
11571     x_msg_data               => l_msg_data );
11572 
11573   PA_PROJ_ELEMENTS_UTILS.UPDATE_WBS_NUMBERS
11574   ( p_commit                   => p_commit
11575    ,p_debug_mode               => p_debug_mode
11576    ,p_parent_structure_ver_id  => l_parent_structure_version_id
11577    ,p_task_id                  => p_task_version_id
11578    ,p_display_seq              => l_display_sequence
11579    ,p_action                   => 'OUTDENT'
11580    ,p_parent_task_id           => NULL
11581    ,x_return_status            => l_return_status );
11582 
11583 */
11584 
11585 
11586 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
11587 
11588 -- Logic Added for plsql table
11589 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
11590 
11591 l_element_version_id_tab.delete;
11592 l_proj_element_id_tab.delete;
11593 l_object_type_tab.delete;
11594 l_project_id_tab.delete;
11595 l_parent_str_version_id_tab.delete;
11596 l_display_sequence_tab.delete;
11597 l_wbs_level_tab.delete;
11598 l_old_wbs_level_tab.delete;
11599 l_wbs_number_tab.delete;
11600 l_record_version_tab.delete;
11601 l_changed_flag_tab.delete;
11602 
11603   BEGIN
11604             SELECT  distinct element_version_id, proj_element_id, object_type,
11605             project_id, parent_structure_version_id,
11606             display_sequence, wbs_level, wbs_number,
11607             record_version_number, 'N' changed_flag
11608              BULK COLLECT INTO l_element_version_id_tab,
11609             l_proj_element_id_tab, l_object_type_tab,
11610             l_project_id_tab, l_parent_str_version_id_tab,
11611             l_display_sequence_tab, l_wbs_level_tab,
11612             l_wbs_number_tab, l_record_version_tab,
11613             l_changed_flag_tab
11614             FROM
11615         pa_proj_element_versions
11616         WHERE
11617                  project_id = p_project_id
11618         AND parent_structure_version_id = p_structure_version_id
11619         AND object_type = 'PA_TASKS'
11620         AND(
11621         element_version_id = p_task_version_id  -- Source task itself
11622         OR element_version_id IN -- All tasks below the source task
11623         (select object_id_to1
11624         from pa_object_relationships
11625         where relationship_type = 'S'
11626                 and object_type_to = 'PA_TASKS'
11627         start with object_id_from1 = l_ref_parent_ver_id
11628         connect by object_id_from1 = PRIOR object_id_to1
11629                     and relationship_type = prior relationship_type
11630                     and relationship_type = 'S')
11631         )
11632         ORDER BY display_sequence ;
11633             l_old_wbs_level_tab := l_wbs_level_tab;
11634   EXCEPTION
11635     WHEN OTHERS THEN
11636         raise;
11637   END;
11638 
11639 --bug 4214825, commented out this code as this validation is not required in case of outdent
11640 /*--bug 3475920
11641 --Need loop to check all new subtasks and see if ok (for deliverable type task)
11642   FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11643     --check if moving to subtask ok
11644     IF (l_element_version_id_tab(j) <> p_task_version_id) Then
11645       IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_element_version_id_tab(j)) = 'Y' THEN
11646         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11647                              p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
11648         raise FND_API.G_EXC_ERROR;
11649       END IF;
11650     END IF;
11651   END LOOP;
11652 --end bug 3475920*/
11653 
11654 
11655 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
11656 -- Here we can also incorporate sequence number update. In OUTDENT sequence number does not change.
11657 
11658 -- Update wbs level
11659 
11660  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11661         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
11662             l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
11663             l_changed_flag_tab(j) := 'Y';
11664         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
11665             -- Direct Childs of source
11666             l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
11667             l_changed_flag_tab(j) := 'Y';
11668         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
11669             -- Exit level changes, IT means no Direct childs are left
11670             EXIT;
11671         END IF;
11672  END LOOP;
11673 
11674 
11675 -- Update wbs_number
11676 
11677 
11678  src_branch_mask := src_wbs_number;
11679  ref_branch_mask := ref_wbs_number;
11680  first_sub_task_below_src_flag := false;
11681 
11682 
11683  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
11684         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
11685         IF src_wbs_level = 2 THEN -- This is going to be a top task
11686             l_wbs_number := to_char(to_number(ref_wbs_number)+1);
11687                 l_wbs_number_tab(j) := l_wbs_number;
11688                 l_changed_flag_tab(j) := 'Y';
11689                 l_new_wbs_number := l_wbs_number;
11690         ELSE
11691               l_number := instr(ref_wbs_number,'.', -1, 1);
11692               l_str1 := substr(ref_wbs_number, 1, l_number -1);
11693               l_str2 := substr(ref_wbs_number, l_number + 1);
11694               l_str2 := to_char(to_number(l_str2 + 1));
11695               l_wbs_number := l_str1 || '.' || l_str2;
11696               l_wbs_number_tab(j) := l_wbs_number;
11697               l_changed_flag_tab(j) := 'Y';
11698               l_new_wbs_number := l_wbs_number;
11699         END IF;
11700     ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
11701         IF l_display_sequence_tab(j) > src_seq_number THEN
11702         IF src_wbs_level = 2 THEN -- Source is going to be a top task
11703               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
11704                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
11705             -- Direct childs of source
11706                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
11707               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11708                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
11709               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
11710                   l_wbs_number_tab(j) := l_wbs_number;
11711                   l_changed_flag_tab(j) := 'Y';
11712               IF l_old_wbs_level_tab(j) = src_wbs_level+1 THEN
11713                 first_sub_task_below_src_flag := true;
11714                 last_sub_task_below_src := l_wbs_number;
11715               END IF;
11716               ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
11717                  AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
11718               IF first_sub_task_below_src_flag = false THEN
11719                   l_wbs_number := l_new_wbs_number || '.1';
11720                   first_sub_task_below_src_flag := true;
11721                   last_sub_task_below_src := l_wbs_number;
11722                   temp_old_branch_mask := l_wbs_number_tab(j);
11723                   temp_new_branch_mask := l_wbs_number;
11724                   l_wbs_number_tab(j) := l_wbs_number;
11725                   l_changed_flag_tab(j) := 'Y';
11726               ELSE
11727                 IF (l_old_wbs_level_tab(j) = src_wbs_level) THEN
11728                       l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
11729                   l_str1 := to_char(to_number(l_str1 + 1));
11730                   l_wbs_number := l_new_wbs_number || '.' || l_str1;
11731                   temp_old_branch_mask := l_wbs_number_tab(j);
11732                   temp_new_branch_mask := l_wbs_number;
11733                   l_wbs_number_tab(j) := l_wbs_number;
11734                   l_changed_flag_tab(j) := 'Y';
11735                   last_sub_task_below_src := l_wbs_number;
11736                 ELSE
11737                       l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
11738                   l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11739                       l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
11740                   l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
11741                   l_wbs_number_tab(j) := l_wbs_number;
11742                   l_changed_flag_tab(j) := 'Y';
11743                                 END IF;
11744               END IF;
11745               ELSE
11746                  IF(instr(l_wbs_number_tab(j), '.') <> 0) then
11747                  l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
11748                  l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
11749                  l_str1 := to_char(to_number(l_str1) + 1);
11750                          l_wbs_number := l_str1 || l_str2;
11751                  l_wbs_number_tab(j) := l_wbs_number;
11752                  l_changed_flag_tab(j) := 'Y';
11753                  ELSE
11754                      l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) + 1);
11755                  l_wbs_number_tab(j) := l_wbs_number;
11756                  l_changed_flag_tab(j) := 'Y';
11757              END IF;
11758               END IF;
11759         ELSE
11760               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
11761                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
11762             -- Direct childs of source
11763                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
11764               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11765                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
11766               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
11767                   l_wbs_number_tab(j) := l_wbs_number;
11768                   l_changed_flag_tab(j) := 'Y';
11769               IF (l_old_wbs_level_tab(j) = src_wbs_level+1) THEN
11770                 first_sub_task_below_src_flag := true;
11771                 last_sub_task_below_src := l_wbs_number;
11772               END IF;
11773               ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
11774                  AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
11775               IF first_sub_task_below_src_flag = false THEN
11776                   l_wbs_number := l_new_wbs_number || '.1';
11777                   first_sub_task_below_src_flag := true;
11778                   last_sub_task_below_src := l_wbs_number;
11779                   temp_old_branch_mask := l_wbs_number_tab(j);
11780                   temp_new_branch_mask := l_wbs_number;
11781                   l_wbs_number_tab(j) := l_wbs_number;
11782                   l_changed_flag_tab(j) := 'Y';
11783               ELSE
11784                 IF l_old_wbs_level_tab(j) = src_wbs_level THEN
11785                       l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
11786                   l_str1 := to_char(to_number(l_str1 + 1));
11787                   l_wbs_number := l_new_wbs_number || '.' || l_str1;
11788                   temp_old_branch_mask := l_wbs_number_tab(j);
11789                   temp_new_branch_mask := l_wbs_number;
11790                   l_wbs_number_tab(j) := l_wbs_number;
11791                   l_changed_flag_tab(j) := 'Y';
11792                   last_sub_task_below_src := l_wbs_number;
11793                 ELSE
11794                       l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
11795                   l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
11796                       l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
11797                   l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
11798                   l_wbs_number_tab(j) := l_wbs_number;
11799                   l_changed_flag_tab(j) := 'Y';
11800                                 END IF;
11801               END IF;
11802               ELSE
11803                   l_str1 := substr(l_wbs_number_tab(j), length(ref_parent_branch_mask) + 2);
11804               IF(instr(l_str1, '.') <> 0) THEN
11805                 l_str2 := substr(l_str1, instr(l_str1, '.'));
11806                 l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
11807                 l_str1 := to_char(to_number(l_str1) + 1);
11808                 l_wbs_number := ref_parent_branch_mask || '.' || l_str1 || l_str2;
11809                 l_wbs_number_tab(j) := l_wbs_number;
11810                 l_changed_flag_tab(j) := 'Y';
11811               ELSE
11812                 l_str1:= to_char(to_number(l_str1) + 1);
11813                 l_wbs_number := ref_parent_branch_mask || '.' || l_str1;
11814                 l_wbs_number_tab(j) := l_wbs_number;
11815                 l_changed_flag_tab(j) := 'Y';
11816               END IF;
11817               END IF;
11818         END IF;
11819           END IF;
11820     END IF;
11821      END LOOP;
11822 
11823 
11824 l_user_id := fnd_global.user_id;
11825 l_login_id := fnd_global.login_id;
11826 
11827 -- Locking should be implemented here
11828 
11829  FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
11830  UPDATE PA_PROJ_ELEMENT_VERSIONS
11831  SET
11832         wbs_level                = l_wbs_level_tab(j)           ,
11833         wbs_number                   = l_wbs_number_tab(j)          ,
11834         last_update_date                 = sysdate          ,
11835         last_updated_by                  = l_user_id            ,
11836         last_update_login                = l_login_id           ,
11837     record_version_number        = l_record_version_tab(j)+1
11838  WHERE  element_version_id         = l_element_version_id_tab(j)
11839  AND l_changed_flag_tab(j)='Y';
11840 
11841 
11842 -- Update Relationship
11843 
11844       IF ref_object_type = 'PA_TASKS'
11845       THEN
11846          IF l_peer_or_sub = 'PEER'
11847          THEN
11848             OPEN cur_obj_rel( ref_elem_ver_id );
11849             FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
11850             CLOSE cur_obj_rel;
11851 
11852             l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
11853 
11854             IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
11855             THEN
11856                 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
11857                 l_task_version_from := null;
11858             ELSE
11859                 l_task_version_from  := v_cur_obj_rel_rec.object_id_from1;
11860                 l_struc_version_from := null;
11861             END IF;
11862 
11863         --There could be some tasks with sequence number greater than the p_task_version that now become
11864             --children of p_task_version.
11865         -- I don't think so that this is needed. This is not possible in any case
11866             l_update_new_child_rels := 'Y';
11867 
11868          ELSE -- l_peer_or_sub = 'SUB' Basically this case will not be for OUTDENT
11869                 --parent task is the reference task
11870             l_task_version_from  := ref_elem_ver_id;
11871             l_struc_version_from := null;
11872             l_relationship_subtype := 'TASK_TO_TASK';
11873          END IF;
11874      -- The following case is not possible for Indent/Outdent
11875       ELSIF ref_object_type = 'PA_STRUCTURES'
11876       THEN
11877          l_struc_version_from := ref_elem_ver_id;
11878          l_task_version_from  := null;
11879          l_relationship_subtype := 'STRUCTURE_TO_TASK';
11880       END IF; -- ref_object_type = 'PA_TASKS'
11881 
11882 
11883  --update relatonship of the task version p_task_version.
11884  --set structure_version_from and task_version_from accordingly.
11885  OPEN cur_obj_rel( p_task_version_id );
11886  FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
11887  CLOSE cur_obj_rel;
11888 
11889 --for task weighting
11890  OPEN get_task_weighting(p_task_version_id);
11891  FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
11892  CLOSE get_task_weighting;
11893 
11894 
11895  IF(l_task_version_from is not null) THEN
11896    l_version_from := l_task_version_from;
11897  ELSE
11898    l_version_from := l_struc_version_from;
11899  END IF;
11900 
11901  IF (l_version_from = p_task_version_id) THEN
11902    l_new_weighting := l_old_weighting;
11903  ELSE
11904    OPEN get_sub_tasks(l_version_from);
11905    FETCH get_sub_tasks into l_dummy;
11906    IF (get_sub_tasks%NOTFOUND) THEN
11907      l_new_weighting := 100;
11908      --bug 2673570
11909      OPEN check_progress_allowed(p_task_version_id);
11910      FETCH check_progress_allowed INTO l_progress_allowed;
11911      CLOSE check_progress_allowed;
11912 
11913      if l_progress_allowed = 'N' then
11914         l_new_weighting := 0;
11915      end if;
11916      --bug 2673570
11917    ELSE
11918      l_new_weighting := 0;
11919    END IF;
11920    CLOSE get_sub_tasks;
11921  END IF;
11922 
11923  PA_RELATIONSHIP_PVT.Update_Relationship
11924              (
11925               p_api_version                       => p_api_version
11926              ,p_init_msg_list                     => p_init_msg_list
11927              ,p_commit                            => p_commit
11928              ,p_validate_only                     => p_validate_only
11929              ,p_validation_level                  => p_validation_level
11930              ,p_calling_module                    => p_calling_module
11931              ,p_debug_mode                        => p_debug_mode
11932              ,p_max_msg_count                     => p_max_msg_count
11933              ,p_object_relationship_id            => v_cur_obj_rel_rec.object_relationship_id
11934              ,p_project_id_from                   => null
11935              ,p_structure_id_from                 => null
11936              ,p_structure_version_id_from         => l_struc_version_from
11937              ,p_task_version_id_from              => l_task_version_from
11938              ,p_project_id_to                     => null
11939              ,p_structure_id_to                   => null
11940              ,p_structure_version_id_to           => null
11941              ,p_task_version_id_to                => p_task_version_id
11942              ,p_relationship_type                 => 'S'
11943              ,p_relationship_subtype              => l_relationship_subtype
11944              ,p_weighting_percentage              => l_new_weighting
11945              ,p_record_version_number             => v_cur_obj_rel_rec.record_version_number
11946              ,x_return_status                     => l_return_status
11947              ,x_msg_count                         => l_msg_count
11948              ,x_msg_data                          => l_msg_data
11949             );
11950 
11951 
11952              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
11953                 x_msg_count := FND_MSG_PUB.count_msg;
11954                 IF x_msg_count = 1 then
11955                    pa_interface_utils_pub.get_messages
11956                    (p_encoded        => FND_API.G_TRUE,
11957                     p_msg_index      => 1,
11958                     p_msg_count      => l_msg_count,
11959                     p_msg_data       => l_msg_data,
11960                     p_data           => l_data,
11961                     p_msg_index_out  => l_msg_index_out);
11962                     x_msg_data := l_data;
11963                 END IF;
11964              raise FND_API.G_EXC_ERROR;
11965              END IF;
11966 
11967 -- I don't think the following code is needed. This case is impossible in case of OUTDENT
11968      IF l_update_new_child_rels = 'Y' -- AND p_action IN( 'OUTDENT' )
11969      THEN
11970         FOR cur_new_child_rec in cur_new_child(ref_elem_ver_id, src_seq_number) LOOP
11971             OPEN get_sub_tasks(p_task_version_id);
11972             FETCH get_sub_tasks into l_dummy;
11973             IF (get_sub_tasks%NOTFOUND) THEN
11974               l_new_weighting := 100;
11975             ELSE
11976               l_new_weighting := 0;
11977             END IF;
11978             CLOSE get_sub_tasks;
11979 
11980             --bug 4099488
11981             IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_task_version_id, cur_new_child_rec.object_id_to1) = 'N' THEN
11982               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11983                                    p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
11984               raise FND_API.G_EXC_ERROR;
11985             END IF;
11986             --end bug 4099488
11987 
11988             PA_RELATIONSHIP_PVT.Update_Relationship
11989               (
11990               p_api_version                       => p_api_version
11991              ,p_init_msg_list                     => p_init_msg_list
11992              ,p_commit                            => p_commit
11993              ,p_validate_only                     => p_validate_only
11994              ,p_validation_level                  => p_validation_level
11995              ,p_calling_module                    => p_calling_module
11996              ,p_debug_mode                        => p_debug_mode
11997              ,p_max_msg_count                     => p_max_msg_count
11998              ,p_object_relationship_id            => cur_new_child_rec.object_relationship_id
11999              ,p_project_id_from                   => null
12000              ,p_structure_id_from                 => null
12001              ,p_structure_version_id_from         => null
12002              ,p_task_version_id_from              => p_task_version_id
12003              ,p_project_id_to                     => null
12004              ,p_structure_id_to                   => null
12005              ,p_structure_version_id_to           => null
12006              ,p_task_version_id_to                => cur_new_child_rec.object_id_to1
12007              ,p_relationship_type                 => 'S'
12008              ,p_relationship_subtype              => 'TASK_TO_TASK'
12009              ,p_weighting_percentage              => l_new_weighting
12010              ,p_record_version_number             => cur_new_child_rec.record_version_number
12011              ,x_return_status                     => x_return_status
12012              ,x_msg_count                         => x_msg_count
12013              ,x_msg_data                          => x_msg_data
12014             );
12015 
12016              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12017                 x_msg_count := FND_MSG_PUB.count_msg;
12018                 IF x_msg_count = 1 then
12019                    pa_interface_utils_pub.get_messages
12020                    (p_encoded        => FND_API.G_TRUE,
12021                     p_msg_index      => 1,
12022                     p_msg_count      => l_msg_count,
12023                     p_msg_data       => l_msg_data,
12024                     p_data           => l_data,
12025                     p_msg_index_out  => l_msg_index_out);
12026                     x_msg_data := l_data;
12027                 END IF;
12028              raise FND_API.G_EXC_ERROR;
12029              END IF;
12030 
12031         END LOOP;
12032      END IF;
12033 
12034 --for task weighting
12035      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
12036        p_task_version_id => l_old_parent_id
12037       ,x_return_status => l_return_status
12038       ,x_msg_count => l_msg_count
12039       ,x_msg_data => l_msg_data
12040      );
12041 
12042      x_msg_count := FND_MSG_PUB.count_msg;
12043      IF x_msg_count = 1 then
12044        pa_interface_utils_pub.get_messages
12045         (p_encoded        => FND_API.G_TRUE,
12046          p_msg_index      => 1,
12047          p_msg_count      => l_msg_count,
12048          p_msg_data       => l_msg_data,
12049          p_data           => l_data,
12050          p_msg_index_out  => l_msg_index_out);
12051          x_msg_data := l_data;
12052       END IF;
12053 
12054      --bug 2673570
12055      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
12056        p_task_version_id => p_task_version_id
12057       ,x_return_status => l_return_status
12058       ,x_msg_count => l_msg_count
12059       ,x_msg_data => l_msg_data
12060      );
12061 
12062      x_msg_count := FND_MSG_PUB.count_msg;
12063      IF x_msg_count = 1 then
12064        pa_interface_utils_pub.get_messages
12065         (p_encoded        => FND_API.G_TRUE,
12066          p_msg_index      => 1,
12067          p_msg_count      => l_msg_count,
12068          p_msg_data       => l_msg_data,
12069          p_data           => l_data,
12070          p_msg_index_out  => l_msg_index_out);
12071          x_msg_data := l_data;
12072       END IF;
12073      --bug 2673570
12074 --end changes for task weighting
12075 
12076 
12077 /*** End Update_task_version and Update_wbs_number code ***/
12078 
12079   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
12080     FROM pa_proj_element_versions
12081    WHERE element_version_id =  ( Select parent_structure_version_id
12082                                    from pa_proj_element_versions
12083                                   where element_version_id = p_task_version_id )
12084      AND object_type = 'PA_STRUCTURES';
12085 
12086 
12087   --Do financial task check
12088   --If financial
12089   OPEN cur_struc_type( l_structure_id );
12090   FETCH cur_struc_type INTO l_dummy_char;
12091   IF cur_struc_type%FOUND
12092   THEN
12093       --If structure has any published versions.
12094       l_published_version := 'N';
12095       OPEN cur_pub_versions( l_structure_id, l_project_id );
12096       FETCH cur_pub_versions INTO l_published_version;
12097       CLOSE cur_pub_versions;
12098 
12099 
12100       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
12101                                                      l_project_id);
12102       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
12103                                                   l_project_id);
12104 
12105 --o      IF (NVL( l_published_version, 'N' ) = 'N') OR (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y') THEN
12106       l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --outdent in corresponding task in pa_tasks
12107 
12108       IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
12109          (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
12110 	 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
12111 	 THEN
12112 
12113           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
12114             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
12115             FROM PA_TASKS pt,
12116                  pa_proj_elem_ver_structure ppa,
12117                  PA_PROJ_ELEMENT_VERSIONS ppev
12118            WHERE ppev.element_version_id = p_task_version_id
12119              AND ppev.parent_structure_version_id = ppa.element_version_id
12120              AND ppev.project_id = ppa.project_id
12121              AND ppev.proj_element_id = pt.task_id;
12122 
12123 -- Merged from 85
12124           SELECT record_version_number, parent_task_id, wbs_level    --get old parent id for bug 2947492 (outdent )
12125                  ,top_task_id
12126             INTO l_task_record_version_number, l_old_parent_task_id, l_old_wbs_level
12127                  ,l_old_top_task_id
12128             FROM pa_tasks
12129            WHERE task_id = l_task_id
12130              AND project_id = l_project_id;
12131 -- Merged from 85
12132 
12133 -- Merged from 85
12134           --Bug 2947492 ( outdent )
12135 
12136           --The following cursor will pick those taks that become child tasks of outdenting task
12137           --which were initially at the same level with display sequence greater than the outdenting task.
12138 /*
12139           i:= 0;
12140           FOR  cur_new_child_task_rec in cur_new_child_task( l_project_id, l_old_wbs_level,
12141                                                              l_task_id, l_old_parent_task_id ) LOOP
12142 
12143             i := i + 1;
12144 
12145             l_plannable_tasks_tbl(i).impacted_task_id   := cur_new_child_task_rec.task_id;
12146             l_plannable_tasks_tbl(i).action             := 'REPARENT';
12147             l_plannable_tasks_tbl(i).old_parent_task_id := cur_new_child_task_rec.parent_task_id;
12148             l_plannable_tasks_tbl(i).New_parent_task_id := l_task_id;
12149             l_plannable_tasks_tbl(i).top_task_id        := cur_new_child_task_rec.top_task_id;
12150 
12151             --First call the check_reparent ok
12152             --This should have been called in the beginning but due to lot of complexity involved in getting
12153             --new parent task id it is decided to call this later stage as long as  we rollback the whole operation
12154             --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
12155 
12156             PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
12157                      p_task_id                    => cur_new_child_task_rec.task_id
12158                     ,p_old_parent_task_id         => cur_new_child_task_rec.parent_task_id
12159                     ,p_new_parent_task_id         => l_task_id
12160                     ,x_return_status              => l_return_status
12161                     ,x_msg_count                  => l_msg_count
12162                     ,x_msg_data                   => l_msg_data
12163                 );
12164 
12165              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12166                 x_msg_count := FND_MSG_PUB.count_msg;
12167                 IF x_msg_count = 1 then
12168                    pa_interface_utils_pub.get_messages
12169                    (p_encoded        => FND_API.G_TRUE,
12170                     p_msg_index      => 1,
12171                     p_msg_count      => l_msg_count,
12172                     p_msg_data       => l_msg_data,
12173                     p_data           => l_data,
12174                     p_msg_index_out  => l_msg_index_out);
12175                     x_msg_data := l_data;
12176                 END IF;
12177                 raise FND_API.G_EXC_ERROR;
12178              END IF;
12179 
12180           END LOOP;
12181           --End Bug 2947492 ( outdent )
12182 */  ---commenitng out, please check venkatesh mail dated 22 jan 04
12183 
12184 -- Merged from 85
12185 
12186           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
12187                          p_project_id                        => l_project_id
12188                         ,p_task_id                           => l_task_id
12189                         ,p_edit_mode                         => 'OUTDENT'
12190                         ,p_record_version_number             => l_task_record_version_number
12191                         ,p_wbs_record_version_number         => 1
12192                         ,x_return_status                     => l_return_status
12193                         ,x_msg_count                         => l_msg_count
12194                         ,x_msg_data                          => l_msg_data );
12195 
12196   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12197                 x_msg_count := FND_MSG_PUB.count_msg;
12198                 IF x_msg_count = 1 then
12199                    pa_interface_utils_pub.get_messages
12200                    (p_encoded        => FND_API.G_TRUE,
12201                     p_msg_index      => 1,
12202                     p_msg_count      => l_msg_count,
12203                     p_msg_data       => l_msg_data,
12204                     p_data           => l_data,
12205                     p_msg_index_out  => l_msg_index_out);
12206                     x_msg_data := l_data;
12207                 END IF;
12208                 raise FND_API.G_EXC_ERROR;
12209              END IF;
12210 
12211           --Bug 2947492 (outdent )
12212           --
12213 
12214             OPEN get_parent_task_id( l_task_id , l_project_id );
12215             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
12216             CLOSE get_parent_task_id;
12217 
12218             --bug 2967204
12219             --Cannot move out of the current hierarchy
12220               IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
12221               THEN
12222                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
12223                                        p_msg_name => 'PA_CANT_CHANGE_PARENT');
12224                   raise FND_API.G_EXC_ERROR;
12225               END IF;
12226             --End bug 2967204
12227 
12228 /*
12229             --First call the check_reparent ok
12230             --This should have been called in the beginning but due to lot of complexity involved in getting
12231             --new parent task id it is decided to call this later stage as long as  we rollback the whole operation
12232             --if there is any error occurred. This was decided in meeting with me , Hubert and Sakthi.
12233             PA_FIN_PLAN_UTILS.CHECK_REPARENT_TASK_OK(
12234                      p_task_id                    => l_task_id
12235                     ,p_old_parent_task_id         => l_old_parent_task_id
12236                     ,p_new_parent_task_id         => l_parent_task_id
12237                     ,x_return_status              => l_return_status
12238                     ,x_msg_count                  => l_msg_count
12239                     ,x_msg_data                   => l_msg_data
12240                 );
12241 
12242              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12243                 x_msg_count := FND_MSG_PUB.count_msg;
12244                 IF x_msg_count = 1 then
12245                    pa_interface_utils_pub.get_messages
12246                    (p_encoded        => FND_API.G_TRUE,
12247                     p_msg_index      => 1,
12248                     p_msg_count      => l_msg_count,
12249                     p_msg_data       => l_msg_data,
12250                     p_data           => l_data,
12251                     p_msg_index_out  => l_msg_index_out);
12252                     x_msg_data := l_data;
12253                 END IF;
12254                 raise FND_API.G_EXC_ERROR;
12255              END IF;
12256 */  --check venkatesh mail dated 22 jan 04
12257 
12258 /* Commenting out the call to MAINTAIN_PLANNABLE_TASKS for bug 3010538
12259             i := NVL( l_plannable_tasks_tbl.last, 0 ) + 1;
12260 
12261             l_plannable_tasks_tbl(i).impacted_task_id   := l_task_id;
12262             l_plannable_tasks_tbl(i).action             := 'REPARENT';
12263             l_plannable_tasks_tbl(i).old_parent_task_id := l_old_parent_task_id;
12264             l_plannable_tasks_tbl(i).New_parent_task_id := l_parent_task_id;
12265             l_plannable_tasks_tbl(i).top_task_id        := l_top_task_id;
12266 
12267 
12268             PA_FP_ELEMENTS_PUB.MAINTAIN_PLANNABLE_TASKS(
12269                     p_project_id         => p_project_id
12270                   , p_impacted_tasks_tbl => l_plannable_tasks_tbl
12271                   , x_return_status      => l_return_status
12272                   , x_msg_data           => l_msg_data
12273                   , x_msg_count          => l_msg_count
12274                 );
12275 
12276              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
12277                 x_msg_count := FND_MSG_PUB.count_msg;
12278                 IF x_msg_count = 1 then
12279                    pa_interface_utils_pub.get_messages
12280                    (p_encoded        => FND_API.G_TRUE,
12281                     p_msg_index      => 1,
12282                     p_msg_count      => l_msg_count,
12283                     p_msg_data       => l_msg_data,
12284                     p_data           => l_data,
12285                     p_msg_index_out  => l_msg_index_out);
12286                     x_msg_data := l_data;
12287                 END IF;
12288              raise FND_API.G_EXC_ERROR;
12289              END IF;
12290 bug 3010538 */
12291 
12292           --End Bug 2947492 (outdent )
12293 
12294       END IF;
12295   END IF;
12296   CLOSE cur_struc_type;
12297 
12298 -- Added for date rollup; workplan only
12299 
12300   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
12301 
12302     -- Added for FP_M changes Bug 3305199 : Bhumesh
12303     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
12304 
12305        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
12306           p_structure_version_id => P_Structure_Version_ID
12307      ,p_dirty_flag           => 'Y'             --bug 3902282
12308      ,x_return_status        => x_return_status
12309      ,x_msg_count            => x_msg_count
12310      ,x_msg_data             => x_msg_data
12311        );
12312 
12313        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
12314          x_msg_count := FND_MSG_PUB.count_msg;
12315          If x_msg_count = 1 then
12316            pa_interface_utils_pub.get_messages
12317            (p_encoded        => FND_API.G_TRUE,
12318             p_msg_index      => 1,
12319             p_msg_count      => l_msg_count,
12320             p_msg_data       => l_msg_data,
12321             p_data           => l_data,
12322             p_msg_index_out  => l_msg_index_out);
12323             x_msg_data := l_data;
12324          End If;
12325          raise FND_API.G_EXC_ERROR;
12326        End If;
12327     End If;
12328     -- End of FP_M changes
12329 
12330     l_tasks_ver_ids.extend;
12331     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
12332 
12333 --added for task status rollup
12334     IF (l_rollup_task_id IS NULL) THEN
12335       l_rollup_task_id := p_task_version_id;
12336     END IF;
12337 
12338     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
12339                        p_commit => FND_API.G_FALSE,
12340                        p_element_versions => l_tasks_ver_ids,
12341                        x_return_status => l_return_status,
12342                        x_msg_count => l_msg_count,
12343                        x_msg_data => l_msg_data);
12344 
12345      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12346        x_msg_count := FND_MSG_PUB.count_msg;
12347        if x_msg_count = 1 then
12348          pa_interface_utils_pub.get_messages
12349          (p_encoded        => FND_API.G_TRUE,
12350           p_msg_index      => 1,
12351           p_msg_count      => l_msg_count,
12352           p_msg_data       => l_msg_data,
12353           p_data           => l_data,
12354           p_msg_index_out  => l_msg_index_out);
12355           x_msg_data := l_data;
12356        end if;
12357        raise FND_API.G_EXC_ERROR;
12358      end if;
12359 
12360 --if versioning is off, rollup.
12361      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
12362        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
12363                   p_structure_version_id => p_structure_version_id
12364                  ,p_element_version_id => l_rollup_task_id
12365                  ,x_return_status => l_return_status
12366                  ,x_msg_count => l_msg_count
12367                  ,x_msg_data => l_msg_data
12368        );
12369 
12370        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12371          x_msg_count := FND_MSG_PUB.count_msg;
12372          if x_msg_count = 1 then
12373            pa_interface_utils_pub.get_messages
12374            (p_encoded        => FND_API.G_TRUE,
12375             p_msg_index      => 1,
12376             p_msg_count      => l_msg_count,
12377             p_msg_data       => l_msg_data,
12378             p_data           => l_data,
12379             p_msg_index_out  => l_msg_index_out);
12380             x_msg_data := l_data;
12381          end if;
12382          raise FND_API.G_EXC_ERROR;
12383        end if;
12384      END IF;
12385 
12386   END IF;
12387 
12388 --bug 3010538  ( outdent )
12389 --bug 3053281 --set flag if not (manual and workplan only)
12390 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
12391 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
12392 /*
12393 IF (l_shared = 'N') AND
12394    (l_wp_type = 'Y') AND
12395    (l_weighting_basis_Code = 'MANUAL') THEN
12396   --do not set the flag to 'Y'
12397   NULL;
12398 ELSE
12399 */
12400   --3035902: process update flag changes
12401   OPEN get_task_type_id(src_proj_element_id);
12402   FETCH get_task_type_id INTO l_task_type_id;
12403   CLOSE get_task_type_id;
12404 
12405   --set update process flag if necessary;
12406   IF (l_wp_process_flag = 'N') THEN
12407     --may need to update process flag
12408     IF ((l_shared = 'N') AND
12409         (l_wp_type = 'Y') AND
12410         (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
12411         (l_weighting_basis_code <> 'MANUAL'))
12412     THEN
12413       --split and workplan; only update if progressable task added
12414       l_wp_process_flag := 'Y';
12415     ELSIF ((l_shared = 'N') AND
12416            (l_wp_type = 'N')) THEN
12417       --split and financial; update
12418       l_wp_process_flag := 'Y';
12419     ELSIF (l_shared = 'Y') THEN
12420       l_wp_process_flag := 'Y';
12421     END IF;
12422   END IF;
12423 
12424   --Bug No 3450684 SMukka Commented if condition
12425   --IF (l_wp_process_flag = 'Y') THEN
12426    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
12427    (
12428       p_calling_context       => 'SELF_SERVICE'
12429      ,p_project_id            => p_project_id
12430      ,p_structure_version_id  => p_structure_version_id
12431      ,p_update_wbs_flag       => 'Y'
12432      ,x_return_status         => l_return_status
12433      ,x_msg_count             => l_msg_count
12434      ,x_msg_data              => l_msg_data);
12435 
12436    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12437      x_msg_count := FND_MSG_PUB.count_msg;
12438      if x_msg_count = 1 then
12439        pa_interface_utils_pub.get_messages
12440        (p_encoded        => FND_API.G_TRUE,
12441         p_msg_index      => 1,
12442         p_msg_count      => l_msg_count,
12443         p_msg_data       => l_msg_data,
12444         p_data           => l_data,
12445         p_msg_index_out  => l_msg_index_out);
12446         x_msg_data := l_data;
12447      end if;
12448      raise FND_API.G_EXC_ERROR;
12449    end if;
12450 --end if;
12451   --3035902: end process update flag changes
12452 
12453   --ideally the following calls should have been cached. but due to time constraints
12454   --we need to write the code this way in multiple places.
12455   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
12456    THEN
12457        IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and  l_published_version = 'N' ) THEN
12458 
12459        --Outdent
12460        pa_fp_refresh_elements_pub.set_process_flag_proj(
12461              p_project_id               => p_project_id
12462             ,p_request_id               => null
12463             ,p_process_code             => null
12464             ,p_refresh_required_flag    => 'Y'
12465             ,x_return_status            => l_return_status
12466             ,x_msg_count                => l_msg_count
12467             ,x_msg_data                 => l_msg_data );
12468 
12469         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12470            x_msg_count := FND_MSG_PUB.count_msg;
12471            if x_msg_count = 1 then
12472              pa_interface_utils_pub.get_messages
12473             (p_encoded        => FND_API.G_TRUE,
12474              p_msg_index      => 1,
12475              p_msg_count      => l_msg_count,
12476              p_msg_data       => l_msg_data,
12477              p_data           => l_data,
12478              p_msg_index_out  => l_msg_index_out);
12479              x_msg_data := l_data;
12480            end if;
12481            raise FND_API.G_EXC_ERROR;
12482         end if;
12483       END IF;
12484    END IF;
12485 
12486 --End bug 3010538  ( outdent )
12487 
12488 --bug 3301192
12489    --check the task is a lowest task again and check whehter its no more a lowest task.
12490   l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
12491 
12492   IF l_lowest_task_flag1 = 'Y' AND
12493      l_lowest_task_flag2 = 'N'
12494   THEN
12495      IF l_wp_type = 'Y'
12496      THEN
12497      --now call call delete planning for task version id.
12498        l_task_ver_ids2.extend(1); /* Venky */
12499        l_task_ver_ids2(1) := p_task_version_id;
12500        /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
12501        /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
12502        DECLARE
12503            --p1 bug 3888432
12504            l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
12505            CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
12506              SELECT resource_assignment_id
12507                FROM pa_resource_assignments
12508               WHERE wbs_element_Version_id = c_task_ver_id
12509                 AND ta_display_flag = 'N';
12510            l_assign_id    NUMBER := NULL;
12511        BEGIN
12512            OPEN get_assignment_id(p_task_version_id);
12513            FETCH get_assignment_id into l_assign_id;
12514            CLOSE get_assignment_id;
12515 
12516            IF (l_assign_id IS NOT NULL) THEN
12517              l_assign_ids.extend(1);
12518              l_assign_ids(1) := l_assign_id;
12519              pa_fp_planning_transaction_pub.delete_planning_transactions
12520              (
12521              p_context                      => 'WORKPLAN'
12522             ,p_task_or_res                  => 'ASSIGNMENT'
12523 --          ,p_element_version_id_tbl       => l_task_ver_ids2
12524 --          ,p_maintain_reporting_lines     => 'Y'
12525             ,p_resource_assignment_tbl => l_assign_ids
12526             ,x_return_status                => l_return_status
12527             ,x_msg_count                    => l_msg_count
12528             ,x_msg_data                     => l_msg_data
12529              );
12530            END IF;
12531        EXCEPTION
12532            WHEN OTHERS then
12533                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12534                                         p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12535                                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
12536            RAISE FND_API.G_EXC_ERROR;
12537        END;
12538      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
12539        x_msg_count := FND_MSG_PUB.count_msg;
12540        if x_msg_count = 1 then
12541          pa_interface_utils_pub.get_messages
12542          (p_encoded        => FND_API.G_TRUE,
12543           p_msg_index      => 1,
12544           p_msg_count      => l_msg_count,
12545           p_msg_data       => l_msg_data,
12546           p_data           => l_data,
12547           p_msg_index_out  => l_msg_index_out);
12548           x_msg_data := l_data;
12549        end if;
12550        raise FND_API.G_EXC_ERROR;
12551      end if;
12552      END IF;  --<<l_wp_type>>
12553   END IF; --<<l_lowest_task_flag1>>
12554 --bug 3301192
12555 
12556   --bug 4149392
12557   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
12558   --end bug 4149392
12559 
12560   x_return_status := FND_API.G_RET_STS_SUCCESS;
12561 
12562   IF (p_commit = FND_API.G_TRUE) THEN
12563     COMMIT;
12564   END IF;
12565 
12566   IF (p_debug_mode = 'Y') THEN
12567     pa_debug.debug('PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK END');
12568   END IF;
12569 
12570 EXCEPTION
12571   when FND_API.G_EXC_ERROR then
12572     if p_commit = FND_API.G_TRUE then
12573       rollback to OUTDENT_task_version_bulk;
12574     end if;
12575     x_return_status := FND_API.G_RET_STS_ERROR;
12576   when FND_API.G_EXC_UNEXPECTED_ERROR then
12577     if p_commit = FND_API.G_TRUE then
12578       rollback to OUTDENT_task_version_bulk;
12579     end if;
12580     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12581     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12582                             p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12583                             p_error_text     => SUBSTRB(SQLERRM,1,240));
12584   when OTHERS then
12585     if p_commit = FND_API.G_TRUE then
12586       rollback to OUTDENT_task_version_bulk;
12587     end if;
12588     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12589     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
12590                             p_procedure_name => 'OUTDENT_TASK_VERSION_BULK',
12591                             p_error_text     => SUBSTRB(SQLERRM,1,240));
12592     raise;
12593 
12594 END OUTDENT_Task_Version_Bulk;
12595 
12596 /*
12597    This API is called from Multiple Tasks Delete Page.
12598    The API expects the task version id in this fashion
12599    1. If both parent and child below it is selected for
12600       deletetion the only parent task id should be pass
12601       -ed
12602 
12603    2. If top task is selected and child below it is sel
12604       --ected, API expects only top task id as input
12605 
12606    3. If only child is selected then API expexts only
12607       child task  id.
12608 
12609 
12610  Note :
12611    Since the self service page expects the error message
12612    to be displayed in following order :
12613 
12614    Task name (task number) : Proper Error Message ..
12615 
12616    i.e Task name/number  and corresponding error
12617    message to that task version. in one line
12618 
12619    Both Task Name /Number and error message set as
12620    token for message PA_PS_TASK_NAME_NUM_ERR
12621 
12622 */
12623 
12624 PROCEDURE DELETE_TASK_VERSION_IN_BULK
12625 (p_task_version_id_tbl         IN  SYSTEM.PA_NUM_TBL_TYPE
12626 ,p_record_version_number_tbl   IN  SYSTEM.PA_NUM_TBL_TYPE
12627 ,p_structure_version_id        IN  NUMBER
12628 ,p_structure_type              IN  VARCHAR2        :='WORKPLAN'   -- 3305199
12629 ,x_return_status               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12630 ,x_msg_count                   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
12631 ,x_msg_data                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
12632 
12633 )
12634 
12635 IS
12636 l_debug_mode        VARCHAR2(1) ;
12637 l_element_number    pa_proj_elements.element_number%TYPE ;
12638 l_element_name      pa_proj_elements.name%TYPE ;
12639 l_msg_count         NUMBER := 0;
12640 l_msg_data          VARCHAR2(2000);
12641 l_return_status     VARCHAR2(1);
12642 l_dummy_app_name    VARCHAR2(30);
12643 l_enc_msg_data      VARCHAR2(2000);
12644 l_msg_name          VARCHAR2(30);
12645 l_msg_index_out     NUMBER ;
12646 
12647 TYPE l_error_msg_name_tbl_type IS TABLE OF
12648           fnd_new_messages.message_text%TYPE INDEX BY BINARY_INTEGER ;
12649 TYPE l_element_name_tbl_type IS TABLE OF
12650           pa_proj_elements.name%TYPE INDEX BY BINARY_INTEGER ;
12651 TYPE l_element_number_tbl_type IS TABLE OF
12652           pa_proj_elements.element_number%TYPE INDEX BY BINARY_INTEGER ;
12653 
12654 l_error_msg_name_tbl l_error_msg_name_tbl_type ;
12655 l_element_name_tbl   l_element_name_tbl_type ;
12656 l_element_number_tbl l_element_number_tbl_type ;
12657 j                  NUMBER ;
12658 
12659 -- Bug 9535723
12660 l_project_id              pa_projects_all.project_id%TYPE;
12661 l_planned_effort_exists   VARCHAR(1) := 'N';
12662 
12663 -- below cursors are the same as those used currently in the flow
12664 CURSOR get_project_id(c_structure_version_id IN NUMBER) IS
12665   SELECT project_id
12666   FROM pa_proj_elem_ver_structure
12667   WHERE element_version_id = c_structure_version_id;
12668 
12669 CURSOR planned_effort_exists(c_element_version_id IN NUMBER) IS
12670   SELECT 'Y'
12671   FROM pa_resource_assignments
12672   WHERE wbs_element_version_id = c_element_version_id
12673   AND total_plan_quantity > 0
12674   AND rownum = 1;
12675 
12676 CURSOR get_all_subtasks(c_task_version_id NUMBER) IS
12677   SELECT object_id_to1 task_ver_id
12678   FROM pa_object_relationships pors
12679   START WITH object_id_from1 = c_task_version_id
12680     AND relationship_type = 'S'
12681     AND object_type_from = 'PA_TASKS'
12682     AND object_type_to = 'PA_TASKS'
12683   CONNECT BY relationship_type = PRIOR relationship_type
12684     AND PRIOR object_type_to = object_type_from
12685     AND PRIOR object_id_to1 = object_id_from1
12686   UNION
12687   SELECT element_version_id task_ver_id
12688   FROM pa_proj_element_versions
12689   WHERE element_version_id = c_task_version_id;
12690 
12691 BEGIN
12692 
12693     --hsiu: 3604086
12694     x_return_status := FND_API.G_RET_STS_SUCCESS;
12695 
12696     l_msg_count := 0;
12697     l_return_status := FND_API.G_RET_STS_SUCCESS;
12698     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N') ; -- Bug # 4605505.
12699     j := 0 ;
12700 
12701 --hsiu: commenting out due to p1 issue.
12702 --      savepoint should be issued only when p_commit
12703 --      is true, which is a missing parameter
12704 --    savepoint delete_bulk;
12705 
12706     FOR i in reverse p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
12707 
12708          IF l_debug_mode = 'Y' THEN
12709               pa_debug.debug('task id is :'||p_task_version_id_tbl(i));
12710               pa_debug.debug('record version id is :'||p_record_version_number_tbl(i));
12711          END IF ;
12712 
12713          -- initialization is required for every loop
12714          l_return_status := FND_API.G_RET_STS_SUCCESS ;
12715          l_msg_count := 0 ;
12716          l_msg_data := null ;
12717 
12718          -- Bug 9535723
12719          -- check if the task(s) to be deleted or its subtasks have planned effort
12720          IF l_planned_effort_exists = 'N' THEN
12721              FOR j IN get_all_subtasks(p_task_version_id_tbl(i)) LOOP
12722                  OPEN planned_effort_exists(j.task_ver_id);
12723                  FETCH planned_effort_exists INTO l_planned_effort_exists;
12724                  IF planned_effort_exists%NOTFOUND THEN
12725                      l_planned_effort_exists := 'N';
12726                  ELSE
12727                      EXIT;
12728                  END IF;
12729                  CLOSE planned_effort_exists;
12730              END LOOP;
12731          END IF;
12732 
12733          -- call delete_task_version API
12734          PA_TASK_PUB1.Delete_Task_Version(
12735                                     p_task_version_id          => p_task_version_id_tbl(i)
12736                                    ,p_record_version_number    => p_record_version_number_tbl(i)
12737                                    ,p_structure_type           => p_structure_type
12738                                    ,x_return_status            => l_return_status
12739                                    ,x_msg_count                => l_msg_count
12740                                    ,x_msg_data                 => l_msg_data
12741                                    ,p_structure_version_id     => p_structure_version_id
12742                                    ,p_called_from_api          => 'BULK_DELETE' -- Bug 9535723
12743                                    );
12744 
12745          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12746 
12747               j := j+1 ;
12748 
12749               SELECT e.element_number
12750                     ,e.name
12751                 INTO l_element_number
12752                     ,l_element_name
12753                 FROM pa_proj_elements  e
12754                     ,pa_proj_element_versions v
12755                WHERE v.element_version_id = p_task_version_id_tbl(i)
12756                  AND e.proj_element_id = v.proj_element_id ;
12757 
12758                PA_INTERFACE_UTILS_PUB.get_messages
12759                        (p_encoded        => FND_API.G_FALSE,     -- Get the encoded message.
12760                         p_msg_index      => 1,                   -- Get the message at index 1.
12761                         p_data           => l_enc_msg_data,
12762                         p_msg_index_out  => l_msg_index_out);
12763 
12764 
12765                l_error_msg_name_tbl(j) := l_enc_msg_data ;
12766                l_element_name_tbl(j)   := l_element_name ;
12767                l_element_number_tbl(j) := l_element_number ;
12768 
12769 
12770          END IF ;
12771 
12772     END LOOP ;
12773 
12774     IF j > 0 THEN
12775 
12776          --bug: 3641049
12777          --comment out rollback because if there is an error, it will be rollback twice causing an exception
12778          --rollback to delete_bulk;
12779 
12780          FND_MSG_PUB.initialize;
12781 
12782          FOR k in reverse l_element_name_tbl.FIRST..l_element_name_tbl.LAST  LOOP
12783 
12784               PA_UTILS.ADD_MESSAGE
12785                    (p_app_short_name => 'PA',
12786                     p_msg_name      => 'PA_PS_TASK_NAME_NUM_ERR',
12787                     p_token1        => 'TASK_NAME',
12788                     p_value1        =>  l_element_name_tbl(k),
12789                     p_token2        => 'TASK_NUMBER',
12790                     p_value2        =>  l_element_number_tbl(k),
12791                     p_token3        => 'MESSAGE',
12792                     p_value3        =>  l_error_msg_name_tbl(k)
12793                     );
12794 
12795 
12796          END LOOP ;
12797 
12798     END IF ;
12799 
12800     x_msg_count := FND_MSG_PUB.count_msg ;
12801 
12802     IF x_msg_count > 0 THEN
12803        x_return_status := 'E' ;
12804 --hsiu: commenting out due to p1 issue.
12805 --      savepoint should be issued only when p_commit
12806 --      is true, which is a missing parameter
12807 --       rollback to delete_bulk;
12808 -- Bug 9535723
12809     ELSE
12810         -- Process Structure Updates with context ASGMT_PLAN_CHANGE needs to be
12811         -- triggered only if the following conditions are satisfied, (existing rules)
12812         -- 1. progress data exists for the project or workplan structure
12813         -- 2. version disabled workplan structure
12814         -- 3. workplan structure exists or is shared
12815         -- 4. deletion of workplan task assignment with planned effort
12816 
12817         OPEN get_project_id(p_structure_version_id);
12818         FETCH get_project_id INTO l_project_id;
12819         CLOSE get_project_id;
12820 
12821         IF (l_debug_mode = 'Y') THEN
12822             pa_debug.debug('DELETE_TASK_VERSION_IN_BULK: l_planned_effort_exists - ' || l_planned_effort_exists);
12823     END IF ;
12824 
12825         IF ((PA_TASK_ASSIGNMENT_UTILS.IS_PROGRESS_ROLLUP_REQUIRED(l_project_id) = 'Y')
12826             AND
12827             ((PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') OR
12828              (PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_project_id) = 'Y'))
12829             AND
12830             (l_planned_effort_exists = 'Y')
12831            ) THEN
12832 
12833             IF (l_debug_mode = 'Y') THEN
12834                 pa_debug.debug('DELETE_TASK_VERSION_IN_BULK: Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP');
12835             END IF;
12836 
12837             PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP
12838             (
12839                 p_calling_context         => 'ASGMT_PLAN_CHANGE'
12840                ,p_project_id              => l_project_id
12841                ,p_structure_version_id    => p_structure_version_id
12842                ,p_pub_struc_ver_id        => p_structure_version_id
12843                ,x_return_status           => x_return_status
12844                ,x_msg_data                => x_msg_data
12845                ,x_msg_count               => x_msg_count
12846             );
12847 
12848             pa_task_assignment_utils.g_require_progress_rollup := 'N';
12849 
12850             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12851                 IF l_debug_mode = 'Y' THEN
12852                     pa_debug.debug('Error after PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_WRP');
12853                 END IF;
12854                 RAISE FND_API.G_EXC_ERROR;
12855             END IF;
12856 
12857         END IF;
12858     END IF ; -- end of additions for bug 9535723
12859 
12860     IF l_debug_mode = 'Y' THEN
12861        pa_debug.reset_curr_function;
12862     END IF ;
12863 
12864 EXCEPTION
12865 WHEN NO_DATA_FOUND THEN
12866      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12867      x_msg_count     := 1;
12868      x_msg_data      := SQLERRM;
12869 --hsiu: commenting out due to p1 issue.
12870 --      savepoint should be issued only when p_commit
12871 --      is true, which is a missing parameter
12872 --     rollback to delete_bulk;
12873      RETURN ;
12874 WHEN FND_API.G_EXC_ERROR THEN
12875     x_return_status := FND_API.G_RET_STS_ERROR;
12876     IF x_msg_count >= 1 THEN
12877         pa_interface_utils_pub.get_messages (
12878           p_encoded        => FND_API.G_TRUE,
12879           p_msg_index      => 1,
12880           p_msg_count      => l_msg_count,
12881           p_msg_data       => l_msg_data,
12882           p_data           => l_enc_msg_data,
12883           p_msg_index_out  => l_msg_index_out
12884         );
12885         x_msg_data := l_enc_msg_data;
12886     END IF;
12887 
12888 WHEN OTHERS THEN
12889      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12890      x_msg_count     := 1;
12891      x_msg_data      := SQLERRM;
12892 --hsiu: commenting out due to p1 issue.
12893 --      savepoint should be issued only when p_commit
12894 --      is true, which is a missing parameter
12895 --     rollback to delete_bulk;
12896      FND_MSG_PUB.add_exc_msg
12897              ( p_pkg_name       => 'PA_TASK_PUB1'
12898               ,p_procedure_name => 'DELETE_TASK_VERSION_IN_BULK' );
12899      IF l_debug_mode = 'Y' THEN
12900              pa_debug.write('DELETE_TASK_VERSION_IN_BULK' || G_PKG_NAME,SQLERRM,4);
12901              pa_debug.write('DELETE_TASK_VERSION_IN_BULK' || G_PKG_NAME,pa_debug.G_Err_Stack,4);
12902              pa_debug.reset_curr_function;
12903      END IF;
12904      RAISE ;
12905 
12906 END DELETE_TASK_VERSION_IN_BULK ;
12907 
12908 --margaret bug 3024607 add update task association
12909 --when relationship ID is NULL both p_task_id and (either p_associated_project_id or
12910 --p_associated_task_id) must be set - a new association is added.
12911 
12912 --when  relationship ID is not NULL and either p_associated_project_id or
12913 --p_associated_task_id are set, we just update the existing relationship
12914 -- with the new "TO" object and type. p_task_id must also be NOT NULL in this case
12915 
12916 --when relationship ID is not NULL and both p_associated_project_id and
12917 --p_associated_task_id are NULL, we delete this particular association.
12918 
12919 --This procedure was designed specifically to fit the flow of Self_Service Task Details page
12920 --(or any page that uses TaskAssociationsVO).
12921  PROCEDURE Update_Task_Association (
12922  p_api_version                    IN    NUMBER   :=1.0,
12923  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
12924  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
12925  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
12926  p_validation_level               IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
12927  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
12928  p_debug_mode                     IN    VARCHAR2 :='N',
12929  p_max_msg_count                  IN    NUMBER   :=NULL,
12930  p_associated_project_id          IN    NUMBER  := NULL,
12931  p_associated_task_id             IN    NUMBER  := NULL,
12932  p_associated_project_name        IN    VARCHAR2 :=NULL,
12933  p_associated_task_name           IN    VARCHAR2 :=NULL,
12934  p_task_id                        IN    NUMBER ,
12935  p_relationship_type              IN    VARCHAR2 :='A',
12936  p_relationship_id        IN    NUMBER  := NULL,
12937  p_record_version_number          IN    NUMBER  := NULL,
12938  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12939  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
12940  x_msg_data                       OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
12941  x_relationship_id                OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
12942 ) IS
12943 
12944     l_return_status                 VARCHAR2(1);
12945     l_msg_count                     NUMBER;
12946     l_msg_data                      VARCHAR2(250);
12947     l_id_to                         NUMBER;
12948     l_type_to                       PA_OBJECT_RELATIONSHIPS.object_type_to%TYPE;
12949 
12950    l_data                          VARCHAR2(250);
12951    l_msg_index_out                 NUMBER;
12952    l_error_msg_code                VARCHAR2(30);
12953 
12954 BEGIN
12955 
12956  x_return_status := FND_API.G_RET_STS_SUCCESS;
12957 
12958   IF (p_debug_mode = 'Y') THEN
12959     pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_ASSOCIATION START');
12960   END IF;
12961 
12962   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
12963       FND_MSG_PUB.initialize;
12964   END IF;
12965 
12966   IF (p_commit = FND_API.G_TRUE) THEN
12967       savepoint update_task_association;
12968   END IF;
12969 
12970  l_type_to := 'PA_PROJECTS';
12971  l_id_to   := p_associated_project_id;
12972 
12973  IF p_associated_task_id is not NULL THEN
12974      l_type_to := 'PA_TASKS';
12975      l_id_to   := p_associated_task_id;
12976  END IF;
12977 
12978  -- when creating a new relationship check both ids and object types
12979  IF p_relationship_id is NULL THEN
12980     IF p_task_id is NULL or l_id_to is NULL THEN
12981        x_return_status := FND_API.G_RET_STS_ERROR;
12982        l_error_msg_code:= 'PA_PS_TASK_NUMBER_NULL';
12983     ELSE
12984        IF p_task_id = l_id_to and l_type_to =  'PA_TASKS' then
12985           x_return_status := FND_API.G_RET_STS_ERROR;
12986           l_error_msg_code:= 'PA_TASK_ID_INVALID';
12987        END IF;
12988     END IF;
12989  END IF;
12990 
12991  -- when updating an existing relationship check both ids and object types
12992  IF p_relationship_id is not null and l_id_to is not null  THEN
12993     IF p_task_id = l_id_to and l_type_to =  'PA_TASKS' then
12994       x_return_status := FND_API.G_RET_STS_ERROR;
12995       l_error_msg_code:= 'PA_TASK_ID_INVALID';
12996     END IF;
12997  END IF;
12998 
12999   IF  x_return_status = FND_API.G_RET_STS_ERROR THEN
13000               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
13001                                    p_msg_name       => l_error_msg_code);
13002   END IF;
13003 
13004  -- Create a new association row
13005  IF p_relationship_id is NULL and x_return_status = FND_API.G_RET_STS_SUCCESS THEN
13006      PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
13007        p_user_id => FND_GLOBAL.USER_ID
13008       ,p_object_type_from => 'PA_TASKS'
13009       ,p_object_id_from1 => p_task_id
13010       ,p_object_id_from2 => NULL
13011       ,p_object_id_from3 => NULL
13012       ,p_object_id_from4 => NULL
13013       ,p_object_id_from5 => NULL
13014       ,p_object_type_to => l_type_to
13015       ,p_object_id_to1 => l_id_to
13016       ,p_object_id_to2 => NULL
13017       ,p_object_id_to3 => NULL
13018       ,p_object_id_to4 => NULL
13019      ,p_object_id_to5 => NULL
13020       ,p_relationship_type => p_relationship_type
13021       ,p_relationship_subtype => NULL
13022      ,p_lag_day => NULL
13023       ,p_imported_lag => NULL
13024       ,p_priority => NULL
13025       ,p_pm_product_code => NULL
13026       ,p_comments => NULL
13027       ,p_status_code => NULL
13028      ,x_object_relationship_id => x_relationship_id
13029      ,x_return_status => x_return_status
13030         );
13031 
13032   END IF;
13033 
13034    IF p_relationship_id is not null and l_id_to is not null  THEN
13035       UPDATE PA_OBJECT_RELATIONSHIPS
13036       SET object_id_to1   = l_id_to
13037           ,object_type_to = l_type_to
13038       WHERE object_relationship_id = p_relationship_id;
13039       --WHERE object_id_from1 = p_task_id
13040       --AND   object_type_from = 'PA_TASKS'
13041       --AND   relationship_type = 'A';
13042    END IF;
13043 
13044    IF p_relationship_id is not null and l_id_to is  null  THEN
13045        Delete_Association(p_relationship_id,p_record_version_number, x_return_status);
13046    END IF;
13047 
13048 
13049     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13050       x_msg_count := FND_MSG_PUB.count_msg;
13051       IF x_msg_count = 1 then
13052         pa_interface_utils_pub.get_messages
13053          (p_encoded        => FND_API.G_TRUE,
13054           p_msg_index      => 1,
13055           p_msg_count      => x_msg_count,
13056           p_msg_data       => x_msg_data,
13057           p_data           => l_data,
13058           p_msg_index_out  => l_msg_index_out);
13059         x_msg_data := l_data;
13060       END IF;
13061       raise FND_API.G_EXC_ERROR;
13062     ELSE
13063        IF (p_commit = FND_API.G_TRUE) THEN
13064           COMMIT;
13065        END IF;
13066    END IF;
13067 
13068   IF (p_debug_mode = 'Y') THEN
13069     pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_ASSOCIATION END');
13070   END IF;
13071 
13072 
13073  EXCEPTION
13074     WHEN FND_API.G_EXC_ERROR THEN
13075       IF (p_commit = FND_API.G_TRUE) THEN
13076         ROLLBACK to update_task_association;
13077       END IF;
13078       x_msg_count := FND_MSG_PUB.count_msg;
13079       x_return_status := FND_API.G_RET_STS_ERROR;
13080     WHEN OTHERS THEN
13081       IF (p_commit = FND_API.G_TRUE) THEN
13082         ROLLBACK to update_task_association;
13083       END IF;
13084       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13085       x_msg_count := FND_MSG_PUB.count_msg;
13086       --put message
13087       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13088                               p_procedure_name => 'update_task_association',
13089                               p_error_text     => SUBSTRB(SQLERRM,1,240));
13090       RAISE;
13091 
13092 END Update_Task_Association;
13093 
13094 
13095 
13096 --margaret bug 3024607 delete task association
13097 --if p_relationship_id is NOT NULL then only this ONE relationship is deleted
13098 --if p_relationship_id is NULL, then ALL associations are deleted.
13099  PROCEDURE Delete_Task_Associations(
13100  p_api_version                    IN    NUMBER   :=1.0,
13101  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
13102  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
13103  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
13104  p_validation_level               IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
13105  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
13106  p_debug_mode                     IN    VARCHAR2 :='N',
13107  p_max_msg_count                  IN    NUMBER   :=NULL,
13108  p_relationship_type              IN    VARCHAR2 :='A',
13109  p_relationship_id                IN    NUMBER  := NULL,
13110  p_task_id                        IN    NUMBER  := NULL,
13111  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13112  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
13113  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13114 ) IS
13115 
13116 
13117   CURSOR task_associations( p_task_id NUMBER )
13118    IS
13119      SELECT object_relationship_id
13120      FROM PA_OBJECT_RELATIONSHIPS
13121      WHERE relationship_type  = p_relationship_type
13122      AND (  (object_type_from = 'PA_TASKS' AND object_id_from1 = p_task_id)
13123           OR (object_type_to  = 'PA_TASKS' AND object_id_to1   = p_task_id));
13124 
13125    l_data                          VARCHAR2(250);
13126    l_msg_index_out                 NUMBER;
13127 
13128 BEGIN
13129  x_return_status := FND_API.G_RET_STS_SUCCESS;
13130 
13131   IF (p_debug_mode = 'Y') THEN
13132     pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_ASSOCIATION START');
13133   END IF;
13134 
13135   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
13136       FND_MSG_PUB.initialize;
13137   END IF;
13138 
13139   IF (p_commit = FND_API.G_TRUE) THEN
13140       savepoint delete_task_association;
13141   END IF;
13142 
13143 --Delete just the requested relationship row
13144    IF p_relationship_id is not null THEN
13145        Delete_Association(p_relationship_id,null,x_return_status);
13146    ELSE
13147       IF p_task_id is not null THEN
13148          FOR task_associations_rec IN task_associations(p_task_id )  LOOP
13149             Delete_Association(task_associations_rec.object_relationship_id,null, x_return_status);
13150             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13151               EXIT;
13152             END IF;
13153          END LOOP;
13154       END IF;
13155    END IF;
13156 
13157   IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13158       x_msg_count := FND_MSG_PUB.count_msg;
13159       IF x_msg_count = 1 then
13160         pa_interface_utils_pub.get_messages
13161          (p_encoded        => FND_API.G_TRUE,
13162           p_msg_index      => 1,
13163           p_msg_count      => x_msg_count,
13164           p_msg_data       => x_msg_data,
13165           p_data           => l_data,
13166           p_msg_index_out  => l_msg_index_out);
13167         x_msg_data := l_data;
13168       END IF;
13169       raise FND_API.G_EXC_ERROR;
13170   ELSE
13171        IF (p_commit = FND_API.G_TRUE) THEN
13172           COMMIT;
13173        END IF;
13174   END IF;
13175 
13176 
13177  IF (p_debug_mode = 'Y') THEN
13178     pa_debug.debug('PA_TASK_PUB1.DELETE_TASK_ASSOCIATIONS END');
13179   END IF;
13180 
13181 
13182  EXCEPTION
13183     WHEN FND_API.G_EXC_ERROR THEN
13184       IF (p_commit = FND_API.G_TRUE) THEN
13185         ROLLBACK to delete_task_association;
13186       END IF;
13187       x_msg_count := FND_MSG_PUB.count_msg;
13188       x_return_status := FND_API.G_RET_STS_ERROR;
13189     WHEN OTHERS THEN
13190       IF (p_commit = FND_API.G_TRUE) THEN
13191         ROLLBACK to delete_task_association;
13192       END IF;
13193       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13194       x_msg_count := FND_MSG_PUB.count_msg;
13195       --put message
13196       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13197                               p_procedure_name => 'delete_all_task_associations',
13198                               p_error_text     => SUBSTRB(SQLERRM,1,240));
13199       RAISE;
13200 
13201 END Delete_Task_Associations;
13202 
13203 
13204 --Delete a single association - relationship_id required
13205  PROCEDURE Delete_Association(
13206  p_relationship_id                IN    NUMBER,
13207  p_record_version_number          IN    NUMBER  := NULL,
13208  x_return_status                  OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13209 ) IS
13210 
13211 BEGIN
13212 
13213    IF p_relationship_id is not null THEN
13214       PA_OBJECT_RELATIONSHIPS_PKG.DELETE_ROW(
13215        p_object_relationship_id => p_relationship_id
13216       ,p_object_type_from => NULL
13217       ,p_object_id_from1 => NULL
13218       ,p_object_id_from2 => NULL
13219       ,p_object_id_from3 => NULL
13220       ,p_object_id_from4 => NULL
13221       ,p_object_id_from5 => NULL
13222       ,p_object_type_to => NULL
13223       ,p_object_id_to1 => NULL
13224       ,p_object_id_to2 => NULL
13225       ,p_object_id_to3 => NULL
13226       ,p_object_id_to4 => NULL
13227       ,p_object_id_to5 => NULL
13228       ,p_record_version_number =>NULL
13229       ,p_pm_product_code => NULL
13230       ,x_return_status => x_return_status
13231     );
13232   END IF;
13233 
13234 
13235 EXCEPTION
13236     WHEN OTHERS THEN
13237       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13238       --x_msg_count := FND_MSG_PUB.count_msg;
13239       --put message
13240       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13241                               p_procedure_name => 'delete_association',
13242                               p_error_text     => SUBSTRB(SQLERRM,1,240));
13243 
13244       RAISE;
13245 
13246 END Delete_Association;
13247 
13248 
13249 --margaret check if task has associations, returns Y/N
13250 FUNCTION has_Associations(
13251  p_task_id                   IN    NUMBER
13252  ,p_relationship_type         IN    VARCHAR2 :='A'
13253 )return VARCHAR2
13254 IS
13255   cursor relationship_exists(p_task_id NUMBER) IS
13256     select '1'
13257       from pa_object_relationships
13258      WHERE relationship_type  = p_relationship_type
13259      AND (  (object_type_from = 'PA_TASKS' AND object_id_from1 = p_task_id
13260              AND object_type_to in ( 'PA_STRUCTURES', 'PA_TASKS'))   --bug 4091647
13261           OR (object_type_to  = 'PA_TASKS' AND object_id_to1   = p_task_id
13262              AND object_type_from = 'PA_TASKS')); --bug 4091647
13263    l_dummy_char        VARCHAR2(1);
13264 
13265   BEGIN
13266    OPEN relationship_exists(p_task_id);
13267    FETCH relationship_exists into l_dummy_char;
13268    IF relationship_exists%NOTFOUND THEN
13269       close  relationship_exists; -- 5349975
13270       return 'N';
13271    ELSE
13272       close  relationship_exists; -- 5349975
13273       return 'Y';
13274    END IF;
13275 END has_Associations;
13276 
13277 
13278 --margaret check if project is associated to tasks, returns Y/N
13279 FUNCTION proj_has_task_associations(
13280  p_project_id                 IN    NUMBER
13281  ,p_relationship_type         IN    VARCHAR2 :='A'
13282 )return VARCHAR2
13283 IS
13284   cursor relationship_exists(p_project_id NUMBER) IS
13285     select '1'
13286       from pa_object_relationships
13287      WHERE relationship_type  = p_relationship_type
13288      AND  object_type_from = 'PA_TASKS'
13289      AND  object_type_to   = 'PA_PROJECTS' AND object_id_to1 = p_project_id;
13290 
13291    l_dummy_char        VARCHAR2(1);
13292 
13293   BEGIN
13294    OPEN relationship_exists(p_project_id);
13295    FETCH relationship_exists into l_dummy_char;
13296    IF relationship_exists%NOTFOUND THEN
13297       close  relationship_exists; -- 5349975
13298       return 'N';
13299    ELSE
13300       close  relationship_exists; -- 5349975
13301       return 'Y';
13302    END IF;
13303 END proj_has_task_associations;
13304 
13305 
13306 PROCEDURE Check_Task_Has_Association(
13307   p_task_id                  IN    NUMBER
13308  ,p_relationship_type        VARCHAR2 :='A'
13309  ,x_return_status            OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13310  ,x_msg_count                OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
13311  ,x_msg_data                 OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13312 
13313 )IS
13314  l_ret_code  VARCHAR2(1);
13315 BEGIN
13316    x_return_status := FND_API.G_RET_STS_SUCCESS;
13317    l_ret_code := has_Associations(p_task_id,p_relationship_type);
13318    IF l_ret_code = 'Y' THEN
13319          x_return_status := FND_API.G_RET_STS_ERROR;
13320          /*PA_UTILS.ADD_MESSAGE
13321                      (p_app_short_name => 'PA',
13322                       p_msg_name     => 'PA_TASK_HAS_ASSOCIATIONS');*/  --Bug 3831786 commented
13323          x_msg_data:='PA_TASK_HAS_ASSOCIATIONS'; --Bug No 3491544 Smukka Apr 07 2004
13324    END IF;
13325 END Check_Task_Has_Association;
13326 
13327 
13328 PROCEDURE Check_Proj_Associated_To_Tasks(
13329   p_project_id               IN    NUMBER
13330  ,p_relationship_type        VARCHAR2 :='A'
13331  ,x_return_status            OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13332  ,x_msg_count                OUT   NOCOPY NUMBER --File.Sql.39 bug 4440895
13333  ,x_msg_data                 OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13334 
13335 )IS
13336  l_ret_code  VARCHAR2(1);
13337 BEGIN
13338    x_return_status := FND_API.G_RET_STS_SUCCESS;
13339    l_ret_code := proj_has_task_associations(p_project_id,p_relationship_type);
13340    IF l_ret_code = 'Y' THEN
13341          x_return_status := FND_API.G_RET_STS_ERROR;
13342          PA_UTILS.ADD_MESSAGE
13343                      (p_app_short_name => 'PA',
13344                       p_msg_name     => 'PA_PROJECT_HAS_ASSOCIATIONS');
13345 
13346    END IF;
13347 END Check_Proj_Associated_to_Tasks;
13348 
13349 
13350 --margaret bug 3024607 delete project to task associations
13351 --if p_relationship_id is NOT NULL then only this ONE relationship is deleted
13352 --if p_relationship_id is NULL, then ALL associations are deleted.
13353  PROCEDURE Delete_Proj_To_Task_Assoc(
13354  p_api_version                    IN    NUMBER   :=1.0,
13355  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
13356  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
13357  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
13358  p_validation_level               IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
13359  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
13360  p_debug_mode                     IN    VARCHAR2 :='N',
13361  p_max_msg_count                  IN    NUMBER   :=NULL,
13362  p_relationship_type              IN    VARCHAR2 :='A',
13363  p_relationship_id                IN    NUMBER  := NULL,
13364  p_project_id                     IN    NUMBER  := NULL,
13365  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13366  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
13367  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13368 ) IS
13369 
13370 
13371   CURSOR task_associations( p_task_id NUMBER )
13372    IS
13373      SELECT object_relationship_id
13374      FROM PA_OBJECT_RELATIONSHIPS
13375      WHERE relationship_type  = p_relationship_type
13376      AND object_type_from = 'PA_TASKS'
13377      AND object_type_to   = 'PA_PROJECTS' AND object_id_to1   = p_project_id;
13378 
13379    l_data                          VARCHAR2(250);
13380    l_msg_index_out                 NUMBER;
13381 
13382 BEGIN
13383  x_return_status := FND_API.G_RET_STS_SUCCESS;
13384 
13385   IF (p_debug_mode = 'Y') THEN
13386     pa_debug.debug('PA_TASK_PUB1.Delete_Proj_To_Task_Assoc START');
13387   END IF;
13388   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
13389       FND_MSG_PUB.initialize;
13390   END IF;
13391 
13392   IF (p_commit = FND_API.G_TRUE) THEN
13393       savepoint delete_prj_to_task_assoc;
13394   END IF;
13395 
13396 --Delete just the requested relationship row
13397    IF p_relationship_id is not null THEN
13398        Delete_Association(p_relationship_id,null,x_return_status);
13399    ELSE
13400       IF p_project_id is not null THEN
13401          FOR task_associations_rec IN task_associations(p_project_id )  LOOP
13402             Delete_Association(task_associations_rec.object_relationship_id,null, x_return_status);
13403             IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13404               EXIT;
13405             END IF;
13406          END LOOP;
13407       END IF;
13408    END IF;
13409 
13410   IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13411       x_msg_count := FND_MSG_PUB.count_msg;
13412       IF x_msg_count = 1 then
13413         pa_interface_utils_pub.get_messages
13414          (p_encoded        => FND_API.G_TRUE,
13415           p_msg_index      => 1,
13416           p_msg_count      => x_msg_count,
13417           p_msg_data       => x_msg_data,
13418           p_data           => l_data,
13419           p_msg_index_out  => l_msg_index_out);
13420         x_msg_data := l_data;
13421       raise FND_API.G_EXC_ERROR;
13422     END IF;
13423   ELSE
13424        IF (p_commit = FND_API.G_TRUE) THEN
13425           COMMIT;
13426        END IF;
13427   END IF;
13428 
13429  IF (p_debug_mode = 'Y') THEN
13430     pa_debug.debug('PA_TASK_PUB1.Delete_Proj_To_Task_Assoc END');
13431   END IF;
13432 
13433  EXCEPTION
13434     WHEN FND_API.G_EXC_ERROR THEN
13435       IF (p_commit = FND_API.G_TRUE) THEN
13436         ROLLBACK to delete_prj_to_task_assoc;
13437       END IF;
13438       x_msg_count := FND_MSG_PUB.count_msg;
13439       x_return_status := FND_API.G_RET_STS_ERROR;
13440     WHEN OTHERS THEN
13441       IF (p_commit = FND_API.G_TRUE) THEN
13442         ROLLBACK to delete_prj_to_task_assoc;
13443       END IF;
13444       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13445       --put message
13446       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13447                               p_procedure_name => 'delete_proj_to_task_assoc',
13448                               p_error_text     => SUBSTRB(SQLERRM,1,240));
13449       RAISE;
13450 END Delete_Proj_To_Task_Assoc;
13451 
13452 
13453 PROCEDURE Copy_Task_Associations(
13454  p_api_version                    IN    NUMBER   :=1.0,
13455  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
13456  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
13457  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
13458  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
13459  p_debug_mode                     IN    VARCHAR2 :='N',
13460  p_max_msg_count                  IN    NUMBER   :=NULL,
13461  p_project_id_to                  IN    NUMBER   := NULL,
13462  p_project_id_from                IN    NUMBER   := NULL,
13463  p_relationship_type              IN    VARCHAR2 :='A',
13464  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13465  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
13466  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13467 
13468 )IS
13469   --Bug#3693794 : Performance fix.
13470   --Replaced pa_structures_tasks_v from the from clause
13471   --for cursor task_list. Replaced it with pa_proj_elements
13472   --table which will siffice the current requirement of
13473   --getting source and destination proj_element_id of the task.
13474 
13475   CURSOR task_list( p_project_id_to NUMBER, p_project_id_from NUMBER )
13476    IS
13477      Select  source.proj_element_id old_task_id
13478             ,destination.proj_element_id new_task_id
13479      from pa_proj_elements source          --Bug#3693794
13480          ,pa_proj_elements destination     --Bug#3693794
13481      where source.project_id = p_project_id_from
13482      and source.element_number = destination.element_number
13483      and destination.project_id = p_project_id_to;
13484 
13485    CURSOR task_association( task_id NUMBER, p_relationship_type VARCHAR2 )
13486    IS
13487      Select  object_type_to, object_id_to1
13488      from pa_object_relationships
13489      where object_type_from = 'PA_TASKS'
13490      and object_id_from1    = task_id
13491      and relationship_type  = p_relationship_type;
13492 
13493    l_object_type_to  pa_object_relationships.object_type_to%Type;
13494    l_object_id_to1   pa_object_relationships.object_id_to1%Type;
13495    x_relationship_id pa_object_relationships.object_relationship_id%type;
13496    l_ret_code  VARCHAR2(1);
13497    l_data                          VARCHAR2(250);
13498    l_msg_index_out                 NUMBER;
13499 
13500 BEGIN
13501 
13502   IF (p_debug_mode = 'Y') THEN
13503     pa_debug.debug('PA_TASK_PUB1.Copy_Task_Associations START');
13504   END IF;
13505 
13506    x_return_status := FND_API.G_RET_STS_SUCCESS;
13507 
13508    IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
13509       FND_MSG_PUB.initialize;
13510    END IF;
13511 
13512   IF (p_commit = FND_API.G_TRUE) THEN
13513       savepoint copy_task_associations;
13514   END IF;
13515 
13516 
13517   FOR task_list_rec IN task_list(p_project_id_to, p_project_id_from )  LOOP
13518     l_ret_code := has_Associations(task_list_rec.new_task_id,p_relationship_type);
13519     IF l_ret_code <>'Y' THEN
13520      open task_association(task_list_rec.old_task_id,p_relationship_type);
13521      fetch task_association  into l_object_type_to, l_object_id_to1;
13522      IF task_association%found THEN
13523 
13524         PA_OBJECT_RELATIONSHIPS_PKG.INSERT_ROW(
13525           p_user_id => FND_GLOBAL.USER_ID
13526              ,p_object_type_from => 'PA_TASKS'
13527              ,p_object_id_from1 => task_list_rec.new_task_id
13528              ,p_object_id_from2 => NULL
13529             ,p_object_id_from3 => NULL
13530             ,p_object_id_from4 => NULL
13531             ,p_object_id_from5 => NULL
13532             ,p_object_type_to => l_object_type_to
13533             ,p_object_id_to1 =>  l_object_id_to1
13534             ,p_object_id_to2 => NULL
13535             ,p_object_id_to3 => NULL
13536             ,p_object_id_to4 => NULL
13537             ,p_object_id_to5 => NULL
13538             ,p_relationship_type => p_relationship_type
13539             ,p_relationship_subtype => NULL
13540             ,p_lag_day => NULL
13541             ,p_imported_lag => NULL
13542             ,p_priority => NULL
13543             ,p_pm_product_code => NULL
13544             ,p_comments => NULL
13545             ,p_status_code => NULL
13546             ,x_object_relationship_id => x_relationship_id
13547             ,x_return_status => x_return_status);
13548 
13549          END IF;
13550          close  task_association;
13551          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13552             EXIT;
13553         END IF;
13554      END IF;
13555    END LOOP;
13556 
13557   IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
13558       x_msg_count := FND_MSG_PUB.count_msg;
13559       IF x_msg_count = 1 then
13560         pa_interface_utils_pub.get_messages
13561          (p_encoded        => FND_API.G_TRUE,
13562           p_msg_index      => 1,
13563           p_msg_count      => x_msg_count,
13564           p_msg_data       => x_msg_data,
13565           p_data           => l_data,
13566           p_msg_index_out  => l_msg_index_out);
13567         x_msg_data := l_data;
13568       raise FND_API.G_EXC_ERROR;
13569     END IF;
13570   ELSE
13571        IF (p_commit = FND_API.G_TRUE) THEN
13572           COMMIT;
13573        END IF;
13574   END IF;
13575 
13576  IF (p_debug_mode = 'Y') THEN
13577     pa_debug.debug('PA_TASK_PUB1.Copy_Task_Associations END');
13578   END IF;
13579 
13580  EXCEPTION
13581     WHEN FND_API.G_EXC_ERROR THEN
13582       IF (p_commit = FND_API.G_TRUE) THEN
13583         ROLLBACK to copy_task_associations;
13584       END IF;
13585       x_msg_count := FND_MSG_PUB.count_msg;
13586       x_return_status := FND_API.G_RET_STS_ERROR;
13587     WHEN OTHERS THEN
13588       IF (p_commit = FND_API.G_TRUE) THEN
13589         ROLLBACK to copy_task_associations;
13590       END IF;
13591       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13592       --put message
13593       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13594                               p_procedure_name => 'Copy_Task_Associations',
13595                               p_error_text     => SUBSTRB(SQLERRM,1,240));
13596       RAISE;
13597 END Copy_Task_Associations;
13598 
13599 
13600 --FPM  bug 3301192
13601 --Planning and budget changes.
13602 --This apis is called from CREATE_TASKS api and AMG create_project, update_prohject and add_task apis
13603 PROCEDURE call_add_planning_txns(
13604  p_tasks_ver_ids                  IN    PA_NUM_1000_NUM,
13605  p_planned_effort                 IN    PA_NUM_1000_NUM,
13606  p_project_id                     IN    NUMBER,
13607  p_structure_version_id           IN    NUMBER,
13608  p_start_date                     IN    PA_DATE_1000_DATE,
13609  p_end_date                       IN    PA_DATE_1000_DATE,
13610  p_pm_product_code                IN    VARCHAR2  DEFAULT NULL, ---bug 3811243
13611  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13612  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
13613  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13614 ) IS
13615 /* Bug #: 3305199 SMukka                                                         */
13616 /* Changing data type from PA_PLSQL_DATATYPES.IdTabTyp to SYSTEM.pa_num_tbl_type */
13617 /* l_task_ver_ids            PA_PLSQL_DATATYPES.IdTabTyp;                        */
13618 l_task_ver_ids            SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13619 l_planned_effort          SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type(); /* Venky */
13620 l_start_dates             SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
13621 l_end_dates               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type(); /* Venky */
13622 l_pm_product_code         SYSTEM.PA_VARCHAR2_30_TBL_TYPE := SYSTEM.PA_VARCHAR2_30_TBL_TYPE();  ---bug 3811243
13623 
13624 l_msg_count         NUMBER := 0;
13625 l_msg_data          VARCHAR2(2000);
13626 l_return_status     VARCHAR2(1);
13627 l_data              VARCHAR2(2000);
13628 l_msg_index_out     NUMBER;
13629 API_ERROR           EXCEPTION;
13630 
13631 BEGIN
13632 
13633 IF nvl(p_tasks_ver_ids.LAST,0) > 0 THEN --Condition added for bug #3569905
13634      FOR i in p_tasks_ver_ids.FIRST..p_tasks_ver_ids.LAST LOOP
13635            IF p_tasks_ver_ids(i) IS NOT NULL AND
13636              (p_planned_effort(i) IS NOT NULL AND
13637               p_planned_effort(i) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
13638 														p_planned_effort(i) <> 0)  --bug 3802240: Added conditions to skip g_miss
13639            THEN
13640                IF PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_tasks_ver_ids(i) ) = 'Y'
13641                THEN
13642                     /* convert ids and planned effort to the called apis params types. */
13643                     l_task_ver_ids.extend(1); /* Venky */
13644                     l_task_ver_ids(l_task_ver_ids.count)     := p_tasks_ver_ids(i);
13645                     l_planned_effort.extend(1);
13646                     l_planned_effort(l_planned_effort.count)   := p_planned_effort(i);
13647                     l_start_dates.extend(1);
13648                     l_start_dates(l_start_dates.count)      := NVL( p_start_date(i), TRUNC(SYSDATE));
13649                     l_end_dates.extend(1);
13650                     l_end_dates(l_end_dates.count)        := NVL( p_end_date(i), TRUNC(SYSDATE));
13651                     ---bug 3811243
13652                     l_pm_product_code.extend();
13653                     l_pm_product_code(l_pm_product_code.count) := p_pm_product_code;
13654                END IF;
13655            END IF;
13656      END LOOP;
13657 END IF;
13658 
13659  IF l_task_ver_ids.exists(1)
13660  THEN
13661      /*Smukka Bug No. 3474141 Date 03/01/2004                                                 */
13662      /*moved pa_fp_planning_transaction_pub.add_planning_transactions into plsql block        */
13663      BEGIN
13664          pa_fp_planning_transaction_pub.add_planning_transactions(
13665             p_context                      => 'WORKPLAN'
13666            ,p_project_id                   => p_project_id
13667            ,p_struct_elem_version_id       => p_structure_version_id
13668            ,p_task_elem_version_id_tbl     => l_task_ver_ids
13669            ,p_planned_people_effort_tbl    => l_planned_effort
13670            ,p_start_date_tbl               => l_start_dates
13671            ,p_end_date_tbl                 => l_end_dates
13672            ,p_pm_product_code              => l_pm_product_code   --bug 3811243
13673            ,x_return_status                => l_return_status
13674            ,x_msg_count                    => l_msg_count
13675            ,x_msg_data                     => l_msg_data
13676           );
13677      EXCEPTION
13678          WHEN OTHERS THEN
13679               fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13680                                       p_procedure_name => 'call_add_planning_txns',
13681                                       p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.add_planning_transactions:'||SQLERRM,1,240));
13682          raise API_ERROR;
13683      END;
13684    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
13685      x_msg_count := FND_MSG_PUB.count_msg;
13686      if x_msg_count = 1 then
13687        pa_interface_utils_pub.get_messages
13688        (p_encoded        => FND_API.G_TRUE,
13689         p_msg_index      => 1,
13690         p_msg_count      => l_msg_count,
13691         p_msg_data       => l_msg_data,
13692         p_data           => l_data,
13693         p_msg_index_out  => l_msg_index_out);
13694         x_msg_data := l_data;
13695      end if;
13696      raise API_ERROR;
13697    end if;
13698  END IF;
13699 
13700   x_return_status := FND_API.G_RET_STS_SUCCESS;
13701 EXCEPTION
13702 WHEN API_ERROR THEN
13703   x_return_status := FND_API.G_RET_STS_ERROR;
13704 WHEN OTHERS THEN
13705   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13706   fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
13707                           p_procedure_name => 'call_add_planning_txns',
13708                           p_error_text     => SUBSTRB(SQLERRM,1,240));
13709   raise;
13710 END call_add_planning_txns;
13711 
13712 PROCEDURE update_task_det_sch_info(
13713  p_api_version                    IN    NUMBER   :=1.0,
13714  p_init_msg_list                  IN    VARCHAR2 :=FND_API.G_TRUE,
13715  p_commit                         IN    VARCHAR2 :=FND_API.G_FALSE,
13716  p_validate_only                  IN    VARCHAR2 :=FND_API.G_TRUE,
13717  p_calling_module                 IN    VARCHAR2 :='SELF_SERVICE',
13718  p_debug_mode                     IN    VARCHAR2 :='N',
13719  p_task_ver_id                    IN    NUMBER,
13720  p_project_id                     IN    NUMBER,
13721  p_planned_effort                 IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13722  p_ETC_effort                     IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13723  p_structure_version_id           IN    NUMBER,
13724  p_object_type                    IN    VARCHAR2 := 'PA_TASKS',
13725  p_etc_cost                       IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13726  p_actual_effort                  IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13727  p_percent_complete               IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13728  p_res_assign_id                  IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
13729  x_return_status                  OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
13730  x_msg_count                      OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
13731  x_msg_data                       OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
13732 ) IS
13733 
13734     l_msg_count                    NUMBER;
13735     l_msg_data                     VARCHAR2(250);
13736     l_data                          VARCHAR2(250);
13737     l_msg_index_out                 NUMBER;
13738     l_return_status                VARCHAR2(2);
13739     l_error_message_code           VARCHAR2(250);
13740 
13741    CURSOR cur_sch
13742    IS
13743    SELECT scheduled_start_date, scheduled_finish_date
13744      FROM pa_proj_elem_ver_schedule
13745     WHERE element_version_id = p_task_ver_id
13746       AND project_id = p_project_id
13747     ;
13748 
13749 
13750     /*  Bug # 3755089. Modified the following cursor. */
13751 
13752     cursor cur_progress (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13753                                 p_structure_version_id NUMBER) is
13754     select *
13755     from pa_progress_rollup ppr
13756     where ppr.project_id = p_project_id
13757     and ppr.object_id = p_object_id
13758     and ppr.object_version_id = p_object_version_id
13759     and ppr.structure_version_id = p_structure_version_id
13760     and ppr.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES') -- 4498610 : Added PA_STRUCTURES also
13761     and ppr.current_flag = 'Y'
13762     and ppr.as_of_date = (select max(as_of_date) from pa_progress_rollup ppr2
13763                            where ppr2.project_id = p_project_id
13764                            and ppr2.object_id = p_object_id
13765                            and ppr2.object_version_id = p_object_version_id
13766                            and ppr2.structure_version_id = p_structure_version_id
13767                        and ppr2.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES'));
13768 
13769     cur_progress_rec cur_progress%rowtype;
13770 
13771 
13772     cursor cur_progress2 (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13773                                 p_structure_version_id NUMBER, p_current_flag VARCHAR2) is
13774     select *
13775     from pa_progress_rollup ppr
13776     where ppr.project_id = p_project_id
13777     and ppr.object_id = p_object_id
13778     and ppr.object_version_id = p_object_version_id
13779     and ppr.structure_version_id IS NULL
13780     and ppr.current_flag = p_current_flag
13781     and ppr.object_type in ('PA_TASKS','PA_ASSIGNMENTS','PA_STRUCTURES'); -- 4498610 : Added PA_STRUCTURES also
13782     --bug 3959087, following code is commented as it is not needed
13783     /*and ppr.as_of_date = (select max(as_of_date) from pa_progress_rollup ppr2
13784                            where ppr2.project_id = p_project_id
13785                            and ppr2.object_id = p_object_id
13786                            and ppr2.object_version_id = p_object_version_id
13787                            and ppr2.structure_version_id IS NULL
13788                            and ppr2.current_flag = p_current_flag   --bug 3708948
13789                            and ppr2.object_type in ('PA_TASKS','PA_ASSIGNMENTS'));*/
13790 
13791     cursor cur_prev_planned_task_effort(p_project_id NUMBER, p_proj_element_id NUMBER
13792                         , p_structure_version_id NUMBER) is
13793     select (labor_effort+equipment_effort)
13794     from  pji_xbs_plans_v
13795     where  project_id = p_project_id
13796     and structure_version_id = p_structure_version_id
13797     and proj_element_id = p_proj_element_id
13798     and structure_type = 'WORKPLAN';
13799 
13800     cursor cur_prev_planned_assgn_effort(p_project_id NUMBER, p_task_id NUMBER
13801                                          , p_structure_version_id NUMBER, p_res_assign_id NUMBER) is
13802     select planned_quantity
13803     from  pa_task_assignments_v
13804     where  project_id = p_project_id
13805     and structure_version_id = p_structure_version_id
13806     and resource_assignment_id = p_res_assign_id
13807     and task_id = p_task_id;
13808 
13809     l_prev_planned_effort NUMBER := null;
13810 
13811     cursor cur_prev_etc_effort (p_project_id NUMBER, p_object_id NUMBER
13812                                          , p_structure_version_id NUMBER) is
13813     select (nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0)
13814        +nvl(subprj_ppl_etc_effort,0)+nvl(subprj_eqpmt_etc_effort,0))
13815     from pa_progress_rollup
13816     where  project_id = p_project_id
13817     and object_id = p_object_id
13818     and structure_version_id = p_structure_version_id
13819     and structure_type = 'WORKPLAN';
13820 
13821 --maansari5/9
13822     cursor cur_prev_etc_effort2 (p_project_id NUMBER, p_object_id NUMBER
13823                                          ) is
13824     select (nvl(estimated_remaining_effort,0)+nvl(eqpmt_etc_effort,0)
13825        +nvl(subprj_ppl_etc_effort,0)+nvl(subprj_eqpmt_etc_effort,0))
13826     from pa_progress_rollup
13827     where  project_id = p_project_id
13828     and object_id = p_object_id
13829     and structure_version_id is null
13830     and current_flag = 'Y'
13831     and structure_type = 'WORKPLAN';
13832 --maansari5/9
13833 
13834    l_prev_etc_effort NUMBER := null;
13835 
13836   l_task_ver_ids2             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13837   l_planned_effort2           SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
13838   l_start_dates               SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13839   l_end_dates                 SYSTEM.pa_date_tbl_type := SYSTEM.pa_date_tbl_type();
13840   l_SCHEDULED_START_DATE      DATE;
13841   l_SCHEDULED_END_DATE        DATE;
13842 
13843   l_progress_rollup_id NUMBER;
13844   l_login_id NUMBER := fnd_global.login_id;
13845   l_user_id  NUMBER := fnd_global.user_id;
13846 
13847   l_task_id NUMBER;
13848   l_object_id NUMBER;
13849   l_next_prog_cycle_date DATE;
13850   l_as_of_date DATE;
13851   l_percent_complete NUMBER;
13852   l_etc_effort NUMBER;
13853   l_planned_effort NUMBER;
13854   l_override_pc NUMBER := null;
13855   l_eff_rollup_pc NUMBER := null;
13856   l_earned_value NUMBER := null;
13857   l_proj_element_id NUMBER := null;
13858 
13859   l_version_enabled VARCHAr2(1):= 'N';  --maansari5/9
13860   l_weighting_basis VARCHAR2(30); ---Bug 6144931
13861 
13862 --maansari5/11
13863    CURSOR c_get_task_weight_method
13864    IS
13865    SELECT task_weight_basis_code
13866    FROM pa_proj_progress_attr
13867    WHERE project_id = p_project_id
13868    AND structure_type = 'WORKPLAN';
13869 
13870    CURSOR c_proj_element_id
13871    IS
13872    SELECT proj_element_id
13873    FROM pa_proj_element_versions
13874    WHERE project_id = p_project_id
13875    and parent_structure_version_id = p_structure_version_id
13876    and element_version_id = p_task_ver_id
13877    and object_type = decode(p_object_type, 'PA_ASSIGNMENTS','PA_TASKS', p_object_type); -- Bug 3856161 : Added Decode
13878 
13879    l_rollup_method    VARCHAR2(30);
13880    l_actual_finish_DATE DATE;
13881    l_actual_start_DATE  DATE;
13882    l_rollup_as_of_date  DATE;
13883 
13884    cursor c_max_as_of_date_wkg is
13885    select max(as_of_date)
13886    from pa_progress_rollup
13887    where project_id = p_project_id
13888 --   and object_version_id = p_task_ver_id Bug 3856161 : It shd always do rollup if record exists
13889 --   and object_type = p_object_type
13890    and structure_type = 'WORKPLAN'
13891    and structure_version_id = p_structure_version_id;
13892 
13893    l_debug_mode   VARCHAR2(1);
13894    l_dummy        NUMBER;
13895 
13896    -- Start modifications for Bug # 3879658.
13897 
13898    cursor cur_progress_status is
13899    select ptt.initial_progress_status_code
13900    from pa_task_types ptt, pa_proj_elements ppe, pa_proj_element_versions ppev
13901    where ppev.project_id = ppe.project_id
13902    and ppev.proj_element_id = ppe.proj_element_id
13903    and ppe.type_id = ptt.task_type_id
13904    and ppe.project_id = p_project_id
13905    and ppev.element_version_id = p_task_ver_id
13906    and ppev.parent_structure_version_id = p_structure_version_id;
13907 
13908    l_init_prog_status_code VARCHAR2(150) := NULL;
13909 
13910    -- End modifications for Bug # 3879658.
13911 
13912    --bug 3959087, start
13913    l_BASE_PERCENT_COMP_DERIV_CODE   VARCHAR2(30);
13914    l_lowest_level_task             VARCHAR2(1);
13915    l_assignment_exists             VARCHAR2(1);
13916    l_ppl_act_cost                  NUMBER;
13917    l_planned_cost                   NUMBER;
13918    l_actual_effort                  NUMBER;
13919    l_prj_currency_code VARCHAR2(15);
13920 
13921    CURSOR cur_proj_elements(c_proj_element_id NUMBER)
13922    IS
13923       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 )
13924       from pa_proj_elements ppe
13925           ,pa_task_types ptt
13926       where ppe.project_id = p_project_id
13927       and ppe.proj_element_id = c_proj_element_id
13928       and ppe.type_id = ptt.task_type_id;
13929 
13930 
13931     cursor cur_get_costs(p_project_id NUMBER, p_object_id NUMBER, p_structure_version_id NUMBER) is
13932     select nvl(BRDN_COST, 0), nvl(ACT_LABOR_BRDN_COST, 0)
13933     from pji_xbs_plans_v
13934     where project_id = p_project_id
13935     and   proj_element_id = p_object_id
13936     and   structure_version_id = p_structure_version_id;
13937 
13938     cursor cur_rollup_percent (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13939                                 p_structure_version_id NUMBER) is
13940     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
13941     from pa_progress_rollup ppr
13942     where ppr.project_id = p_project_id
13943     and ppr.object_id = p_object_id
13944     and ppr.object_version_id = p_object_version_id
13945     and ppr.structure_version_id = p_structure_version_id
13946     and ppr.object_type IN ('PA_TASKS','PA_STRUCTURES') -- -- Bug 4498610 : Added PA_STRUCTURES
13947     and ppr.current_flag = 'Y';
13948 
13949 
13950     cursor cur_rollup_percent2 (p_project_id NUMBER, p_object_id NUMBER, p_object_version_id NUMBER,
13951                                 p_structure_version_id NUMBER) is
13952     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
13953     from pa_progress_rollup ppr
13954     where ppr.project_id = p_project_id
13955     and ppr.object_id = p_object_id
13956     and ppr.object_version_id = p_object_version_id
13957     and ppr.structure_version_id IS NULL
13958     and ppr.current_flag = 'Y'
13959     and ppr.object_type IN ('PA_TASKS','PA_STRUCTURES') -- Bug 4498610 : Added PA_STRUCTURES
13960     ;
13961 
13962    --bug 3959087, end
13963 
13964     -- Bug 3976633 : Added cursor cur_progress_exists
13965     cursor cur_progress_exists (c_project_id NUMBER, c_object_id NUMBER, c_structure_version_id NUMBER, c_version_enabled_flag VARCHAR2) is
13966     select 'Y'
13967     from pa_progress_rollup ppr
13968     where ppr.project_id = c_project_id
13969     and ppr.object_id = c_object_id
13970     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))
13971     and ppr.object_type = 'PA_TASKS'
13972     and ppr.structure_type = 'WORKPLAN';
13973 
13974     l_progress_exists VARCHAR2(1):='N';
13975 
13976     --BUG 3919800, rtarway
13977     cursor cur_get_act_effort (p_project_id NUMBER, p_object_id NUMBER, p_structure_version_id NUMBER) is
13978     select nvl(ACT_LABOR_HRS, 0)+nvl(ACT_EQUIP_HRS,0)
13979     from pji_xbs_plans_v
13980     where project_id = p_project_id
13981     and   proj_element_id = p_object_id
13982     and   structure_version_id = p_structure_version_id ;
13983 
13984     l_curr_override_pc NUMBER; -- Bug 4498610
13985 
13986 BEGIN
13987 
13988       IF (p_debug_mode = 'Y') THEN
13989         pa_debug.debug('PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO begin');
13990       END IF;
13991 
13992       IF (p_commit = FND_API.G_TRUE) THEN
13993         savepoint UPDATE_task_det_sch;
13994       END IF;
13995 
13996       l_debug_mode := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',fnd_global.user_id,fnd_global.login_id,275,null,null), 'N');
13997 
13998       IF l_debug_mode  = 'Y' THEN
13999         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);
14000         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);
14001         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);
14002         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);
14003         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);
14004         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);
14005         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);
14006         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);
14007         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);
14008         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);
14009         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);
14010         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);
14011       END IF;
14012 
14013       l_version_enabled := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id);  --maansari5/9
14014 
14015       --The following actions are to be performed only when p_object_type = 'PA_TASKS'
14016 
14017       --IF (p_object_type = 'PA_TASKS') THEN --- Bug 4498610
14018       IF (p_object_type IN ('PA_TASKS','PA_STRUCTURES')) THEN --- Bug 4498610
14019 
14020         -- Bug Fix 5726773
14021  	-- Support negative quantities and amounts.
14022  	-- Commenting out the following validations.
14023  	/*
14024 	-- BEGIN: Code to raise error if negative etc values or planned values are entered.
14025         IF ((p_planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
14026         AND (nvl(p_planned_effort,0) < 0))  THEN
14027 
14028             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
14029                         ,p_msg_name       => 'PA_TP_NO_NEG_PLN');
14030 
14031             x_msg_data := 'PA_TP_NO_NEG_PLN';
14032             x_return_status := 'E';
14033             RAISE  FND_API.G_EXC_ERROR;
14034         END IF;
14035 
14036         IF (((p_etc_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and (nvl(p_etc_cost,0) < 0))
14037         or ((p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and (nvl(p_etc_effort,0) < 0))) THEN
14038 
14039             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
14040                         ,p_msg_name       => 'PA_TP_NO_NEG_ETC');
14041 
14042             x_msg_data := 'PA_TP_NO_NEG_ETC';
14043             x_return_status := 'E';
14044             RAISE  FND_API.G_EXC_ERROR;
14045         END IF;
14046 	*/
14047  	-- End of Bug Fix 5726773
14048 
14049         -- END: Code to raise error if negative etc values or planned values are entered.
14050         IF l_debug_mode  = 'Y' THEN
14051             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);
14052         END IF;
14053 
14054         -- Get the task_id.
14055 
14056         select proj_element_id
14057         into l_task_id
14058         from pa_proj_element_versions
14059         where element_version_id = p_task_ver_id
14060         and parent_structure_version_id = p_structure_version_id;
14061 
14062         IF l_debug_mode  = 'Y' THEN
14063             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);
14064         END IF;
14065         --bug 3959087
14066         SELECT project_currency_code  INTO  l_prj_currency_code  FROM pa_projects_all WHERE project_id = p_project_id;
14067 
14068         -- Bug 3856161 : This code will never excute for assignments, I don't know why has this written here
14069         -- Setting object_id for Tasks / Assignments.
14070         IF (p_object_type = 'PA_ASSIGNMENTS') THEN
14071             l_object_id := p_res_assign_id;
14072         ELSE
14073             l_object_id := l_task_id;
14074         END IF;
14075 
14076         IF l_debug_mode  = 'Y' THEN
14077             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);
14078         END IF;
14079 
14080 
14081            -- Logic to make sure that planned value = etc value + actual value if etc is changed.
14082            -- If both planned value and etc value are changed, then planned value always takes precedence,
14083            -- set etc value as (planned value - actual value).
14084            -- Confirmed this logic with Clint Chow.
14085 
14086            IF ((nvl(p_planned_effort,0) > 0 and NVL( p_planned_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14087            or (nvl(p_etc_effort,0) > 0 and NVL(p_etc_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) THEN
14088 
14089             -- Get previous planned value.
14090             -- Bug 3856161 : This code will never excute for assignments, I don't know why has this written here
14091             IF p_object_type ='PA_ASSIGNMENTS' THEN
14092                 open cur_prev_planned_assgn_effort(p_project_id,l_task_id
14093                     ,p_structure_version_id,p_res_assign_id);
14094                 fetch cur_prev_planned_assgn_effort into l_prev_planned_effort;
14095                 close cur_prev_planned_assgn_effort;
14096             ELSE
14097                 open cur_prev_planned_task_effort(p_project_id,l_task_id,p_structure_version_id);
14098                 fetch cur_prev_planned_task_effort into l_prev_planned_effort;
14099                 close cur_prev_planned_task_effort;
14100             END IF;
14101 
14102             IF l_debug_mode  = 'Y' THEN
14103                 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);
14104             END IF;
14105 
14106             -- Get previous etc value.
14107             --maansari5/9
14108             IF NVL(l_version_enabled,'N') = 'Y'
14109             THEN
14110                 open cur_prev_etc_effort(p_project_id,l_object_id,p_structure_version_id);
14111                 fetch cur_prev_etc_effort into l_prev_etc_effort;
14112                 close cur_prev_etc_effort;
14113             ELSE
14114                 open cur_prev_etc_effort2(p_project_id,l_object_id);
14115                 fetch cur_prev_etc_effort2 into l_prev_etc_effort;
14116                 close cur_prev_etc_effort2;
14117             END IF;
14118 
14119             IF l_debug_mode  = 'Y' THEN
14120                 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);
14121             END IF;
14122 
14123             --maansari5/9
14124 
14125             -- Initialize the variables for planned effort and etc effort.
14126 
14127             l_planned_effort := null;
14128             l_etc_effort := null;
14129 
14130             -- If planned value has been updated set etc value as (planned value - actual value).
14131             --bug 3959087, start
14132             IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14133                 l_actual_effort := round(p_actual_effort, 5);
14134             ELSE
14135                 --BUG 3919800, rtarway
14136                     if p_calling_module <> 'AMG'
14137                     then
14138                          l_actual_effort := 0;
14139                     else
14140                          --BUG 3919800, rtarway
14141                          --get actual effort using cursor cur_get_act_effort
14142                          OPEN cur_get_act_effort(p_project_id,l_object_id,p_structure_version_id);
14143                          FETCH cur_get_act_effort into l_actual_effort;
14144                          CLOSE cur_get_act_effort;
14145                     end if;
14146             END IF;
14147             --bug 3959087, end
14148 
14149                IF l_debug_mode  = 'Y' THEN
14150                 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);
14151             END IF;
14152 
14153                --maansari5/9
14154             IF (p_planned_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14155             --and (NVL(l_prev_planned_effort,0) <> NVL(p_planned_effort,0))) THEN  --bug 3959087
14156             THEN
14157                 --l_planned_effort := p_planned_effort; --bug 3959087
14158                 l_planned_effort := round(p_planned_effort, 5);
14159                     --BUG 3919800, rtarway
14160                     --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14161                     IF (l_actual_effort >= 0 ) THEN
14162                     --l_etc_effort := NVL(p_planned_effort,0) - NVL(p_actual_effort, 0); --bug 3959087
14163                     l_etc_effort := round((NVL(p_planned_effort,0) - NVL(l_actual_effort, 0)), 5);
14164                 END IF;
14165             -- else set planned value as (etc vallue + actual value).
14166             ELSIF (p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14167             --and (NVL(l_prev_etc_effort,0) <> nvl(p_etc_effort,0))) THEN --bug 3959087
14168             THEN
14169                 --l_etc_effort := NVL(p_etc_effort,0); --bug 3959087
14170                 l_etc_effort := NVL(round(p_etc_effort,5),0);
14171                     --BUG 3919800, rtarway
14172                     --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14173                     IF (l_actual_effort >= 0 ) THEN
14174                     -- l_planned_effort := NVL( p_etc_effort, 0) + NVL(p_actual_effort,0); --bug 3959087
14175                     l_planned_effort := round( (NVL( p_etc_effort, 0) + NVL(l_actual_effort,0)), 5);
14176                 END IF;
14177             END IF;
14178             --maansari5/9
14179            END IF; --   IF ((nvl(p_planned_effort,0) > 0 and NVL( p_planned_effort,0) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14180 
14181 	   --Bug#6144931 START
14182 
14183            l_weighting_basis := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
14184 
14185 	  IF l_weighting_basis = 'EFFORT' AND NVL(l_prev_planned_effort,0) <> NVL(l_planned_effort,0)
14186 	  THEN
14187 	      PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG(
14188                                p_project_id => p_project_id,
14189                                p_structure_version_id =>  p_structure_version_id,
14190                                p_update_wbs_flag => 'Y',
14191                                x_return_status => l_return_status,
14192                                x_msg_count => l_msg_count,
14193                                x_msg_data => l_msg_data
14194                              );
14195 
14196               IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
14197                  l_msg_count := FND_MSG_PUB.count_msg;
14198                 IF l_msg_count > 0 THEN
14199                     x_msg_count := l_msg_count;
14200                     IF x_msg_count = 1 THEN
14201                        x_msg_data := l_msg_data;
14202                     END IF;
14203                     RAISE FND_API.G_EXC_ERROR;
14204                 END IF;
14205               END IF;
14206           END IF;
14207 
14208          --Bug#6144931 END
14209 
14210            IF l_debug_mode  = 'Y' THEN
14211             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);
14212             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);
14213            END IF;
14214 
14215            --bug 3959087,  start
14216            l_lowest_level_task := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_ver_id );
14217            l_assignment_exists := PA_PROGRESS_UTILS.check_assignment_exists(p_project_id, p_task_ver_id, 'PA_TASKS');
14218 
14219            IF l_debug_mode  = 'Y' THEN
14220             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);
14221             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);
14222            END IF;
14223            --bug 3959087,  end
14224 
14225            -- Call: pa_fp_planning_transaction_pub.update_planning_transactions().
14226 
14227           --IF (PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_ver_id )  = 'Y' AND
14228           IF (l_lowest_level_task  = 'Y' AND --bug 3959087
14229           PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y'
14230           -- Progress Management Changes, Bug # 3420093.
14231           --AND PA_PROGRESS_UTILS.check_assignment_exists(p_project_id,p_task_ver_id,p_object_type) = 'N'  --bug 3864543
14232           AND l_assignment_exists = 'N'  --bug 3959087
14233           AND p_object_type = 'PA_TASKS'
14234           AND p_calling_module <> 'AMG')
14235           THEN
14236 
14237             OPEN cur_sch;
14238             FETCH cur_sch INTO l_SCHEDULED_START_DATE, l_SCHEDULED_END_DATE;
14239             CLOSE cur_sch;
14240                 IF l_debug_mode  = 'Y' THEN
14241                 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);
14242                 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);
14243                 END IF;
14244 
14245             l_task_ver_ids2.extend(1);
14246             l_planned_effort2.extend(1);
14247             l_start_dates.extend(1);
14248             l_end_dates.extend(1);
14249 
14250             l_task_ver_ids2(1)   := p_task_ver_id;
14251 
14252             /* Start Modifications to fix Bug # 3640498. */
14253 
14254             IF ((l_planned_effort = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) or  (nvl(l_planned_effort,0) = 0)) then
14255                 l_planned_effort2(1) := FND_API.G_MISS_NUM;
14256             ELSE
14257                 l_planned_effort2(1) := l_planned_effort;
14258             END IF;
14259 
14260             /* End Modifications to fix Bug # 3640498. */
14261 
14262             l_start_dates(1)     := l_SCHEDULED_START_DATE;
14263             l_end_dates(1)       := l_SCHEDULED_END_DATE;
14264 
14265             /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
14266             /*moved pa_fp_planning_transaction_pub.update_planning_transactions into plsql block        */
14267             BEGIN
14268                 IF NVL(l_prev_planned_effort,0) <> NVL(l_planned_effort,0)
14269                 THEN
14270                     IF l_debug_mode  = 'Y' THEN
14271                         pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling update_planning_transactions', x_Log_Level=> 3);
14272                         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);
14273                         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);
14274                         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);
14275                         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);
14276                     END IF;
14277 
14278                     pa_fp_planning_transaction_pub.update_planning_transactions
14279                     (
14280                         p_context                      => 'WORKPLAN'
14281                         ,p_struct_elem_version_id       => p_structure_version_id
14282                         ,p_task_elem_version_id_tbl     => l_task_ver_ids2
14283                         ,p_planned_people_effort_tbl    => l_planned_effort2
14284                         ,p_start_date_tbl               => l_start_dates
14285                         ,p_end_date_tbl                 => l_end_dates
14286                         ,x_return_status                => l_return_status
14287                         ,x_msg_count                    => l_msg_count
14288                         ,x_msg_data                     => l_msg_data
14289                     );
14290                 END IF;
14291             EXCEPTION
14292             WHEN OTHERS THEN
14293                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
14294                         p_procedure_name => 'update_task_det_sch_info',
14295                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.update_planning_transactions:'||SQLERRM,1,240));
14296                 RAISE FND_API.G_EXC_ERROR;
14297             END;
14298           --end 3301192 fp changes
14299           END IF;  --<< l_planned_effort >>
14300 
14301           -- Progress Management Changes, Bug # 3420093.
14302 
14303           -- The following code inserts progress records into the pa_progress_rollup_table.
14304               -- this is required if only any of: p_etc_effort, p_etc_cost and p_percent_complete is not null
14305 
14306 
14307               --if ((nvl(p_etc_effort,0) > 0 and p_etc_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14308               --  or (nvl(p_etc_cost,0) > 0  and p_etc_cost <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)  --maansari5/9
14309 
14310 
14311           l_next_prog_cycle_date := pa_progress_utils.get_next_progress_cycle(p_project_id => p_project_id , p_task_id  => l_task_id);
14312           IF l_debug_mode  = 'Y' THEN
14313             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);
14314           END IF;
14315 
14316 
14317           IF   (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14318           THEN
14319             -- Progress Management Changes, Bug # 3420093.
14320             -- Begin logic to create pa_progress_rollup record for the Task / Assignment:
14321             -- Get the next progress cycle id.
14322             -- Bug 3856161 : Moving this code outside
14323             --l_next_prog_cycle_date := pa_progress_utils.get_next_progress_cycle(p_project_id => p_project_id
14324             --                              , p_task_id  => l_task_id);
14325             -- Progress Management Changes, Bug # 3420093.
14326             IF (p_percent_complete = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14327                 l_percent_complete := null;
14328             ELSE
14329                 --l_percent_complete := p_percent_complete; --bug 3959087
14330                 l_percent_complete := round(p_percent_complete, 8); --Bug 6854114
14331             END IF;
14332 
14333             -- Initializning the values for Override Percent Complete, Effective Rollup Percent Complete
14334             -- and Earned Value.
14335         -- Bug  3856161 : Reduced the scope of IF, now % cokplete should be rederived based on actual and etc too
14336               END IF;
14337 
14338           l_eff_rollup_pc := null;
14339           l_override_pc := null;
14340           l_earned_value := null;
14341 
14342               -- Setting values for Override Percent Complete, Effective Rollup Percent Complete
14343           -- and Earned Value.
14344 
14345           IF (p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14346             --l_override_pc := p_percent_complete; --bug 3959087
14347             l_override_pc := round(p_percent_complete, 8); --Bug 6854114
14348           END IF;
14349 
14350 
14351          --bug 3959087, calculate percent complete for lowest level tasks only, depending on derivation code, start
14352 
14353          /*IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14354         IF ((nvl(l_etc_effort,0)+nvl(p_actual_effort,0)) <> 0) THEN
14355         -- Bug 3856161
14356         --l_eff_rollup_pc := (nvl(l_etc_effort,0))/
14357         --         (nvl(l_etc_effort,0)+nvl(p_actual_effort,0));
14358         l_eff_rollup_pc := (nvl(p_actual_effort,0))/ (nvl(l_etc_effort,0)+nvl(p_actual_effort,0))*100;
14359         ELSE
14360             -- Bug 3856161
14361         --l_eff_rollup_pc := (nvl(l_etc_effort,0))/1;
14362         l_eff_rollup_pc := 0;
14363         END IF;
14364           -- Bug 3856161 : Reduced the scope of IF
14365          END IF;*/
14366 
14367         -- 4498610 : Added PA_TASKS condition
14368         IF p_object_type = 'PA_TASKS' AND NVL( l_lowest_level_task, 'N' ) = 'Y' AND l_assignment_exists = 'N'
14369         THEN
14370             OPEN cur_proj_elements(l_task_id);
14371             FETCH cur_proj_elements INTO l_BASE_PERCENT_COMP_DERIV_CODE;
14372             CLOSE cur_proj_elements;
14373             IF l_debug_mode  = 'Y' THEN
14374                 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);
14375             END IF;
14376 
14377             IF l_BASE_PERCENT_COMP_DERIV_CODE = 'EFFORT'
14378             THEN
14379                     --BUG 3919800, rtarway, commented IF
14380                    --IF (p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14381 
14382                 IF ((nvl(l_etc_effort,0)+nvl(l_actual_effort,0)) <> 0) THEN
14383                     l_eff_rollup_pc := round((nvl(l_actual_effort,0))/ (nvl(l_etc_effort,0)+nvl(l_actual_effort,0))*100, 2);
14384                 ELSE
14385                     l_eff_rollup_pc := 0;
14386                 END IF;
14387                 --END IF;
14388             ELSIF l_BASE_PERCENT_COMP_DERIV_CODE = 'COST'
14389             THEN
14390                OPEN cur_get_costs(p_project_id, l_task_id, p_structure_version_id);
14391                FETCH cur_get_costs INTO l_planned_cost, l_ppl_act_cost;
14392                CLOSE cur_get_costs;
14393 
14394                IF l_debug_mode  = 'Y' THEN
14395                     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);
14396                     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);
14397                END IF;
14398                IF (l_planned_cost <> 0)
14399                THEN
14400                 l_eff_rollup_pc := round((l_ppl_act_cost/l_planned_cost)*100, 2);
14401                ELSE
14402                 l_eff_rollup_pc := 0;
14403                END IF;
14404             END IF;
14405         ELSE      -- for summary level task fetch the rolledup percent from progress table
14406            IF NVL(l_version_enabled,'N') = 'Y'
14407            THEN
14408                OPEN cur_rollup_percent(p_project_id, l_task_id, p_task_ver_id, p_structure_version_id);
14409                FETCH cur_rollup_percent INTO l_eff_rollup_pc, l_curr_override_pc,l_actual_start_date,l_actual_finish_date ;
14410 	                   -- Bug 4498610 : Added l_curr_override_pc, l_actual_START_DATE, l_actual_FINISH_DATE
14411                CLOSE cur_rollup_percent;
14412            ELSE
14413                OPEN cur_rollup_percent2(p_project_id, l_task_id, p_task_ver_id, p_structure_version_id);
14414                FETCH cur_rollup_percent2 INTO l_eff_rollup_pc,l_curr_override_pc,l_actual_start_date,l_actual_finish_date ;
14415 	            -- Bug 4498610 : Added l_curr_override_pc, l_actual_START_DATE, l_actual_FINISH_DATE
14416                CLOSE cur_rollup_percent2;
14417            END IF;
14418         END IF;
14419 
14420         --bug 3959087, calculate percent complete for lowest level tasks only, depending on derivation code, end
14421 
14422         IF l_debug_mode  = 'Y' THEN
14423             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);
14424             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);
14425             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);
14426             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);
14427         END IF;
14428 
14429 
14430          OPEN c_get_task_weight_method;
14431          FETCH c_get_task_weight_method INTO l_rollup_method;
14432          CLOSE c_get_task_weight_method;
14433 
14434          OPEN c_proj_element_id;
14435          FETCH c_proj_element_id INTO l_proj_element_id;
14436          CLOSE c_proj_element_id;
14437 
14438          l_earned_value := nvl(l_override_pc,l_eff_rollup_pc) *
14439               PA_PROGRESS_UTILS.Get_BAC_Value(p_project_id,l_rollup_method
14440                   ,l_proj_element_id,p_structure_version_id
14441                   ,'WORKPLAN');
14442 
14443           --bug 3959087, start
14444           IF l_rollup_method = 'EFFORT'
14445           THEN
14446             l_earned_value := nvl(round(l_earned_value, 5),0);
14447           ELSE
14448             l_earned_value := nvl(pa_currency.round_trans_currency_amt(l_earned_value, l_prj_currency_code),0);
14449           END IF;
14450          --bug 3959087, end
14451 
14452          IF l_debug_mode  = 'Y' THEN
14453             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);
14454          END IF;
14455 
14456     --END IF; Bug 3856161
14457 
14458 
14459 
14460     --maansari5/11
14461      -- Bug 3856161 : Using l_eff_rollup_pc also
14462      IF NVL(l_percent_complete,l_eff_rollup_pc) > 0  AND NVL(l_percent_complete,l_eff_rollup_pc) <100
14463      THEN
14464       -- Bug 4498610 : Added nvl actual_start_date
14465     l_actual_START_DATE := nvl(l_actual_start_date,l_SCHEDULED_START_DATE);
14466     l_actual_finish_DATE := null;
14467      ELSIF NVL(l_percent_complete,l_eff_rollup_pc) > 0 AND NVL(l_percent_complete,l_eff_rollup_pc) =100
14468      THEN
14469            -- Bug 4498610 : Added nvl actual_start_date and finish_date
14470     l_actual_START_DATE := nvl(l_actual_start_date,l_SCHEDULED_START_DATE);
14471     l_actual_finish_DATE :=  nvl(l_actual_finish_date,l_SCHEDULED_END_DATE);
14472      END IF;
14473 
14474      IF l_debug_mode  = 'Y' THEN
14475     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);
14476     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);
14477      END IF;
14478 
14479      -- Progress Management Changes, Bug # 3420093.
14480      -- If workplan versioning is disabled for the project.
14481      -- Bug 3856161 : Added this IF condition
14482 
14483      IF   ( (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14484 
14485         -- Start modifications for Bug # 3879658.
14486 
14487             -- OR
14488         --(p_actual_effort <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14489 
14490         -- End modifications for Bug # 3879658.
14491            )
14492      THEN
14493         -- Bug 4498610 : Added code below
14494         IF l_curr_override_pc IS NULL AND (l_percent_complete = l_eff_rollup_pc )THEN
14495 		l_percent_complete := null;
14496 	END IF;
14497 
14498      IF (l_version_enabled = 'N') THEN   --maansari5/9
14499          --- If progress exists, update the latest existing progress record
14500     open cur_progress2(p_project_id,l_object_id,p_task_ver_id,null,'Y');
14501     fetch cur_progress2 into cur_progress_rec;
14502     IF cur_progress2%found THEN
14503 
14504         update pa_progress_rollup set
14505         --as_of_date = l_next_prog_cycle_date,
14506         estimated_remaining_effort = null --l_etc_effort
14507         ,completed_percentage = l_percent_complete
14508         ,eff_rollup_percent_comp = l_eff_rollup_pc
14509         ,earned_value = l_earned_value
14510         ,actual_start_date    = l_actual_start_date
14511         ,actual_finish_date    = l_actual_finish_date
14512         ,last_update_date = sysdate
14513         ,last_updated_by = l_user_id
14514         --,creation_date = sysdate
14515         --,created_by = l_user_id
14516         ,last_update_login = l_login_id
14517         where progress_rollup_id = cur_progress_rec.progress_rollup_id;
14518 
14519         -- If progress does not exist, create a published progress record.
14520         l_rollup_as_of_date := cur_progress_rec.as_of_date;
14521 
14522         --bug no.3708948 start
14523         update pa_percent_completes set completed_percentage = l_percent_complete
14524         where project_id  = p_project_id
14525         and object_id = l_task_id
14526         and date_computed =l_rollup_as_of_date
14527         and current_flag = 'Y'
14528         and published_flag = 'Y';
14529         --bug no.3708948 end
14530     ELSE
14531          l_progress_rollup_id := null;
14532 
14533                     -- Start modifications for Bug # 3879658.
14534 
14535                     open cur_progress_status;
14536                     fetch cur_progress_status into l_init_prog_status_code;
14537                     close cur_progress_status;
14538 
14539                     -- End modifications for Bug # 3879658.
14540 
14541                       PA_PROGRESS_ROLLUP_PKG.INSERT_ROW(
14542                        X_PROGRESS_ROLLUP_ID              => l_progress_rollup_id
14543                       ,X_PROJECT_ID                      => p_project_id
14544                       ,X_OBJECT_ID                       => l_object_id
14545                       ,X_OBJECT_TYPE                     => p_object_type
14546                       ,X_AS_OF_DATE                      => l_next_prog_cycle_date
14547                       ,X_OBJECT_VERSION_ID               => p_task_ver_id
14548                       ,X_LAST_UPDATE_DATE                => SYSDATE
14549                       ,X_LAST_UPDATED_BY                 => l_user_id
14550                       ,X_CREATION_DATE                   => SYSDATE
14551                       ,X_CREATED_BY                      => l_user_id
14552                ,X_PROGRESS_STATUS_CODE            => l_init_prog_status_code -- Bug # 3879658 -- 'PROGRESS_STAT_ON_TRACK' --maansari5/11
14553                       ,X_LAST_UPDATE_LOGIN               => l_login_id
14554                       ,X_INCREMENTAL_WORK_QTY            => null
14555                       ,X_CUMULATIVE_WORK_QTY             => null
14556                       ,X_BASE_PERCENT_COMPLETE           => null
14557                       ,X_EFF_ROLLUP_PERCENT_COMP         => l_eff_rollup_pc
14558                       ,X_COMPLETED_PERCENTAGE            => l_percent_complete
14559                       ,X_ESTIMATED_START_DATE            => null
14560                       ,X_ESTIMATED_FINISH_DATE           => null
14561                       ,X_ACTUAL_START_DATE               => l_actual_start_DATE
14562                       ,X_ACTUAL_FINISH_DATE              => l_actual_finish_DATE
14563                       ,X_EST_REMAINING_EFFORT            => null  --l_etc_effort
14564                       ,X_BASE_PERCENT_COMP_DERIV_CODE    => null
14565                       ,X_BASE_PROGRESS_STATUS_CODE       => null
14566                       ,X_EFF_ROLLUP_PROG_STAT_CODE       => null
14567                       ,x_percent_complete_id             => null
14568                     ,X_STRUCTURE_TYPE                    => 'WORKPLAN'
14569                     ,X_PROJ_ELEMENT_ID                   => l_task_id
14570                     ,X_STRUCTURE_VERSION_ID              => null
14571                     ,X_PPL_ACT_EFFORT_TO_DATE            => null
14572                     ,X_EQPMT_ACT_EFFORT_TO_DATE          => null
14573                     ,X_EQPMT_ETC_EFFORT                  => null
14574                     ,X_OTH_ACT_COST_TO_DATE_TC           => null
14575                     ,X_OTH_ACT_COST_TO_DATE_FC           => null
14576                     ,X_OTH_ACT_COST_TO_DATE_PC           => null
14577                     ,X_OTH_ETC_COST_TC                   => null
14578                     ,X_OTH_ETC_COST_FC                   => null
14579                     ,X_OTH_ETC_COST_PC                   => null
14580                     ,X_PPL_ACT_COST_TO_DATE_TC           => null
14581                     ,X_PPL_ACT_COST_TO_DATE_FC           => null
14582                     ,X_PPL_ACT_COST_TO_DATE_PC           => null
14583                     ,X_PPL_ETC_COST_TC                   => null
14584                     ,X_PPL_ETC_COST_FC                   => null
14585                     ,X_PPL_ETC_COST_PC                   => null
14586                     ,X_EQPMT_ACT_COST_TO_DATE_TC         => null
14587                     ,X_EQPMT_ACT_COST_TO_DATE_FC         => null
14588                     ,X_EQPMT_ACT_COST_TO_DATE_PC         => null
14589                     ,X_EQPMT_ETC_COST_TC                 => null
14590                     ,X_EQPMT_ETC_COST_FC                 => null
14591                     ,X_EQPMT_ETC_COST_PC                 => null
14592                     ,X_EARNED_VALUE                      => l_earned_value
14593                     ,X_TASK_WT_BASIS_CODE                => null
14594                     ,X_SUBPRJ_PPL_ACT_EFFORT             => null
14595                     ,X_SUBPRJ_EQPMT_ACT_EFFORT           => null
14596                     ,X_SUBPRJ_PPL_ETC_EFFORT             => null
14597                     ,X_SUBPRJ_EQPMT_ETC_EFFORT           => null
14598                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_TC      => null
14599                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_FC      => null
14600                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_PC      => null
14601                     ,X_SUBPRJ_PPL_ACT_COST_TC            => null
14602                     ,X_SUBPRJ_PPL_ACT_COST_FC            => null
14603                     ,X_SUBPRJ_PPL_ACT_COST_PC            => null
14604                     ,X_SUBPRJ_EQPMT_ACT_COST_TC          => null
14605                     ,X_SUBPRJ_EQPMT_ACT_COST_FC          => null
14606                     ,X_SUBPRJ_EQPMT_ACT_COST_PC          => null
14607                     ,X_SUBPRJ_OTH_ETC_COST_TC            => null
14608                     ,X_SUBPRJ_OTH_ETC_COST_FC            => null
14609                     ,X_SUBPRJ_OTH_ETC_COST_PC            => null
14610                     ,X_SUBPRJ_PPL_ETC_COST_TC            => null
14611                     ,X_SUBPRJ_PPL_ETC_COST_FC            => null
14612                     ,X_SUBPRJ_PPL_ETC_COST_PC            => null
14613                     ,X_SUBPRJ_EQPMT_ETC_COST_TC          => null
14614                     ,X_SUBPRJ_EQPMT_ETC_COST_FC          => null
14615                     ,X_SUBPRJ_EQPMT_ETC_COST_PC          => null
14616                     ,X_SUBPRJ_EARNED_VALUE               => null
14617                     ,X_CURRENT_FLAG                      => 'Y'
14618                 ,X_PROJFUNC_COST_RATE_TYPE                   => null
14619                 ,X_PROJFUNC_COST_EXCHANGE_RATE               => null
14620               --  ,X_PROJFUNC_COST_RATE_DATE_TYPE              => null
14621                 ,X_PROJFUNC_COST_RATE_DATE                   => null
14622                 ,X_PROJ_COST_RATE_TYPE                       => null
14623                 ,X_PROJ_COST_EXCHANGE_RATE                   => null
14624               --  ,X_PROJ_COST_RATE_DATE_TYPE                  => null
14625                 ,X_PROJ_COST_RATE_DATE                       => null
14626                 ,X_TXN_CURRENCY_CODE                         => null
14627                 ,X_PROG_PA_PERIOD_NAME                       => PA_PROGRESS_UTILS.Prog_Get_Pa_Period_Name(l_next_prog_cycle_date)  --maansari5/11
14628                 ,X_PROG_GL_PERIOD_NAME                       => PA_PROGRESS_UTILS.Prog_Get_gl_Period_Name(l_next_prog_cycle_date)  --maansari5/11
14629                 ,X_OTH_QUANTITY_to_date              => null  --maansari5/9
14630                 ,X_OTH_ETC_QUANTITY              => null
14631         --bug 3621404
14632                 ,X_OTH_ACT_RAWCOST_TO_DATE_TC               => null
14633                 ,X_OTH_ACT_RAWCOST_TO_DATE_FC               => null
14634                 ,X_OTH_ACT_RAWCOST_TO_DATE_PC           => null
14635                 ,X_OTH_ETC_RAWCOST_TC           => null
14636                 ,X_OTH_ETC_RAWCOST_FC           => null
14637                 ,X_OTH_ETC_RAWCOST_PC           => null
14638                 ,X_PPL_ACT_RAWCOST_TO_DATE_TC   => null
14639                 ,X_PPL_ACT_RAWCOST_TO_DATE_FC   => null
14640                 ,X_PPL_ACT_RAWCOST_TO_DATE_PC   => null
14641                 ,X_PPL_ETC_RAWCOST_TC           => null
14642                 ,X_PPL_ETC_RAWCOST_FC           => null
14643                 ,X_PPL_ETC_RAWCOST_PC           => null
14644                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_TC   => null
14645                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_FC         => null
14646                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_PC         => null
14647                 ,X_EQPMT_ETC_RAWCOST_TC         => null
14648                 ,X_EQPMT_ETC_RAWCOST_FC         => null
14649                 ,X_EQPMT_ETC_RAWCOST_PC         => null
14650                 ,X_SP_OTH_ACT_RAWCOST_TODATE_TC    => null
14651                 ,X_SP_OTH_ACT_RAWCOST_TODATE_FC    => null
14652                 ,X_SP_OTH_ACT_RAWCOST_TODATE_PC    => null
14653                 ,X_SUBPRJ_PPL_ACT_RAWCOST_TC       => null
14654                 ,X_SUBPRJ_PPL_ACT_RAWCOST_FC       => null
14655                 ,X_SUBPRJ_PPL_ACT_RAWCOST_PC       => null
14656                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_TC     => null
14657                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_FC     => null
14658                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_PC     => null
14659                 ,X_SUBPRJ_OTH_ETC_RAWCOST_TC       => null
14660                 ,X_SUBPRJ_OTH_ETC_RAWCOST_FC       => null
14661                 ,X_SUBPRJ_OTH_ETC_RAWCOST_PC       => null
14662                 ,X_SUBPRJ_PPL_ETC_RAWCOST_TC       => null
14663                 ,X_SUBPRJ_PPL_ETC_RAWCOST_FC       => null
14664                 ,X_SUBPRJ_PPL_ETC_RAWCOST_PC       => null
14665                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_TC     => null
14666                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_FC     => null
14667                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_PC     => null
14668         );
14669                 --bug 3708948
14670 
14671                 l_rollup_as_of_date := l_next_prog_cycle_date;
14672 
14673 
14674     END IF; -- IF cur_progress2%found THEN
14675     CLOSE cur_progress2;
14676     --bug 3708948 commented as this is causing new record to be inserted, moved this code up  Satish
14677     --l_rollup_as_of_date := l_next_prog_cycle_date;
14678    -- If workplan versioning is enabled for the project.
14679     ELSE -- Version Enabled
14680         -- If working progress exists then update the working progress rec.
14681 
14682          /*  Bug # 3755089. Modified the following cursor. */
14683 
14684             open cur_progress(p_project_id,l_object_id,p_task_ver_id,p_structure_version_id);
14685             fetch cur_progress into cur_progress_rec;
14686             if cur_progress%found then
14687 
14688                 update pa_progress_rollup set
14689                 --as_of_date = l_next_prog_cycle_date,
14690                 estimated_remaining_effort = null --l_etc_effort
14691                 ,completed_percentage = l_percent_complete
14692                 ,eff_rollup_percent_comp = l_eff_rollup_pc
14693                 ,earned_value = l_earned_value
14694                 ,actual_start_date    = l_actual_start_date
14695                 ,actual_finish_date    = l_actual_finish_date
14696                 ,last_update_date = sysdate
14697                 ,last_updated_by = l_user_id
14698                 --,creation_date = sysdate
14699                 --,created_by = l_user_id
14700                 ,last_update_login = l_login_id
14701                 where progress_rollup_id = cur_progress_rec.progress_rollup_id;
14702 
14703                 l_rollup_as_of_date := cur_progress_rec.as_of_date;
14704 
14705             -- If working progress record does not exist.
14706             else
14707                 -- If published progress record exists, set the as_of_date for the progress record
14708 
14709                 close cur_progress;
14710                 open c_max_as_of_date_wkg;  ---4501133
14711                 fetch c_max_as_of_date_wkg into l_as_of_date;
14712                 close c_max_as_of_date_wkg;
14713                 if l_as_of_date is null then
14714 
14715                    open cur_progress2(p_project_id,l_object_id,p_task_ver_id,null,'Y');
14716                    fetch cur_progress2 into cur_progress_rec;
14717                    if cur_progress2%found then
14718 
14719                     if (cur_progress_rec.as_of_date > l_next_prog_cycle_date) then
14720                         l_as_of_date := cur_progress_rec.as_of_date;
14721                     else
14722                         l_as_of_date := l_next_prog_cycle_date;
14723                     end if;
14724 
14725                    /* Start code to fix issue in bug # 3755089. */
14726 
14727                   else
14728                     l_as_of_date := l_next_prog_cycle_date;
14729 
14730                     /* End code to fix issue in bug # 3755089. */
14731 
14732                   end if;
14733                   close cur_progress2;
14734                 end if;
14735 
14736                 l_rollup_as_of_date := l_as_of_date;
14737 
14738                 -- Create a working progress record for the Task / Assignment.
14739 
14740                     l_progress_rollup_id := null;
14741 
14742 
14743             -- Start modifications for Bug # 3879658.
14744 
14745             open cur_progress_status;
14746             fetch cur_progress_status into l_init_prog_status_code;
14747             close cur_progress_status;
14748 
14749             -- End modifications for Bug # 3879658.
14750 
14751                       PA_PROGRESS_ROLLUP_PKG.INSERT_ROW(
14752                        X_PROGRESS_ROLLUP_ID              => l_progress_rollup_id
14753                       ,X_PROJECT_ID                      => p_project_id
14754                       ,X_OBJECT_ID                       => l_object_id
14755                       ,X_OBJECT_TYPE                     => p_object_type
14756                       ,X_AS_OF_DATE                      => l_as_of_date
14757                       ,X_OBJECT_VERSION_ID               => p_task_ver_id
14758                       ,X_LAST_UPDATE_DATE                => SYSDATE
14759                       ,X_LAST_UPDATED_BY                 => l_user_id
14760                       ,X_CREATION_DATE                   => SYSDATE
14761                       ,X_CREATED_BY                      => l_user_id
14762                       ,X_PROGRESS_STATUS_CODE            => l_init_prog_status_code -- Bug # 3879658 -- 'PROGRESS_STAT_ON_TRACK'   --maansari5/11
14763                       ,X_LAST_UPDATE_LOGIN               => l_login_id
14764                       ,X_INCREMENTAL_WORK_QTY            => null
14765                       ,X_CUMULATIVE_WORK_QTY             => null
14766                       ,X_BASE_PERCENT_COMPLETE           => null
14767                       ,X_EFF_ROLLUP_PERCENT_COMP         => l_eff_rollup_pc
14768                       ,X_COMPLETED_PERCENTAGE            => l_percent_complete
14769                       ,X_ESTIMATED_START_DATE            => null
14770                       ,X_ESTIMATED_FINISH_DATE           => null
14771                       ,X_ACTUAL_START_DATE               => l_actual_start_DATE
14772                       ,X_ACTUAL_FINISH_DATE              => l_actual_finish_DATE
14773                       ,X_EST_REMAINING_EFFORT            => null --l_etc_effort
14774                       ,X_BASE_PERCENT_COMP_DERIV_CODE    => null
14775                       ,X_BASE_PROGRESS_STATUS_CODE       => null
14776                       ,X_EFF_ROLLUP_PROG_STAT_CODE       => null
14777                       ,x_percent_complete_id             => null
14778                     ,X_STRUCTURE_TYPE                    => 'WORKPLAN'
14779                     ,X_PROJ_ELEMENT_ID                   => l_task_id
14780                     ,X_STRUCTURE_VERSION_ID              => p_structure_version_id
14781                     ,X_PPL_ACT_EFFORT_TO_DATE            => null
14782                     ,X_EQPMT_ACT_EFFORT_TO_DATE          => null
14783                     ,X_EQPMT_ETC_EFFORT                  => null
14784                     ,X_OTH_ACT_COST_TO_DATE_TC           => null
14785                     ,X_OTH_ACT_COST_TO_DATE_FC           => null
14786                     ,X_OTH_ACT_COST_TO_DATE_PC           => null
14787                     ,X_OTH_ETC_COST_TC                   => null
14788                     ,X_OTH_ETC_COST_FC                   => null
14789                     ,X_OTH_ETC_COST_PC                   => null
14790                     ,X_PPL_ACT_COST_TO_DATE_TC           => null
14791                     ,X_PPL_ACT_COST_TO_DATE_FC           => null
14792                     ,X_PPL_ACT_COST_TO_DATE_PC           => null
14793                     ,X_PPL_ETC_COST_TC                   => null
14794                     ,X_PPL_ETC_COST_FC                   => null
14795                     ,X_PPL_ETC_COST_PC                   => null
14796                     ,X_EQPMT_ACT_COST_TO_DATE_TC         => null
14797                     ,X_EQPMT_ACT_COST_TO_DATE_FC         => null
14798                     ,X_EQPMT_ACT_COST_TO_DATE_PC         => null
14799                     ,X_EQPMT_ETC_COST_TC                 => null
14800                     ,X_EQPMT_ETC_COST_FC                 => null
14801                     ,X_EQPMT_ETC_COST_PC                 => null
14802                     ,X_EARNED_VALUE                      => l_earned_value
14803                     ,X_TASK_WT_BASIS_CODE                => null
14804                     ,X_SUBPRJ_PPL_ACT_EFFORT             => null
14805                     ,X_SUBPRJ_EQPMT_ACT_EFFORT           => null
14806                     ,X_SUBPRJ_PPL_ETC_EFFORT             => null
14807                     ,X_SUBPRJ_EQPMT_ETC_EFFORT           => null
14808                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_TC      => null
14809                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_FC      => null
14810                     ,X_SBPJ_OTH_ACT_COST_TO_DATE_PC      => null
14811                     ,X_SUBPRJ_PPL_ACT_COST_TC            => null
14812                     ,X_SUBPRJ_PPL_ACT_COST_FC            => null
14813                     ,X_SUBPRJ_PPL_ACT_COST_PC            => null
14814                     ,X_SUBPRJ_EQPMT_ACT_COST_TC          => null
14815                     ,X_SUBPRJ_EQPMT_ACT_COST_FC          => null
14816                     ,X_SUBPRJ_EQPMT_ACT_COST_PC          => null
14817                     ,X_SUBPRJ_OTH_ETC_COST_TC            => null
14818                     ,X_SUBPRJ_OTH_ETC_COST_FC            => null
14819                     ,X_SUBPRJ_OTH_ETC_COST_PC            => null
14820                     ,X_SUBPRJ_PPL_ETC_COST_TC            => null
14821                     ,X_SUBPRJ_PPL_ETC_COST_FC            => null
14822                     ,X_SUBPRJ_PPL_ETC_COST_PC            => null
14823                     ,X_SUBPRJ_EQPMT_ETC_COST_TC          => null
14824                     ,X_SUBPRJ_EQPMT_ETC_COST_FC          => null
14825                     ,X_SUBPRJ_EQPMT_ETC_COST_PC          => null
14826                     ,X_SUBPRJ_EARNED_VALUE               => null
14827                     ,X_CURRENT_FLAG                      => 'Y' -- /*  Bug # 3755089. */
14828             ,X_PROJFUNC_COST_RATE_TYPE                   => null
14829             ,X_PROJFUNC_COST_EXCHANGE_RATE               => null
14830           --  ,X_PROJFUNC_COST_RATE_DATE_TYPE              => null
14831             ,X_PROJFUNC_COST_RATE_DATE                   => null
14832             ,X_PROJ_COST_RATE_TYPE                       => null
14833             ,X_PROJ_COST_EXCHANGE_RATE                   => null
14834           --  ,X_PROJ_COST_RATE_DATE_TYPE                  => null
14835             ,X_PROJ_COST_RATE_DATE                       => null
14836             ,X_TXN_CURRENCY_CODE                         => null
14837             ,X_PROG_PA_PERIOD_NAME                       => PA_PROGRESS_UTILS.Prog_Get_Pa_Period_Name(l_as_of_date)  --maansari5/11
14838             ,X_PROG_GL_PERIOD_NAME                       => PA_PROGRESS_UTILS.Prog_Get_gl_Period_Name(l_as_of_date)  --maansari5/11
14839             ,X_OTH_QUANTITY_to_date                              => null   --maansari5/9
14840             ,X_OTH_ETC_QUANTITY                          => null
14841 --bug 3621404
14842                 ,X_OTH_ACT_RAWCOST_TO_DATE_TC               => null
14843                 ,X_OTH_ACT_RAWCOST_TO_DATE_FC               => null
14844                 ,X_OTH_ACT_RAWCOST_TO_DATE_PC           => null
14845                 ,X_OTH_ETC_RAWCOST_TC           => null
14846                 ,X_OTH_ETC_RAWCOST_FC           => null
14847                 ,X_OTH_ETC_RAWCOST_PC           => null
14848                 ,X_PPL_ACT_RAWCOST_TO_DATE_TC   => null
14849                 ,X_PPL_ACT_RAWCOST_TO_DATE_FC   => null
14850                 ,X_PPL_ACT_RAWCOST_TO_DATE_PC   => null
14851                 ,X_PPL_ETC_RAWCOST_TC           => null
14852                 ,X_PPL_ETC_RAWCOST_FC           => null
14853                 ,X_PPL_ETC_RAWCOST_PC           => null
14854                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_TC   => null
14855                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_FC         => null
14856                 ,X_EQPMT_ACT_RAWCOST_TO_DATE_PC         => null
14857                 ,X_EQPMT_ETC_RAWCOST_TC         => null
14858                 ,X_EQPMT_ETC_RAWCOST_FC         => null
14859                 ,X_EQPMT_ETC_RAWCOST_PC         => null
14860                 ,X_SP_OTH_ACT_RAWCOST_TODATE_TC    => null
14861                 ,X_SP_OTH_ACT_RAWCOST_TODATE_FC    => null
14862                 ,X_SP_OTH_ACT_RAWCOST_TODATE_PC    => null
14863                 ,X_SUBPRJ_PPL_ACT_RAWCOST_TC       => null
14864                 ,X_SUBPRJ_PPL_ACT_RAWCOST_FC       => null
14865                 ,X_SUBPRJ_PPL_ACT_RAWCOST_PC       => null
14866                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_TC     => null
14867                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_FC     => null
14868                 ,X_SUBPRJ_EQPMT_ACT_RAWCOST_PC     => null
14869                 ,X_SUBPRJ_OTH_ETC_RAWCOST_TC       => null
14870                 ,X_SUBPRJ_OTH_ETC_RAWCOST_FC       => null
14871                 ,X_SUBPRJ_OTH_ETC_RAWCOST_PC       => null
14872                 ,X_SUBPRJ_PPL_ETC_RAWCOST_TC       => null
14873                 ,X_SUBPRJ_PPL_ETC_RAWCOST_FC       => null
14874                 ,X_SUBPRJ_PPL_ETC_RAWCOST_PC       => null
14875                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_TC     => null
14876                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_FC     => null
14877                 ,X_SUBPRJ_EQPMT_ETC_RAWCOST_PC     => null
14878 );
14879 
14880    end if; -- if cur_progress%found then
14881    -- If working progress record does not exist.
14882 
14883     /* Start code to fix issue in bug # 3755089. */
14884 
14885     if cur_progress%isopen then
14886 
14887     /* End code to fix issue in bug # 3755089. */
14888 
14889         close cur_progress;
14890 
14891     /* Start code to fix issue in bug # 3755089. */
14892 
14893     end if;
14894 
14895     /* End code to fix issue in bug # 3755089. */
14896 
14897   end if; -- If workplan versioning is enabled for the project.
14898 
14899 
14900   -- end if;--IF   Bug 3856161 (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14901   END IF; -- Bug 3856161  ( (nvl(p_percent_complete,0) > 0 AND p_percent_complete <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14902 
14903 
14904     IF p_object_type = 'PA_TASKS' THEN-- Bug 4498610 : Added IF
14905     -- Bug 3976633 : Added cursor cur_progress_exists
14906     OPEN cur_progress_exists (p_project_id, l_task_id, p_structure_version_id, l_version_enabled);
14907     FETCH cur_progress_exists INTO l_progress_exists;
14908     CLOSE cur_progress_exists;
14909 
14910     IF  NVL(l_progress_exists, 'N') = 'Y' THEN -- Bug 3976633
14911 
14912     --maansari5/11
14913    OPEN c_get_task_weight_method;
14914    FETCH c_get_task_weight_method INTO l_rollup_method;
14915    CLOSE c_get_task_weight_method;
14916 
14917 
14918 
14919    -- Call rollup_progress_pvt api for this task.
14920    IF l_debug_mode  = 'Y' THEN
14921     pa_debug.write(x_Module=>'PA_PROGRESS_PUB.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling Rollup For Tasks', x_Log_Level=> 3);
14922     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);
14923     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);
14924     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);
14925     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);
14926     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);
14927    END IF;
14928    -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
14929    IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N'
14930    then
14931    -- 4591321 : Always call populate_pji_tab_for_plan
14932                  pa_progress_pub.populate_pji_tab_for_plan(
14933                         p_init_msg_list         => FND_API.G_FALSE,
14934                         p_project_id            => p_project_id,
14935                         p_structure_version_id  => p_structure_version_id,
14936                         p_baselined_str_ver_id  => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id),
14937                         p_structure_type        => 'WORKPLAN',
14938                         x_return_status         => l_return_status,
14939                         x_msg_count             => l_msg_count,
14940                         x_msg_data              => l_msg_data
14941                         );
14942 
14943                  IF  l_return_status <> 'S' THEN
14944                     RAISE  FND_API.G_EXC_ERROR;
14945                  END IF;
14946 
14947     -- Bug 3861259 End
14948 
14949 
14950                 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
14951                  p_init_msg_list             => p_init_msg_list
14952                 ,p_commit                    => p_commit
14953                 ,p_validate_only             => p_validate_only
14954                 ,p_project_id                => p_project_id
14955                 ,p_structure_version_id      => p_structure_version_id
14956                 ,p_calling_module            => p_calling_module --BUG 3919800, rtarway
14957            --maansari5/10
14958                 ,p_object_type               => p_object_type
14959                 ,p_object_id                 => l_task_id
14960                 ,p_object_version_id         => p_task_ver_id
14961                 ,p_task_version_id           => p_task_ver_id
14962            --maansari5/10
14963                 ,p_wp_rollup_method          => l_rollup_method --maansari 5/11
14964                 ,p_structure_type            => 'WORKPLAN'      --maansari 5/11
14965                 ,p_as_of_date                => l_rollup_as_of_date
14966                 ,x_return_status             => l_return_status
14967                 ,x_msg_count                 => l_msg_count
14968                 ,x_msg_data                  => l_msg_data);
14969 	END IF;
14970     END IF ;--IF    NVL(l_progress_exists, 'N') = 'Y' THEN
14971     END IF;-- p_object_type = 'PA_TASKS' THEN-- Bug 4498610 : Added END IF
14972   END IF; -- if (p_object_type ='PA_TASKS') then
14973 
14974     -- Code to insert progress records nto the pa_progress_rollup_table.
14975 
14976     /* END: The above actions are to be performed only when p_object_type = 'PA_TASKS'. */
14977 
14978 
14979     /* BEGIN: The following actions are to be performed only when p_object_type = 'PA_ASSIGNMENTS'. */
14980 
14981    IF (p_object_type ='PA_ASSIGNMENTS') then
14982 
14983     -- Call rollup API only is there is a working progress for the given task_version and
14984         -- structure_version. The as_of_date will then be the max(as_of_date() of the working progress.
14985      IF l_debug_mode  = 'Y' THEN
14986         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Entered For Assignments', x_Log_Level=> 3);
14987     END IF;
14988 
14989         --bug 4105720,  get the task id
14990     OPEN c_proj_element_id;
14991     FETCH c_proj_element_id INTO l_task_id;
14992     CLOSE c_proj_element_id;
14993 
14994     -- Bug 3976633 : Added cursor cur_progress_exists
14995     OPEN cur_progress_exists (p_project_id, l_task_id, p_structure_version_id, l_version_enabled);
14996     FETCH cur_progress_exists INTO l_progress_exists;
14997     CLOSE cur_progress_exists;
14998 
14999      IF l_debug_mode  = 'Y' THEN
15000         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);
15001         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);
15002     END IF;
15003 
15004     IF  NVL(l_progress_exists, 'N') = 'Y' THEN -- Bug 3976633
15005 
15006 
15007     open c_max_as_of_date_wkg;
15008     fetch c_max_as_of_date_wkg into l_rollup_as_of_date;
15009     --if (c_max_as_of_date_wkg%FOUND) then Bug 3856161
15010     IF l_rollup_as_of_date IS NOT NULL THEN
15011 
15012     --maansari5/11
15013             OPEN c_get_task_weight_method;
15014             FETCH c_get_task_weight_method INTO l_rollup_method;
15015             CLOSE c_get_task_weight_method;
15016 
15017                 --bug 4105720, moved this code above
15018                 /*OPEN c_proj_element_id;
15019                 FETCH c_proj_element_id INTO l_task_id;
15020                 CLOSE c_proj_element_id;*/
15021 
15022      IF l_debug_mode  = 'Y' THEN
15023         pa_debug.write(x_Module=>'PA_TASK_PUB1.UPDATE_TASK_DET_SCH_INFO', x_Msg => 'Calling Rollup For Assignments', x_Log_Level=> 3);
15024         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);
15025         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);
15026         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);
15027         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);
15028         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);
15029     END IF;
15030    -- 4591321 : Always call populate_pji_tab_for_plan
15031    -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
15032     IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N'
15033     then
15034             pa_progress_pub.populate_pji_tab_for_plan(
15035                         p_init_msg_list         => FND_API.G_FALSE,
15036                         --p_calling_module        => p_calling_module,
15037                         p_project_id            => p_project_id,
15038                         p_structure_version_id  => p_structure_version_id,
15039                         p_baselined_str_ver_id  => PA_PROJECT_STRUCTURE_UTILS.Get_Baseline_Struct_Ver(p_project_id),
15040                         p_structure_type        => 'WORKPLAN',
15041                         x_return_status         => l_return_status,
15042                         x_msg_count             => l_msg_count,
15043                         x_msg_data              => l_msg_data
15044                         );
15045                  IF  l_return_status <> 'S' THEN
15046                     RAISE  FND_API.G_EXC_ERROR;
15047                  END IF;
15048     -- Bug 3861259 End
15049 
15050 
15051 
15052         -- Call rollup_progress_pvt api for this task or assignment.
15053                 PA_PROGRESS_PUB.ROLLUP_PROGRESS_PVT(
15054                  p_init_msg_list             => p_init_msg_list
15055                 ,p_commit                    => p_commit
15056                 ,p_validate_only             => p_validate_only
15057                 ,p_project_id                => p_project_id
15058                 ,p_structure_version_id      => p_structure_version_id
15059                 ,p_calling_module            => p_calling_module--BUG 3919800, rtarway
15060            --maansari5/10
15061                 ,p_object_type               => 'PA_TASKS' -- p_object_type Bug 3856161
15062                 ,p_object_id                 => l_task_id
15063                 ,p_object_version_id         => p_task_ver_id
15064                 ,p_task_version_id           => p_task_ver_id
15065            --maansari5/10
15066             ,p_wp_rollup_method          => l_rollup_method --maansari 5/11
15067                 ,p_structure_type            => 'WORKPLAN'      --maansari 5/11
15068                 ,p_as_of_date                => l_rollup_as_of_date
15069                 ,x_return_status             => l_return_status
15070                 ,x_msg_count                 => l_msg_count
15071                 ,x_msg_data                  => l_msg_data);
15072            -- Code to insert progress records nto the pa_progress_rollup_table.
15073     END IF;
15074     end if;
15075         close c_max_as_of_date_wkg;
15076     END IF; --   IF     NVL(l_progress_exists, 'N') = 'Y'
15077     end if;
15078 
15079     /* END: The above actions are to be performed only when p_object_type = 'PA_ASSIGNMENTS'. */
15080 
15081       if l_return_status <> FND_API.G_RET_STS_SUCCESS then
15082        x_msg_count := FND_MSG_PUB.count_msg;
15083        if x_msg_count = 1 then
15084          pa_interface_utils_pub.get_messages
15085          (p_encoded        => FND_API.G_TRUE,
15086           p_msg_index      => 1,
15087           p_msg_count      => l_msg_count,
15088           p_msg_data       => l_msg_data,
15089           p_data           => l_data,
15090           p_msg_index_out  => l_msg_index_out);
15091           x_msg_data := l_data;
15092        end if;
15093        raise FND_API.G_EXC_ERROR;
15094      end if;
15095 
15096     x_return_status := FND_API.G_RET_STS_SUCCESS;
15097 
15098 EXCEPTION
15099     WHEN FND_API.G_EXC_ERROR THEN
15100       IF (p_commit = FND_API.G_TRUE) THEN
15101         ROLLBACK to UPDATE_task_det_sch;
15102       END IF;
15103       x_msg_count := FND_MSG_PUB.count_msg;
15104       x_return_status := FND_API.G_RET_STS_ERROR;
15105     WHEN OTHERS THEN
15106       IF (p_commit = FND_API.G_TRUE) THEN
15107         ROLLBACK to UPDATE_task_det_sch;
15108       END IF;
15109       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15110       x_msg_count := FND_MSG_PUB.count_msg;
15111       --put message
15112       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15113                               p_procedure_name => 'update_task_det_sch_info',
15114                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15115       RAISE;
15116 
15117 END update_task_det_sch_info;
15118 
15119 
15120 -- API name                      : Copy_Tasks_In_Bulk
15121 -- Type                          : Public procedure
15122 -- Pre-reqs                      : None
15123 -- Return Value                  : N/A
15124 -- Prameters
15125 -- p_api_version          IN    NUMBER      N   Not Null    1.0
15126 -- p_init_msg_list    IN    VARCHAR2    N   Not Null    FND_API.TRUE
15127 -- p_commit               IN    VARCHAR2    N   Not Null    FND_API.G_FALSE
15128 -- p_validate_only    IN    VARCHAR2    N   Not Null    FND_API.G_TRUE
15129 -- p_validation_level     IN    NUMBER      N   Null        FND_API.G_VALID_LEVEL_FULL
15130 -- p_calling_module   IN    VARCHAR2    N   Null        SELF_SERVICE
15131 -- p_debug_mode           IN    VARCHAR2    N   Null        N
15132 -- p_max_msg_count        IN    NUMBER      N   NULL        PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15133 -- p_src_project_id       IN  NUMBER        N   NULL        PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15134 -- p_src_project_name     IN  VARCHAR2      N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15135 -- p_src_structre_id      IN  NUMBER        N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15136 -- p_src_structure_name   IN  VARCHAR2      N   Null    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15137 -- p_src_structure_version_id   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15138 -- p_src_structure_version_name IN  VARCHAR2 N  NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15139 -- p_src_task_version_id        IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15140 -- p_src_task_name  IN  VARCHAR2    N   NULL            PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15141 -- p_dest_structure_version_id  IN  NUMBER  N   NOT NULL
15142 -- p_dest_task_version_id   IN  NUMBER  N   NULL    PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15143 -- p_dest_project_id        IN NUMBER NULL PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15144 -- p_copy_option            IN  VARCHAR2    N   NOT NULL
15145 -- p_peer_or_sub            IN  VARCHAR2    N   NOT NULL
15146 -- x_return_status          OUT     VARCHAR2    N   NULL
15147 -- x_msg_count              OUT     NUMBER      N   NULL
15148 -- x_msg_data               OUT     VARCHAR2    N   NULL
15149 --
15150 --  History
15151 --
15152 --  22-FEB-05                Created   avaithia
15153 --
15154 --
15155 
15156 PROCEDURE Copy_Tasks_In_Bulk
15157 (
15158  p_api_version            IN    NUMBER  :=1.0,
15159  p_init_msg_list          IN    VARCHAR2    :=FND_API.G_TRUE,
15160  p_commit                 IN    VARCHAR2    :=FND_API.G_FALSE,
15161  p_validate_only          IN    VARCHAR2    :=FND_API.G_TRUE,
15162  p_validation_level   IN    NUMBER      :=FND_API.G_VALID_LEVEL_FULL,
15163  p_calling_module         IN    VARCHAR2    :='SELF_SERVICE',
15164  p_debug_mode             IN    VARCHAR2    :='N',
15165  p_max_msg_count          IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15166  p_src_project_id         IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15167  p_src_project_name       IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
15168  p_src_structure_id       IN    NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15169  p_src_structure_name     IN    VARCHAR2    :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
15170  p_src_structure_version_id IN NUMBER       :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15171  p_src_structure_version_name   IN VARCHAR2 :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
15172  p_src_task_version_id_tbl  IN   SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15173  p_src_task_name          IN    VARCHAR2     :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
15174  p_dest_structure_version_id    IN  NUMBER,
15175  p_dest_task_version_id IN  NUMBER  :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15176  p_dest_project_id      IN  NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15177  p_called_from_api      IN    VARCHAR2    := 'ABCD',
15178  p_copy_option        IN    VARCHAR2,
15179  p_peer_or_sub        IN    VARCHAR2,
15180  p_prefix             IN    VARCHAR2,
15181  p_structure_type              IN              VARCHAR2        :='WORKPLAN',
15182  p_cp_dependency_flag          IN              VARCHAR2        :='N',
15183  p_cp_deliverable_asso_flag    IN              VARCHAR2        :='N',
15184  p_cp_tk_assignments_flag      IN              VARCHAR2        :='N',
15185  p_cp_cost_code_flag               IN              VARCHAR2        :='N',  -- bug#16083858
15186  p_cp_people_flag              IN              VARCHAR2        :='N',
15187  p_cp_financial_elem_flag      IN              VARCHAR2        :='N',
15188  p_cp_material_items_flag      IN              VARCHAR2        :='N',
15189  p_cp_equipment_flag           IN              VARCHAR2        :='N',
15190  p_user_defn_att_flag        IN              VARCHAR2          :='N',  -- Added for 14209636
15191  x_return_status          OUT   NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
15192  x_msg_count              OUT   NOCOPY NUMBER, --File.Sql.39 bug 4440895
15193  x_msg_data               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15194 ) IS
15195    l_api_name                      CONSTANT VARCHAR(30) := 'COPY_TASKS_IN_BULK';
15196    l_api_version                   CONSTANT NUMBER      := 1.0;
15197 
15198    l_return_status                 VARCHAR2(1);
15199    l_msg_count                     NUMBER;
15200    l_msg_data                      VARCHAR2(2000);
15201    l_data                          VARCHAR2(2000);
15202    l_msg_index_out                 NUMBER;
15203    l_error_msg_code                     VARCHAR2(250);
15204 
15205    l_src_project_id       NUMBER;
15206    l_src_structure_id         NUMBER;
15207    l_src_structure_version_id   NUMBER;
15208 
15209    l_dest_project_id       NUMBER ;
15210    l_task_unpub_ver_status_code  PA_PROJ_ELEMENT_VERSIONS.TASK_UNPUB_VER_STATUS_CODE%TYPE;
15211    l_dest_structure_id    NUMBER;
15212    l_template_flag        VARCHAR2(1);
15213    l_fin_task_flag        VARCHAR2(1);
15214 
15215    l_shared               VARCHAR2(1);
15216    l_ver_enabled          VARCHAR2(1);
15217    l_copy_external_flag   VARCHAR2(1);
15218 
15219    l_delete_project_allowed      VARCHAR2(1);
15220    l_update_proj_num_allowed      VARCHAR2(1);
15221    l_update_proj_name_allowed    VARCHAR2(1);
15222    l_update_proj_desc_allowed    VARCHAR2(1);
15223    l_update_proj_dates_allowed    VARCHAR2(1);
15224    l_update_proj_status_allowed  VARCHAR2(1);
15225    l_update_proj_manager_allowed  VARCHAR2(1);
15226    l_update_proj_org_allowed      VARCHAR2(1);
15227    l_add_task_allowed            VARCHAR2(1);
15228    l_delete_task_allowed          VARCHAR2(1);
15229    l_update_task_num_allowed      VARCHAR2(1);
15230    l_update_task_name_allowed    VARCHAR2(1);
15231    l_update_task_dates_allowed    VARCHAR2(1);
15232    l_update_task_desc_allowed    VARCHAR2(1);
15233    l_update_parent_task_allowed  VARCHAR2(1);
15234    l_update_task_org_allowed      VARCHAR2(1);
15235 
15236    l_err_code         NUMBER        := 0;
15237    l_err_stack        VARCHAR2(200) := NULL;
15238    l_err_stage        VARCHAR2(200) := NULL;
15239 
15240    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
15241 
15242   CURSOR cur_proj_is_template(c_project_id NUMBER)
15243   IS     select 'Y'
15244            from pa_projects_all
15245           where project_id = c_project_id
15246             and template_flag = 'Y';
15247 
15248    CURSOR cur_dest_proj_id
15249    IS
15250      SELECT project_id
15251        FROM pa_proj_element_versions
15252       WHERE element_version_id = p_dest_task_version_id;
15253 
15254     CURSOR cur_struc_id( x_structure_version_id NUMBER, x_project_id NUMBER )
15255     IS
15256     SELECT proj_element_id
15257      FROM pa_proj_elem_ver_structure
15258     WHERE element_version_id = x_structure_version_id
15259     AND project_id = x_project_id;
15260 
15261    CURSOR get_product_code ( c_project_id NUMBER ) IS
15262    SELECT pm_product_code
15263    FROM PA_PROJECTS_ALL
15264    WHERE project_id = c_project_id;
15265 BEGIN
15266     pa_debug.init_err_stack ('PA_TASK_PUB1.COPY_TASKS_IN_BULK');
15267     x_return_status :=  FND_API.G_RET_STS_SUCCESS;
15268     IF (p_debug_mode = 'Y') THEN
15269       pa_debug.debug('PA_TASK_PUB1.COPY_TASKS_IN_BULK begin');
15270     END IF;
15271 
15272     IF (p_commit = FND_API.G_TRUE) THEN
15273       savepoint copy_tasks_in_bulk;
15274     END IF;
15275 
15276     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
15277       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15278     END IF;
15279 
15280     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
15281       FND_MSG_PUB.initialize;
15282     END IF;
15283 
15284 IF p_calling_module = 'SELF_SERVICE' THEN
15285 
15286         /*Product Code related validation*/
15287         /* This is not needed as now we are passing
15288            Destination Project ID from Self Service (TaskLiteVORowImpl.java - copyTasks method)
15289 
15290     OPEN cur_dest_proj_id;
15291     FETCH cur_dest_proj_id into l_dest_project_id;
15292     CLOSE cur_dest_proj_id;
15293         */
15294         l_dest_project_id := p_dest_project_id ;
15295 
15296         OPEN cur_proj_is_template(l_dest_project_id) ;
15297         FETCH cur_proj_is_template into l_template_flag ;
15298         CLOSE cur_proj_is_template;
15299 
15300         OPEN get_product_code(l_dest_project_id);
15301         FETCH get_product_code INTO l_pm_product_code;
15302         CLOSE get_product_code;
15303 
15304         If l_pm_product_code IS NOT NULL THEN
15305 
15306           pa_pm_controls.Get_Project_actions_allowed
15307                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
15308                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
15309                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
15310                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
15311                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
15312                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
15313                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
15314                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
15315                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
15316                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
15317                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
15318                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
15319                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
15320                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
15321                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
15322                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
15323                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
15324                  P_ERROR_CODE                 => l_err_code,
15325                  P_ERROR_STACK                    => l_err_stack,
15326                  P_ERROR_STAGE                => l_err_stage );
15327 
15328            IF l_err_code <> 0 THEN
15329                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15330                                  p_msg_name       => l_err_stage);
15331            END IF;
15332 
15333            IF l_add_task_allowed = 'N' THEN
15334                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15335                                    p_msg_name       => 'PA_PR_PM_CANNOT_COPY');
15336                 raise FND_API.G_EXC_ERROR;
15337            END IF;
15338 
15339         END IF;
15340 
15341     /*Project Name to ID validation*/
15342 /* All Name to ID validations can be skipped in case of SS
15343       IF ((p_src_project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15344           (p_src_project_name IS NOT NULL)) OR
15345          ((p_src_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
15346           (p_src_project_id IS NOT NULL)) THEN
15347         --Call Check API.
15348           PA_PROJ_ELEMENTS_UTILS.Project_Name_Or_Id(
15349             p_project_name   => p_src_project_name,
15350             p_project_id     => p_src_project_id,
15351             x_project_id     => l_src_project_id,
15352             x_return_status  => l_return_status,
15353             x_error_msg_code => l_error_msg_code);
15354 
15355            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15356               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15357                                    p_msg_name => l_error_msg_code);
15358            END IF;
15359        END IF;
15360 */
15361       /*Structure Name to ID Validation*/
15362 /*
15363       IF ((p_src_structure_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15364           (p_src_structure_name IS NOT NULL)) OR
15365          ((p_src_structure_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
15366           (p_src_structure_id IS NOT NULL)) THEN
15367         --Call Check API.
15368           PA_PROJECT_STRUCTURE_UTILS.Structure_Name_Or_Id
15369                            (
15370                               p_project_id             => l_src_project_id
15371                              ,p_structure_name         => p_src_structure_name
15372                              ,p_structure_id           => p_src_structure_id
15373                              ,x_structure_id           => l_src_structure_id
15374                              ,x_return_status          => l_return_status
15375                              ,x_error_message_code     => l_error_msg_code
15376                             );
15377 
15378            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15379               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15380                                    p_msg_name => l_error_msg_code);
15381            END IF;
15382       END IF;
15383 */
15384       /*Structure Version Name to ID conversion*/
15385 /*
15386       IF ((p_src_structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15387           (p_src_structure_version_name IS NOT NULL)) OR
15388          ((p_src_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
15389           (p_src_structure_version_id IS NOT NULL)) THEN
15390         --Call Check API.
15391            l_src_structure_version_id := p_src_structure_version_id;
15392           PA_PROJECT_STRUCTURE_UTILS.Structure_Version_Name_Or_Id
15393                                 (
15394                               p_structure_id            => l_src_structure_id
15395                              ,p_structure_version_name  => p_src_structure_version_name
15396                              ,p_structure_version_id    => p_src_structure_version_id
15397                              ,x_structure_version_id    => l_src_structure_version_id
15398                              ,x_return_status           => l_return_status
15399                              ,x_error_message_code      => l_error_msg_code
15400                             );
15401 
15402            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15403               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15404                                    p_msg_name => l_error_msg_code);
15405            END IF;
15406 
15407       END IF;
15408 */
15409       /*Mandatory Params check*/
15410       IF (p_src_project_id IS NULL OR p_src_structure_id IS NULL OR
15411        p_src_structure_version_id IS NULL )
15412       THEN
15413 --        dbms_output.put_line( 'Project Id '||l_src_project_id );
15414 --        dbms_output.put_line( 'Structure Id '||l_src_structure_id );
15415 --        dbms_output.put_line( 'Structure Ver Id '||l_src_structure_version_id );
15416 
15417           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15418                                 p_msg_name       => 'PA_PS_NOT_ENOUGH_PARAMS' );
15419            x_msg_data := ' BULK API : PA_PS_NOT_ENOUGH_PARAMS';
15420            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15421            RAISE  FND_API.G_EXC_ERROR;
15422       END IF;
15423 
15424     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
15425       x_msg_count := FND_MSG_PUB.count_msg;
15426       IF x_msg_count = 1 then
15427          pa_interface_utils_pub.get_messages
15428          (p_encoded        => FND_API.G_TRUE,
15429           p_msg_index      => 1,
15430           p_msg_count      => l_msg_count,
15431           p_msg_data       => l_msg_data,
15432           p_data           => l_data,
15433           p_msg_index_out  => l_msg_index_out);
15434          x_msg_data := l_data;
15435       END IF;
15436       raise FND_API.G_EXC_ERROR;
15437     END IF;
15438 
15439     IF p_copy_option NOT IN( 'PA_ENTIRE_VERSION', 'PA_TASK_ONLY', 'PA_TASK_SUBTASK'  )
15440     THEN
15441 
15442         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15443                              p_msg_name       => 'PA_PS_WRONG_COPY_OPTION' );
15444         x_msg_data := 'PA_PS_WRONG_COPY_OPTION';
15445         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15446         RAISE  FND_API.G_EXC_ERROR;
15447     END IF;
15448 
15449     /*====================================================================
15450      ALL BASIC VALIDATIONS COMPLETE RELEVANT TO VALIDITY OF PASSED PARAMS
15451      ====================================================================*/
15452 
15453    /* Derive the Destination Structure ID (ProjElementId) from the passed pa_dest_structure_version_id*/
15454    OPEN cur_struc_id(p_dest_structure_version_id , l_dest_project_id);
15455    FETCH cur_struc_id into l_dest_structure_id ;
15456    CLOSE cur_struc_id ;
15457 
15458    /*4201927 : Derive values for sharing enabled and Versioning Enabled */
15459        l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
15460                                                   l_dest_project_id);
15461 
15462        l_ver_enabled :=
15463 PA_WORKPLAN_ATTR_UTILS.Check_Wp_Versioning_Enabled(l_dest_project_id);
15464 
15465    /* Derive the value for Copy External Flag*/
15466     IF p_src_project_id = l_dest_project_id
15467     THEN
15468         l_copy_external_flag := 'N';
15469     ELSE
15470         l_copy_external_flag := 'Y';
15471     ENd IF;
15472 
15473    /* Copied from Copy_Task API : task version status changes
15474       This need not be executed for each and every task */
15475 
15476 
15477    IF (l_template_flag = 'N') THEN
15478           --check if structure is shared
15479           --  if shared, check if versioned
15480           --    'WORKING' if versioned; 'PUBLISHED' if not
15481           --  if split, check if 'FINANCIAL'
15482           --    'PUBLISHED' if financial
15483           --    check if versioned
15484           --    'WORKING' if versioend; 'PUBLISHED' if not
15485           IF ('Y' = l_shared) THEN
15486             IF ('Y' = l_ver_enabled) THEN
15487               l_task_unpub_ver_status_code := 'WORKING';
15488             ELSE
15489               l_task_unpub_ver_status_code := 'PUBLISHED';
15490             END IF;
15491           ELSE --split
15492             IF ('Y' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_dest_structure_id,'FINANCIAL') AND
15493                 'N' = PA_PROJECT_STRUCTURE_UTILS.get_struc_type_for_structure(l_dest_structure_id,'WORKPLAN')) THEN
15494               l_task_unpub_ver_status_code := 'PUBLISHED';
15495             ELSE --workplan only
15496               IF ('Y' = l_ver_enabled) THEN
15497                 l_task_unpub_ver_status_code := 'WORKING';
15498               ELSE
15499                 l_task_unpub_ver_status_code := 'PUBLISHED';
15500               END IF;
15501             END IF;
15502           END IF;
15503    ELSE
15504           l_task_unpub_ver_status_code := 'WORKING';
15505    END IF;
15506 
15507    /*Derive valie for the p_fin_task_flag*/
15508         IF p_structure_type = 'WORKPLAN'
15509         THEN
15510            IF
15511            PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_dest_project_id) =
15512            'SHARE_FULL'
15513            THEN
15514               l_fin_task_flag := 'Y';
15515            ELSE
15516               l_fin_task_flag := 'N';
15517            END IF;
15518         ELSE
15519             l_fin_task_flag := 'Y';
15520         END IF;
15521 
15522     /*Now retrieve the task version id's passed in the form of array table from the UI
15523     and call the Copy Task API (singular version)*/
15524 
15525 
15526 IF nvl(p_src_task_version_id_tbl.LAST,0)>0 THEN
15527     FOR i IN p_src_task_version_id_tbl.FIRST..p_src_task_version_id_tbl.LAST LOOP
15528                PA_TASK_PUB1.Copy_Task(
15529            p_init_msg_list         => FND_API.G_FALSE,
15530                p_src_project_id                      => p_src_project_id,
15531                p_src_project_name                    => p_src_project_name,
15532                p_src_structure_id                    => p_src_structure_id ,
15533                p_src_structure_name                  => p_src_structure_name,
15534                p_src_structure_version_id            => p_src_structure_version_id ,
15535                p_src_structure_version_name          => p_src_structure_version_name,
15536                p_src_task_version_id                 => p_src_task_version_id_tbl(i),
15537                p_src_task_name                       => p_src_task_name,
15538                p_dest_structure_id           => l_dest_structure_id,
15539                p_dest_structure_version_id           => p_dest_structure_version_id,
15540                p_dest_task_version_id                => p_dest_task_version_id,
15541                p_dest_project_id                     => l_dest_project_id,
15542                p_task_unpub_ver_status_code          => l_task_unpub_ver_status_code,
15543                p_fin_task_flag                       => l_fin_task_flag,
15544                p_sharing_enabled                     => l_shared,
15545                p_versioning_enabled                  => l_ver_enabled,
15546                p_copy_external_flag                  => l_copy_external_flag,
15547                p_copy_option                         => p_copy_option,
15548                p_peer_or_sub                         => p_peer_or_sub,
15549                p_prefix                              => p_prefix,
15550                p_structure_type                      => p_structure_type,
15551                p_cp_dependency_flag                  => p_cp_dependency_flag,
15552                p_cp_deliverable_asso_flag            => p_cp_deliverable_asso_flag,
15553                p_cp_tk_assignments_flag              => p_cp_tk_assignments_flag,
15554 		 p_cp_cost_code_flag                   => p_cp_cost_code_flag,
15555                p_cp_people_flag                      => p_cp_people_flag,
15556                p_cp_financial_elem_flag              => p_cp_financial_elem_flag,
15557                p_cp_material_items_flag              => p_cp_material_items_flag,
15558                p_cp_equipment_flag                   => p_cp_equipment_flag,
15559                p_called_from_bulk_api                => 'Y',
15560 			   p_user_defn_att_flag					 => p_user_defn_att_flag, -- Added for 14209636
15561                x_return_status                       => x_return_status,
15562                x_msg_count                           => x_msg_count,
15563                x_msg_data                            => x_msg_data
15564                );
15565                if(x_return_status <> FND_API.G_RET_STS_SUCCESS)
15566                then
15567            RAISE FND_API.G_EXC_ERROR ;
15568                End if;
15569     END LOOP;
15570 
15571  END IF;
15572 
15573 END IF; /*End If Calling Module is self service*/
15574     IF (p_commit = FND_API.G_TRUE) THEN
15575       COMMIT;
15576     END IF;
15577 EXCEPTION
15578     when FND_API.G_EXC_ERROR then
15579       if p_commit = FND_API.G_TRUE then
15580          rollback to Copy_Tasks_in_bulk;
15581       end if;
15582       x_return_status := FND_API.G_RET_STS_ERROR;
15583       x_msg_count := Fnd_Msg_Pub.count_msg;
15584      IF x_msg_count = 1 AND x_msg_data IS NULL
15585       THEN
15586           Pa_Interface_Utils_Pub.get_messages
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        END IF;
15594        x_msg_data := l_data;
15595     when FND_API.G_EXC_UNEXPECTED_ERROR then
15596       if p_commit = FND_API.G_TRUE then
15597          rollback to Copy_Tasks_in_bulk;
15598       end if;
15599       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15600       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15601                               p_procedure_name => 'COPY_TASKS_IN_BULK',
15602                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15603     when OTHERS then
15604       if p_commit = FND_API.G_TRUE then
15605          rollback to Copy_Tasks_in_bulk;
15606       end if;
15607       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15608       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15609                               p_procedure_name => 'COPY_TASKS_IN_BULK',
15610                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15611       raise;
15612 
15613 END Copy_Tasks_In_Bulk;
15614 
15615 --- API name                      : MOVE_TASK_VERSIONS_IN_BULK
15616 -- Type                          : Public procedure
15617 -- Pre-reqs                      : None
15618 -- Return Value                  : N/A
15619 -- Prameters
15620 -- p_api_version          IN    NUMBER      N   Not Null    1.0
15621 -- p_init_msg_list        IN    VARCHAR2    N   Not Null    FND_API.TRUE
15622 -- p_commit               IN    VARCHAR2    N   Not Null    FND_API.G_FALSE
15623 -- p_validate_only        IN    VARCHAR2    N   Not Null    FND_API.G_TRUE
15624 -- p_validation_level     IN    NUMBER      N   Null        FND_API.G_VALID_LEVEL_FULL
15625 -- p_calling_module       IN    VARCHAR2    N   Null        SELF_SERVICE
15626 -- p_debug_mode           IN    VARCHAR2    N   Null        N
15627 -- p_max_msg_count        IN    NUMBER      N   NULL        PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15628 -- p_structure_version_id IN    NUMBER      N   NULL        PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15629 -- p_task_version_id_tbl  IN     SYSTEM.PA_NUM_TBL_TYPE N NOT NULL  SYSTEM.PA_NUM_TBL_TYPE()
15630 -- p_ref_task_version_id  IN     NUMBER     N   Not Null
15631 -- p_ref_project_id       IN     NUMBER     N   Not Null /*4269830*/
15632 -- p_peer_or_sub          IN     VARCHAR2   N   Not Null
15633 -- p_record_version_number_tbl  IN  SYSTEM.PA_NUM_TBL_TYPE N NOT NULL  SYSTEM.PA_NUM_TBL_TYPE()
15634 -- x_return_status          OUT     VARCHAR2    N   NULL
15635 -- x_msg_count              OUT     NUMBER      N   NULL
15636 -- x_msg_data               OUT     VARCHAR2    N   NULL
15637 --
15638 --  History
15639 --
15640 --  23-FEB-05                Created   avaithia
15641 --  29-MAR-05                Modified  avaithia   4269830 : Performance Tuning done
15642 --
15643 PROCEDURE MOVE_TASK_VERSIONS_IN_BULK
15644    (     p_api_version           IN     NUMBER   := 1.0,
15645      p_init_msg_list         IN     VARCHAR2 := FND_API.G_TRUE,
15646      p_commit                IN     VARCHAR2 := FND_API.G_FALSE,
15647      p_validate_only         IN     VARCHAR2 := FND_API.G_TRUE,
15648      p_validation_level      IN     NUMBER   := FND_API.G_VALID_LEVEL_FULL,
15649      p_calling_module        IN     VARCHAR2 := 'SELF_SERVICE',
15650      p_debug_mode            IN     VARCHAR2 := 'N',
15651      p_max_msg_count         IN     NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15652      p_structure_version_id  IN     NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15653      p_task_version_id_tbl   IN     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15654      p_ref_task_version_id   IN     NUMBER,
15655      p_ref_project_id        IN     NUMBER, /*4269830*/
15656      p_peer_or_sub           IN     VARCHAR2,
15657      p_record_version_number_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15658      x_return_status                 OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
15659      x_msg_count                     OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
15660      x_msg_data                      OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
15661 )
15662 IS
15663    l_api_name                      CONSTANT VARCHAR(30) := 'MOVE_TASK_VERSIONS_IN_BULK';
15664    l_api_version                   CONSTANT NUMBER      := 1.0;
15665 
15666    l_return_status                 VARCHAR2(1);
15667    l_msg_count                     NUMBER;
15668    l_msg_data                      VARCHAR2(2000);
15669    l_data                          VARCHAR2(2000);
15670    l_msg_index_out                 NUMBER;
15671    l_error_msg_code                     VARCHAR2(250);
15672 
15673    l_delete_project_allowed      VARCHAR2(1);
15674    l_update_proj_num_allowed      VARCHAR2(1);
15675    l_update_proj_name_allowed    VARCHAR2(1);
15676    l_update_proj_desc_allowed    VARCHAR2(1);
15677    l_update_proj_dates_allowed    VARCHAR2(1);
15678    l_update_proj_status_allowed  VARCHAR2(1);
15679    l_update_proj_manager_allowed  VARCHAR2(1);
15680    l_update_proj_org_allowed      VARCHAR2(1);
15681    l_add_task_allowed            VARCHAR2(1);
15682    l_delete_task_allowed          VARCHAR2(1);
15683    l_update_task_num_allowed      VARCHAR2(1);
15684    l_update_task_name_allowed    VARCHAR2(1);
15685    l_update_task_dates_allowed    VARCHAR2(1);
15686    l_update_task_desc_allowed    VARCHAR2(1);
15687    l_update_parent_task_allowed  VARCHAR2(1);
15688    l_update_task_org_allowed      VARCHAR2(1);
15689 
15690    ref_task_temp_version_id       NUMBER; -- Added new variable for Bug 6628382
15691 
15692    l_err_code         NUMBER        := 0;
15693    l_err_stack        VARCHAR2(200) := NULL;
15694    l_err_stage        VARCHAR2(200) := NULL;
15695 
15696    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
15697 
15698    l_cur_project_id      NUMBER;
15699    CURSOR cur_proj_id
15700    IS
15701      SELECT project_id
15702        FROM pa_proj_element_versions
15703       WHERE element_version_id = p_structure_version_id;
15704 
15705    CURSOR get_product_code ( c_project_id NUMBER ) IS
15706    SELECT pm_product_code
15707    FROM PA_PROJECTS_ALL
15708    WHERE project_id = c_project_id;
15709 
15710    /*4269830 : Performance Enhancements : Start */
15711     CURSOR cur_struc_type( c_structure_id NUMBER )
15712     IS
15713       SELECT 'Y'
15714         FROM pa_proj_structure_types ppst
15715             ,pa_structure_types pst
15716        WHERE ppst.proj_element_id = c_structure_id
15717          AND ppst.structure_type_id = pst.structure_type_id
15718          AND pst.structure_type_class_code = 'FINANCIAL' ;
15719 
15720     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
15721       select 'Y'
15722         from pa_proj_elem_ver_structure
15723        where proj_element_id = c_structure_id
15724          AND project_id = c_project_id
15725          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
15726 
15727    l_versioned      VARCHAR2(1) := 'N';
15728    l_shared         VARCHAR2(1) := 'N';
15729    l_sharing_code   VARCHAR2(30);
15730 
15731    l_task_version_id            NUMBER;
15732    l_structure_id               NUMBER;
15733    l_published_version          VARCHAR2(1);
15734    l_wp_type                    VARCHAR2(1);
15735    l_fin_type			VARCHAR2(1);
15736 
15737    l_weighting_basis_code       VARCHAR2(30);
15738    l_check_third_party_flag     VARCHAR2(1);
15739    l_dummy_char        VARCHAR2(1);
15740 
15741    /*4269830 : Performance Enhancements : End*/
15742 
15743 BEGIN
15744     pa_debug.init_err_stack ('PA_TASK_PUB1.MOVE_TASK_VERSIONS_IN_BULK');
15745 
15746     x_return_status :=  FND_API.G_RET_STS_SUCCESS ;
15747 
15748     IF (p_debug_mode = 'Y') THEN
15749       pa_debug.debug('PA_TASK_PUB1.MOVE_TASK_VERSIONS_IN_BULK begin');
15750     END IF;
15751 
15752     IF (p_commit = FND_API.G_TRUE) THEN
15753       savepoint MOVE_TASK_VERSIONS_IN_BULK ;
15754     END IF;
15755 
15756     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
15757       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15758     END IF;
15759 
15760     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
15761       FND_MSG_PUB.initialize;
15762     END IF;
15763     IF p_calling_module = 'SELF_SERVICE' THEN
15764 
15765         /*Product Code related validation*/
15766 
15767         /* 4269830 : This is not needed as now we are passing
15768            Destination Project ID from Self Service (TaskLiteVORowImpl.java - moveTasks method)
15769         OPEN cur_proj_id ;
15770         FETCH cur_proj_id into l_cur_project_id;
15771         CLOSE cur_proj_id;
15772          */
15773         l_cur_project_id := p_ref_project_id;
15774 
15775         OPEN get_product_code(l_cur_project_id);
15776         FETCH get_product_code INTO l_pm_product_code;
15777         CLOSE get_product_code;
15778 
15779         If l_pm_product_code IS NOT NULL THEN
15780                 pa_pm_controls.Get_Project_actions_allowed
15781                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
15782                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
15783                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
15784                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
15785                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
15786                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
15787                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
15788                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
15789                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
15790                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
15791                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
15792                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
15793                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
15794                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
15795                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
15796                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
15797                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
15798                  P_ERROR_CODE                 => l_err_code,
15799                  P_ERROR_STACK                    => l_err_stack,
15800                  P_ERROR_STAGE                => l_err_stage );
15801 
15802                  IF l_err_code <> 0 THEN
15803                      PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15804                                  p_msg_name       => l_err_stage);
15805                  END IF;
15806                  IF l_update_parent_task_allowed = 'N' THEN
15807                        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
15808                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
15809                        raise FND_API.G_EXC_ERROR;
15810                  END IF;
15811         End If;
15812 
15813     End If; /* End if calling module is self service*/
15814 
15815     /*4269830 : Performance Enhancements
15816       1)Derive the variables l_shared , l_sharing_code ,l_wp_type,l_fin_type
15817         l_versioned,l_structure_id,l_published_version,l_weighting_basis_Code
15818         ONLY once in the BULK API and pass it as params to the Move Task Version API
15819      */
15820 
15821      l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_ref_project_id);
15822      l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_ref_project_id);
15823 
15824      -- Bug Fix 4764891.
15825      -- The following lines have the structure types usage messed up.
15826      -- Correcting the structure types which are passed to the get_struct_type_for_version.
15827      -- l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
15828      -- l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
15829 
15830      l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
15831      l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
15832 
15833      -- End of Bug Fix 4764891.
15834 
15835      l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_ref_project_id);
15836      l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_ref_project_id);
15837      l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(p_ref_project_id);
15838 
15839      IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
15840          l_task_version_id := p_task_version_id_tbl(1);
15841 
15842          SELECT proj_element_id INTO l_structure_id
15843          FROM pa_proj_element_versions
15844         WHERE element_version_id =  ( Select parent_structure_version_id
15845                                    from pa_proj_element_versions
15846                                   where element_version_id = l_task_version_id )
15847           AND object_type = 'PA_STRUCTURES';
15848         -----------------------------------------------------------
15849         OPEN cur_struc_type( l_structure_id );
15850         FETCH cur_struc_type INTO l_dummy_char;
15851 
15852         IF cur_struc_type%FOUND
15853         THEN
15854              --If structure has any published versions.
15855              l_published_version := 'N';
15856              OPEN cur_pub_versions( l_structure_id, p_ref_project_id );
15857              FETCH cur_pub_versions INTO l_published_version;
15858              CLOSE cur_pub_versions;
15859         END IF;
15860 
15861         CLOSE cur_struc_type;
15862         -----------------------------------------------------------
15863      END IF;  -- End If Atleast one task has been selected for moving
15864 
15865     /*4269830 : End*/
15866 
15867     /*Now retrieve the task version id's passed in the form of array table from the UI
15868     and call the Move Task API (singular version)*/
15869 
15870     ref_task_temp_version_id := p_ref_task_version_id; -- Bug 6628382
15871 
15872 IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
15873     FOR i IN p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
15874                PA_TASK_PUB1.Move_Task_Version(
15875                p_init_msg_list                       => FND_API.G_FALSE,
15876                p_structure_version_id                => p_structure_version_id,
15877                p_task_version_id                     => p_task_version_id_tbl(i),
15878                p_ref_task_version_id                 => ref_task_temp_version_id, --p_ref_task_version_id, -- Bug 6628382
15879                p_peer_or_sub                         => p_peer_or_sub,
15880                p_record_version_number               => p_record_version_number_tbl(i),
15881                /*======================================================================
15882                4269830 : New params introduced for Perf Enhancement: Start
15883                 *=====================================================================*/
15884                p_ref_project_id                      => p_ref_project_id,
15885 	       p_structure_id			     => l_structure_id,
15886 	       p_published_version		     => l_published_version,
15887 	       p_shared 			     => l_shared ,
15888 	       p_sharing_code 			     => l_sharing_code,
15889 	       p_versioned			     => l_versioned,
15890                p_wp_type			     => l_wp_type,
15891 	       p_fin_type			     => l_fin_type,
15892 	       p_weighting_basis_code	             => l_weighting_basis_code,
15893 	       p_check_third_party_flag              => l_check_third_party_flag,
15894                /*======================================================================
15895                4269830 : New params introduced for Perf Enhancement : End
15896                *======================================================================*/
15897                p_called_from_bulk_api                => 'Y',
15898                x_return_status                       => x_return_status,
15899                x_msg_count                           => x_msg_count,
15900                x_msg_data                            => x_msg_data
15901                );
15902                IF x_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
15903                    RAISE FND_API.G_EXC_ERROR ;
15904                END IF;
15905                ref_task_temp_version_id := p_task_version_id_tbl(i);   -- Bug 6628382
15906     END LOOP;
15907 
15908  END IF;
15909 
15910     IF (p_commit = FND_API.G_TRUE) THEN
15911       COMMIT;
15912     END IF;
15913 
15914 EXCEPTION
15915     when FND_API.G_EXC_ERROR then
15916       if p_commit = FND_API.G_TRUE then
15917          rollback to MOVE_TASK_VERSIONS_IN_BULK;
15918       end if;
15919       x_return_status := FND_API.G_RET_STS_ERROR;
15920       x_msg_count  := Fnd_Msg_Pub.count_msg;
15921 
15922       IF x_msg_count = 1 AND x_msg_data IS NULL
15923       THEN
15924           Pa_Interface_Utils_Pub.get_messages
15925               ( p_encoded        => Fnd_Api.G_FALSE
15926               , p_msg_index      => 1
15927               , p_msg_count      => l_msg_count
15928               , p_msg_data       => l_msg_data
15929               , p_data           => l_data
15930               , p_msg_index_out  => l_msg_index_out);
15931           x_msg_data := l_data;
15932       END IF;
15933 
15934     when FND_API.G_EXC_UNEXPECTED_ERROR then
15935       if p_commit = FND_API.G_TRUE then
15936          rollback to MOVE_TASK_VERSIONS_IN_BULK;
15937       end if;
15938       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15939       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15940                               p_procedure_name => 'MOVE_TASK_VERSIONS_IN_BULK',
15941                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15942     when OTHERS then
15943       if p_commit = FND_API.G_TRUE then
15944          rollback to MOVE_TASK_VERSIONS_IN_BULK;
15945       end if;
15946       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15947       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
15948                               p_procedure_name => 'MOVE_TASK_VERSIONS_IN_BULK',
15949                               p_error_text     => SUBSTRB(SQLERRM,1,240));
15950       raise;
15951 END MOVE_TASK_VERSIONS_IN_BULK ;
15952 
15953 -- 4218932 Added below update api for update task page for  bulk approach
15954 
15955 PROCEDURE Update_Task_All_Info(
15956  p_api_version                      IN      NUMBER      :=1.0,
15957  p_init_msg_list                    IN      VARCHAR2    :=FND_API.G_TRUE,
15958  p_commit                           IN      VARCHAR2    :=FND_API.G_FALSE,
15959  p_validate_only                    IN      VARCHAR2    :=FND_API.G_TRUE,
15960  p_validation_level                 IN      NUMBER      :=FND_API.G_VALID_LEVEL_FULL,
15961  p_calling_module                   IN      VARCHAR2    :='SELF_SERVICE',
15962  p_debug_mode                       IN      VARCHAR2    :='N',
15963  p_max_msg_count                    IN      NUMBER      :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
15964  p_task_id_tbl                      IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15965  --Begin:5867373:p_task_number_tbl's data-type has been changed to varchar2(100)
15966  p_task_number_tbl                  IN      SYSTEM.PA_VARCHAR2_100_TBL_TYPE  := SYSTEM.PA_VARCHAR2_100_TBL_TYPE(),
15967  --End:5867373:
15968  p_task_name_tbl                    IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15969  p_task_description_tbl             IN      SYSTEM.PA_VARCHAR2_2000_TBL_TYPE  := SYSTEM.PA_VARCHAR2_2000_TBL_TYPE(),
15970  p_task_manager_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15971  p_task_manager_name_tbl            IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15972  p_carrying_out_org_id_tbl          IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15973  p_carrying_out_org_name_tbl        IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15974  p_priority_code_tbl                IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15975  p_TYPE_ID_tbl                      IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15976  p_status_code_tbl                  IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15977  p_inc_proj_progress_flag_tbl       IN      SYSTEM.PA_VARCHAR2_240_TBL_TYPE := SYSTEM.PA_VARCHAR2_240_TBL_TYPE(),
15978  p_transaction_start_date_tbl       IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15979  p_transaction_finish_date_tbl      IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15980  p_work_type_id_tbl                 IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15981  p_service_type_code_tbl            IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15982  p_work_item_code_tbl               IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15983  p_uom_code_tbl                     IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15984  p_record_version_number_tbl        IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15985  -- Update_Schedule_Version
15986  p_scheduled_start_date_tbl         IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15987  p_scheduled_end_date_tbl           IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15988  p_pev_schedule_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15989  p_milestone_flag_tbl               IN      SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE(),
15990  p_critical_flag_tbl                IN      SYSTEM.PA_VARCHAR2_1_TBL_TYPE := SYSTEM. PA_VARCHAR2_1_TBL_TYPE(),
15991  p_WQ_PLANNED_QUANTITY_tbl          IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15992  p_early_start_date_tbl             IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15993  p_early_end_date_tbl               IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15994  p_late_start_date_tbl              IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15995  p_late_end_date_tbl                IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15996  p_constraint_type_code_tbl         IN      SYSTEM.PA_VARCHAR2_30_TBL_TYPE  := SYSTEM.PA_VARCHAR2_30_TBL_TYPE(),
15997  p_constraint_date_tbl              IN      SYSTEM.PA_DATE_TBL_TYPE := SYSTEM.PA_DATE_TBL_TYPE(),
15998  p_sch_rec_ver_num_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
15999  -- update_task_det_sch_info
16000  p_task_version_id_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16001  p_percent_complete_tbl             IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16002  p_ETC_effort_tbl                   IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16003  p_structure_version_id_tbl         IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16004  p_project_id_tbl                   IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16005  p_planned_effort_tbl               IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16006  p_actual_effort_tbl                IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16007  -- Update_Task_Weighting
16008  p_object_relationship_id_tbl       IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16009  p_weighting_percentage_tbl         IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16010  p_obj_rec_ver_num_tbl              IN      SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
16011  p_task_weight_method               IN      VARCHAR2,
16012  -- common
16013  x_return_status                    OUT     NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
16014  x_msg_count                        OUT     NOCOPY NUMBER, --File.Sql.39 bug 4440895
16015  x_msg_data                         OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16016 ) IS
16017 
16018    l_api_name                      CONSTANT VARCHAR(30) := 'Update_Task_All_Info';
16019    l_api_version                   CONSTANT NUMBER      := 1.0;
16020 
16021    l_return_status                 VARCHAR2(1);
16022    l_msg_count                     NUMBER;
16023    l_msg_data                      VARCHAR2(250);
16024    l_data                          VARCHAR2(250);
16025    l_msg_index_out                 NUMBER;
16026 
16027 -- Start of addition for --bug 8301015
16028 l_project_id NUMBER;
16029 l_parent_task_id NUMBER;
16030 l_tstart_date DATE;
16031 l_tend_date DATE;
16032 l_tcnt NUMBER;
16033 
16034 TYPE TASK_DATES_REC_TYPE IS RECORD (
16035 TASK_ID	                  NUMBER          := NULL,
16036 PROJECT_ID                 NUMBER          := NULL,
16037 PARENT_TASK_ID                  NUMBER          := NULL,
16038 OLD_START_DATE                  DATE            := NULL,
16039 OLD_END_DATE                    DATE            := NULL,
16040 NEW_START_DATE                  DATE            := NULL,
16041 NEW_END_DATE                    DATE            := NULL
16042 );
16043 
16044 TYPE TASK_DATES_TBL_TYPE IS TABLE OF TASK_DATES_REC_TYPE
16045 INDEX BY BINARY_INTEGER;
16046 
16047 l_task_dates TASK_DATES_TBL_TYPE;
16048 -- End of addition for --bug 8301015
16049 
16050 BEGIN
16051     pa_debug.init_err_stack ('PA_TASK_PUB1.Update_Task_All_Info');
16052 
16053     IF (p_debug_mode = 'Y') THEN
16054       pa_debug.debug('PA_TASK_PUB1.Update_Task_All_Info begin');
16055     END IF;
16056 
16057     IF (p_commit = FND_API.G_TRUE) THEN
16058       savepoint update_Task_all_info;
16059     END IF;
16060 
16061     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16062       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16063     END IF;
16064 
16065     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
16066       FND_MSG_PUB.initialize;
16067     END IF;
16068 
16069     x_return_status := FND_API.G_RET_STS_SUCCESS;
16070 
16071     IF nvl(p_task_id_tbl.last,0) >= 1 THEN
16072     l_tcnt := 0; -- added for --bug 8301015
16073 
16074         FOR i in p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
16075 -- Changes for --bug 8301015
16076 IF ('Y' = PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(p_task_id_tbl(i))) THEN
16077 
16078  SELECT pt.project_id,
16079  pt.parent_task_id,
16080 	        pt.start_date,
16081 	        pt.completion_date
16082          INTO   l_project_id,
16083 	        l_parent_task_id,
16084 	        l_tstart_date,
16085 	        l_tend_date
16086          FROM pa_tasks pt
16087          WHERE pt.task_id = p_task_id_tbl(i);
16088 
16089          IF ((nvl(p_transaction_start_date_tbl(i),sysdate) <> nvl(l_tstart_date,sysdate))
16090 	     OR (nvl(p_transaction_finish_date_tbl(i),sysdate) <> nvl(l_tend_date,sysdate))) THEN
16091 
16092            l_tcnt := l_tcnt + 1;
16093 
16094            l_task_dates(l_tcnt).task_id := p_task_id_tbl(i);
16095 	   l_task_dates(l_tcnt).project_id := l_project_id;
16096            l_task_dates(l_tcnt).parent_task_id := l_parent_task_id;
16097            l_task_dates(l_tcnt).old_start_date := l_tstart_date;
16098            l_task_dates(l_tcnt).old_end_date := l_tend_date;
16099            l_task_dates(l_tcnt).new_start_date := p_transaction_start_date_tbl(i);
16100            l_task_dates(l_tcnt).new_end_date := p_transaction_finish_date_tbl(i);
16101 
16102 End IF;
16103 
16104 End IF;
16105 -- Changes for --bug 8301015
16106 
16107             PA_TASK_PUB1.Update_Task
16108             (
16109                   p_task_id                              => p_task_id_tbl(i)
16110                  ,p_task_number                          => p_task_number_tbl(i)
16111                  ,p_task_name                            => p_task_name_tbl(i)
16112                  ,p_task_manager_id                      => p_task_manager_id_tbl(i)
16113                  ,p_task_manager_name                    => p_task_manager_name_tbl(i)
16114                  ,p_record_version_number                => p_record_version_number_tbl(i)
16115                  ,P_TASK_DESCRIPTION                     => P_TASK_DESCRIPTION_tbl(i)
16116                  ,P_CARRYING_OUT_ORG_NAME                => P_CARRYING_OUT_ORG_NAME_tbl(i)
16117                  ,P_PRIORITY_CODE                        => P_PRIORITY_CODE_tbl(i)
16118                  ,P_STATUS_CODE                          => P_STATUS_CODE_tbl(i)
16119                  ,P_INC_PROJ_PROGRESS_FLAG               => P_INC_PROJ_PROGRESS_FLAG_tbl(i)
16120                  ,p_transaction_start_date               => p_transaction_start_date_tbl(i)
16121                  ,p_transaction_finish_date              => p_transaction_finish_date_tbl(i)
16122                  ,p_service_type_code                    => p_service_type_code_tbl(i)
16123                  ,p_work_type_id                         => p_work_type_id_tbl(i)
16124                  ,p_work_item_code                       => p_work_item_code_tbl(i)
16125                  ,p_uom_code                             => p_uom_code_tbl(i)
16126                  ,p_type_id                              => p_type_id_tbl(i)
16127                  ,p_carrying_out_org_id                  => p_carrying_out_org_id_tbl(i)
16128                  ,p_dates_check            => 'N'   --bug 8301015
16129                  ,x_return_status                        => l_return_status
16130                  ,x_msg_count                            => l_msg_count
16131                  ,x_msg_data                             => l_msg_data
16132             );
16133 
16134             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16135                 x_msg_count := FND_MSG_PUB.count_msg;
16136                 IF x_msg_count = 1 then
16137                     pa_interface_utils_pub.get_messages
16138                     (
16139                         p_encoded        => FND_API.G_FALSE,  /*Bug#9045404*/
16140                         p_msg_index      => 1,
16141                         p_msg_count      => l_msg_count,
16142                         p_msg_data       => l_msg_data,
16143                         p_data           => l_data,
16144                         p_msg_index_out  => l_msg_index_out
16145                     );
16146                     x_msg_data := l_data;
16147                 END IF;
16148               raise FND_API.G_EXC_ERROR;
16149             END IF;
16150 
16151             PA_TASK_PUB1.Update_Schedule_Version
16152             (
16153                   p_scheduled_start_date                => p_scheduled_start_date_tbl(i)
16154                  ,p_scheduled_end_date                  => p_scheduled_end_date_tbl(i)
16155                  ,p_record_version_number               => p_sch_rec_ver_num_tbl(i)
16156                  ,p_pev_schedule_id                     => p_pev_schedule_id_tbl(i)
16157                  ,P_MILESTONE_FLAG                      => P_MILESTONE_FLAG_tbl(i)
16158                  ,P_CRITICAL_FLAG                       => P_CRITICAL_FLAG_tbl(i)
16159                  ,p_WQ_PLANNED_QUANTITY                 => p_WQ_PLANNED_QUANTITY_tbl(i)
16160                  ,p_early_start_date                    => p_early_start_date_tbl(i)
16161                  ,p_early_end_date                      => p_early_end_date_tbl(i)
16162                  ,p_late_start_date                     => p_late_start_date_tbl(i)
16163                  ,p_late_end_date                       => p_late_end_date_tbl(i)
16164                  ,p_constraint_date                     => p_constraint_date_tbl(i)
16165                  ,p_constraint_type_code                => p_constraint_type_code_tbl(i)
16166                  ,x_return_status                       => l_return_status
16167                  ,x_msg_count                           => l_msg_count
16168                  ,x_msg_data                            => l_msg_data
16169             );
16170 
16171             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16172                 x_msg_count := FND_MSG_PUB.count_msg;
16173                 IF x_msg_count = 1 then
16174                     pa_interface_utils_pub.get_messages
16175                     (
16176                         p_encoded        => FND_API.G_TRUE,
16177                         p_msg_index      => 1,
16178                         p_msg_count      => l_msg_count,
16179                         p_msg_data       => l_msg_data,
16180                         p_data           => l_data,
16181                         p_msg_index_out  => l_msg_index_out
16182                     );
16183                     x_msg_data := l_data;
16184                 END IF;
16185               raise FND_API.G_EXC_ERROR;
16186             END IF;
16187 
16188             PA_TASK_PUB1.update_task_det_sch_info
16189             (
16190                   p_task_ver_id                         => p_task_version_id_tbl(i)
16191                  ,p_percent_complete                    => p_percent_complete_tbl(i)
16192                  ,p_ETC_effort                          => p_ETC_effort_tbl(i)
16193                  ,p_structure_version_id                => p_structure_version_id_tbl(i)
16194                  ,p_project_id                          => p_project_id_tbl(i)
16195                  ,p_planned_effort                      => p_planned_effort_tbl(i)
16196                  ,p_actual_effort                       => p_actual_effort_tbl(i)
16197                  ,x_return_status                       => l_return_status
16198                  ,x_msg_count                           => l_msg_count
16199                  ,x_msg_data                            => l_msg_data
16200             );
16201 
16202             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16203                 x_msg_count := FND_MSG_PUB.count_msg;
16204                 IF x_msg_count = 1 then
16205                     pa_interface_utils_pub.get_messages
16206                     (
16207                         p_encoded        => FND_API.G_TRUE,
16208                         p_msg_index      => 1,
16209                         p_msg_count      => l_msg_count,
16210                         p_msg_data       => l_msg_data,
16211                         p_data           => l_data,
16212                         p_msg_index_out  => l_msg_index_out
16213                     );
16214                     x_msg_data := l_data;
16215                 END IF;
16216               raise FND_API.G_EXC_ERROR;
16217             END IF;
16218 
16219             IF p_task_weight_method = 'MANUAL' THEN
16220 
16221                 PA_TASK_PUB1.Update_Task_Weighting
16222                 (
16223                       p_object_relationship_id              => p_object_relationship_id_tbl(i)
16224                      ,p_weighting_percentage                => p_weighting_percentage_tbl(i)
16225                      ,p_record_version_number               => p_obj_rec_ver_num_tbl(i)
16226                      ,x_return_status                       => l_return_status
16227                      ,x_msg_count                           => l_msg_count
16228                      ,x_msg_data                            => l_msg_data
16229                 );
16230 
16231                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16232                     x_msg_count := FND_MSG_PUB.count_msg;
16233                     IF x_msg_count = 1 then
16234                         pa_interface_utils_pub.get_messages
16235                         (
16236                             p_encoded        => FND_API.G_TRUE,
16237                             p_msg_index      => 1,
16238                             p_msg_count      => l_msg_count,
16239                             p_msg_data       => l_msg_data,
16240                             p_data           => l_data,
16241                             p_msg_index_out  => l_msg_index_out
16242                         );
16243                         x_msg_data := l_data;
16244                     END IF;
16245                   raise FND_API.G_EXC_ERROR;
16246                 END IF;
16247             END IF;
16248 
16249         END LOOP;
16250 
16251 /* Start of changes for--bug 8301015 */
16252 
16253    -- Validate transaction dates
16254 
16255    IF l_task_dates.COUNT <> 0 THEN
16256 
16257      l_tcnt := l_task_dates.First;
16258 
16259      LOOP
16260 
16261 	IF (nvl(l_task_dates(l_tcnt).old_start_date,sysdate) <>
16262 	    nvl(l_task_dates(l_tcnt).new_start_date,sysdate)) THEN
16263 
16264            PA_TASKS_MAINT_UTILS.Check_Start_Date(
16265              p_project_id => l_task_dates(l_tcnt).project_id,
16266              p_parent_task_id => l_task_dates(l_tcnt).parent_task_id,
16267              p_task_id => NULL,
16268              p_start_date => l_task_dates(l_tcnt).new_start_date,
16269              x_return_status => l_return_status,
16270              x_msg_count => l_msg_count,
16271              x_msg_data => l_msg_data);
16272 
16273 	   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16274              PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
16275 	   END IF;
16276 
16277 	END IF;
16278 
16279         IF (nvl(l_task_dates(l_tcnt).old_end_date,sysdate) <>
16280 	    nvl(l_task_dates(l_tcnt).new_end_date,sysdate)) THEN
16281            PA_TASKS_MAINT_UTILS.Check_End_Date(
16282              p_project_id => l_task_dates(l_tcnt).project_id,
16283              p_parent_task_id => l_task_dates(l_tcnt).parent_task_id,
16284              p_task_id => l_task_dates(l_tcnt).task_id,
16285 	     p_end_date => l_task_dates(l_tcnt).new_end_date,
16286              x_return_status => l_return_status,
16287              x_msg_count => l_msg_count,
16288              x_msg_data => l_msg_data);
16289 
16290 	   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
16291              PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
16292            END IF;
16293 
16294         END IF;
16295 
16296         l_msg_count := FND_MSG_PUB.count_msg;
16297         IF (l_msg_count > 0) THEN
16298           x_msg_count := l_msg_count;
16299           IF (x_msg_count = 1) THEN
16300             pa_interface_utils_pub.get_messages(
16301               p_encoded => FND_API.G_TRUE,
16302               p_msg_index => 1,
16303               p_data => l_data,
16304               p_msg_index_out => l_msg_index_out);
16305            x_msg_data := l_data;
16306           END IF;
16307           RAISE FND_API.G_EXC_ERROR;
16308         END IF;
16309 
16310        EXIT when l_tcnt = l_task_dates.Last;
16311        l_tcnt := l_task_dates.NEXT(l_tcnt);
16312 
16313      END LOOP;
16314 
16315    END IF;
16316 
16317 /* End of changes for --bug 8301015 */
16318 
16319     END IF;
16320 
16321     IF (p_commit = FND_API.G_TRUE) THEN
16322       COMMIT;
16323     END IF;
16324 
16325     IF (p_debug_mode = 'Y') THEN
16326       pa_debug.debug('PA_TASK_PUB1.Update_Task_All_Info END');
16327     END IF;
16328 
16329  EXCEPTION
16330     when FND_API.G_EXC_ERROR then
16331       if p_commit = FND_API.G_TRUE then
16332          rollback to update_Task_all_info;
16333       end if;
16334       x_return_status := FND_API.G_RET_STS_ERROR;
16335     when FND_API.G_EXC_UNEXPECTED_ERROR then
16336       if p_commit = FND_API.G_TRUE then
16337          rollback to update_Task_all_info;
16338       end if;
16339       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16340       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16341                               p_procedure_name => 'Update_Task_All_Info',
16342                               p_error_text     => SUBSTRB(SQLERRM,1,240));
16343     when OTHERS then
16344       if p_commit = FND_API.G_TRUE then
16345          rollback to update_Task_all_info;
16346       end if;
16347       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16348       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16349                               p_procedure_name => 'Update_Task_All_Info',
16350                               p_error_text     => SUBSTRB(SQLERRM,1,240));
16351       raise;
16352 
16353 END Update_Task_All_Info;
16354 
16355 -- 4429929 : Added  CANCEL_TASK
16356 PROCEDURE CANCEL_TASK(
16357   p_calling_module		IN      VARCHAR2        :='SELF_SERVICE'
16358  ,p_api_version                 IN      NUMBER          :=1.0
16359  ,p_init_msg_list               IN      VARCHAR2        :=FND_API.G_TRUE
16360  ,p_validate_only               IN      VARCHAR2        :=FND_API.G_FALSE
16361  ,p_validation_level            IN      NUMBER          :=FND_API.G_VALID_LEVEL_FULL
16362  ,p_calling_mode		IN      VARCHAR2        :=null
16363  ,p_task_id			IN	NUMBER
16364  ,p_task_version_id		IN	NUMBER
16365  ,p_project_id			IN	NUMBER
16366  ,p_cancel_status_code		IN	VARCHAR2
16367  ,x_return_status		OUT	NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16368  ,x_msg_count			OUT	NOCOPY NUMBER --File.Sql.39 bug 4440895
16369  ,x_msg_data			OUT	NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
16370 )
16371 IS
16372 l_debug_mode		VARCHAR2(1);
16373 l_module_name		VARCHAR2(100):= 'PA_TASK_PUB1.CANCEL_TASK';
16374 l_error_message_code	VARCHAR2(32);
16375 
16376 -- 4533534  : Included join of pa_proj_elem_ver_structure too
16377 CURSOR c_get_all_task_versions(c_task_id NUMBER, c_project_id NUMBER) IS
16378 SELECT ver.element_version_id, str.status_code
16379 FROM pa_proj_element_versions ver
16380 , pa_proj_elem_ver_structure str
16381 WHERE ver.project_id = c_project_id
16382 AND ver.proj_element_id = c_task_id
16383 AND ver.project_id = str.project_id
16384 and ver.parent_structure_version_id = str.element_version_id
16385 ;
16386 
16387 -- 4533534  : Commnted this cusror and written new simplified cusror
16388 /*
16389 CURSOR c_get_links(c_task_version_id NUMBER, c_project_id NUMBER) IS
16390 SELECT
16391   ppv2.project_id                     sub_project_id
16392  ,ppv2.element_version_id             sub_structure_ver_id
16393  ,ppv1.project_id                     parent_project_id
16394  ,ppv1.parent_structure_version_id    parent_structure_ver_id
16395  ,ppv1.element_version_id             parent_task_version_id
16396  ,ppv1.wbs_number		      parent_wbs_number
16397  ,por1.object_id_from1                link_task_ver_id
16398  ,por1.object_relationship_id         object_relationship_id
16399  ,por1.record_version_number	      record_version_number
16400  ,ppv1.task_unpub_ver_status_code     task_unpub_ver_status_code
16401 FROM
16402      pa_proj_element_versions ppv1 -- linking task
16403     ,pa_proj_element_versions ppv2 -- linked project
16404     ,pa_object_relationships por1
16405     ,pa_object_relationships por2
16406     ,(SELECT object_id_from1, object_id_to1
16407        FROM pa_object_relationships
16408        START WITH object_id_from1 = c_task_version_id
16409        and relationship_type = 'S'
16410        CONNECT BY object_id_from1 = PRIOR  object_id_to1
16411        and relationship_type = 'S'
16412        UNION
16413        SELECT to_number(null) object_id_from1, c_task_version_id object_id_to1
16414        FROM DUAL
16415        ) pobj
16416 WHERE
16417      ppv2.element_version_id = por1.object_id_to1
16418  AND por1.object_id_from1 = por2.object_id_to1
16419  AND por2.object_id_from1 = ppv1.element_version_id
16420  AND ppv1.element_version_id = pobj.object_id_to1
16421  AND ppv2.object_type = 'PA_STRUCTURES'
16422  AND por1.relationship_type in ( 'LW', 'LF' )
16423  AND ppv1.project_id=c_project_id
16424  ;
16425 */
16426 CURSOR c_get_links(c_task_version_id NUMBER) IS
16427  SELECT
16428   ppv.project_id                     sub_project_id
16429  ,ppv.element_version_id             sub_structure_ver_id
16430  ,por.object_id_from1                link_task_ver_id
16431  ,por.object_relationship_id         object_relationship_id
16432  ,por.record_version_number	     record_version_number
16433  ,por.relationship_type              relationship_type
16434 FROM
16435     pa_proj_element_versions ppv -- linked project
16436     ,pa_object_relationships por
16437     ,(SELECT object_id_from1, object_id_to1  -- Get all sub tasks including linking tasks
16438        FROM pa_object_relationships
16439        START WITH object_id_from1 = c_task_version_id
16440        and relationship_type = 'S'
16441        CONNECT BY object_id_from1 = PRIOR  object_id_to1
16442        and relationship_type = 'S'
16443        ) pobj
16444 WHERE
16445 pobj.object_id_to1 = por.object_id_from1
16446 AND por.relationship_type = 'LW' -- 4533534 : It shd be LW only otherwsie it will give error PA_NO_RECORD_VERSION_NUMBER
16447 AND por.object_id_to1 = ppv.element_version_id
16448 AND ppv.object_type = 'PA_STRUCTURES'
16449  ;
16450 
16451  l_version_enabled	VARCHAR2(1);
16452 
16453 BEGIN
16454 	x_return_status := FND_API.G_RET_STS_SUCCESS;
16455 	l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
16456 	SAVEPOINT CANCEL_TASK_SP;
16457 
16458 	IF l_debug_mode = 'Y' THEN
16459 		pa_debug.write(l_module_name,'Cancel Task Passed Parameters', 3);
16460 		pa_debug.write(l_module_name,'p_task_id='||p_task_id, 3);
16461 		pa_debug.write(l_module_name,'p_task_version_id='||p_task_version_id, 3);
16462 		pa_debug.write(l_module_name,'p_project_id='||p_project_id, 3);
16463 		pa_debug.write(l_module_name,'p_cancel_status_code='||p_cancel_status_code, 3);
16464 	END IF;
16465 
16466 	IF p_init_msg_list = 'T' THEN
16467 		FND_MSG_PUB.initialize;
16468 	END IF;
16469 
16470 	IF l_debug_mode = 'Y' THEN
16471 		pa_debug.write(l_module_name,'Calling Check_chg_stat_cancel_ok', 3);
16472 	END IF;
16473 
16474 	PA_PROJ_ELEMENTS_UTILS.Check_chg_stat_cancel_ok
16475 		(
16476 		 p_task_id             => p_task_id
16477 		,p_task_version_id     => p_task_version_id
16478 		,p_new_task_status     => p_cancel_status_code
16479 		,x_return_status       => x_return_status
16480 		,x_error_message_code  => l_error_message_code
16481              );
16482 
16483 	IF l_debug_mode = 'Y' THEN
16484 		pa_debug.write(l_module_name,'After Call Check_chg_stat_cancel_ok x_return_status='||x_return_status, 3);
16485 	END IF;
16486 
16487 	IF (x_return_status <> 'S') THEN
16488 		PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16489 			p_msg_name => l_error_message_code);
16490                 raise FND_API.G_EXC_ERROR;
16491 	END IF;
16492 	IF l_debug_mode = 'Y' THEN
16493 		pa_debug.write(l_module_name,'Calling set_new_tasks_to_TBD', 3);
16494 	END IF;
16495 
16496 	PA_TASK_PVT1.set_new_tasks_to_tbd(
16497                 p_project_id               => p_project_id
16498                ,p_task_id                  => p_task_id
16499                ,p_task_status              => p_cancel_status_code
16500                ,x_return_status            => x_return_status
16501                ,x_msg_count                => x_msg_count
16502                ,x_msg_data                 => x_msg_data);
16503 
16504 	IF l_debug_mode = 'Y' THEN
16505 		pa_debug.write(l_module_name,'After Call set_new_tasks_to_TBD x_return_status='||x_return_status, 3);
16506 	END IF;
16507 
16508 	IF (x_return_status <> 'S') THEN
16509                 raise FND_API.G_EXC_ERROR;
16510 	END IF;
16511 
16512 	IF l_debug_mode = 'Y' THEN
16513 		pa_debug.write(l_module_name,'Calling push_down_task_status', 3);
16514 	END IF;
16515 
16516 	PA_PROGRESS_PUB.push_down_task_status(
16517 		p_calling_module		=> p_calling_module
16518 		,p_task_status			=> p_cancel_status_code
16519 		,p_project_id			=> p_project_id
16520 		,p_object_id			=> p_task_id
16521 		,p_object_version_id		=> p_task_version_id
16522 		,p_object_type			=> 'PA_TASKS'
16523 		,x_return_status		=> x_return_status
16524 		,x_msg_count			=> x_msg_count
16525 		,x_msg_data			=> x_msg_data
16526 		);
16527 	IF l_debug_mode = 'Y' THEN
16528 		pa_debug.write(l_module_name,'After Call push_down_task_status x_return_status='||x_return_status, 3);
16529 	END IF;
16530 
16531 	IF (x_return_status <> 'S') THEN
16532                 raise FND_API.G_EXC_ERROR;
16533 	END IF;
16534 
16535 	l_version_enabled := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id);
16536 
16537 	IF l_debug_mode = 'Y' THEN
16538 		pa_debug.write(l_module_name,'Call Delete_SubProject_Association l_version_enabled='||l_version_enabled, 3);
16539 	END IF;
16540 
16541 	FOR l_all_tasks IN c_get_all_task_versions(p_task_id, p_project_id) LOOP
16542 		IF l_debug_mode = 'Y' THEN
16543 			pa_debug.write(l_module_name,'l_all_tasks.element_version_id='||l_all_tasks.element_version_id, 3);
16544 			pa_debug.write(l_module_name,'l_all_tasks.status_code='||l_all_tasks.status_code, 3);
16545 		END IF;
16546 		--4533534
16547 		IF ((l_version_enabled = 'N') OR (l_version_enabled = 'Y' AND l_all_tasks.status_code = 'STRUCTURE_WORKING'))
16548 		THEN
16549 			--4533534
16550 			--FOR l_all_links IN c_get_links(l_all_tasks.element_version_id, p_project_id) LOOP
16551 			FOR l_all_links IN c_get_links(l_all_tasks.element_version_id) LOOP
16552 				IF l_debug_mode = 'Y' THEN
16553 					pa_debug.write(l_module_name,'l_all_links.sub_project_id='||l_all_links.sub_project_id, 3);
16554 					pa_debug.write(l_module_name,'l_all_links.sub_structure_ver_id='||l_all_links.sub_structure_ver_id, 3);
16555 					--pa_debug.write(l_module_name,'l_all_links.parent_project_id='||l_all_links.parent_project_id, 3);
16556 					--pa_debug.write(l_module_name,'l_all_links.parent_structure_ver_id='||l_all_links.parent_structure_ver_id, 3);
16557 					--pa_debug.write(l_module_name,'l_all_links.parent_task_version_id='||l_all_links.parent_task_version_id, 3);
16558 					--pa_debug.write(l_module_name,'l_all_links.parent_wbs_number='||l_all_links.parent_wbs_number, 3);
16559 					pa_debug.write(l_module_name,'l_all_links.link_task_ver_id='||l_all_links.link_task_ver_id, 3);
16560 					pa_debug.write(l_module_name,'l_all_links.object_relationship_id='||l_all_links.object_relationship_id, 3);
16561 					pa_debug.write(l_module_name,'l_all_links.record_version_number='||l_all_links.record_version_number, 3);
16562 					--pa_debug.write(l_module_name,'l_all_links.task_unpub_ver_status_code='||l_all_links.task_unpub_ver_status_code, 3);
16563 					pa_debug.write(l_module_name,'l_all_links.relationship_type='||l_all_links.relationship_type, 3);
16564 				END IF;
16565 				--4533534
16566 				--IF ((l_version_enabled = 'N') OR (l_version_enabled = 'Y' AND NVL(l_all_links.task_unpub_ver_status_code,'WORKING') <> 'PUBLISHED'))
16567 
16568 				PA_RELATIONSHIP_PUB.Delete_SubProject_Association
16569 						( p_init_msg_list		=> FND_API.G_FALSE,
16570 						p_calling_module		=> p_calling_module,
16571 						p_object_relationships_id	=> l_all_links.object_relationship_id,
16572 						p_record_version_number		=> l_all_links.record_version_number,
16573 						x_return_status			=> x_return_status,
16574 						x_msg_count			=> x_msg_count,
16575 						x_msg_data			=> x_msg_data
16576 						);
16577 				IF l_debug_mode = 'Y' THEN
16578 					pa_debug.write(l_module_name,'After Call Delete_SubProject_Association x_return_status='||x_return_status, 3);
16579 				END IF;
16580 
16581 				IF (x_return_status <> 'S') THEN
16582 					raise FND_API.G_EXC_ERROR;
16583 				END IF;
16584 			END LOOP;
16585 		END IF;
16586 	END LOOP;
16587 EXCEPTION
16588     when FND_API.G_EXC_ERROR then
16589       x_return_status := FND_API.G_RET_STS_ERROR;
16590       x_msg_count := fnd_msg_pub.count_msg;
16591       ROLLBACK to CANCEL_TASK_SP;
16592     when FND_API.G_EXC_UNEXPECTED_ERROR then
16593       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16594       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16595                               p_procedure_name => 'CANCEL_TASK',
16596                               p_error_text     => SUBSTRB(SQLERRM,1,240));
16597       x_msg_count := fnd_msg_pub.count_msg;
16598       ROLLBACK to CANCEL_TASK_SP;
16599     when OTHERS then
16600       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16601       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16602                               p_procedure_name => 'CANCEL_TASK',
16603                               p_error_text     => SUBSTRB(SQLERRM,1,240));
16604       x_msg_count := fnd_msg_pub.count_msg;
16605       ROLLBACK to CANCEL_TASK_SP;
16606       raise;
16607 END CANCEL_TASK;
16608 
16609 -- Bug Fix 5593736.
16610 
16611 PROCEDURE INDENT_MULTI_TASK_VERSION
16612 (p_api_version                  IN      NUMBER          := 1.0
16613 ,p_init_msg_list                IN      VARCHAR2        := FND_API.G_TRUE
16614 ,p_commit                       IN      VARCHAR2        := FND_API.G_FALSE
16615 ,p_validate_only                IN      VARCHAR2        := FND_API.G_TRUE
16616 ,p_validation_level             IN      NUMBER          := FND_API.G_VALID_LEVEL_FULL
16617 ,p_calling_module               IN      VARCHAR2        := 'SELF_SERVICE'
16618 ,p_debug_mode                   IN      VARCHAR2        := 'N'
16619 ,p_max_msg_count                IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16620 ,p_project_id                   IN      NUMBER
16621 ,p_structure_version_id         IN      NUMBER
16622 ,p_structure_type               IN      VARCHAR2        :='WORKPLAN'
16623 ,p_task_version_id_tbl          IN      SYSTEM.PA_NUM_TBL_TYPE
16624 ,p_record_version_number_tbl    IN      SYSTEM.PA_NUM_TBL_TYPE
16625 ,p_display_sequence_tbl         IN      SYSTEM.PA_NUM_TBL_TYPE
16626 ,x_return_status                OUT     NOCOPY VARCHAR2
16627 ,x_msg_count                    OUT     NOCOPY NUMBER
16628 ,x_msg_data                     OUT     NOCOPY VARCHAR2)
16629 IS
16630 
16631 l_api_name            	CONSTANT VARCHAR(30) := 'INDENT_MULTI_TASK_VERSION';
16632 l_api_version         	CONSTANT NUMBER      := 1.0;
16633 l_return_status       	VARCHAR2(1);
16634 l_msg_count           	NUMBER;
16635 l_msg_data            	VARCHAR2(250);
16636 l_data              	VARCHAR2(250);
16637 l_msg_index_out       	NUMBER;
16638 
16639 h 		  	NUMBER := 0;
16640 i 		  	NUMBER := 0;
16641 j 			NUMBER := 0;
16642 k 			NUMBER := 0;
16643 l			NUMBER := 0;
16644 m			NUMBER := 0;
16645 l_count 		NUMBER := 0;
16646 l_error_count 		NUMBER := 0;
16647 l_msg_code		VARCHAR2(30) := null;
16648 
16649 TYPE l_task_in_rec_type IS RECORD
16650 (task_version_id        NUMBER      := null
16651 ,record_version_number  NUMBER      := null
16652 ,display_sequence       NUMBER      := null);
16653 
16654 l_current l_task_in_rec_type;
16655 
16656 TYPE l_task_in_tbl_type IS TABLE OF l_task_in_rec_type INDEX BY BINARY_INTEGER;
16657 
16658 l_task_in_tbl l_task_in_tbl_type;
16659 
16660 TYPE l_task_error_rec_type IS RECORD
16661 (task_name           	VARCHAR2(300)   := null
16662 ,task_number     	VARCHAR2(300)   := null
16663 ,error_msg         	VARCHAR2(2000)  := null);
16664 
16665 TYPE l_task_error_tbl_type IS TABLE OF l_task_error_rec_type INDEX BY BINARY_INTEGER;
16666 
16667 l_task_error_tbl l_task_error_tbl_type;
16668 
16669 cursor l_cur_task_attr(c_project_id NUMBER, c_element_version_id NUMBER) is
16670 select ppe.name, ppev.wbs_number  --Bug 6878138
16671 from pa_proj_elements ppe, pa_proj_element_versions ppev
16672 where ppe.project_id = ppev.project_id
16673 and ppe.proj_element_id = ppev.proj_element_id
16674 and ppev.project_id = c_project_id
16675 and ppev.element_version_id = c_element_version_id;
16676 
16677 l_rec_task_attr l_cur_task_attr%rowtype;
16678 
16679 BEGIN
16680 
16681   pa_debug.init_err_stack ('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION');
16682 
16683   IF (p_debug_mode = 'Y') THEN
16684     pa_debug.debug('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION BEGIN');
16685   END IF;
16686 
16687   IF (p_commit = FND_API.G_TRUE) THEN
16688     savepoint indent_multi_task_version;
16689   END IF;
16690 
16691   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16692     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16693   END IF;
16694 
16695   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
16696     FND_MSG_PUB.initialize;
16697   END IF;
16698 
16699   x_return_status := FND_API.G_RET_STS_SUCCESS;
16700 
16701   -- Copy the input paramters to the local pl/sql table.
16702   for h in p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST
16703   loop
16704 	  l_task_in_tbl(h).task_version_id  	   := p_task_version_id_tbl(h);
16705 	  l_task_in_tbl(h).record_version_number   := p_record_version_number_tbl(h);
16706 	  l_task_in_tbl(h).display_sequence 	   := p_display_sequence_tbl(h);
16707   end loop;
16708 
16709   -- Sort the tasks for indent in ascending order of display sequence.
16710   -- Assuming that the user will generally choose less than a thousand items
16711   -- we have implemeneted an insertion sort for good sorting efficiency.
16712    l_count := l_task_in_tbl.count;
16713 
16714    i := 1;
16715 
16716 	while (i <= l_count)
16717 	loop
16718     		l_current := l_task_in_tbl(i);
16719     		j := i;
16720 		while ((j > 1) AND (l_task_in_tbl(j-1).display_sequence > l_current.display_sequence))
16721 		loop
16722 			l_task_in_tbl(j) := l_task_in_tbl(j-1);
16723 			j :=  (j-1);
16724 		end loop;
16725 		l_task_in_tbl(j) := l_current;
16726 	     	i := (i + 1);
16727 	end loop;
16728 
16729   -- Loop through the sorted list and indent each task version.
16730   for k in 1..l_count
16731   loop
16732 	   -- Clear the message stack.
16733   	   FND_MSG_PUB.initialize;
16734 
16735 	   -- Call the API: PA_TASK_PUB1.INDENT_TASK_VERSION_BULK().
16736   	   PA_TASK_PUB1.INDENT_TASK_VERSION_BULK
16737   	   (p_api_version	     => p_api_version
16738    	   , p_init_msg_list 	     => p_init_msg_list
16739    	   , p_commit 		     => p_commit
16740    	   , p_validate_only	     => p_validate_only
16741    	   , p_validation_level      => p_validation_level
16742    	   , p_calling_module        => p_calling_module
16743    	   , p_debug_mode            => p_debug_mode
16744    	   , p_max_msg_count         => p_max_msg_count
16745    	   , p_structure_version_id  => p_structure_version_id
16746    	   , p_task_version_id       => l_task_in_tbl(k).task_version_id
16747    	   , p_project_id	     => p_project_id
16748    	   , p_record_version_number => l_task_in_tbl(k).record_version_number
16749    	   , x_return_status	     => l_return_status
16750    	   , x_msg_count             => l_msg_count
16751    	   , x_msg_data              => l_msg_data);
16752 
16753   	   if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
16754 
16755 		  -- Store the task name and task number in the local pl/sql error table.
16756 	   	  open l_cur_task_attr(p_project_id, l_task_in_tbl(k).task_version_id);
16757   		  fetch l_cur_task_attr into l_task_error_tbl(k).task_name, l_task_error_tbl(k).task_number ;
16758 		  close l_cur_task_attr;
16759 
16760 		  -- Store the message code for the error message reported in the local pl/sql error table.
16761 		  PA_INTERFACE_UTILS_PUB.get_messages
16762            	  (p_encoded          => FND_API.G_FALSE     -- Get the encoded message.
16763                    , p_msg_index      => 1                   -- Get the message at index 1.
16764                    , p_data           => l_task_error_tbl(k).error_msg
16765                    , p_msg_index_out  => l_msg_index_out);
16766 
16767   	   end if;
16768 
16769   end loop; -- loop k.
16770 
16771   -- Populate the tokenized error messages in the error stack:
16772   l_error_count := l_task_error_tbl.count;
16773 
16774   if (l_error_count > 0) then
16775 
16776 	 -- Set the return status to error.
16777   	 x_return_status := FND_API.G_RET_STS_ERROR;
16778 
16779 	 -- Clear all previous messages from the message stack.
16780   	 FND_MSG_PUB.initialize;
16781 
16782 	 -- Populate the generic error message.
16783 	 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
16784 
16785 	 -- Loop through the local pl/sql error table to populate the tokenized error messages.
16786          -- Bug Fix 5920784
16787          -- Modified the following line to loop through the original task count rather than the error msg table count.
16788 
16789 	 -- for l in 1..l_error_count
16790 	 FOR l in 1..l_count
16791          -- End of Bug Fix 5920784
16792 
16793 	 loop
16794 	 	if (l_task_error_tbl.exists(l)) then
16795 	 	 	PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
16796 	 				     ,'TASKNAME',l_task_error_tbl(l).task_name
16797 					     ,'TASKNUMBER',l_task_error_tbl(l).task_number
16798 					     ,'ERRORMSG', l_task_error_tbl(l).error_msg);
16799 		end if;
16800 	 end loop;
16801 
16802   	 raise FND_API.G_EXC_ERROR;
16803 
16804   end if;
16805 
16806   IF (p_commit = FND_API.G_TRUE) THEN
16807   	 COMMIT;
16808   END IF;
16809 
16810   IF (p_debug_mode = 'Y') THEN
16811     pa_debug.debug('PA_TASK_PUB1.INDENT_MULTI_TASK_VERSION END');
16812   END IF;
16813 
16814 EXCEPTION
16815 
16816   when FND_API.G_EXC_ERROR then
16817     if p_commit = FND_API.G_TRUE then
16818       rollback to indent_multi_task_version;
16819     end if;
16820     x_return_status := FND_API.G_RET_STS_ERROR;
16821 
16822   when FND_API.G_EXC_UNEXPECTED_ERROR then
16823     if p_commit = FND_API.G_TRUE then
16824       rollback to indent_multi_task_version;
16825     end if;
16826     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16827     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16828                             p_procedure_name => 'INDENT_MULTI_TASK_VERSION',
16829                             p_error_text     => SUBSTRB(SQLERRM,1,240));
16830   when OTHERS then
16831     if p_commit = FND_API.G_TRUE then
16832       rollback to indent_multi_task_version;
16833     end if;
16834     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
16835     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
16836                             p_procedure_name => 'INDENT_MULTI_TASK_VERSION',
16837                             p_error_text     => SUBSTRB(SQLERRM,1,240));
16838 
16839     raise;
16840 
16841 END INDENT_MULTI_TASK_VERSION;
16842 
16843 PROCEDURE OUTDENT_MULTI_TASK_VERSION
16844 (p_api_version                  IN      NUMBER          := 1.0
16845 ,p_init_msg_list                IN      VARCHAR2        := FND_API.G_TRUE
16846 ,p_commit                       IN      VARCHAR2        := FND_API.G_FALSE
16847 ,p_validate_only                IN      VARCHAR2        := FND_API.G_TRUE
16848 ,p_validation_level             IN      NUMBER          := FND_API.G_VALID_LEVEL_FULL
16849 ,p_calling_module               IN      VARCHAR2        := 'SELF_SERVICE'
16850 ,p_debug_mode                   IN      VARCHAR2        := 'N'
16851 ,p_max_msg_count                IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16852 ,p_project_id                   IN      NUMBER
16853 ,p_structure_version_id         IN      NUMBER
16854 ,p_structure_type               IN      VARCHAR2        :='WORKPLAN'
16855 ,p_task_version_id_tbl          IN      SYSTEM.PA_NUM_TBL_TYPE
16856 ,p_record_version_number_tbl    IN      SYSTEM.PA_NUM_TBL_TYPE
16857 ,p_display_sequence_tbl         IN      SYSTEM.PA_NUM_TBL_TYPE
16858 ,x_return_status                OUT     NOCOPY VARCHAR2
16859 ,x_msg_count                    OUT     NOCOPY NUMBER
16860 ,x_msg_data                     OUT     NOCOPY VARCHAR2)
16861 IS
16862 
16863 l_api_name            	CONSTANT VARCHAR(30) := 'OUTDENT_MULTI_TASK_VERSION';
16864 l_api_version         	CONSTANT NUMBER      := 1.0;
16865 l_return_status       	VARCHAR2(1);
16866 l_msg_count           	NUMBER;
16867 l_msg_data            	VARCHAR2(250);
16868 l_data              	VARCHAR2(250);
16869 l_msg_index_out       	NUMBER;
16870 
16871 h 		  	NUMBER := 0;
16872 i 		  	NUMBER := 0;
16873 j 			NUMBER := 0;
16874 k 			NUMBER := 0;
16875 l			NUMBER := 0;
16876 m			NUMBER := 0;
16877 l_count 		NUMBER := 0;
16878 l_error_count 		NUMBER := 0;
16879 l_msg_code		VARCHAR2(30) := null;
16880 
16881 TYPE l_task_in_rec_type IS RECORD
16882 (task_version_id        NUMBER      := null
16883 ,record_version_number  NUMBER      := null
16884 ,display_sequence       NUMBER      := null);
16885 
16886 l_current l_task_in_rec_type;
16887 
16888 TYPE l_task_in_tbl_type IS TABLE OF l_task_in_rec_type INDEX BY BINARY_INTEGER;
16889 
16890 l_task_in_tbl l_task_in_tbl_type;
16891 
16892 TYPE l_task_error_rec_type IS RECORD
16893 (task_name           	VARCHAR2(300)   := null
16894 ,task_number     	VARCHAR2(300)   := null
16895 ,error_msg         	VARCHAR2(2000)  := null);
16896 
16897 TYPE l_task_error_tbl_type IS TABLE OF l_task_error_rec_type INDEX BY BINARY_INTEGER;
16898 
16899 l_task_error_tbl l_task_error_tbl_type;
16900 
16901 cursor l_cur_task_attr(c_project_id NUMBER, c_element_version_id NUMBER) is
16902 select ppe.name, ppev.wbs_number  --Bug	6878138
16903 from pa_proj_elements ppe, pa_proj_element_versions ppev
16904 where ppe.project_id = ppev.project_id
16905 and ppe.proj_element_id = ppev.proj_element_id
16906 and ppev.project_id = c_project_id
16907 and ppev.element_version_id = c_element_version_id;
16908 
16909 l_rec_task_attr l_cur_task_attr%rowtype;
16910 
16911 BEGIN
16912 
16913   pa_debug.init_err_stack ('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION');
16914 
16915   IF (p_debug_mode = 'Y') THEN
16916     pa_debug.debug('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION BEGIN');
16917   END IF;
16918 
16919   IF (p_commit = FND_API.G_TRUE) THEN
16920     savepoint outdent_multi_task_version;
16921   END IF;
16922 
16923   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
16924     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16925   END IF;
16926 
16927   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
16928     FND_MSG_PUB.initialize;
16929   END IF;
16930 
16931   x_return_status := FND_API.G_RET_STS_SUCCESS;
16932 
16933   -- Copy the input paramters to the local pl/sql table.
16934   for h in p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST
16935   loop
16936 	  l_task_in_tbl(h).task_version_id  	   := p_task_version_id_tbl(h);
16937 	  l_task_in_tbl(h).record_version_number   := p_record_version_number_tbl(h);
16938 	  l_task_in_tbl(h).display_sequence 	   := p_display_sequence_tbl(h);
16939   end loop;
16940 
16941   -- Sort the tasks for outdent in descending order of display sequence.
16942   -- Assuming that the user will generally choose less than a thousand items
16943   -- we have implemeneted an insertion sort for good sorting efficiency.
16944    l_count := l_task_in_tbl.count;
16945 
16946    i := 1;
16947 
16948 	while (i <= l_count)
16949 	loop
16950     		l_current := l_task_in_tbl(i);
16951     		j := i;
16952 		while ((j > 1) AND (l_task_in_tbl(j-1).display_sequence < l_current.display_sequence))
16953 		loop
16954 			l_task_in_tbl(j) := l_task_in_tbl(j-1);
16955 			j :=  (j-1);
16956 		end loop;
16957 		l_task_in_tbl(j) := l_current;
16958 	     	i := (i + 1);
16959 	end loop;
16960 
16961   -- Loop through the sorted list and outdent each task version.
16962   for k in 1..l_count
16963   loop
16964 	   -- Clear the message stack.
16965   	   FND_MSG_PUB.initialize;
16966 
16967 	   -- Call the API: PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK().
16968   	   PA_TASK_PUB1.OUTDENT_TASK_VERSION_BULK
16969   	   (p_api_version	     => p_api_version
16970    	   , p_init_msg_list 	     => p_init_msg_list
16971    	   , p_commit 		     => p_commit
16972    	   , p_validate_only	     => p_validate_only
16973    	   , p_validation_level      => p_validation_level
16974    	   , p_calling_module        => p_calling_module
16975    	   , p_debug_mode            => p_debug_mode
16976    	   , p_max_msg_count         => p_max_msg_count
16977    	   , p_structure_version_id  => p_structure_version_id
16978    	   , p_task_version_id       => l_task_in_tbl(k).task_version_id
16979    	   , p_project_id	     => p_project_id
16980    	   , p_record_version_number => l_task_in_tbl(k).record_version_number
16981    	   , x_return_status	     => l_return_status
16982    	   , x_msg_count             => l_msg_count
16983    	   , x_msg_data              => l_msg_data);
16984 
16985   	   if (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
16986 
16987 		  -- Store the task name and task number in the local pl/sql error table.
16988 	   	  open l_cur_task_attr(p_project_id, l_task_in_tbl(k).task_version_id);
16989   		  fetch l_cur_task_attr into l_task_error_tbl(k).task_name, l_task_error_tbl(k).task_number ;
16990 		  close l_cur_task_attr;
16991 
16992 		  -- Store the message code for the error message reported in the local pl/sql error table.
16993 		  PA_INTERFACE_UTILS_PUB.get_messages
16994            	  (p_encoded          => FND_API.G_FALSE     -- Get the encoded message.
16995                    , p_msg_index      => 1                   -- Get the message at index 1.
16996                    , p_data           => l_task_error_tbl(k).error_msg
16997                    , p_msg_index_out  => l_msg_index_out);
16998 
16999   	   end if;
17000 
17001   end loop; -- loop k.
17002 
17003   -- Populate the tokenized error messages in the error stack:
17004   l_error_count := l_task_error_tbl.count;
17005 
17006   if (l_error_count > 0) then
17007 
17008 	 -- Set the return status to error.
17009   	 x_return_status := FND_API.G_RET_STS_ERROR;
17010 
17011 	 -- Clear all previous messages from the message stack.
17012   	 FND_MSG_PUB.initialize;
17013 
17014 	 -- Populate the generic error message.
17015 	 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
17016 
17017 	 -- Loop through the local pl/sql error table to populate the tokenized error messages.
17018 	 for l in 1..l_error_count
17019 	 loop
17020 		if (l_task_error_tbl.exists(l)) then
17021 	 	 	PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
17022 	 				     ,'TASKNAME',l_task_error_tbl(l).task_name
17023 					     ,'TASKNUMBER',l_task_error_tbl(l).task_number
17024 					     ,'ERRORMSG', l_task_error_tbl(l).error_msg);
17025 		end if;
17026 	 end loop;
17027 
17028   	 raise FND_API.G_EXC_ERROR;
17029 
17030   end if;
17031 
17032   IF (p_commit = FND_API.G_TRUE) THEN
17033   	 COMMIT;
17034   END IF;
17035 
17036   IF (p_debug_mode = 'Y') THEN
17037     pa_debug.debug('PA_TASK_PUB1.OUTDENT_MULTI_TASK_VERSION END');
17038   END IF;
17039 
17040 EXCEPTION
17041 
17042   when FND_API.G_EXC_ERROR then
17043     if p_commit = FND_API.G_TRUE then
17044       rollback to outdent_multi_task_version;
17045     end if;
17046     x_return_status := FND_API.G_RET_STS_ERROR;
17047 
17048   when FND_API.G_EXC_UNEXPECTED_ERROR then
17049     if p_commit = FND_API.G_TRUE then
17050       rollback to outdent_multi_task_version;
17051     end if;
17052     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17053     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
17054                             p_procedure_name => 'OUTDENT_MULTI_TASK_VERSION',
17055                             p_error_text     => SUBSTRB(SQLERRM,1,240));
17056   when OTHERS then
17057     if p_commit = FND_API.G_TRUE then
17058       rollback to outdent_multi_task_version;
17059     end if;
17060     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17061     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASK_PUB1',
17062                             p_procedure_name => 'OUTDENT_MULTI_TASK_VERSION',
17063                             p_error_text     => SUBSTRB(SQLERRM,1,240));
17064 
17065     raise;
17066 
17067 END OUTDENT_MULTI_TASK_VERSION;
17068 
17069 --anuragag bug 8566495 E&C enhancement changes
17070 PROCEDURE APPROVE_TASKS_IN_BULK
17071 (p_task_id_tbl         IN  SYSTEM.PA_NUM_TBL_TYPE
17072 ,p_parent_task_id_tbl  IN SYSTEM.PA_NUM_TBL_TYPE
17073 ,p_task_name_tbl IN SYSTEM.PA_VARCHAR2_100_TBL_TYPE
17074 ,p_task_number_tbl IN   SYSTEM.PA_VARCHAR2_100_TBL_TYPE
17075 ,p_project_id        IN  NUMBER
17076 ,x_return_status               OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17077 ,x_msg_count                   OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
17078 ,x_msg_data                    OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
17079 )
17080 
17081 IS
17082 l_task_number    pa_tasks.task_number%TYPE ;
17083 l_task_name      pa_tasks.task_name%TYPE ;
17084 l_msg_count         NUMBER := 0;
17085 l_msg_data          VARCHAR2(2000);
17086 l_return_status     VARCHAR2(1);
17087 l_msg_count2         NUMBER := 0;
17088 l_msg_data2          VARCHAR2(2000);
17089 l_return_status2     VARCHAR2(1);
17090 l_dummy_app_name    VARCHAR2(30);
17091 l_enc_msg_data      VARCHAR2(2000);
17092 l_msg_name          VARCHAR2(30);
17093 l_msg_index_out     NUMBER ;
17094 l_task_id_tbl       SYSTEM.PA_NUM_TBL_TYPE;
17095 
17096 l_project_id pa_proj_elements.project_id%TYPE;
17097 l_task_start_date DATE;
17098 l_task_finish_date DATE;
17099 l_org_id NUMBER;
17100 
17101 TYPE l_error_msg_name_tbl_type IS TABLE OF
17102           fnd_new_messages.message_text%TYPE INDEX BY BINARY_INTEGER ;
17103 TYPE l_element_name_tbl_type IS TABLE OF
17104           pa_proj_elements.name%TYPE INDEX BY BINARY_INTEGER ;
17105 TYPE l_element_number_tbl_type IS TABLE OF
17106           pa_proj_elements.element_number%TYPE INDEX BY BINARY_INTEGER ;
17107 
17108 l_error_msg_name_tbl l_error_msg_name_tbl_type ;
17109 l_element_name_tbl   l_element_name_tbl_type ;
17110 l_element_number_tbl l_element_number_tbl_type ;
17111 j                  NUMBER ;
17112 l_ntf_id NUMBER;
17113 l_parent_task_status VARCHAR2(20);
17114 l_parent_id NUMBER;
17115 l_item_key pa_wf_processes.item_key%TYPE;
17116 
17117 cursor task_ntf(c_task_id NUMBER,c_project_id NUMBER) IS
17118   SELECT max(notification_id) ntf_id
17119                FROM   WF_NOTIFICATIONS WFN
17120 	           WHERE  message_type = 'PATASKWF'
17121                AND    status = 'OPEN'
17122 			   --bug 13395163
17123 			   --bug 14284485
17124                AND    EXISTS (
17125                           SELECT /*+ NO_UNNEST */ 1
17126                           FROM   WF_NOTIFICATION_ATTRIBUTES
17127                           WHERE  notification_id = wfn.notification_id
17128                           AND    name = 'TASK_NUMBER'
17129                           AND    text_value like (select element_number from pa_proj_elements
17130 												  where proj_element_id = c_task_id)
17131                              )
17132                AND    EXISTS (
17133                           SELECT /*+ NO_UNNEST */ 1
17134                           FROM   WF_NOTIFICATION_ATTRIBUTES
17135                           WHERE  notification_id = wfn.notification_id
17136                           AND    name = 'PROJECT_NUMBER'
17137                           AND    text_value like (select segment1 from pa_projects_all
17138 												  where project_id = c_project_id)
17139                              );
17140 
17141 cursor parent_task_status(c_task_id NUMBER) is
17142 select task_status,ppe.proj_element_id from pa_proj_elements ppe where
17143 ppe.proj_element_id =
17144 (select ppev1.proj_element_id from pa_proj_element_versions ppev1,pa_object_relationships por
17145 where por.object_id_to1 = (select element_version_id from pa_proj_element_versions ppev2
17146 where proj_element_id = c_task_id)
17147 and por.relationship_type = 'S'
17148 and por.relationship_subtype = 'TASK_TO_TASK'
17149 and ppev1.element_version_id = por.object_id_from1);
17150 --Bug 8566495 Changes for E&C enhancement related to CR workflow
17151 
17152 CURSOR C3(p_project_id NUMBER, p_task_id NUMBER) IS
17153        SELECT pci.ci_id,
17154               pcia.ci_action_id action_id
17155        FROM   pa_control_items pci, pa_ci_actions pcia
17156        WHERE  pci.project_id = p_project_id
17157        AND    pcia.ci_id = pci.ci_id
17158        AND    pcia.ci_action_number = pci.open_action_num
17159        AND EXISTS (SELECT 1 FROM pa_budget_versions pbv, pa_resource_assignments pra
17160                    WHERE  pbv.project_id = pci.project_Id
17161                    AND    pbv.ci_id = pci.ci_id
17162                    AND    pra.budget_version_id = pbv.budget_version_id
17163                    AND    pra.project_id = p_project_id
17164                    AND    pra.task_id = p_task_id)
17165        AND   pci.status_code in ('CI_SUBMITTED');
17166 
17167 BEGIN
17168 l_task_id_tbl := p_task_id_tbl;
17169 l_project_id := p_project_id;
17170 fnd_msg_pub.initialize;
17171 
17172 select carrying_out_organization_id
17173 into l_org_id
17174 from pa_projects_all
17175 where project_id = l_project_id;
17176 
17177    --hsiu: 3604086
17178     x_return_status := FND_API.G_RET_STS_SUCCESS;
17179 	j:=0;
17180     l_msg_count := 0;
17181     l_return_status := FND_API.G_RET_STS_SUCCESS;
17182 
17183 	for i in p_task_id_tbl.FIRST..p_task_id_tbl.LAST loop
17184 
17185 		select ppvsch.scheduled_start_date,ppvsch.scheduled_finish_date
17186 		into l_task_start_date,l_task_finish_date
17187 		from pa_proj_elem_ver_schedule ppvsch,pa_proj_elements ppe,pa_proj_element_versions ppv
17188 		where ppe.proj_element_id = ppv.proj_element_id
17189 		and ppv.element_version_id = ppvsch.element_version_id
17190 		and ppe.proj_element_id = p_task_id_tbl(i);
17191 
17192 		 l_return_status := FND_API.G_RET_STS_SUCCESS ;
17193          l_msg_count := 0 ;
17194          l_msg_data := null ;
17195 
17196 		 open parent_task_status(p_task_id_tbl(i));
17197 		 fetch parent_task_status into l_parent_task_status,l_parent_id;
17198 
17199 		 close parent_task_status;
17200 
17201 		 if(l_parent_task_status is not null)
17202 		 then
17203 		 x_msg_count:=1;
17204 		 raise FND_API.G_EXC_ERROR;
17205 		 end if;
17206 
17207 
17208 
17209 		 PA_TASKS_MAINT_PUB.CREATE_TASK
17210                (
17211                  p_calling_module         => 'SELF_SERVICE'
17212                 ,p_init_msg_list          => FND_API.G_FALSE
17213                 ,p_debug_mode             => 'N'
17214                 ,p_project_id             => l_project_id
17215                 ,p_reference_task_id      => l_parent_id
17216                 ,p_peer_or_sub            => 'SUB'
17217                 ,p_task_number            => p_task_number_tbl(i)
17218                 ,p_task_name              => p_task_name_tbl(i)
17219                 ,p_task_id                => l_task_id_tbl(i)
17220                 ,p_task_start_date   => l_task_start_date
17221                 ,p_task_completion_date  => l_task_finish_date
17222                 ,p_wbs_record_version_number => 1
17223                 ,p_carrying_out_organization_id => l_org_id
17224                 ,x_return_status          =>l_return_status
17225                 ,x_msg_count              =>l_msg_count
17226                 ,x_msg_data               =>l_msg_data
17227             );
17228 
17229 			if l_return_status = FND_API.G_RET_STS_SUCCESS THEN
17230 				open task_ntf(p_task_id_tbl(i),l_project_id);
17231 				fetch task_ntf into l_ntf_id;
17232 				close task_ntf;
17233 				if(l_ntf_id is not null)
17234 				then
17235 					update  WF_NOTIFICATIONS
17236 					set status = 'CLOSED'
17237 					where notification_id = l_ntf_id ;
17238 				end if;
17239 
17240 			    UPDATE PA_PROJ_ELEMENTS SET link_task_flag = 'N', task_status = ''
17241 				WHERE proj_element_id = l_task_id_tbl(i);
17242 
17243 				FOR ci_info IN C3(l_project_id, l_task_id_tbl(i)) LOOP
17244 
17245                   PA_TASK_APPROVAL_PKG.Check_UsedTask_Status
17246                            (ci_info.ci_id
17247                            ,l_msg_count2
17248                            ,l_msg_data2
17249                            ,l_return_status2);
17250 
17251                  IF x_return_status = 'S' THEN
17252                     /*PA_CONTROL_ITEMS_WORKFLOW.START_NOTIFICATION_WF
17253                        (  p_item_type		=> 'PAWFCISC'
17254 	                     ,p_process_name	=> 'PA_CI_PROCESS_APPROVAL'
17255 	                     ,p_ci_id		    => ci_info.ci_id
17256 	                     ,p_action_id		=> ci_info.action_id
17257                          ,x_item_key		=> l_item_key
17258                          ,x_return_status   => l_return_status2
17259                          ,x_msg_count       => l_msg_count2
17260                          ,x_msg_data        => l_msg_data2    );*/
17261 					    PA_CONTROL_ITEMS_WORKFLOW.start_workflow
17262 	 (
17263 						p_item_type         => 'PAWFCISC'
17264 					  , p_process_name      => 'PA_CI_PROCESS_APPROVAL'
17265 					  , p_ci_id             => ci_info.ci_id
17266 					  , x_item_key          => l_item_key
17267 					  ,x_return_status   => l_return_status2
17268 					  ,x_msg_count       => l_msg_count2
17269 	                  ,x_msg_data        => l_msg_data2    );
17270                  END IF;
17271 
17272 				 END LOOP;
17273 
17274 			else
17275 			j:=j+1;
17276 			end if;
17277 			END LOOP;
17278 
17279 		if j>0
17280 		then
17281 		x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17282 		x_msg_count     := 1;
17283 		rollback;
17284 		else
17285 		x_return_status := FND_API.G_RET_STS_SUCCESS;
17286 		x_msg_count     := 0;
17287 		commit;
17288 		end if;
17289 		x_msg_data:=l_msg_data;
17290 EXCEPTION
17291 
17292 	  WHEN FND_API.G_EXC_ERROR THEN
17293 	  rollback;
17294 	  FND_MSG_PUB.initialize;
17295 
17296 	 -- Populate the generic error message.
17297 	 PA_UTILS.ADD_MESSAGE('PA','PA_PARENT_TASK_UNAPPROVED');
17298 	  x_return_status := FND_API.G_RET_STS_ERROR;
17299 	  x_msg_count :=0;
17300 	  x_msg_data := 'PA_PARENT_TASK_UNAPPROVED';
17301 
17302 	  WHEN OTHERS THEN
17303      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
17304      x_msg_count     := 1;
17305      x_msg_data      := 'ANURAG';
17306 	 RAISE ;
17307 
17308 END APPROVE_TASKS_IN_BULK;
17309 -- End of Bug Fix 5593736.
17310 
17311 END PA_TASK_PUB1;