DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_TASKS_MAINT_PVT

Source


1 package body PA_TASKS_MAINT_PVT as
2 /*$Header: PATSKSVB.pls 120.14.12010000.4 2008/10/30 23:06:21 kmaddi ship $*/
3 
4   g_pkg_name                             CONSTANT VARCHAR2(30):= 'PA_TASKS_MAINT_PVT';
5 --begin add by rtarway for FP.M developement
6   Invalid_Arg_Exc_WP Exception;
7 --End  add by rtarway for FP.M developement
8 -- API name                      : CREATE_TASK
9 -- Type                          : Private Procedure
10 -- Pre-reqs                      : None
11 -- Return Value                  : N/A
12 -- Parameters
13 --   p_api_version                       IN  NUMBER      := 1.0
14 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
15 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
16 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
17 --   p_validation_level                  IN  VARCHAR2    := 100
18 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
19 --   p_debug_mode                        IN  VARCHAR2    := 'N'
20 --   p_project_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21 --   p_reference_task_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22 --   p_peer_or_sub                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
23 --   p_task_number                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24 --   p_task_name                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25 --   p_long_task_name                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
26 --   p_task_description                  IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27 --   p_task_manager_person_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28 --   p_carrying_out_organization_id      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29 --   p_task_type_code                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30 --   p_priority_code                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31 --   p_work_type_id                      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32 --   p_service_type_code                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33 --   p_milestone_flag                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34 --   p_critical_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35 --   p_chargeable_flag                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36 --   p_billable_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37 --   p_receive_project_invoice_flag      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38 --   p_scheduled_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
39 --   p_scheduled_finish_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
40 --   p_estimated_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
41 --   p_estimated_end_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
42 --   p_actual_start_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
43 --   p_actual_finish_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
44 --   p_task_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
45 --   p_task_completion_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
46 --   p_baseline_start_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
47 --   p_baseline_end_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
48 --   p_obligation_start_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
49 --   p_obligation_end_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
50 --   p_estimate_to_complete_work         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
51 --   p_baseline_work                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
52 --   p_scheduled_work                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
53 --   p_actual_work_to_date               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
54 --   p_work_unit                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
55 --   p_progress_status_code              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
56 --   p_job_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
57 --   p_emp_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
58 --   p_pm_product_code                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
59 --   p_pm_project_reference              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
60 --   p_pm_task_reference                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
61 --   p_pm_parent_task_reference          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
62 --   p_pa_parent_task_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
63 --   p_address_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
64 --   p_ready_to_bill_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
65 --   p_ready_to_distribute_flag          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
66 --   p_limit_to_txn_controls_flag        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
67 --   p_labor_bill_rate_org_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
68 --   p_labor_std_bill_rate_schdl         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
69 --   p_labor_schedule_fixed_date         IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
70 --   p_labor_schedule_discount           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
71 --   p_nl_bill_rate_org_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
72 --   p_nl_std_bill_rate_schdl            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
73 --   p_nl_schedule_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
74 --   p_nl_schedule_discount              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
75 --   p_labor_cost_multiplier_name        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
76 --   p_cost_ind_rate_sch_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
77 --   p_rev_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
78 --   p_inv_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
79 --   p_cost_ind_sch_fixed_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
80 --   p_rev_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
81 --   p_inv_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
82 --   p_labor_sch_type                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
83 --   p_nl_sch_type                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
84 --   p_early_start_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
85 --   p_early_finish_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
86 --   p_late_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
87 --   p_late_finish_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
88 --   p_attribute_category                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
89 --   p_attribute1                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
90 --   p_attribute2                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
91 --   p_attribute3                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
92 --   p_attribute4                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
93 --   p_attribute5                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
94 --   p_attribute6                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
95 --   p_attribute7                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
96 --   p_attribute8                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
97 --   p_attribute9                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
98 --   p_attribute10                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
99 --   p_allow_cross_charge_flag           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
100 --   p_project_rate_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
101 --   p_project_rate_type                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
102 --   p_cc_process_labor_flag             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
103 --   p_labor_tp_schedule_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
104 --   p_labor_tp_fixed_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
105 --   p_cc_process_nl_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
106 --   p_nl_tp_schedule_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
107 --   p_nl_tp_fixed_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
108 --   p_inc_proj_progress_flag            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
109 --   p_task_id                                 IN OUT NUMBER
110 --   x_display_seq                       OUT NUMBER
111 --   x_return_status                     OUT VARCHAR2
112 --   x_msg_count                         OUT NUMBER
113 --   x_msg_data                          OUT VARCHAR2
114 --
115 --  History
116 --
117 --  25-JUN-01   HSIU             -Created
118 --
119 --
120   procedure CREATE_TASK
121   (
122      p_api_version                       IN  NUMBER      := 1.0
123     ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
124     ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
125     ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
126     ,p_validation_level                  IN  VARCHAR2    := 100
127     ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
128     ,p_debug_mode                        IN  VARCHAR2    := 'N'
129 
130     ,p_project_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
131     ,p_reference_task_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
132     ,p_peer_or_sub                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
133     ,p_task_number                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
134     ,p_task_name                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
135     ,p_long_task_name                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
136     ,p_task_description                  IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
137     ,p_task_manager_person_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
138     ,p_carrying_out_organization_id      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
139     ,p_task_type_code                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
140     ,p_priority_code                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
141     ,p_work_type_id                      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
142     ,p_service_type_code                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
143     ,p_milestone_flag                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
144     ,p_critical_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
145     ,p_chargeable_flag                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
146     ,p_billable_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
147     ,p_receive_project_invoice_flag      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
148     ,p_scheduled_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
149     ,p_scheduled_finish_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
150     ,p_estimated_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
151     ,p_estimated_end_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
152     ,p_actual_start_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
153     ,p_actual_finish_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
154     ,p_task_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
155     ,p_task_completion_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
156     ,p_baseline_start_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
157     ,p_baseline_end_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
158 
159     ,p_obligation_start_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
160     ,p_obligation_end_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
161     ,p_estimate_to_complete_work         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
162     ,p_baseline_work                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
163     ,p_scheduled_work                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
164     ,p_actual_work_to_date               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
165     ,p_work_unit                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
166     ,p_progress_status_code              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
167 
168     ,p_job_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
169     ,p_emp_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
170     ,p_pm_product_code                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
171     ,p_pm_project_reference              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
172     ,p_pm_task_reference                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
173     ,p_pm_parent_task_reference          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
174     ,p_pa_parent_task_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
175     ,p_address_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
176     ,p_ready_to_bill_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
177     ,p_ready_to_distribute_flag          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
178     ,p_limit_to_txn_controls_flag        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
179     ,p_labor_bill_rate_org_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
180     ,p_labor_std_bill_rate_schdl         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
181     ,p_labor_schedule_fixed_date         IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
182     ,p_labor_schedule_discount           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
183     ,p_nl_bill_rate_org_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
184     ,p_nl_std_bill_rate_schdl            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
185     ,p_nl_schedule_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
186     ,p_nl_schedule_discount              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
187     ,p_labor_cost_multiplier_name        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
188     ,p_cost_ind_rate_sch_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
189     ,p_rev_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
190     ,p_inv_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
191     ,p_cost_ind_sch_fixed_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
192     ,p_rev_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
193     ,p_inv_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
194     ,p_labor_sch_type                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
195     ,p_nl_sch_type                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
196     ,p_early_start_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
197     ,p_early_finish_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
198     ,p_late_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
199     ,p_late_finish_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
200     ,p_attribute_category                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
201     ,p_attribute1                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
202     ,p_attribute2                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
203     ,p_attribute3                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
204     ,p_attribute4                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
205     ,p_attribute5                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
206     ,p_attribute6                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
207     ,p_attribute7                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
208     ,p_attribute8                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
209     ,p_attribute9                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
210     ,p_attribute10                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
211     ,p_allow_cross_charge_flag           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
212     ,p_project_rate_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
213     ,p_project_rate_type                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
214     ,p_cc_process_labor_flag             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
215     ,p_labor_tp_schedule_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
216     ,p_labor_tp_fixed_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
217     ,p_cc_process_nl_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
218     ,p_nl_tp_schedule_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
219     ,p_nl_tp_fixed_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
220     ,p_inc_proj_progress_flag            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
221     ,p_taskfunc_cost_rate_type           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
222     ,p_taskfunc_cost_rate_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
223     ,p_non_lab_std_bill_rt_sch_id        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
224     ,p_labor_disc_reason_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
225     ,p_non_labor_disc_reason_code        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
226 --PA L Capital Project Changes 2872708
227     ,p_retirement_cost_flag              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
228     ,p_cint_eligible_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
229     ,p_cint_stop_date                    IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
230 --End PA L Capital Project Changes 2872708
231 
232     ,p_task_id                                IN OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
233     ,x_display_seq                       OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
234 
235     ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
236     ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
237     ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
238   )
239   IS
240     l_api_name                           CONSTANT VARCHAR2(30)  := 'CREATE_TASK';
241     l_api_version                        CONSTANT NUMBER        := 1.0;
242     l_msg_count                          NUMBER;
243     l_err_code                           NUMBER                 := 0;
244     l_err_stack                          VARCHAR2(630);
245     l_err_stage                          VARCHAR2(80); -- VARCHAR2(80)
246     l_data                               VARCHAR2(250);
247     l_msg_data                           VARCHAR2(250);
248     l_msg_index_out                      NUMBER;
249 
250     l_delete_project_allowed             VARCHAR2(1);
251     l_update_proj_num_allowed            VARCHAR2(1);
252     l_update_proj_name_allowed           VARCHAR2(1);
253     l_update_proj_desc_allowed           VARCHAR2(1);
254     l_update_proj_dates_allowed          VARCHAR2(1);
255     l_update_proj_status_allowed         VARCHAR2(1);
256     l_update_proj_manager_allowed        VARCHAR2(1);
257     l_update_proj_org_allowed            VARCHAR2(1);
258     l_add_task_allowed                   VARCHAR2(1);
259     l_delete_task_allowed                VARCHAR2(1);
260     l_update_task_num_allowed            VARCHAR2(1);
261     l_update_task_name_allowed           VARCHAR2(1);
262     l_update_task_dates_allowed          VARCHAR2(1);
263     l_update_task_desc_allowed           VARCHAR2(1);
264     l_update_parent_task_allowed         VARCHAR2(1);
265     l_update_task_org_allowed            VARCHAR2(1);
266     l_f1                                 VARCHAR2(1);
267     l_f2                                 VARCHAR2(1);
268     l_ret                                VARCHAR2(1);
269     l_msg_cnt                            NUMBER;
270 
271     l_rowid                              VARCHAR2(50);
272     l_new_task_id                        NUMBER;
273     l_parent_task_id                     NUMBER;
274     l_top_task_id                        NUMBER;
275 
276     l_sequence_number                    NUMBER;
277 
278     -- For Task Attributes, for defaulting
279     TDESCRIPTION                         VARCHAR2(250);
280     TTASK_ID                             NUMBER;
281     TTOP_TASK_ID                         NUMBER;
282     TPARENT_TASK_ID                      NUMBER;
283     TADDRESS_ID                          NUMBER;
284     TREADY_TO_BILL_FLAG                  VARCHAR2(1);
285     TREADY_TO_DISTRIBUTE_FLAG            VARCHAR2(1);
286     TCARRYING_OUT_ORG_ID                 NUMBER;
287     TSERVICE_TYPE_CODE                   VARCHAR2(30);
288     TTASK_MANAGER_PERSON_ID              NUMBER;
289     TCHARGEABLE                          VARCHAR2(1);
290     TBILLABLE                            VARCHAR2(1);
291     TLIMIT_TO_TXN_CONTROLS_FLAG          VARCHAR2(1);
292     TSTART_DATE                          DATE;
293     TCOMPLETION_DATE                     DATE;
294     TLABOR_BILL_RATE_ORG_ID              NUMBER;
295     TLABOR_STD_BILL_RATE_SCHDL           VARCHAR2(30);
296     TLABOR_SCHEDULE_FIXED_DATE           DATE;
297     TLABOR_SCHEDULE_DISCOUNT             NUMBER;
298     TNLR_BILL_RATE_ORG_ID                NUMBER;
299     TNLR_STD_BILL_RATE_SCHDL             VARCHAR2(30);
300     TNLR_SCHEDULE_FIXED_DATE             DATE;
301     TNLR_SCHEDULE_DISCOUNT               NUMBER;
302     TCOST_IND_RATE_SCH_ID                NUMBER;
303     TREV_IND_RATE_SCH_ID                 NUMBER;
304     TINV_IND_RATE_SCH_ID                 NUMBER;
305     TCOST_IND_SCH_FIXED_DATE             DATE;
306     TREV_IND_SCH_FIXED_DATE              DATE;
307     TINV_IND_SCH_FIXED_DATE              DATE;
308     TLABOR_SCH_TYPE                      VARCHAR2(1);
309     TNLR_SCH_TYPE                        VARCHAR2(1);
310     TALLOW_CROSS_CHARGE_FLAG             VARCHAR2(1);
311     TPROJECT_RATE_TYPE                   VARCHAR2(30);
312     TPROJECT_RATE_DATE                   DATE;
313     TCC_PROCESS_LABOR_FLAG               VARCHAR2(1);
314     TLABOR_TP_SCHEDULE_ID                NUMBER;
315     TLABOR_TP_FIXED_DATE                 DATE;
316     TCC_PROCESS_NL_FLAG                  VARCHAR2(1);
317     TNL_TP_SCHEDULE_ID                   NUMBER;
318     TNL_TP_FIXED_DATE                    DATE;
319     TRECEIVE_PROJECT_INVOICE_FLAG        VARCHAR2(1);
320     TWORK_TYPE_ID                        NUMBER;
321     TJOB_BILL_RATE_SCHEDULE_ID           NUMBER;
322     TEMP_BILL_RATE_SCHEDULE_ID           NUMBER;
323     --NEW ATTRIBUTES
324     TTASK_TYPE_CODE                      VARCHAR2(30);
325     TPRIORITY_CODE                       VARCHAR2(30);
326     TCRITICAL_FLAG                       VARCHAR2(1);
327     TMILESTONE_FLAG                      VARCHAR2(1);
328     TESTIMATED_START_DATE                DATE;
329     TESTIMATED_END_DATE                  DATE;
330     TBASELINE_START_DATE                 DATE;
331     TBASELINE_END_DATE                   DATE;
332     TOBLIGATION_START_DATE               DATE;
333     TOBLIGATION_END_DATE                 DATE;
334     TSCHEDULED_START_DATE                DATE;
335     TSCHEDULED_FINISH_DATE               DATE;
336     TESTIMATE_TO_COMPLETE_WORK           NUMBER;
337     TBASELINE_WORK                       NUMBER;
338     TSCHEDULED_WORK                      NUMBER;
339     TACTUAL_WORK_TO_DATE                 NUMBER;
340     TWORK_UNIT_CODE                      VARCHAR2(30);
341     TPROGRESS_STATUS_CODE                VARCHAR2(30);
342     TWBS_LEVEL                           NUMBER;
343 
344     TACTUAL_START_DATE                   DATE;
345     TACTUAL_FINISH_DATE                  DATE;
346     TPA_PARENT_TASK_ID                   NUMBER;
347     TLABOR_COST_MULTIPLIER_NAME          VARCHAR2(20);
348     TEARLY_START_DATE                    DATE;
349     TEARLY_FINISH_DATE                   DATE;
350     TLATE_START_DATE                     DATE;
351     TLATE_FINISH_DATE                    DATE;
352     TATTRIBUTE_CATEGORY                  VARCHAR2(30);
353     TATTRIBUTE1                          VARCHAR2(150);
354     TATTRIBUTE2                          VARCHAR2(150);
355     TATTRIBUTE3                          VARCHAR2(150);
356     TATTRIBUTE4                          VARCHAR2(150);
357     TATTRIBUTE5                          VARCHAR2(150);
358     TATTRIBUTE6                          VARCHAR2(150);
359     TATTRIBUTE7                          VARCHAR2(150);
360     TATTRIBUTE8                          VARCHAR2(150);
361     TATTRIBUTE9                          VARCHAR2(150);
362     TATTRIBUTE10                         VARCHAR2(150);
363 
364     TPROJECT_TYPE                        VARCHAR2(20);
365     CARRYING_OUT_ORG_ID_TMP              NUMBER;
366     Tinc_proj_progress_flag              VARCHAR2(1);
367     ttaskfunc_cost_rate_type             VARCHAR2(30);
368     ttaskfunc_cost_rate_date             DATE;
369     tnon_lab_std_bill_rt_Sch_id          NUMBER;
370     Tlabor_disc_reason_code              VARCHAR2(30);
371     Tnon_labor_disc_reason_code          VARCHAR2(30);
372 
373 --PA L Capital Project Changes 2872708
374       tretirement_cost_flag              VARCHAR2(1);
375       tcint_eligible_flag                VARCHAR2(1);
376       tcint_stop_date                    DATE;
377 --End PA L Capital Project Changes 2872708
378 
379     TGEN_ETC_SOURCE_CODE                 VARCHAR2(30);
380 /*FPM development for Project Setup */
381     l_customer_id                        Number;
382     l_revenue_accrual_method             varchar2(30);
383     l_invoice_method                     varchar2(30);
384     l_project_type_class_code            varchar2(80);
385 
386     --cursor for getting reference task info; from FORMS task2.create_task
387     --new columns added starting from task_type_code
388     CURSOR ref_task IS
389       SELECT TASK_ID,
390         TOP_TASK_ID,
391         PARENT_TASK_ID,
392         ADDRESS_ID,
393         'N', -- READY_TO_BILL_FLAG
394         'N', -- READY_TO_DISTRIBUTE_FLAG
395         CARRYING_OUT_ORGANIZATION_ID,
396         SERVICE_TYPE_CODE,
397         TASK_MANAGER_PERSON_ID,
398         'Y', -- CHARGEABLE_FLAG
399         BILLABLE_FLAG,
400         'N', -- LIMIT_TO_TXN_CONTROLS_FLAG
401         START_DATE,
402         COMPLETION_DATE,
403         LABOR_BILL_RATE_ORG_ID,
404         LABOR_STD_BILL_RATE_SCHDL,
405         LABOR_SCHEDULE_FIXED_DATE,
406         LABOR_SCHEDULE_DISCOUNT,
407         NON_LABOR_BILL_RATE_ORG_ID,
408         NON_LABOR_STD_BILL_RATE_SCHDL,
409         NON_LABOR_SCHEDULE_FIXED_DATE,
410         NON_LABOR_SCHEDULE_DISCOUNT,
411         COST_IND_RATE_SCH_ID,
412         REV_IND_RATE_SCH_ID,
413         INV_IND_RATE_SCH_ID,
414         COST_IND_SCH_FIXED_DATE,
415         REV_IND_SCH_FIXED_DATE,
416         INV_IND_SCH_FIXED_DATE,
417         LABOR_SCH_TYPE,
418         NON_LABOR_SCH_TYPE,
419         ALLOW_CROSS_CHARGE_FLAG,
420         PROJECT_RATE_TYPE,
421         PROJECT_RATE_DATE,
422         CC_PROCESS_LABOR_FLAG,
423         LABOR_TP_SCHEDULE_ID,
424         LABOR_TP_FIXED_DATE,
425         CC_PROCESS_NL_FLAG,
426         NL_TP_SCHEDULE_ID,
427         NL_TP_FIXED_DATE,
428         'N', -- RECEIVE_PROJECT_INVOICE_FLAG
429         WORK_TYPE_ID,
430         JOB_BILL_RATE_SCHEDULE_ID,
431         EMP_BILL_RATE_SCHEDULE_ID,
432 -- HY        TASK_TYPE_CODE,
433 -- HY        PRIORITY_CODE,
434 -- HY        CRITICAL_FLAG,
435 -- HY        MILESTONE_FLAG,
436 -- HY        ESTIMATED_START_DATE,
437 -- HY        ESTIMATED_END_DATE,
438         SCHEDULED_START_DATE,
439         SCHEDULED_FINISH_DATE,
440 -- HY        ESTIMATE_TO_COMPLETE_WORK,
441 -- HY        SCHEDULED_WORK,
442 -- HY        WORK_UNIT_CODE,
443 -- HY        PROGRESS_STATUS_CODE,
444         WBS_LEVEL,
445 -- HY        inc_proj_progress_flag,
446         taskfunc_cost_rate_type,
447         taskfunc_cost_rate_date,
448         non_lab_std_bill_rt_sch_id,
449         labor_disc_reason_code,
450         non_labor_disc_reason_code,
451 --PA L Capital Project changes 2872708
452       retirement_cost_flag,
453       cint_eligible_flag,
454       cint_stop_date,
455 --End PA L Capital Project changes 2872708
456       /*FPM development for Project Setup */
457       customer_id,
458       revenue_accrual_method,
459       invoice_method,
460       GEN_ETC_SOURCE_CODE
461       FROM PA_TASKS
462       WHERE TASK_ID = p_reference_task_id;
463 
464     -- cursor for defaulting peer task that is not a top task.
465     CURSOR ref_parent_task IS
466       SELECT T.TASK_ID,
467         T.TOP_TASK_ID,
468         T.PARENT_TASK_ID,
469         T.ADDRESS_ID,
470         'N',
471         'N',
472         T.CARRYING_OUT_ORGANIZATION_ID,
473         T.SERVICE_TYPE_CODE,
474         T.TASK_MANAGER_PERSON_ID,
475         'Y', -- CHARGEABLE_FLAG
476         T.BILLABLE_FLAG,
477         'N', -- LIMIT_TO_TXN_CONTROLS_FLAG
478         T.START_DATE,
479         T.COMPLETION_DATE,
480         T.LABOR_BILL_RATE_ORG_ID,
481         T.LABOR_STD_BILL_RATE_SCHDL,
482         T.LABOR_SCHEDULE_FIXED_DATE,
483         T.LABOR_SCHEDULE_DISCOUNT,
484         T.NON_LABOR_BILL_RATE_ORG_ID,
485         T.NON_LABOR_STD_BILL_RATE_SCHDL,
486         T.NON_LABOR_SCHEDULE_FIXED_DATE,
487         T.NON_LABOR_SCHEDULE_DISCOUNT,
488         T.COST_IND_RATE_SCH_ID,
489         T.REV_IND_RATE_SCH_ID,
490         T.INV_IND_RATE_SCH_ID,
491         T.COST_IND_SCH_FIXED_DATE,
492         T.REV_IND_SCH_FIXED_DATE,
493         T.INV_IND_SCH_FIXED_DATE,
494         T.LABOR_SCH_TYPE,
495         T.NON_LABOR_SCH_TYPE,
496         T.ALLOW_CROSS_CHARGE_FLAG,
497         T.PROJECT_RATE_TYPE,
498         T.PROJECT_RATE_DATE,
499         T.CC_PROCESS_LABOR_FLAG,
500         T.LABOR_TP_SCHEDULE_ID,
501         T.LABOR_TP_FIXED_DATE,
502         T.CC_PROCESS_NL_FLAG,
503         T.NL_TP_SCHEDULE_ID,
504         T.NL_TP_FIXED_DATE,
505         'N', -- RECEIVE_PROJECT_INVOICE_FLAG
506         T.WORK_TYPE_ID,
507         T.JOB_BILL_RATE_SCHEDULE_ID,
508         T.EMP_BILL_RATE_SCHEDULE_ID,
509 -- HY        T.TASK_TYPE_CODE,
510 -- HY        T.PRIORITY_CODE,
511 -- HY        T.CRITICAL_FLAG,
512 -- HY        T.MILESTONE_FLAG,
513 -- HY        T.ESTIMATED_START_DATE,
514 -- HY        T.ESTIMATED_END_DATE,
515         T.SCHEDULED_START_DATE,
516         T.SCHEDULED_FINISH_DATE,
517 -- HY        T.ESTIMATE_TO_COMPLETE_WORK,
518 -- HY        T.SCHEDULED_WORK,
519 -- HY        T.WORK_UNIT_CODE,
520 -- HY        T.PROGRESS_STATUS_CODE,
521         T.WBS_LEVEL,
522 -- HY        T.inc_proj_progress_flag,
523         T.taskfunc_cost_rate_type,
524         T.taskfunc_cost_rate_date,
525         T.non_lab_std_bill_rt_sch_id,
526         T.labor_disc_reason_code,
527         T.non_labor_disc_reason_code,
528 --bug 3032842
529 --PA L Capital Project changes 2872708
530       retirement_cost_flag,
531       cint_eligible_flag,
532       cint_stop_date,
533 --End PA L Capital Project changes 2872708
534 --end bug 3032842
535       /*FPM development for Project Setup */
536       T.customer_id,
537       T.revenue_accrual_method,
538       T.invoice_method,
539       T.GEN_ETC_SOURCE_CODE
540       FROM PA_TASKS T
541       WHERE T.TASK_ID =
542       (SELECT T2.PARENT_TASK_ID
543        FROM PA_TASKS T2
544        WHERE T2.TASK_ID = p_reference_task_id);
545 
546     --Cursor for defaulting top task
547     CURSOR top_task IS
548       select
549         NULL,
550         NULL,
551         NULL,
552         NULL,
553         'Y',
554         'Y',
555         pa.carrying_out_organization_id,
556         pt.SERVICE_TYPE_CODE,--service_type_code,
557         pt.project_type_class_code, -- Project Type class code
558         NULL,
559         'Y',
560         'N',
561         'N',
562         pa.start_date,
563         pa.completion_date,
564         pa.labor_bill_rate_org_id,
565         pa.labor_std_bill_rate_schdl,
566         pa.labor_schedule_fixed_date,
567         pa.labor_schedule_discount,
568         pa.non_labor_bill_rate_org_id,
569         pa.non_labor_std_bill_rate_schdl,
570         pa.non_labor_schedule_fixed_date,
571         pa.non_labor_schedule_discount,
572         pa.cost_ind_rate_sch_id,
573         pa.rev_ind_rate_sch_id,
574         pa.inv_ind_rate_sch_id,
575         pa.cost_ind_sch_fixed_date,
576         pa.rev_ind_sch_fixed_date,
577         pa.inv_ind_sch_fixed_date,
578         pa.labor_sch_type,
579         pa.non_labor_sch_type,
580         pa.allow_cross_charge_flag,
581         pa.project_rate_type,
582         pa.project_rate_date,
583         pa.cc_process_labor_flag,
584         pa.labor_tp_schedule_id,
585         pa.labor_tp_fixed_date,
586         pa.cc_process_nl_flag,
587         pa.nl_tp_schedule_id,
588         nl_tp_fixed_date,
589         'N',
590         pa.work_type_id,
591         pa.job_bill_rate_schedule_id,
592         pa.emp_bill_rate_schedule_id,
593         NULL,
594         NULL,
595         'N',
596         'N',
597         NULL,
598         NULL,
599         NULL,
600         NULL,
601         NULL,
602         NULL,
603         NULL,
604         NULL,
605         1, --WBS_LEVEL
606 --bug 3032842
607 --PA L Capital Project changes 2872708
608       'N',  --retirment_flag
609       decode( template_flag, 'N', 'N', 'Y' ), --cint_eligible_flag
610       /*FPM development for Project Setup */
611       pa.revenue_accrual_method,
612       pa.Invoice_method,
613 --End PA L Capital Project changes 2872708
614       NULL,
615 --end bug 3032842
616       pa.Non_lab_std_bill_rt_sch_id  -- Added for bug 4963525.
617       FROM PA_PROJECTS_ALL pa,
618       PA_PROJECT_TYPES_ALL pt
619       WHERE pa.PROJECT_ID = p_project_id and
620       pa.PROJECT_TYPE = pt.PROJECT_TYPE and
621       pa.ORG_ID = pt.ORG_ID;--MOAC Changes: Bug 4363092 : removed nvl usage with org_id
622 
623     CURSOR work_type_from_proj IS
624       SELECT WORK_TYPE_ID, PROJECT_TYPE, CARRYING_OUT_ORGANIZATION_ID
625       FROM PA_PROJECTS_ALL
626       WHERE PROJECT_ID = p_project_id;
627 
628 /* Commented for bug#3512486
629     CURSOR work_type_from_proj_type(v_project_type VARCHAR2) IS
630       SELECT WORK_TYPE_ID
631       FROM PA_PROJECT_TYPES
632       WHERE PROJECT_TYPE = v_project_type; */
633 
634     /* Modified the cursor work_type_from_proj_type for bug#3512486 */
635     --MOAC Changes: Bug 4363092 : removed nvl usage with org_id
636     CURSOR work_type_from_proj_type(v_project_type VARCHAR2) IS
637       SELECT PT.WORK_TYPE_ID
638       FROM PA_PROJECT_TYPES_ALL PT, PA_PROJECTS_ALL PA
639       WHERE PT.PROJECT_TYPE = v_project_type
640       and PA.PROJECT_ID = p_project_id
641       and PA.ORG_ID = PT.ORG_ID;
642 
643 
644     CURSOR billable_flag_c(v_work_type_id NUMBER) IS
645       SELECT BILLABLE_CAPITALIZABLE_FLAG
646       FROM PA_WORK_TYPES_VL
647       WHERE WORK_TYPE_ID = v_work_type_id;
648 
649 /*  FPM Changes for Project Setup */
650     CURSOR top_task_customer is
651     SELECT customer_id from pa_project_customers
652     where project_id=p_project_id
653     and default_top_task_cust_flag ='Y';
654     --rtarway, BUG 3924597
655     l_wp_separate_from_fin VARCHAR2(1);
656 
657   BEGIN
658     IF (p_debug_mode = 'Y') THEN
659       pa_debug.debug('PA_TASKS_MAINT_PVT.CREATE_TASK BEGIN');
660     END IF;
661 
662     IF (p_commit = FND_API.G_TRUE) THEN
663       savepoint CREATE_TASK_PRIVATE;
664     END IF;
665 
666     IF (p_debug_mode = 'Y') THEN
667       pa_debug.debug('Performing validations');
668     END IF;
669 
670     IF (p_calling_module IN ('EXCHANGE')) THEN
671       --check if task reference is null
672       IF p_reference_task_id IS NULL THEN
673         PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_REF_EMPTY');
674       END IF;
675     END IF;
676 
677     IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
678       --check if task_name is null
679       IF p_task_name IS NULL THEN
680         PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_NAME_EMPTY');
681       END IF;
682     END IF;
683 
684     -- Set controls
685     IF (p_calling_module IN ('SELF_SERVICE')) THEN
686       If (p_pm_product_code IS NOT NULL) OR
687          (p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
688         PA_PM_CONTROLS.GET_PROJECT_ACTIONS_ALLOWED(
689           p_pm_product_code => p_pm_product_code,
690           p_delete_project_allowed => l_delete_project_allowed,
691           p_update_proj_num_allowed => l_update_proj_num_allowed,
692           p_update_proj_name_allowed => l_update_proj_name_allowed,
693           p_update_proj_desc_allowed => l_update_proj_desc_allowed,
694           p_update_proj_dates_allowed  => l_update_proj_dates_allowed,
695           p_update_proj_status_allowed => l_update_proj_status_allowed,
696           p_update_proj_manager_allowed => l_update_proj_manager_allowed,
697           p_update_proj_org_allowed => l_update_proj_org_allowed,
698           p_add_task_allowed => l_add_task_allowed,
699           p_delete_task_allowed => l_delete_task_allowed,
700           p_update_task_num_allowed => l_update_task_num_allowed,
701           p_update_task_name_allowed => l_update_task_name_allowed,
702           p_update_task_dates_allowed => l_update_task_dates_allowed,
703           p_update_task_desc_allowed => l_update_task_desc_allowed,
704           p_update_parent_task_allowed => l_update_parent_task_allowed,
705           p_update_task_org_allowed => l_update_task_org_allowed,
706           p_error_code => l_err_code,
707           p_error_stack => l_err_stack,
708           p_error_stage => l_err_stage
709         );
710       END IF; --product code is not null
711     END IF;
712 
713     -- Check if pm_product code is not null and add_task_allowed = 'N'
714     -- From Task Summary, when-button-pressed
715     -- For Self-service, Exchange, Form
716     IF ((p_pm_product_code IS NOT NULL) OR
717        (p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) and
718        (l_add_task_allowed = 'N') THEN
719       --throw error PA_PR_PM_CANNOT_ADDTASK
720       PA_UTILS.ADD_MESSAGE('PA', 'PA_PR_PM_CANNOT_ADDTASK');
721       l_msg_count := FND_MSG_PUB.count_msg;
722       IF (l_msg_count > 0) THEN
723         x_msg_count := l_msg_count;
724         IF (x_msg_count = 1) THEN
725           pa_interface_utils_pub.get_messages(
726             p_encoded => FND_API.G_TRUE,
727             p_msg_index => 1,
728             p_data => l_data,
729             p_msg_index_out => l_msg_index_out);
730           x_msg_data := l_data;
731         END IF;
732         RAISE FND_API.G_EXC_ERROR;
733       END IF;
734     END IF;
735 
736 
737     -- Check if task number is Unique
738     IF (p_calling_module IN ('FORMS', 'SELF_SERVICE')) THEN
739       If Pa_Task_Utils.Check_Unique_Task_number (p_project_id,
740            p_task_number, NULL ) <> 1 Then
741         PA_UTILS.ADD_MESSAGE('PA', 'PA_ALL_DUPLICATE_NUM');
742       END IF;
743     END IF;
744 
745     -- Check Start Date; will replace by Date roll-up in future
746     -- Check Completion Date; will replace by Date roll-up in future
747     IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
748       --Check Start Date End Date
749       IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
750           p_task_start_date IS NULL) AND
751          (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
752           p_task_completion_date IS NULL) THEN
753         PA_TASKS_MAINT_UTILS.check_start_end_date(
754           p_old_start_date => null,
755           p_old_end_date => null,
756           p_new_start_date => p_task_start_date,
757           p_new_end_date => p_task_completion_date,
758           p_update_start_date_flag => l_f1,
759           p_update_end_date_flag => l_f2,
760           p_return_status => l_ret);
761         IF (l_ret <> 'S') THEN
762           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
763                                p_msg_name => 'PA_SU_INVALID_DATES');
764         END IF;
765       END IF;
766     END IF;
767 
768     IF (p_calling_module IN ('SELF_SERVICE')) THEN
769       -- Check if PRM is installed
770       IF (PA_INSTALL.IS_PRM_LICENSED() = 'Y') THEN
771         -- Work Type is required
772         IF (p_work_type_id IS NULL) THEN
773           PA_UTILS.ADD_MESSAGE('PA','PA_WORK_TYPE_REQ');
774         END IF;
775       END IF;
776       null;
777     END IF;
778 
779     -- Check if there is any error. Get new Task Id if no error
780     l_msg_count := FND_MSG_PUB.count_msg;
781     IF (l_msg_count > 0) THEN
782       x_msg_count := l_msg_count;
783       IF (x_msg_count = 1) THEN
784         pa_interface_utils_pub.get_messages(
785           p_encoded => FND_API.G_TRUE,
786           p_msg_index => 1,
787           p_data => l_data,
788           p_msg_index_out => l_msg_index_out);
789         x_msg_data := l_data;
790       END IF;
791       RAISE FND_API.G_EXC_ERROR;
792     END IF;
793 
794 
795     -- Get Task Id
796    --Commented the following line and replaced with new one.
797    -- IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
798     IF p_task_id IS NULL THEN  --Added by Ansari
799       select PA_TASKS_S.NEXTVAL INTO l_new_task_id from sys.dual;
800     ELSE  --Added by Ansari
801       l_new_task_id := p_task_id;
802     END IF;
803 
804     -- Check if this is a Subtask or a Peer task
805 --HSIU, modified for structures
806     IF (p_peer_or_sub = 'SUB') AND
807        (p_reference_task_id IS NOT NULL OR p_reference_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
808 
809       -- Add as subtask
810 
811       -- Check create subtask ok
812       IF (p_calling_module IN ('FORMS', 'SELF_SERVICE')) THEN
813        --Call PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK
814         PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK(x_task_id => p_reference_task_id,
815           x_err_code => l_err_code,
816           x_err_stack => l_err_stack,
817           x_err_stage => l_err_stage
818           );
819         IF (l_err_code <> 0) THEN
820           PA_UTILS.ADD_MESSAGE('PA', substr(l_err_stage,1,30));
821         END IF;
822       END IF;
823 
824       -- Copy parent task attributes to task.
825       IF (p_calling_module IN ('FORMS', 'SELF_SERVICE')) THEN
826         --Select attributes from parent task (cursor)
827         OPEN ref_task;
828         FETCH ref_task INTO
829           TTASK_ID,
830           TTOP_TASK_ID,
831           TPARENT_TASK_ID,
832           TADDRESS_ID,
833           TREADY_TO_BILL_FLAG,
834           TREADY_TO_DISTRIBUTE_FLAG,
835           TCARRYING_OUT_ORG_ID,
836           TSERVICE_TYPE_CODE,
837           TTASK_MANAGER_PERSON_ID,
838           TCHARGEABLE,
839           TBILLABLE,
840           TLIMIT_TO_TXN_CONTROLS_FLAG,
841           TSTART_DATE,
842           TCOMPLETION_DATE,
843           TLABOR_BILL_RATE_ORG_ID,
844           TLABOR_STD_BILL_RATE_SCHDL,
845           TLABOR_SCHEDULE_FIXED_DATE,
846           TLABOR_SCHEDULE_DISCOUNT,
847           TNLR_BILL_RATE_ORG_ID,
848           TNLR_STD_BILL_RATE_SCHDL,
849           TNLR_SCHEDULE_FIXED_DATE,
850           TNLR_SCHEDULE_DISCOUNT,
851           TCOST_IND_RATE_SCH_ID,
852           TREV_IND_RATE_SCH_ID,
853           TINV_IND_RATE_SCH_ID,
854           TCOST_IND_SCH_FIXED_DATE,
855           TREV_IND_SCH_FIXED_DATE,
856           TINV_IND_SCH_FIXED_DATE,
857           TLABOR_SCH_TYPE,
858           TNLR_SCH_TYPE,
859           TALLOW_CROSS_CHARGE_FLAG,
860           TPROJECT_RATE_TYPE,
861           TPROJECT_RATE_DATE,
862           TCC_PROCESS_LABOR_FLAG,
863           TLABOR_TP_SCHEDULE_ID,
864           TLABOR_TP_FIXED_DATE,
865           TCC_PROCESS_NL_FLAG,
866           TNL_TP_SCHEDULE_ID,
867           TNL_TP_FIXED_DATE,
868           TRECEIVE_PROJECT_INVOICE_FLAG,
869           TWORK_TYPE_ID,
870           TJOB_BILL_RATE_SCHEDULE_ID,
871           TEMP_BILL_RATE_SCHEDULE_ID,
872 -- HY          TTASK_TYPE_CODE,
873 -- HY          TPRIORITY_CODE,
874 -- HY          TCRITICAL_FLAG,
875 -- HY          TMILESTONE_FLAG,
876 -- HY          TESTIMATED_START_DATE,
877 -- HY          TESTIMATED_END_DATE,
878           TSCHEDULED_START_DATE,
879           TSCHEDULED_FINISH_DATE,
880 -- HY          TESTIMATE_TO_COMPLETE_WORK,
881 -- HY          TSCHEDULED_WORK,
882 -- HY          TWORK_UNIT_CODE,
883 -- HY          TPROGRESS_STATUS_CODE,
884           TWBS_LEVEL,
885 -- HY          Tinc_proj_progress_flag,
886           Ttaskfunc_cost_rate_type,
887           Ttaskfunc_cost_rate_date,
888           Tnon_lab_std_bill_rt_Sch_id,
889           Tlabor_disc_reason_code,
890           Tnon_labor_disc_reason_code,
891 --PA L Capital Project changes 2872708
892       tretirement_cost_flag,
893       tcint_eligible_flag,
894       tcint_stop_date,
895 --End PA L Capital Project changes 2872708
896       /*FPM development for Project Setup */
897       l_customer_id,
898       l_revenue_accrual_method,
899       l_invoice_method,
900       TGEN_ETC_SOURCE_CODE;
901 
902         -- IF ref_task%NOTFOUND THEN
903           --This should not occur
904         -- END IF;
905         CLOSE ref_task;
906 
907         -- Setting parent and top task id
908         l_parent_task_id := TTASK_ID;
909         l_top_task_id := TTOP_TASK_ID;
910         TWBS_LEVEL := TWBS_LEVEL + 1;
911       END IF;
912 
913 --    ELSIF (p_peer_or_sub = 'PEER') THEN
914 -- HSIU, for creating the first task in a structure since
915 --  p_peer_or_sub is 'SUB' if reference is structure
916     ELSE
917       -- Add as peer task
918       -- Insert Peer task
919       OPEN ref_parent_task;
920       FETCH ref_parent_task INTO
921         TTASK_ID
922        ,TTOP_TASK_ID
923        ,TPARENT_TASK_ID
924        ,TADDRESS_ID
925        ,TREADY_TO_BILL_FLAG
926        ,TREADY_TO_DISTRIBUTE_FLAG
927        ,TCARRYING_OUT_ORG_ID
928        ,TSERVICE_TYPE_CODE
929        ,TTASK_MANAGER_PERSON_ID
930        ,TCHARGEABLE
931        ,TBILLABLE
932        ,TLIMIT_TO_TXN_CONTROLS_FLAG
933        ,TSTART_DATE
934        ,TCOMPLETION_DATE
935        ,TLABOR_BILL_RATE_ORG_ID
936        ,TLABOR_STD_BILL_RATE_SCHDL
937        ,TLABOR_SCHEDULE_FIXED_DATE
938        ,TLABOR_SCHEDULE_DISCOUNT
939        ,TNLR_BILL_RATE_ORG_ID
940        ,TNLR_STD_BILL_RATE_SCHDL
941        ,TNLR_SCHEDULE_FIXED_DATE
942        ,TNLR_SCHEDULE_DISCOUNT
943        ,TCOST_IND_RATE_SCH_ID
944        ,TREV_IND_RATE_SCH_ID
945        ,TINV_IND_RATE_SCH_ID
946        ,TCOST_IND_SCH_FIXED_DATE
947        ,TREV_IND_SCH_FIXED_DATE
948        ,TINV_IND_SCH_FIXED_DATE
949        ,TLABOR_SCH_TYPE
950        ,TNLR_SCH_TYPE
951        ,TALLOW_CROSS_CHARGE_FLAG
952        ,TPROJECT_RATE_TYPE
953        ,TPROJECT_RATE_DATE
954        ,TCC_PROCESS_LABOR_FLAG
955        ,TLABOR_TP_SCHEDULE_ID
956        ,TLABOR_TP_FIXED_DATE
957        ,TCC_PROCESS_NL_FLAG
958        ,TNL_TP_SCHEDULE_ID
959        ,TNL_TP_FIXED_DATE
960        ,TRECEIVE_PROJECT_INVOICE_FLAG
961        ,TWORK_TYPE_ID
962        ,TJOB_BILL_RATE_SCHEDULE_ID
963        ,TEMP_BILL_RATE_SCHEDULE_ID
964 -- HY       ,TTASK_TYPE_CODE
965 -- HY       ,TPRIORITY_CODE
966 -- HY       ,TCRITICAL_FLAG
967 -- HY       ,TMILESTONE_FLAG
968 -- HY       ,TESTIMATED_START_DATE
969 -- HY       ,TESTIMATED_END_DATE
970        ,TSCHEDULED_START_DATE
971        ,TSCHEDULED_FINISH_DATE
972 -- HY       ,TESTIMATE_TO_COMPLETE_WORK
973 -- HY       ,TSCHEDULED_WORK
974 -- HY       ,TWORK_UNIT_CODE
975 -- HY       ,TPROGRESS_STATUS_CODE
976        ,TWBS_LEVEL
977 -- HY       ,Tinc_proj_progress_flag
978        ,Ttaskfunc_cost_rate_type
979        ,Ttaskfunc_cost_rate_date
980        ,Tnon_lab_std_bill_rt_Sch_id
981        ,Tlabor_disc_reason_code
982        ,Tnon_labor_disc_reason_code
983 --bug 3032842
984 --PA L Capital Project changes 2872708
985       ,tretirement_cost_flag
986       ,tcint_eligible_flag
987       ,tcint_stop_date
988 --End PA L Capital Project changes 2872708
989 --end bug 3032842
990       /*FPM development for Project Setup */
991       ,l_customer_id
992       ,l_revenue_accrual_method
993       ,l_invoice_method
994        ,TGEN_ETC_SOURCE_CODE;
995       IF (ref_parent_task%NOTFOUND) THEN
996         --DEFAULT FROM PROJECT
997         OPEN top_task;
998         FETCH top_task INTO
999           TTASK_ID
1000          ,TTOP_TASK_ID
1001          ,TPARENT_TASK_ID
1002          ,TADDRESS_ID
1003          ,TREADY_TO_BILL_FLAG
1004          ,TREADY_TO_DISTRIBUTE_FLAG
1005          ,TCARRYING_OUT_ORG_ID
1006          ,TSERVICE_TYPE_CODE
1007          ,l_project_type_class_code
1008          ,TTASK_MANAGER_PERSON_ID
1009          ,TCHARGEABLE
1010          ,TBILLABLE
1011          ,TLIMIT_TO_TXN_CONTROLS_FLAG
1012          ,TSTART_DATE
1013          ,TCOMPLETION_DATE
1014          ,TLABOR_BILL_RATE_ORG_ID
1015          ,TLABOR_STD_BILL_RATE_SCHDL
1016          ,TLABOR_SCHEDULE_FIXED_DATE
1017          ,TLABOR_SCHEDULE_DISCOUNT
1018          ,TNLR_BILL_RATE_ORG_ID
1019          ,TNLR_STD_BILL_RATE_SCHDL
1020          ,TNLR_SCHEDULE_FIXED_DATE
1021          ,TNLR_SCHEDULE_DISCOUNT
1022          ,TCOST_IND_RATE_SCH_ID
1023          ,TREV_IND_RATE_SCH_ID
1024          ,TINV_IND_RATE_SCH_ID
1025          ,TCOST_IND_SCH_FIXED_DATE
1026          ,TREV_IND_SCH_FIXED_DATE
1027          ,TINV_IND_SCH_FIXED_DATE
1028          ,TLABOR_SCH_TYPE
1029          ,TNLR_SCH_TYPE
1030          ,TALLOW_CROSS_CHARGE_FLAG
1031          ,TPROJECT_RATE_TYPE
1032          ,TPROJECT_RATE_DATE
1033          ,TCC_PROCESS_LABOR_FLAG
1034          ,TLABOR_TP_SCHEDULE_ID
1035          ,TLABOR_TP_FIXED_DATE
1036          ,TCC_PROCESS_NL_FLAG
1037          ,TNL_TP_SCHEDULE_ID
1038          ,TNL_TP_FIXED_DATE
1039          ,TRECEIVE_PROJECT_INVOICE_FLAG
1040          ,TWORK_TYPE_ID
1041          ,TJOB_BILL_RATE_SCHEDULE_ID
1042          ,TEMP_BILL_RATE_SCHEDULE_ID
1043          ,TTASK_TYPE_CODE
1044          ,TPRIORITY_CODE
1045          ,TCRITICAL_FLAG
1046          ,TMILESTONE_FLAG
1047          ,TESTIMATED_START_DATE
1048          ,TESTIMATED_END_DATE
1049          ,TSCHEDULED_START_DATE
1050          ,TSCHEDULED_FINISH_DATE
1051          ,TESTIMATE_TO_COMPLETE_WORK
1052          ,TSCHEDULED_WORK
1053          ,TWORK_UNIT_CODE
1054          ,TPROGRESS_STATUS_CODE
1055          ,TWBS_LEVEL
1056 --bug 3032842
1057 --PA L Capital Project changes 2872708
1058       ,tretirement_cost_flag
1059       ,tcint_eligible_flag
1060        /*FPM development for Project Setup */
1061       ,l_revenue_accrual_method
1062       ,l_invoice_method
1063 --End PA L Capital Project changes 2872708
1064 --end bug 3032842
1065          ,TGEN_ETC_SOURCE_CODE
1066 	 ,Tnon_lab_std_bill_rt_Sch_id ;    -- Bug 4963525
1067         CLOSE top_task;
1068 
1069         TADDRESS_ID := PA_TASKS_MAINT_UTILS.DEFAULT_ADDRESS_ID(p_project_id);
1070         l_parent_task_id := NULL;
1071         l_top_task_id := l_new_task_id;
1072         /*FPM development for Project Setup */
1073         IF l_project_type_class_code ='CONTRACT' THEN
1074           open top_task_customer;
1075           Fetch top_task_customer into l_customer_id;
1076           close top_task_customer;
1077 
1078           TBILLABLE := 'Y'; --Bug 7524711
1079 
1080         END IF;
1081 
1082       ELSE
1083         -- Peer task found.
1084         l_parent_task_id := TTASK_ID;
1085         l_top_task_id := TTOP_TASK_ID;
1086         TWBS_LEVEL := TWBS_LEVEL + 1;
1087       END IF;
1088       CLOSE ref_parent_task;
1089     END IF;
1090 
1091 l_msg_count := FND_MSG_PUB.count_msg;  --commented by ansari
1092 
1093     IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
1094       --Check Start Date
1095       IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1096         PA_TASKS_MAINT_UTILS.Check_Start_Date(
1097           p_project_id => p_project_id,
1098           p_parent_task_id => l_parent_task_id,
1099           p_task_id => NULL,
1100           p_start_date => p_task_start_date,
1101           x_return_status => l_ret,
1102           x_msg_count => l_msg_cnt,
1103           x_msg_data => l_msg_data);
1104         IF (l_ret <> 'S') THEN
1105           PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
1106         END IF;
1107       END IF;
1108 
1109 l_msg_count := FND_MSG_PUB.count_msg;
1110 
1111       --Check Completion Date
1112       IF (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1113         PA_TASKS_MAINT_UTILS.Check_End_Date(
1114           p_project_id => p_project_id,
1115           p_parent_task_id => l_parent_task_id,
1116           p_task_id => NULL,
1117           p_end_date => p_task_completion_date,
1118           x_return_status => l_ret,
1119           x_msg_count => l_msg_cnt,
1120           x_msg_data => l_msg_data);
1121         IF (l_ret <> 'S') THEN
1122           PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
1123         END IF;
1124       END IF;
1125 
1126 
1127 l_msg_count := FND_MSG_PUB.count_msg;
1128 
1129 
1130 
1131       --Start Commenting  by rtarway for BUG 3927343
1132       -- These  checks are commented because schedule dates are not stored in pa_tasks.
1133 
1134       --Check Schedule Dates
1135       --IF (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
1136       --    p_scheduled_start_date IS NULL) AND
1137       --   (p_scheduled_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
1138       --    p_scheduled_finish_date IS NULL) THEN
1139       --  PA_TASKS_MAINT_UTILS.CHECK_SCHEDULE_DATES(
1140       --    p_project_id => p_project_id,
1141       --    p_sch_start_date => p_scheduled_start_date,
1142       --    p_sch_end_date => p_scheduled_finish_date,
1143       --    x_return_status => l_ret,
1144       --    x_msg_count => l_msg_cnt,
1145       --    x_msg_data => l_msg_data);
1146         --commented to suppress redundant messages appearing on
1147         --create task page
1148         /*IF (l_ret <> 'S') THEN
1149           PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
1150         END IF;*/
1151      -- END IF;
1152 
1153 
1154 --l_msg_count := FND_MSG_PUB.count_msg;
1155 
1156       --Check Estimate Dates
1157   --    IF (p_estimated_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
1158     --      p_estimated_start_date IS NULL) AND
1159     --     (p_estimated_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
1160     --      p_estimated_end_date IS NULL) THEN
1161     --    PA_TASKS_MAINT_UTILS.CHECK_ESTIMATE_DATES(
1162     --      p_project_id => p_project_id,
1163     --      p_estimate_start_date => p_estimated_start_date,
1164     --      p_estimate_end_date => p_estimated_end_date,
1165     --     x_return_status => l_ret,
1166     --      x_msg_count => l_msg_cnt,
1167     --      x_msg_data => l_msg_data);
1168     --    IF (l_ret <> 'S') THEN
1169     --      PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
1170     --    END IF;
1171     --  END IF;
1172 
1173 --l_msg_count := FND_MSG_PUB.count_msg;
1174 
1175       --Check Actual Dates
1176   --    IF (p_actual_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
1177       --    p_actual_start_date IS NULL) AND
1178     --     (p_actual_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
1179         --  p_actual_finish_date IS NULL) THEN
1180        -- PA_TASKS_MAINT_UTILS.CHECK_ACTUAL_DATES(
1181         --  p_project_id => p_project_id,
1182         --  p_actual_start_date => p_actual_start_date,
1183         --  p_actual_end_date => p_actual_finish_date,
1184         --  x_return_status => l_ret,
1185         --  x_msg_count => l_msg_cnt,
1186         --  x_msg_data => l_msg_data);
1187        -- IF (l_ret <> 'S') THEN
1188         --  PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
1189        -- END IF;
1190       --END IF;
1191        --End Commenting  by rtarway for BUG 3927343
1192 
1193     END IF;
1194 
1195     l_msg_count := FND_MSG_PUB.count_msg;
1196     IF (l_msg_count > 0) THEN
1197       x_msg_count := l_msg_count;
1198       IF (x_msg_count = 1) THEN
1199         pa_interface_utils_pub.get_messages(
1200           p_encoded => FND_API.G_TRUE,
1201           p_msg_index => 1,
1202           p_data => l_data,
1203           p_msg_index_out => l_msg_index_out);
1204         x_msg_data := l_data;
1205       END IF;
1206       RAISE FND_API.G_EXC_ERROR;
1207     END IF;
1208 
1209 
1210     IF (p_calling_module IN ('FORMS', 'SELF_SERVICE')) THEN
1211 
1212       -- If Work Type Id is Null, then default from Project
1213       IF TWORK_TYPE_ID IS NULL THEN
1214         OPEN work_type_from_proj;
1215         FETCH work_type_from_proj INTO TWORK_TYPE_ID, TPROJECT_TYPE, CARRYING_OUT_ORG_ID_TMP;
1216         IF TWORK_TYPE_ID IS NULL THEN
1217           OPEN work_type_from_proj_type(TPROJECT_TYPE);
1218           FETCH work_type_from_proj_type INTO TWORK_TYPE_ID;
1219           CLOSE work_type_from_proj_type;
1220         END IF;
1221         CLOSE work_type_from_proj;
1222       END IF;
1223 
1224       -- Set Billable Flag base on work type
1225       IF TWORK_TYPE_ID IS NOT NULL THEN
1226         OPEN billable_flag_c(TWORK_TYPE_ID);
1227         FETCH billable_flag_c INTO TBILLABLE;
1228         CLOSE billable_flag_c;
1229       END IF;
1230 
1231     END IF;
1232 
1233 
1234     -- Replacing with user-entered values
1235     IF (p_task_manager_person_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1236       TTASK_MANAGER_PERSON_ID := p_task_manager_person_id;
1237     END IF;
1238 
1239     IF (p_carrying_out_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1240       TCARRYING_OUT_ORG_ID := p_carrying_out_organization_id;
1241     END IF;
1242     -- If Organization Id is Null, then default from Project
1243     IF (TCARRYING_OUT_ORG_ID IS NULL) THEN
1244       TCARRYING_OUT_ORG_ID := CARRYING_OUT_ORG_ID_TMP; -- From Project
1245     END IF;
1246 
1247     IF (p_task_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1248       TTASK_TYPE_CODE := p_task_type_code;
1249     END IF;
1250 
1251     IF (p_priority_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1252       TPRIORITY_CODE := p_priority_code;
1253     END IF;
1254 
1255     IF (p_work_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1256       TWORK_TYPE_ID := p_work_type_id;
1257     END IF;
1258 
1259     IF (p_service_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1260       TSERVICE_TYPE_CODE := p_service_type_code;
1261     END IF;
1262 
1263     IF (p_milestone_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1264       TMILESTONE_FLAG := p_milestone_flag;
1265     END IF;
1266 
1267     IF (p_critical_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1268       TCRITICAL_FLAG := p_critical_flag;
1269     END IF;
1270 
1271     IF (p_chargeable_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1272       TCHARGEABLE := p_chargeable_flag;
1273     END IF;
1274 
1275     IF (p_billable_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1276       TBILLABLE := p_billable_flag;
1277     END IF;
1278 
1279     -- Check Allow Charges
1280     --Chargeable flag, receive project invoice flag validation
1281     IF (p_receive_project_invoice_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1282       PA_TASKS_MAINT_UTILS.Check_Chargeable_Flag( p_chargeable_flag => TCHARGEABLE,
1283                        p_receive_project_invoice_flag => p_receive_project_invoice_flag,
1284                        p_project_type => TPROJECT_TYPE,
1285                p_project_id   => p_project_id, -- Added for bug#3512486
1286                        x_receive_project_invoice_flag => TRECEIVE_PROJECT_INVOICE_FLAG);
1287 --      TRECEIVE_PROJECT_INVOICE_FLAG := p_receive_project_invoice_flag;
1288     END IF;
1289 
1290     IF (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1291       TSCHEDULED_START_DATE := p_scheduled_start_date;
1292     END IF;
1293 
1294     IF (p_scheduled_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1295       TSCHEDULED_FINISH_DATE := p_scheduled_finish_date;
1296     END IF;
1297 
1298     IF (p_estimated_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1299       TESTIMATED_START_DATE := p_estimated_start_date;
1300     ELSE
1301       -- Default from schedule
1302       TESTIMATED_START_DATE := TSCHEDULED_START_DATE;
1303     END IF;
1304 
1305     IF (p_estimated_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1306       TESTIMATED_END_DATE := p_estimated_end_date;
1307     ELSE
1308       -- Default from schedule
1309       TESTIMATED_END_DATE := TSCHEDULED_FINISH_DATE;
1310     END IF;
1311 
1312 
1313     IF (p_actual_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1314       TACTUAL_START_DATE := p_actual_start_date;
1315     END IF;
1316 
1317     IF (p_actual_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1318       TACTUAL_FINISH_DATE := p_actual_finish_date;
1319     END IF;
1320 
1321 
1322     IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1323       TSTART_DATE := p_task_start_date;
1324 --    ELSE
1325       -- Default from schedule
1326 --      TSTART_DATE := TSCHEDULED_START_DATE;
1327     END IF;
1328 
1329     IF (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1330       TCOMPLETION_DATE := p_task_completion_date;
1331 --    ELSE
1332       -- Default from schedule
1333 --      TCOMPLETION_DATE := TSCHEDULED_FINISH_DATE;
1334     END IF;
1335 
1336     IF (p_baseline_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1337       TBASELINE_START_DATE := p_baseline_start_date;
1338     END IF;
1339 
1340     IF (p_baseline_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1341       TBASELINE_END_DATE := p_baseline_end_date;
1342     END IF;
1343 
1344 
1345     IF (p_obligation_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1346       TOBLIGATION_START_DATE := p_obligation_start_date;
1347     END IF;
1348 
1349     IF (p_obligation_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1350       TOBLIGATION_END_DATE := p_obligation_end_date;
1351     END IF;
1352 
1353     IF (p_estimate_to_complete_work <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1354       TESTIMATE_TO_COMPLETE_WORK := p_estimate_to_complete_work;
1355     END IF;
1356 
1357     IF (p_baseline_work <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1358       TBASELINE_WORK := p_baseline_work;
1359     END IF;
1360 
1361     IF (p_scheduled_work <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1362       TSCHEDULED_WORK := p_scheduled_work;
1363     END IF;
1364 
1365     IF (p_actual_work_to_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1366       TACTUAL_WORK_TO_DATE := p_actual_work_to_date;
1367     END IF;
1368 
1369     IF (p_work_unit <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1370       TWORK_UNIT_CODE := p_work_unit;
1371     END IF;
1372 
1373     IF (p_progress_status_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1374       TPROGRESS_STATUS_CODE := p_progress_status_code;
1375     END IF;
1376 
1377     IF (p_job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1378       TJOB_BILL_RATE_SCHEDULE_ID := p_job_bill_rate_schedule_id;
1379     END IF;
1380 
1381     IF (p_emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1382       TEMP_BILL_RATE_SCHEDULE_ID := p_emp_bill_rate_schedule_id;
1383     END IF;
1384 
1385     IF (p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1386       TPA_PARENT_TASK_ID := p_pa_parent_task_id;
1387     END IF;
1388 
1389     IF (p_address_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1390       TADDRESS_ID := p_address_id;
1391     END IF;
1392 
1393     IF (p_ready_to_bill_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1394       TREADY_TO_BILL_FLAG := p_ready_to_bill_flag;
1395     END IF;
1396 
1397     IF (p_ready_to_distribute_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1398       TREADY_TO_DISTRIBUTE_FLAG := p_ready_to_distribute_flag;
1399     END IF;
1400 
1401     IF (p_limit_to_txn_controls_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1402       TLIMIT_TO_TXN_CONTROLS_FLAG := p_limit_to_txn_controls_flag;
1403     END IF;
1404 
1405     IF (p_labor_bill_rate_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1406       TLABOR_BILL_RATE_ORG_ID := p_labor_bill_rate_org_id;
1407     END IF;
1408 
1409     IF (p_labor_std_bill_rate_schdl <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1410       TLABOR_STD_BILL_RATE_SCHDL := p_labor_std_bill_rate_schdl;
1411     END IF;
1412 
1413     IF (p_labor_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1414       TLABOR_SCHEDULE_FIXED_DATE := p_labor_schedule_fixed_date;
1415     END IF;
1416 
1417     IF (p_labor_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1418       TLABOR_SCHEDULE_DISCOUNT := p_labor_schedule_discount;
1419     END IF;
1420 
1421     IF (p_nl_bill_rate_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1422       TNLR_BILL_RATE_ORG_ID := p_nl_bill_rate_org_id;
1423     END IF;
1424 
1425     IF (p_nl_std_bill_rate_schdl <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1426       TNLR_STD_BILL_RATE_SCHDL := p_nl_std_bill_rate_schdl;
1427     END IF;
1428 
1429     IF (p_nl_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1430       TNLR_SCHEDULE_FIXED_DATE := p_nl_schedule_fixed_date;
1431     END IF;
1432 
1433     IF (p_nl_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1434       TNLR_SCHEDULE_DISCOUNT := p_nl_schedule_discount;
1435     END IF;
1436 
1437     IF (p_labor_cost_multiplier_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1438       TLABOR_COST_MULTIPLIER_NAME := p_labor_cost_multiplier_name;
1439     END IF;
1440 
1441     IF (p_cost_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1442       TCOST_IND_RATE_SCH_ID := p_cost_ind_rate_sch_id;
1443     END IF;
1444 
1445     IF (p_rev_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1446       TREV_IND_RATE_SCH_ID := p_rev_ind_rate_sch_id;
1447     END IF;
1448 
1449     IF (p_inv_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1450       TINV_IND_RATE_SCH_ID := p_inv_ind_rate_sch_id;
1451     END IF;
1452 
1453     IF (p_cost_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1454       TCOST_IND_SCH_FIXED_DATE := p_cost_ind_sch_fixed_date;
1455     END IF;
1456 
1457     IF (p_rev_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1458       TREV_IND_SCH_FIXED_DATE := p_rev_ind_sch_fixed_date;
1459     END IF;
1460 
1461     IF (p_inv_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1462       TINV_IND_SCH_FIXED_DATE := p_inv_ind_sch_fixed_date;
1463     END IF;
1464 
1465     IF (p_labor_sch_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1466       TLABOR_SCH_TYPE := p_labor_sch_type;
1467     END IF;
1468 
1469     IF (p_nl_sch_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1470       TNLR_SCH_TYPE := p_nl_sch_type;
1471     END IF;
1472 
1473     IF (p_early_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1474       TEARLY_START_DATE := p_early_start_date;
1475     END IF;
1476 
1477     IF (p_early_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1478       TEARLY_FINISH_DATE := p_early_finish_date;
1479     END IF;
1480 
1481     IF (p_late_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1482       TLATE_START_DATE := p_late_start_date;
1483     END IF;
1484 
1485     IF (p_late_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1486       TLATE_FINISH_DATE := p_late_finish_date;
1487     END IF;
1488 
1489     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1490       TATTRIBUTE_CATEGORY := p_attribute_category;
1491     END IF;
1492 
1493     IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1494       TATTRIBUTE1 := p_attribute1;
1495     END IF;
1496 
1497     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1498       TATTRIBUTE2 := p_attribute2;
1499     END IF;
1500 
1501     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1502       TATTRIBUTE3 := p_attribute3;
1503     END IF;
1504 
1505     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1506       TATTRIBUTE4 := p_attribute4;
1507     END IF;
1508 
1509     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1510       TATTRIBUTE5 := p_attribute5;
1511     END IF;
1512 
1513     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1514       TATTRIBUTE6 := p_attribute6;
1515     END IF;
1516 
1517     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1518       TATTRIBUTE7 := p_attribute7;
1519     END IF;
1520 
1521     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1522       TATTRIBUTE8 := p_attribute8;
1523     END IF;
1524 
1525     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1526       TATTRIBUTE9 := p_attribute9;
1527     END IF;
1528 
1529     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1530       TATTRIBUTE10 := p_attribute10;
1531     END IF;
1532 
1533     IF (p_allow_cross_charge_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1534       TALLOW_CROSS_CHARGE_FLAG := p_allow_cross_charge_flag;
1535     END IF;
1536 
1537     IF (p_project_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1538       TPROJECT_RATE_DATE := p_project_rate_date;
1539     END IF;
1540 
1541     IF (p_project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1542       TPROJECT_RATE_TYPE := p_project_rate_type;
1543     END IF;
1544 
1545     IF (p_cc_process_labor_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1546       TCC_PROCESS_LABOR_FLAG := p_cc_process_labor_flag;
1547     END IF;
1548 
1549     IF (p_labor_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1550       TLABOR_TP_SCHEDULE_ID := p_labor_tp_schedule_id;
1551     END IF;
1552 
1553     IF (p_labor_tp_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1554       TLABOR_TP_FIXED_DATE := p_labor_tp_fixed_date;
1555     END IF;
1556 
1557     IF (p_cc_process_nl_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1558       TCC_PROCESS_NL_FLAG := p_cc_process_nl_flag;
1559     END IF;
1560 
1561     IF (p_nl_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
1562       TNL_TP_SCHEDULE_ID := p_nl_tp_schedule_id;
1563     END IF;
1564 
1565     IF (p_nl_tp_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
1566       TNL_TP_FIXED_DATE := p_nl_tp_fixed_date;
1567     END IF;
1568 
1569     IF (p_task_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1570       TDESCRIPTION := substrb( p_task_description, 1, 250); --Bug 4297289
1571     END IF;
1572 
1573     IF (p_inc_proj_progress_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1574       Tinc_proj_progress_flag := p_inc_proj_progress_flag;
1575     END IF;
1576 
1577     IF (p_taskfunc_cost_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_taskfunc_cost_rate_type IS NULL ) THEN
1578        ttaskfunc_cost_rate_type:= p_taskfunc_cost_rate_type;
1579     END IF;
1580 
1581     IF (p_taskfunc_cost_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_taskfunc_cost_rate_date IS NULL ) THEN
1582        ttaskfunc_cost_rate_date:= p_taskfunc_cost_rate_date;
1583     END IF;
1584 
1585     IF (p_non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_non_lab_std_bill_rt_sch_id IS NULL ) THEN
1586        tnon_lab_std_bill_rt_sch_id:= p_non_lab_std_bill_rt_sch_id;
1587     END IF;
1588 
1589 --  FP.K changes by msundare
1590     IF (p_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1591 p_labor_disc_reason_code IS NULL ) THEN
1592        Tlabor_disc_reason_code:= p_labor_disc_reason_code;
1593     END IF;
1594 
1595     IF (p_non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1596 p_non_labor_disc_reason_code IS NULL ) THEN
1597        Tnon_labor_disc_reason_code:= p_non_labor_disc_reason_code;
1598     END IF;
1599 
1600 --PA L Capital Project Changes 2872708
1601     IF (p_retirement_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1602         p_retirement_cost_flag IS NULL ) THEN
1603        tretirement_cost_flag:= p_retirement_cost_flag;
1604     END IF;
1605 
1606     IF (p_cint_eligible_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
1607         p_cint_eligible_flag IS NULL ) THEN
1608         tcint_eligible_flag:= p_cint_eligible_flag;
1609     END IF;
1610 
1611     IF (p_cint_stop_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
1612         p_cint_stop_date IS NULL ) THEN
1613         tcint_stop_date:= p_cint_stop_date;
1614     END IF;
1615 
1616 --End PA L Capital Project Changes 2872708
1617 
1618 --added by rtarway for BUG 3924597, etc sorce defaulting.
1619  --1. get the structure_share_code
1620    l_wp_separate_from_fin := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id );
1621 --end by rtarway for BUG 3924597
1622     -- Get Display Sequence
1623 
1624 
1625   IF p_reference_task_id IS NOT NULL          --Modified by Ansari. Added logic to create top task.
1626   THEN
1627     l_sequence_number := PA_TASKS_MAINT_UTILS.Get_Sequence_Number(p_peer_or_sub,
1628                                p_project_id,
1629                                p_reference_task_id);
1630 
1631     --added by rtarway for BUG 3924597, etc sorce defaulting.
1632     --if TGEN_ETC_SOURCE_CODE is null, i.e. not defaulted from top tasks , then we should default this value
1633       if ( TGEN_ETC_SOURCE_CODE  is null or TGEN_ETC_SOURCE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) then
1634           if (p_calling_module = 'FORMS') then
1635                TGEN_ETC_SOURCE_CODE := 'FINANCIAL_PLAN';
1636           else
1637                if (nvl(l_wp_separate_from_fin,'N') = 'N') then
1638                     TGEN_ETC_SOURCE_CODE := 'WORKPLAN_RESOURCES';
1639                else
1640                     TGEN_ETC_SOURCE_CODE := 'FINANCIAL_PLAN';
1641                end if;
1642           end if;
1643       end if;
1644   ELSE
1645     --No reference task is passed . Its assumed top task.
1646     l_sequence_number := 1;
1647     --Added by rtarway for BUG 3924597, Default the ETC_SOURCE_CODE for top tasks
1648     if (p_calling_module = 'FORMS') then
1649      TGEN_ETC_SOURCE_CODE := 'FINANCIAL_PLAN';
1650     else
1651         if (nvl(l_wp_separate_from_fin,'N') = 'N') then
1652           TGEN_ETC_SOURCE_CODE := 'WORKPLAN_RESOURCES';
1653         else
1654           TGEN_ETC_SOURCE_CODE := 'FINANCIAL_PLAN';
1655         end if;
1656     end if;
1657   END IF;
1658 
1659 
1660     -- Call Table Handler
1661     --Insert using table handler
1662     PA_TASKS_PKG.insert_row(
1663       l_rowid,
1664       l_new_task_id,
1665       p_project_id,
1666       p_task_number,
1667       sysdate,
1668       FND_GLOBAL.USER_ID, -- created_by
1669       sysdate,
1670       FND_GLOBAL.USER_ID, --  Last_Updated_By
1671       FND_GLOBAL.USER_ID, --  Last_Update_Login
1672       p_task_name,
1673       p_long_task_name,
1674       l_top_task_id,
1675       TWBS_LEVEL,
1676       TREADY_TO_BILL_FLAG,
1677       TREADY_TO_DISTRIBUTE_FLAG,
1678       l_parent_task_Id,
1679       TDESCRIPTION,
1680       TCARRYING_OUT_ORG_ID,
1681       TSERVICE_TYPE_CODE,
1682       p_task_manager_person_id,
1683       TCHARGEABLE,
1684       TBILLABLE,
1685       TLIMIT_TO_TXN_CONTROLS_FLAG,
1686       TSTART_DATE,
1687       TCOMPLETION_DATE,
1688       TADDRESS_ID,
1689       TLABOR_BILL_RATE_ORG_ID,
1690       TLABOR_STD_BILL_RATE_SCHDL,
1691       TLABOR_SCHEDULE_FIXED_DATE,
1692       TLABOR_SCHEDULE_DISCOUNT,
1693       TNLR_BILL_RATE_ORG_ID,
1694       TNLR_STD_BILL_RATE_SCHDL,
1695       TNLR_SCHEDULE_FIXED_DATE,
1696       TNLR_SCHEDULE_DISCOUNT,
1697       TLABOR_COST_MULTIPLIER_NAME, -- Labor_Cost_Multiplier_Name
1698       TATTRIBUTE_CATEGORY, -- Attribute_Category
1699       TATTRIBUTE1, -- Attribute1
1700       TATTRIBUTE2, -- Attribute2
1701       TATTRIBUTE3, -- Attribute3
1702       TATTRIBUTE4, -- Attribute4
1703       TATTRIBUTE5, -- Attribute5
1704       TATTRIBUTE6, -- Attribute6
1705       TATTRIBUTE7, -- Attribute7
1706       TATTRIBUTE8, -- Attribute8
1707       TATTRIBUTE9, -- Attribute9
1708       TATTRIBUTE10, -- Attribute10
1709       TCOST_IND_RATE_SCH_ID,
1710       TREV_IND_RATE_SCH_ID,
1711       TINV_IND_RATE_SCH_ID,
1712       TCOST_IND_SCH_FIXED_DATE,
1713       TREV_IND_SCH_FIXED_DATE,
1714       TINV_IND_SCH_FIXED_DATE,
1715       TLABOR_SCH_TYPE,
1716       TNLR_SCH_TYPE,
1717       TALLOW_CROSS_CHARGE_FLAG,
1718       TPROJECT_RATE_DATE,
1719       TPROJECT_RATE_TYPE,
1720       TCC_PROCESS_LABOR_FLAG,
1721       TLABOR_TP_SCHEDULE_ID,
1722       TLABOR_TP_FIXED_DATE,
1723       TCC_PROCESS_NL_FLAG,
1724       TNL_TP_SCHEDULE_ID,
1725       TNL_TP_FIXED_DATE,
1726       TRECEIVE_PROJECT_INVOICE_FLAG,
1727       TWORK_TYPE_ID,
1728       TJOB_BILL_RATE_SCHEDULE_ID,
1729       TEMP_BILL_RATE_SCHEDULE_ID,
1730 
1731       /*TTASK_TYPE_CODE,
1732       l_sequence_number, --DISPLAY SEQUENCE
1733       TPRIORITY_CODE,
1734       TCRITICAL_FLAG,
1735       TMILESTONE_FLAG,
1736       TSCHEDULED_START_DATE,
1737       TSCHEDULED_FINISH_DATE,
1738       TACTUAL_START_DATE, -- Actual Start Date
1739       TACTUAL_FINISH_DATE, -- Actual Finish Date
1740       TESTIMATED_START_DATE,
1741       TESTIMATED_END_DATE,
1742       TBASELINE_START_DATE,
1743       TBASELINE_END_DATE,
1744       TOBLIGATION_START_DATE,
1745       TOBLIGATION_END_DATE,
1746       TESTIMATE_TO_COMPLETE_WORK,
1747       TBASELINE_WORK,
1748       TSCHEDULED_WORK,
1749       TACTUAL_WORK_TO_DATE,
1750       TWORK_UNIT_CODE,
1751       TPROGRESS_STATUS_CODE,
1752       Tinc_proj_progress_flag,
1753 
1754       1, --Record version Number */
1755       ttaskfunc_cost_rate_type,
1756       ttaskfunc_cost_rate_date,
1757       tnon_lab_std_bill_rt_sch_id,
1758       Tlabor_disc_reason_code,
1759       Tnon_labor_disc_reason_code,
1760 --PA L Capital Project Changes 2872708
1761       NVL( tretirement_cost_flag, 'N'),
1762       NVL( tcint_eligible_flag, 'N'),
1763       tcint_stop_date,
1764 --End PA L Capital Project Changes 2872708
1765 
1766       /*FPM development for Project Setup */
1767       l_customer_id,
1768       l_revenue_accrual_method,
1769       l_invoice_method,
1770       TGEN_ETC_SOURCE_CODE
1771       );
1772 
1773     -- Date Roll-up
1774 
1775 
1776     -- Update parent task chargeable and receive project invoice flags
1777     --   if creating subtask
1778     IF (p_peer_or_sub = 'SUB') THEN
1779       IF (p_calling_module IN ('FORMS', 'SELF_SERVICE')) THEN
1780         -- Set parent task chargeable flag to 'N' and set
1781         -- Parent Task Receive_Project_Invoice_Flag to 'N'
1782         -- This should be performed after the task is added.
1783         UPDATE PA_TASKS
1784         SET
1785         CHARGEABLE_FLAG = 'N',
1786         RECEIVE_PROJECT_INVOICE_FLAG = 'N',
1787         RECORD_VERSION_NUMBER = nvl(RECORD_VERSION_NUMBER,0)+1,
1788         last_updated_by = FND_GLOBAL.USER_ID,
1789         last_update_login = FND_GLOBAL.USER_ID,
1790         last_update_date = sysdate
1791         WHERE TASK_ID = l_parent_task_Id;
1792       END IF;
1793     END IF;
1794 
1795 
1796 
1797     x_return_status := FND_API.G_RET_STS_SUCCESS;
1798     p_task_id := l_new_task_id;
1799     x_display_seq := l_sequence_number;
1800   EXCEPTION
1801     WHEN FND_API.G_EXC_ERROR THEN
1802       IF (p_commit = FND_API.G_TRUE) THEN
1803         ROLLBACK to CREATE_TASK_PRIVATE;
1804       END IF;
1805       x_msg_count := FND_MSG_PUB.count_msg;
1806       x_return_status := FND_API.G_RET_STS_ERROR;
1807     WHEN OTHERS THEN
1808       IF (p_commit = FND_API.G_TRUE) THEN
1809         ROLLBACK to CREATE_TASK_PRIVATE;
1810       END IF;
1811       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1812       x_msg_count := FND_MSG_PUB.count_msg;
1813       --put message
1814       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
1815                               p_procedure_name => 'CREATE_TASK',
1816                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1817       RAISE;
1818   END CREATE_TASK;
1819 
1820 -- API name                      : UPDATE_TASK
1821 -- Type                          : Private Procedure
1822 -- Pre-reqs                      : None
1823 -- Return Value                  : N/A
1824 -- Parameters
1825 --   p_api_version                       IN  NUMBER      := 1.0
1826 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1827 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1828 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1829 --   p_validation_level                  IN  VARCHAR2    := 100
1830 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1831 --   p_debug_mode                        IN  VARCHAR2    := 'N'
1832 --   p_project_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1833 --   p_task_id                           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1834 --   p_task_number                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1835 --   p_task_name                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1836 --   p_long_task_name                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1837 --   p_task_description                  IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1838 --   p_task_manager_person_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1839 --   p_carrying_out_organization_id      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1840 --   p_task_type_code                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1841 --   p_priority_code                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1842 --   p_work_type_id                      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1843 --   p_service_type_code                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1844 --   p_milestone_flag                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1845 --   p_critical_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1846 --   p_chargeable_flag                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1847 --   p_billable_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1848 --   p_receive_project_invoice_flag      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1849 --   p_scheduled_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1850 --   p_scheduled_finish_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1851 --   p_estimated_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1852 --   p_estimated_end_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1853 --   p_actual_start_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1854 --   p_actual_finish_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1855 --   p_task_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1856 --   p_task_completion_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1857 --   p_baseline_start_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1858 --   p_baseline_end_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1859 --   p_obligation_start_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1860 --   p_obligation_end_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1861 --   p_estimate_to_complete_work         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1862 --   p_baseline_work                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1863 --   p_scheduled_work                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1864 --   p_actual_work_to_date               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1865 --   p_work_unit                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1866 --   p_progress_status_code              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1867 --   p_job_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1868 --   p_emp_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1869 --   p_pm_product_code                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1870 --   p_pm_project_reference              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1871 --   p_pm_task_reference                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1872 --   p_pm_parent_task_reference          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1873 --   p_top_task_id                       IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1874 --   p_wbs_level                         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1875 --   p_parent_task_id                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1876 --   p_display_sequence                  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1877 --   p_address_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1878 --   p_ready_to_bill_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1879 --   p_ready_to_distribute_flag          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1880 --   p_limit_to_txn_controls_flag        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1881 --   p_labor_bill_rate_org_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1882 --   p_labor_std_bill_rate_schdl         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1883 --   p_labor_schedule_fixed_date         IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1884 --   p_labor_schedule_discount           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1885 --   p_nl_bill_rate_org_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1886 --   p_nl_std_bill_rate_schdl            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1887 --   p_nl_schedule_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1888 --   p_nl_schedule_discount              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1889 --   p_labor_cost_multiplier_name        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1890 --   p_cost_ind_rate_sch_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1891 --   p_rev_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1892 --   p_inv_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1893 --   p_cost_ind_sch_fixed_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1894 --   p_rev_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1895 --   p_inv_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1896 --   p_labor_sch_type                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1897 --   p_nl_sch_type                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1898 --   p_early_start_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1899 --   p_early_finish_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1900 --   p_late_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1901 --   p_late_finish_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1902 --   p_attribute_category                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1903 --   p_attribute1                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1904 --   p_attribute2                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1905 --   p_attribute3                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1906 --   p_attribute4                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1907 --   p_attribute5                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1908 --   p_attribute6                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1909 --   p_attribute7                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1910 --   p_attribute8                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1911 --   p_attribute9                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1912 --   p_attribute10                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1913 --   p_allow_cross_charge_flag           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1914 --   p_project_rate_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1915 --   p_project_rate_type                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1916 --   p_cc_process_labor_flag             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1917 --   p_labor_tp_schedule_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1918 --   p_labor_tp_fixed_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1919 --   p_cc_process_nl_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1920 --   p_nl_tp_schedule_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1921 --   p_nl_tp_fixed_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1922 --   p_inc_proj_progress_flag            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1923 --   p_record_version_number             IN  NUMBER
1924 --   p_comments                          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1925 --   x_return_status                     OUT VARCHAR2
1926 --   x_msg_count                         OUT NUMBER
1927 --   x_msg_data                          OUT VARCHAR2
1928 --
1929 --  History
1930 --
1931 --  25-JUN-01   HSIU             -Created
1932 --
1933 --
1934 
1935   procedure UPDATE_TASK
1936   (
1937      p_api_version                       IN  NUMBER      := 1.0
1938     ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1939     ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1940     ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1941     ,p_validation_level                  IN  VARCHAR2    := 100
1942     ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1943     ,p_debug_mode                        IN  VARCHAR2    := 'N'
1944 
1945     ,p_project_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1946     ,p_task_id                           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1947     ,p_task_number                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1948     ,p_task_name                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1949     ,p_long_task_name                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1950     ,p_task_description                  IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1951     ,p_task_manager_person_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1952     ,p_carrying_out_organization_id      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1953     ,p_task_type_code                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1954     ,p_priority_code                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1955     ,p_work_type_id                      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1956     ,p_service_type_code                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1957     ,p_milestone_flag                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1958     ,p_critical_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1959     ,p_chargeable_flag                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1960     ,p_billable_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1961     ,p_receive_project_invoice_flag      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1962     ,p_scheduled_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1963     ,p_scheduled_finish_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1964     ,p_estimated_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1965     ,p_estimated_end_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1966     ,p_actual_start_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1967     ,p_actual_finish_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1968     ,p_task_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1969     ,p_task_completion_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1970     ,p_baseline_start_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1971     ,p_baseline_end_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1972 
1973     ,p_obligation_start_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1974     ,p_obligation_end_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1975     ,p_estimate_to_complete_work         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1976     ,p_baseline_work                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1977     ,p_scheduled_work                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1978     ,p_actual_work_to_date               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1979     ,p_work_unit                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1980     ,p_progress_status_code              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1981 
1982     ,p_job_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1983     ,p_emp_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1984     ,p_pm_product_code                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1985     ,p_pm_project_reference              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1986     ,p_pm_task_reference                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1987     ,p_pm_parent_task_reference          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1988     ,p_top_task_id                       IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1989     ,p_wbs_level                         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1990     ,p_parent_task_id                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1991     ,p_display_sequence                  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1992     ,p_address_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1993     ,p_ready_to_bill_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1994     ,p_ready_to_distribute_flag          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1995     ,p_limit_to_txn_controls_flag        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1996     ,p_labor_bill_rate_org_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1997     ,p_labor_std_bill_rate_schdl         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1998     ,p_labor_schedule_fixed_date         IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1999     ,p_labor_schedule_discount           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2000     ,p_nl_bill_rate_org_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2001     ,p_nl_std_bill_rate_schdl            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2002     ,p_nl_schedule_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2003     ,p_nl_schedule_discount              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2004     ,p_labor_cost_multiplier_name        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2005     ,p_cost_ind_rate_sch_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2006     ,p_rev_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2007     ,p_inv_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2008     ,p_cost_ind_sch_fixed_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2009     ,p_rev_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2010     ,p_inv_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2011     ,p_labor_sch_type                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2012     ,p_nl_sch_type                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2013     ,p_early_start_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2014     ,p_early_finish_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2015     ,p_late_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2016     ,p_late_finish_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2017     ,p_attribute_category                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2018     ,p_attribute1                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2019     ,p_attribute2                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2020     ,p_attribute3                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2021     ,p_attribute4                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2022     ,p_attribute5                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2023     ,p_attribute6                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2024     ,p_attribute7                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2025     ,p_attribute8                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2026     ,p_attribute9                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2027     ,p_attribute10                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2028     ,p_allow_cross_charge_flag           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2029     ,p_project_rate_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2030     ,p_project_rate_type                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2031     ,p_cc_process_labor_flag             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2032     ,p_labor_tp_schedule_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2033     ,p_labor_tp_fixed_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2034     ,p_cc_process_nl_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2035     ,p_nl_tp_schedule_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2036     ,p_nl_tp_fixed_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2037     ,p_inc_proj_progress_flag            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2038     ,p_taskfunc_cost_rate_type           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2039     ,p_taskfunc_cost_rate_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2040     ,p_non_lab_std_bill_rt_sch_id        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2041     ,p_record_version_number             IN  NUMBER
2042     ,p_comments                          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2043     ,p_labor_disc_reason_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2044     ,p_non_labor_disc_reason_code        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2045 --PA L Capital Project Changes 2872708
2046     ,p_retirement_cost_flag              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2047     ,p_cint_eligible_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2048     ,p_cint_stop_date                    IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2049 --End PA L Capital Project Changes 2872708
2050     ,p_gen_etc_src_code                  IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2051     ,p_dates_check                       IN  VARCHAR2    := 'Y'  --bug 5665772
2052     ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2053     ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2054     ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2055   )
2056   IS
2057     l_rowid                              VARCHAR2(50);
2058 
2059     l_api_name                           CONSTANT VARCHAR2(30)  := 'UPDATE_TASK';
2060     l_api_version                        CONSTANT NUMBER        := 1.0;
2061     l_msg_count                          NUMBER;
2062     l_err_code                           NUMBER                 := 0;
2063     l_err_stack                          VARCHAR2(630);
2064     l_err_stage                          VARCHAR2(80);
2065     l_data                               VARCHAR2(250);
2066     l_msg_data                           VARCHAR2(250);
2067     l_msg_index_out                      NUMBER;
2068     l_msg_cnt                            NUMBER;
2069 
2070     l_delete_project_allowed             VARCHAR2(1);
2071     l_update_proj_num_allowed            VARCHAR2(1);
2072     l_update_proj_name_allowed           VARCHAR2(1);
2073     l_update_proj_desc_allowed           VARCHAR2(1);
2074     l_update_proj_dates_allowed          VARCHAR2(1);
2075     l_update_proj_status_allowed         VARCHAR2(1);
2076     l_update_proj_manager_allowed        VARCHAR2(1);
2077     l_update_proj_org_allowed            VARCHAR2(1);
2078     l_add_task_allowed                   VARCHAR2(1);
2079     l_delete_task_allowed                VARCHAR2(1);
2080     l_update_task_num_allowed            VARCHAR2(1);
2081     l_update_task_name_allowed           VARCHAR2(1);
2082     l_update_task_dates_allowed          VARCHAR2(1);
2083     l_update_task_desc_allowed           VARCHAR2(1);
2084     l_update_parent_task_allowed         VARCHAR2(1);
2085     l_update_task_org_allowed            VARCHAR2(1);
2086     l_f1                                 VARCHAR2(1);
2087     l_f2                                 VARCHAR2(1);
2088     l_ret                                VARCHAR2(1);
2089     l_change_parent_flag                 VARCHAR2(1);
2090 
2091     t_pm_product_code                    PA_TASKS.PM_PRODUCT_CODE%TYPE;
2092 
2093     -- For Task Attributes, defaulting from parent task
2094     TTASK_ID                             NUMBER;
2095     TTASK_NAME                            PA_TASKS.TASK_NAME%TYPE;
2096     TLONG_TASK_NAME                       PA_TASKS.LONG_TASK_NAME%TYPE;
2097     TTASK_NUMBER                          PA_TASKS.TASK_NUMBER%TYPE;
2098     TDESCRIPTION                          PA_TASKS.DESCRIPTION%TYPE;
2099     TTOP_TASK_ID                         NUMBER;
2100     TPARENT_TASK_ID                      NUMBER;
2101     TADDRESS_ID                          NUMBER;
2102     TREADY_TO_BILL_FLAG                  VARCHAR2(1);
2103     TREADY_TO_DISTRIBUTE_FLAG            VARCHAR2(1);
2104     TCARRYING_OUT_ORG_ID                 NUMBER;
2105     TSERVICE_TYPE_CODE                   VARCHAR2(30);
2106     TTASK_MANAGER_PERSON_ID              NUMBER;
2107     TCHARGEABLE                          VARCHAR2(1);
2108     TBILLABLE                            VARCHAR2(1);
2109     TLIMIT_TO_TXN_CONTROLS_FLAG          VARCHAR2(1);
2110     TSTART_DATE                          DATE;
2111     TCOMPLETION_DATE                     DATE;
2112     TLABOR_BILL_RATE_ORG_ID              NUMBER;
2113     TLABOR_STD_BILL_RATE_SCHDL           VARCHAR2(30);
2114     TLABOR_SCHEDULE_FIXED_DATE           DATE;
2115     TLABOR_SCHEDULE_DISCOUNT             NUMBER;
2116     TNLR_BILL_RATE_ORG_ID                NUMBER;
2117     TNLR_STD_BILL_RATE_SCHDL             VARCHAR2(30);
2118     TNLR_SCHEDULE_FIXED_DATE             DATE;
2119     TNLR_SCHEDULE_DISCOUNT               NUMBER;
2120     TCOST_IND_RATE_SCH_ID                NUMBER;
2121     TREV_IND_RATE_SCH_ID                 NUMBER;
2122     TINV_IND_RATE_SCH_ID                 NUMBER;
2123     TCOST_IND_SCH_FIXED_DATE             DATE;
2124     TREV_IND_SCH_FIXED_DATE              DATE;
2125     TINV_IND_SCH_FIXED_DATE              DATE;
2126     TLABOR_SCH_TYPE                      VARCHAR2(1);
2127     TNLR_SCH_TYPE                        VARCHAR2(1);
2128     TALLOW_CROSS_CHARGE_FLAG             VARCHAR2(1);
2129     TPROJECT_RATE_TYPE                   VARCHAR2(30);
2130     TPROJECT_RATE_DATE                   DATE;
2131     TCC_PROCESS_LABOR_FLAG               VARCHAR2(1);
2132     TLABOR_TP_SCHEDULE_ID                NUMBER;
2133     TLABOR_TP_FIXED_DATE                 DATE;
2134     TCC_PROCESS_NL_FLAG                  VARCHAR2(1);
2135     TNL_TP_SCHEDULE_ID                   NUMBER;
2136     TNL_TP_FIXED_DATE                    DATE;
2137     TRECEIVE_PROJECT_INVOICE_FLAG        VARCHAR2(1);
2138     TWORK_TYPE_ID                        NUMBER;
2139     TJOB_BILL_RATE_SCHEDULE_ID           NUMBER;
2140     TEMP_BILL_RATE_SCHEDULE_ID           NUMBER;
2141     --NEW ATTRIBUTES
2142     TTASK_TYPE_CODE                      VARCHAR2(30);
2143     TPRIORITY_CODE                       VARCHAR2(30);
2144     TCRITICAL_FLAG                       VARCHAR2(1);
2145     TMILESTONE_FLAG                      VARCHAR2(1);
2146     TESTIMATED_START_DATE                DATE;
2147     TESTIMATED_END_DATE                  DATE;
2148     TBASELINE_START_DATE                 DATE;
2149     TBASELINE_END_DATE                   DATE;
2150     TOBLIGATION_START_DATE               DATE;
2151     TOBLIGATION_END_DATE                 DATE;
2152     TSCHEDULED_START_DATE                DATE;
2153     TSCHEDULED_FINISH_DATE               DATE;
2154     TESTIMATE_TO_COMPLETE_WORK           NUMBER;
2155     TBASELINE_WORK                       NUMBER;
2156     TSCHEDULED_WORK                      NUMBER;
2157     TACTUAL_WORK_TO_DATE                 NUMBER;
2158     TWORK_UNIT_CODE                      VARCHAR2(30);
2159     TPROGRESS_STATUS_CODE                VARCHAR2(30);
2160     TWBS_LEVEL                           NUMBER;
2161 
2162     TACTUAL_START_DATE                   DATE;
2163     TACTUAL_FINISH_DATE                  DATE;
2164     TLABOR_COST_MULTIPLIER_NAME          VARCHAR2(20);
2165     TEARLY_START_DATE                    DATE;
2166     TEARLY_FINISH_DATE                   DATE;
2167     TLATE_START_DATE                     DATE;
2168     TLATE_FINISH_DATE                    DATE;
2169     TATTRIBUTE_CATEGORY                  VARCHAR2(30);
2170     TATTRIBUTE1                          VARCHAR2(150);
2171     TATTRIBUTE2                          VARCHAR2(150);
2172     TATTRIBUTE3                          VARCHAR2(150);
2173     TATTRIBUTE4                          VARCHAR2(150);
2174     TATTRIBUTE5                          VARCHAR2(150);
2175     TATTRIBUTE6                          VARCHAR2(150);
2176     TATTRIBUTE7                          VARCHAR2(150);
2177     TATTRIBUTE8                          VARCHAR2(150);
2178     TATTRIBUTE9                          VARCHAR2(150);
2179     TATTRIBUTE10                         VARCHAR2(150);
2180 
2181     Tinc_proj_progress_flag              VARCHAR2(1);
2182     Tcomments                    VARCHAR2(4000);
2183     TDISPLAY_SEQUENCE                    NUMBER;
2184 
2185     TPROJECT_TYPE                        VARCHAR2(20);
2186     CARRYING_OUT_ORG_ID_TMP              NUMBER;
2187     ttaskfunc_cost_rate_type             VARCHAR2(30);
2188     ttaskfunc_cost_rate_date             DATE;
2189     tnon_lab_std_bill_rt_Sch_id          NUMBER;
2190     Tlabor_disc_reason_code              VARCHAR2(30);
2191     Tnon_labor_disc_reason_code          VARCHAR2(30);
2192 
2193 --PA L Capital Project Changes 2872708
2194       tretirement_cost_flag              VARCHAR2(1);
2195       tcint_eligible_flag                VARCHAR2(1);
2196       tcint_stop_date                    DATE;
2197 --End PA L Capital Project Changes 2872708
2198 
2199     TGEN_ETC_SOURCE_CODE                 VARCHAR2(30);
2200 
2201     CURSOR ref_task IS
2202       SELECT rowid,
2203         TASK_ID,
2204         TASK_NAME, --new
2205         LONG_TASK_NAME, --new
2206         TASK_NUMBER, --new
2207         DESCRIPTION, --new
2208         TOP_TASK_ID,
2209         PARENT_TASK_ID,
2210         ADDRESS_ID,
2211         READY_TO_BILL_FLAG,
2212         READY_TO_DISTRIBUTE_FLAG,
2213         CARRYING_OUT_ORGANIZATION_ID,
2214         SERVICE_TYPE_CODE,
2215         TASK_MANAGER_PERSON_ID,
2216         CHARGEABLE_FLAG,
2217         BILLABLE_FLAG,
2218         LIMIT_TO_TXN_CONTROLS_FLAG,
2219         START_DATE,
2220         COMPLETION_DATE,
2221         LABOR_BILL_RATE_ORG_ID,
2222         LABOR_STD_BILL_RATE_SCHDL,
2223         LABOR_SCHEDULE_FIXED_DATE,
2224         LABOR_SCHEDULE_DISCOUNT,
2225         NON_LABOR_BILL_RATE_ORG_ID,
2226         NON_LABOR_STD_BILL_RATE_SCHDL,
2227         NON_LABOR_SCHEDULE_FIXED_DATE,
2228         NON_LABOR_SCHEDULE_DISCOUNT,
2229         COST_IND_RATE_SCH_ID,
2230         REV_IND_RATE_SCH_ID,
2231         INV_IND_RATE_SCH_ID,
2232         COST_IND_SCH_FIXED_DATE,
2233         REV_IND_SCH_FIXED_DATE,
2234         INV_IND_SCH_FIXED_DATE,
2235         LABOR_SCH_TYPE,
2236         NON_LABOR_SCH_TYPE,
2237         ALLOW_CROSS_CHARGE_FLAG,
2238         PROJECT_RATE_TYPE,
2239         PROJECT_RATE_DATE,
2240         CC_PROCESS_LABOR_FLAG,
2241         LABOR_TP_SCHEDULE_ID,
2242         LABOR_TP_FIXED_DATE,
2243         CC_PROCESS_NL_FLAG,
2244         NL_TP_SCHEDULE_ID,
2245         NL_TP_FIXED_DATE,
2246         RECEIVE_PROJECT_INVOICE_FLAG,
2247         WORK_TYPE_ID,
2248         JOB_BILL_RATE_SCHEDULE_ID,
2249         EMP_BILL_RATE_SCHEDULE_ID,
2250 -- HY        TASK_TYPE_CODE,
2251 -- HY        PRIORITY_CODE,
2252 -- HY        CRITICAL_FLAG,
2253 -- HY        MILESTONE_FLAG,
2254 -- HY        ESTIMATED_START_DATE,
2255 -- HY        ESTIMATED_END_DATE,
2256         SCHEDULED_START_DATE,
2257         SCHEDULED_FINISH_DATE,
2258 -- HY        ESTIMATE_TO_COMPLETE_WORK,
2259 -- HY        SCHEDULED_WORK,
2260 -- HY        WORK_UNIT_CODE,
2261 -- HY        PROGRESS_STATUS_CODE,
2262         WBS_LEVEL,
2263         LABOR_COST_MULTIPLIER_NAME,
2264         ATTRIBUTE_CATEGORY,
2265         ATTRIBUTE1,
2266         ATTRIBUTE2,
2267         ATTRIBUTE3,
2268         ATTRIBUTE4,
2269         ATTRIBUTE5,
2270         ATTRIBUTE6,
2271         ATTRIBUTE7,
2272         ATTRIBUTE8,
2273         ATTRIBUTE9,
2274         ATTRIBUTE10,
2275 -- HY        inc_proj_progress_flag,
2276 -- HY        comments,
2277 -- HY        DISPLAY_SEQUENCE
2278         taskfunc_cost_rate_type,
2279         taskfunc_cost_rate_date,
2280         non_lab_std_bill_rt_sch_id,
2281         labor_disc_reason_code,
2282         non_labor_disc_reason_code,
2283 --PA L Capital Project changes 2872708
2284       retirement_cost_flag,
2285       cint_eligible_flag,
2286       cint_stop_date,
2287 --End PA L Capital Project changes 2872708
2288       GEN_ETC_SOURCE_CODE
2289       FROM PA_TASKS
2290       WHERE TASK_ID = p_task_id;
2291 
2292   BEGIN
2293 
2294     IF (p_debug_mode = 'Y') THEN
2295       pa_debug.debug('PA_TASKS_MAINT_PVT.UPDATE_TASK BEGIN');
2296     END IF;
2297 
2298     IF (p_commit = FND_API.G_TRUE) THEN
2299       savepoint UPDATE_TASK_PRIVATE;
2300     END IF;
2301 
2302     IF (p_debug_mode = 'Y') THEN
2303       pa_debug.debug('Performing validations');
2304     END IF;
2305 
2306     IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
2307       --check if task_name is null
2308       IF p_task_name IS NULL THEN
2309         PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_NAME_EMPTY');
2310       END IF;
2311     END IF;
2312 
2313     -- Get PM_PRODUCT_CODE
2314     IF (p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
2315       BEGIN
2316         select PM_PRODUCT_CODE
2317           into t_pm_product_code
2318           from pa_tasks
2319          where task_id = p_task_id;
2320       EXCEPTION
2321         WHEN NO_DATA_FOUND THEN
2322           PA_UTILS.ADD_MESSAGE('PA','PA_EXP_NO_TASK'); -- specified task does not exist
2323           raise FND_API.G_EXC_ERROR;
2324       END;
2325     ELSE
2326       t_pm_product_code := p_pm_product_code;
2327     END IF;
2328 
2329     --l_msg_count := FND_MSG_PUB.count_msg;
2330 
2331 
2332     -- Set controls
2333     IF (p_calling_module in ('SELF_SERVICE')) THEN
2334       If (t_pm_product_code IS NOT NULL) THEN
2335         PA_PM_CONTROLS.GET_PROJECT_ACTIONS_ALLOWED(
2336           p_pm_product_code => t_pm_product_code,
2337           p_delete_project_allowed => l_delete_project_allowed,
2338           p_update_proj_num_allowed => l_update_proj_num_allowed,
2339           p_update_proj_name_allowed => l_update_proj_name_allowed,
2340           p_update_proj_desc_allowed => l_update_proj_desc_allowed,
2341           p_update_proj_dates_allowed  => l_update_proj_dates_allowed,
2342           p_update_proj_status_allowed => l_update_proj_status_allowed,
2343           p_update_proj_manager_allowed => l_update_proj_manager_allowed,
2344           p_update_proj_org_allowed => l_update_proj_org_allowed,
2345           p_add_task_allowed => l_add_task_allowed,
2346           p_delete_task_allowed => l_delete_task_allowed,
2347           p_update_task_num_allowed => l_update_task_num_allowed,
2348           p_update_task_name_allowed => l_update_task_name_allowed,
2349           p_update_task_dates_allowed => l_update_task_dates_allowed,
2350           p_update_task_desc_allowed => l_update_task_desc_allowed,
2351           p_update_parent_task_allowed => l_update_parent_task_allowed,
2352           p_update_task_org_allowed => l_update_task_org_allowed,
2353           p_error_code => l_err_code,
2354           p_error_stack => l_err_stack,
2355           p_error_stage => l_err_stage
2356         );
2357       END IF; --product code is not null
2358     END IF;
2359 
2360 --dbms_output.put_line( 'In update task 3' );
2361 
2362     --getting all information
2363     OPEN ref_task;
2364     FETCH ref_task INTO
2365      l_rowid
2366     ,TTASK_ID
2367     ,TTASK_NAME
2368     ,TLONG_TASK_NAME
2369     ,TTASK_NUMBER
2370     ,TDESCRIPTION
2371     ,TTOP_TASK_ID
2372     ,TPARENT_TASK_ID
2373     ,TADDRESS_ID
2374     ,TREADY_TO_BILL_FLAG
2375     ,TREADY_TO_DISTRIBUTE_FLAG
2376     ,TCARRYING_OUT_ORG_ID
2377     ,TSERVICE_TYPE_CODE
2378     ,TTASK_MANAGER_PERSON_ID
2379     ,TCHARGEABLE
2380     ,TBILLABLE
2381     ,TLIMIT_TO_TXN_CONTROLS_FLAG
2382     ,TSTART_DATE
2383     ,TCOMPLETION_DATE
2384     ,TLABOR_BILL_RATE_ORG_ID
2385     ,TLABOR_STD_BILL_RATE_SCHDL
2386     ,TLABOR_SCHEDULE_FIXED_DATE
2387     ,TLABOR_SCHEDULE_DISCOUNT
2388     ,TNLR_BILL_RATE_ORG_ID
2389     ,TNLR_STD_BILL_RATE_SCHDL
2390     ,TNLR_SCHEDULE_FIXED_DATE
2391     ,TNLR_SCHEDULE_DISCOUNT
2392     ,TCOST_IND_RATE_SCH_ID
2393     ,TREV_IND_RATE_SCH_ID
2394     ,TINV_IND_RATE_SCH_ID
2395     ,TCOST_IND_SCH_FIXED_DATE
2396     ,TREV_IND_SCH_FIXED_DATE
2397     ,TINV_IND_SCH_FIXED_DATE
2398     ,TLABOR_SCH_TYPE
2399     ,TNLR_SCH_TYPE
2400     ,TALLOW_CROSS_CHARGE_FLAG
2401     ,TPROJECT_RATE_TYPE
2402     ,TPROJECT_RATE_DATE
2403     ,TCC_PROCESS_LABOR_FLAG
2404     ,TLABOR_TP_SCHEDULE_ID
2405     ,TLABOR_TP_FIXED_DATE
2406     ,TCC_PROCESS_NL_FLAG
2407     ,TNL_TP_SCHEDULE_ID
2408     ,TNL_TP_FIXED_DATE
2409     ,TRECEIVE_PROJECT_INVOICE_FLAG
2410     ,TWORK_TYPE_ID
2411     ,TJOB_BILL_RATE_SCHEDULE_ID
2412     ,TEMP_BILL_RATE_SCHEDULE_ID
2413 -- HY    ,TTASK_TYPE_CODE
2414 -- HY    ,TPRIORITY_CODE
2415 -- HY    ,TCRITICAL_FLAG
2416 -- HY    ,TMILESTONE_FLAG
2417 -- HY    ,TESTIMATED_START_DATE
2418 -- HY    ,TESTIMATED_END_DATE
2419     ,TSCHEDULED_START_DATE
2420     ,TSCHEDULED_FINISH_DATE
2421 -- HY    ,TESTIMATE_TO_COMPLETE_WORK
2422 -- HY    ,TSCHEDULED_WORK
2423 -- HY    ,TWORK_UNIT_CODE
2424 -- HY    ,TPROGRESS_STATUS_CODE
2425     ,TWBS_LEVEL
2426     ,TLABOR_COST_MULTIPLIER_NAME
2427     ,TATTRIBUTE_CATEGORY
2428     ,TATTRIBUTE1
2429     ,TATTRIBUTE2
2430     ,TATTRIBUTE3
2431     ,TATTRIBUTE4
2432     ,TATTRIBUTE5
2433     ,TATTRIBUTE6
2434     ,TATTRIBUTE7
2435     ,TATTRIBUTE8
2436     ,TATTRIBUTE9
2437     ,TATTRIBUTE10
2438     ,ttaskfunc_cost_rate_type
2439     ,ttaskfunc_cost_rate_date
2440     ,tnon_lab_std_bill_rt_sch_id
2441     ,Tlabor_disc_reason_code
2442     ,Tnon_labor_disc_reason_code
2443 --PA L Capital Project changes 2872708
2444      ,tretirement_cost_flag
2445      ,tcint_eligible_flag
2446      ,tcint_stop_date
2447 --End PA L Capital Project changes 2872708
2448      ,tGEN_ETC_SOURCE_CODE
2449 ;
2450 -- HY    ,Tinc_proj_progress_flag
2451 -- HY    ,Tcomments
2452 -- HY    ,TDISPLAY_SEQUENCE;
2453 
2454     IF (ref_task%NOTFOUND) THEN
2455       RAISE NO_DATA_FOUND;
2456     END IF;
2457     CLOSE ref_task;
2458 
2459 --dbms_output.put_line( 'In update task 4 ');
2460 
2461     IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
2462       --Check if it is ok to change task number
2463       --IF (p_task_number <> TTASK_NUMBER) THEN          -- Commented for Bug#5968516
2464       IF (substrb(p_task_number, 0, 25) <> TTASK_NUMBER) -- Added substrb for Bug#5968516
2465       AND (p_task_number IS NOT NULL)  -- Bug 5968516
2466       AND (p_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- Bug 5968516
2467       THEN
2468         PA_TASKS_MAINT_UTILS.CHECK_TASK_NUMBER_DISP(
2469           p_project_id,
2470           p_task_id,
2471           p_task_number,
2472           l_rowid);
2473       END IF;
2474     END IF;
2475 
2476 --dbms_output.put_line( 'In update task 5' );
2477 
2478 --Bug 6316383 :Changed the below condition for SELF SERVICE, as it is now handled in a different manner.
2479     --IF (p_calling_module IN ('FORMS', 'SELF_SERVICE')) THEN
2480       --If Carrying Out Organization has changed
2481       IF (p_calling_module  = 'FORMS') THEN
2482       IF (TCARRYING_OUT_ORG_ID <> p_carrying_out_organization_id) AND
2483          (p_carrying_out_organization_id IS NOT NULL) AND
2484          (p_carrying_out_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
2485         PA_TASK_UTILS.CHANGE_TASK_ORG_OK(p_task_id,
2486                            l_err_code,
2487                            l_err_stage,
2488                            l_err_stack);
2489         IF (l_err_code <> 0) Then
2490           PA_UTILS.ADD_MESSAGE('PA', substr(l_err_stage,1,30));
2491         End If;
2492       END IF;
2493     END IF;
2494 
2495 --dbms_output.put_line( 'In update task 6' );
2496 
2497     -- Check Start Date; will replace by Date roll-up in future
2498     -- Check Completion Date; will replace by Date roll-up in future
2499     IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
2500       --Check Start Date End Date
2501       IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2502           p_task_start_date IS NULL) AND
2503          (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2504           p_task_completion_date IS NULL) THEN
2505         PA_TASKS_MAINT_UTILS.check_start_end_date(
2506           p_old_start_date => null,
2507           p_old_end_date => null,
2508           p_new_start_date => p_task_start_date,
2509           p_new_end_date => p_task_completion_date,
2510           p_update_start_date_flag => l_f1,
2511           p_update_end_date_flag => l_f2,
2512           p_return_status => l_ret);
2513         IF (l_ret <> 'S') THEN
2514           -- Bug 7386335
2515 	  -- The API check_start_end_date will log a single error message. Not required to log further.
2516 	  l_msg_count := FND_MSG_PUB.count_msg;
2517  	  IF (l_msg_count > 0) THEN
2518  	    x_msg_count := l_msg_count;
2519  	    IF (x_msg_count = 1) THEN
2520  	      pa_interface_utils_pub.get_messages(
2521  			p_encoded => FND_API.G_TRUE,
2522  			p_msg_index => 1,
2523  			p_data => l_data,
2524  			p_msg_index_out => l_msg_index_out);
2525  			x_msg_data := l_data;
2526  	    END IF;
2527  	    RAISE FND_API.G_EXC_ERROR;
2528  	  END IF;
2529         END IF;
2530       END IF;
2531 
2532 --dbms_output.put_line( 'In update task 7' );
2533 
2534       --Check Start Date
2535       -- Added for bug 5665772
2536      IF p_dates_check = 'Y' THEN
2537       IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
2538           nvl(p_task_start_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
2539           nvl(TSTART_DATE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) ) -- Bug 6163119
2540         THEN
2541         PA_TASKS_MAINT_UTILS.Check_Start_Date(
2542           p_project_id => p_project_id,
2543           p_parent_task_id => TPARENT_TASK_ID,
2544           p_task_id => p_task_id, -- Bug 7386335
2545           p_start_date => p_task_start_date,
2546           x_return_status => l_ret,
2547           x_msg_count => l_msg_cnt,
2548           x_msg_data => l_msg_data);
2549         IF (l_ret <> 'S') THEN
2550           PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
2551         END IF;
2552       END IF;
2553      END IF;
2554 
2555       --BUG 4081329, rtarway
2556       --Check Start Date EI
2557       IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
2558           nvl(p_task_start_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
2559           nvl(TSTART_DATE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) ) -- Bug 6163119
2560       THEN
2561         PA_TASKS_MAINT_UTILS.Check_Start_Date_EI(
2562           p_project_id => p_project_id,
2563           p_task_id => p_task_id,
2564           p_start_date => p_task_start_date,
2565           x_return_status => l_ret,
2566           x_msg_count => l_msg_cnt,
2567           x_msg_data => l_msg_data);
2568           --Since This API would have Added message in Stack, dont add it again
2569       END IF;
2570       --End Add BUG 4081329, rtarway
2571 --dbms_output.put_line( 'In update task 8' );
2572 
2573       -- Bug 7386335
2574       -- This serves only as a workaround fix. We cannot change the condition IF (x_msg_count = 1) to IF
2575       -- (x_msg_count > 1) since the change will have to be made in all the procedures involved in the flow.
2576       l_msg_count := FND_MSG_PUB.count_msg;
2577       IF (l_msg_count > 0) THEN
2578         x_msg_count := l_msg_count;
2579         IF (x_msg_count = 1) THEN
2580           pa_interface_utils_pub.get_messages(
2581 			p_encoded => FND_API.G_TRUE,
2582 			p_msg_index => 1,
2583 			p_data => l_data,
2584 			p_msg_index_out => l_msg_index_out);
2585 			x_msg_data := l_data;
2586         END IF;
2587         RAISE FND_API.G_EXC_ERROR;
2588       END IF;
2589 
2590       --Check Completion Date
2591     -- Added for bug 5665772
2592     IF p_dates_check = 'Y' THEN
2593 
2594       IF (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
2595           nvl(p_task_completion_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
2596           nvl(TCOMPLETION_DATE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) ) -- Bug 6163119
2597       THEN
2598 
2599         PA_TASKS_MAINT_UTILS.Check_End_Date(
2600           p_project_id => p_project_id,
2601           p_parent_task_id => TPARENT_TASK_ID,
2602           --p_task_id => NULL,
2603           p_task_id => p_task_id,--BUG 4081329, rtarway
2604           p_end_date => p_task_completion_date,
2605           x_return_status => l_ret,
2606           x_msg_count => l_msg_cnt,
2607           x_msg_data => l_msg_data);
2608         IF (l_ret <> 'S') THEN
2609           PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
2610         END IF;
2611       END IF;
2612     END IF;
2613 
2614             --BUG 4081329, rtarway
2615        --Check Completion Date against EI date
2616       IF (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
2617           nvl(p_task_completion_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
2618           nvl(TCOMPLETION_DATE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) ) -- Bug 6163119
2619       THEN
2620 
2621         PA_TASKS_MAINT_UTILS.Check_End_Date_EI(
2622           p_project_id => p_project_id,
2623           p_task_id => p_task_id,
2624           p_end_date => p_task_completion_date,
2625           x_return_status => l_ret,
2626           x_msg_count => l_msg_cnt,
2627           x_msg_data => l_msg_data);
2628           --Since This API would have Added message in Stack, dont add it again
2629       END IF;
2630       --End Add BUG 4081329, rtarway
2631 
2632 --dbms_output.put_line( 'In update task 9' );
2633 
2634       --Check Schedule Dates
2635       IF (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2636           p_scheduled_start_date IS NULL) AND
2637          (p_scheduled_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2638           p_scheduled_finish_date IS NULL) THEN
2639         PA_TASKS_MAINT_UTILS.CHECK_SCHEDULE_DATES(
2640           p_project_id => p_project_id,
2641           p_sch_start_date => p_scheduled_start_date,
2642           p_sch_end_date => p_scheduled_finish_date,
2643           x_return_status => l_ret,
2644           x_msg_count => l_msg_cnt,
2645           x_msg_data => l_msg_data);
2646 --        IF (l_ret <> 'S') THEN
2647 --          PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
2648 --        END IF;
2649       END IF;
2650 --dbms_output.put_line( 'In update task 10' );
2651 
2652       --Check Estimate Dates
2653       IF (p_estimated_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2654           p_estimated_start_date IS NULL) AND
2655          (p_estimated_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2656           p_estimated_end_date IS NULL) THEN
2657         PA_TASKS_MAINT_UTILS.CHECK_ESTIMATE_DATES(
2658           p_project_id => p_project_id,
2659           p_estimate_start_date => p_estimated_start_date,
2660           p_estimate_end_date => p_estimated_end_date,
2661           x_return_status => l_ret,
2662           x_msg_count => l_msg_cnt,
2663           x_msg_data => l_msg_data);
2664 --        IF (l_ret <> 'S') THEN
2665 --          PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
2666 --        END IF;
2667       END IF;
2668 
2669 --dbms_output.put_line( 'In update task 11' );
2670 
2671       --Check Actual Dates
2672       IF (p_actual_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2673           p_actual_start_date IS NULL) AND
2674          (p_actual_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2675           p_actual_finish_date IS NULL) THEN
2676         PA_TASKS_MAINT_UTILS.CHECK_ACTUAL_DATES(
2677           p_project_id => p_project_id,
2678           p_actual_start_date => p_actual_start_date,
2679           p_actual_end_date => p_actual_finish_date,
2680           x_return_status => l_ret,
2681           x_msg_count => l_msg_cnt,
2682           x_msg_data => l_msg_data);
2683 --        IF (l_ret <> 'S') THEN
2684 --          PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
2685 --        END IF;
2686       END IF;
2687 
2688     END IF;
2689 
2690 --dbms_output.put_line( 'In update task 12' );
2691 
2692     IF (p_calling_module IN ('SELF_SERVICE')) THEN
2693       -- Check if PRM is installed
2694       IF (PA_INSTALL.IS_PRM_LICENSED() = 'Y') THEN
2695         -- Work Type is required
2696         IF (p_work_type_id IS NULL) THEN
2697           PA_UTILS.ADD_MESSAGE('PA','PA_WORK_TYPE_REQ');
2698         END IF;
2699       END IF;
2700       null;
2701     END IF;
2702 
2703     --Check if it is okay to change parent task
2704 
2705 --dbms_output.put_line( 'In update task 13' );
2706 
2707     IF (p_calling_module IN ('SELF_SERVICE', 'FORM')) THEN
2708       IF NVL( p_parent_task_id, -1 ) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
2709          NVL( p_parent_task_id, -1 ) <> TPARENT_TASK_ID  THEN --parent task has changed
2710 
2711 
2712 
2713         IF (p_parent_task_id IS NOT NULL AND NVL( p_parent_task_id, -1 ) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
2714 
2715     l_msg_count := FND_MSG_PUB.count_msg;
2716 
2717 --dbms_output.put_line( 'In update task 14 '|| l_msg_count);
2718 
2719 
2720           PA_PROJECT_PUB.CHECK_CHANGE_PARENT_OK(
2721             p_api_version_number => 1.0,
2722             p_project_id => p_project_id,
2723             p_task_id => p_task_id,
2724             p_new_parent_task_id => p_parent_task_id,
2725             p_pm_project_reference => NULL,
2726             p_pm_task_reference => NULL,
2727             p_pm_new_parent_task_reference => NULL,
2728             p_change_parent_ok_flag => l_change_parent_flag,
2729             p_return_status => l_ret,
2730             p_msg_count => l_msg_cnt,
2731             p_msg_data => l_msg_data);
2732 
2733     l_msg_count := FND_MSG_PUB.count_msg;
2734 
2735 --dbms_output.put_line( 'In update task 14 --erro msg '|| l_msg_count);
2736 
2737           IF (l_change_parent_flag <> 'Y') THEN
2738             PA_UTILS.ADD_MESSAGE('PA', 'PA_CANT_CHANGE_PARENT');
2739           END IF;
2740         ELSE
2741           --new parent task is null; cannot change
2742           /* Bug2740269  -- commented the following message populataion. The parent can be null in case of top task
2743           PA_UTILS.ADD_MESSAGE('PA', 'PA_CANT_CHANGE_PARENT');
2744        */
2745       null;
2746         END IF;
2747       END IF;
2748     END IF;
2749 
2750     -- Check if there is any error. Get new Task Id if no error
2751 
2752     l_msg_count := FND_MSG_PUB.count_msg;
2753     IF (l_msg_count > 0) THEN
2754       x_msg_count := l_msg_count;
2755       IF (x_msg_count = 1) THEN
2756         pa_interface_utils_pub.get_messages(
2757           p_encoded => FND_API.G_TRUE,
2758           p_msg_index => 1,
2759           p_data => l_data,
2760           p_msg_index_out => l_msg_index_out);
2761         x_msg_data := l_data;
2762       END IF;
2763       RAISE FND_API.G_EXC_ERROR;
2764     END IF;
2765 
2766 
2767 --dbms_output.put_line( 'In update task 15' );
2768 
2769     --Update with incoming parameters
2770     -- Replacing non-entered values
2771     IF (p_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_name IS NULL ) THEN
2772       TTASK_NAME := substrb(p_task_name,1,20); -- 4151509
2773     END IF;
2774 
2775     IF (p_long_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_long_task_name IS NULL ) THEN
2776       TLONG_TASK_NAME := p_long_task_name;
2777     END IF;
2778 --dbms_output.put_line( 'In update task 15 -- 1' );
2779 
2780 
2781     IF (p_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_number IS NULL ) THEN
2782       TTASK_NUMBER := substrb(p_task_number,1,25); -- 4151509
2783     END IF;
2784 
2785 --dbms_output.put_line( 'In update task 15 -- 2' );
2786 
2787 
2788     IF (p_task_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_description IS NULL ) THEN
2789       TDESCRIPTION := substrb(p_task_description,1,250); -- 4151509
2790     END IF;
2791 
2792     IF (p_task_manager_person_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_task_manager_person_id IS NULL ) THEN
2793       TTASK_MANAGER_PERSON_ID := p_task_manager_person_id;
2794     END IF;
2795 
2796     IF (p_carrying_out_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_carrying_out_organization_id IS NULL ) THEN
2797       IF (p_carrying_out_organization_id IS NOT NULL) THEN
2798         TCARRYING_OUT_ORG_ID := p_carrying_out_organization_id;
2799       END IF;
2800     END IF;
2801 
2802     IF (p_task_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_type_code IS NULL ) THEN
2803       TTASK_TYPE_CODE := p_task_type_code;
2804     END IF;
2805 
2806     IF (p_priority_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_priority_code IS NULL ) THEN
2807       TPRIORITY_CODE := p_priority_code;
2808     END IF;
2809 
2810     IF (p_work_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_work_type_id IS NULL ) THEN
2811       TWORK_TYPE_ID := p_work_type_id;
2812     END IF;
2813 
2814     IF (p_service_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_service_type_code IS NULL ) THEN
2815       TSERVICE_TYPE_CODE := p_service_type_code;
2816     END IF;
2817 
2818     IF (p_milestone_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_milestone_flag IS NULL ) THEN
2819       TMILESTONE_FLAG := p_milestone_flag;
2820     END IF;
2821 
2822     IF (p_critical_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_critical_flag IS NULL ) THEN
2823       TCRITICAL_FLAG := p_critical_flag;
2824     END IF;
2825 
2826     IF (p_chargeable_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_chargeable_flag IS NULL ) THEN
2827       TCHARGEABLE := p_chargeable_flag;
2828     END IF;
2829 
2830     --hy
2831     --Check if child exist for current parent task. If not,
2832     --update chargeable flag to Y
2833     IF (Pa_Task_Utils.check_child_Exists(NVL(p_task_id,0)) = 1 ) THEN
2834       TCHARGEABLE := 'N';
2835     END IF;
2836 
2837 
2838     IF (p_billable_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_billable_flag IS NULL ) THEN
2839       TBILLABLE := p_billable_flag;
2840     END IF;
2841 
2842     IF (p_receive_project_invoice_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_receive_project_invoice_flag IS NULL ) THEN
2843 --dbms_output.put_line( 'In update task 16' );
2844 
2845         select project_type INTO TPROJECT_TYPE
2846           from pa_projects_all
2847          where project_id = p_project_id;
2848       PA_TASKS_MAINT_UTILS.Check_Chargeable_Flag( p_chargeable_flag => TCHARGEABLE,
2849                        p_receive_project_invoice_flag => p_receive_project_invoice_flag,
2850                        p_project_type => TPROJECT_TYPE,
2851                p_project_id   => p_project_id, -- Added for bug#3512486
2852                        x_receive_project_invoice_flag => TRECEIVE_PROJECT_INVOICE_FLAG);
2853 --      TRECEIVE_PROJECT_INVOICE_FLAG := p_receive_project_invoice_flag;
2854     END IF;
2855 
2856     IF (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_scheduled_start_date IS NULL ) THEN
2857       TSCHEDULED_START_DATE := p_scheduled_start_date;
2858     END IF;
2859 
2860     IF (p_scheduled_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_scheduled_finish_date IS NULL ) THEN
2861       TSCHEDULED_FINISH_DATE := p_scheduled_finish_date;
2862     END IF;
2863 
2864     IF (p_estimated_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_estimated_start_date IS NOT NULL ) THEN
2865       TESTIMATED_START_DATE := p_estimated_start_date;
2866 
2867     ELSIF (TESTIMATED_START_DATE is NULL or TESTIMATED_START_DATE =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
2868     TESTIMATED_START_DATE := TSCHEDULED_START_DATE;
2869     END IF;
2870 
2871 
2872     IF (p_estimated_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_estimated_end_date IS NOT NULL ) THEN
2873       TESTIMATED_END_DATE := p_estimated_end_date;
2874 
2875     ELSIF (TESTIMATED_END_DATE is NULL or TESTIMATED_END_DATE =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
2876     TESTIMATED_END_DATE := TSCHEDULED_FINISH_DATE;
2877     END IF;
2878 
2879     IF (p_actual_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_actual_start_date IS NULL ) THEN
2880       TACTUAL_START_DATE := p_actual_start_date;
2881     END IF;
2882 
2883     IF (p_actual_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_actual_finish_date IS NULL ) THEN
2884       TACTUAL_FINISH_DATE := p_actual_finish_date;
2885     END IF;
2886 
2887     IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_task_start_date IS NULL ) THEN
2888       TSTART_DATE := p_task_start_date;
2889     END IF;
2890 
2891     IF (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_task_completion_date IS NULL ) THEN
2892       TCOMPLETION_DATE := p_task_completion_date;
2893     END IF;
2894 
2895     IF (p_baseline_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_baseline_start_date IS NULL ) THEN
2896       TBASELINE_START_DATE := p_baseline_start_date;
2897     END IF;
2898 
2899     IF (p_baseline_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR  p_baseline_end_date IS NULL ) THEN
2900       TBASELINE_END_DATE := p_baseline_end_date;
2901     END IF;
2902 
2903     IF (p_obligation_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_obligation_start_date IS NULL ) THEN
2904       TOBLIGATION_START_DATE := p_obligation_start_date;
2905     END IF;
2906 
2907     IF (p_obligation_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_obligation_end_date IS NULL ) THEN
2908       TOBLIGATION_END_DATE := p_obligation_end_date;
2909     END IF;
2910 
2911     IF (p_estimate_to_complete_work <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_estimate_to_complete_work IS NULL ) THEN
2912       TESTIMATE_TO_COMPLETE_WORK := p_estimate_to_complete_work;
2913     END IF;
2914 
2915     IF (p_baseline_work <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_baseline_work IS NULL ) THEN
2916       TBASELINE_WORK := p_baseline_work;
2917     END IF;
2918 
2919     IF (p_scheduled_work <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_scheduled_work IS NULL ) THEN
2920       TSCHEDULED_WORK := p_scheduled_work;
2921     END IF;
2922 
2923     IF (p_actual_work_to_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_actual_work_to_date IS NULL ) THEN
2924       TACTUAL_WORK_TO_DATE := p_actual_work_to_date;
2925     END IF;
2926 
2927     IF (p_work_unit <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_work_unit IS NULL ) THEN
2928       TWORK_UNIT_CODE := p_work_unit;
2929     END IF;
2930 
2931     IF (p_progress_status_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_progress_status_code IS NULL ) THEN
2932       TPROGRESS_STATUS_CODE := p_progress_status_code;
2933     END IF;
2934 
2935     IF (p_job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_job_bill_rate_schedule_id IS NULL ) THEN
2936       TJOB_BILL_RATE_SCHEDULE_ID := p_job_bill_rate_schedule_id;
2937     END IF;
2938 
2939     IF (p_emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_emp_bill_rate_schedule_id IS NULL ) THEN
2940       TEMP_BILL_RATE_SCHEDULE_ID := p_emp_bill_rate_schedule_id;
2941     END IF;
2942 
2943     IF (p_address_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_address_id IS NULL ) THEN
2944       TADDRESS_ID := p_address_id;
2945     END IF;
2946 
2947     IF (p_ready_to_bill_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_ready_to_bill_flag IS NULL ) THEN
2948       TREADY_TO_BILL_FLAG := p_ready_to_bill_flag;
2949     END IF;
2950 
2951     IF (p_ready_to_distribute_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_ready_to_distribute_flag IS NULL ) THEN
2952       TREADY_TO_DISTRIBUTE_FLAG := p_ready_to_distribute_flag;
2953     END IF;
2954 
2955     IF (p_limit_to_txn_controls_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_limit_to_txn_controls_flag IS NULL ) THEN
2956       TLIMIT_TO_TXN_CONTROLS_FLAG := p_limit_to_txn_controls_flag;
2957     END IF;
2958 
2959     IF (p_labor_bill_rate_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_labor_bill_rate_org_id IS NULL ) THEN
2960       TLABOR_BILL_RATE_ORG_ID := p_labor_bill_rate_org_id;
2961     END IF;
2962 
2963     IF (p_labor_std_bill_rate_schdl <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_labor_std_bill_rate_schdl IS NULL ) THEN
2964       TLABOR_STD_BILL_RATE_SCHDL := p_labor_std_bill_rate_schdl;
2965     END IF;
2966 
2967     IF (p_labor_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_labor_schedule_fixed_date IS NULL ) THEN
2968       TLABOR_SCHEDULE_FIXED_DATE := p_labor_schedule_fixed_date;
2969     END IF;
2970 
2971     IF (p_labor_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_labor_schedule_discount IS NULL ) THEN
2972       TLABOR_SCHEDULE_DISCOUNT := p_labor_schedule_discount;
2973     END IF;
2974 
2975     IF (p_nl_bill_rate_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_nl_bill_rate_org_id IS NULL ) THEN
2976       TNLR_BILL_RATE_ORG_ID := p_nl_bill_rate_org_id;
2977     END IF;
2978 
2979     IF (p_nl_std_bill_rate_schdl <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_nl_std_bill_rate_schdl IS NULL ) THEN
2980       TNLR_STD_BILL_RATE_SCHDL := p_nl_std_bill_rate_schdl;
2981     END IF;
2982 
2983     IF (p_nl_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_nl_schedule_fixed_date IS NULL ) THEN
2984       TNLR_SCHEDULE_FIXED_DATE := p_nl_schedule_fixed_date;
2985     END IF;
2986 
2987     IF (p_nl_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_nl_schedule_discount IS NULL ) THEN
2988       TNLR_SCHEDULE_DISCOUNT := p_nl_schedule_discount;
2989     END IF;
2990 
2991     IF (p_labor_cost_multiplier_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_labor_cost_multiplier_name IS NULL ) THEN
2992       TLABOR_COST_MULTIPLIER_NAME := p_labor_cost_multiplier_name;
2993     END IF;
2994 
2995     IF (p_cost_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_cost_ind_rate_sch_id IS NULL ) THEN
2996       TCOST_IND_RATE_SCH_ID := p_cost_ind_rate_sch_id;
2997     END IF;
2998 
2999     IF (p_rev_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_rev_ind_rate_sch_id IS NULL ) THEN
3000       TREV_IND_RATE_SCH_ID := p_rev_ind_rate_sch_id;
3001     END IF;
3002 
3003     IF (p_inv_ind_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_inv_ind_rate_sch_id IS NULL ) THEN
3004       TINV_IND_RATE_SCH_ID := p_inv_ind_rate_sch_id;
3005     END IF;
3006 
3007     IF (p_cost_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_cost_ind_sch_fixed_date IS NULL ) THEN
3008       TCOST_IND_SCH_FIXED_DATE := p_cost_ind_sch_fixed_date;
3009     END IF;
3010 
3011     IF (p_rev_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_rev_ind_sch_fixed_date IS NULL ) THEN
3012       TREV_IND_SCH_FIXED_DATE := p_rev_ind_sch_fixed_date;
3013     END IF;
3014 
3015     IF (p_inv_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_inv_ind_sch_fixed_date IS NULL ) THEN
3016       TINV_IND_SCH_FIXED_DATE := p_inv_ind_sch_fixed_date;
3017     END IF;
3018 
3019     IF (p_labor_sch_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_labor_sch_type IS NULL ) THEN
3020       TLABOR_SCH_TYPE := p_labor_sch_type;
3021     END IF;
3022 
3023     IF (p_nl_sch_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_nl_sch_type IS NULL ) THEN
3024       TNLR_SCH_TYPE := p_nl_sch_type;
3025     END IF;
3026 
3027     IF (p_early_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_early_start_date IS NULL ) THEN
3028       TEARLY_START_DATE := p_early_start_date;
3029     END IF;
3030 
3031     IF (p_early_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_early_finish_date IS NULL ) THEN
3032       TEARLY_FINISH_DATE := p_early_finish_date;
3033     END IF;
3034 
3035     IF (p_late_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_late_start_date IS NULL ) THEN
3036       TLATE_START_DATE := p_late_start_date;
3037     END IF;
3038 
3039     IF (p_late_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_late_finish_date IS NULL ) THEN
3040       TLATE_FINISH_DATE := p_late_finish_date;
3041     END IF;
3042 
3043     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL ) THEN
3044       TATTRIBUTE_CATEGORY := p_attribute_category;
3045     END IF;
3046 
3047    IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN	/* Modified for Bug#6041525 */
3048       TATTRIBUTE1 := p_attribute1;
3049     END IF;
3050 
3051     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN	/* Modified for Bug#6041525 */
3052       TATTRIBUTE2 := p_attribute2;
3053     END IF;
3054 
3055     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN	/* Modified for Bug#6041525 */
3056       TATTRIBUTE3 := p_attribute3;
3057     END IF;
3058 
3059     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN	/* Modified for Bug#6041525 */
3060       TATTRIBUTE4 := p_attribute4;
3061     END IF;
3062 
3063     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN	/* Modified for Bug#6041525 */
3064       TATTRIBUTE5 := p_attribute5;
3065     END IF;
3066 
3067     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN	/* Modified for Bug#6041525 */
3068       TATTRIBUTE6 := p_attribute6;
3069     END IF;
3070 
3071     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN	/* Modified for Bug#6041525 */
3072       TATTRIBUTE7 := p_attribute7;
3073     END IF;
3074 
3075     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN	/* Modified for Bug#6041525 */
3076       TATTRIBUTE8 := p_attribute8;
3077     END IF;
3078 
3079     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN	/* Modified for Bug#6041525 */
3080       TATTRIBUTE9 := p_attribute9;
3081     END IF;
3082 
3083     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN	/* Modified for Bug#6041525 */
3084       TATTRIBUTE10 := p_attribute10;
3085     END IF;
3086 
3087     IF (p_allow_cross_charge_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_allow_cross_charge_flag IS NULL ) THEN
3088       TALLOW_CROSS_CHARGE_FLAG := p_allow_cross_charge_flag;
3089     END IF;
3090 
3091     IF (p_project_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_project_rate_date IS NULL ) THEN
3092       TPROJECT_RATE_DATE := p_project_rate_date;
3093     END IF;
3094 
3095     IF (p_project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_project_rate_type IS NULL ) THEN
3096       TPROJECT_RATE_TYPE := p_project_rate_type;
3097     END IF;
3098 
3099     IF (p_cc_process_labor_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_cc_process_labor_flag IS NULL ) THEN
3100       TCC_PROCESS_LABOR_FLAG := p_cc_process_labor_flag;
3101     END IF;
3102 
3103     IF (p_labor_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_labor_tp_schedule_id IS NULL ) THEN
3104       TLABOR_TP_SCHEDULE_ID := p_labor_tp_schedule_id;
3105     END IF;
3106 
3107     IF (p_labor_tp_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_labor_tp_fixed_date IS NULL ) THEN
3108       TLABOR_TP_FIXED_DATE := p_labor_tp_fixed_date;
3109     END IF;
3110 
3111     IF (p_cc_process_nl_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_cc_process_nl_flag IS NULL ) THEN
3112       TCC_PROCESS_NL_FLAG := p_cc_process_nl_flag;
3113     END IF;
3114 
3115     IF (p_nl_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_nl_tp_schedule_id IS NULL ) THEN
3116       TNL_TP_SCHEDULE_ID := p_nl_tp_schedule_id;
3117     END IF;
3118 
3119     IF (p_nl_tp_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_nl_tp_fixed_date IS NULL ) THEN
3120       TNL_TP_FIXED_DATE := p_nl_tp_fixed_date;
3121     END IF;
3122 
3123     --Added by ansari
3124 --dbms_output.put_line( 'In update task 15 -- 2' );
3125 
3126     IF (p_top_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_top_task_id IS NULL ) THEN
3127       TTOP_TASK_ID := p_top_task_id;
3128     END IF;
3129 
3130     IF (p_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_parent_task_id IS NULL ) THEN
3131       TPARENT_TASK_ID := p_parent_task_id;
3132     END IF;
3133 
3134     IF (p_wbs_level <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_wbs_level IS NULL ) THEN
3135        TWBS_LEVEL:= p_wbs_level;
3136     END IF;
3137 
3138     IF (p_display_sequence <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
3139        TDISPLAY_SEQUENCE:= p_display_sequence;
3140     END IF;
3141 
3142     IF (p_inc_proj_progress_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_inc_proj_progress_flag IS NULL ) THEN
3143        Tinc_proj_progress_flag:= p_inc_proj_progress_flag;
3144     END IF;
3145 
3146     IF (p_comments <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_comments IS NULL ) THEN
3147        Tcomments:= p_comments;
3148     END IF;
3149 
3150     IF (p_comments <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_comments IS NULL ) THEN
3151        Tcomments:= p_comments;
3152     END IF;
3153 
3154 
3155     IF (p_taskfunc_cost_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_taskfunc_cost_rate_type IS NULL ) THEN
3156        ttaskfunc_cost_rate_type:= p_taskfunc_cost_rate_type;
3157     END IF;
3158 
3159     IF (p_taskfunc_cost_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_taskfunc_cost_rate_date IS NULL ) THEN
3160        ttaskfunc_cost_rate_date:= p_taskfunc_cost_rate_date;
3161     END IF;
3162 
3163     IF (p_non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_non_lab_std_bill_rt_sch_id IS NULL ) THEN
3164        tnon_lab_std_bill_rt_sch_id:= p_non_lab_std_bill_rt_sch_id;
3165     END IF;
3166 --  FP.K changes msundare
3167     IF (p_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_labor_disc_reason_code IS NULL ) THEN
3168        Tlabor_disc_reason_code:= p_labor_disc_reason_code;
3169     END IF;
3170 
3171     IF (p_non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_non_labor_disc_reason_code IS NULL ) THEN
3172        Tnon_labor_disc_reason_code:= p_non_labor_disc_reason_code;
3173     END IF;
3174 
3175 --PA L Capital Project Changes 2872708
3176     IF (p_retirement_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
3177         p_retirement_cost_flag IS NULL ) THEN
3178        tretirement_cost_flag:= p_retirement_cost_flag;
3179     END IF;
3180 
3181     IF (p_cint_eligible_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
3182         p_cint_eligible_flag IS NULL ) THEN
3183         tcint_eligible_flag:= p_cint_eligible_flag;
3184     END IF;
3185 
3186     IF (p_cint_stop_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
3187         p_cint_stop_date IS NULL ) THEN
3188         tcint_stop_date:= p_cint_stop_date;
3189     END IF;
3190 
3191 --End PA L Capital Project Changes 2872708
3192 
3193     IF (p_gen_etc_src_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR or
3194         p_gen_etc_src_code IS NULL) THEN
3195       TGEN_ETC_SOURCE_CODE := p_gen_etc_src_code;
3196 
3197 
3198     END IF;
3199 
3200 --dbms_output.put_line( 'In update task 17' );
3201 
3202     -- update task
3203   PA_TASKS_PKG.update_row(
3204    l_rowid,
3205    p_task_id,
3206    p_project_id,
3207    TTASK_NUMBER,
3208    sysdate,
3209    FND_GLOBAL.USER_ID,
3210    FND_GLOBAL.USER_ID,
3211    TTASK_NAME,
3212    TLONG_TASK_NAME, --new
3213    TTOP_TASK_ID,
3214    TWBS_LEVEL,
3215    TREADY_TO_BILL_FLAG,
3216    TREADY_TO_DISTRIBUTE_FLAG,
3217    TPARENT_TASK_ID,
3218    TDESCRIPTION,
3219    TCARRYING_OUT_ORG_ID,
3220    TSERVICE_TYPE_CODE,
3221    TTASK_MANAGER_PERSON_ID,
3222    TCHARGEABLE,
3223    TBILLABLE,
3224    TLIMIT_TO_TXN_CONTROLS_FLAG,
3225    TSTART_DATE,
3226    TCOMPLETION_DATE,
3227    TADDRESS_ID,
3228    TLABOR_BILL_RATE_ORG_ID,
3229    TLABOR_STD_BILL_RATE_SCHDL,
3230    TLABOR_SCHEDULE_FIXED_DATE,
3231    TLABOR_SCHEDULE_DISCOUNT,
3232    TNLR_BILL_RATE_ORG_ID,
3233    TNLR_STD_BILL_RATE_SCHDL,
3234    TNLR_SCHEDULE_FIXED_DATE,
3235    TNLR_SCHEDULE_DISCOUNT,
3236    TLABOR_COST_MULTIPLIER_NAME,
3237    TATTRIBUTE_CATEGORY,
3238    TATTRIBUTE1,
3239    TATTRIBUTE2,
3240    TATTRIBUTE3,
3241    TATTRIBUTE4,
3242    TATTRIBUTE5,
3243    TATTRIBUTE6,
3244    TATTRIBUTE7,
3245    TATTRIBUTE8,
3246    TATTRIBUTE9,
3247    TATTRIBUTE10,
3248    TCOST_IND_RATE_SCH_ID,
3249    TREV_IND_RATE_SCH_ID,
3250    TINV_IND_RATE_SCH_ID,
3251    TCOST_IND_SCH_FIXED_DATE,
3252    TREV_IND_SCH_FIXED_DATE,
3253    TINV_IND_SCH_FIXED_DATE,
3254    TLABOR_SCH_TYPE,
3255    TNLR_SCH_TYPE,
3256    TALLOW_CROSS_CHARGE_FLAG,
3257    TPROJECT_RATE_DATE,
3258    TPROJECT_RATE_TYPE,
3259    TCC_PROCESS_LABOR_FLAG,
3260    TLABOR_TP_SCHEDULE_ID,
3261    TLABOR_TP_FIXED_DATE,
3262    TCC_PROCESS_NL_FLAG,
3263    TNL_TP_SCHEDULE_ID,
3264    TNL_TP_FIXED_DATE,
3265    TRECEIVE_PROJECT_INVOICE_FLAG,
3266    TWORK_TYPE_ID,
3267    TJOB_BILL_RATE_SCHEDULE_ID,
3268    TEMP_BILL_RATE_SCHEDULE_ID,
3269 
3270       /*TTASK_TYPE_CODE,
3271       TDISPLAY_SEQUENCE, --DISPLAY SEQUENCE
3272       TPRIORITY_CODE,
3273       TCRITICAL_FLAG,
3274       TMILESTONE_FLAG,
3275       TSCHEDULED_START_DATE,
3276       TSCHEDULED_FINISH_DATE,
3277       TACTUAL_START_DATE, -- Actual Start Date
3278       TACTUAL_FINISH_DATE, -- Actual Finish Date
3279       TESTIMATED_START_DATE,
3280       TESTIMATED_END_DATE,
3281       TBASELINE_START_DATE,
3282       TBASELINE_END_DATE,
3283       TOBLIGATION_START_DATE,
3284       TOBLIGATION_END_DATE,
3285       TESTIMATE_TO_COMPLETE_WORK,
3286       TBASELINE_WORK,
3287       TSCHEDULED_WORK,
3288       TACTUAL_WORK_TO_DATE,
3289       TWORK_UNIT_CODE,
3290       TPROGRESS_STATUS_CODE,
3291       Tinc_proj_progress_flag,
3292       Tcomments,
3293       p_record_version_number --Record version Number*/
3294 
3295       ttaskfunc_cost_rate_type,
3296       ttaskfunc_cost_rate_date,
3297       tnon_lab_std_bill_rt_sch_id,
3298       Tlabor_disc_reason_code,
3299       Tnon_labor_disc_reason_code,
3300 --PA L Capital Project Changes 2872708
3301       tretirement_cost_flag ,
3302       tcint_eligible_flag   ,
3303       tcint_stop_date      ,
3304 --End PA L Capital Project Changes 2872708
3305       tGEN_ETC_SOURCE_CODE
3306 );
3307 
3308   x_return_status := FND_API.G_RET_STS_SUCCESS;
3309 
3310 
3311   EXCEPTION
3312     WHEN FND_API.G_EXC_ERROR THEN
3313       IF (p_commit = FND_API.G_TRUE) THEN
3314         ROLLBACK to UPDATE_TASK_PRIVATE;
3315       END IF;
3316       x_return_status := FND_API.G_RET_STS_ERROR;
3317     WHEN NO_DATA_FOUND THEN
3318       IF (p_commit = FND_API.G_TRUE) THEN
3319         ROLLBACK to UPDATE_TASK_PRIVATE;
3320       END IF;
3321       x_msg_count := FND_MSG_PUB.count_msg;
3322       x_return_status := FND_API.G_RET_STS_ERROR;
3323     WHEN OTHERS THEN
3324       IF (p_commit = FND_API.G_TRUE) THEN
3325         ROLLBACK to UPDATE_TASK_PRIVATE;
3326       END IF;
3327       x_msg_count := FND_MSG_PUB.count_msg;
3328       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3329       --put message
3330       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
3331                               p_procedure_name => 'UPDATE_TASK',
3332                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3333       RAISE;
3334   END UPDATE_TASK;
3335 
3336 
3337   procedure DELETE_TASK
3338   (
3339      p_api_version                       IN  NUMBER      := 1.0
3340     ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
3341     ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
3342     ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
3343     ,p_validation_level                  IN  VARCHAR2    := 100
3344     ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
3345     ,p_debug_mode                        IN  VARCHAR2    := 'N'
3346     ,p_task_id                                 IN  NUMBER
3347     ,p_record_version_number             IN  NUMBER
3348     ,p_called_from_api      IN    VARCHAR2    := 'ABCD'
3349     ,p_bulk_flag                         IN  VARCHAR2    := 'N'        -- 4201927
3350     ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3351     ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3352     ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3353   )
3354   IS
3355     l_msg_count                          NUMBER := 0;
3356 
3357     l_err_code                           NUMBER                 := 0;
3358     l_err_stack                          VARCHAR2(630);
3359     l_err_stage                          VARCHAR2(80);
3360     l_data                               VARCHAR2(250);
3361     l_msg_data                           VARCHAR2(250);
3362     l_msg_index_out                      NUMBER;
3363 
3364     l_delete_project_allowed             VARCHAR2(1);
3365     l_update_proj_num_allowed            VARCHAR2(1);
3366     l_update_proj_name_allowed           VARCHAR2(1);
3367     l_update_proj_desc_allowed           VARCHAR2(1);
3368     l_update_proj_dates_allowed          VARCHAR2(1);
3369     l_update_proj_status_allowed         VARCHAR2(1);
3370     l_update_proj_manager_allowed        VARCHAR2(1);
3371     l_update_proj_org_allowed            VARCHAR2(1);
3372     l_add_task_allowed                   VARCHAR2(1);
3373     l_delete_task_allowed                VARCHAR2(1);
3374     l_update_task_num_allowed            VARCHAR2(1);
3375     l_update_task_name_allowed           VARCHAR2(1);
3376     l_update_task_dates_allowed          VARCHAR2(1);
3377     l_update_task_desc_allowed           VARCHAR2(1);
3378     l_update_parent_task_allowed         VARCHAR2(1);
3379     l_update_task_org_allowed            VARCHAR2(1);
3380 
3381     t_pm_product_code                    PA_TASKS.PM_PRODUCT_CODE%TYPE;
3382     t_parent_task_id                     PA_TASKS.PARENT_TASK_ID%TYPE;
3383   BEGIN
3384     IF (p_debug_mode = 'Y') THEN
3385       pa_debug.debug('PA_TASKS_MAINT_PVT.DELETE_TASK BEGIN');
3386     END IF;
3387 
3388     IF (p_commit = FND_API.G_TRUE) THEN
3389       savepoint DELETE_TASK_PRIVATE;
3390     END IF;
3391 
3392     IF (p_debug_mode = 'Y') THEN
3393       pa_debug.debug('Performing validations');
3394     END IF;
3395 
3396     -- Get PM_PRODUCT_CODE
3397     BEGIN
3398     select PM_PRODUCT_CODE, PARENT_TASK_ID
3399       into t_pm_product_code, t_parent_task_id
3400       from pa_tasks
3401      where task_id = p_task_id;
3402     EXCEPTION
3403       WHEN NO_DATA_FOUND THEN
3404         PA_UTILS.ADD_MESSAGE('PA','PA_EXP_NO_TASK'); -- specified task does not exist
3405         raise FND_API.G_EXC_ERROR;
3406     END;
3407 
3408     -- Set controls
3409     IF (p_calling_module IN ('SELF_SERVICE')) THEN
3410       If (t_pm_product_code IS NOT NULL) THEN
3411         PA_PM_CONTROLS.GET_PROJECT_ACTIONS_ALLOWED(
3412           p_pm_product_code => t_pm_product_code,
3413           p_delete_project_allowed => l_delete_project_allowed,
3414           p_update_proj_num_allowed => l_update_proj_num_allowed,
3415           p_update_proj_name_allowed => l_update_proj_name_allowed,
3416           p_update_proj_desc_allowed => l_update_proj_desc_allowed,
3417           p_update_proj_dates_allowed  => l_update_proj_dates_allowed,
3418           p_update_proj_status_allowed => l_update_proj_status_allowed,
3419           p_update_proj_manager_allowed => l_update_proj_manager_allowed,
3420           p_update_proj_org_allowed => l_update_proj_org_allowed,
3421           p_add_task_allowed => l_add_task_allowed,
3422           p_delete_task_allowed => l_delete_task_allowed,
3423           p_update_task_num_allowed => l_update_task_num_allowed,
3424           p_update_task_name_allowed => l_update_task_name_allowed,
3425           p_update_task_dates_allowed => l_update_task_dates_allowed,
3426           p_update_task_desc_allowed => l_update_task_desc_allowed,
3427           p_update_parent_task_allowed => l_update_parent_task_allowed,
3428           p_update_task_org_allowed => l_update_task_org_allowed,
3429           p_error_code => l_err_code,
3430           p_error_stack => l_err_stack,
3431           p_error_stage => l_err_stage
3432         );
3433       END IF; --product code is not null
3434     END IF;
3435 
3436     If (p_calling_module IN ('SELF_SERVICE', 'FORM')) THEN
3437     --Check if task can be deleted;
3438       IF (t_pm_product_code IS NOT NULL) AND (l_delete_task_allowed = 'N') THEN
3439         PA_UTILS.ADD_MESSAGE('PA', 'PA_PR_PM_CANNOT_DELETE');
3440         raise FND_API.G_EXC_ERROR;
3441       END IF;
3442 
3443 /* do not stop delting the last task. FPM changes
3444 refer bug 3427157
3445       IF p_called_from_api <> 'IMPORT'   --do not perform the following validation if called from
3446                                          --PA_TASK_PUB1.DELETE_TASK_VERSION and PA_TASK_PUB1.DELETE_TASK_VERSION
3447                                          --is called from import logic.
3448       THEN
3449         --Check if this is last task;
3450         If (PA_TASK_UTILS.check_last_task(p_task_id) <> 0) THEN
3451             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3452                                  p_msg_name => 'PA_TK_CANT_DELETE_LAST_TASK');
3453             raise FND_API.G_EXC_ERROR;
3454          END IF;
3455       END IF;
3456  do not stop delting the last task. FPM changes*/
3457 
3458     --Bug 2947492: The following api call is modified to pass parameters by notation.
3459     --Check if it is okay to delete task
3460       -- 4201927 If this api is getting called from bulk task delete version, p_bulk_flag will
3461       -- be passed as 'Y' and below validation will not be done in that flow
3462       IF p_bulk_flag = 'N' THEN
3463           PA_TASK_UTILS.CHECK_DELETE_TASK_OK(x_task_id     => p_task_id,
3464                                              x_err_code    => l_err_code,
3465                                              x_err_stage   => l_err_stage,
3466                                              x_err_stack   => l_err_stack);
3467           IF (l_err_code <> 0) THEN
3468             PA_UTILS.ADD_MESSAGE('PA', substr(l_err_stage, 1, 30));
3469             raise FND_API.G_EXC_ERROR;
3470           END IF;
3471       END IF;
3472       -- 4201927 end
3473 
3474     END IF;
3475 
3476     --Bug 2947492: The following api call is modified to pass parameters by notation.
3477     PA_PROJECT_CORE.Delete_Task(
3478                       x_task_id     => p_task_id,
3479                       x_bulk_flag   => p_bulk_flag,
3480                       x_err_code    => l_err_code,
3481                       x_err_stage   => l_err_stage,
3482                       x_err_stack   => l_err_stack);
3483 
3484     If (l_err_code <> 0) THEN
3485       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3486                            p_msg_name => substr(l_err_stage,1,30));
3487       raise FND_API.G_EXC_ERROR;
3488     END IF;
3489 
3490     IF (p_calling_module IN ('SELF_SERVICE', 'FORM')) THEN
3491       --Check if child exist for current parent task. If not,
3492       --update chargeable flag to Y
3493       IF (Pa_Task_Utils.check_child_Exists(NVL(t_parent_task_id,0)) = 0 ) THEN
3494         UPDATE Pa_tasks
3495         SET Chargeable_Flag = 'Y',
3496         RECORD_VERSION_NUMBER = nvl(RECORD_VERSION_NUMBER,0) + 1,
3497         last_updated_by = FND_GLOBAL.USER_ID,
3498         last_update_login = FND_GLOBAL.USER_ID,
3499         last_update_date = sysdate
3500         WHERE TASK_ID = t_parent_task_id;
3501       END IF;
3502     END IF;
3503 
3504     l_msg_count := FND_MSG_PUB.count_msg;
3505     IF (l_msg_count > 0) then
3506       x_msg_count := l_msg_count;
3507       IF (x_msg_count = 1) then
3508         pa_interface_utils_pub.get_messages
3509          (p_encoded        => FND_API.G_TRUE,
3510           p_msg_index      => 1,
3511           p_data           => l_data,
3512           p_msg_index_out  => l_msg_index_out);
3513          x_msg_data := l_data;
3514       end if;
3515       raise FND_API.G_EXC_ERROR;
3516     end if;
3517 
3518     x_return_status := FND_API.G_RET_STS_SUCCESS;
3519 
3520   EXCEPTION
3521     WHEN FND_API.G_EXC_ERROR THEN
3522       IF (p_commit = FND_API.G_TRUE) THEN
3523         ROLLBACK to DELETE_TASK_PRIVATE;
3524       END IF;
3525       x_msg_count := FND_MSG_PUB.count_msg;
3526       x_return_status := FND_API.G_RET_STS_ERROR;
3527     WHEN OTHERS THEN
3528       IF (p_commit = FND_API.G_TRUE) THEN
3529         ROLLBACK to DELETE_TASK_PRIVATE;
3530       END IF;
3531       x_msg_count := FND_MSG_PUB.count_msg;
3532       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3533       --put message
3534       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
3535                               p_procedure_name => 'DELETE_TASK',
3536                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3537       RAISE;
3538   END DELETE_TASK;
3539 
3540 -- API name                      : Indent_Task
3541 -- Type                          : Private procedure
3542 -- Pre-reqs                      : None
3543 -- Return Value                  : N/A
3544 -- Prameters
3545 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
3546 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
3547 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
3548 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
3549 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
3550 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
3551 -- p_project_id              IN  NUMBER     REQUIRED
3552 -- p_task_id                   IN    NUMBER     REQUIRED
3553 -- p_record_version_number   IN  NUMBER     REQUIRED   DEFAULT=1
3554 -- x_return_status         OUT   VARCHAR2   REQUIRED
3555 -- x_msg_count               OUT     VARCHAR2   REQUIRED
3556 -- x_msg_data                OUT     VARCHAR2   REQUIRED
3557 --
3558 --  History
3559 --
3560 --  25-JUN-01   Majid Ansari             -Created
3561 --
3562 --
3563 
3564  PROCEDURE Indent_Task(
3565    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
3566   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
3567   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
3568   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
3569   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
3570   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
3571   ,p_project_id              IN  NUMBER
3572   ,p_task_id                   IN    NUMBER
3573   ,p_record_version_number   IN  NUMBER      DEFAULT 1
3574   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3575   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3576   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
3577 
3578     CURSOR c1 IS
3579       select 'x'
3580       from PA_TASKS
3581       where project_id = p_project_id
3582       for update of record_version_number NOWAIT;
3583 
3584     CURSOR c2 IS
3585       select 'x'
3586       from PA_TASKS
3587       where project_id = p_project_id;
3588 
3589     CURSOR cur_task_heirarchy
3590     IS
3591       SELECT task_id, wbs_level, record_version_number
3592         FROM pa_tasks
3593        START WITH task_id = p_task_id
3594        CONNECT BY PRIOR task_id = parent_task_id;
3595 
3596 
3597     --Get the parent of the indenting task if the above task is at higher level
3598     CURSOR cur_parent_of_above( p_wbs_level NUMBER,
3599                                 p_top_task_id_above NUMBER,
3600                                 p_display_sequence NUMBER )
3601     IS
3602 /*      SELECT task_id, top_task_id
3603         FROM pa_tasks
3604        WHERE wbs_level = p_wbs_level
3605          AND top_task_id = p_top_task_id_above
3606          AND display_sequence = ( SELECT max( display_sequence )
3607                                     FROM pa_tasks
3608                                    WHERE top_task_id = p_top_task_id_above
3609                                      AND wbs_level = p_wbs_level
3610                                      AND display_sequence < p_display_sequence );*/
3611 --Project Structure changes
3612     SELECT task_id, top_task_id
3613         FROM pa_tasks pt, pa_proj_element_versions ppev
3614        WHERE pt.wbs_level = p_wbs_level
3615          AND top_task_id = p_top_task_id_above
3616          AND pt.task_id = ppev.proj_element_id
3617          AND ppev.display_sequence = ( SELECT max( ppev.display_sequence )
3618                                          FROM pa_tasks pt, pa_proj_element_versions ppev
3619                                         WHERE top_task_id = p_top_task_id_above
3620                                           AND pt.wbs_level = p_wbs_level
3621                                           AND ppev.proj_element_id = pt.task_id
3622                                           AND ppev.display_sequence < p_display_sequence );
3623 
3624    l_return_status                    VARCHAR2(1);
3625    l_msg_data                         VARCHAR2(250);
3626    l_msg_count                        NUMBER;
3627 
3628    l_dummy                            VARCHAR2(1);
3629    l_error_msg_code                   VARCHAR2(250);
3630    l_data                             VARCHAR2(250);
3631    l_msg_index_out                    NUMBER;
3632 
3633    l_task_level                       PA_TASKS.WBS_LEVEL%TYPE :=0;
3634    l_parent_task_id                   NUMBER;
3635    l_top_task_id                      NUMBER;
3636    l_display_sequence                 NUMBER;
3637 
3638    l_task_level_above                 PA_TASKS.WBS_LEVEL%TYPE :=0;
3639    l_task_id_above                    NUMBER;
3640    l_parent_task_id_above             NUMBER;
3641    l_top_task_id_above                NUMBER;
3642    l_display_sequence_above           NUMBER;
3643 
3644    l_new_parent_id                    NUMBER;
3645    l_new_top_id                       NUMBER;
3646 
3647 -- 23-JUL-2001 Added by HSIU
3648     l_err_code                           NUMBER                 := 0;
3649     l_err_stack                          VARCHAR2(630);
3650     l_err_stage                          VARCHAR2(80); -- VARCHAR2(80)
3651 
3652  BEGIN
3653 
3654     IF p_commit = FND_API.G_TRUE
3655     THEN
3656        SAVEPOINT Edit_Structure;
3657     END IF;
3658     x_return_status := 'S';
3659 
3660     PA_TASKS_MAINT_UTILS.GetWbsLevel(
3661                                  p_project_id           => p_project_id,
3662                                  p_task_id              => p_task_id,
3663 
3664                                  x_task_level           => l_task_level,
3665                                  x_parent_task_id       => l_parent_task_id,
3666                                  x_top_task_id          => l_top_task_id,
3667                                  x_display_sequence     => l_display_sequence,
3668 
3669                                  x_task_id_above       => l_task_id_above,
3670                                  x_task_level_above     => l_task_level_above,
3671                                  x_parent_task_id_above => l_parent_task_id_above,
3672                                  x_top_task_id_above    => l_top_task_id_above,
3673                                  x_display_sequence_above => l_display_sequence_above,
3674 
3675                                  x_return_status     => x_return_status,
3676                                  x_error_msg_code    => x_msg_data );
3677 
3678     -- if the above task is at the higher level ( with low wbs level value ) then the task
3679     --   cannot be indented.
3680 
3681 --dbms_output.put_line( 'Indent Task PVT : Stage 1' );
3682 /* Bug2740269 -- Commented the following If condition and added a new
3683     IF  l_task_level > l_task_level_above OR l_task_level = 1
3684 */
3685     IF  l_task_level > l_task_level_above OR l_display_sequence = 1
3686     THEN
3687         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3688                              p_msg_name       => 'PA_TASK_CANNOT_INDENT' );
3689         x_msg_data := 'PA_TASK_CANNOT_INDENT';
3690         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3691         RAISE  FND_API.G_EXC_ERROR;
3692 
3693     ELSE
3694 
3695 --dbms_output.put_line( 'Indent Task PVT : Stage 2' ||' l_task_level '||l_task_level||'  l_task_level_above '||l_task_level_above);
3696 
3697      -- If the above task has the same wbs level as that of the indenting task then the indenting
3698       -- task becomes the child of the above task
3699 
3700       IF l_task_level = l_task_level_above
3701       THEN
3702         -- 0) Check if this task can have a subtask; no need to check in other cases since
3703         --    the task is already at a higher level, which means it is already a subtask of
3704         --    another task
3705         -- 23-JUL-2001
3706         -- Added by HSIU--check if the reference task can have child tasks
3707 
3708     l_msg_count := FND_MSG_PUB.count_msg;
3709 
3710 --dbms_output.put_line( 'Indent Task PVT : Stage 3 '||'Count '||l_msg_count );
3711 
3712         PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK(x_task_id => l_task_id_above,
3713            x_err_code => l_err_code,
3714            x_err_stack => l_err_stack,
3715            x_err_stage => l_err_stage
3716         );
3717         IF (l_err_code <> 0) THEN
3718            PA_UTILS.ADD_MESSAGE('PA', substr(l_err_stage,1,30));
3719         END IF;
3720 
3721     l_msg_count := FND_MSG_PUB.count_msg;
3722 
3723 --dbms_output.put_line( 'Indent Task PVT : Stage 4'||' Count '||l_msg_count );
3724 
3725         -- HSIU changes ends here
3726 
3727         -- 1) update the parent task id of the indenting task with the above task id
3728         PA_TASKS_MAINT_PVT.UPDATE_TASK
3729            (
3730               p_commit                            => p_commit
3731              ,p_validate_only                     => p_validate_only
3732              ,p_validation_level                  => p_validation_level
3733              ,p_calling_module                    => p_calling_module
3734              ,p_debug_mode                        => p_debug_mode
3735 
3736              ,p_project_id                        => p_project_id
3737              ,p_task_id                           => p_task_id
3738              ,p_parent_task_id                    => l_task_id_above
3739              ,p_record_version_number             => p_record_version_number
3740              ,x_return_status                     => x_return_status
3741              ,x_msg_count                         => x_msg_count
3742              ,x_msg_data                          => x_msg_data );
3743 
3744     l_msg_count := FND_MSG_PUB.count_msg;
3745 
3746 --dbms_output.put_line( 'Indent Task PVT : Stage 5'||' Count '||l_msg_count  );
3747 
3748 
3749             l_msg_count := FND_MSG_PUB.count_msg;
3750 
3751             IF l_msg_count > 0 THEN
3752                x_msg_count := l_msg_count;
3753                x_return_status := 'E';
3754                RAISE  FND_API.G_EXC_ERROR;
3755             END IF;
3756 
3757         -- Changes for bug 3125880
3758         -- As Parent Task Id of the Task being indented is updated and b'coz of this
3759         -- for this particular case the parent task was earlier a lowest level task
3760         -- but now it has become a summarized level task so need to update its chargeable flag to N
3761 
3762         UPDATE PA_TASKS SET CHARGEABLE_FLAG='N'
3763         WHERE TASK_ID = l_task_id_above;
3764 
3765         -- End of Changes for bug 3125880
3766 
3767         -- 2) update the wbs level of the indenting task and its children
3768 
3769 --dbms_output.put_line( 'Indent Task PVT : Stage 6' );
3770 
3771 
3772         FOR cur_task_heirarchy_rec IN cur_task_heirarchy LOOP
3773 
3774             PA_TASKS_MAINT_PVT.UPDATE_TASK
3775               (
3776                  p_commit                            => p_commit
3777                 ,p_validate_only                     => p_validate_only
3778                 ,p_validation_level                  => p_validation_level
3779                 ,p_calling_module                    => p_calling_module
3780                 ,p_debug_mode                        => p_debug_mode
3781 
3782                 ,p_project_id                        => p_project_id
3783                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
3784                 ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level + 1
3785 
3786                 --3) update the top task id of the indenting task including its children with the top task id of the task above.
3787                 ,p_top_task_id                       => l_top_task_id_above
3788                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
3789                 ,x_return_status                     => x_return_status
3790                 ,x_msg_count                         => x_msg_count
3791                 ,x_msg_data                          => x_msg_data );
3792 
3793             l_msg_count := FND_MSG_PUB.count_msg;
3794 
3795             IF l_msg_count > 0 THEN
3796                x_msg_count := l_msg_count;
3797                x_return_status := 'E';
3798                RAISE  FND_API.G_EXC_ERROR;
3799             END IF;
3800 
3801         END LOOP;
3802 
3803 --dbms_output.put_line( 'Indent Task PVT : Stage 7' );
3804 
3805       ELSIF l_task_level < l_task_level_above
3806       THEN
3807 
3808 
3809         -- 1) update the parent task id of the indenting task same as that above task in the above heirarchy which used to
3810         -- at the same level as that of indenting task before indenting.
3811 
3812 
3813         OPEN cur_parent_of_above( l_task_level , l_top_task_id_above, l_display_sequence );
3814         FETCH cur_parent_of_above INTO l_new_parent_id, l_new_top_id;
3815         CLOSE cur_parent_of_above;
3816 
3817         PA_TASKS_MAINT_PVT.UPDATE_TASK
3818             (
3819                 p_commit                            => p_commit
3820                ,p_validate_only                     => p_validate_only
3821                ,p_validation_level                  => p_validation_level
3822                ,p_calling_module                    => p_calling_module
3823                ,p_debug_mode                        => p_debug_mode
3824 
3825               ,p_project_id                        => p_project_id
3826               ,p_task_id                           => p_task_id
3827               ,p_parent_task_id                    => l_new_parent_id
3828               ,p_record_version_number             => p_record_version_number
3829               ,x_return_status                     => x_return_status
3830               ,x_msg_count                         => x_msg_count
3831               ,x_msg_data                          => x_msg_data );
3832 
3833 
3834             l_msg_count := FND_MSG_PUB.count_msg;
3835 
3836             IF l_msg_count > 0 THEN
3837                x_msg_count := l_msg_count;
3838                x_return_status := 'E';
3839                RAISE  FND_API.G_EXC_ERROR;
3840             END IF;
3841 
3842         -- 2) update the top task id of the indenting task including its children with the top task id of the task above.
3843         -- 3) update the wbs level of the indenting task and its children
3844 
3845 
3846         FOR cur_task_heirarchy_rec IN cur_task_heirarchy LOOP
3847 
3848             PA_TASKS_MAINT_PVT.UPDATE_TASK
3849               (
3850               p_commit                            => p_commit
3851              ,p_validate_only                     => p_validate_only
3852              ,p_validation_level                  => p_validation_level
3853              ,p_calling_module                    => p_calling_module
3854              ,p_debug_mode                        => p_debug_mode
3855 
3856                 ,p_project_id                        => p_project_id
3857                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
3858                 ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level + 1
3859                 ,p_top_task_id                       => l_top_task_id_above
3860                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
3861                 ,x_return_status                     => x_return_status
3862                 ,x_msg_count                         => x_msg_count
3863                 ,x_msg_data                          => x_msg_data );
3864 
3865             l_msg_count := FND_MSG_PUB.count_msg;
3866 
3867             IF l_msg_count > 0 THEN
3868                x_msg_count := l_msg_count;
3869                x_return_status := 'E';
3870                RAISE  FND_API.G_EXC_ERROR;
3871             END IF;
3872 
3873         END LOOP;
3874       END IF;
3875     END IF;
3876 
3877  EXCEPTION
3878     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
3879        IF p_commit = FND_API.G_TRUE
3880        THEN
3881           ROLLBACK TO Edit_Structure;
3882        END IF;
3883        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3884        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
3885                                p_procedure_name => 'Indent_task',
3886                                p_error_text     => SUBSTRB(SQLERRM,1,240));
3887        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3888 
3889     WHEN FND_API.G_EXC_ERROR THEN
3890        IF p_commit = FND_API.G_TRUE
3891        THEN
3892           ROLLBACK TO Edit_Structure;
3893        END IF;
3894        x_return_status := 'E';
3895 
3896      WHEN OTHERS THEN
3897        IF p_commit = FND_API.G_TRUE
3898        THEN
3899           ROLLBACK TO Edit_Structure;
3900        END IF;
3901        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3902        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
3903                                p_procedure_name => 'Indent_task',
3904                                p_error_text     => SUBSTRB(SQLERRM,1,240));
3905        RAISE;
3906 
3907  END Indent_Task;
3908 
3909 -- API name                      : Outdent_Task
3910 -- Type                          : Private procedure
3911 -- Pre-reqs                      : None
3912 -- Return Value                  : N/A
3913 -- Prameters
3914 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
3915 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
3916 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
3917 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
3918 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
3919 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
3920 -- p_project_id              IN  NUMBER     REQUIRED
3921 -- p_task_id                   IN    NUMBER     REQUIRED
3922 -- p_record_version_number   IN  NUMBER     REQUIRED   DEFAULT=1
3923 -- x_return_status         OUT   VARCHAR2   REQUIRED
3924 -- x_msg_count               OUT     VARCHAR2   REQUIRED
3925 -- x_msg_data                OUT     VARCHAR2   REQUIRED
3926 --
3927 --  History
3928 --
3929 --  25-JUN-01   Majid Ansari             -Created
3930 --
3931 --
3932 
3933  PROCEDURE Outdent_Task(
3934    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
3935   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
3936   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
3937   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
3938   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
3939   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
3940   ,p_project_id              IN  NUMBER
3941   ,p_task_id                   IN    NUMBER
3942   ,p_record_version_number   IN  NUMBER      DEFAULT 1
3943   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3944   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3945   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
3946 
3947    l_return_status                    VARCHAR2(1);
3948    l_msg_data                         VARCHAR2(250);
3949    l_msg_count                        NUMBER;
3950 
3951    l_dummy                       VARCHAR2(1);
3952    l_error_msg_code                   VARCHAR2(250);
3953    l_data                             VARCHAR2(250);
3954    l_msg_index_out                    NUMBER;
3955 
3956    l_task_level                       PA_TASKS.WBS_LEVEL%TYPE :=0;
3957    l_parent_task_id                   NUMBER;
3958    l_top_task_id                      NUMBER;
3959    l_display_sequence                 NUMBER;
3960 
3961    l_task_level_above                 PA_TASKS.WBS_LEVEL%TYPE :=0;
3962    l_task_id_above                    NUMBER;
3963    l_parent_task_id_above             NUMBER;
3964    l_top_task_id_above                NUMBER;
3965    l_display_sequence_above           NUMBER;
3966    l_new_parent_id                    NUMBER;
3967    l_new_top_id                       NUMBER;
3968 
3969     CURSOR c1 IS
3970       select 'x'
3971       from PA_TASKS
3972       where project_id = p_project_id
3973       for update of record_version_number NOWAIT;
3974 
3975     CURSOR c2 IS
3976       select 'x'
3977       from PA_TASKS
3978       where project_id = p_project_id;
3979 
3980 
3981     CURSOR cur_task_heirarchy( p_task_id NUMBER )
3982     IS
3983       SELECT task_id, wbs_level, record_version_number
3984         FROM pa_tasks
3985        START WITH task_id = p_task_id
3986        CONNECT BY PRIOR task_id = parent_task_id;
3987 
3988 
3989     --For updating top task id
3990     --select all tasks under outdenting task's parent task with display sequence greater than
3991     --the display sequence of the outdenting task
3992     CURSOR cur_all_tasks( p_top_task_id NUMBER, p_display_sequence NUMBER )
3993     IS
3994      /*SELECT task_id, record_version_number
3995          FROM pa_tasks
3996         WHERE top_task_id = p_top_task_id
3997           AND display_sequence > p_display_sequence;*/
3998 
3999 --Project Structure changes
4000          SELECT pt.task_id, pt.record_version_number
4001            FROM pa_tasks pt, pa_proj_element_versions ppev
4002           WHERE top_task_id = p_top_task_id
4003             AND pt.task_id = ppev.proj_element_id
4004             AND ppev.display_sequence >= p_display_sequence;  --bug 2968468
4005 
4006     --For updating parent task id
4007     --All tasks ,that were peer task with outdenting task with larger display order than outdenting task,
4008     --now becomes children of outdenting task.
4009     CURSOR cur_new_child_task( p_wbs_level NUMBER, p_display_sequence NUMBER )
4010     IS
4011 /*      SELECT task_id, record_version_number
4012         FROM pa_tasks
4013        WHERE wbs_level = p_wbs_level
4014          AND parent_task_id = l_parent_task_id
4015          AND project_id = p_project_id
4016          AND display_sequence > p_display_sequence;*/
4017 
4018       SELECT pt.task_id, pt.record_version_number
4019         FROM pa_tasks pt, pa_proj_element_versions ppev
4020        WHERE pt.wbs_level = p_wbs_level
4021          AND parent_task_id = l_parent_task_id
4022          AND pt.project_id = p_project_id
4023          AND pt.task_id = ppev.proj_element_id
4024          AND ppev.display_sequence > p_display_sequence;
4025 
4026     CURSOR cur_parent_of_above( p_wbs_level NUMBER, p_top_task_id_above NUMBER )
4027     IS
4028       SELECT parent_task_id, top_task_id
4029         FROM pa_tasks
4030        WHERE wbs_level = p_wbs_level
4031          AND project_id = p_project_id
4032          AND top_task_id = p_top_task_id_above;
4033  BEGIN
4034 
4035     IF p_commit = FND_API.G_TRUE
4036     THEN
4037        SAVEPOINT Edit_Structure;
4038     END IF;
4039     x_return_status := 'S';
4040 
4041     PA_TASKS_MAINT_UTILS.GetWbsLevel(
4042                                  p_project_id           => p_project_id,
4043                                  p_task_id              => p_task_id,
4044 
4045                                  x_task_level           => l_task_level,
4046                                  x_parent_task_id       => l_parent_task_id,
4047                                  x_top_task_id          => l_top_task_id,
4048                                  x_display_sequence     => l_display_sequence,
4049 
4050                                  x_task_id_above       => l_task_id_above,
4051                                  x_task_level_above     => l_task_level_above,
4052                                  x_parent_task_id_above => l_parent_task_id_above,
4053                                  x_top_task_id_above    => l_top_task_id_above,
4054                                  x_display_sequence_above => l_display_sequence_above,
4055 
4056                                  x_return_status     => x_return_status,
4057                                  x_error_msg_code    => x_msg_data );
4058 
4059 
4060     --If if the selected task is topmost task then it cannot be outdented.
4061     IF l_top_task_id = p_task_id OR l_task_level = 1
4062     THEN
4063         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4064                              p_msg_name       => 'PA_TASK_CANNOT_OUTDENT' );
4065         x_msg_data := 'PA_TASK_CANNOT_OUTDENT';
4066         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4067         RAISE  FND_API.G_EXC_ERROR;
4068     END IF;
4069 
4070     --If the task above is at lower wbs level
4071     IF l_task_level_above < l_task_level
4072     THEN
4073        --2) update the parent task id of outdenting task with the parent task id of the task above
4074 
4075             PA_TASKS_MAINT_PVT.UPDATE_TASK
4076               (
4077               p_commit                            => p_commit
4078              ,p_validate_only                     => p_validate_only
4079              ,p_validation_level                  => p_validation_level
4080              ,p_calling_module                    => p_calling_module
4081              ,p_debug_mode                        => p_debug_mode
4082 
4083                 ,p_project_id                        => p_project_id
4084                 ,p_task_id                           => p_task_id
4085                 ,p_parent_task_id                    => l_parent_task_id_above
4086                 ,p_record_version_number             => p_record_version_number
4087                 ,x_return_status                     => x_return_status
4088                 ,x_msg_count                         => x_msg_count
4089                 ,x_msg_data                          => x_msg_data );
4090 
4091             l_msg_count := FND_MSG_PUB.count_msg;
4092 
4093             IF l_msg_count > 0 THEN
4094                x_msg_count := l_msg_count;
4095                x_return_status := 'E';
4096                RAISE  FND_API.G_EXC_ERROR;
4097             END IF;
4098 
4099        --1) update wbs level of outdenting task includinf its children
4100 
4101         FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4102 
4103             PA_TASKS_MAINT_PVT.UPDATE_TASK
4104               (
4105               p_commit                            => p_commit
4106              ,p_validate_only                     => p_validate_only
4107              ,p_validation_level                  => p_validation_level
4108              ,p_calling_module                    => p_calling_module
4109              ,p_debug_mode                        => p_debug_mode
4110 
4111                 ,p_project_id                        => p_project_id
4112                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
4113                 ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level - 1
4114                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4115                 ,x_return_status                     => x_return_status
4116                 ,x_msg_count                         => x_msg_count
4117                 ,x_msg_data                          => x_msg_data );
4118 
4119             l_msg_count := FND_MSG_PUB.count_msg;
4120 
4121             IF l_msg_count > 0 THEN
4122                x_msg_count := l_msg_count;
4123                x_return_status := 'E';
4124                RAISE  FND_API.G_EXC_ERROR;
4125             END IF;
4126 
4127         END LOOP;
4128 
4129 
4130        --3) update top_task id  for all the task including outdenting task that belong to the
4131        --   to parent task of the outdenting task with display order larger than the outdenting
4132        --   task.
4133 
4134             --if the outdenting task is going to be the top most task then
4135             --update the top task ids of outdenting task's new children with outdenting task id.
4136 
4137             IF l_parent_task_id_above IS NULL
4138             THEN
4139                FOR cur_all_tasks_rec IN cur_all_tasks( l_top_task_id , l_display_sequence ) LOOP
4140 
4141                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4142                    (
4143                       p_commit                            => p_commit
4144                      ,p_validate_only                     => p_validate_only
4145                      ,p_validation_level                  => p_validation_level
4146                      ,p_calling_module                    => p_calling_module
4147                      ,p_debug_mode                        => p_debug_mode
4148 
4149                      ,p_project_id                        => p_project_id
4150                      ,p_task_id                           => cur_all_tasks_rec.task_id
4151                      ,p_top_task_id                       => p_task_id
4152                      ,p_record_version_number             => cur_all_tasks_rec.record_version_number
4153                      ,x_return_status                     => x_return_status
4154                      ,x_msg_count                         => x_msg_count
4155                      ,x_msg_data                          => x_msg_data );
4156 
4157                   l_msg_count := FND_MSG_PUB.count_msg;
4158 
4159                   IF l_msg_count > 0 THEN
4160                      x_msg_count := l_msg_count;
4161                      x_return_status := 'E';
4162                      RAISE  FND_API.G_EXC_ERROR;
4163                   END IF;
4164 
4165                END LOOP;
4166             END IF;
4167 
4168        --4) update the parent task id of all tasks are new children underneath the outdenting task
4169             --( these new child tasks used to be at the same level before the outdenting task outedented )
4170             --l_task_level now contains old value of the wbs level.
4171             FOR cur_new_child_task_rec IN cur_new_child_task( l_task_level, l_display_sequence ) LOOP
4172 
4173                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4174                    (
4175                       p_commit                            => p_commit
4176                      ,p_validate_only                     => p_validate_only
4177                      ,p_validation_level                  => p_validation_level
4178                      ,p_calling_module                    => p_calling_module
4179                      ,p_debug_mode                        => p_debug_mode
4180 
4181                      ,p_project_id                        => p_project_id
4182                      ,p_task_id                           => cur_new_child_task_rec.task_id
4183                      ,p_parent_task_id                    => p_task_id
4184                      ,p_record_version_number             => cur_new_child_task_rec.record_version_number
4185                      ,x_return_status                     => x_return_status
4186                      ,x_msg_count                         => x_msg_count
4187                      ,x_msg_data                          => x_msg_data );
4188 
4189                      l_msg_count := FND_MSG_PUB.count_msg;
4190 
4191                      IF l_msg_count > 0 THEN
4192                         x_msg_count := l_msg_count;
4193                         x_return_status := 'E';
4194                         RAISE  FND_API.G_EXC_ERROR;
4195                      END IF;
4196 
4197             END LOOP;
4198 
4199     --task above having wbs level greater than the wbs level of outdenting task.
4200     ELSIF l_task_level_above > l_task_level
4201     THEN
4202 
4203        --2) update the parent task id and top task id of the outdenting task.
4204 
4205          OPEN cur_parent_of_above( l_task_level - 1, l_top_task_id_above );
4206          FETCH cur_parent_of_above INTO l_new_parent_id, l_new_top_id;
4207          CLOSE cur_parent_of_above;
4208 
4209             --The outdenting task may become a child of another task or
4210             --it may become the top most task in its branch.
4211 
4212 
4213             IF l_new_parent_id IS NULL
4214             THEN
4215                l_new_top_id := p_task_id;
4216                l_new_parent_id := null;
4217             END IF;
4218             PA_TASKS_MAINT_PVT.UPDATE_TASK
4219                 (
4220                  p_commit                            => p_commit
4221                 ,p_validate_only                     => p_validate_only
4222                 ,p_validation_level                  => p_validation_level
4223                 ,p_calling_module                    => p_calling_module
4224                 ,p_debug_mode                        => p_debug_mode
4225                 ,p_project_id                        => p_project_id
4226                 ,p_task_id                           => p_task_id
4227                 ,p_parent_task_id                    => l_new_parent_id
4228                 ,p_top_task_id                       => l_new_top_id
4229                 ,p_record_version_number             => p_record_version_number
4230                 ,x_return_status                     => x_return_status
4231                 ,x_msg_count                         => x_msg_count
4232                 ,x_msg_data                          => x_msg_data );
4233 
4234             l_msg_count := FND_MSG_PUB.count_msg;
4235 
4236             IF l_msg_count > 0 THEN
4237                x_msg_count := l_msg_count;
4238                x_return_status := 'E';
4239                RAISE  FND_API.G_EXC_ERROR;
4240             END IF;
4241 
4242 
4243          --1) update wbs level
4244 
4245          FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4246 
4247              PA_TASKS_MAINT_PVT.UPDATE_TASK
4248               (
4249               p_commit                            => p_commit
4250              ,p_validate_only                     => p_validate_only
4251              ,p_validation_level                  => p_validation_level
4252              ,p_calling_module                    => p_calling_module
4253              ,p_debug_mode                        => p_debug_mode
4254 
4255                 ,p_project_id                        => p_project_id
4256                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
4257                 ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level - 1
4258                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4259                 ,x_return_status                     => x_return_status
4260                 ,x_msg_count                         => x_msg_count
4261                 ,x_msg_data                          => x_msg_data );
4262 
4263             l_msg_count := FND_MSG_PUB.count_msg;
4264 
4265             IF l_msg_count > 0 THEN
4266                x_msg_count := l_msg_count;
4267                x_return_status := 'E';
4268                RAISE  FND_API.G_EXC_ERROR;
4269             END IF;
4270 
4271          END LOOP;
4272 
4273 
4274        --4) update the parent task id of all tasks are new children underneath the outdenting task
4275             --( these new child tasks used to be at the same level before the outdenting task outedented )
4276             --l_task_level now contains old value of the wbs level.
4277             --Also update the top task id for the new children
4278             FOR cur_new_child_task_rec IN cur_new_child_task( l_task_level, l_display_sequence ) LOOP
4279 
4280                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4281                    (
4282                       p_commit                            => p_commit
4283                      ,p_validate_only                     => p_validate_only
4284                      ,p_validation_level                  => p_validation_level
4285                      ,p_calling_module                    => p_calling_module
4286                      ,p_debug_mode                        => p_debug_mode
4287 
4288                      ,p_project_id                        => p_project_id
4289                      ,p_task_id                           => cur_new_child_task_rec.task_id
4290                      ,p_parent_task_id                    => p_task_id
4291                      ,p_top_task_id                       => l_new_top_id
4292                      ,p_record_version_number             => cur_new_child_task_rec.record_version_number
4293                      ,x_return_status                     => x_return_status
4294                      ,x_msg_count                         => x_msg_count
4295                      ,x_msg_data                          => x_msg_data );
4296 
4297                l_msg_count := FND_MSG_PUB.count_msg;
4298 
4299                IF l_msg_count > 0 THEN
4300                   x_msg_count := l_msg_count;
4301                   x_return_status := 'E';
4302                   RAISE  FND_API.G_EXC_ERROR;
4303                END IF;
4304 
4305             END LOOP;
4306 
4307     ELSIF l_task_level_above = l_task_level
4308     THEN
4309 
4310         -- The outdenting task when outdented IS NOT a topmost task
4311         IF l_task_level > 2
4312         THEN
4313 
4314             --1) update the parent task id of the outdenting task.
4315 
4316             --Here the task above and the outdenting task used to be at the same level
4317             --therefore the parent of, parent of the task above, is the parent of the
4318             --outdenting task. So pass wbs level as after outdenting.
4319 
4320             OPEN cur_parent_of_above( l_task_level - 1, l_top_task_id_above );
4321             FETCH cur_parent_of_above INTO l_new_parent_id, l_new_top_id;
4322             CLOSE cur_parent_of_above;
4323 
4324             --The outdenting task may become a child of another task or
4325             --it may become the top most task in its branch.
4326 
4327             PA_TASKS_MAINT_PVT.UPDATE_TASK
4328                 (
4329                  p_commit                            => p_commit
4330                 ,p_validate_only                     => p_validate_only
4331                 ,p_validation_level                  => p_validation_level
4332                 ,p_calling_module                    => p_calling_module
4333                 ,p_debug_mode                        => p_debug_mode
4334                 ,p_project_id                        => p_project_id
4335                 ,p_task_id                           => p_task_id
4336                 ,p_parent_task_id                    => l_new_parent_id
4337                 ,p_record_version_number             => p_record_version_number
4338                 ,x_return_status                     => x_return_status
4339                 ,x_msg_count                         => x_msg_count
4340                 ,x_msg_data                          => x_msg_data );
4341 
4342             l_msg_count := FND_MSG_PUB.count_msg;
4343 
4344             IF l_msg_count > 0 THEN
4345                x_msg_count := l_msg_count;
4346                x_return_status := 'E';
4347                RAISE  FND_API.G_EXC_ERROR;
4348             END IF;
4349 
4350             --1) update wbs level of outdenting task and its all child tasks
4351             FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4352 
4353                 PA_TASKS_MAINT_PVT.UPDATE_TASK
4354                   (
4355                   p_commit                            => p_commit
4356                  ,p_validate_only                     => p_validate_only
4357                  ,p_validation_level                  => p_validation_level
4358                  ,p_calling_module                    => p_calling_module
4359                  ,p_debug_mode                        => p_debug_mode
4360 
4361                  ,p_project_id                        => p_project_id
4362                  ,p_task_id                           => cur_task_heirarchy_rec.task_id
4363                  ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level - 1
4364                  ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4365                  ,x_return_status                     => x_return_status
4366                  ,x_msg_count                         => x_msg_count
4367                  ,x_msg_data                          => x_msg_data );
4368 
4369                 l_msg_count := FND_MSG_PUB.count_msg;
4370 
4371                 IF l_msg_count > 0 THEN
4372                    x_msg_count := l_msg_count;
4373                    x_return_status := 'E';
4374                    RAISE  FND_API.G_EXC_ERROR;
4375                 END IF;
4376             END LOOP;
4377 
4378             --2) updating parent of the new children
4379 
4380             -- update the parent task id of all tasks taht are new children underneath the outdenting task
4381             --( these new child tasks used to be at the same level before the outdenting task outedented )
4382             --l_task_level now contains old value of the wbs level.
4383             FOR cur_new_child_task_rec IN cur_new_child_task( l_task_level, l_display_sequence ) LOOP
4384 
4385                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4386                    (
4387                       p_commit                            => p_commit
4388                      ,p_validate_only                     => p_validate_only
4389                      ,p_validation_level                  => p_validation_level
4390                      ,p_calling_module                    => p_calling_module
4391                      ,p_debug_mode                        => p_debug_mode
4392 
4393                      ,p_project_id                        => p_project_id
4394                      ,p_task_id                           => cur_new_child_task_rec.task_id
4395                      ,p_parent_task_id                    => p_task_id
4396                      ,p_record_version_number             => cur_new_child_task_rec.record_version_number
4397                      ,x_return_status                     => x_return_status
4398                      ,x_msg_count                         => x_msg_count
4399                      ,x_msg_data                          => x_msg_data );
4400 
4401                  l_msg_count := FND_MSG_PUB.count_msg;
4402 
4403                  IF l_msg_count > 0 THEN
4404                     x_msg_count := l_msg_count;
4405                     x_return_status := 'E';
4406                     RAISE  FND_API.G_EXC_ERROR;
4407                  END IF;
4408 
4409             END LOOP;
4410 
4411         -- The outdenting task becomes the top most task
4412         ELSIF l_task_level = 2
4413         THEN
4414             --1) update parent of outdenting task as null
4415             PA_TASKS_MAINT_PVT.UPDATE_TASK
4416                 (
4417                  p_commit                            => p_commit
4418                 ,p_validate_only                     => p_validate_only
4419                 ,p_validation_level                  => p_validation_level
4420                 ,p_calling_module                    => p_calling_module
4421                 ,p_debug_mode                        => p_debug_mode
4422                 ,p_project_id                        => p_project_id
4423                 ,p_task_id                           => p_task_id
4424                 ,p_parent_task_id                    => null
4425 
4426                 -- updating the outdenting top task with p_task id
4427                 ,p_top_task_id                       => p_task_id
4428                 ,p_record_version_number             => p_record_version_number
4429                 ,x_return_status                     => x_return_status
4430                 ,x_msg_count                         => x_msg_count
4431                 ,x_msg_data                          => x_msg_data );
4432 
4433               l_msg_count := FND_MSG_PUB.count_msg;
4434 
4435               IF l_msg_count > 0 THEN
4436                  x_msg_count := l_msg_count;
4437                  x_return_status := 'E';
4438                  RAISE  FND_API.G_EXC_ERROR;
4439               END IF;
4440 
4441             --2) updating parent of the new children
4442 
4443             -- update the parent task id of all tasks taht are new children underneath the outdenting task
4444             --( these new child tasks used to be at the same level before the outdenting task outedented )
4445             --l_task_level now contains old value of the wbs level.
4446             FOR cur_new_child_task_rec IN cur_new_child_task( l_task_level, l_display_sequence ) LOOP
4447 
4448                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4449                    (
4450                       p_commit                            => p_commit
4451                      ,p_validate_only                     => p_validate_only
4452                      ,p_validation_level                  => p_validation_level
4453                      ,p_calling_module                    => p_calling_module
4454                      ,p_debug_mode                        => p_debug_mode
4455 
4456                      ,p_project_id                        => p_project_id
4457                      ,p_task_id                           => cur_new_child_task_rec.task_id
4458                      ,p_parent_task_id                    => p_task_id
4459 
4460                       -- updating the new child top tas with p_task id
4461                      ,p_top_task_id                       => p_task_id
4462                      ,p_record_version_number             => cur_new_child_task_rec.record_version_number
4463                      ,x_return_status                     => x_return_status
4464                      ,x_msg_count                         => x_msg_count
4465                      ,x_msg_data                          => x_msg_data );
4466 
4467                     l_msg_count := FND_MSG_PUB.count_msg;
4468 
4469                     IF l_msg_count > 0 THEN
4470                        x_msg_count := l_msg_count;
4471                        x_return_status := 'E';
4472                        RAISE  FND_API.G_EXC_ERROR;
4473                     END IF;
4474 
4475                     --updating top_task_id of child tasks of outdenting task's new child tasks
4476                     FOR cur_task_heirarchy_rec IN cur_task_heirarchy( cur_new_child_task_rec.task_id ) LOOP
4477                          PA_TASKS_MAINT_PVT.UPDATE_TASK
4478                               (
4479                                   p_commit                            => p_commit
4480                                  ,p_validate_only                     => p_validate_only
4481                                  ,p_validation_level                  => p_validation_level
4482                                  ,p_calling_module                    => p_calling_module
4483                                  ,p_debug_mode                        => p_debug_mode
4484 
4485                                  ,p_project_id                        => p_project_id
4486                                  ,p_task_id                           => cur_task_heirarchy_rec.task_id
4487                                  ,p_top_task_id                       => p_task_id
4488                                  ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4489                                  ,x_return_status                     => x_return_status
4490                                  ,x_msg_count                         => x_msg_count
4491                                  ,x_msg_data                          => x_msg_data );
4492 
4493                           l_msg_count := FND_MSG_PUB.count_msg;
4494 
4495                           IF l_msg_count > 0 THEN
4496                              x_msg_count := l_msg_count;
4497                              x_return_status := 'E';
4498                              RAISE  FND_API.G_EXC_ERROR;
4499                           END IF;
4500                     END LOOP;
4501             END LOOP;
4502 
4503             --1) update wbs level of outdenting task and its all child tasks
4504             FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4505 
4506                 PA_TASKS_MAINT_PVT.UPDATE_TASK
4507                   (
4508                   p_commit                            => p_commit
4509                  ,p_validate_only                     => p_validate_only
4510                  ,p_validation_level                  => p_validation_level
4511                  ,p_calling_module                    => p_calling_module
4512                  ,p_debug_mode                        => p_debug_mode
4513 
4514                  ,p_project_id                        => p_project_id
4515                  ,p_task_id                           => cur_task_heirarchy_rec.task_id
4516                  ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level - 1
4517                  ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4518                  ,x_return_status                     => x_return_status
4519                  ,x_msg_count                         => x_msg_count
4520                  ,x_msg_data                          => x_msg_data );
4521 
4522                  l_msg_count := FND_MSG_PUB.count_msg;
4523                  IF l_msg_count > 0 THEN
4524                     x_msg_count := l_msg_count;
4525                     x_return_status := 'E';
4526                     RAISE  FND_API.G_EXC_ERROR;
4527                  END IF;
4528             END LOOP;
4529 
4530 
4531             --3) update the top task id of outdenting task, child tasks of outdenting task , new child tasks
4532             --   of outdenting task and child tasks of new child tasks with outdenting task id.
4533 
4534             --updating top_task_id of child tasks of outdenting task
4535             FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4536                 PA_TASKS_MAINT_PVT.UPDATE_TASK
4537                  (
4538                  p_commit                            => p_commit
4539                 ,p_validate_only                     => p_validate_only
4540                 ,p_validation_level                  => p_validation_level
4541                 ,p_calling_module                    => p_calling_module
4542                 ,p_debug_mode                        => p_debug_mode
4543 
4544                 ,p_project_id                        => p_project_id
4545                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
4546                 ,p_top_task_id                       => p_task_id
4547                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4548                 ,x_return_status                     => x_return_status
4549                 ,x_msg_count                         => x_msg_count
4550                 ,x_msg_data                          => x_msg_data );
4551 
4552                 l_msg_count := FND_MSG_PUB.count_msg;
4553 
4554                 IF l_msg_count > 0 THEN
4555                    x_msg_count := l_msg_count;
4556                    x_return_status := 'E';
4557                    RAISE  FND_API.G_EXC_ERROR;
4558                 END IF;
4559             END LOOP;
4560         END IF;
4561     END IF;
4562 
4563   EXCEPTION
4564     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
4565        IF p_commit = FND_API.G_TRUE
4566        THEN
4567           ROLLBACK TO Edit_Structure;
4568        END IF;
4569        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4570        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
4571                                p_procedure_name => 'Outdent_task',
4572                                p_error_text     => SUBSTRB(SQLERRM,1,240));
4573        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4574 
4575     WHEN FND_API.G_EXC_ERROR THEN
4576        IF p_commit = FND_API.G_TRUE
4577        THEN
4578           ROLLBACK TO Edit_Structure;
4579        END IF;
4580        x_return_status := 'E';
4581 
4582      WHEN OTHERS THEN
4583        IF p_commit = FND_API.G_TRUE
4584        THEN
4585           ROLLBACK TO Edit_Structure;
4586        END IF;
4587        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4588        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
4589                                p_procedure_name => 'Outdent_task',
4590                                p_error_text     => SUBSTRB(SQLERRM,1,240));
4591        RAISE;
4592  END Outdent_Task;
4593 
4594 -- API name                      : Copy_Entire_Project
4595 -- Type                          : Private procedure
4596 -- Pre-reqs                      : None
4597 -- Return Value                  : N/A
4598 -- Prameters
4599 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
4600 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
4601 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
4602 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
4603 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
4604 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
4605 -- p_reference_project_id      IN    NUMBER
4606 -- p_reference_task_id         IN    NUMBER
4607 -- p_project_id                IN    NUMBER
4608 -- p_peer_or_sub                    IN    VARCHAR2
4609 -- p_task_prefix               IN    VARCHAR2   --
4610 -- x_return_status         OUT   VARCHAR2   REQUIRED
4611 -- x_msg_count               OUT     VARCHAR2   REQUIRED
4612 -- x_msg_data                OUT     VARCHAR2   REQUIRED
4613 --
4614 --  History
4615 --
4616 --  25-JUN-01   Majid Ansari             -Created
4617 --
4618 --
4619 
4620  PROCEDURE Copy_Entire_Project(
4621    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
4622   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
4623   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
4624   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
4625   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
4626   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
4627   ,p_reference_project_id      IN    NUMBER
4628   ,p_reference_task_id         IN    NUMBER
4629   ,p_project_id                IN    NUMBER
4630   ,p_peer_or_sub                    IN    VARCHAR2
4631   ,p_task_prefix               IN    VARCHAR2
4632   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4633   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4634   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
4635 
4636    CURSOR cur_entire_proj
4637    IS
4638 /*     SELECT *
4639        FROM pa_tasks pt
4640       WHERE project_id = p_project_id
4641         ORDER BY display_sequence;*/
4642 
4643      SELECT pt.task_number, pt.task_name, pt.long_task_name, pt.description, pt.carrying_out_organization_id,
4644             pt.work_type_id, pt.service_type_code,
4645             pt.chargeable_flag, pt.billable_flag, pt.receive_project_invoice_flag,
4646             pt.scheduled_start_date, pt.scheduled_finish_date, pt.start_date,
4647             pt.wbs_level, pt.task_id, ppev.display_sequence
4648        FROM pa_tasks pt, pa_proj_element_versions ppev
4649       WHERE pt.project_id = p_project_id
4650         AND pt.task_id = ppev.proj_element_id
4651         ORDER BY ppev.display_sequence;
4652 
4653    CURSOR cur_ref_info
4654    IS
4655      SELECT *
4656        FROM pa_tasks
4657       WHERE project_id = p_reference_project_id
4658         AND task_id    = p_reference_task_id;
4659 
4660    CURSOR cur_data_length(c_pa_schema_name  VARCHAR2)
4661    IS
4662      SELECT column_name, data_length
4663        FROM all_tab_columns
4664       WHERE table_name = 'PA_TASKS'
4665     AND owner = c_pa_schema_name
4666         AND column_name IN ( 'TASK_NAME', 'LONG_TASK_NAME', 'TASK_NUMBER' );
4667 
4668    --schema swap changes
4669    l_table_owner           VARCHAR2(30);
4670    l_fnd_return_status     BOOLEAN;
4671    l_fnd_status            VARCHAR2(30);
4672    l_fnd_industry          VARCHAR2(30);
4673    --schema swap changes
4674 
4675    l_rec_cur_ref_info cur_ref_info%ROWTYPE;
4676 
4677    l_parent_task_id     NUMBER;
4678    l_top_task_id        NUMBER;
4679    l_wbs_level          NUMBER;
4680    l_option             VARCHAR2(4);
4681    l_reference_task_id  NUMBER;
4682    l_max_display        NUMBER;
4683    l_prev_wbs_level     NUMBER;
4684    l_task_id            NUMBER;
4685    l_display_seq        NUMBER;
4686    l_max_seq            NUMBER;
4687    l_first_seq          NUMBER;
4688 
4689    l_estimated_start_date    DATE;
4690    l_estimated_end_date      DATE;
4691 
4692    TYPE CurrTasks IS RECORD( task_id NUMBER(15), wbs_level NUMBER(15),
4693                              display_sequence NUMBER(15), new_task_id NUMBER(15) );
4694    TYPE TaskTab IS TABLE OF CurrTasks INDEX BY BINARY_INTEGER;
4695 
4696    l_TaskTab            TaskTab;
4697    i                    NUMBER := 0;
4698    k                    NUMBER := 0;
4699    l_msg_count                        NUMBER;
4700 
4701    l_task_number_len    NUMBER;
4702    l_task_name_len      NUMBER;
4703    l_long_task_name_len NUMBER;
4704    l_column_name        VARCHAR2(30);
4705    l_data_length        NUMBER;
4706 
4707  BEGIN
4708 
4709       IF p_commit = FND_API.G_TRUE
4710       THEN
4711          SAVEPOINT Copy;
4712       END IF;
4713       x_return_status := 'S';
4714 
4715       --get the max data length allowed for task_number and task_name from data dictionary
4716       --This is to make sure that the task_name and task_number does not exceed after
4717       --appended with prefix.
4718 
4719 --schema swap changes
4720        l_fnd_return_status := FND_INSTALLATION.GET_APP_INFO(
4721                                    application_short_name => 'PA',
4722                                    status                 => l_fnd_status,
4723                                    industry               => l_fnd_industry,
4724                                    oracle_schema          => l_table_owner);
4725        IF NOT l_fnd_return_status
4726        THEN
4727            fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
4728                                    p_procedure_name => 'Copy_Entire_Project',
4729                                    p_error_text     => SUBSTRB('FND_INSTALLATION.GET_APP_INFO api call failed:'||SQLERRM,1,240));
4730            RAISE FND_API.G_EXC_ERROR;
4731        END IF;
4732 --schema swap changes
4733 
4734       OPEN cur_data_length(l_table_owner);
4735       LOOP
4736          FETCH cur_data_length INTO l_column_name, l_data_length;
4737          IF cur_data_length%FOUND
4738          THEN
4739             IF l_column_name = 'TASK_NUMBER'
4740             THEN
4741                l_task_number_len := l_data_length;
4742             ELSIF l_column_name = 'LONG_TASK_NAME'
4743             THEN
4744                l_long_task_name_len := l_data_length;
4745             ELSE
4746                l_task_name_len   := l_data_length;
4747             END IF;
4748          ELSE
4749             Exit;
4750          END IF;
4751       END LOOP;
4752 
4753       OPEN cur_ref_info;
4754       FETCH  cur_ref_info INTO l_rec_cur_ref_info;
4755       CLOSE cur_ref_info;
4756 
4757       l_option := p_peer_or_sub;
4758       l_reference_task_id := p_reference_task_id;
4759 
4760       FOR  cur_entire_proj_rec IN cur_entire_proj LOOP
4761 
4762          IF cur_entire_proj%ROWCOUNT > 1
4763          THEN
4764              --Find now the relationship between the next task in the cursor and the previously created task.
4765              IF cur_entire_proj_rec.wbs_level = l_prev_wbs_level
4766              THEN
4767                 l_reference_task_id := l_task_id;
4768                 l_option            := 'PEER';
4769              ELSIF cur_entire_proj_rec.wbs_level > l_prev_wbs_level
4770              THEN
4771                 l_reference_task_id := l_task_id;
4772                 l_option            := 'SUB';
4773              ELSE
4774                 --Find the task above the heirarchy at the same level as that of the current task
4775                 --from the matrix.
4776                 --Assign a min value to max display sequence.
4777                 l_max_display := 0;
4778                 k := 1;
4779                 LOOP
4780                     --Getting the exact display sequence number. It is possible that there could be
4781                     --more than one task at the same level above.
4782                     IF l_TaskTab( k ).display_sequence > l_max_display AND
4783                        l_TaskTab( k ).display_sequence < cur_entire_proj_rec.display_sequence AND
4784                        l_TaskTab( k ).wbs_level = cur_entire_proj_rec.wbs_level
4785                     THEN
4786                        l_max_display := l_TaskTab( k ).display_sequence;
4787                        l_reference_task_id := l_TaskTab( k ).new_task_id;
4788                     END IF;
4789                     IF k = i   -- If there does not exists any record in the matrix.
4790                     THEN
4791                        Exit;
4792                     ELSE
4793                        k := k + 1;
4794                     END IF;
4795                 END LOOP;
4796                 l_option            := 'PEER';
4797              END IF;
4798          END IF;
4799 
4800          IF l_option = 'PEER' AND
4801             l_rec_cur_ref_info.wbs_level > 1      ---Not a Top level
4802          THEN
4803 --Project structure changes. estimated_start_date and estimated_end_date cols do not exist.
4804 --            l_estimated_start_date := cur_entire_proj_rec.estimated_start_date;
4805 --            l_estimated_end_date := cur_entire_proj_rec.estimated_end_date;
4806             l_estimated_start_date := cur_entire_proj_rec.scheduled_start_date;
4807             l_estimated_end_date := cur_entire_proj_rec.scheduled_finish_date;
4808          ELSE --TOP LEVEL PEER task or SUB task.
4809             l_estimated_start_date := cur_entire_proj_rec.scheduled_start_date;
4810             l_estimated_end_date := cur_entire_proj_rec.scheduled_finish_date;
4811          END IF;
4812 
4813          --Write the basic info in the PL/SQL table.
4814          i := i + 1;
4815          l_TaskTab( i ).task_id := cur_entire_proj_rec.task_id;
4816          l_TaskTab( i ).new_task_id := 0;
4817          l_TaskTab( i ).wbs_level := cur_entire_proj_rec.wbs_level;
4818          l_TaskTab( i ).display_sequence := cur_entire_proj_rec.display_sequence;
4819 
4820          IF   length( p_task_prefix||cur_entire_proj_rec.task_number ) > l_task_number_len OR
4821               length( p_task_prefix||cur_entire_proj_rec.task_name ) > l_task_name_len
4822        OR     length( p_task_prefix||cur_entire_proj_rec.long_task_name ) > l_long_task_name_len
4823          THEN
4824               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4825                                    p_msg_name       => 'PA_TASK_PREFIX_TOO_LARGE' );
4826               x_msg_data := 'PA_TASK_PREFIX_TOO_LARGE';
4827               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4828               RAISE  FND_API.G_EXC_ERROR;
4829          END IF;
4830 
4831          PA_TASKS_MAINT_PVT.CREATE_TASK
4832                       (
4833                         p_commit                            => p_commit
4834                        ,p_validate_only                     => p_validate_only
4835                        ,p_validation_level                  => p_validation_level
4836                        ,p_calling_module                    => p_calling_module
4837                        ,p_debug_mode                        => p_debug_mode
4838 
4839                        ,p_project_id                        => p_reference_project_id
4840                        ,p_reference_task_id                 => l_reference_task_id
4841                        ,p_peer_or_sub                       => l_option
4842                        ,p_task_number                       => p_task_prefix||cur_entire_proj_rec.task_number
4843                        ,p_task_name                         => p_task_prefix||cur_entire_proj_rec.task_name
4844                        ,p_long_task_name                    => p_task_prefix||cur_entire_proj_rec.long_task_name
4845                        ,p_task_description                  => cur_entire_proj_rec.description
4846                        ,p_task_manager_person_id            => null
4847                        ,p_carrying_out_organization_id      => cur_entire_proj_rec.carrying_out_organization_id
4848                        --,p_task_type_code                    => cur_entire_proj_rec.task_type_code
4849                        --,p_priority_code                     => cur_entire_proj_rec.priority_code
4850                        ,p_work_type_id                      => cur_entire_proj_rec.work_type_id
4851                        ,p_service_type_code                 => cur_entire_proj_rec.service_type_code
4852                        --,p_milestone_flag                    => cur_entire_proj_rec.milestone_flag
4853                        --,p_critical_flag                     => null
4854                        ,p_chargeable_flag                   => cur_entire_proj_rec.chargeable_flag
4855                        ,p_billable_flag                     => cur_entire_proj_rec.billable_flag
4856                        ,p_receive_project_invoice_flag      => cur_entire_proj_rec.receive_project_invoice_flag
4857                        ,p_scheduled_start_date              => cur_entire_proj_rec.scheduled_start_date
4858                        ,p_scheduled_finish_date             => cur_entire_proj_rec.scheduled_finish_date
4859                        ,p_estimated_start_date              => l_estimated_start_date
4860                        ,p_estimated_end_date                => l_estimated_end_date
4861                        ,p_actual_start_date                 => null
4862                        ,p_actual_finish_date                => null
4863                        ,p_task_start_date                   => cur_entire_proj_rec.start_date
4864                        --,p_task_completion_date              => cur_entire_proj_rec.end_date
4865                        ,p_baseline_start_date               => null
4866                        ,p_baseline_end_date                 => null
4867 
4868                        ,p_estimate_to_complete_work         => null
4869                        ,p_baseline_work                     => null
4870                        --,p_scheduled_work                    => cur_entire_proj_rec.scheduled_work
4871                        ,p_actual_work_to_date               => null
4872                        ,p_work_unit                         => 'Hours'
4873 
4874                        ,p_task_id                     => l_task_id
4875                        ,x_display_seq                       => l_display_seq
4876 
4877                        ,x_return_status                     => x_return_status
4878                        ,x_msg_count                         => x_msg_count
4879                        ,x_msg_data                          => x_msg_data  );
4880 
4881              l_prev_wbs_level := cur_entire_proj_rec.wbs_level;
4882              l_TaskTab( i ).new_task_id := l_task_id;
4883 
4884              IF cur_entire_proj%ROWCOUNT = 1
4885              THEN
4886                 --capture the first sequence created.
4887                 l_first_seq := l_display_seq;
4888              END IF;
4889 
4890             l_msg_count := FND_MSG_PUB.count_msg;
4891 
4892             IF l_msg_count > 0 THEN
4893                x_msg_count := l_msg_count;
4894                x_return_status := 'E';
4895                RAISE  FND_API.G_EXC_ERROR;
4896             END IF;
4897 
4898 
4899       END LOOP;
4900 
4901 /*      --Call Update statement to update display order
4902 
4903       ************************************************************
4904        THIS FUNCTIONALITY IS MOVED TO PA_TASK_PUB1.COPY_TASK API.
4905       ************************************************************
4906       BEGIN
4907           -- Need to get max number
4908           SELECT max(display_sequence)
4909             INTO l_max_seq
4910             FROM PA_TASKS
4911            WHERE project_id = p_reference_project_id;
4912 
4913           UPDATE PA_TASKS
4914              SET display_sequence =
4915                  PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, l_max_seq, i, 'INSERT', null),
4916                  record_version_number = record_version_number + 1
4917            WHERE project_id = p_reference_project_id
4918              AND ( display_sequence > -( l_first_seq + 1 ) or display_sequence < 0 );
4919       EXCEPTION
4920          WHEN OTHERS THEN
4921               PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
4922               RAISE FND_API.G_EXC_ERROR;
4923       END; */
4924 
4925  EXCEPTION
4926     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
4927        IF p_commit = FND_API.G_TRUE
4928        THEN
4929           ROLLBACK TO Copy;
4930        END IF;
4931        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4932        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
4933                                p_procedure_name => 'Copy_Entire_Task',
4934                                p_error_text     => SUBSTRB(SQLERRM,1,240));
4935        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4936 
4937     WHEN FND_API.G_EXC_ERROR THEN
4938        IF p_commit = FND_API.G_TRUE
4939        THEN
4940           ROLLBACK TO Copy;
4941        END IF;
4942        x_return_status := 'E';
4943 
4944      WHEN OTHERS THEN
4945        IF p_commit = FND_API.G_TRUE
4946        THEN
4947           ROLLBACK TO Copy;
4948        END IF;
4949        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4950        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
4951                                p_procedure_name => 'Copy_Entire_Task',
4952                                p_error_text     => SUBSTRB(SQLERRM,1,240));
4953        RAISE;
4954  END Copy_Entire_Project;
4955 
4956 -- API name                      : Copy_Selected_Task
4957 -- Type                          : Private procedure
4958 -- Pre-reqs                      : None
4959 -- Return Value                  : N/A
4960 -- Prameters
4961 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
4962 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
4963 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
4964 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
4965 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
4966 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
4967 -- p_reference_project_id      IN    NUMBER
4968 -- p_reference_task_id         IN    NUMBER
4969 -- p_task_id                   IN    NUMBER
4970 -- p_peer_or_sub                    IN    VARCHAR2
4971 -- p_task_prefix               IN    VARCHAR2   --
4972 -- x_return_status         OUT   VARCHAR2   REQUIRED
4973 -- x_msg_count               OUT     VARCHAR2   REQUIRED
4974 -- x_msg_data                OUT     VARCHAR2   REQUIRED
4975 --
4976 --  History
4977 --
4978 --  25-JUN-01   Majid Ansari             -Created
4979 --
4980 --
4981 
4982  PROCEDURE Copy_Selected_Task(
4983    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
4984   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
4985   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
4986   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
4987   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
4988   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
4989   ,p_reference_project_id      IN    NUMBER
4990   ,p_reference_task_id         IN    NUMBER
4991   ,p_task_id                   IN    NUMBER
4992   ,p_peer_or_sub                    IN    VARCHAR2
4993   ,p_task_prefix               IN    VARCHAR2
4994   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4995   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4996   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
4997 
4998   CURSOR cur_select_task
4999    IS
5000      SELECT *
5001        FROM pa_tasks
5002       WHERE task_id = p_task_id;
5003 
5004    CURSOR cur_ref_info
5005    IS
5006      SELECT *
5007        FROM pa_tasks
5008       WHERE project_id = p_reference_project_id
5009         AND task_id    = p_reference_task_id;
5010 
5011    CURSOR cur_data_length(c_pa_schema_name  VARCHAR2)
5012    IS
5013      SELECT column_name, data_length
5014        FROM all_tab_columns
5015       WHERE table_name = 'PA_TASKS'
5016         AND owner = c_pa_schema_name
5017         AND column_name IN ( 'TASK_NAME', 'LONG_TASK_NAME', 'TASK_NUMBER' );
5018 
5019    --schema swap changes
5020    l_table_owner           VARCHAR2(30);
5021    l_fnd_return_status     BOOLEAN;
5022    l_fnd_status            VARCHAR2(30);
5023    l_fnd_industry          VARCHAR2(30);
5024    --schema swap changes
5025 
5026    l_rec_cur_ref_info cur_ref_info%ROWTYPE;
5027 
5028    l_parent_task_id     NUMBER;
5029    l_top_task_id        NUMBER;
5030    l_wbs_level          NUMBER;
5031    l_task_id            NUMBER;
5032    l_display_seq        NUMBER;
5033    l_max_seq            NUMBER;
5034 
5035    l_estimated_start_date    DATE;
5036    l_estimated_end_date      DATE;
5037    l_msg_count                        NUMBER;
5038 
5039    l_task_number_len    NUMBER;
5040    l_task_name_len      NUMBER;
5041    l_long_task_name_len NUMBER;
5042    l_column_name        VARCHAR2(30);
5043    l_data_length        NUMBER;
5044 
5045  BEGIN
5046       IF p_commit = FND_API.G_TRUE
5047       THEN
5048          SAVEPOINT Copy;
5049       END IF;
5050       x_return_status := 'S';
5051 
5052       --get the max data length allowed for task_number and task_name from data dictionary
5053       --This is to make sure that the task_name and task_number does not exceed after
5054       --appended with prefix.
5055 
5056 --schema swap changes
5057        l_fnd_return_status := FND_INSTALLATION.GET_APP_INFO(
5058                                    application_short_name => 'PA',
5059                                    status                 => l_fnd_status,
5060                                    industry               => l_fnd_industry,
5061                                    oracle_schema          => l_table_owner);
5062        IF NOT l_fnd_return_status
5063        THEN
5064            fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5065                                    p_procedure_name => 'Copy_Entire_Project',
5066                                    p_error_text     => SUBSTRB('FND_INSTALLATION.GET_APP_INFO api call failed:'||SQLERRM,1,240));
5067            RAISE FND_API.G_EXC_ERROR;
5068        END IF;
5069 --schema swap changes
5070 
5071       OPEN cur_data_length(l_table_owner);
5072       LOOP
5073          FETCH cur_data_length INTO l_column_name, l_data_length;
5074          IF cur_data_length%FOUND
5075          THEN
5076             IF l_column_name = 'TASK_NUMBER'
5077             THEN
5078                l_task_number_len := l_data_length;
5079             ELSIF l_column_name = 'LONG_TASK_NAME'
5080             THEN
5081                l_long_task_name_len := l_data_length;
5082             ELSE
5083                l_task_name_len   := l_data_length;
5084             END IF;
5085          ELSE
5086             Exit;
5087          END IF;
5088       END LOOP;
5089 
5090       OPEN cur_ref_info;
5091       FETCH  cur_ref_info INTO l_rec_cur_ref_info;
5092       CLOSE cur_ref_info;
5093 
5094       -- Only a single task is going to be inserted in this for-loop cursor
5095       FOR  cur_select_task_rec IN cur_select_task LOOP
5096 
5097          IF p_peer_or_sub = 'PEER' AND
5098             l_rec_cur_ref_info.wbs_level > 1      ---Not a Top level
5099          THEN
5100             --l_estimated_start_date := cur_select_task_rec.estimated_start_date;
5101             --l_estimated_end_date := cur_select_task_rec.estimated_end_date;
5102             l_estimated_start_date := cur_select_task_rec.scheduled_start_date;
5103             l_estimated_end_date := cur_select_task_rec.scheduled_finish_date;
5104          ELSE --TOP LEVEL PEER task or SUB task.
5105             l_estimated_start_date := cur_select_task_rec.scheduled_start_date;
5106             l_estimated_end_date := cur_select_task_rec.scheduled_finish_date;
5107          END IF;
5108 
5109          IF   length( p_task_prefix||cur_select_task_rec.task_number ) > l_task_number_len OR
5110               length( p_task_prefix||cur_select_task_rec.task_name ) > l_task_name_len OR
5111               length( p_task_prefix||cur_select_task_rec.long_task_name ) > l_long_task_name_len
5112          THEN
5113               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5114                                    p_msg_name       => 'PA_TASK_PREFIX_TOO_LARGE' );
5115               x_msg_data := 'PA_TASK_PREFIX_TOO_LARGE';
5116               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5117               RAISE  FND_API.G_EXC_ERROR;
5118          END IF;
5119 
5120          PA_TASKS_MAINT_PVT.CREATE_TASK
5121                       (
5122                         p_commit                            => p_commit
5123                        ,p_validate_only                     => p_validate_only
5124                        ,p_validation_level                  => p_validation_level
5125                        ,p_calling_module                    => p_calling_module
5126                        ,p_debug_mode                        => p_debug_mode
5127 
5128                        ,p_project_id                        => p_reference_project_id
5129                        ,p_reference_task_id                 => p_reference_task_id
5130                        ,p_peer_or_sub                       => p_peer_or_sub
5131                        ,p_task_number                       => p_task_prefix||cur_select_task_rec.task_number
5132                        ,p_task_name                         => p_task_prefix||cur_select_task_rec.task_name
5133                        ,p_long_task_name                    => p_task_prefix||cur_select_task_rec.long_task_name
5134                        ,p_task_description                  => cur_select_task_rec.description
5135                        ,p_task_manager_person_id            => null
5136                        ,p_carrying_out_organization_id      => cur_select_task_rec.carrying_out_organization_id
5137                        --,p_task_type_code                    => cur_select_task_rec.task_type_code
5138                        --,p_priority_code                     => cur_select_task_rec.priority_code
5139                        ,p_work_type_id                      => cur_select_task_rec.work_type_id
5140                        ,p_service_type_code                 => cur_select_task_rec.service_type_code
5141                        --,p_milestone_flag                    => cur_select_task_rec.milestone_flag
5142                        --,p_critical_flag                     => null
5143                        ,p_chargeable_flag                   => cur_select_task_rec.chargeable_flag
5144                        ,p_billable_flag                     => cur_select_task_rec.billable_flag
5145                        ,p_receive_project_invoice_flag      => cur_select_task_rec.receive_project_invoice_flag
5146                        ,p_scheduled_start_date              => cur_select_task_rec.scheduled_start_date
5147                        ,p_scheduled_finish_date             => cur_select_task_rec.scheduled_finish_date
5148                        ,p_estimated_start_date              => l_estimated_start_date
5149                        ,p_estimated_end_date                => l_estimated_end_date
5150                        ,p_actual_start_date                 => null
5151                        ,p_actual_finish_date                => null
5152                        ,p_task_start_date                   => cur_select_task_rec.start_date
5153                        --,p_task_completion_date              => cur_select_task_rec.end_date
5154                        ,p_baseline_start_date               => null
5155                        ,p_baseline_end_date                 => null
5156 
5157                        ,p_estimate_to_complete_work         => null
5158                        ,p_baseline_work                     => null
5159 --                       ,p_scheduled_work                    => cur_select_task_rec.scheduled_work
5160                        ,p_actual_work_to_date               => null
5161                        ,p_work_unit                         => 'Hours'
5162 
5163                        ,p_task_id                     => l_task_id
5164                        ,x_display_seq                       => l_display_seq
5165 
5166                        ,x_return_status                     => x_return_status
5167                        ,x_msg_count                         => x_msg_count
5168                        ,x_msg_data                          => x_msg_data  );
5169 
5170             l_msg_count := FND_MSG_PUB.count_msg;
5171 
5172             IF l_msg_count > 0 THEN
5173                x_msg_count := l_msg_count;
5174                x_return_status := 'E';
5175                RAISE  FND_API.G_EXC_ERROR;
5176             END IF;
5177 
5178       END LOOP;
5179 
5180 /*
5181       --Call Update statement to update display order
5182 
5183       ************************************************************
5184        THIS FUNCTIONALITY IS MOVED IN PA_TASK_PUB1.COPY_TASK API.
5185       ************************************************************
5186 
5187       BEGIN
5188           -- Need to get max number
5189           SELECT max(display_sequence)
5190             INTO l_max_seq
5191             FROM PA_TASKS
5192            WHERE project_id = p_reference_project_id;
5193 
5194           UPDATE PA_TASKS
5195              SET display_sequence =
5196                  PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, l_max_seq, 1, 'INSERT', null),
5197                  record_version_number = record_version_number + 1
5198            WHERE project_id = p_reference_project_id
5199              AND ( display_sequence > -( l_display_seq + 1 ) or display_sequence < 0 );
5200       EXCEPTION
5201          WHEN OTHERS THEN
5202               PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
5203               RAISE FND_API.G_EXC_ERROR;
5204       END;*/
5205 
5206  EXCEPTION
5207     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
5208        IF p_commit = FND_API.G_TRUE
5209        THEN
5210           ROLLBACK TO Copy;
5211        END IF;
5212        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5213        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5214                                p_procedure_name => 'Copy_Selected_Task',
5215                                p_error_text     => SUBSTRB(SQLERRM,1,240));
5216        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5217 
5218     WHEN FND_API.G_EXC_ERROR THEN
5219        IF p_commit = FND_API.G_TRUE
5220        THEN
5221           ROLLBACK TO Copy;
5222        END IF;
5223        x_return_status := 'E';
5224 
5225      WHEN OTHERS THEN
5226        IF p_commit = FND_API.G_TRUE
5227        THEN
5228           ROLLBACK TO Copy;
5229        END IF;
5230        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5231        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5232                                p_procedure_name => 'Copy_Selected_Task',
5233                                p_error_text     => SUBSTRB(SQLERRM,1,240));
5234        RAISE;
5235  END Copy_Selected_Task;
5236 
5237 -- API name                      : Copy_Entire_Task
5238 -- Type                          : Private procedure
5239 -- Pre-reqs                      : None
5240 -- Return Value                  : N/A
5241 -- Prameters
5242 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
5243 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
5244 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
5245 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
5246 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
5247 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
5248 -- p_reference_project_id      IN    NUMBER
5249 -- p_reference_task_id         IN    NUMBER
5250 -- p_project_id                IN    NUMBER
5251 -- p_task_id                   IN    NUMBER
5252 -- p_peer_or_sub                    IN    VARCHAR2
5253 -- p_task_prefix               IN    VARCHAR2   --
5254 -- x_return_status         OUT   VARCHAR2   REQUIRED
5255 -- x_msg_count               OUT     VARCHAR2   REQUIRED
5256 -- x_msg_data                OUT     VARCHAR2   REQUIRED
5257 --
5258 --  History
5259 --
5260 --  25-JUN-01   Majid Ansari             -Created
5261 --
5262 --
5263 
5264  PROCEDURE Copy_Entire_Task(
5265    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
5266   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
5267   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
5268   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
5269   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
5270   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
5271   ,p_reference_project_id      IN    NUMBER
5272   ,p_reference_task_id         IN    NUMBER
5273   ,p_project_id                IN    NUMBER
5274   ,p_task_id                   IN    NUMBER
5275   ,p_peer_or_sub                    IN    VARCHAR2
5276   ,p_task_prefix               IN    VARCHAR2
5277   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5278   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5279   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
5280 
5281    CURSOR cur_entire_task
5282    IS
5283 
5284      /*SELECT *
5285        FROM pa_tasks
5286       WHERE project_id = p_project_id
5287      START WITH task_id = p_task_id
5288      CONNECT BY PRIOR task_id = parent_task_id
5289      ORDER BY display_sequence; */
5290 
5291     SELECT pt.task_number, pt.task_name, pt.long_task_name, pt.description, pt.carrying_out_organization_id,
5292             pt.work_type_id, pt.service_type_code,
5293             pt.chargeable_flag, pt.billable_flag, pt.receive_project_invoice_flag,
5294             pt.scheduled_start_date, pt.scheduled_finish_date, pt.start_date,
5295             pt.wbs_level, pt.task_id, ppev.display_sequence
5296       FROM
5297      ( SELECT task_id, task_number, task_name, long_task_name, description,carrying_out_organization_id,
5298               work_type_id, service_type_code,
5299               chargeable_flag, billable_flag, receive_project_invoice_flag,
5300               scheduled_start_date, scheduled_finish_date, start_date,
5301               wbs_level
5302          FROM pa_tasks
5303         WHERE project_id = p_project_id
5304       START WITH task_id = p_task_id
5305       CONNECT BY PRIOR task_id = parent_task_id ) pt,
5306                          pa_proj_element_versions ppev
5307      WHERE pt.task_id = ppev.proj_element_id
5308      ORDER BY ppev.display_sequence;
5309 
5310    CURSOR cur_ref_info
5311    IS
5312      SELECT *
5313        FROM pa_tasks
5314       WHERE project_id = p_reference_project_id
5315         AND task_id    = p_reference_task_id;
5316 
5317    CURSOR cur_data_length(c_pa_schema_name  VARCHAR2)
5318    IS
5319      SELECT column_name, data_length
5320        FROM all_tab_columns
5321       WHERE table_name = 'PA_TASKS'
5322     AND owner = c_pa_schema_name
5323         AND column_name IN ( 'TASK_NAME', 'LONG_TASK_NAME', 'TASK_NUMBER' );
5324 
5325    --schema swap changes
5326    l_table_owner           VARCHAR2(30);
5327    l_fnd_return_status     BOOLEAN;
5328    l_fnd_status            VARCHAR2(30);
5329    l_fnd_industry          VARCHAR2(30);
5330    --schema swap changes
5331 
5332    l_rec_cur_ref_info cur_ref_info%ROWTYPE;
5333 
5334    l_parent_task_id     NUMBER;
5335    l_top_task_id        NUMBER;
5336    l_wbs_level          NUMBER;
5337    l_option             VARCHAR2(4);
5338    l_reference_task_id  NUMBER;
5339    l_max_display        NUMBER;
5340    l_prev_wbs_level     NUMBER;
5341    l_task_id            NUMBER;
5342    l_display_seq        NUMBER;
5343    l_max_seq            NUMBER;
5344    l_first_seq          NUMBER;
5345 
5346    l_estimated_start_date    DATE;
5347    l_estimated_end_date      DATE;
5348 
5349    TYPE CurrTasks IS RECORD( task_id NUMBER(15), wbs_level NUMBER(15),
5350                              display_sequence NUMBER(15), new_task_id NUMBER(15) );
5351    TYPE TaskTab IS TABLE OF CurrTasks INDEX BY BINARY_INTEGER;
5352 
5353    l_TaskTab            TaskTab;
5354    i                    NUMBER := 0;
5355    k                    NUMBER := 0;
5356    l_msg_count                        NUMBER;
5357 
5358    l_task_number_len    NUMBER;
5359    l_task_name_len      NUMBER;
5360    l_long_task_name_len NUMBER;
5361    l_column_name        VARCHAR2(30);
5362    l_data_length        NUMBER;
5363 
5364  BEGIN
5365 
5366       IF p_commit = FND_API.G_TRUE
5367       THEN
5368          SAVEPOINT Copy;
5369       END IF;
5370       x_return_status := 'S';
5371 
5372       --get the max data length allowed for task_number and task_name from data dictionary
5373       --This is to make sure that the task_name and task_number does not exceed after
5374       --appended with prefix.
5375 
5376 --schema swap changes
5377        l_fnd_return_status := FND_INSTALLATION.GET_APP_INFO(
5378                                    application_short_name => 'PA',
5379                                    status                 => l_fnd_status,
5380                                    industry               => l_fnd_industry,
5381                                    oracle_schema          => l_table_owner);
5382        IF NOT l_fnd_return_status
5383        THEN
5384            fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5385                                    p_procedure_name => 'Copy_Entire_Project',
5386                                    p_error_text     => SUBSTRB('FND_INSTALLATION.GET_APP_INFO api call failed:'||SQLERRM,1,240));
5387            RAISE FND_API.G_EXC_ERROR;
5388        END IF;
5389 --schema swap changes
5390 
5391       OPEN cur_data_length(l_table_owner);
5392       LOOP
5393          FETCH cur_data_length INTO l_column_name, l_data_length;
5394          IF cur_data_length%FOUND
5395          THEN
5396             IF l_column_name = 'TASK_NUMBER'
5397             THEN
5398                l_task_number_len := l_data_length;
5399             ELSIF l_column_name = 'LONG_TASK_NAME'
5400             THEN
5401                l_long_task_name_len := l_data_length;
5402             ELSE
5403                l_task_name_len   := l_data_length;
5404             END IF;
5405          ELSE
5406             Exit;
5407          END IF;
5408       END LOOP;
5409 
5410       OPEN cur_ref_info;
5411       FETCH  cur_ref_info INTO l_rec_cur_ref_info;
5412       CLOSE cur_ref_info;
5413 
5414       l_option := p_peer_or_sub;
5415       l_reference_task_id := p_reference_task_id;
5416 
5417       FOR  cur_entire_task_rec IN cur_entire_task LOOP
5418 
5419          IF cur_entire_task%ROWCOUNT > 1
5420          THEN
5421              --Find now the relationship between the next task in the cursor and the previously created task.
5422              IF cur_entire_task_rec.wbs_level = l_prev_wbs_level
5423              THEN
5424                 l_reference_task_id := l_task_id;
5425                 l_option            := 'PEER';
5426              ELSIF cur_entire_task_rec.wbs_level > l_prev_wbs_level
5427              THEN
5428                 l_reference_task_id := l_task_id;
5429                 l_option            := 'SUB';
5430              ELSE
5431                 --Find the task above the heirarchy at the same level as that of the current task
5432                 --from the matrix.
5433                 --Assign a min value to max display sequence.
5434                 l_max_display := 0;
5435                 k := 1;
5436                 LOOP
5437                     --Getting the exact display sequence number. It is possible that there could be
5438                     --more than one task at the same level above.
5439                     IF l_TaskTab( k ).display_sequence > l_max_display AND
5440                        l_TaskTab( k ).display_sequence < cur_entire_task_rec.display_sequence AND
5441                        l_TaskTab( k ).wbs_level = cur_entire_task_rec.wbs_level
5442                     THEN
5443                        l_max_display := l_TaskTab( k ).display_sequence;
5444                        l_reference_task_id := l_TaskTab( k ).new_task_id;
5445                     END IF;
5446                     IF k = i   -- If there does not exists any record in the matrix.
5447                     THEN
5448                        Exit;
5449                     ELSE
5450                        k := k + 1;
5451                     END IF;
5452                 END LOOP;
5453                 l_option            := 'PEER';
5454              END IF;
5455          END IF;
5456 
5457 
5458          IF l_option = 'PEER' AND
5459             l_rec_cur_ref_info.wbs_level > 1      ---Not a Top level
5460          THEN
5461             --l_estimated_start_date := cur_entire_task_rec.estimated_start_date;
5462             --l_estimated_end_date := cur_entire_task_rec.estimated_end_date;
5463             l_estimated_start_date := cur_entire_task_rec.scheduled_start_date;
5464             l_estimated_end_date := cur_entire_task_rec.scheduled_finish_date;
5465          ELSE --TOP LEVEL PEER task or SUB task.
5466             l_estimated_start_date := cur_entire_task_rec.scheduled_start_date;
5467             l_estimated_end_date := cur_entire_task_rec.scheduled_finish_date;
5468          END IF;
5469 
5470          --Write the basic info in the PL/SQL table.
5471          i := i + 1;
5472          l_TaskTab( i ).task_id := cur_entire_task_rec.task_id;
5473          l_TaskTab( i ).new_task_id := 0;
5474          l_TaskTab( i ).wbs_level := cur_entire_task_rec.wbs_level;
5475          l_TaskTab( i ).display_sequence := cur_entire_task_rec.display_sequence;
5476 
5477          IF   length( p_task_prefix||cur_entire_task_rec.task_number ) > l_task_number_len OR
5478               length( p_task_prefix||cur_entire_task_rec.task_name ) > l_task_name_len OR
5479               length( p_task_prefix||cur_entire_task_rec.long_task_name) > l_long_task_name_len
5480          THEN
5481               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5482                                    p_msg_name       => 'PA_TASK_PREFIX_TOO_LARGE' );
5483               x_msg_data := 'PA_TASK_PREFIX_TOO_LARGE';
5484               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5485               RAISE  FND_API.G_EXC_ERROR;
5486          END IF;
5487 
5488          PA_TASKS_MAINT_PVT.CREATE_TASK
5489                       (
5490                         p_commit                            => p_commit
5491                        ,p_validate_only                     => p_validate_only
5492                        ,p_validation_level                  => p_validation_level
5493                        ,p_calling_module                    => p_calling_module
5494                        ,p_debug_mode                        => p_debug_mode
5495 
5496                        ,p_project_id                        => p_reference_project_id
5497                        ,p_reference_task_id                 => l_reference_task_id
5498                        ,p_peer_or_sub                       => l_option
5499                        ,p_task_number                       => p_task_prefix||cur_entire_task_rec.task_number
5500                        ,p_task_name                         => p_task_prefix||cur_entire_task_rec.task_name
5501                        ,p_long_task_name                    => p_task_prefix||cur_entire_task_rec.long_task_name
5502                        ,p_task_description                  => cur_entire_task_rec.description
5503                        ,p_task_manager_person_id            => null
5504                        ,p_carrying_out_organization_id      => cur_entire_task_rec.carrying_out_organization_id
5505                        --,p_task_type_code                    => cur_entire_task_rec.task_type_code
5506                        --,p_priority_code                     => cur_entire_task_rec.priority_code
5507                        ,p_work_type_id                      => cur_entire_task_rec.work_type_id
5508                        ,p_service_type_code                 => cur_entire_task_rec.service_type_code
5509                        --,p_milestone_flag                    => cur_entire_task_rec.milestone_flag
5510                        --,p_critical_flag                     => null
5511                        ,p_chargeable_flag                   => cur_entire_task_rec.chargeable_flag
5512                        ,p_billable_flag                     => cur_entire_task_rec.billable_flag
5513                        ,p_receive_project_invoice_flag      => cur_entire_task_rec.receive_project_invoice_flag
5514                        ,p_scheduled_start_date              => cur_entire_task_rec.scheduled_start_date
5515                        ,p_scheduled_finish_date             => cur_entire_task_rec.scheduled_finish_date
5516                        ,p_estimated_start_date              => l_estimated_start_date
5517                        ,p_estimated_end_date                => l_estimated_end_date
5518                        ,p_actual_start_date                 => null
5519                        ,p_actual_finish_date                => null
5520                        ,p_task_start_date                   => cur_entire_task_rec.start_date
5521                        --,p_task_completion_date              => cur_entire_task_rec.end_date
5522                        ,p_baseline_start_date               => null
5523                        ,p_baseline_end_date                 => null
5524 
5525                        ,p_estimate_to_complete_work         => null
5526                        ,p_baseline_work                     => null
5527 --                       ,p_scheduled_work                    => cur_entire_task_rec.scheduled_work
5528                        ,p_actual_work_to_date               => null
5529                        ,p_work_unit                         => 'Hours'
5530 
5531                        ,p_task_id                     => l_task_id
5532                        ,x_display_seq                       => l_display_seq
5533 
5534                        ,x_return_status                     => x_return_status
5535                        ,x_msg_count                         => x_msg_count
5536                        ,x_msg_data                          => x_msg_data  );
5537 
5538              l_prev_wbs_level := cur_entire_task_rec.wbs_level;
5539              l_TaskTab( i ).new_task_id := l_task_id;
5540 
5541              IF cur_entire_task%ROWCOUNT = 1
5542              THEN
5543                 --capture the first sequence created.
5544                 l_first_seq := l_display_seq;
5545              END IF;
5546 
5547 
5548             l_msg_count := FND_MSG_PUB.count_msg;
5549 
5550             IF l_msg_count > 0 THEN
5551                x_msg_count := l_msg_count;
5552                x_return_status := 'E';
5553                RAISE  FND_API.G_EXC_ERROR;
5554             END IF;
5555 
5556       END LOOP;
5557 
5558 /*
5559       --Call Update statement to update display order
5560 
5561       ************************************************************
5562        THIS FUNCTIONALITY IS MOVED IN PA_TASK_PUB1.COPY_TASK API.
5563       ************************************************************
5564 
5565       BEGIN
5566           -- Need to get max number
5567           SELECT max(display_sequence)
5568             INTO l_max_seq
5569             FROM PA_TASKS
5570            WHERE project_id = p_reference_project_id;
5571 
5572           UPDATE PA_TASKS
5573              SET display_sequence =
5574                  PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, l_max_seq, i, 'INSERT', null),
5575                  record_version_number = record_version_number + 1
5576            WHERE project_id = p_reference_project_id
5577              AND ( display_sequence > -( l_first_seq + 1 ) or display_sequence < 0 );
5578       EXCEPTION
5579          WHEN OTHERS THEN
5580               PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
5581               RAISE FND_API.G_EXC_ERROR;
5582       END; */
5583 
5584  EXCEPTION
5585     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
5586        IF p_commit = FND_API.G_TRUE
5587        THEN
5588           ROLLBACK TO Copy;
5589        END IF;
5590        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5591        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5592                                p_procedure_name => 'Copy_Entire_Task',
5593                                p_error_text     => SUBSTRB(SQLERRM,1,240));
5594        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5595 
5596     WHEN FND_API.G_EXC_ERROR THEN
5597        IF p_commit = FND_API.G_TRUE
5598        THEN
5599           ROLLBACK TO Copy;
5600        END IF;
5601        x_return_status := 'E';
5602 
5603      WHEN OTHERS THEN
5604        IF p_commit = FND_API.G_TRUE
5605        THEN
5606           ROLLBACK TO Copy;
5607        END IF;
5608        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5609        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5610                                p_procedure_name => 'Copy_Entire_Task',
5611                                p_error_text     => SUBSTRB(SQLERRM,1,240));
5612        RAISE;
5613 
5614  END Copy_Entire_Task;
5615 
5616 
5617 -- API name                      : Move_Task
5618 -- Type                          : Private Procedure
5619 -- Pre-reqs                      : None
5620 -- Return Value                  : N/A
5621 -- Prameters
5622 -- p_api_version                       IN  NUMBER      := 1.0
5623 -- p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
5624 -- p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
5625 -- p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
5626 -- p_validation_level                  IN  VARCHAR2    := 100
5627 -- p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
5628 -- p_debug_mode                        IN  VARCHAR2    := 'N'
5629 -- p_reference_project_id              IN  NUMBER
5630 -- p_reference_task_id                 IN  NUMBER
5631 -- p_project_id                        IN  NUMBER
5632 -- p_task_id                           IN  NUMBER
5633 -- p_peer_or_sub                       IN  VARCHAR2
5634 -- p_record_version_number             IN  NUMBER
5635 -- x_return_status                     OUT VARCHAR2
5636 -- x_msg_count                         OUT NUMBER
5637 -- x_msg_data                          OUT VARCHAR2
5638 --
5639 --  History
5640 --
5641 --  02-JUL-01   Majid Ansari             -Created
5642 --
5643 --
5644 
5645  PROCEDURE Move_Task(
5646     p_api_version                       IN  NUMBER      := 1.0
5647    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
5648    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
5649    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
5650    ,p_validation_level                  IN  VARCHAR2    := 100
5651    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
5652    ,p_debug_mode                        IN  VARCHAR2    := 'N'
5653    ,p_reference_project_id              IN  NUMBER
5654    ,p_reference_task_id                 IN  NUMBER
5655    ,p_project_id                        IN  NUMBER
5656    ,p_task_id                           IN  NUMBER
5657    ,p_peer_or_sub                       IN  VARCHAR2
5658    ,p_record_version_number             IN  NUMBER
5659    ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5660    ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5661    ,x_msg_data                          OUT NOCOPY VARCHAR2 ) AS --File.Sql.39 bug 4440895
5662 
5663    CURSOR cur_tasks
5664    IS
5665 /*     SELECT task_id, display_sequence, top_task_id, parent_task_id, wbs_level, record_version_number
5666        FROM pa_tasks
5667       WHERE project_id = p_project_id
5668         START WITH task_id = p_task_id
5669         CONNECT BY PRIOR task_id = parent_task_id
5670      ORDER BY display_sequence;*/
5671 
5672      SELECT pt.task_id, ppev.display_sequence, pt.top_task_id, pt.parent_task_id, pt.wbs_level, pt.record_version_number
5673        FROM
5674      ( SELECT task_id, top_task_id, parent_task_id, wbs_level, record_version_number
5675          FROM pa_tasks
5676         WHERE project_id = p_project_id
5677           START WITH task_id = p_task_id
5678           CONNECT BY PRIOR task_id = parent_task_id ) pt, pa_proj_element_versions ppev
5679       WHERE pt.task_id = ppev.proj_element_id
5680       ORDER BY ppev.display_sequence;
5681 
5682    CURSOR cur_ref_info
5683    IS
5684 /*     SELECT *
5685        FROM pa_tasks
5686       WHERE project_id = p_reference_project_id
5687         START WITH task_id    = p_reference_task_id
5688         CONNECT BY PRIOR task_id = parent_task_id
5689       ORDER BY display_sequence;*/
5690 
5691      SELECT pt.top_task_id, pt.parent_task_id, pt.wbs_level, ppev.display_sequence
5692        FROM
5693      ( SELECT  task_id, top_task_id, parent_task_id, wbs_level
5694          FROM pa_tasks
5695         WHERE project_id = p_reference_project_id
5696           START WITH task_id    = p_reference_task_id
5697           CONNECT BY PRIOR task_id = parent_task_id ) pt, pa_proj_element_versions ppev
5698        WHERE pt.task_id = ppev.proj_element_id
5699       ORDER BY ppev.display_sequence;
5700 
5701 
5702    l_rec_cur_ref_info cur_ref_info%ROWTYPE;
5703 
5704    l_top_level_task_flag      VARCHAR2(1) := 'N';
5705 
5706    l_max_seq                  NUMBER;
5707    i                          NUMBER;
5708 
5709    l_top_task_id              NUMBER;
5710    l_parent_task_id           NUMBER;
5711    l_wbs_level                NUMBER;
5712    l_display_sequence         NUMBER;
5713 
5714    l_ref_top_task_id          NUMBER;
5715    l_ref_parent_task_id       NUMBER;
5716    l_ref_wbs_level            NUMBER;
5717    l_ref_display_sequence     NUMBER;
5718 
5719    l_above_top_task_id        NUMBER;
5720    l_above_parent_task_id     NUMBER;
5721    l_above_wbs_level          NUMBER;
5722    l_above_display_sequence   NUMBER;
5723 
5724    l_ref_child_tasks_num      NUMBER := 0;
5725 
5726    l_lowest_moving_wbs_level  NUMBER;
5727    l_move_direction           VARCHAR2(4);
5728    l_min_display_sequence     NUMBER;
5729    l_max_display_sequence     NUMBER;
5730    l_above_child_tasks_num    NUMBER;
5731    l_reference_sequence       NUMBER;
5732 
5733    l_return_status                    VARCHAR2(1);
5734    l_error_msg_code                   VARCHAR2(250);
5735    l_msg_count                        NUMBER;
5736 
5737 -- 23-JUL-2001 Added by HSIU
5738     l_err_code                           NUMBER                 := 0;
5739     l_err_stack                          VARCHAR2(630);
5740     l_err_stage                          VARCHAR2(80); -- VARCHAR2(80)
5741 
5742  BEGIN
5743 
5744       x_return_status:= FND_API.G_RET_STS_SUCCESS;
5745 
5746 --dbms_output.put_line( 'In move task 0' );
5747 
5748       --Ref project and task id Required check.
5749       PA_TASKS_MAINT_UTILS.REF_PRJ_TASK_ID_REQ_CHECK(
5750                                p_reference_project_id      => p_reference_project_id,
5751                                p_reference_task_id         => p_reference_task_id,
5752                                x_return_status           => l_return_status,
5753                                x_error_msg_code            => l_error_msg_code );
5754 
5755       IF l_return_status = FND_API.G_RET_STS_ERROR
5756       THEN
5757          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5758                               p_msg_name       => l_error_msg_code);
5759          x_msg_data := l_error_msg_code;
5760          x_return_status := 'E';
5761          RAISE  FND_API.G_EXC_ERROR;
5762       END IF;
5763 
5764 --dbms_output.put_line( 'In move task 1' );
5765 
5766       --project and task id Required check.
5767       PA_TASKS_MAINT_UTILS.SRC_PRJ_TASK_ID_REQ_CHECK(
5768                              p_project_id      => p_project_id,
5769                              p_task_id         => p_task_id,
5770                              x_return_status   => l_return_status,
5771                              x_error_msg_code  => l_error_msg_code );
5772 
5773       IF l_return_status = FND_API.G_RET_STS_ERROR
5774       THEN
5775          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5776                               p_msg_name       => l_error_msg_code);
5777          x_msg_data := l_error_msg_code;
5778          x_return_status := 'E';
5779          RAISE  FND_API.G_EXC_ERROR;
5780       END IF;
5781 --dbms_output.put_line( 'In move task 2' );
5782 
5783 
5784       IF p_reference_project_id <> p_project_id
5785       THEN
5786         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5787                              p_msg_name       => 'PA_TASK_MOV_NOT_ALLOWED' );
5788         x_msg_data := 'PA_TASK_MOV_NOT_ALLOWED';
5789         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5790         RAISE  FND_API.G_EXC_ERROR;
5791       END IF;
5792 
5793 --dbms_output.put_line( 'In move task 3' );
5794 
5795 
5796       FOR l_rec_cur_ref_info IN cur_ref_info LOOP
5797          IF cur_ref_info%ROWCOUNT = 1
5798          THEN
5799              --store attributes of the first ref task itself
5800              l_ref_top_task_id         := l_rec_cur_ref_info.top_task_id;
5801              l_ref_parent_task_id      := l_rec_cur_ref_info.parent_task_id;
5802              l_ref_wbs_level           := l_rec_cur_ref_info.wbs_level;
5803              l_ref_display_sequence    := l_rec_cur_ref_info.display_sequence;
5804 
5805              --If only one record exists then both set of variables will hold the same value.
5806              l_above_top_task_id         := l_rec_cur_ref_info.top_task_id;
5807              l_above_parent_task_id      := l_rec_cur_ref_info.parent_task_id;
5808              l_above_wbs_level           := l_rec_cur_ref_info.wbs_level;
5809              l_above_display_sequence    := l_rec_cur_ref_info.display_sequence;
5810          ELSE
5811              --store attributes of the last child in the ref task heir.
5812              l_above_top_task_id         := l_rec_cur_ref_info.top_task_id;
5813              l_above_parent_task_id      := l_rec_cur_ref_info.parent_task_id;
5814              l_above_wbs_level           := l_rec_cur_ref_info.wbs_level;
5815              l_above_display_sequence    := l_rec_cur_ref_info.display_sequence;
5816          END IF;
5817          --no of children underneath the ref tasks
5818          l_above_child_tasks_num := l_above_child_tasks_num + 1;
5819       END LOOP;
5820 
5821 --dbms_output.put_line( 'In move task 4' );
5822 
5823 
5824       IF l_ref_wbs_level = 1 AND
5825          p_peer_or_sub = 'PEER'
5826       THEN
5827          l_top_level_task_flag := 'Y';
5828       ELSE
5829          l_top_task_id := l_ref_top_task_id;
5830          IF p_peer_or_sub = 'PEER'
5831          THEN
5832             l_parent_task_id := l_ref_parent_task_id;
5833          ELSE
5834             -- 23-JUL-2001
5835             -- Added by HSIU--check if the reference task can have child tasks
5836           PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK(x_task_id => p_reference_task_id,
5837                x_err_code => l_err_code,
5838                x_err_stack => l_err_stack,
5839                x_err_stage => l_err_stage
5840             );
5841             IF (l_err_code <> 0) THEN
5842                PA_UTILS.ADD_MESSAGE('PA', substr(l_err_stage,1,30));
5843             END IF;
5844             -- HSIU changes ends here
5845 
5846             l_parent_task_id := p_reference_task_id;
5847          END IF;
5848       END IF;
5849       i := 0;
5850 
5851 --dbms_output.put_line( 'In move task 5' );
5852 
5853       FOR cur_tasks_rec IN cur_tasks LOOP
5854 
5855           IF cur_tasks%ROWCOUNT = 1
5856           THEN
5857              l_lowest_moving_wbs_level := cur_tasks_rec.wbs_level;
5858 
5859              --make the top task for p_task and its children as p_task
5860              IF l_top_level_task_flag = 'Y'
5861              THEN
5862                 l_top_task_id := cur_tasks_rec.task_id;
5863                 l_parent_task_id := null;                  --This is only for the first task in the moving tasks set.
5864              END IF;
5865 
5866              --Set the move direction and boundaries for the sequence number update
5867              IF p_peer_or_sub = 'PEER'
5868              THEN
5869                 l_reference_sequence := l_above_display_sequence;
5870              ELSE
5871                 l_reference_sequence := l_ref_display_sequence;
5872              END IF;
5873              IF cur_tasks_rec.display_sequence < l_reference_sequence
5874              THEN
5875                 l_move_direction := 'DOWN';
5876                 l_min_display_sequence := cur_tasks_rec.display_sequence;
5877                 IF p_peer_or_sub = 'PEER'
5878                 THEN
5879                    l_max_display_sequence := l_above_display_sequence ;
5880                 ELSE
5881                    l_max_display_sequence := l_ref_display_sequence ;
5882                 END IF;
5883              ELSIF cur_tasks_rec.display_sequence > l_reference_sequence
5884              THEN
5885                 l_move_direction := 'UP';
5886                 IF p_peer_or_sub = 'PEER'
5887                 THEN
5888                    l_min_display_sequence := l_above_display_sequence;
5889                 ELSE
5890                    l_min_display_sequence := l_ref_display_sequence;
5891                 END IF;
5892                 l_max_display_sequence := cur_tasks_rec.display_sequence;  --add the total tasks added
5893              ELSE
5894              --otherwise no change in the display sequence.
5895                null;
5896              END IF;
5897 
5898           ELSE
5899              --Parent task id for all other except the first task remains same
5900              l_parent_task_id := cur_tasks_rec.parent_task_id;
5901           END IF;
5902 
5903           i := i + 1;       --counting no. of moving tasks
5904 
5905           --initialize the wbs level of the moving tasks starting from 1
5906           l_wbs_level := cur_tasks_rec.wbs_level - l_lowest_moving_wbs_level + 1;
5907 
5908           IF p_peer_or_sub = 'PEER'
5909           THEN
5910              --creating -ve sequence numbers.
5911              --moving after all child tasks of the ref task
5912              l_display_sequence :=   -( l_above_display_sequence + i ) ;
5913 
5914              l_wbs_level := l_wbs_level + ( l_ref_wbs_level - 1 );
5915           ELSE
5916              l_wbs_level := l_wbs_level + l_ref_wbs_level ;
5917              --creating -ve sequence numbers.
5918              --moving immediately after ref task
5919              l_display_sequence :=   -( l_ref_display_sequence + i ) ;
5920           END IF;
5921 
5922           --dbms_output.put_line( 'Before update task ' );
5923            PA_TASKS_MAINT_PVT.UPDATE_TASK
5924                    (
5925                       p_commit                            => p_commit
5926                      ,p_validate_only                     => p_validate_only
5927                      ,p_validation_level                  => p_validation_level
5928                      ,p_calling_module                    => p_calling_module
5929                      ,p_debug_mode                        => p_debug_mode
5930 
5931                      ,p_project_id                        => p_reference_project_id
5932                      ,p_task_id                           => cur_tasks_rec.task_id
5933 
5934                      ,p_parent_task_id                    => l_parent_task_id
5935                      ,p_top_task_id                       => l_top_task_id
5936                      ,p_wbs_level                         => l_wbs_level
5937                      ,p_display_sequence                  => l_display_sequence
5938 
5939                      ,p_record_version_number             => cur_tasks_rec.record_version_number
5940                      ,x_return_status                     => x_return_status
5941                      ,x_msg_count                         => x_msg_count
5942                      ,x_msg_data                          => x_msg_data );
5943 
5944             l_msg_count := FND_MSG_PUB.count_msg;
5945 
5946             IF l_msg_count > 0 THEN
5947                x_msg_count := l_msg_count;
5948                x_return_status := 'E';
5949                x_msg_data := x_msg_data;
5950           --dbms_output.put_line( 'x_msg_data in update task  '||x_msg_data );
5951 
5952                RAISE  FND_API.G_EXC_ERROR;
5953             END IF;
5954 
5955       END LOOP;
5956 
5957 --dbms_output.put_line( 'In move task 6' );
5958 
5959       -- update chargeable flag for reference task to no.
5960       IF (Pa_Task_Utils.check_child_Exists(NVL(p_reference_task_id,0)) = 1 ) THEN
5961         UPDATE Pa_tasks
5962         SET Chargeable_Flag = 'N',
5963         RECORD_VERSION_NUMBER = nvl(RECORD_VERSION_NUMBER,0) + 1,
5964         last_updated_by = FND_GLOBAL.USER_ID,
5965         last_update_login = FND_GLOBAL.USER_ID,
5966         last_update_date = sysdate
5967         WHERE TASK_ID = p_reference_task_id;
5968       END IF;
5969 
5970 --dbms_output.put_line( 'In move task 7' );
5971 
5972 
5973 /*
5974       --Call Update statement to update display order
5975 
5976       ************************************************************
5977        THIS FUNCTIONALITY IS MOVED IN PA_TASK_PUB1.COPY_TASK API.
5978       ************************************************************
5979 
5980       BEGIN
5981           -- Need to get max number
5982           SELECT max(display_sequence)
5983             INTO l_max_seq
5984             FROM PA_TASKS
5985            WHERE project_id = p_reference_project_id;
5986 
5987 
5988           IF l_move_direction = 'UP'
5989           THEN
5990              l_max_display_sequence := l_max_display_sequence + i - 1;       --( )
5991              l_max_seq              := l_max_seq + i;
5992           END IF;
5993 
5994           UPDATE PA_TASKS
5995              SET display_sequence =
5996                  PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, l_max_seq, i, 'MOVE', l_move_direction ),
5997                  record_version_number = record_version_number + 1
5998            WHERE project_id = p_reference_project_id
5999              AND ( ( display_sequence > l_min_display_sequence and
6000                      display_sequence <= l_max_display_sequence ) or display_sequence < 0 );
6001       EXCEPTION
6002          WHEN OTHERS THEN
6003               PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
6004               RAISE FND_API.G_EXC_ERROR;
6005       END;    */
6006 
6007  EXCEPTION
6008     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
6009        IF p_commit = FND_API.G_TRUE
6010        THEN
6011           ROLLBACK TO Move;
6012        END IF;
6013        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6014        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
6015                                p_procedure_name => 'Move_Task',
6016                                p_error_text     => SUBSTRB(SQLERRM,1,240));
6017        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6018 
6019     WHEN FND_API.G_EXC_ERROR THEN
6020        IF p_commit = FND_API.G_TRUE
6021        THEN
6022           ROLLBACK TO Move;
6023        END IF;
6024        x_return_status := 'E';
6025 
6026      WHEN OTHERS THEN
6027        IF p_commit = FND_API.G_TRUE
6028        THEN
6029           ROLLBACK TO Move;
6030        END IF;
6031        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6032        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
6033                                p_procedure_name => 'Move_Task',
6034                                p_error_text     => SUBSTRB(SQLERRM,1,240));
6035        RAISE;
6036 
6037  END Move_Task;
6038 --Begin add by rtarway for FP.M development
6039 -- Procedure            : SET_UNSET_FINANCIAL_TASK
6040 -- Type                 : Public Procedure
6041 -- Purpose              : This API will be called from set financial tasks page in financial tab
6042 --                      : This Api is to set unset the financial_task_flag in pa_proj_element_versions table.
6043 
6044 -- Note                 :
6045 --                      :
6046 --                      :
6047 -- Assumptions          :
6048 
6049 -- Parameters                   Type     Required        Description and Purpose
6050 -- ---------------------------  ------   --------        --------------------------------------------------------
6051 -- p_task_version_id            NUMBER   YES             Element Version Id.
6052 -- p_checked_flag               NUMBER   YES             Flag indicating Y/N.
6053 -- p_project_id                 NUMBER   YES             Project ID
6054 PROCEDURE SET_UNSET_FINANCIAL_TASK
6055     (
6056        p_api_version           IN   NUMBER   := 1.0
6057      , p_init_msg_list         IN   VARCHAR2 := FND_API.G_TRUE
6058      , p_commit                IN   VARCHAR2 := FND_API.G_FALSE
6059      , p_validate_only         IN   VARCHAR2 := FND_API.G_FALSE
6060      , p_validation_level      IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL
6061      , p_calling_module        IN   VARCHAR2 := 'SELF_SERVICE'
6062      , p_task_version_id       IN   NUMBER
6063     , p_project_id            IN   NUMBER
6064      , p_checked_flag          IN   VARCHAR2
6065      , p_debug_mode            IN   VARCHAR2 := 'N'
6066      , x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6067      , x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
6068      , x_msg_data              OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6069    )
6070 IS
6071 
6072 l_msg_count                     NUMBER := 0;
6073 l_data                          VARCHAR2(2000);
6074 l_msg_data                      VARCHAR2(2000);
6075 l_msg_index_out                 NUMBER;
6076 l_debug_mode                    VARCHAR2(1);
6077 l_task_id                       NUMBER;
6078 l_error_msg_code                VARCHAR2(200);
6079 
6080 l_error_code                    NUMBER;
6081 
6082 l_debug_level2                   CONSTANT NUMBER := 2;
6083 l_debug_level3                   CONSTANT NUMBER := 3;
6084 l_debug_level4                   CONSTANT NUMBER := 4;
6085 l_debug_level5                   CONSTANT NUMBER := 5;
6086 
6087 CURSOR c_get_task_id (l_task_version_id NUMBER, l_project_id NUMBER)
6088 IS
6089 SELECT
6090      proj_element_id
6091 FROM
6092      pa_proj_element_versions
6093 WHERE
6094      project_id = l_project_id
6095 AND
6096      element_version_id = l_task_version_id;
6097 
6098 -- Bug 3735089 Added cursor
6099 CURSOR c_task_exists_in_pa_tasks(c_task_id NUMBER)
6100 IS
6101 SELECT 'Y'
6102 from pa_tasks
6103 WHERE task_id = c_task_id
6104 and project_id = p_project_id;
6105 
6106 --Bug 3735089
6107 l_task_exists       VARCHAR2(1);
6108 l_user_id               NUMBER;
6109 l_login_id              NUMBER;
6110 
6111 
6112 BEGIN
6113      x_msg_count := 0;
6114      x_return_status := FND_API.G_RET_STS_SUCCESS;
6115 
6116      --Bug 3735089 - instead of fnd_profile.value use fnd_profile.value_specific
6117      --l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6118      l_user_id := fnd_global.user_id;
6119      l_login_id := fnd_global.login_id;
6120      l_debug_mode  := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',l_user_id, l_login_id,275,null,null),'N');
6121 
6122      --l_debug_mode  := NVL(p_debug_mode,'N');
6123      IF l_debug_mode = 'Y' THEN
6124           PA_DEBUG.set_curr_function( p_function   => 'SET_UNSET_FINANCIAL_TASK',
6125                                       p_debug_mode => l_debug_mode );
6126      END IF;
6127 
6128      IF l_debug_mode = 'Y' THEN
6129           Pa_Debug.g_err_stage:= 'PA_TASKS_MAINT_PVT : SET_UNSET_FINANCIAL_TASK : Printing Input parameters';
6130           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6131                                      l_debug_level3);
6132 
6133           Pa_Debug.WRITE(g_pkg_name,'p_task_version_id'||':'||p_task_version_id,
6134                                      l_debug_level3);
6135           Pa_Debug.WRITE(g_pkg_name,'p_checked_flag'||':'||p_checked_flag,
6136                                      l_debug_level3);
6137           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
6138                                      l_debug_level3);
6139      END IF;
6140 
6141      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
6142       FND_MSG_PUB.initialize;
6143      END IF;
6144 
6145      IF (p_commit = FND_API.G_TRUE) THEN
6146        savepoint SET_UNSET_FINANCIAL_TASK_PVT;
6147        --savepoint SET_FIN_FLAG_WRAPPER_PUBLIC; Bug 3735089
6148      END IF;
6149 
6150      IF l_debug_mode = 'Y' THEN
6151           Pa_Debug.g_err_stage:= 'PA_TASKS_MAINT_PVT : SET_UNSET_FINANCIAL_TASK : Validating Input parameters';
6152           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6153                                      l_debug_level3);
6154      END IF;
6155 
6156      IF (
6157           ( p_task_version_id IS NULL ) OR
6158           ( p_checked_flag IS NULL ) OR
6159           ( p_project_id IS NULL)
6160         )
6161      THEN
6162          IF l_debug_mode = 'Y' THEN
6163              Pa_Debug.g_err_stage:= 'PA_TASKS_MAINT_PVT : SET_UNSET_FINANCIAL_TASK : Both p_task_version_id and p_checked_flag are null';
6164              Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6165                                     l_debug_level3);
6166          END IF;
6167          RAISE Invalid_Arg_Exc_WP;
6168      END IF;
6169     --Get the task id for task_version_id
6170     IF (p_checked_flag ='N')
6171     THEN
6172          OPEN  c_get_task_id ( p_task_version_id , p_project_id );
6173          FETCH c_get_task_id INTO l_task_id;
6174          CLOSE c_get_task_id ;
6175 
6176     -- Bug 3735089 Added cursor call , we can add this additionally, currently not needed
6177     -- OPEN c_task_exists_in_pa_tasks(l_task_id);
6178     -- FETCH c_task_exists_in_pa_tasks INTO l_task_exists;
6179         -- CLOSE c_task_exists_in_pa_tasks ;
6180 
6181     -- IF NVL(l_task_exists,'N') ='Y' THEN -- Bug 3735089
6182          --Check if the task has any transaction associated with it
6183          PA_PROJ_ELEMENTS_UTILS.CHECK_TASK_HAS_TRANSACTION
6184          (
6185                 p_task_id               => l_task_id
6186               , p_project_id            => p_project_id -- Added for Performance fix 4903460
6187               , x_return_status         => x_return_status
6188               , x_msg_count             => x_msg_count
6189               , x_msg_data              => x_msg_data
6190               , x_error_msg_code        => l_error_msg_code
6191               , x_error_code            => l_error_code
6192          );
6193 
6194          --l_error_code is > 50 in case of associated transaction and < 0 in case of SQL error
6195          IF (l_error_code <> 0) THEN
6196 
6197 
6198               IF l_debug_mode = 'Y' THEN
6199                   Pa_Debug.g_err_stage:= 'PA_TASKS_MAINT_PVT : SET_UNSET_FINANCIAL_TASK :l_error_code :'||l_error_code||'l_error_msg_code :'||l_error_msg_code;
6200                   Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6201                                          l_debug_level3);
6202               END IF;
6203               PA_UTILS.ADD_MESSAGE(
6204                                      p_app_short_name => 'PA'
6205                                    , p_msg_name       => substr(l_error_msg_code,1,30)--bug 3735089 used substr
6206                                   );
6207               RAISE FND_API.G_EXC_ERROR;
6208          END IF;
6209     -- END IF; --NVL(l_task_exists,'N') ='Y' THEN
6210      END IF;
6211     --Update the table with financial flag
6212     --Not using table handler as only one field needs to be updated.
6213 
6214 
6215     UPDATE
6216      PA_PROJ_ELEMENT_VERSIONS
6217     SET
6218      financial_task_flag = p_checked_flag
6219     WHERE
6220      element_version_id = p_task_version_id
6221     AND
6222      project_id = p_project_id;
6223 
6224 
6225     IF (p_commit = FND_API.G_TRUE) THEN
6226           COMMIT;
6227     END IF;
6228 
6229      -- Bug 3735089 : using reset_curr_function too, just using set_curr_function may overflow it after several recursive calls
6230      -- and it gives ORA 06512 numeric or value error
6231       IF l_debug_mode = 'Y' THEN
6232     Pa_Debug.reset_curr_function;
6233       END IF;
6234 
6235 EXCEPTION
6236 
6237 WHEN FND_API.G_EXC_ERROR THEN
6238 
6239      x_return_status := Fnd_Api.G_RET_STS_ERROR;
6240      l_msg_count := Fnd_Msg_Pub.count_msg;
6241 
6242      IF p_commit = FND_API.G_TRUE THEN
6243        ROLLBACK TO  SET_UNSET_FINANCIAL_TASK_PVT;
6244        --ROLLBACK TO  SET_FIN_FLAG_WRAPPER_PUBLIC; Bug 3735089
6245      END IF;
6246      IF c_get_task_id%ISOPEN THEN
6247         CLOSE c_get_task_id;
6248      END IF;
6249      IF l_msg_count = 1 AND x_msg_data IS NULL
6250       THEN
6251           Pa_Interface_Utils_Pub.get_messages
6252               ( p_encoded        => Fnd_Api.G_TRUE
6253               , p_msg_index      => 1
6254               , p_msg_count      => l_msg_count
6255               , p_msg_data       => l_msg_data
6256               , p_data           => l_data
6257               , p_msg_index_out  => l_msg_index_out);
6258           x_msg_data := l_data;
6259           x_msg_count := l_msg_count;
6260      ELSE
6261           x_msg_count := l_msg_count;
6262      END IF;
6263 
6264      IF l_debug_mode = 'Y' THEN
6265           Pa_Debug.reset_curr_function;
6266      END IF;
6267 
6268 WHEN Invalid_Arg_Exc_WP THEN
6269 
6270      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6271      x_msg_count     := 1;
6272      x_msg_data      := 'PA_TASKS_MAINT_PVT : SET_UNSET_FINANCIAL_TASK : NULL PARAMETERS ARE PASSED OR CURSOR DIDNT RETURN ANY ROWS';
6273 
6274      IF p_commit = FND_API.G_TRUE THEN
6275        ROLLBACK TO  SET_UNSET_FINANCIAL_TASK_PVT;
6276        --ROLLBACK TO  DELETE_MAPPING_PUBLIC; Bug 3735089
6277      END IF;
6278      IF c_get_task_id%ISOPEN THEN
6279         CLOSE c_get_task_id;
6280      END IF;
6281      Fnd_Msg_Pub.add_exc_msg
6282                    ( p_pkg_name        => 'PA_TASKS_MAINT_PVT'
6283                     , p_procedure_name  => 'SET_UNSET_FINANCIAL_TASK'
6284                     , p_error_text      => x_msg_data);
6285 
6286      IF l_debug_mode = 'Y' THEN
6287           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6288           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6289                               l_debug_level5);
6290 
6291           Pa_Debug.reset_curr_function;
6292      END IF;
6293      RAISE;
6294 
6295 WHEN OTHERS THEN
6296 
6297      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6298      x_msg_count     := 1;
6299      x_msg_data      := substr(SQLERRM,1,120);-- Bug 3735089 Added substr
6300 
6301      IF p_commit = FND_API.G_TRUE THEN
6302        ROLLBACK TO  SET_UNSET_FINANCIAL_TASK_PVT;
6303        --ROLLBACK TO  DELETE_MAPPING_PUBLIC; Bug 3735089
6304      END IF;
6305 
6306      IF c_get_task_id%ISOPEN THEN
6307         CLOSE c_get_task_id;
6308      END IF;
6309 
6310      Fnd_Msg_Pub.add_exc_msg
6311                    ( p_pkg_name         => 'PA_TASKS_MAINT_PVT'
6312                     , p_procedure_name  => 'SET_UNSET_FINANCIAL_TASK'
6313                     , p_error_text      => x_msg_data);
6314 
6315      IF l_debug_mode = 'Y' THEN
6316           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6317           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6318                               l_debug_level5);
6319           Pa_Debug.reset_curr_function;
6320      END IF;
6321      RAISE;
6322 END SET_UNSET_FINANCIAL_TASK ;
6323 
6324 -- Procedure            : SYNC_UP_WP_TASKS_WITH_FIN
6325 -- Type                 : Private Procedure
6326 -- Purpose              : This API will be called from SYNC_UP_WP_TASKS_WITH_FIN public
6327 --                      : This API is to Sync up the financial tasks with pa_tasks table
6328 -- Note                 : This API can be called in two modes. One Singular and one All. In both the cases it will assume that
6329 --                      : 1. In Singular case this API will expect the p_task_version_id and p_checked_flag to be passed.
6330 --                      : 2. In All mode, it will expect the p_structre_version_id and p_syncup_all_tasks flag to be passed as
6331 --                      :    'N'. In this mode this API will loop thru all the tasks in the passed structure, get each tasks
6332 --                           financial_task_flag. If flag is Y in database, then check if the task is not present in
6333 --                           pa_tasks. If not present in pa_tasks then create it there. Similarly remove from
6334 --                           pa_tasks if flag is 'N'.
6335 -- Assumptions          : The financial_task_flag is already set in the database.
6336 
6337 -- Parameters                   Type     Required        Description and Purpose
6338 -- ---------------------------  ------   --------        --------------------------------------------------------
6339 -- p_parent_task_version_id    NUMBER     NO             Parent task id of the current task
6340 -- p_patask_record_version_number NUMBER  NO
6341 -- p_project_id                NUMBER     Yes            Project_id of the project being synced up.
6342 -- p_syncup_all_tasks          VARCHAR2   NO             Flag indicating Y/N whether to sync up all the tasks for the given structure version id.
6343 -- p_task_version_id           NUMBER     NO             The single task's version id. This is applicable for singular case.
6344 -- p_structure_version_id      NUMBER     NO             The structre version_id of the structre being synced up. This is applicable when we want to sync up all the tasks.
6345 -- p_checked_flag              VARCHAR2   NO             This flag(Y/N) will be applicable in singular case where task_version_id is being passed. This is passed so that this API again do not have to fetch financial_task_flag from the database.
6346 -- p_mode                      VARCHAR2   NO             The mode mentioning that whether processing is to be done for All the tasks in the structure or juts for the single passed task. Possible values are SINGLE and ALL
6347 
6348 PROCEDURE SYNC_UP_WP_TASKS_WITH_FIN
6349     (
6350        p_api_version                    IN   NUMBER   := 1.0
6351      , p_init_msg_list                  IN   VARCHAR2 := FND_API.G_TRUE
6352      , p_commit                         IN   VARCHAR2 := FND_API.G_FALSE
6353      , p_validate_only                  IN   VARCHAR2 := FND_API.G_FALSE
6354      , p_validation_level               IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL
6355      , p_calling_module                 IN   VARCHAR2 := 'SELF_SERVICE'
6356      , p_debug_mode                     IN   VARCHAR2 := 'N'
6357      , p_parent_task_version_id         IN   NUMBER   := FND_API.G_MISS_NUM
6358      , p_patask_record_version_number   IN   NUMBER   := FND_API.G_MISS_NUM
6359      , p_project_id                     IN   NUMBER
6360      , p_syncup_all_tasks               IN   VARCHAR2 := 'N'
6361      , p_task_version_id                IN   NUMBER   := FND_API.G_MISS_NUM
6362      , p_structure_version_id           IN   NUMBER   := FND_API.G_MISS_NUM
6363      , p_checked_flag                   IN   VARCHAR2 := FND_API.G_MISS_CHAR
6364      , p_mode                           IN   VARCHAR2 := 'SINGLE'
6365      , x_return_status                  OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6366      , x_msg_count                      OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
6367      , x_msg_data                       OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6368    )
6369 IS
6370 l_msg_count                     NUMBER := 0;
6371 l_data                          VARCHAR2(2000);
6372 l_msg_data                      VARCHAR2(2000);
6373 l_msg_index_out                 NUMBER;
6374 l_debug_mode                    VARCHAR2(1);
6375 l_task_id                       NUMBER ;
6376 l_parent_task_id                NUMBER;
6377 l_task_name                     VARCHAR2(240);
6378 l_task_number                   VARCHAR2(100);
6379 --l_display_seq                   NUMBER;
6380 l_carrying_out_organization_id  NUMBER;
6381 l_task_version_id               NUMBER;
6382 l_patask_record_version_number  NUMBER;
6383 l_debug_level2                   CONSTANT NUMBER := 2;
6384 l_debug_level3                   CONSTANT NUMBER := 3;
6385 l_debug_level4                   CONSTANT NUMBER := 4;
6386 l_debug_level5                   CONSTANT NUMBER := 5;
6387 
6388 --This cursor will give the element id corresponding to a element version id
6389 CURSOR c_get_task_id (l_element_version_id NUMBER, l_project_id NUMBER)
6390 IS
6391 SELECT
6392 proj_element_id
6393 FROM
6394 pa_proj_element_versions
6395 WHERE
6396      element_version_id = l_element_version_id
6397 AND
6398      project_id = l_project_id;
6399 --This cursor will return name and number for a particular element
6400 CURSOR c_get_task_name_and_number (l_element_id NUMBER, l_project_id NUMBER)
6401 IS
6402 SELECT
6403 name, element_number
6404 FROM
6405 pa_proj_elements
6406 WHERE
6407      proj_element_id = l_element_id
6408 AND
6409      project_id = l_project_id;
6410 
6411 --This cursor gets the immediate parent's task id for the passed task version id.
6412 CURSOR c_get_immediate_parent_task_id (l_object_id_to1 NUMBER, l_project_id NUMBER)
6413 IS
6414 SELECT
6415      elever.proj_element_id
6416 FROM
6417        pa_proj_element_versions elever
6418      , pa_object_relationships obRel
6419 WHERE
6420      obRel.relationship_type ='S'
6421 AND
6422      obRel.relationship_subtype ='TASK_TO_TASK'
6423 AND
6424      obRel.OBJECT_ID_TO1 =  l_object_id_to1
6425 AND
6426      elever.element_version_id=obRel.OBJECT_ID_FROM1
6427 AND
6428      elever.project_id = l_project_id;
6429 
6430 --This cursor returns name and number of a particular element, using element_version_id
6431 CURSOR c_get_task_name_number_frm_ver (l_element_version_id NUMBER, l_project_id NUMBER)
6432 IS
6433 SELECT
6434        elements.name
6435      , elements.element_number
6436 
6437 FROM
6438        pa_proj_elements elements
6439      , pa_proj_element_versions elever
6440 WHERE
6441        elever.element_version_id = l_element_version_id
6442 AND
6443        elever.project_id = l_project_id
6444 AND
6445        elements.proj_element_id = elever.proj_element_id
6446 AND
6447        elements.project_id = elever.project_id;
6448 
6449 --This curosr returns the record version number from pa_tasks for row containig passed task id.
6450 CURSOR c_get_pa_record_version_number (l_task_id NUMBER , l_project_id NUMBER)
6451 IS
6452 SELECT
6453      record_version_number
6454 FROM
6455      PA_TASKS
6456 WHERE
6457      task_id = l_task_id
6458 AND
6459      project_id = l_project_id;
6460 
6461 CURSOR c_get_all_tasks_in_structure(l_structure_version_id NUMBER, l_project_id NUMBER)
6462 IS
6463 SELECT
6464       element_version_id
6465      ,financial_task_flag
6466 FROM
6467      pa_proj_element_versions
6468 WHERE
6469      parent_structure_version_id = l_structure_version_id
6470 AND
6471      object_type='PA_TASKS'
6472 AND
6473      project_id = l_project_id;
6474 
6475 --Bug 3735089
6476 l_user_id                 NUMBER;
6477 l_login_id                 NUMBER;
6478 
6479 
6480 BEGIN
6481      x_msg_count := 0;
6482      x_return_status := FND_API.G_RET_STS_SUCCESS;
6483 
6484      --Bug 3735089 - instead of fnd_profile.value use fnd_profile.value_specific
6485      --l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6486      l_user_id := fnd_global.user_id;
6487      l_login_id := fnd_global.login_id;
6488      l_debug_mode  := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',l_user_id, l_login_id,275,null,null),'N');
6489 
6490      --l_debug_mode  := NVL(p_debug_mode,'N');
6491      IF l_debug_mode = 'Y' THEN
6492          PA_DEBUG.set_curr_function( p_function   => 'SYNC_UP_WP_TASKS_WITH_FIN',
6493                                       p_debug_mode => l_debug_mode );
6494      END IF;
6495 
6496      IF l_debug_mode = 'Y' THEN
6497           Pa_Debug.g_err_stage:= 'PA_TASKS_MAINT_PVT : SYNC_UP_WP_TASKS_WITH_FIN : Printing Input parameters';
6498           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6499                                      l_debug_level3);
6500 
6501           Pa_Debug.WRITE(g_pkg_name,'p_project_id  '||':'||p_project_id  ,
6502                                      l_debug_level3);
6503           Pa_Debug.WRITE(g_pkg_name,'p_syncup_all_tasks'||':'||p_syncup_all_tasks,
6504                                      l_debug_level3);
6505           Pa_Debug.WRITE(g_pkg_name,'p_task_version_id'||':'|| p_task_version_id   ,
6506                                      l_debug_level3);
6507           Pa_Debug.WRITE(g_pkg_name,'p_structure_version_id'||':'|| p_structure_version_id,
6508                                      l_debug_level3);
6509           Pa_Debug.WRITE(g_pkg_name,'p_checked_flag '||':'||p_checked_flag ,
6510                                      l_debug_level3);
6511           Pa_Debug.WRITE(g_pkg_name,'p_mode'||':'||p_mode,
6512                                      l_debug_level3);
6513           Pa_Debug.WRITE(g_pkg_name,'p_parent_task_version_id'||':'||p_parent_task_version_id,
6514                                      l_debug_level3);
6515      END IF;
6516 
6517      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
6518       FND_MSG_PUB.initialize;
6519      END IF;
6520 
6521      IF (p_commit = FND_API.G_TRUE) THEN
6522       --savepoint SET_FIN_FLAG_WRAPPER_PUBLIC; Bug 3735089
6523       savepoint SYNC_UP_WP_TASKS_WITH_FIN_PVT;
6524      END IF;
6525      --get carrying_out_organization_id
6526       l_carrying_out_organization_id := PA_DELIVERABLE_UTILS.GET_CARRYING_OUT_ORG
6527       (
6528           p_project_id   => p_project_id
6529           ,p_task_id      => l_task_id
6530       );
6531      --If p_mode is single, and p_checked_flag is 'N', delete the task
6532      -- if p_mode is 'Y', and task is not in PA_TASKS, create the new task
6533      IF ( p_mode = 'SINGLE' )
6534      THEN
6535 
6536           IF (p_checked_flag='N')
6537           THEN
6538 
6539                OPEN c_get_task_id ( p_task_version_id , p_project_id );
6540                FETCH c_get_task_id INTO l_task_id;
6541                CLOSE c_get_task_id;
6542                IF (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)='Y')
6543                THEN
6544 
6545 
6546                    PA_TASKS_MAINT_PUB.DELETE_TASK
6547                    (
6548                           p_commit                => p_commit
6549                         , p_init_msg_list         => FND_API.G_FALSE
6550                         , p_calling_module        => p_calling_module
6551                         , p_debug_mode            => l_debug_mode
6552                         , p_project_id            => p_project_id
6553                         , p_task_id               => l_task_id
6554                         , p_record_version_number => p_patask_record_version_number
6555                         , p_wbs_record_version_number => 1 --parameter not used anywhere in PA_TASKS_MAINT_PUB.DELETE_TASK,pass any dummy value
6556                         , x_return_status         => x_return_status
6557                         , x_msg_count             => x_msg_count
6558                         , x_msg_data              => x_msg_data
6559                    );
6560 
6561 
6562                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
6563                     THEN
6564                          RAISE FND_API.G_EXC_ERROR;
6565                     END IF;
6566                END IF;
6567 
6568           ELSIF (p_checked_flag='Y')
6569           THEN
6570                OPEN c_get_task_id ( p_task_version_id , p_project_id );
6571                FETCH c_get_task_id INTO l_task_id;
6572                CLOSE c_get_task_id;
6573                --get carrying_out_organization_id
6574                l_carrying_out_organization_id := PA_DELIVERABLE_UTILS.GET_CARRYING_OUT_ORG
6575                (
6576                      p_project_id   => p_project_id
6577                     ,p_task_id      => l_task_id
6578                );
6579                IF (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)='N')
6580                THEN
6581                     --Get the task id for the parent_task_version_id
6582                     OPEN  c_get_task_id ( p_parent_task_version_id , p_project_id );
6583                     FETCH c_get_task_id INTO l_parent_task_id;
6584                     CLOSE c_get_task_id;
6585                     --Get the task name from pa_proj_elements
6586                     OPEN  c_get_task_name_and_number ( l_task_id , p_project_id );
6587                     FETCH c_get_task_name_and_number INTO l_task_name, l_task_number;
6588                     CLOSE c_get_task_name_and_number ;
6589 
6590                    PA_TASKS_MAINT_PUB.CREATE_TASK
6591                    (
6592                          p_commit                 => p_commit
6593                         ,p_calling_module         => p_calling_module
6594                         ,p_init_msg_list          => FND_API.G_FALSE
6595                         ,p_debug_mode             => l_debug_mode
6596                         ,p_project_id             => p_project_id
6597                         ,p_reference_task_id      => l_parent_task_id
6598                         ,p_peer_or_sub            => 'SUB'
6599                         ,p_task_number            => l_task_number
6600                         ,p_task_name              => l_task_name
6601                         ,p_task_id                => l_task_id
6602                         ,p_wbs_record_version_number => 1--parameter not used anywhere in PA_TASKS_MAINT_PUB.DELETE_TASK,pass any dummy value
6603                         ,p_carrying_out_organization_id => l_carrying_out_organization_id
6604                         --,x_display_seq            => l_display_seq
6605                         ,x_return_status          => x_return_status
6606                         ,x_msg_count              => x_msg_count
6607                         ,x_msg_data               => x_msg_data
6608                    );
6609                    IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
6610                    THEN
6611                         RAISE FND_API.G_EXC_ERROR;
6612                    END IF;
6613 
6614                END IF;
6615           END IF;
6616      --If p_mode is ALL, get all the tasks for the passed structure id
6617      -- For each task
6618      -- If p_mode is 'N' delete the task
6619      -- if p_mode is 'Y', and task is not in PA_TASKS, create the new task
6620      ELSIF ( p_mode = 'ALL' )
6621      THEN
6622           OPEN  c_get_pa_record_version_number ( l_task_id , p_project_id);
6623           FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
6624           CLOSE c_get_pa_record_version_number;
6625 
6626           FOR iCounter IN c_get_all_tasks_in_structure (p_structure_version_id , p_project_id) LOOP
6627 
6628               --initialize all values to null here
6629               l_task_id := null;
6630               l_task_version_id := null;
6631               l_parent_task_id := null;
6632               l_task_name := null;
6633               l_task_number := null;
6634 
6635               --FETCH c_get_all_tasks_in_structure INTO l_task_version_id;
6636               l_task_version_id := iCounter.element_version_id;
6637 --commented by hsiu: incorrect cursor
6638 --              l_task_version_id := cursor_rec.element_version_id;
6639               OPEN  c_get_task_id ( l_task_version_id , p_project_id );
6640               FETCH c_get_task_id INTO l_task_id;
6641               CLOSE c_get_task_id;
6642 --Check_is_financial_task will return 'Y' when data is there is PA_TASKS
6643                     IF (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)='Y' AND iCounter.financial_task_flag='N' )
6644                     THEN
6645                          PA_TASKS_MAINT_PUB.DELETE_TASK
6646                          (
6647                                p_commit                => p_commit
6648                              , p_calling_module        => p_calling_module
6649                              , p_init_msg_list         => FND_API.G_FALSE
6650                              , p_debug_mode            => l_debug_mode
6651                              , p_project_id            => p_project_id
6652                              , p_task_id               => l_task_id
6653                              , p_record_version_number => l_patask_record_version_number
6654                              --, p_called_from_api       => p_called_from_api
6655                              , p_wbs_record_version_number => 1 --parameter not used anywhere in PA_TASKS_MAINT_PUB.DELETE_TASK,pass any dummy value
6656                              , x_return_status         => x_return_status
6657                              , x_msg_count             => x_msg_count
6658                              , x_msg_data              => x_msg_data
6659                          );
6660                          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
6661                          THEN
6662                               RAISE FND_API.G_EXC_ERROR;
6663                          END IF;
6664 
6665                     ELSIF (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)='N' AND iCounter.financial_task_flag='Y')
6666                     THEN
6667                          --Get the task id for the parent_task_version_id
6668                          OPEN  c_get_immediate_parent_task_id ( l_task_version_id , p_project_id );
6669                          FETCH c_get_immediate_parent_task_id INTO l_parent_task_id;
6670                          CLOSE c_get_immediate_parent_task_id;
6671                          --Get the task name from pa_proj_elements
6672                          OPEN  c_get_task_name_number_frm_ver ( l_task_version_id, p_project_id );
6673                          FETCH c_get_task_name_number_frm_ver INTO l_task_name, l_task_number;
6674                          CLOSE c_get_task_name_number_frm_ver ;
6675 
6676 
6677                          PA_TASKS_MAINT_PUB.CREATE_TASK
6678                          (
6679                               p_commit                 => p_commit
6680                              ,p_calling_module         => p_calling_module
6681                              ,p_init_msg_list          => FND_API.G_FALSE
6682                              ,p_validate_only          => p_validate_only
6683                              ,p_debug_mode             => l_debug_mode
6684                              ,p_project_id             => p_project_id
6685                              ,p_reference_task_id      => l_parent_task_id
6686                              ,p_peer_or_sub            => 'SUB'
6687                              ,p_task_number            => l_task_number
6688                              ,p_task_name              => l_task_name
6689                              ,p_task_id                => l_task_id
6690                              ,p_wbs_record_version_number => 1--parameter not used anywhere in PA_TASKS_MAINT_PUB.DELETE_TASK,pass any dummy value
6691                              ,p_carrying_out_organization_id => l_carrying_out_organization_id
6692                              --,x_display_seq            => l_display_seq
6693                              ,x_return_status          =>x_return_status
6694                              ,x_msg_count              =>x_msg_count
6695                              ,x_msg_data               =>x_msg_data
6696                          );
6697                          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
6698                          THEN
6699                               RAISE FND_API.G_EXC_ERROR;
6700                          END IF;
6701                     END IF;
6702           END LOOP;
6703      END IF;
6704 
6705      IF (p_commit = FND_API.G_TRUE) THEN
6706        COMMIT;
6707      END IF;
6708 
6709      -- Bug 3735089 : using reset_curr_function too, just using set_curr_function may overflow it after several recursive calls
6710      -- and it gives ORA 06512 numeric or value error
6711       IF l_debug_mode = 'Y' THEN
6712     Pa_Debug.reset_curr_function;
6713       END IF;
6714 
6715 EXCEPTION
6716 
6717 WHEN FND_API.G_EXC_ERROR THEN
6718 
6719      x_return_status := Fnd_Api.G_RET_STS_ERROR;
6720      l_msg_count := Fnd_Msg_Pub.count_msg;
6721 
6722      IF p_commit = FND_API.G_TRUE THEN
6723       --ROLLBACK TO  SET_FIN_FLAG_WRAPPER_PUBLIC; Bug 3735089
6724       ROLLBACK TO  SYNC_UP_WP_TASKS_WITH_FIN_PVT;
6725      END IF;
6726 
6727      IF c_get_task_id%ISOPEN THEN
6728         CLOSE c_get_task_id;
6729      END IF;
6730      IF c_get_task_name_and_number%ISOPEN THEN
6731         CLOSE c_get_task_name_and_number;
6732      END IF;
6733      IF c_get_immediate_parent_task_id%ISOPEN THEN
6734         CLOSE c_get_immediate_parent_task_id;
6735      END IF;
6736      IF c_get_task_name_number_frm_ver%ISOPEN THEN
6737         CLOSE c_get_task_name_number_frm_ver;
6738      END IF;
6739      IF c_get_pa_record_version_number%ISOPEN THEN
6740         CLOSE c_get_pa_record_version_number;
6741      END IF;
6742 
6743      IF l_msg_count = 1 AND x_msg_data IS NULL
6744       THEN
6745           Pa_Interface_Utils_Pub.get_messages
6746               ( p_encoded        => Fnd_Api.G_TRUE
6747               , p_msg_index      => 1
6748               , p_msg_count      => l_msg_count
6749               , p_msg_data       => l_msg_data
6750               , p_data           => l_data
6751               , p_msg_index_out  => l_msg_index_out);
6752           x_msg_data := l_data;
6753           x_msg_count := l_msg_count;
6754      ELSE
6755           x_msg_count := l_msg_count;
6756      END IF;
6757 
6758      IF l_debug_mode = 'Y' THEN
6759           Pa_Debug.reset_curr_function;
6760      END IF;
6761 
6762 WHEN Invalid_Arg_Exc_WP THEN
6763 
6764      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6765      x_msg_count     := 1;
6766      x_msg_data      := 'PA_TASKS_MAINT_PVT : SYNC_UP_WP_TASKS_WITH_FIN : NULL PARAMETERS ARE PASSED OR CURSOR DIDNT RETURN ANY ROWS';
6767 
6768      IF p_commit = FND_API.G_TRUE THEN
6769         --ROLLBACK TO  DELETE_MAPPING_PUBLIC; Bug 3735089
6770         ROLLBACK TO  SYNC_UP_WP_TASKS_WITH_FIN_PVT;
6771      END IF;
6772      IF c_get_task_id%ISOPEN THEN
6773         CLOSE c_get_task_id;
6774      END IF;
6775      IF c_get_task_name_and_number%ISOPEN THEN
6776         CLOSE c_get_task_name_and_number;
6777      END IF;
6778      IF c_get_immediate_parent_task_id%ISOPEN THEN
6779         CLOSE c_get_immediate_parent_task_id;
6780      END IF;
6781      IF c_get_task_name_number_frm_ver%ISOPEN THEN
6782         CLOSE c_get_task_name_number_frm_ver;
6783      END IF;
6784      IF c_get_pa_record_version_number%ISOPEN THEN
6785         CLOSE c_get_pa_record_version_number;
6786      END IF;
6787      Fnd_Msg_Pub.add_exc_msg
6788                    ( p_pkg_name        => 'PA_TASKS_MAINT_PVT'
6789                     , p_procedure_name  => 'SYNC_UP_WP_TASKS_WITH_FIN'
6790                     , p_error_text      => x_msg_data);
6791 
6792      IF l_debug_mode = 'Y' THEN
6793           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6794           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6795                               l_debug_level5);
6796       Pa_Debug.reset_curr_function;
6797      END IF;
6798      RAISE;
6799 
6800 WHEN OTHERS THEN
6801 
6802      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6803      x_msg_count     := 1;
6804      x_msg_data      := substr(SQLERRM,1,120);-- Bug 3735089 Added substr
6805      IF p_commit = FND_API.G_TRUE THEN
6806         --ROLLBACK TO  DELETE_MAPPING_PUBLIC; Bug 3735089
6807         ROLLBACK TO  SYNC_UP_WP_TASKS_WITH_FIN_PVT;
6808      END IF;
6809 
6810      IF c_get_task_id%ISOPEN THEN
6811         CLOSE c_get_task_id;
6812      END IF;
6813      IF c_get_task_name_and_number%ISOPEN THEN
6814         CLOSE c_get_task_name_and_number;
6815      END IF;
6816      IF c_get_immediate_parent_task_id%ISOPEN THEN
6817         CLOSE c_get_immediate_parent_task_id;
6818      END IF;
6819      IF c_get_task_name_number_frm_ver%ISOPEN THEN
6820         CLOSE c_get_task_name_number_frm_ver;
6821      END IF;
6822      IF c_get_pa_record_version_number%ISOPEN THEN
6823         CLOSE c_get_pa_record_version_number;
6824      END IF;
6825      Fnd_Msg_Pub.add_exc_msg
6826                    ( p_pkg_name         => 'PA_TASKS_MAINT_PVT'
6827                     , p_procedure_name  => 'SYNC_UP_WP_TASKS_WITH_FIN'
6828                     , p_error_text      => x_msg_data);
6829 
6830      IF l_debug_mode = 'Y' THEN
6831           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6832           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6833                               l_debug_level5);
6834 
6835           Pa_Debug.reset_curr_function;
6836      END IF;
6837      RAISE;
6838 END SYNC_UP_WP_TASKS_WITH_FIN ;
6839 
6840 --End add by rtarway for FP.M development
6841 
6842 end PA_TASKS_MAINT_PVT;