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.22.12020000.4 2013/04/09 11:06:47 pstawar 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                  l_adj_on_std_inv                    varchar2(2);   /* Added for 12.2Payroll billing ER 11899223 */
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   --Changes for 8566495 anuragag
1660 --PA_TASK_PVT1.G_CHG_DOC_CNTXT will be 1 for task created via change management, so this call will be skipped
1661 			 if(PA_TASK_PVT1.G_CHG_DOC_CNTXT = 0)
1662 			 then
1663     -- Call Table Handler
1664     --Insert using table handler
1665 
1666 
1667                   /* Added for 12.2Payroll billing ER 11899223 */
1668      if l_parent_task_Id is null then
1669 /*      select adj_on_std_inv into l_adj_on_std_inv from pa_projects_all where project_id =p_project_id;
1670 	commented for bug 12659208 */
1671 
1672       l_adj_on_std_inv := NULL;
1673      else
1674       select adj_on_std_inv into l_adj_on_std_inv from pa_tasks where task_id =l_top_task_id;
1675      end if;
1676        /* Added for 12.2Payroll billing ER 11899223 */
1677     PA_TASKS_PKG.insert_row(
1678       l_rowid,
1679       l_new_task_id,
1680       p_project_id,
1681       p_task_number,
1682       sysdate,
1683       FND_GLOBAL.USER_ID, -- created_by
1684       sysdate,
1685       FND_GLOBAL.USER_ID, --  Last_Updated_By
1686       FND_GLOBAL.USER_ID, --  Last_Update_Login
1687       p_task_name,
1688       p_long_task_name,
1689       l_top_task_id,
1690       TWBS_LEVEL,
1691       TREADY_TO_BILL_FLAG,
1692       TREADY_TO_DISTRIBUTE_FLAG,
1693       l_parent_task_Id,
1694       TDESCRIPTION,
1695       TCARRYING_OUT_ORG_ID,
1696       TSERVICE_TYPE_CODE,
1697       p_task_manager_person_id,
1698       TCHARGEABLE,
1699       TBILLABLE,
1700       TLIMIT_TO_TXN_CONTROLS_FLAG,
1701       TSTART_DATE,
1702       TCOMPLETION_DATE,
1703       TADDRESS_ID,
1704       TLABOR_BILL_RATE_ORG_ID,
1705       TLABOR_STD_BILL_RATE_SCHDL,
1706       TLABOR_SCHEDULE_FIXED_DATE,
1707       TLABOR_SCHEDULE_DISCOUNT,
1708       TNLR_BILL_RATE_ORG_ID,
1709       TNLR_STD_BILL_RATE_SCHDL,
1710       TNLR_SCHEDULE_FIXED_DATE,
1711       TNLR_SCHEDULE_DISCOUNT,
1712       TLABOR_COST_MULTIPLIER_NAME, -- Labor_Cost_Multiplier_Name
1713       TATTRIBUTE_CATEGORY, -- Attribute_Category
1714       TATTRIBUTE1, -- Attribute1
1715       TATTRIBUTE2, -- Attribute2
1716       TATTRIBUTE3, -- Attribute3
1717       TATTRIBUTE4, -- Attribute4
1718       TATTRIBUTE5, -- Attribute5
1719       TATTRIBUTE6, -- Attribute6
1720       TATTRIBUTE7, -- Attribute7
1721       TATTRIBUTE8, -- Attribute8
1722       TATTRIBUTE9, -- Attribute9
1723       TATTRIBUTE10, -- Attribute10
1724       TCOST_IND_RATE_SCH_ID,
1725       TREV_IND_RATE_SCH_ID,
1726       TINV_IND_RATE_SCH_ID,
1727       TCOST_IND_SCH_FIXED_DATE,
1728       TREV_IND_SCH_FIXED_DATE,
1729       TINV_IND_SCH_FIXED_DATE,
1730       TLABOR_SCH_TYPE,
1731       TNLR_SCH_TYPE,
1732       TALLOW_CROSS_CHARGE_FLAG,
1733       TPROJECT_RATE_DATE,
1734       TPROJECT_RATE_TYPE,
1735       TCC_PROCESS_LABOR_FLAG,
1736       TLABOR_TP_SCHEDULE_ID,
1737       TLABOR_TP_FIXED_DATE,
1738       TCC_PROCESS_NL_FLAG,
1739       TNL_TP_SCHEDULE_ID,
1740       TNL_TP_FIXED_DATE,
1741       TRECEIVE_PROJECT_INVOICE_FLAG,
1742       TWORK_TYPE_ID,
1743       TJOB_BILL_RATE_SCHEDULE_ID,
1744       TEMP_BILL_RATE_SCHEDULE_ID,
1745 
1746       /*TTASK_TYPE_CODE,
1747       l_sequence_number, --DISPLAY SEQUENCE
1748       TPRIORITY_CODE,
1749       TCRITICAL_FLAG,
1750       TMILESTONE_FLAG,
1751       TSCHEDULED_START_DATE,
1752       TSCHEDULED_FINISH_DATE,
1753       TACTUAL_START_DATE, -- Actual Start Date
1754       TACTUAL_FINISH_DATE, -- Actual Finish Date
1755       TESTIMATED_START_DATE,
1756       TESTIMATED_END_DATE,
1757       TBASELINE_START_DATE,
1758       TBASELINE_END_DATE,
1759       TOBLIGATION_START_DATE,
1760       TOBLIGATION_END_DATE,
1761       TESTIMATE_TO_COMPLETE_WORK,
1762       TBASELINE_WORK,
1763       TSCHEDULED_WORK,
1764       TACTUAL_WORK_TO_DATE,
1765       TWORK_UNIT_CODE,
1766       TPROGRESS_STATUS_CODE,
1767       Tinc_proj_progress_flag,
1768 
1769       1, --Record version Number */
1770       ttaskfunc_cost_rate_type,
1771       ttaskfunc_cost_rate_date,
1772       tnon_lab_std_bill_rt_sch_id,
1773       Tlabor_disc_reason_code,
1774       Tnon_labor_disc_reason_code,
1775 --PA L Capital Project Changes 2872708
1776       NVL( tretirement_cost_flag, 'N'),
1777       NVL( tcint_eligible_flag, 'N'),
1778       tcint_stop_date,
1779 --End PA L Capital Project Changes 2872708
1780 
1781       /*FPM development for Project Setup */
1782       l_customer_id,
1783       l_revenue_accrual_method,
1784       l_invoice_method,
1785       TGEN_ETC_SOURCE_CODE,
1786         l_adj_on_std_inv     /* Added for 12.2Payroll billing ER 11899223 */
1787       );
1788 
1789     -- Date Roll-up
1790 
1791 
1792     -- Update parent task chargeable and receive project invoice flags
1793     --   if creating subtask
1794     IF (p_peer_or_sub = 'SUB') THEN
1795       IF (p_calling_module IN ('FORMS', 'SELF_SERVICE')) THEN
1796         -- Set parent task chargeable flag to 'N' and set
1797         -- Parent Task Receive_Project_Invoice_Flag to 'N'
1798         -- This should be performed after the task is added.
1799         UPDATE PA_TASKS
1800         SET
1801         CHARGEABLE_FLAG = 'N',
1802         RECEIVE_PROJECT_INVOICE_FLAG = 'N',
1803         RECORD_VERSION_NUMBER = nvl(RECORD_VERSION_NUMBER,0)+1,
1804         last_updated_by = FND_GLOBAL.USER_ID,
1805         last_update_login = FND_GLOBAL.USER_ID,
1806         last_update_date = sysdate
1807         WHERE TASK_ID = l_parent_task_Id;
1808       END IF;
1809     END IF;
1810 
1811 
1812 
1813     x_return_status := FND_API.G_RET_STS_SUCCESS;
1814     p_task_id := l_new_task_id;
1815     x_display_seq := l_sequence_number;
1816 
1817 	end if; -- end check for chg_doc_cntxt
1818   EXCEPTION
1819     WHEN FND_API.G_EXC_ERROR THEN
1820       IF (p_commit = FND_API.G_TRUE) THEN
1821         ROLLBACK to CREATE_TASK_PRIVATE;
1822       END IF;
1823       x_msg_count := FND_MSG_PUB.count_msg;
1824       x_return_status := FND_API.G_RET_STS_ERROR;
1825     WHEN OTHERS THEN
1826       IF (p_commit = FND_API.G_TRUE) THEN
1827         ROLLBACK to CREATE_TASK_PRIVATE;
1828       END IF;
1829       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1830       x_msg_count := FND_MSG_PUB.count_msg;
1831       --put message
1832       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
1833                               p_procedure_name => 'CREATE_TASK',
1834                               p_error_text     => SUBSTRB(SQLERRM,1,240));
1835       RAISE;
1836   END CREATE_TASK;
1837 
1838 -- API name                      : UPDATE_TASK
1839 -- Type                          : Private Procedure
1840 -- Pre-reqs                      : None
1841 -- Return Value                  : N/A
1842 -- Parameters
1843 --   p_api_version                       IN  NUMBER      := 1.0
1844 --   p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1845 --   p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1846 --   p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1847 --   p_validation_level                  IN  VARCHAR2    := 100
1848 --   p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1849 --   p_debug_mode                        IN  VARCHAR2    := 'N'
1850 --   p_project_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1851 --   p_task_id                           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1852 --   p_task_number                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1853 --   p_task_name                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1854 --   p_long_task_name                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1855 --   p_task_description                  IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1856 --   p_task_manager_person_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1857 --   p_carrying_out_organization_id      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1858 --   p_task_type_code                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1859 --   p_priority_code                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1860 --   p_work_type_id                      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1861 --   p_service_type_code                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1862 --   p_milestone_flag                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1863 --   p_critical_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1864 --   p_chargeable_flag                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1865 --   p_billable_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1866 --   p_receive_project_invoice_flag      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1867 --   p_scheduled_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1868 --   p_scheduled_finish_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1869 --   p_estimated_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1870 --   p_estimated_end_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1871 --   p_actual_start_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1872 --   p_actual_finish_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1873 --   p_task_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1874 --   p_task_completion_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1875 --   p_baseline_start_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1876 --   p_baseline_end_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1877 --   p_obligation_start_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1878 --   p_obligation_end_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1879 --   p_estimate_to_complete_work         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1880 --   p_baseline_work                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1881 --   p_scheduled_work                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1882 --   p_actual_work_to_date               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1883 --   p_work_unit                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1884 --   p_progress_status_code              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1885 --   p_job_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1886 --   p_emp_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1887 --   p_pm_product_code                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1888 --   p_pm_project_reference              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1889 --   p_pm_task_reference                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1890 --   p_pm_parent_task_reference          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1891 --   p_top_task_id                       IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1892 --   p_wbs_level                         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1893 --   p_parent_task_id                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1894 --   p_display_sequence                  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1895 --   p_address_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1896 --   p_ready_to_bill_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1897 --   p_ready_to_distribute_flag          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1898 --   p_limit_to_txn_controls_flag        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1899 --   p_labor_bill_rate_org_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1900 --   p_labor_std_bill_rate_schdl         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1901 --   p_labor_schedule_fixed_date         IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1902 --   p_labor_schedule_discount           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1903 --   p_nl_bill_rate_org_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1904 --   p_nl_std_bill_rate_schdl            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1905 --   p_nl_schedule_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1906 --   p_nl_schedule_discount              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1907 --   p_labor_cost_multiplier_name        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1908 --   p_cost_ind_rate_sch_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1909 --   p_rev_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1910 --   p_inv_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1911 --   p_cost_ind_sch_fixed_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1912 --   p_rev_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1913 --   p_inv_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1914 --   p_labor_sch_type                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1915 --   p_nl_sch_type                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1916 --   p_early_start_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1917 --   p_early_finish_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1918 --   p_late_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1919 --   p_late_finish_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1920 --   p_attribute_category                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1921 --   p_attribute1                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1922 --   p_attribute2                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1923 --   p_attribute3                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1924 --   p_attribute4                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1925 --   p_attribute5                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1926 --   p_attribute6                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1927 --   p_attribute7                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1928 --   p_attribute8                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1929 --   p_attribute9                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1930 --   p_attribute10                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1931 --   p_allow_cross_charge_flag           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1932 --   p_project_rate_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1933 --   p_project_rate_type                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1934 --   p_cc_process_labor_flag             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1935 --   p_labor_tp_schedule_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1936 --   p_labor_tp_fixed_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1937 --   p_cc_process_nl_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1938 --   p_nl_tp_schedule_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1939 --   p_nl_tp_fixed_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1940 --   p_inc_proj_progress_flag            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1941 --   p_record_version_number             IN  NUMBER
1942 --   p_comments                          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1943 --   x_return_status                     OUT VARCHAR2
1944 --   x_msg_count                         OUT NUMBER
1945 --   x_msg_data                          OUT VARCHAR2
1946 --
1947 --  History
1948 --
1949 --  25-JUN-01   HSIU             -Created
1950 --
1951 --
1952 
1953   procedure UPDATE_TASK
1954   (
1955      p_api_version                       IN  NUMBER      := 1.0
1956     ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
1957     ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
1958     ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
1959     ,p_validation_level                  IN  VARCHAR2    := 100
1960     ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
1961     ,p_debug_mode                        IN  VARCHAR2    := 'N'
1962 
1963     ,p_project_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1964     ,p_task_id                           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1965     ,p_task_number                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1966     ,p_task_name                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1967     ,p_long_task_name                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1968     ,p_task_description                  IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1969     ,p_task_manager_person_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1970     ,p_carrying_out_organization_id      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1971     ,p_task_type_code                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1972     ,p_priority_code                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1973     ,p_work_type_id                      IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1974     ,p_service_type_code                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1975     ,p_milestone_flag                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1976     ,p_critical_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1977     ,p_chargeable_flag                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1978     ,p_billable_flag                     IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1979     ,p_receive_project_invoice_flag      IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1980     ,p_scheduled_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1981     ,p_scheduled_finish_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1982     ,p_estimated_start_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1983     ,p_estimated_end_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1984     ,p_actual_start_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1985     ,p_actual_finish_date                IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1986     ,p_task_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1987     ,p_task_completion_date              IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1988     ,p_baseline_start_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1989     ,p_baseline_end_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1990 
1991     ,p_obligation_start_date             IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1992     ,p_obligation_end_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1993     ,p_estimate_to_complete_work         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1994     ,p_baseline_work                     IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1995     ,p_scheduled_work                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1996     ,p_actual_work_to_date               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1997     ,p_work_unit                         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1998     ,p_progress_status_code              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1999 
2000     ,p_job_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2001     ,p_emp_bill_rate_schedule_id         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2002     ,p_pm_product_code                   IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2003     ,p_pm_project_reference              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2004     ,p_pm_task_reference                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2005     ,p_pm_parent_task_reference          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2006     ,p_top_task_id                       IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2007     ,p_wbs_level                         IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2008     ,p_parent_task_id                    IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2009     ,p_display_sequence                  IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2010     ,p_address_id                        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2011     ,p_ready_to_bill_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2012     ,p_ready_to_distribute_flag          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2013     ,p_limit_to_txn_controls_flag        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2014     ,p_labor_bill_rate_org_id            IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2015     ,p_labor_std_bill_rate_schdl         IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2016     ,p_labor_schedule_fixed_date         IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2017     ,p_labor_schedule_discount           IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2018     ,p_nl_bill_rate_org_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2019     ,p_nl_std_bill_rate_schdl            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2020     ,p_nl_schedule_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2021     ,p_nl_schedule_discount              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2022     ,p_labor_cost_multiplier_name        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2023     ,p_cost_ind_rate_sch_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2024     ,p_rev_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2025     ,p_inv_ind_rate_sch_id               IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2026     ,p_cost_ind_sch_fixed_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2027     ,p_rev_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2028     ,p_inv_ind_sch_fixed_date            IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2029     ,p_labor_sch_type                    IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2030     ,p_nl_sch_type                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2031     ,p_early_start_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2032     ,p_early_finish_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2033     ,p_late_start_date                   IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2034     ,p_late_finish_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2035     ,p_attribute_category                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2036     ,p_attribute1                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2037     ,p_attribute2                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2038     ,p_attribute3                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2039     ,p_attribute4                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2040     ,p_attribute5                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2041     ,p_attribute6                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2042     ,p_attribute7                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2043     ,p_attribute8                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2044     ,p_attribute9                        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2045     ,p_attribute10                       IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2046     ,p_allow_cross_charge_flag           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2047     ,p_project_rate_date                 IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2048     ,p_project_rate_type                 IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2049     ,p_cc_process_labor_flag             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2050     ,p_labor_tp_schedule_id              IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2051     ,p_labor_tp_fixed_date               IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2052     ,p_cc_process_nl_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2053     ,p_nl_tp_schedule_id                 IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2054     ,p_nl_tp_fixed_date                  IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2055     ,p_inc_proj_progress_flag            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2056     ,p_taskfunc_cost_rate_type           IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2057     ,p_taskfunc_cost_rate_date           IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2058     ,p_non_lab_std_bill_rt_sch_id        IN  NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2059     ,p_record_version_number             IN  NUMBER
2060     ,p_comments                          IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2061     ,p_labor_disc_reason_code            IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2062     ,p_non_labor_disc_reason_code        IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2063 --PA L Capital Project Changes 2872708
2064     ,p_retirement_cost_flag              IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2065     ,p_cint_eligible_flag                IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2066     ,p_cint_stop_date                    IN  DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2067 --End PA L Capital Project Changes 2872708
2068     ,p_gen_etc_src_code                  IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2069     ,p_dates_check                       IN  VARCHAR2    := 'Y'  --bug 5665772
2070     ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2071     ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2072     ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2073   )
2074   IS
2075     l_rowid                              VARCHAR2(50);
2076 
2077     l_api_name                           CONSTANT VARCHAR2(30)  := 'UPDATE_TASK';
2078     l_api_version                        CONSTANT NUMBER        := 1.0;
2079     l_msg_count                          NUMBER;
2080     l_err_code                           NUMBER                 := 0;
2081     l_err_stack                          VARCHAR2(630);
2082     l_err_stage                          VARCHAR2(80);
2083     l_data                               VARCHAR2(250);
2084     l_msg_data                           VARCHAR2(250);
2085     l_msg_index_out                      NUMBER;
2086     l_msg_cnt                            NUMBER;
2087 
2088     l_delete_project_allowed             VARCHAR2(1);
2089     l_update_proj_num_allowed            VARCHAR2(1);
2090     l_update_proj_name_allowed           VARCHAR2(1);
2091     l_update_proj_desc_allowed           VARCHAR2(1);
2092     l_update_proj_dates_allowed          VARCHAR2(1);
2093     l_update_proj_status_allowed         VARCHAR2(1);
2094     l_update_proj_manager_allowed        VARCHAR2(1);
2095     l_update_proj_org_allowed            VARCHAR2(1);
2096     l_add_task_allowed                   VARCHAR2(1);
2097     l_delete_task_allowed                VARCHAR2(1);
2098     l_update_task_num_allowed            VARCHAR2(1);
2099     l_update_task_name_allowed           VARCHAR2(1);
2100     l_update_task_dates_allowed          VARCHAR2(1);
2101     l_update_task_desc_allowed           VARCHAR2(1);
2102     l_update_parent_task_allowed         VARCHAR2(1);
2103     l_update_task_org_allowed            VARCHAR2(1);
2104     l_f1                                 VARCHAR2(1);
2105     l_f2                                 VARCHAR2(1);
2106     l_ret                                VARCHAR2(1);
2107     l_change_parent_flag                 VARCHAR2(1);
2108 
2109     t_pm_product_code                    PA_TASKS.PM_PRODUCT_CODE%TYPE;
2110 
2111     -- For Task Attributes, defaulting from parent task
2112     TTASK_ID                             NUMBER;
2113     TTASK_NAME                            PA_TASKS.TASK_NAME%TYPE;
2114     TLONG_TASK_NAME                       PA_TASKS.LONG_TASK_NAME%TYPE;
2115     TTASK_NUMBER                          PA_TASKS.TASK_NUMBER%TYPE;
2116     TDESCRIPTION                          PA_TASKS.DESCRIPTION%TYPE;
2117     TTOP_TASK_ID                         NUMBER;
2118     TPARENT_TASK_ID                      NUMBER;
2119     TADDRESS_ID                          NUMBER;
2120     TREADY_TO_BILL_FLAG                  VARCHAR2(1);
2121     TREADY_TO_DISTRIBUTE_FLAG            VARCHAR2(1);
2122     TCARRYING_OUT_ORG_ID                 NUMBER;
2123     TSERVICE_TYPE_CODE                   VARCHAR2(30);
2124     TTASK_MANAGER_PERSON_ID              NUMBER;
2125     TCHARGEABLE                          VARCHAR2(1);
2126     TBILLABLE                            VARCHAR2(1);
2127     TLIMIT_TO_TXN_CONTROLS_FLAG          VARCHAR2(1);
2128     TSTART_DATE                          DATE;
2129     TCOMPLETION_DATE                     DATE;
2130     TLABOR_BILL_RATE_ORG_ID              NUMBER;
2131     TLABOR_STD_BILL_RATE_SCHDL           VARCHAR2(30);
2132     TLABOR_SCHEDULE_FIXED_DATE           DATE;
2133     TLABOR_SCHEDULE_DISCOUNT             NUMBER;
2134     TNLR_BILL_RATE_ORG_ID                NUMBER;
2135     TNLR_STD_BILL_RATE_SCHDL             VARCHAR2(30);
2136     TNLR_SCHEDULE_FIXED_DATE             DATE;
2137     TNLR_SCHEDULE_DISCOUNT               NUMBER;
2138     TCOST_IND_RATE_SCH_ID                NUMBER;
2139     TREV_IND_RATE_SCH_ID                 NUMBER;
2140     TINV_IND_RATE_SCH_ID                 NUMBER;
2141     TCOST_IND_SCH_FIXED_DATE             DATE;
2142     TREV_IND_SCH_FIXED_DATE              DATE;
2143     TINV_IND_SCH_FIXED_DATE              DATE;
2144     TLABOR_SCH_TYPE                      VARCHAR2(1);
2145     TNLR_SCH_TYPE                        VARCHAR2(1);
2146     TALLOW_CROSS_CHARGE_FLAG             VARCHAR2(1);
2147     TPROJECT_RATE_TYPE                   VARCHAR2(30);
2148     TPROJECT_RATE_DATE                   DATE;
2149     TCC_PROCESS_LABOR_FLAG               VARCHAR2(1);
2150     TLABOR_TP_SCHEDULE_ID                NUMBER;
2151     TLABOR_TP_FIXED_DATE                 DATE;
2152     TCC_PROCESS_NL_FLAG                  VARCHAR2(1);
2153     TNL_TP_SCHEDULE_ID                   NUMBER;
2154     TNL_TP_FIXED_DATE                    DATE;
2155     TRECEIVE_PROJECT_INVOICE_FLAG        VARCHAR2(1);
2156     TWORK_TYPE_ID                        NUMBER;
2157     TJOB_BILL_RATE_SCHEDULE_ID           NUMBER;
2158     TEMP_BILL_RATE_SCHEDULE_ID           NUMBER;
2159     --NEW ATTRIBUTES
2160     TTASK_TYPE_CODE                      VARCHAR2(30);
2161     TPRIORITY_CODE                       VARCHAR2(30);
2162     TCRITICAL_FLAG                       VARCHAR2(1);
2163     TMILESTONE_FLAG                      VARCHAR2(1);
2164     TESTIMATED_START_DATE                DATE;
2165     TESTIMATED_END_DATE                  DATE;
2166     TBASELINE_START_DATE                 DATE;
2167     TBASELINE_END_DATE                   DATE;
2168     TOBLIGATION_START_DATE               DATE;
2169     TOBLIGATION_END_DATE                 DATE;
2170     TSCHEDULED_START_DATE                DATE;
2171     TSCHEDULED_FINISH_DATE               DATE;
2172     TESTIMATE_TO_COMPLETE_WORK           NUMBER;
2173     TBASELINE_WORK                       NUMBER;
2174     TSCHEDULED_WORK                      NUMBER;
2175     TACTUAL_WORK_TO_DATE                 NUMBER;
2176     TWORK_UNIT_CODE                      VARCHAR2(30);
2177     TPROGRESS_STATUS_CODE                VARCHAR2(30);
2178     TWBS_LEVEL                           NUMBER;
2179 
2180     TACTUAL_START_DATE                   DATE;
2181     TACTUAL_FINISH_DATE                  DATE;
2182     TLABOR_COST_MULTIPLIER_NAME          VARCHAR2(20);
2183     TEARLY_START_DATE                    DATE;
2184     TEARLY_FINISH_DATE                   DATE;
2185     TLATE_START_DATE                     DATE;
2186     TLATE_FINISH_DATE                    DATE;
2187     TATTRIBUTE_CATEGORY                  VARCHAR2(30);
2188     TATTRIBUTE1                          VARCHAR2(150);
2189     TATTRIBUTE2                          VARCHAR2(150);
2190     TATTRIBUTE3                          VARCHAR2(150);
2191     TATTRIBUTE4                          VARCHAR2(150);
2192     TATTRIBUTE5                          VARCHAR2(150);
2193     TATTRIBUTE6                          VARCHAR2(150);
2194     TATTRIBUTE7                          VARCHAR2(150);
2195     TATTRIBUTE8                          VARCHAR2(150);
2196     TATTRIBUTE9                          VARCHAR2(150);
2197     TATTRIBUTE10                         VARCHAR2(150);
2198 
2199     Tinc_proj_progress_flag              VARCHAR2(1);
2200     Tcomments                    VARCHAR2(4000);
2201     TDISPLAY_SEQUENCE                    NUMBER;
2202 
2203     TPROJECT_TYPE                        VARCHAR2(20);
2204     CARRYING_OUT_ORG_ID_TMP              NUMBER;
2205     ttaskfunc_cost_rate_type             VARCHAR2(30);
2206     ttaskfunc_cost_rate_date             DATE;
2207     tnon_lab_std_bill_rt_Sch_id          NUMBER;
2208     Tlabor_disc_reason_code              VARCHAR2(30);
2209     Tnon_labor_disc_reason_code          VARCHAR2(30);
2210 
2211 --PA L Capital Project Changes 2872708
2212       tretirement_cost_flag              VARCHAR2(1);
2213       tcint_eligible_flag                VARCHAR2(1);
2214       tcint_stop_date                    DATE;
2215 --End PA L Capital Project Changes 2872708
2216 
2217     TGEN_ETC_SOURCE_CODE                 VARCHAR2(30);
2218 
2219     CURSOR ref_task IS
2220       SELECT rowid,
2221         TASK_ID,
2222         TASK_NAME, --new
2223         LONG_TASK_NAME, --new
2224         TASK_NUMBER, --new
2225         DESCRIPTION, --new
2226         TOP_TASK_ID,
2227         PARENT_TASK_ID,
2228         ADDRESS_ID,
2229         READY_TO_BILL_FLAG,
2230         READY_TO_DISTRIBUTE_FLAG,
2231         CARRYING_OUT_ORGANIZATION_ID,
2232         SERVICE_TYPE_CODE,
2233         TASK_MANAGER_PERSON_ID,
2234         CHARGEABLE_FLAG,
2235         BILLABLE_FLAG,
2236         LIMIT_TO_TXN_CONTROLS_FLAG,
2237         START_DATE,
2238         COMPLETION_DATE,
2239         LABOR_BILL_RATE_ORG_ID,
2240         LABOR_STD_BILL_RATE_SCHDL,
2241         LABOR_SCHEDULE_FIXED_DATE,
2242         LABOR_SCHEDULE_DISCOUNT,
2243         NON_LABOR_BILL_RATE_ORG_ID,
2244         NON_LABOR_STD_BILL_RATE_SCHDL,
2245         NON_LABOR_SCHEDULE_FIXED_DATE,
2246         NON_LABOR_SCHEDULE_DISCOUNT,
2247         COST_IND_RATE_SCH_ID,
2248         REV_IND_RATE_SCH_ID,
2249         INV_IND_RATE_SCH_ID,
2250         COST_IND_SCH_FIXED_DATE,
2251         REV_IND_SCH_FIXED_DATE,
2252         INV_IND_SCH_FIXED_DATE,
2253         LABOR_SCH_TYPE,
2254         NON_LABOR_SCH_TYPE,
2255         ALLOW_CROSS_CHARGE_FLAG,
2256         PROJECT_RATE_TYPE,
2257         PROJECT_RATE_DATE,
2258         CC_PROCESS_LABOR_FLAG,
2259         LABOR_TP_SCHEDULE_ID,
2260         LABOR_TP_FIXED_DATE,
2261         CC_PROCESS_NL_FLAG,
2262         NL_TP_SCHEDULE_ID,
2263         NL_TP_FIXED_DATE,
2264         RECEIVE_PROJECT_INVOICE_FLAG,
2265         WORK_TYPE_ID,
2266         JOB_BILL_RATE_SCHEDULE_ID,
2267         EMP_BILL_RATE_SCHEDULE_ID,
2268 -- HY        TASK_TYPE_CODE,
2269 -- HY        PRIORITY_CODE,
2270 -- HY        CRITICAL_FLAG,
2271 -- HY        MILESTONE_FLAG,
2272 -- HY        ESTIMATED_START_DATE,
2273 -- HY        ESTIMATED_END_DATE,
2274         SCHEDULED_START_DATE,
2275         SCHEDULED_FINISH_DATE,
2276 -- HY        ESTIMATE_TO_COMPLETE_WORK,
2277 -- HY        SCHEDULED_WORK,
2278 -- HY        WORK_UNIT_CODE,
2279 -- HY        PROGRESS_STATUS_CODE,
2280         WBS_LEVEL,
2281         LABOR_COST_MULTIPLIER_NAME,
2282         ATTRIBUTE_CATEGORY,
2283         ATTRIBUTE1,
2284         ATTRIBUTE2,
2285         ATTRIBUTE3,
2286         ATTRIBUTE4,
2287         ATTRIBUTE5,
2288         ATTRIBUTE6,
2289         ATTRIBUTE7,
2290         ATTRIBUTE8,
2291         ATTRIBUTE9,
2292         ATTRIBUTE10,
2293 -- HY        inc_proj_progress_flag,
2294 -- HY        comments,
2295 -- HY        DISPLAY_SEQUENCE
2296         taskfunc_cost_rate_type,
2297         taskfunc_cost_rate_date,
2298         non_lab_std_bill_rt_sch_id,
2299         labor_disc_reason_code,
2300         non_labor_disc_reason_code,
2301 --PA L Capital Project changes 2872708
2302       retirement_cost_flag,
2303       cint_eligible_flag,
2304       cint_stop_date,
2305 --End PA L Capital Project changes 2872708
2306       GEN_ETC_SOURCE_CODE
2307       FROM PA_TASKS
2308       WHERE TASK_ID = p_task_id;
2309 
2310   BEGIN
2311 
2312     IF (p_debug_mode = 'Y') THEN
2313       pa_debug.debug('PA_TASKS_MAINT_PVT.UPDATE_TASK BEGIN');
2314     END IF;
2315 
2316     IF (p_commit = FND_API.G_TRUE) THEN
2317       savepoint UPDATE_TASK_PRIVATE;
2318     END IF;
2319 
2320     IF (p_debug_mode = 'Y') THEN
2321       pa_debug.debug('Performing validations');
2322     END IF;
2323 
2324     IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
2325       --check if task_name is null
2326       IF p_task_name IS NULL THEN
2327         PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_NAME_EMPTY');
2328       END IF;
2329     END IF;
2330 
2331     -- Get PM_PRODUCT_CODE
2332     IF (p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
2333       BEGIN
2334         select PM_PRODUCT_CODE
2335           into t_pm_product_code
2336           from pa_tasks
2337          where task_id = p_task_id;
2338       EXCEPTION
2339         WHEN NO_DATA_FOUND THEN
2340           PA_UTILS.ADD_MESSAGE('PA','PA_EXP_NO_TASK'); -- specified task does not exist
2341           raise FND_API.G_EXC_ERROR;
2342       END;
2343     ELSE
2344       t_pm_product_code := p_pm_product_code;
2345     END IF;
2346 
2347     --l_msg_count := FND_MSG_PUB.count_msg;
2348 
2349 
2350     -- Set controls
2351     IF (p_calling_module in ('SELF_SERVICE')) THEN
2352       If (t_pm_product_code IS NOT NULL) THEN
2353         PA_PM_CONTROLS.GET_PROJECT_ACTIONS_ALLOWED(
2354           p_pm_product_code => t_pm_product_code,
2355           p_delete_project_allowed => l_delete_project_allowed,
2356           p_update_proj_num_allowed => l_update_proj_num_allowed,
2357           p_update_proj_name_allowed => l_update_proj_name_allowed,
2358           p_update_proj_desc_allowed => l_update_proj_desc_allowed,
2359           p_update_proj_dates_allowed  => l_update_proj_dates_allowed,
2360           p_update_proj_status_allowed => l_update_proj_status_allowed,
2361           p_update_proj_manager_allowed => l_update_proj_manager_allowed,
2362           p_update_proj_org_allowed => l_update_proj_org_allowed,
2363           p_add_task_allowed => l_add_task_allowed,
2364           p_delete_task_allowed => l_delete_task_allowed,
2365           p_update_task_num_allowed => l_update_task_num_allowed,
2366           p_update_task_name_allowed => l_update_task_name_allowed,
2367           p_update_task_dates_allowed => l_update_task_dates_allowed,
2368           p_update_task_desc_allowed => l_update_task_desc_allowed,
2369           p_update_parent_task_allowed => l_update_parent_task_allowed,
2370           p_update_task_org_allowed => l_update_task_org_allowed,
2371           p_error_code => l_err_code,
2372           p_error_stack => l_err_stack,
2373           p_error_stage => l_err_stage
2374         );
2375       END IF; --product code is not null
2376     END IF;
2377 
2378 --dbms_output.put_line( 'In update task 3' );
2379 
2380     --getting all information
2381     OPEN ref_task;
2382     FETCH ref_task INTO
2383      l_rowid
2384     ,TTASK_ID
2385     ,TTASK_NAME
2386     ,TLONG_TASK_NAME
2387     ,TTASK_NUMBER
2388     ,TDESCRIPTION
2389     ,TTOP_TASK_ID
2390     ,TPARENT_TASK_ID
2391     ,TADDRESS_ID
2392     ,TREADY_TO_BILL_FLAG
2393     ,TREADY_TO_DISTRIBUTE_FLAG
2394     ,TCARRYING_OUT_ORG_ID
2395     ,TSERVICE_TYPE_CODE
2396     ,TTASK_MANAGER_PERSON_ID
2397     ,TCHARGEABLE
2398     ,TBILLABLE
2399     ,TLIMIT_TO_TXN_CONTROLS_FLAG
2400     ,TSTART_DATE
2401     ,TCOMPLETION_DATE
2402     ,TLABOR_BILL_RATE_ORG_ID
2403     ,TLABOR_STD_BILL_RATE_SCHDL
2404     ,TLABOR_SCHEDULE_FIXED_DATE
2405     ,TLABOR_SCHEDULE_DISCOUNT
2406     ,TNLR_BILL_RATE_ORG_ID
2407     ,TNLR_STD_BILL_RATE_SCHDL
2408     ,TNLR_SCHEDULE_FIXED_DATE
2409     ,TNLR_SCHEDULE_DISCOUNT
2410     ,TCOST_IND_RATE_SCH_ID
2411     ,TREV_IND_RATE_SCH_ID
2412     ,TINV_IND_RATE_SCH_ID
2413     ,TCOST_IND_SCH_FIXED_DATE
2414     ,TREV_IND_SCH_FIXED_DATE
2415     ,TINV_IND_SCH_FIXED_DATE
2416     ,TLABOR_SCH_TYPE
2417     ,TNLR_SCH_TYPE
2418     ,TALLOW_CROSS_CHARGE_FLAG
2419     ,TPROJECT_RATE_TYPE
2420     ,TPROJECT_RATE_DATE
2421     ,TCC_PROCESS_LABOR_FLAG
2422     ,TLABOR_TP_SCHEDULE_ID
2423     ,TLABOR_TP_FIXED_DATE
2424     ,TCC_PROCESS_NL_FLAG
2425     ,TNL_TP_SCHEDULE_ID
2426     ,TNL_TP_FIXED_DATE
2427     ,TRECEIVE_PROJECT_INVOICE_FLAG
2428     ,TWORK_TYPE_ID
2429     ,TJOB_BILL_RATE_SCHEDULE_ID
2430     ,TEMP_BILL_RATE_SCHEDULE_ID
2431 -- HY    ,TTASK_TYPE_CODE
2432 -- HY    ,TPRIORITY_CODE
2433 -- HY    ,TCRITICAL_FLAG
2434 -- HY    ,TMILESTONE_FLAG
2435 -- HY    ,TESTIMATED_START_DATE
2436 -- HY    ,TESTIMATED_END_DATE
2437     ,TSCHEDULED_START_DATE
2438     ,TSCHEDULED_FINISH_DATE
2439 -- HY    ,TESTIMATE_TO_COMPLETE_WORK
2440 -- HY    ,TSCHEDULED_WORK
2441 -- HY    ,TWORK_UNIT_CODE
2442 -- HY    ,TPROGRESS_STATUS_CODE
2443     ,TWBS_LEVEL
2444     ,TLABOR_COST_MULTIPLIER_NAME
2445     ,TATTRIBUTE_CATEGORY
2446     ,TATTRIBUTE1
2447     ,TATTRIBUTE2
2448     ,TATTRIBUTE3
2449     ,TATTRIBUTE4
2450     ,TATTRIBUTE5
2451     ,TATTRIBUTE6
2452     ,TATTRIBUTE7
2453     ,TATTRIBUTE8
2454     ,TATTRIBUTE9
2455     ,TATTRIBUTE10
2456     ,ttaskfunc_cost_rate_type
2457     ,ttaskfunc_cost_rate_date
2458     ,tnon_lab_std_bill_rt_sch_id
2459     ,Tlabor_disc_reason_code
2460     ,Tnon_labor_disc_reason_code
2461 --PA L Capital Project changes 2872708
2462      ,tretirement_cost_flag
2463      ,tcint_eligible_flag
2464      ,tcint_stop_date
2465 --End PA L Capital Project changes 2872708
2466      ,tGEN_ETC_SOURCE_CODE
2467 ;
2468 -- HY    ,Tinc_proj_progress_flag
2469 -- HY    ,Tcomments
2470 -- HY    ,TDISPLAY_SEQUENCE;
2471 
2472     IF (ref_task%NOTFOUND) THEN
2473       RAISE NO_DATA_FOUND;
2474     END IF;
2475     CLOSE ref_task;
2476 
2477 --dbms_output.put_line( 'In update task 4 ');
2478 
2479     IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
2480       --Check if it is ok to change task number
2481       --IF (p_task_number <> TTASK_NUMBER) THEN          -- Commented for Bug#5968516
2482       IF (substrb(p_task_number, 0, 25) <> TTASK_NUMBER) -- Added substrb for Bug#5968516
2483       AND (p_task_number IS NOT NULL)  -- Bug 5968516
2484       AND (p_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- Bug 5968516
2485       THEN
2486         PA_TASKS_MAINT_UTILS.CHECK_TASK_NUMBER_DISP(
2487           p_project_id,
2488           p_task_id,
2489           p_task_number,
2490           l_rowid);
2491       END IF;
2492     END IF;
2493 
2494 --dbms_output.put_line( 'In update task 5' );
2495 
2496 --Bug 6316383 :Changed the below condition for SELF SERVICE, as it is now handled in a different manner.
2497     --IF (p_calling_module IN ('FORMS', 'SELF_SERVICE')) THEN
2498       --If Carrying Out Organization has changed
2499       IF (p_calling_module  = 'FORMS') THEN
2500       IF (TCARRYING_OUT_ORG_ID <> p_carrying_out_organization_id) AND
2501          (p_carrying_out_organization_id IS NOT NULL) AND
2502          (p_carrying_out_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
2503         PA_TASK_UTILS.CHANGE_TASK_ORG_OK(p_task_id,
2504                            l_err_code,
2505                            l_err_stage,
2506                            l_err_stack);
2507         IF (l_err_code <> 0) Then
2508           PA_UTILS.ADD_MESSAGE('PA', substr(l_err_stage,1,30));
2509         End If;
2510       END IF;
2511     END IF;
2512 
2513 --dbms_output.put_line( 'In update task 6' );
2514 
2515     -- Check Start Date; will replace by Date roll-up in future
2516     -- Check Completion Date; will replace by Date roll-up in future
2517     IF (p_calling_module IN ('FORMS', 'EXCHANGE', 'SELF_SERVICE')) THEN
2518       --Check Start Date End Date
2519       IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2520           p_task_start_date IS NULL) AND
2521          (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2522           p_task_completion_date IS NULL) THEN
2523         PA_TASKS_MAINT_UTILS.check_start_end_date(
2524           p_old_start_date => null,
2525           p_old_end_date => null,
2526           p_new_start_date => p_task_start_date,
2527           p_new_end_date => p_task_completion_date,
2528           p_update_start_date_flag => l_f1,
2529           p_update_end_date_flag => l_f2,
2530           p_return_status => l_ret);
2531         IF (l_ret <> 'S') THEN
2532           -- Bug 7386335
2533 	  -- The API check_start_end_date will log a single error message. Not required to log further.
2534 	  l_msg_count := FND_MSG_PUB.count_msg;
2535  	  IF (l_msg_count > 0) THEN
2536  	    x_msg_count := l_msg_count;
2537  	    IF (x_msg_count = 1) THEN
2538  	      pa_interface_utils_pub.get_messages(
2539  			p_encoded => FND_API.G_TRUE,
2540  			p_msg_index => 1,
2541  			p_data => l_data,
2542  			p_msg_index_out => l_msg_index_out);
2543  			x_msg_data := l_data;
2544  	    END IF;
2545  	    RAISE FND_API.G_EXC_ERROR;
2546  	  END IF;
2547         END IF;
2548       END IF;
2549 
2550 --dbms_output.put_line( 'In update task 7' );
2551 
2552       --Check Start Date
2553       -- Added for bug 5665772
2554      IF p_dates_check = 'Y' THEN
2555       IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
2556           nvl(p_task_start_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
2557           nvl(TSTART_DATE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) ) -- Bug 6163119
2558         THEN
2559         PA_TASKS_MAINT_UTILS.Check_Start_Date(
2560           p_project_id => p_project_id,
2561           p_parent_task_id => TPARENT_TASK_ID,
2562           p_task_id => p_task_id, -- Bug 7386335
2563           p_start_date => p_task_start_date,
2564           x_return_status => l_ret,
2565           x_msg_count => l_msg_cnt,
2566           x_msg_data => l_msg_data);
2567         IF (l_ret <> 'S') THEN
2568           PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
2569         END IF;
2570       END IF;
2571      END IF;
2572 
2573       --BUG 4081329, rtarway
2574       --Check Start Date EI
2575       IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
2576           nvl(p_task_start_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
2577           nvl(TSTART_DATE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) ) -- Bug 6163119
2578       THEN
2579         PA_TASKS_MAINT_UTILS.Check_Start_Date_EI(
2580           p_project_id => p_project_id,
2581           p_task_id => p_task_id,
2582           p_start_date => p_task_start_date,
2583           x_return_status => l_ret,
2584           x_msg_count => l_msg_cnt,
2585           x_msg_data => l_msg_data);
2586           --Since This API would have Added message in Stack, dont add it again
2587       END IF;
2588       --End Add BUG 4081329, rtarway
2589 --dbms_output.put_line( 'In update task 8' );
2590 
2591       -- Bug 7386335
2592       -- This serves only as a workaround fix. We cannot change the condition IF (x_msg_count = 1) to IF
2593       -- (x_msg_count > 1) since the change will have to be made in all the procedures involved in the flow.
2594       l_msg_count := FND_MSG_PUB.count_msg;
2595       IF (l_msg_count > 0) THEN
2596         x_msg_count := l_msg_count;
2597         IF (x_msg_count = 1) THEN
2598           pa_interface_utils_pub.get_messages(
2599 			p_encoded => FND_API.G_TRUE,
2600 			p_msg_index => 1,
2601 			p_data => l_data,
2602 			p_msg_index_out => l_msg_index_out);
2603 			x_msg_data := l_data;
2604         END IF;
2605         RAISE FND_API.G_EXC_ERROR;
2606       END IF;
2607 
2608       --Check Completion Date
2609     -- Added for bug 5665772
2610     IF p_dates_check = 'Y' THEN
2611 
2612       IF (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
2613           nvl(p_task_completion_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
2614           nvl(TCOMPLETION_DATE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) ) -- Bug 6163119
2615       THEN
2616 
2617         PA_TASKS_MAINT_UTILS.Check_End_Date(
2618           p_project_id => p_project_id,
2619           p_parent_task_id => TPARENT_TASK_ID,
2620           --p_task_id => NULL,
2621           p_task_id => p_task_id,--BUG 4081329, rtarway
2622           p_end_date => p_task_completion_date,
2623           x_return_status => l_ret,
2624           x_msg_count => l_msg_cnt,
2625           x_msg_data => l_msg_data);
2626         IF (l_ret <> 'S') THEN
2627           PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
2628         END IF;
2629       END IF;
2630     END IF;
2631 
2632             --BUG 4081329, rtarway
2633        --Check Completion Date against EI date
2634       IF (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
2635           nvl(p_task_completion_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
2636           nvl(TCOMPLETION_DATE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) ) -- Bug 6163119
2637       THEN
2638 
2639         PA_TASKS_MAINT_UTILS.Check_End_Date_EI(
2640           p_project_id => p_project_id,
2641           p_task_id => p_task_id,
2642           p_end_date => p_task_completion_date,
2643           x_return_status => l_ret,
2644           x_msg_count => l_msg_cnt,
2645           x_msg_data => l_msg_data);
2646           --Since This API would have Added message in Stack, dont add it again
2647       END IF;
2648       --End Add BUG 4081329, rtarway
2649 
2650 --dbms_output.put_line( 'In update task 9' );
2651 
2652       --Check Schedule Dates
2653       IF (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2654           p_scheduled_start_date IS NULL) AND
2655          (p_scheduled_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2656           p_scheduled_finish_date IS NULL) THEN
2657         PA_TASKS_MAINT_UTILS.CHECK_SCHEDULE_DATES(
2658           p_project_id => p_project_id,
2659           p_sch_start_date => p_scheduled_start_date,
2660           p_sch_end_date => p_scheduled_finish_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 --dbms_output.put_line( 'In update task 10' );
2669 
2670       --Check Estimate Dates
2671       IF (p_estimated_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2672           p_estimated_start_date IS NULL) AND
2673          (p_estimated_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2674           p_estimated_end_date IS NULL) THEN
2675         PA_TASKS_MAINT_UTILS.CHECK_ESTIMATE_DATES(
2676           p_project_id => p_project_id,
2677           p_estimate_start_date => p_estimated_start_date,
2678           p_estimate_end_date => p_estimated_end_date,
2679           x_return_status => l_ret,
2680           x_msg_count => l_msg_cnt,
2681           x_msg_data => l_msg_data);
2682 --        IF (l_ret <> 'S') THEN
2683 --          PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
2684 --        END IF;
2685       END IF;
2686 
2687 --dbms_output.put_line( 'In update task 11' );
2688 
2689       --Check Actual Dates
2690       IF (p_actual_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2691           p_actual_start_date IS NULL) AND
2692          (p_actual_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
2693           p_actual_finish_date IS NULL) THEN
2694         PA_TASKS_MAINT_UTILS.CHECK_ACTUAL_DATES(
2695           p_project_id => p_project_id,
2696           p_actual_start_date => p_actual_start_date,
2697           p_actual_end_date => p_actual_finish_date,
2698           x_return_status => l_ret,
2699           x_msg_count => l_msg_cnt,
2700           x_msg_data => l_msg_data);
2701 --        IF (l_ret <> 'S') THEN
2702 --          PA_UTILS.ADD_MESSAGE('PA', l_msg_data);
2703 --        END IF;
2704       END IF;
2705 
2706     END IF;
2707 
2708 --dbms_output.put_line( 'In update task 12' );
2709 
2710     IF (p_calling_module IN ('SELF_SERVICE')) THEN
2711       -- Check if PRM is installed
2712       IF (PA_INSTALL.IS_PRM_LICENSED() = 'Y') THEN
2713         -- Work Type is required
2714         IF (p_work_type_id IS NULL) THEN
2715           PA_UTILS.ADD_MESSAGE('PA','PA_WORK_TYPE_REQ');
2716         END IF;
2717       END IF;
2718       null;
2719     END IF;
2720 
2721     --Check if it is okay to change parent task
2722 
2723 --dbms_output.put_line( 'In update task 13' );
2724 
2725     IF (p_calling_module IN ('SELF_SERVICE', 'FORM')) THEN
2726       IF NVL( p_parent_task_id, -1 ) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
2727          NVL( p_parent_task_id, -1 ) <> TPARENT_TASK_ID  THEN --parent task has changed
2728 
2729 
2730 
2731         IF (p_parent_task_id IS NOT NULL AND NVL( p_parent_task_id, -1 ) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
2732 
2733     l_msg_count := FND_MSG_PUB.count_msg;
2734 
2735 --dbms_output.put_line( 'In update task 14 '|| l_msg_count);
2736 
2737 
2738           PA_PROJECT_PUB.CHECK_CHANGE_PARENT_OK(
2739             p_api_version_number => 1.0,
2740             p_project_id => p_project_id,
2741             p_task_id => p_task_id,
2742             p_new_parent_task_id => p_parent_task_id,
2743             p_pm_project_reference => NULL,
2744             p_pm_task_reference => NULL,
2745             p_pm_new_parent_task_reference => NULL,
2746             p_change_parent_ok_flag => l_change_parent_flag,
2747             p_return_status => l_ret,
2748             p_msg_count => l_msg_cnt,
2749             p_msg_data => l_msg_data);
2750 
2751     l_msg_count := FND_MSG_PUB.count_msg;
2752 
2753 --dbms_output.put_line( 'In update task 14 --erro msg '|| l_msg_count);
2754 
2755           IF (l_change_parent_flag <> 'Y') THEN
2756             PA_UTILS.ADD_MESSAGE('PA', 'PA_CANT_CHANGE_PARENT');
2757           END IF;
2758         ELSE
2759           --new parent task is null; cannot change
2760           /* Bug2740269  -- commented the following message populataion. The parent can be null in case of top task
2761           PA_UTILS.ADD_MESSAGE('PA', 'PA_CANT_CHANGE_PARENT');
2762        */
2763       null;
2764         END IF;
2765       END IF;
2766     END IF;
2767 
2768     -- Check if there is any error. Get new Task Id if no error
2769 
2770     l_msg_count := FND_MSG_PUB.count_msg;
2771     IF (l_msg_count > 0) THEN
2772       x_msg_count := l_msg_count;
2773       IF (x_msg_count = 1) THEN
2774         pa_interface_utils_pub.get_messages(
2775           p_encoded => FND_API.G_TRUE,
2776           p_msg_index => 1,
2777           p_data => l_data,
2778           p_msg_index_out => l_msg_index_out);
2779         x_msg_data := l_data;
2780       END IF;
2781       RAISE FND_API.G_EXC_ERROR;
2782     END IF;
2783 
2784 
2785 --dbms_output.put_line( 'In update task 15' );
2786 
2787     --Update with incoming parameters
2788     -- Replacing non-entered values
2789     IF (p_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_name IS NULL ) THEN
2790       TTASK_NAME := substrb(p_task_name,1,20); -- 4151509
2791     END IF;
2792 
2793     IF (p_long_task_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_long_task_name IS NULL ) THEN
2794       TLONG_TASK_NAME := p_long_task_name;
2795     END IF;
2796 --dbms_output.put_line( 'In update task 15 -- 1' );
2797 
2798 
2799     IF (p_task_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_number IS NULL ) THEN
2800       TTASK_NUMBER := substrb(p_task_number,1,25); -- 4151509
2801     END IF;
2802 
2803 --dbms_output.put_line( 'In update task 15 -- 2' );
2804 
2805 
2806     IF (p_task_description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_description IS NULL ) THEN
2807       TDESCRIPTION := substrb(p_task_description,1,250); -- 4151509
2808     END IF;
2809 
2810     IF (p_task_manager_person_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_task_manager_person_id IS NULL ) THEN
2811       TTASK_MANAGER_PERSON_ID := p_task_manager_person_id;
2812     END IF;
2813 
2814     IF (p_carrying_out_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_carrying_out_organization_id IS NULL ) THEN
2815       IF (p_carrying_out_organization_id IS NOT NULL) THEN
2816         TCARRYING_OUT_ORG_ID := p_carrying_out_organization_id;
2817       END IF;
2818     END IF;
2819 
2820     IF (p_task_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_task_type_code IS NULL ) THEN
2821       TTASK_TYPE_CODE := p_task_type_code;
2822     END IF;
2823 
2824     IF (p_priority_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_priority_code IS NULL ) THEN
2825       TPRIORITY_CODE := p_priority_code;
2826     END IF;
2827 
2828     IF (p_work_type_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_work_type_id IS NULL ) THEN
2829       TWORK_TYPE_ID := p_work_type_id;
2830     END IF;
2831 
2832     IF (p_service_type_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_service_type_code IS NULL ) THEN
2833       TSERVICE_TYPE_CODE := p_service_type_code;
2834     END IF;
2835 
2836     IF (p_milestone_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_milestone_flag IS NULL ) THEN
2837       TMILESTONE_FLAG := p_milestone_flag;
2838     END IF;
2839 
2840     IF (p_critical_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_critical_flag IS NULL ) THEN
2841       TCRITICAL_FLAG := p_critical_flag;
2842     END IF;
2843 
2844     IF (p_chargeable_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_chargeable_flag IS NULL ) THEN
2845       TCHARGEABLE := p_chargeable_flag;
2846     END IF;
2847 
2848     --hy
2849     --Check if child exist for current parent task. If not,
2850     --update chargeable flag to Y
2851     IF (Pa_Task_Utils.check_child_Exists(NVL(p_task_id,0)) = 1 ) THEN
2852       TCHARGEABLE := 'N';
2853     END IF;
2854 
2855 
2856     IF (p_billable_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_billable_flag IS NULL ) THEN
2857       TBILLABLE := p_billable_flag;
2858     END IF;
2859 
2860     IF (p_receive_project_invoice_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_receive_project_invoice_flag IS NULL ) THEN
2861 --dbms_output.put_line( 'In update task 16' );
2862 
2863         select project_type INTO TPROJECT_TYPE
2864           from pa_projects_all
2865          where project_id = p_project_id;
2866       PA_TASKS_MAINT_UTILS.Check_Chargeable_Flag( p_chargeable_flag => TCHARGEABLE,
2867                        p_receive_project_invoice_flag => p_receive_project_invoice_flag,
2868                        p_project_type => TPROJECT_TYPE,
2869                p_project_id   => p_project_id, -- Added for bug#3512486
2870                        x_receive_project_invoice_flag => TRECEIVE_PROJECT_INVOICE_FLAG);
2871 --      TRECEIVE_PROJECT_INVOICE_FLAG := p_receive_project_invoice_flag;
2872     END IF;
2873 
2874     IF (p_scheduled_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_scheduled_start_date IS NULL ) THEN
2875       TSCHEDULED_START_DATE := p_scheduled_start_date;
2876     END IF;
2877 
2878     IF (p_scheduled_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_scheduled_finish_date IS NULL ) THEN
2879       TSCHEDULED_FINISH_DATE := p_scheduled_finish_date;
2880     END IF;
2881 
2882     IF (p_estimated_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_estimated_start_date IS NOT NULL ) THEN
2883       TESTIMATED_START_DATE := p_estimated_start_date;
2884 
2885     ELSIF (TESTIMATED_START_DATE is NULL or TESTIMATED_START_DATE =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
2886     TESTIMATED_START_DATE := TSCHEDULED_START_DATE;
2887     END IF;
2888 
2889 
2890     IF (p_estimated_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_estimated_end_date IS NOT NULL ) THEN
2891       TESTIMATED_END_DATE := p_estimated_end_date;
2892 
2893     ELSIF (TESTIMATED_END_DATE is NULL or TESTIMATED_END_DATE =PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
2894     TESTIMATED_END_DATE := TSCHEDULED_FINISH_DATE;
2895     END IF;
2896 
2897     IF (p_actual_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_actual_start_date IS NULL ) THEN
2898       TACTUAL_START_DATE := p_actual_start_date;
2899     END IF;
2900 
2901     IF (p_actual_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_actual_finish_date IS NULL ) THEN
2902       TACTUAL_FINISH_DATE := p_actual_finish_date;
2903     END IF;
2904 
2905     IF (p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_task_start_date IS NULL ) THEN
2906       TSTART_DATE := p_task_start_date;
2907     END IF;
2908 
2909     IF (p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_task_completion_date IS NULL ) THEN
2910       TCOMPLETION_DATE := p_task_completion_date;
2911     END IF;
2912 
2913     IF (p_baseline_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_baseline_start_date IS NULL ) THEN
2914       TBASELINE_START_DATE := p_baseline_start_date;
2915     END IF;
2916 
2917     IF (p_baseline_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR  p_baseline_end_date IS NULL ) THEN
2918       TBASELINE_END_DATE := p_baseline_end_date;
2919     END IF;
2920 
2921     IF (p_obligation_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_obligation_start_date IS NULL ) THEN
2922       TOBLIGATION_START_DATE := p_obligation_start_date;
2923     END IF;
2924 
2925     IF (p_obligation_end_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_obligation_end_date IS NULL ) THEN
2926       TOBLIGATION_END_DATE := p_obligation_end_date;
2927     END IF;
2928 
2929     IF (p_estimate_to_complete_work <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_estimate_to_complete_work IS NULL ) THEN
2930       TESTIMATE_TO_COMPLETE_WORK := p_estimate_to_complete_work;
2931     END IF;
2932 
2933     IF (p_baseline_work <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_baseline_work IS NULL ) THEN
2934       TBASELINE_WORK := p_baseline_work;
2935     END IF;
2936 
2937     IF (p_scheduled_work <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_scheduled_work IS NULL ) THEN
2938       TSCHEDULED_WORK := p_scheduled_work;
2939     END IF;
2940 
2941     IF (p_actual_work_to_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_actual_work_to_date IS NULL ) THEN
2942       TACTUAL_WORK_TO_DATE := p_actual_work_to_date;
2943     END IF;
2944 
2945     IF (p_work_unit <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_work_unit IS NULL ) THEN
2946       TWORK_UNIT_CODE := p_work_unit;
2947     END IF;
2948 
2949     IF (p_progress_status_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_progress_status_code IS NULL ) THEN
2950       TPROGRESS_STATUS_CODE := p_progress_status_code;
2951     END IF;
2952 
2953     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
2954       TJOB_BILL_RATE_SCHEDULE_ID := p_job_bill_rate_schedule_id;
2955     END IF;
2956 
2957     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
2958       TEMP_BILL_RATE_SCHEDULE_ID := p_emp_bill_rate_schedule_id;
2959     END IF;
2960 
2961     IF (p_address_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_address_id IS NULL ) THEN
2962       TADDRESS_ID := p_address_id;
2963     END IF;
2964 
2965     IF (p_ready_to_bill_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_ready_to_bill_flag IS NULL ) THEN
2966       TREADY_TO_BILL_FLAG := p_ready_to_bill_flag;
2967     END IF;
2968 
2969     IF (p_ready_to_distribute_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_ready_to_distribute_flag IS NULL ) THEN
2970       TREADY_TO_DISTRIBUTE_FLAG := p_ready_to_distribute_flag;
2971     END IF;
2972 
2973     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
2974       TLIMIT_TO_TXN_CONTROLS_FLAG := p_limit_to_txn_controls_flag;
2975     END IF;
2976 
2977     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
2978       TLABOR_BILL_RATE_ORG_ID := p_labor_bill_rate_org_id;
2979     END IF;
2980 
2981     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
2982       TLABOR_STD_BILL_RATE_SCHDL := p_labor_std_bill_rate_schdl;
2983     END IF;
2984 
2985     IF (p_labor_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_labor_schedule_fixed_date IS NULL ) THEN
2986       TLABOR_SCHEDULE_FIXED_DATE := p_labor_schedule_fixed_date;
2987     END IF;
2988 
2989     IF (p_labor_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_labor_schedule_discount IS NULL ) THEN
2990       TLABOR_SCHEDULE_DISCOUNT := p_labor_schedule_discount;
2991     END IF;
2992 
2993     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
2994       TNLR_BILL_RATE_ORG_ID := p_nl_bill_rate_org_id;
2995     END IF;
2996 
2997     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
2998       TNLR_STD_BILL_RATE_SCHDL := p_nl_std_bill_rate_schdl;
2999     END IF;
3000 
3001     IF (p_nl_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_nl_schedule_fixed_date IS NULL ) THEN
3002       TNLR_SCHEDULE_FIXED_DATE := p_nl_schedule_fixed_date;
3003     END IF;
3004 
3005     IF (p_nl_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_nl_schedule_discount IS NULL ) THEN
3006       TNLR_SCHEDULE_DISCOUNT := p_nl_schedule_discount;
3007     END IF;
3008 
3009     IF (p_labor_cost_multiplier_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_labor_cost_multiplier_name IS NULL ) THEN
3010       TLABOR_COST_MULTIPLIER_NAME := p_labor_cost_multiplier_name;
3011     END IF;
3012 
3013     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
3014       TCOST_IND_RATE_SCH_ID := p_cost_ind_rate_sch_id;
3015     END IF;
3016 
3017     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
3018       TREV_IND_RATE_SCH_ID := p_rev_ind_rate_sch_id;
3019     END IF;
3020 
3021     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
3022       TINV_IND_RATE_SCH_ID := p_inv_ind_rate_sch_id;
3023     END IF;
3024 
3025     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
3026       TCOST_IND_SCH_FIXED_DATE := p_cost_ind_sch_fixed_date;
3027     END IF;
3028 
3029     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
3030       TREV_IND_SCH_FIXED_DATE := p_rev_ind_sch_fixed_date;
3031     END IF;
3032 
3033     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
3034       TINV_IND_SCH_FIXED_DATE := p_inv_ind_sch_fixed_date;
3035     END IF;
3036 
3037     IF (p_labor_sch_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_labor_sch_type IS NULL ) THEN
3038       TLABOR_SCH_TYPE := p_labor_sch_type;
3039     END IF;
3040 
3041     IF (p_nl_sch_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_nl_sch_type IS NULL ) THEN
3042       TNLR_SCH_TYPE := p_nl_sch_type;
3043     END IF;
3044 
3045     IF (p_early_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_early_start_date IS NULL ) THEN
3046       TEARLY_START_DATE := p_early_start_date;
3047     END IF;
3048 
3049     IF (p_early_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_early_finish_date IS NULL ) THEN
3050       TEARLY_FINISH_DATE := p_early_finish_date;
3051     END IF;
3052 
3053     IF (p_late_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_late_start_date IS NULL ) THEN
3054       TLATE_START_DATE := p_late_start_date;
3055     END IF;
3056 
3057     IF (p_late_finish_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_late_finish_date IS NULL ) THEN
3058       TLATE_FINISH_DATE := p_late_finish_date;
3059     END IF;
3060 
3061     IF (p_attribute_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute_category IS NULL ) THEN
3062       TATTRIBUTE_CATEGORY := p_attribute_category;
3063     END IF;
3064 
3065    IF (p_attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute1 IS NULL) THEN	/* Modified for Bug#6041525 */
3066       TATTRIBUTE1 := p_attribute1;
3067     END IF;
3068 
3069     IF (p_attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute2 IS NULL) THEN	/* Modified for Bug#6041525 */
3070       TATTRIBUTE2 := p_attribute2;
3071     END IF;
3072 
3073     IF (p_attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute3 IS NULL) THEN	/* Modified for Bug#6041525 */
3074       TATTRIBUTE3 := p_attribute3;
3075     END IF;
3076 
3077     IF (p_attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute4 IS NULL) THEN	/* Modified for Bug#6041525 */
3078       TATTRIBUTE4 := p_attribute4;
3079     END IF;
3080 
3081     IF (p_attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute5 IS NULL) THEN	/* Modified for Bug#6041525 */
3082       TATTRIBUTE5 := p_attribute5;
3083     END IF;
3084 
3085     IF (p_attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute6 IS NULL) THEN	/* Modified for Bug#6041525 */
3086       TATTRIBUTE6 := p_attribute6;
3087     END IF;
3088 
3089     IF (p_attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute7 IS NULL) THEN	/* Modified for Bug#6041525 */
3090       TATTRIBUTE7 := p_attribute7;
3091     END IF;
3092 
3093     IF (p_attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute8 IS NULL) THEN	/* Modified for Bug#6041525 */
3094       TATTRIBUTE8 := p_attribute8;
3095     END IF;
3096 
3097     IF (p_attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute9 IS NULL) THEN	/* Modified for Bug#6041525 */
3098       TATTRIBUTE9 := p_attribute9;
3099     END IF;
3100 
3101     IF (p_attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_attribute10 IS NULL) THEN	/* Modified for Bug#6041525 */
3102       TATTRIBUTE10 := p_attribute10;
3103     END IF;
3104 
3105     IF (p_allow_cross_charge_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_allow_cross_charge_flag IS NULL ) THEN
3106       TALLOW_CROSS_CHARGE_FLAG := p_allow_cross_charge_flag;
3107     END IF;
3108 
3109     IF (p_project_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_project_rate_date IS NULL ) THEN
3110       TPROJECT_RATE_DATE := p_project_rate_date;
3111     END IF;
3112 
3113     IF (p_project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_project_rate_type IS NULL ) THEN
3114       TPROJECT_RATE_TYPE := p_project_rate_type;
3115     END IF;
3116 
3117     IF (p_cc_process_labor_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_cc_process_labor_flag IS NULL ) THEN
3118       TCC_PROCESS_LABOR_FLAG := p_cc_process_labor_flag;
3119     END IF;
3120 
3121     IF (p_labor_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_labor_tp_schedule_id IS NULL ) THEN
3122       TLABOR_TP_SCHEDULE_ID := p_labor_tp_schedule_id;
3123     END IF;
3124 
3125     IF (p_labor_tp_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_labor_tp_fixed_date IS NULL ) THEN
3126       TLABOR_TP_FIXED_DATE := p_labor_tp_fixed_date;
3127     END IF;
3128 
3129     IF (p_cc_process_nl_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_cc_process_nl_flag IS NULL ) THEN
3130       TCC_PROCESS_NL_FLAG := p_cc_process_nl_flag;
3131     END IF;
3132 
3133     IF (p_nl_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_nl_tp_schedule_id IS NULL ) THEN
3134       TNL_TP_SCHEDULE_ID := p_nl_tp_schedule_id;
3135     END IF;
3136 
3137     IF (p_nl_tp_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_nl_tp_fixed_date IS NULL ) THEN
3138       TNL_TP_FIXED_DATE := p_nl_tp_fixed_date;
3139     END IF;
3140 
3141     --Added by ansari
3142 --dbms_output.put_line( 'In update task 15 -- 2' );
3143 
3144     IF (p_top_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_top_task_id IS NULL ) THEN
3145       TTOP_TASK_ID := p_top_task_id;
3146     END IF;
3147 
3148     IF (p_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_parent_task_id IS NULL ) THEN
3149       TPARENT_TASK_ID := p_parent_task_id;
3150     END IF;
3151 
3152     IF (p_wbs_level <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_wbs_level IS NULL ) THEN
3153        TWBS_LEVEL:= p_wbs_level;
3154     END IF;
3155 
3156     IF (p_display_sequence <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
3157        TDISPLAY_SEQUENCE:= p_display_sequence;
3158     END IF;
3159 
3160     IF (p_inc_proj_progress_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_inc_proj_progress_flag IS NULL ) THEN
3161        Tinc_proj_progress_flag:= p_inc_proj_progress_flag;
3162     END IF;
3163 
3164     IF (p_comments <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_comments IS NULL ) THEN
3165        Tcomments:= p_comments;
3166     END IF;
3167 
3168     IF (p_comments <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_comments IS NULL ) THEN
3169        Tcomments:= p_comments;
3170     END IF;
3171 
3172 
3173     IF (p_taskfunc_cost_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_taskfunc_cost_rate_type IS NULL ) THEN
3174        ttaskfunc_cost_rate_type:= p_taskfunc_cost_rate_type;
3175     END IF;
3176 
3177     IF (p_taskfunc_cost_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR p_taskfunc_cost_rate_date IS NULL ) THEN
3178        ttaskfunc_cost_rate_date:= p_taskfunc_cost_rate_date;
3179     END IF;
3180 
3181     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
3182        tnon_lab_std_bill_rt_sch_id:= p_non_lab_std_bill_rt_sch_id;
3183     END IF;
3184 --  FP.K changes msundare
3185     IF (p_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_labor_disc_reason_code IS NULL ) THEN
3186        Tlabor_disc_reason_code:= p_labor_disc_reason_code;
3187     END IF;
3188 
3189     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
3190        Tnon_labor_disc_reason_code:= p_non_labor_disc_reason_code;
3191     END IF;
3192 
3193 --PA L Capital Project Changes 2872708
3194     IF (p_retirement_cost_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
3195         p_retirement_cost_flag IS NULL ) THEN
3196        tretirement_cost_flag:= p_retirement_cost_flag;
3197     END IF;
3198 
3199     IF (p_cint_eligible_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
3200         p_cint_eligible_flag IS NULL ) THEN
3201         tcint_eligible_flag:= p_cint_eligible_flag;
3202     END IF;
3203 
3204     IF (p_cint_stop_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
3205         p_cint_stop_date IS NULL ) THEN
3206         tcint_stop_date:= p_cint_stop_date;
3207     END IF;
3208 
3209 --End PA L Capital Project Changes 2872708
3210 
3211     IF (p_gen_etc_src_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR or
3212         p_gen_etc_src_code IS NULL) THEN
3213       TGEN_ETC_SOURCE_CODE := p_gen_etc_src_code;
3214 
3215 
3216     END IF;
3217 
3218 --dbms_output.put_line( 'In update task 17' );
3219 
3220     -- update task
3221   PA_TASKS_PKG.update_row(
3222    l_rowid,
3223    p_task_id,
3224    p_project_id,
3225    TTASK_NUMBER,
3226    sysdate,
3227    FND_GLOBAL.USER_ID,
3228    FND_GLOBAL.USER_ID,
3229    TTASK_NAME,
3230    TLONG_TASK_NAME, --new
3231    TTOP_TASK_ID,
3232    TWBS_LEVEL,
3233    TREADY_TO_BILL_FLAG,
3234    TREADY_TO_DISTRIBUTE_FLAG,
3235    TPARENT_TASK_ID,
3236    TDESCRIPTION,
3237    TCARRYING_OUT_ORG_ID,
3238    TSERVICE_TYPE_CODE,
3239    TTASK_MANAGER_PERSON_ID,
3240    TCHARGEABLE,
3241    TBILLABLE,
3242    TLIMIT_TO_TXN_CONTROLS_FLAG,
3243    TSTART_DATE,
3244    TCOMPLETION_DATE,
3245    TADDRESS_ID,
3246    TLABOR_BILL_RATE_ORG_ID,
3247    TLABOR_STD_BILL_RATE_SCHDL,
3248    TLABOR_SCHEDULE_FIXED_DATE,
3249    TLABOR_SCHEDULE_DISCOUNT,
3250    TNLR_BILL_RATE_ORG_ID,
3251    TNLR_STD_BILL_RATE_SCHDL,
3252    TNLR_SCHEDULE_FIXED_DATE,
3253    TNLR_SCHEDULE_DISCOUNT,
3254    TLABOR_COST_MULTIPLIER_NAME,
3255    TATTRIBUTE_CATEGORY,
3256    TATTRIBUTE1,
3257    TATTRIBUTE2,
3258    TATTRIBUTE3,
3259    TATTRIBUTE4,
3260    TATTRIBUTE5,
3261    TATTRIBUTE6,
3262    TATTRIBUTE7,
3263    TATTRIBUTE8,
3264    TATTRIBUTE9,
3265    TATTRIBUTE10,
3266    TCOST_IND_RATE_SCH_ID,
3267    TREV_IND_RATE_SCH_ID,
3268    TINV_IND_RATE_SCH_ID,
3269    TCOST_IND_SCH_FIXED_DATE,
3270    TREV_IND_SCH_FIXED_DATE,
3271    TINV_IND_SCH_FIXED_DATE,
3272    TLABOR_SCH_TYPE,
3273    TNLR_SCH_TYPE,
3274    TALLOW_CROSS_CHARGE_FLAG,
3275    TPROJECT_RATE_DATE,
3276    TPROJECT_RATE_TYPE,
3277    TCC_PROCESS_LABOR_FLAG,
3278    TLABOR_TP_SCHEDULE_ID,
3279    TLABOR_TP_FIXED_DATE,
3280    TCC_PROCESS_NL_FLAG,
3281    TNL_TP_SCHEDULE_ID,
3282    TNL_TP_FIXED_DATE,
3283    TRECEIVE_PROJECT_INVOICE_FLAG,
3284    TWORK_TYPE_ID,
3285    TJOB_BILL_RATE_SCHEDULE_ID,
3286    TEMP_BILL_RATE_SCHEDULE_ID,
3287 
3288       /*TTASK_TYPE_CODE,
3289       TDISPLAY_SEQUENCE, --DISPLAY SEQUENCE
3290       TPRIORITY_CODE,
3291       TCRITICAL_FLAG,
3292       TMILESTONE_FLAG,
3293       TSCHEDULED_START_DATE,
3294       TSCHEDULED_FINISH_DATE,
3295       TACTUAL_START_DATE, -- Actual Start Date
3296       TACTUAL_FINISH_DATE, -- Actual Finish Date
3297       TESTIMATED_START_DATE,
3298       TESTIMATED_END_DATE,
3299       TBASELINE_START_DATE,
3300       TBASELINE_END_DATE,
3301       TOBLIGATION_START_DATE,
3302       TOBLIGATION_END_DATE,
3303       TESTIMATE_TO_COMPLETE_WORK,
3304       TBASELINE_WORK,
3305       TSCHEDULED_WORK,
3306       TACTUAL_WORK_TO_DATE,
3307       TWORK_UNIT_CODE,
3308       TPROGRESS_STATUS_CODE,
3309       Tinc_proj_progress_flag,
3310       Tcomments,
3311       p_record_version_number --Record version Number*/
3312 
3313       ttaskfunc_cost_rate_type,
3314       ttaskfunc_cost_rate_date,
3315       tnon_lab_std_bill_rt_sch_id,
3316       Tlabor_disc_reason_code,
3317       Tnon_labor_disc_reason_code,
3318 --PA L Capital Project Changes 2872708
3319       tretirement_cost_flag ,
3320       tcint_eligible_flag   ,
3321       tcint_stop_date      ,
3322 --End PA L Capital Project Changes 2872708
3323       tGEN_ETC_SOURCE_CODE
3324 );
3325 
3326   x_return_status := FND_API.G_RET_STS_SUCCESS;
3327 
3328 
3329   EXCEPTION
3330     WHEN FND_API.G_EXC_ERROR THEN
3331       IF (p_commit = FND_API.G_TRUE) THEN
3332         ROLLBACK to UPDATE_TASK_PRIVATE;
3333       END IF;
3334       x_return_status := FND_API.G_RET_STS_ERROR;
3335     WHEN NO_DATA_FOUND THEN
3336       IF (p_commit = FND_API.G_TRUE) THEN
3337         ROLLBACK to UPDATE_TASK_PRIVATE;
3338       END IF;
3339       x_msg_count := FND_MSG_PUB.count_msg;
3340       x_return_status := FND_API.G_RET_STS_ERROR;
3341     WHEN OTHERS THEN
3342       IF (p_commit = FND_API.G_TRUE) THEN
3343         ROLLBACK to UPDATE_TASK_PRIVATE;
3344       END IF;
3345       x_msg_count := FND_MSG_PUB.count_msg;
3346       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3347       --put message
3348       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
3349                               p_procedure_name => 'UPDATE_TASK',
3350                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3351       RAISE;
3352   END UPDATE_TASK;
3353 
3354 
3355   procedure DELETE_TASK
3356   (
3357      p_api_version                       IN  NUMBER      := 1.0
3358     ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
3359     ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
3360     ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
3361     ,p_validation_level                  IN  VARCHAR2    := 100
3362     ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
3363     ,p_debug_mode                        IN  VARCHAR2    := 'N'
3364     ,p_task_id                                 IN  NUMBER
3365     ,p_record_version_number             IN  NUMBER
3366     ,p_called_from_api      IN    VARCHAR2    := 'ABCD'
3367     ,p_bulk_flag                         IN  VARCHAR2    := 'N'        -- 4201927
3368     ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3369     ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3370     ,x_msg_data                          OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3371   )
3372   IS
3373     l_msg_count                          NUMBER := 0;
3374 
3375     l_err_code                           NUMBER                 := 0;
3376     l_err_stack                          VARCHAR2(630);
3377     l_err_stage                          VARCHAR2(80);
3378     l_data                               VARCHAR2(250);
3379     l_msg_data                           VARCHAR2(250);
3380     l_msg_index_out                      NUMBER;
3381 
3382     l_delete_project_allowed             VARCHAR2(1);
3383     l_update_proj_num_allowed            VARCHAR2(1);
3384     l_update_proj_name_allowed           VARCHAR2(1);
3385     l_update_proj_desc_allowed           VARCHAR2(1);
3386     l_update_proj_dates_allowed          VARCHAR2(1);
3387     l_update_proj_status_allowed         VARCHAR2(1);
3388     l_update_proj_manager_allowed        VARCHAR2(1);
3389     l_update_proj_org_allowed            VARCHAR2(1);
3390     l_add_task_allowed                   VARCHAR2(1);
3391     l_delete_task_allowed                VARCHAR2(1);
3392     l_update_task_num_allowed            VARCHAR2(1);
3393     l_update_task_name_allowed           VARCHAR2(1);
3394     l_update_task_dates_allowed          VARCHAR2(1);
3395     l_update_task_desc_allowed           VARCHAR2(1);
3396     l_update_parent_task_allowed         VARCHAR2(1);
3397     l_update_task_org_allowed            VARCHAR2(1);
3398 
3399     t_pm_product_code                    PA_TASKS.PM_PRODUCT_CODE%TYPE;
3400     t_parent_task_id                     PA_TASKS.PARENT_TASK_ID%TYPE;
3401   BEGIN
3402     IF (p_debug_mode = 'Y') THEN
3403       pa_debug.debug('PA_TASKS_MAINT_PVT.DELETE_TASK BEGIN');
3404     END IF;
3405 
3406     IF (p_commit = FND_API.G_TRUE) THEN
3407       savepoint DELETE_TASK_PRIVATE;
3408     END IF;
3409 
3410     IF (p_debug_mode = 'Y') THEN
3411       pa_debug.debug('Performing validations');
3412     END IF;
3413 
3414     -- Get PM_PRODUCT_CODE
3415     BEGIN
3416     select PM_PRODUCT_CODE, PARENT_TASK_ID
3417       into t_pm_product_code, t_parent_task_id
3418       from pa_tasks
3419      where task_id = p_task_id;
3420     EXCEPTION
3421       WHEN NO_DATA_FOUND THEN
3422         PA_UTILS.ADD_MESSAGE('PA','PA_EXP_NO_TASK'); -- specified task does not exist
3423         raise FND_API.G_EXC_ERROR;
3424     END;
3425 
3426     -- Set controls
3427     IF (p_calling_module IN ('SELF_SERVICE')) THEN
3428       If (t_pm_product_code IS NOT NULL) THEN
3429         PA_PM_CONTROLS.GET_PROJECT_ACTIONS_ALLOWED(
3430           p_pm_product_code => t_pm_product_code,
3431           p_delete_project_allowed => l_delete_project_allowed,
3432           p_update_proj_num_allowed => l_update_proj_num_allowed,
3433           p_update_proj_name_allowed => l_update_proj_name_allowed,
3434           p_update_proj_desc_allowed => l_update_proj_desc_allowed,
3435           p_update_proj_dates_allowed  => l_update_proj_dates_allowed,
3436           p_update_proj_status_allowed => l_update_proj_status_allowed,
3437           p_update_proj_manager_allowed => l_update_proj_manager_allowed,
3438           p_update_proj_org_allowed => l_update_proj_org_allowed,
3439           p_add_task_allowed => l_add_task_allowed,
3440           p_delete_task_allowed => l_delete_task_allowed,
3441           p_update_task_num_allowed => l_update_task_num_allowed,
3442           p_update_task_name_allowed => l_update_task_name_allowed,
3443           p_update_task_dates_allowed => l_update_task_dates_allowed,
3444           p_update_task_desc_allowed => l_update_task_desc_allowed,
3445           p_update_parent_task_allowed => l_update_parent_task_allowed,
3446           p_update_task_org_allowed => l_update_task_org_allowed,
3447           p_error_code => l_err_code,
3448           p_error_stack => l_err_stack,
3449           p_error_stage => l_err_stage
3450         );
3451       END IF; --product code is not null
3452     END IF;
3453 
3454     If (p_calling_module IN ('SELF_SERVICE', 'FORM')) THEN
3455     --Check if task can be deleted;
3456       IF (t_pm_product_code IS NOT NULL) AND (l_delete_task_allowed = 'N') THEN
3457         PA_UTILS.ADD_MESSAGE('PA', 'PA_PR_PM_CANNOT_DELETE');
3458         raise FND_API.G_EXC_ERROR;
3459       END IF;
3460 
3461 /* do not stop delting the last task. FPM changes
3462 refer bug 3427157
3463       IF p_called_from_api <> 'IMPORT'   --do not perform the following validation if called from
3464                                          --PA_TASK_PUB1.DELETE_TASK_VERSION and PA_TASK_PUB1.DELETE_TASK_VERSION
3465                                          --is called from import logic.
3466       THEN
3467         --Check if this is last task;
3468         If (PA_TASK_UTILS.check_last_task(p_task_id) <> 0) THEN
3469             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3470                                  p_msg_name => 'PA_TK_CANT_DELETE_LAST_TASK');
3471             raise FND_API.G_EXC_ERROR;
3472          END IF;
3473       END IF;
3474  do not stop delting the last task. FPM changes*/
3475 
3476     --Bug 2947492: The following api call is modified to pass parameters by notation.
3477     --Check if it is okay to delete task
3478       -- 4201927 If this api is getting called from bulk task delete version, p_bulk_flag will
3479       -- be passed as 'Y' and below validation will not be done in that flow
3480       IF p_bulk_flag = 'N' THEN
3481           PA_TASK_UTILS.CHECK_DELETE_TASK_OK(x_task_id     => p_task_id,
3482                                              x_err_code    => l_err_code,
3483                                              x_err_stage   => l_err_stage,
3484                                              x_err_stack   => l_err_stack);
3485           IF (l_err_code <> 0) THEN
3486             PA_UTILS.ADD_MESSAGE('PA', substr(l_err_stage, 1, 30));
3487             raise FND_API.G_EXC_ERROR;
3488           END IF;
3489       END IF;
3490       -- 4201927 end
3491 
3492     END IF;
3493 
3494     --Bug 2947492: The following api call is modified to pass parameters by notation.
3495     PA_PROJECT_CORE.Delete_Task(
3496                       x_task_id     => p_task_id,
3497                       x_bulk_flag   => p_bulk_flag,
3498                       x_err_code    => l_err_code,
3499                       x_err_stage   => l_err_stage,
3500                       x_err_stack   => l_err_stack);
3501 
3502     If (l_err_code <> 0) THEN
3503       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3504                            p_msg_name => substr(l_err_stage,1,30));
3505       raise FND_API.G_EXC_ERROR;
3506     END IF;
3507 
3508     IF (p_calling_module IN ('SELF_SERVICE', 'FORM')) THEN
3509       --Check if child exist for current parent task. If not,
3510       --update chargeable flag to Y
3511       IF (Pa_Task_Utils.check_child_Exists(NVL(t_parent_task_id,0)) = 0 ) THEN
3512         UPDATE Pa_tasks
3513         SET Chargeable_Flag = 'Y',
3514         RECORD_VERSION_NUMBER = nvl(RECORD_VERSION_NUMBER,0) + 1,
3515         last_updated_by = FND_GLOBAL.USER_ID,
3516         last_update_login = FND_GLOBAL.USER_ID,
3517         last_update_date = sysdate
3518         WHERE TASK_ID = t_parent_task_id;
3519       END IF;
3520     END IF;
3521 
3522     l_msg_count := FND_MSG_PUB.count_msg;
3523     IF (l_msg_count > 0) then
3524       x_msg_count := l_msg_count;
3525       IF (x_msg_count = 1) then
3526         pa_interface_utils_pub.get_messages
3527          (p_encoded        => FND_API.G_TRUE,
3528           p_msg_index      => 1,
3529           p_data           => l_data,
3530           p_msg_index_out  => l_msg_index_out);
3531          x_msg_data := l_data;
3532       end if;
3533       raise FND_API.G_EXC_ERROR;
3534     end if;
3535 
3536     x_return_status := FND_API.G_RET_STS_SUCCESS;
3537 
3538   EXCEPTION
3539     WHEN FND_API.G_EXC_ERROR THEN
3540       IF (p_commit = FND_API.G_TRUE) THEN
3541         ROLLBACK to DELETE_TASK_PRIVATE;
3542       END IF;
3543       x_msg_count := FND_MSG_PUB.count_msg;
3544       x_return_status := FND_API.G_RET_STS_ERROR;
3545     WHEN OTHERS THEN
3546       IF (p_commit = FND_API.G_TRUE) THEN
3547         ROLLBACK to DELETE_TASK_PRIVATE;
3548       END IF;
3549       x_msg_count := FND_MSG_PUB.count_msg;
3550       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3551       --put message
3552       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
3553                               p_procedure_name => 'DELETE_TASK',
3554                               p_error_text     => SUBSTRB(SQLERRM,1,240));
3555       RAISE;
3556   END DELETE_TASK;
3557 
3558 -- API name                      : Indent_Task
3559 -- Type                          : Private procedure
3560 -- Pre-reqs                      : None
3561 -- Return Value                  : N/A
3562 -- Prameters
3563 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
3564 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
3565 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
3566 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
3567 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
3568 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
3569 -- p_project_id              IN  NUMBER     REQUIRED
3570 -- p_task_id                   IN    NUMBER     REQUIRED
3571 -- p_record_version_number   IN  NUMBER     REQUIRED   DEFAULT=1
3572 -- x_return_status         OUT   VARCHAR2   REQUIRED
3573 -- x_msg_count               OUT     VARCHAR2   REQUIRED
3574 -- x_msg_data                OUT     VARCHAR2   REQUIRED
3575 --
3576 --  History
3577 --
3578 --  25-JUN-01   Majid Ansari             -Created
3579 --
3580 --
3581 
3582  PROCEDURE Indent_Task(
3583    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
3584   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
3585   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
3586   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
3587   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
3588   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
3589   ,p_project_id              IN  NUMBER
3590   ,p_task_id                   IN    NUMBER
3591   ,p_record_version_number   IN  NUMBER      DEFAULT 1
3592   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3593   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3594   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
3595 
3596     CURSOR c1 IS
3597       select 'x'
3598       from PA_TASKS
3599       where project_id = p_project_id
3600       for update of record_version_number NOWAIT;
3601 
3602     CURSOR c2 IS
3603       select 'x'
3604       from PA_TASKS
3605       where project_id = p_project_id;
3606 
3607     CURSOR cur_task_heirarchy
3608     IS
3609       SELECT task_id, wbs_level, record_version_number
3610         FROM pa_tasks
3611        START WITH task_id = p_task_id
3612        CONNECT BY PRIOR task_id = parent_task_id;
3613 
3614 
3615     --Get the parent of the indenting task if the above task is at higher level
3616     CURSOR cur_parent_of_above( p_wbs_level NUMBER,
3617                                 p_top_task_id_above NUMBER,
3618                                 p_display_sequence NUMBER )
3619     IS
3620 /*      SELECT task_id, top_task_id
3621         FROM pa_tasks
3622        WHERE wbs_level = p_wbs_level
3623          AND top_task_id = p_top_task_id_above
3624          AND display_sequence = ( SELECT max( display_sequence )
3625                                     FROM pa_tasks
3626                                    WHERE top_task_id = p_top_task_id_above
3627                                      AND wbs_level = p_wbs_level
3628                                      AND display_sequence < p_display_sequence );*/
3629 --Project Structure changes
3630     SELECT task_id, top_task_id
3631         FROM pa_tasks pt, pa_proj_element_versions ppev
3632        WHERE pt.wbs_level = p_wbs_level
3633          AND top_task_id = p_top_task_id_above
3634          AND pt.task_id = ppev.proj_element_id
3635          AND ppev.display_sequence = ( SELECT max( ppev.display_sequence )
3636                                          FROM pa_tasks pt, pa_proj_element_versions ppev
3637                                         WHERE top_task_id = p_top_task_id_above
3638                                           AND pt.wbs_level = p_wbs_level
3639                                           AND ppev.proj_element_id = pt.task_id
3640                                           AND ppev.display_sequence < p_display_sequence );
3641 
3642    l_return_status                    VARCHAR2(1);
3643    l_msg_data                         VARCHAR2(250);
3644    l_msg_count                        NUMBER;
3645 
3646    l_dummy                            VARCHAR2(1);
3647    l_error_msg_code                   VARCHAR2(250);
3648    l_data                             VARCHAR2(250);
3649    l_msg_index_out                    NUMBER;
3650 
3651    l_task_level                       PA_TASKS.WBS_LEVEL%TYPE :=0;
3652    l_parent_task_id                   NUMBER;
3653    l_top_task_id                      NUMBER;
3654    l_display_sequence                 NUMBER;
3655 
3656    l_task_level_above                 PA_TASKS.WBS_LEVEL%TYPE :=0;
3657    l_task_id_above                    NUMBER;
3658    l_parent_task_id_above             NUMBER;
3659    l_top_task_id_above                NUMBER;
3660    l_display_sequence_above           NUMBER;
3661 
3662    l_new_parent_id                    NUMBER;
3663    l_new_top_id                       NUMBER;
3664 
3665 -- 23-JUL-2001 Added by HSIU
3666     l_err_code                           NUMBER                 := 0;
3667     l_err_stack                          VARCHAR2(630);
3668     l_err_stage                          VARCHAR2(80); -- VARCHAR2(80)
3669 
3670  BEGIN
3671 
3672     IF p_commit = FND_API.G_TRUE
3673     THEN
3674        SAVEPOINT Edit_Structure;
3675     END IF;
3676     x_return_status := 'S';
3677 
3678     PA_TASKS_MAINT_UTILS.GetWbsLevel(
3679                                  p_project_id           => p_project_id,
3680                                  p_task_id              => p_task_id,
3681 
3682                                  x_task_level           => l_task_level,
3683                                  x_parent_task_id       => l_parent_task_id,
3684                                  x_top_task_id          => l_top_task_id,
3685                                  x_display_sequence     => l_display_sequence,
3686 
3687                                  x_task_id_above       => l_task_id_above,
3688                                  x_task_level_above     => l_task_level_above,
3689                                  x_parent_task_id_above => l_parent_task_id_above,
3690                                  x_top_task_id_above    => l_top_task_id_above,
3691                                  x_display_sequence_above => l_display_sequence_above,
3692 
3693                                  x_return_status     => x_return_status,
3694                                  x_error_msg_code    => x_msg_data );
3695 
3696     -- if the above task is at the higher level ( with low wbs level value ) then the task
3697     --   cannot be indented.
3698 
3699 --dbms_output.put_line( 'Indent Task PVT : Stage 1' );
3700 /* Bug2740269 -- Commented the following If condition and added a new
3701     IF  l_task_level > l_task_level_above OR l_task_level = 1
3702 */
3703     IF  l_task_level > l_task_level_above OR l_display_sequence = 1
3704     THEN
3705         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
3706                              p_msg_name       => 'PA_TASK_CANNOT_INDENT' );
3707         x_msg_data := 'PA_TASK_CANNOT_INDENT';
3708         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3709         RAISE  FND_API.G_EXC_ERROR;
3710 
3711     ELSE
3712 
3713 --dbms_output.put_line( 'Indent Task PVT : Stage 2' ||' l_task_level '||l_task_level||'  l_task_level_above '||l_task_level_above);
3714 
3715      -- If the above task has the same wbs level as that of the indenting task then the indenting
3716       -- task becomes the child of the above task
3717 
3718       IF l_task_level = l_task_level_above
3719       THEN
3720         -- 0) Check if this task can have a subtask; no need to check in other cases since
3721         --    the task is already at a higher level, which means it is already a subtask of
3722         --    another task
3723         -- 23-JUL-2001
3724         -- Added by HSIU--check if the reference task can have child tasks
3725 
3726     l_msg_count := FND_MSG_PUB.count_msg;
3727 
3728 --dbms_output.put_line( 'Indent Task PVT : Stage 3 '||'Count '||l_msg_count );
3729 
3730         PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK(x_task_id => l_task_id_above,
3731            x_err_code => l_err_code,
3732            x_err_stack => l_err_stack,
3733            x_err_stage => l_err_stage
3734         );
3735         IF (l_err_code <> 0) THEN
3736            PA_UTILS.ADD_MESSAGE('PA', substr(l_err_stage,1,30));
3737         END IF;
3738 
3739     l_msg_count := FND_MSG_PUB.count_msg;
3740 
3741 --dbms_output.put_line( 'Indent Task PVT : Stage 4'||' Count '||l_msg_count );
3742 
3743         -- HSIU changes ends here
3744 
3745         -- 1) update the parent task id of the indenting task with the above task id
3746         PA_TASKS_MAINT_PVT.UPDATE_TASK
3747            (
3748               p_commit                            => p_commit
3749              ,p_validate_only                     => p_validate_only
3750              ,p_validation_level                  => p_validation_level
3751              ,p_calling_module                    => p_calling_module
3752              ,p_debug_mode                        => p_debug_mode
3753 
3754              ,p_project_id                        => p_project_id
3755              ,p_task_id                           => p_task_id
3756              ,p_parent_task_id                    => l_task_id_above
3757              ,p_record_version_number             => p_record_version_number
3758              ,x_return_status                     => x_return_status
3759              ,x_msg_count                         => x_msg_count
3760              ,x_msg_data                          => x_msg_data );
3761 
3762     l_msg_count := FND_MSG_PUB.count_msg;
3763 
3764 --dbms_output.put_line( 'Indent Task PVT : Stage 5'||' Count '||l_msg_count  );
3765 
3766 
3767             l_msg_count := FND_MSG_PUB.count_msg;
3768 
3769             IF l_msg_count > 0 THEN
3770                x_msg_count := l_msg_count;
3771                x_return_status := 'E';
3772                RAISE  FND_API.G_EXC_ERROR;
3773             END IF;
3774 
3775         -- Changes for bug 3125880
3776         -- As Parent Task Id of the Task being indented is updated and b'coz of this
3777         -- for this particular case the parent task was earlier a lowest level task
3778         -- but now it has become a summarized level task so need to update its chargeable flag to N
3779 
3780         UPDATE PA_TASKS SET CHARGEABLE_FLAG='N'
3781         WHERE TASK_ID = l_task_id_above;
3782 
3783         -- End of Changes for bug 3125880
3784 
3785         -- 2) update the wbs level of the indenting task and its children
3786 
3787 --dbms_output.put_line( 'Indent Task PVT : Stage 6' );
3788 
3789 
3790         FOR cur_task_heirarchy_rec IN cur_task_heirarchy LOOP
3791 
3792             PA_TASKS_MAINT_PVT.UPDATE_TASK
3793               (
3794                  p_commit                            => p_commit
3795                 ,p_validate_only                     => p_validate_only
3796                 ,p_validation_level                  => p_validation_level
3797                 ,p_calling_module                    => p_calling_module
3798                 ,p_debug_mode                        => p_debug_mode
3799 
3800                 ,p_project_id                        => p_project_id
3801                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
3802                 ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level + 1
3803 
3804                 --3) update the top task id of the indenting task including its children with the top task id of the task above.
3805                 ,p_top_task_id                       => l_top_task_id_above
3806                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
3807                 ,x_return_status                     => x_return_status
3808                 ,x_msg_count                         => x_msg_count
3809                 ,x_msg_data                          => x_msg_data );
3810 
3811             l_msg_count := FND_MSG_PUB.count_msg;
3812 
3813             IF l_msg_count > 0 THEN
3814                x_msg_count := l_msg_count;
3815                x_return_status := 'E';
3816                RAISE  FND_API.G_EXC_ERROR;
3817             END IF;
3818 
3819         END LOOP;
3820 
3821 --dbms_output.put_line( 'Indent Task PVT : Stage 7' );
3822 
3823       ELSIF l_task_level < l_task_level_above
3824       THEN
3825 
3826 
3827         -- 1) update the parent task id of the indenting task same as that above task in the above heirarchy which used to
3828         -- at the same level as that of indenting task before indenting.
3829 
3830 
3831         OPEN cur_parent_of_above( l_task_level , l_top_task_id_above, l_display_sequence );
3832         FETCH cur_parent_of_above INTO l_new_parent_id, l_new_top_id;
3833         CLOSE cur_parent_of_above;
3834 
3835         PA_TASKS_MAINT_PVT.UPDATE_TASK
3836             (
3837                 p_commit                            => p_commit
3838                ,p_validate_only                     => p_validate_only
3839                ,p_validation_level                  => p_validation_level
3840                ,p_calling_module                    => p_calling_module
3841                ,p_debug_mode                        => p_debug_mode
3842 
3843               ,p_project_id                        => p_project_id
3844               ,p_task_id                           => p_task_id
3845               ,p_parent_task_id                    => l_new_parent_id
3846               ,p_record_version_number             => p_record_version_number
3847               ,x_return_status                     => x_return_status
3848               ,x_msg_count                         => x_msg_count
3849               ,x_msg_data                          => x_msg_data );
3850 
3851 
3852             l_msg_count := FND_MSG_PUB.count_msg;
3853 
3854             IF l_msg_count > 0 THEN
3855                x_msg_count := l_msg_count;
3856                x_return_status := 'E';
3857                RAISE  FND_API.G_EXC_ERROR;
3858             END IF;
3859 
3860         -- 2) update the top task id of the indenting task including its children with the top task id of the task above.
3861         -- 3) update the wbs level of the indenting task and its children
3862 
3863 
3864         FOR cur_task_heirarchy_rec IN cur_task_heirarchy LOOP
3865 
3866             PA_TASKS_MAINT_PVT.UPDATE_TASK
3867               (
3868               p_commit                            => p_commit
3869              ,p_validate_only                     => p_validate_only
3870              ,p_validation_level                  => p_validation_level
3871              ,p_calling_module                    => p_calling_module
3872              ,p_debug_mode                        => p_debug_mode
3873 
3874                 ,p_project_id                        => p_project_id
3875                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
3876                 ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level + 1
3877                 ,p_top_task_id                       => l_top_task_id_above
3878                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
3879                 ,x_return_status                     => x_return_status
3880                 ,x_msg_count                         => x_msg_count
3881                 ,x_msg_data                          => x_msg_data );
3882 
3883             l_msg_count := FND_MSG_PUB.count_msg;
3884 
3885             IF l_msg_count > 0 THEN
3886                x_msg_count := l_msg_count;
3887                x_return_status := 'E';
3888                RAISE  FND_API.G_EXC_ERROR;
3889             END IF;
3890 
3891         END LOOP;
3892       END IF;
3893     END IF;
3894 
3895  EXCEPTION
3896     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  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        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3906 
3907     WHEN FND_API.G_EXC_ERROR THEN
3908        IF p_commit = FND_API.G_TRUE
3909        THEN
3910           ROLLBACK TO Edit_Structure;
3911        END IF;
3912        x_return_status := 'E';
3913 
3914      WHEN OTHERS THEN
3915        IF p_commit = FND_API.G_TRUE
3916        THEN
3917           ROLLBACK TO Edit_Structure;
3918        END IF;
3919        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3920        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
3921                                p_procedure_name => 'Indent_task',
3922                                p_error_text     => SUBSTRB(SQLERRM,1,240));
3923        RAISE;
3924 
3925  END Indent_Task;
3926 
3927 -- API name                      : Outdent_Task
3928 -- Type                          : Private procedure
3929 -- Pre-reqs                      : None
3930 -- Return Value                  : N/A
3931 -- Prameters
3932 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
3933 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
3934 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
3935 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
3936 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
3937 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
3938 -- p_project_id              IN  NUMBER     REQUIRED
3939 -- p_task_id                   IN    NUMBER     REQUIRED
3940 -- p_record_version_number   IN  NUMBER     REQUIRED   DEFAULT=1
3941 -- x_return_status         OUT   VARCHAR2   REQUIRED
3942 -- x_msg_count               OUT     VARCHAR2   REQUIRED
3943 -- x_msg_data                OUT     VARCHAR2   REQUIRED
3944 --
3945 --  History
3946 --
3947 --  25-JUN-01   Majid Ansari             -Created
3948 --
3949 --
3950 
3951  PROCEDURE Outdent_Task(
3952    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
3953   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
3954   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
3955   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
3956   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
3957   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
3958   ,p_project_id              IN  NUMBER
3959   ,p_task_id                   IN    NUMBER
3960   ,p_record_version_number   IN  NUMBER      DEFAULT 1
3961   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3962   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3963   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
3964 
3965    l_return_status                    VARCHAR2(1);
3966    l_msg_data                         VARCHAR2(250);
3967    l_msg_count                        NUMBER;
3968 
3969    l_dummy                       VARCHAR2(1);
3970    l_error_msg_code                   VARCHAR2(250);
3971    l_data                             VARCHAR2(250);
3972    l_msg_index_out                    NUMBER;
3973 
3974    l_task_level                       PA_TASKS.WBS_LEVEL%TYPE :=0;
3975    l_parent_task_id                   NUMBER;
3976    l_top_task_id                      NUMBER;
3977    l_display_sequence                 NUMBER;
3978 
3979    l_task_level_above                 PA_TASKS.WBS_LEVEL%TYPE :=0;
3980    l_task_id_above                    NUMBER;
3981    l_parent_task_id_above             NUMBER;
3982    l_top_task_id_above                NUMBER;
3983    l_display_sequence_above           NUMBER;
3984    l_new_parent_id                    NUMBER;
3985    l_new_top_id                       NUMBER;
3986 
3987     CURSOR c1 IS
3988       select 'x'
3989       from PA_TASKS
3990       where project_id = p_project_id
3991       for update of record_version_number NOWAIT;
3992 
3993     CURSOR c2 IS
3994       select 'x'
3995       from PA_TASKS
3996       where project_id = p_project_id;
3997 
3998 
3999     CURSOR cur_task_heirarchy( p_task_id NUMBER )
4000     IS
4001       SELECT task_id, wbs_level, record_version_number
4002         FROM pa_tasks
4003        START WITH task_id = p_task_id
4004        CONNECT BY PRIOR task_id = parent_task_id;
4005 
4006 
4007     --For updating top task id
4008     --select all tasks under outdenting task's parent task with display sequence greater than
4009     --the display sequence of the outdenting task
4010     CURSOR cur_all_tasks( p_top_task_id NUMBER, p_display_sequence NUMBER )
4011     IS
4012      /*SELECT task_id, record_version_number
4013          FROM pa_tasks
4014         WHERE top_task_id = p_top_task_id
4015           AND display_sequence > p_display_sequence;*/
4016 
4017 --Project Structure changes
4018          SELECT pt.task_id, pt.record_version_number
4019            FROM pa_tasks pt, pa_proj_element_versions ppev
4020           WHERE top_task_id = p_top_task_id
4021             AND pt.task_id = ppev.proj_element_id
4022             AND ppev.display_sequence >= p_display_sequence;  --bug 2968468
4023 
4024     --For updating parent task id
4025     --All tasks ,that were peer task with outdenting task with larger display order than outdenting task,
4026     --now becomes children of outdenting task.
4027     CURSOR cur_new_child_task( p_wbs_level NUMBER, p_display_sequence NUMBER )
4028     IS
4029 /*      SELECT task_id, record_version_number
4030         FROM pa_tasks
4031        WHERE wbs_level = p_wbs_level
4032          AND parent_task_id = l_parent_task_id
4033          AND project_id = p_project_id
4034          AND display_sequence > p_display_sequence;*/
4035 
4036       SELECT pt.task_id, pt.record_version_number
4037         FROM pa_tasks pt, pa_proj_element_versions ppev
4038        WHERE pt.wbs_level = p_wbs_level
4039          AND parent_task_id = l_parent_task_id
4040          AND pt.project_id = p_project_id
4041          AND pt.task_id = ppev.proj_element_id
4042          AND ppev.display_sequence > p_display_sequence;
4043 
4044     CURSOR cur_parent_of_above( p_wbs_level NUMBER, p_top_task_id_above NUMBER )
4045     IS
4046       SELECT parent_task_id, top_task_id
4047         FROM pa_tasks
4048        WHERE wbs_level = p_wbs_level
4049          AND project_id = p_project_id
4050          AND top_task_id = p_top_task_id_above;
4051  BEGIN
4052 
4053     IF p_commit = FND_API.G_TRUE
4054     THEN
4055        SAVEPOINT Edit_Structure;
4056     END IF;
4057     x_return_status := 'S';
4058 
4059     PA_TASKS_MAINT_UTILS.GetWbsLevel(
4060                                  p_project_id           => p_project_id,
4061                                  p_task_id              => p_task_id,
4062 
4063                                  x_task_level           => l_task_level,
4064                                  x_parent_task_id       => l_parent_task_id,
4065                                  x_top_task_id          => l_top_task_id,
4066                                  x_display_sequence     => l_display_sequence,
4067 
4068                                  x_task_id_above       => l_task_id_above,
4069                                  x_task_level_above     => l_task_level_above,
4070                                  x_parent_task_id_above => l_parent_task_id_above,
4071                                  x_top_task_id_above    => l_top_task_id_above,
4072                                  x_display_sequence_above => l_display_sequence_above,
4073 
4074                                  x_return_status     => x_return_status,
4075                                  x_error_msg_code    => x_msg_data );
4076 
4077 
4078     --If if the selected task is topmost task then it cannot be outdented.
4079     IF l_top_task_id = p_task_id OR l_task_level = 1
4080     THEN
4081         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4082                              p_msg_name       => 'PA_TASK_CANNOT_OUTDENT' );
4083         x_msg_data := 'PA_TASK_CANNOT_OUTDENT';
4084         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4085         RAISE  FND_API.G_EXC_ERROR;
4086     END IF;
4087 
4088     --If the task above is at lower wbs level
4089     IF l_task_level_above < l_task_level
4090     THEN
4091        --2) update the parent task id of outdenting task with the parent task id of the task above
4092 
4093             PA_TASKS_MAINT_PVT.UPDATE_TASK
4094               (
4095               p_commit                            => p_commit
4096              ,p_validate_only                     => p_validate_only
4097              ,p_validation_level                  => p_validation_level
4098              ,p_calling_module                    => p_calling_module
4099              ,p_debug_mode                        => p_debug_mode
4100 
4101                 ,p_project_id                        => p_project_id
4102                 ,p_task_id                           => p_task_id
4103                 ,p_parent_task_id                    => l_parent_task_id_above
4104                 ,p_record_version_number             => p_record_version_number
4105                 ,x_return_status                     => x_return_status
4106                 ,x_msg_count                         => x_msg_count
4107                 ,x_msg_data                          => x_msg_data );
4108 
4109             l_msg_count := FND_MSG_PUB.count_msg;
4110 
4111             IF l_msg_count > 0 THEN
4112                x_msg_count := l_msg_count;
4113                x_return_status := 'E';
4114                RAISE  FND_API.G_EXC_ERROR;
4115             END IF;
4116 
4117        --1) update wbs level of outdenting task includinf its children
4118 
4119         FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4120 
4121             PA_TASKS_MAINT_PVT.UPDATE_TASK
4122               (
4123               p_commit                            => p_commit
4124              ,p_validate_only                     => p_validate_only
4125              ,p_validation_level                  => p_validation_level
4126              ,p_calling_module                    => p_calling_module
4127              ,p_debug_mode                        => p_debug_mode
4128 
4129                 ,p_project_id                        => p_project_id
4130                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
4131                 ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level - 1
4132                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4133                 ,x_return_status                     => x_return_status
4134                 ,x_msg_count                         => x_msg_count
4135                 ,x_msg_data                          => x_msg_data );
4136 
4137             l_msg_count := FND_MSG_PUB.count_msg;
4138 
4139             IF l_msg_count > 0 THEN
4140                x_msg_count := l_msg_count;
4141                x_return_status := 'E';
4142                RAISE  FND_API.G_EXC_ERROR;
4143             END IF;
4144 
4145         END LOOP;
4146 
4147 
4148        --3) update top_task id  for all the task including outdenting task that belong to the
4149        --   to parent task of the outdenting task with display order larger than the outdenting
4150        --   task.
4151 
4152             --if the outdenting task is going to be the top most task then
4153             --update the top task ids of outdenting task's new children with outdenting task id.
4154 
4155             IF l_parent_task_id_above IS NULL
4156             THEN
4157                FOR cur_all_tasks_rec IN cur_all_tasks( l_top_task_id , l_display_sequence ) LOOP
4158 
4159                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4160                    (
4161                       p_commit                            => p_commit
4162                      ,p_validate_only                     => p_validate_only
4163                      ,p_validation_level                  => p_validation_level
4164                      ,p_calling_module                    => p_calling_module
4165                      ,p_debug_mode                        => p_debug_mode
4166 
4167                      ,p_project_id                        => p_project_id
4168                      ,p_task_id                           => cur_all_tasks_rec.task_id
4169                      ,p_top_task_id                       => p_task_id
4170                      ,p_record_version_number             => cur_all_tasks_rec.record_version_number
4171                      ,x_return_status                     => x_return_status
4172                      ,x_msg_count                         => x_msg_count
4173                      ,x_msg_data                          => x_msg_data );
4174 
4175                   l_msg_count := FND_MSG_PUB.count_msg;
4176 
4177                   IF l_msg_count > 0 THEN
4178                      x_msg_count := l_msg_count;
4179                      x_return_status := 'E';
4180                      RAISE  FND_API.G_EXC_ERROR;
4181                   END IF;
4182 
4183                END LOOP;
4184             END IF;
4185 
4186        --4) update the parent task id of all tasks are new children underneath the outdenting task
4187             --( these new child tasks used to be at the same level before the outdenting task outedented )
4188             --l_task_level now contains old value of the wbs level.
4189             FOR cur_new_child_task_rec IN cur_new_child_task( l_task_level, l_display_sequence ) LOOP
4190 
4191                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4192                    (
4193                       p_commit                            => p_commit
4194                      ,p_validate_only                     => p_validate_only
4195                      ,p_validation_level                  => p_validation_level
4196                      ,p_calling_module                    => p_calling_module
4197                      ,p_debug_mode                        => p_debug_mode
4198 
4199                      ,p_project_id                        => p_project_id
4200                      ,p_task_id                           => cur_new_child_task_rec.task_id
4201                      ,p_parent_task_id                    => p_task_id
4202                      ,p_record_version_number             => cur_new_child_task_rec.record_version_number
4203                      ,x_return_status                     => x_return_status
4204                      ,x_msg_count                         => x_msg_count
4205                      ,x_msg_data                          => x_msg_data );
4206 
4207                      l_msg_count := FND_MSG_PUB.count_msg;
4208 
4209                      IF l_msg_count > 0 THEN
4210                         x_msg_count := l_msg_count;
4211                         x_return_status := 'E';
4212                         RAISE  FND_API.G_EXC_ERROR;
4213                      END IF;
4214 
4215             END LOOP;
4216 
4217     --task above having wbs level greater than the wbs level of outdenting task.
4218     ELSIF l_task_level_above > l_task_level
4219     THEN
4220 
4221        --2) update the parent task id and top task id of the outdenting task.
4222 
4223          OPEN cur_parent_of_above( l_task_level - 1, l_top_task_id_above );
4224          FETCH cur_parent_of_above INTO l_new_parent_id, l_new_top_id;
4225          CLOSE cur_parent_of_above;
4226 
4227             --The outdenting task may become a child of another task or
4228             --it may become the top most task in its branch.
4229 
4230 
4231             IF l_new_parent_id IS NULL
4232             THEN
4233                l_new_top_id := p_task_id;
4234                l_new_parent_id := null;
4235             END IF;
4236             PA_TASKS_MAINT_PVT.UPDATE_TASK
4237                 (
4238                  p_commit                            => p_commit
4239                 ,p_validate_only                     => p_validate_only
4240                 ,p_validation_level                  => p_validation_level
4241                 ,p_calling_module                    => p_calling_module
4242                 ,p_debug_mode                        => p_debug_mode
4243                 ,p_project_id                        => p_project_id
4244                 ,p_task_id                           => p_task_id
4245                 ,p_parent_task_id                    => l_new_parent_id
4246                 ,p_top_task_id                       => l_new_top_id
4247                 ,p_record_version_number             => p_record_version_number
4248                 ,x_return_status                     => x_return_status
4249                 ,x_msg_count                         => x_msg_count
4250                 ,x_msg_data                          => x_msg_data );
4251 
4252             l_msg_count := FND_MSG_PUB.count_msg;
4253 
4254             IF l_msg_count > 0 THEN
4255                x_msg_count := l_msg_count;
4256                x_return_status := 'E';
4257                RAISE  FND_API.G_EXC_ERROR;
4258             END IF;
4259 
4260 
4261          --1) update wbs level
4262 
4263          FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4264 
4265              PA_TASKS_MAINT_PVT.UPDATE_TASK
4266               (
4267               p_commit                            => p_commit
4268              ,p_validate_only                     => p_validate_only
4269              ,p_validation_level                  => p_validation_level
4270              ,p_calling_module                    => p_calling_module
4271              ,p_debug_mode                        => p_debug_mode
4272 
4273                 ,p_project_id                        => p_project_id
4274                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
4275                 ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level - 1
4276                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4277                 ,x_return_status                     => x_return_status
4278                 ,x_msg_count                         => x_msg_count
4279                 ,x_msg_data                          => x_msg_data );
4280 
4281             l_msg_count := FND_MSG_PUB.count_msg;
4282 
4283             IF l_msg_count > 0 THEN
4284                x_msg_count := l_msg_count;
4285                x_return_status := 'E';
4286                RAISE  FND_API.G_EXC_ERROR;
4287             END IF;
4288 
4289          END LOOP;
4290 
4291 
4292        --4) update the parent task id of all tasks are new children underneath the outdenting task
4293             --( these new child tasks used to be at the same level before the outdenting task outedented )
4294             --l_task_level now contains old value of the wbs level.
4295             --Also update the top task id for the new children
4296             FOR cur_new_child_task_rec IN cur_new_child_task( l_task_level, l_display_sequence ) LOOP
4297 
4298                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4299                    (
4300                       p_commit                            => p_commit
4301                      ,p_validate_only                     => p_validate_only
4302                      ,p_validation_level                  => p_validation_level
4303                      ,p_calling_module                    => p_calling_module
4304                      ,p_debug_mode                        => p_debug_mode
4305 
4306                      ,p_project_id                        => p_project_id
4307                      ,p_task_id                           => cur_new_child_task_rec.task_id
4308                      ,p_parent_task_id                    => p_task_id
4309                      ,p_top_task_id                       => l_new_top_id
4310                      ,p_record_version_number             => cur_new_child_task_rec.record_version_number
4311                      ,x_return_status                     => x_return_status
4312                      ,x_msg_count                         => x_msg_count
4313                      ,x_msg_data                          => x_msg_data );
4314 
4315                l_msg_count := FND_MSG_PUB.count_msg;
4316 
4317                IF l_msg_count > 0 THEN
4318                   x_msg_count := l_msg_count;
4319                   x_return_status := 'E';
4320                   RAISE  FND_API.G_EXC_ERROR;
4321                END IF;
4322 
4323             END LOOP;
4324 
4325     ELSIF l_task_level_above = l_task_level
4326     THEN
4327 
4328         -- The outdenting task when outdented IS NOT a topmost task
4329         IF l_task_level > 2
4330         THEN
4331 
4332             --1) update the parent task id of the outdenting task.
4333 
4334             --Here the task above and the outdenting task used to be at the same level
4335             --therefore the parent of, parent of the task above, is the parent of the
4336             --outdenting task. So pass wbs level as after outdenting.
4337 
4338             OPEN cur_parent_of_above( l_task_level - 1, l_top_task_id_above );
4339             FETCH cur_parent_of_above INTO l_new_parent_id, l_new_top_id;
4340             CLOSE cur_parent_of_above;
4341 
4342             --The outdenting task may become a child of another task or
4343             --it may become the top most task in its branch.
4344 
4345             PA_TASKS_MAINT_PVT.UPDATE_TASK
4346                 (
4347                  p_commit                            => p_commit
4348                 ,p_validate_only                     => p_validate_only
4349                 ,p_validation_level                  => p_validation_level
4350                 ,p_calling_module                    => p_calling_module
4351                 ,p_debug_mode                        => p_debug_mode
4352                 ,p_project_id                        => p_project_id
4353                 ,p_task_id                           => p_task_id
4354                 ,p_parent_task_id                    => l_new_parent_id
4355                 ,p_record_version_number             => p_record_version_number
4356                 ,x_return_status                     => x_return_status
4357                 ,x_msg_count                         => x_msg_count
4358                 ,x_msg_data                          => x_msg_data );
4359 
4360             l_msg_count := FND_MSG_PUB.count_msg;
4361 
4362             IF l_msg_count > 0 THEN
4363                x_msg_count := l_msg_count;
4364                x_return_status := 'E';
4365                RAISE  FND_API.G_EXC_ERROR;
4366             END IF;
4367 
4368             --1) update wbs level of outdenting task and its all child tasks
4369             FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4370 
4371                 PA_TASKS_MAINT_PVT.UPDATE_TASK
4372                   (
4373                   p_commit                            => p_commit
4374                  ,p_validate_only                     => p_validate_only
4375                  ,p_validation_level                  => p_validation_level
4376                  ,p_calling_module                    => p_calling_module
4377                  ,p_debug_mode                        => p_debug_mode
4378 
4379                  ,p_project_id                        => p_project_id
4380                  ,p_task_id                           => cur_task_heirarchy_rec.task_id
4381                  ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level - 1
4382                  ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4383                  ,x_return_status                     => x_return_status
4384                  ,x_msg_count                         => x_msg_count
4385                  ,x_msg_data                          => x_msg_data );
4386 
4387                 l_msg_count := FND_MSG_PUB.count_msg;
4388 
4389                 IF l_msg_count > 0 THEN
4390                    x_msg_count := l_msg_count;
4391                    x_return_status := 'E';
4392                    RAISE  FND_API.G_EXC_ERROR;
4393                 END IF;
4394             END LOOP;
4395 
4396             --2) updating parent of the new children
4397 
4398             -- update the parent task id of all tasks taht are new children underneath the outdenting task
4399             --( these new child tasks used to be at the same level before the outdenting task outedented )
4400             --l_task_level now contains old value of the wbs level.
4401             FOR cur_new_child_task_rec IN cur_new_child_task( l_task_level, l_display_sequence ) LOOP
4402 
4403                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4404                    (
4405                       p_commit                            => p_commit
4406                      ,p_validate_only                     => p_validate_only
4407                      ,p_validation_level                  => p_validation_level
4408                      ,p_calling_module                    => p_calling_module
4409                      ,p_debug_mode                        => p_debug_mode
4410 
4411                      ,p_project_id                        => p_project_id
4412                      ,p_task_id                           => cur_new_child_task_rec.task_id
4413                      ,p_parent_task_id                    => p_task_id
4414                      ,p_record_version_number             => cur_new_child_task_rec.record_version_number
4415                      ,x_return_status                     => x_return_status
4416                      ,x_msg_count                         => x_msg_count
4417                      ,x_msg_data                          => x_msg_data );
4418 
4419                  l_msg_count := FND_MSG_PUB.count_msg;
4420 
4421                  IF l_msg_count > 0 THEN
4422                     x_msg_count := l_msg_count;
4423                     x_return_status := 'E';
4424                     RAISE  FND_API.G_EXC_ERROR;
4425                  END IF;
4426 
4427             END LOOP;
4428 
4429         -- The outdenting task becomes the top most task
4430         ELSIF l_task_level = 2
4431         THEN
4432             --1) update parent of outdenting task as null
4433             PA_TASKS_MAINT_PVT.UPDATE_TASK
4434                 (
4435                  p_commit                            => p_commit
4436                 ,p_validate_only                     => p_validate_only
4437                 ,p_validation_level                  => p_validation_level
4438                 ,p_calling_module                    => p_calling_module
4439                 ,p_debug_mode                        => p_debug_mode
4440                 ,p_project_id                        => p_project_id
4441                 ,p_task_id                           => p_task_id
4442                 ,p_parent_task_id                    => null
4443 
4444                 -- updating the outdenting top task with p_task id
4445                 ,p_top_task_id                       => p_task_id
4446                 ,p_record_version_number             => p_record_version_number
4447                 ,x_return_status                     => x_return_status
4448                 ,x_msg_count                         => x_msg_count
4449                 ,x_msg_data                          => x_msg_data );
4450 
4451               l_msg_count := FND_MSG_PUB.count_msg;
4452 
4453               IF l_msg_count > 0 THEN
4454                  x_msg_count := l_msg_count;
4455                  x_return_status := 'E';
4456                  RAISE  FND_API.G_EXC_ERROR;
4457               END IF;
4458 
4459             --2) updating parent of the new children
4460 
4461             -- update the parent task id of all tasks taht are new children underneath the outdenting task
4462             --( these new child tasks used to be at the same level before the outdenting task outedented )
4463             --l_task_level now contains old value of the wbs level.
4464             FOR cur_new_child_task_rec IN cur_new_child_task( l_task_level, l_display_sequence ) LOOP
4465 
4466                   PA_TASKS_MAINT_PVT.UPDATE_TASK
4467                    (
4468                       p_commit                            => p_commit
4469                      ,p_validate_only                     => p_validate_only
4470                      ,p_validation_level                  => p_validation_level
4471                      ,p_calling_module                    => p_calling_module
4472                      ,p_debug_mode                        => p_debug_mode
4473 
4474                      ,p_project_id                        => p_project_id
4475                      ,p_task_id                           => cur_new_child_task_rec.task_id
4476                      ,p_parent_task_id                    => p_task_id
4477 
4478                       -- updating the new child top tas with p_task id
4479                      ,p_top_task_id                       => p_task_id
4480                      ,p_record_version_number             => cur_new_child_task_rec.record_version_number
4481                      ,x_return_status                     => x_return_status
4482                      ,x_msg_count                         => x_msg_count
4483                      ,x_msg_data                          => x_msg_data );
4484 
4485                     l_msg_count := FND_MSG_PUB.count_msg;
4486 
4487                     IF l_msg_count > 0 THEN
4488                        x_msg_count := l_msg_count;
4489                        x_return_status := 'E';
4490                        RAISE  FND_API.G_EXC_ERROR;
4491                     END IF;
4492 
4493                     --updating top_task_id of child tasks of outdenting task's new child tasks
4494                     FOR cur_task_heirarchy_rec IN cur_task_heirarchy( cur_new_child_task_rec.task_id ) LOOP
4495                          PA_TASKS_MAINT_PVT.UPDATE_TASK
4496                               (
4497                                   p_commit                            => p_commit
4498                                  ,p_validate_only                     => p_validate_only
4499                                  ,p_validation_level                  => p_validation_level
4500                                  ,p_calling_module                    => p_calling_module
4501                                  ,p_debug_mode                        => p_debug_mode
4502 
4503                                  ,p_project_id                        => p_project_id
4504                                  ,p_task_id                           => cur_task_heirarchy_rec.task_id
4505                                  ,p_top_task_id                       => p_task_id
4506                                  ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4507                                  ,x_return_status                     => x_return_status
4508                                  ,x_msg_count                         => x_msg_count
4509                                  ,x_msg_data                          => x_msg_data );
4510 
4511                           l_msg_count := FND_MSG_PUB.count_msg;
4512 
4513                           IF l_msg_count > 0 THEN
4514                              x_msg_count := l_msg_count;
4515                              x_return_status := 'E';
4516                              RAISE  FND_API.G_EXC_ERROR;
4517                           END IF;
4518                     END LOOP;
4519             END LOOP;
4520 
4521             --1) update wbs level of outdenting task and its all child tasks
4522             FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4523 
4524                 PA_TASKS_MAINT_PVT.UPDATE_TASK
4525                   (
4526                   p_commit                            => p_commit
4527                  ,p_validate_only                     => p_validate_only
4528                  ,p_validation_level                  => p_validation_level
4529                  ,p_calling_module                    => p_calling_module
4530                  ,p_debug_mode                        => p_debug_mode
4531 
4532                  ,p_project_id                        => p_project_id
4533                  ,p_task_id                           => cur_task_heirarchy_rec.task_id
4534                  ,p_wbs_level                         => cur_task_heirarchy_rec.wbs_level - 1
4535                  ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4536                  ,x_return_status                     => x_return_status
4537                  ,x_msg_count                         => x_msg_count
4538                  ,x_msg_data                          => x_msg_data );
4539 
4540                  l_msg_count := FND_MSG_PUB.count_msg;
4541                  IF l_msg_count > 0 THEN
4542                     x_msg_count := l_msg_count;
4543                     x_return_status := 'E';
4544                     RAISE  FND_API.G_EXC_ERROR;
4545                  END IF;
4546             END LOOP;
4547 
4548 
4549             --3) update the top task id of outdenting task, child tasks of outdenting task , new child tasks
4550             --   of outdenting task and child tasks of new child tasks with outdenting task id.
4551 
4552             --updating top_task_id of child tasks of outdenting task
4553             FOR cur_task_heirarchy_rec IN cur_task_heirarchy( p_task_id ) LOOP
4554                 PA_TASKS_MAINT_PVT.UPDATE_TASK
4555                  (
4556                  p_commit                            => p_commit
4557                 ,p_validate_only                     => p_validate_only
4558                 ,p_validation_level                  => p_validation_level
4559                 ,p_calling_module                    => p_calling_module
4560                 ,p_debug_mode                        => p_debug_mode
4561 
4562                 ,p_project_id                        => p_project_id
4563                 ,p_task_id                           => cur_task_heirarchy_rec.task_id
4564                 ,p_top_task_id                       => p_task_id
4565                 ,p_record_version_number             => cur_task_heirarchy_rec.record_version_number
4566                 ,x_return_status                     => x_return_status
4567                 ,x_msg_count                         => x_msg_count
4568                 ,x_msg_data                          => x_msg_data );
4569 
4570                 l_msg_count := FND_MSG_PUB.count_msg;
4571 
4572                 IF l_msg_count > 0 THEN
4573                    x_msg_count := l_msg_count;
4574                    x_return_status := 'E';
4575                    RAISE  FND_API.G_EXC_ERROR;
4576                 END IF;
4577             END LOOP;
4578         END IF;
4579     END IF;
4580 
4581   EXCEPTION
4582     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  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        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4592 
4593     WHEN FND_API.G_EXC_ERROR THEN
4594        IF p_commit = FND_API.G_TRUE
4595        THEN
4596           ROLLBACK TO Edit_Structure;
4597        END IF;
4598        x_return_status := 'E';
4599 
4600      WHEN OTHERS THEN
4601        IF p_commit = FND_API.G_TRUE
4602        THEN
4603           ROLLBACK TO Edit_Structure;
4604        END IF;
4605        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4606        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
4607                                p_procedure_name => 'Outdent_task',
4608                                p_error_text     => SUBSTRB(SQLERRM,1,240));
4609        RAISE;
4610  END Outdent_Task;
4611 
4612 -- API name                      : Copy_Entire_Project
4613 -- Type                          : Private procedure
4614 -- Pre-reqs                      : None
4615 -- Return Value                  : N/A
4616 -- Prameters
4617 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
4618 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
4619 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
4620 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
4621 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
4622 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
4623 -- p_reference_project_id      IN    NUMBER
4624 -- p_reference_task_id         IN    NUMBER
4625 -- p_project_id                IN    NUMBER
4626 -- p_peer_or_sub                    IN    VARCHAR2
4627 -- p_task_prefix               IN    VARCHAR2   --
4628 -- x_return_status         OUT   VARCHAR2   REQUIRED
4629 -- x_msg_count               OUT     VARCHAR2   REQUIRED
4630 -- x_msg_data                OUT     VARCHAR2   REQUIRED
4631 --
4632 --  History
4633 --
4634 --  25-JUN-01   Majid Ansari             -Created
4635 --
4636 --
4637 
4638  PROCEDURE Copy_Entire_Project(
4639    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
4640   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
4641   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
4642   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
4643   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
4644   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
4645   ,p_reference_project_id      IN    NUMBER
4646   ,p_reference_task_id         IN    NUMBER
4647   ,p_project_id                IN    NUMBER
4648   ,p_peer_or_sub                    IN    VARCHAR2
4649   ,p_task_prefix               IN    VARCHAR2
4650   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4651   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4652   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
4653 
4654    CURSOR cur_entire_proj
4655    IS
4656 /*     SELECT *
4657        FROM pa_tasks pt
4658       WHERE project_id = p_project_id
4659         ORDER BY display_sequence;*/
4660 
4661      SELECT pt.task_number, pt.task_name, pt.long_task_name, pt.description, pt.carrying_out_organization_id,
4662             pt.work_type_id, pt.service_type_code,
4663             pt.chargeable_flag, pt.billable_flag, pt.receive_project_invoice_flag,
4664             pt.scheduled_start_date, pt.scheduled_finish_date, pt.start_date,
4665             pt.wbs_level, pt.task_id, ppev.display_sequence
4666        FROM pa_tasks pt, pa_proj_element_versions ppev
4667       WHERE pt.project_id = p_project_id
4668         AND pt.task_id = ppev.proj_element_id
4669         ORDER BY ppev.display_sequence;
4670 
4671    CURSOR cur_ref_info
4672    IS
4673      SELECT *
4674        FROM pa_tasks
4675       WHERE project_id = p_reference_project_id
4676         AND task_id    = p_reference_task_id;
4677 
4678    CURSOR cur_data_length(c_pa_schema_name  VARCHAR2)
4679    IS
4680      SELECT column_name, data_length
4681        FROM user_synonyms syn, all_tab_columns col
4682       WHERE col.table_name = 'PA_TASKS'
4683         and col.owner      =  syn.table_owner
4684         and col.table_name = syn.table_name
4685         AND col.owner = c_pa_schema_name
4686         AND column_name IN ( 'TASK_NAME', 'LONG_TASK_NAME', 'TASK_NUMBER' );
4687 
4688    --schema swap changes
4689    l_table_owner           VARCHAR2(30);
4690    l_fnd_return_status     BOOLEAN;
4691    l_fnd_status            VARCHAR2(30);
4692    l_fnd_industry          VARCHAR2(30);
4693    --schema swap changes
4694 
4695    l_rec_cur_ref_info cur_ref_info%ROWTYPE;
4696 
4697    l_parent_task_id     NUMBER;
4698    l_top_task_id        NUMBER;
4699    l_wbs_level          NUMBER;
4700    l_option             VARCHAR2(4);
4701    l_reference_task_id  NUMBER;
4702    l_max_display        NUMBER;
4703    l_prev_wbs_level     NUMBER;
4704    l_task_id            NUMBER;
4705    l_display_seq        NUMBER;
4706    l_max_seq            NUMBER;
4707    l_first_seq          NUMBER;
4708 
4709    l_estimated_start_date    DATE;
4710    l_estimated_end_date      DATE;
4711 
4712    TYPE CurrTasks IS RECORD( task_id NUMBER(15), wbs_level NUMBER(15),
4713                              display_sequence NUMBER(15), new_task_id NUMBER(15) );
4714    TYPE TaskTab IS TABLE OF CurrTasks INDEX BY BINARY_INTEGER;
4715 
4716    l_TaskTab            TaskTab;
4717    i                    NUMBER := 0;
4718    k                    NUMBER := 0;
4719    l_msg_count                        NUMBER;
4720 
4721    l_task_number_len    NUMBER;
4722    l_task_name_len      NUMBER;
4723    l_long_task_name_len NUMBER;
4724    l_column_name        VARCHAR2(30);
4725    l_data_length        NUMBER;
4726 
4727  BEGIN
4728 
4729       IF p_commit = FND_API.G_TRUE
4730       THEN
4731          SAVEPOINT Copy;
4732       END IF;
4733       x_return_status := 'S';
4734 
4735       --get the max data length allowed for task_number and task_name from data dictionary
4736       --This is to make sure that the task_name and task_number does not exceed after
4737       --appended with prefix.
4738 
4739 --schema swap changes
4740        l_fnd_return_status := FND_INSTALLATION.GET_APP_INFO(
4741                                    application_short_name => 'PA',
4742                                    status                 => l_fnd_status,
4743                                    industry               => l_fnd_industry,
4744                                    oracle_schema          => l_table_owner);
4745        IF NOT l_fnd_return_status
4746        THEN
4747            fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
4748                                    p_procedure_name => 'Copy_Entire_Project',
4749                                    p_error_text     => SUBSTRB('FND_INSTALLATION.GET_APP_INFO api call failed:'||SQLERRM,1,240));
4750            RAISE FND_API.G_EXC_ERROR;
4751        END IF;
4752 --schema swap changes
4753 
4754       OPEN cur_data_length(l_table_owner);
4755       LOOP
4756          FETCH cur_data_length INTO l_column_name, l_data_length;
4757          IF cur_data_length%FOUND
4758          THEN
4759             IF l_column_name = 'TASK_NUMBER'
4760             THEN
4761                l_task_number_len := l_data_length;
4762             ELSIF l_column_name = 'LONG_TASK_NAME'
4763             THEN
4764                l_long_task_name_len := l_data_length;
4765             ELSE
4766                l_task_name_len   := l_data_length;
4767             END IF;
4768          ELSE
4769             Exit;
4770          END IF;
4771       END LOOP;
4772 
4773       OPEN cur_ref_info;
4774       FETCH  cur_ref_info INTO l_rec_cur_ref_info;
4775       CLOSE cur_ref_info;
4776 
4777       l_option := p_peer_or_sub;
4778       l_reference_task_id := p_reference_task_id;
4779 
4780       FOR  cur_entire_proj_rec IN cur_entire_proj LOOP
4781 
4782          IF cur_entire_proj%ROWCOUNT > 1
4783          THEN
4784              --Find now the relationship between the next task in the cursor and the previously created task.
4785              IF cur_entire_proj_rec.wbs_level = l_prev_wbs_level
4786              THEN
4787                 l_reference_task_id := l_task_id;
4788                 l_option            := 'PEER';
4789              ELSIF cur_entire_proj_rec.wbs_level > l_prev_wbs_level
4790              THEN
4791                 l_reference_task_id := l_task_id;
4792                 l_option            := 'SUB';
4793              ELSE
4794                 --Find the task above the heirarchy at the same level as that of the current task
4795                 --from the matrix.
4796                 --Assign a min value to max display sequence.
4797                 l_max_display := 0;
4798                 k := 1;
4799                 LOOP
4800                     --Getting the exact display sequence number. It is possible that there could be
4801                     --more than one task at the same level above.
4802                     IF l_TaskTab( k ).display_sequence > l_max_display AND
4803                        l_TaskTab( k ).display_sequence < cur_entire_proj_rec.display_sequence AND
4804                        l_TaskTab( k ).wbs_level = cur_entire_proj_rec.wbs_level
4805                     THEN
4806                        l_max_display := l_TaskTab( k ).display_sequence;
4807                        l_reference_task_id := l_TaskTab( k ).new_task_id;
4808                     END IF;
4809                     IF k = i   -- If there does not exists any record in the matrix.
4810                     THEN
4811                        Exit;
4812                     ELSE
4813                        k := k + 1;
4814                     END IF;
4815                 END LOOP;
4816                 l_option            := 'PEER';
4817              END IF;
4818          END IF;
4819 
4820          IF l_option = 'PEER' AND
4821             l_rec_cur_ref_info.wbs_level > 1      ---Not a Top level
4822          THEN
4823 --Project structure changes. estimated_start_date and estimated_end_date cols do not exist.
4824 --            l_estimated_start_date := cur_entire_proj_rec.estimated_start_date;
4825 --            l_estimated_end_date := cur_entire_proj_rec.estimated_end_date;
4826             l_estimated_start_date := cur_entire_proj_rec.scheduled_start_date;
4827             l_estimated_end_date := cur_entire_proj_rec.scheduled_finish_date;
4828          ELSE --TOP LEVEL PEER task or SUB task.
4829             l_estimated_start_date := cur_entire_proj_rec.scheduled_start_date;
4830             l_estimated_end_date := cur_entire_proj_rec.scheduled_finish_date;
4831          END IF;
4832 
4833          --Write the basic info in the PL/SQL table.
4834          i := i + 1;
4835          l_TaskTab( i ).task_id := cur_entire_proj_rec.task_id;
4836          l_TaskTab( i ).new_task_id := 0;
4837          l_TaskTab( i ).wbs_level := cur_entire_proj_rec.wbs_level;
4838          l_TaskTab( i ).display_sequence := cur_entire_proj_rec.display_sequence;
4839 
4840          IF   length( p_task_prefix||cur_entire_proj_rec.task_number ) > l_task_number_len OR
4841               length( p_task_prefix||cur_entire_proj_rec.task_name ) > l_task_name_len
4842        OR     length( p_task_prefix||cur_entire_proj_rec.long_task_name ) > l_long_task_name_len
4843          THEN
4844               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
4845                                    p_msg_name       => 'PA_TASK_PREFIX_TOO_LARGE' );
4846               x_msg_data := 'PA_TASK_PREFIX_TOO_LARGE';
4847               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4848               RAISE  FND_API.G_EXC_ERROR;
4849          END IF;
4850 
4851          PA_TASKS_MAINT_PVT.CREATE_TASK
4852                       (
4853                         p_commit                            => p_commit
4854                        ,p_validate_only                     => p_validate_only
4855                        ,p_validation_level                  => p_validation_level
4856                        ,p_calling_module                    => p_calling_module
4857                        ,p_debug_mode                        => p_debug_mode
4858 
4859                        ,p_project_id                        => p_reference_project_id
4860                        ,p_reference_task_id                 => l_reference_task_id
4861                        ,p_peer_or_sub                       => l_option
4862                        ,p_task_number                       => p_task_prefix||cur_entire_proj_rec.task_number
4863                        ,p_task_name                         => p_task_prefix||cur_entire_proj_rec.task_name
4864                        ,p_long_task_name                    => p_task_prefix||cur_entire_proj_rec.long_task_name
4865                        ,p_task_description                  => cur_entire_proj_rec.description
4866                        ,p_task_manager_person_id            => null
4867                        ,p_carrying_out_organization_id      => cur_entire_proj_rec.carrying_out_organization_id
4868                        --,p_task_type_code                    => cur_entire_proj_rec.task_type_code
4869                        --,p_priority_code                     => cur_entire_proj_rec.priority_code
4870                        ,p_work_type_id                      => cur_entire_proj_rec.work_type_id
4871                        ,p_service_type_code                 => cur_entire_proj_rec.service_type_code
4872                        --,p_milestone_flag                    => cur_entire_proj_rec.milestone_flag
4873                        --,p_critical_flag                     => null
4874                        ,p_chargeable_flag                   => cur_entire_proj_rec.chargeable_flag
4875                        ,p_billable_flag                     => cur_entire_proj_rec.billable_flag
4876                        ,p_receive_project_invoice_flag      => cur_entire_proj_rec.receive_project_invoice_flag
4877                        ,p_scheduled_start_date              => cur_entire_proj_rec.scheduled_start_date
4878                        ,p_scheduled_finish_date             => cur_entire_proj_rec.scheduled_finish_date
4879                        ,p_estimated_start_date              => l_estimated_start_date
4880                        ,p_estimated_end_date                => l_estimated_end_date
4881                        ,p_actual_start_date                 => null
4882                        ,p_actual_finish_date                => null
4883                        ,p_task_start_date                   => cur_entire_proj_rec.start_date
4884                        --,p_task_completion_date              => cur_entire_proj_rec.end_date
4885                        ,p_baseline_start_date               => null
4886                        ,p_baseline_end_date                 => null
4887 
4888                        ,p_estimate_to_complete_work         => null
4889                        ,p_baseline_work                     => null
4890                        --,p_scheduled_work                    => cur_entire_proj_rec.scheduled_work
4891                        ,p_actual_work_to_date               => null
4892                        ,p_work_unit                         => 'Hours'
4893 
4894                        ,p_task_id                     => l_task_id
4895                        ,x_display_seq                       => l_display_seq
4896 
4897                        ,x_return_status                     => x_return_status
4898                        ,x_msg_count                         => x_msg_count
4899                        ,x_msg_data                          => x_msg_data  );
4900 
4901              l_prev_wbs_level := cur_entire_proj_rec.wbs_level;
4902              l_TaskTab( i ).new_task_id := l_task_id;
4903 
4904              IF cur_entire_proj%ROWCOUNT = 1
4905              THEN
4906                 --capture the first sequence created.
4907                 l_first_seq := l_display_seq;
4908              END IF;
4909 
4910             l_msg_count := FND_MSG_PUB.count_msg;
4911 
4912             IF l_msg_count > 0 THEN
4913                x_msg_count := l_msg_count;
4914                x_return_status := 'E';
4915                RAISE  FND_API.G_EXC_ERROR;
4916             END IF;
4917 
4918 
4919       END LOOP;
4920 
4921 /*      --Call Update statement to update display order
4922 
4923       ************************************************************
4924        THIS FUNCTIONALITY IS MOVED TO PA_TASK_PUB1.COPY_TASK API.
4925       ************************************************************
4926       BEGIN
4927           -- Need to get max number
4928           SELECT max(display_sequence)
4929             INTO l_max_seq
4930             FROM PA_TASKS
4931            WHERE project_id = p_reference_project_id;
4932 
4933           UPDATE PA_TASKS
4934              SET display_sequence =
4935                  PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, l_max_seq, i, 'INSERT', null),
4936                  record_version_number = record_version_number + 1
4937            WHERE project_id = p_reference_project_id
4938              AND ( display_sequence > -( l_first_seq + 1 ) or display_sequence < 0 );
4939       EXCEPTION
4940          WHEN OTHERS THEN
4941               PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
4942               RAISE FND_API.G_EXC_ERROR;
4943       END; */
4944 
4945  EXCEPTION
4946     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
4947        IF p_commit = FND_API.G_TRUE
4948        THEN
4949           ROLLBACK TO Copy;
4950        END IF;
4951        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4952        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
4953                                p_procedure_name => 'Copy_Entire_Task',
4954                                p_error_text     => SUBSTRB(SQLERRM,1,240));
4955        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4956 
4957     WHEN FND_API.G_EXC_ERROR THEN
4958        IF p_commit = FND_API.G_TRUE
4959        THEN
4960           ROLLBACK TO Copy;
4961        END IF;
4962        x_return_status := 'E';
4963 
4964      WHEN OTHERS THEN
4965        IF p_commit = FND_API.G_TRUE
4966        THEN
4967           ROLLBACK TO Copy;
4968        END IF;
4969        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4970        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
4971                                p_procedure_name => 'Copy_Entire_Task',
4972                                p_error_text     => SUBSTRB(SQLERRM,1,240));
4973        RAISE;
4974  END Copy_Entire_Project;
4975 
4976 -- API name                      : Copy_Selected_Task
4977 -- Type                          : Private procedure
4978 -- Pre-reqs                      : None
4979 -- Return Value                  : N/A
4980 -- Prameters
4981 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
4982 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
4983 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
4984 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
4985 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
4986 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
4987 -- p_reference_project_id      IN    NUMBER
4988 -- p_reference_task_id         IN    NUMBER
4989 -- p_task_id                   IN    NUMBER
4990 -- p_peer_or_sub                    IN    VARCHAR2
4991 -- p_task_prefix               IN    VARCHAR2   --
4992 -- x_return_status         OUT   VARCHAR2   REQUIRED
4993 -- x_msg_count               OUT     VARCHAR2   REQUIRED
4994 -- x_msg_data                OUT     VARCHAR2   REQUIRED
4995 --
4996 --  History
4997 --
4998 --  25-JUN-01   Majid Ansari             -Created
4999 --
5000 --
5001 
5002  PROCEDURE Copy_Selected_Task(
5003    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
5004   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
5005   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
5006   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
5007   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
5008   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
5009   ,p_reference_project_id      IN    NUMBER
5010   ,p_reference_task_id         IN    NUMBER
5011   ,p_task_id                   IN    NUMBER
5012   ,p_peer_or_sub                    IN    VARCHAR2
5013   ,p_task_prefix               IN    VARCHAR2
5014   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5015   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5016   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
5017 
5018   CURSOR cur_select_task
5019    IS
5020      SELECT *
5021        FROM pa_tasks
5022       WHERE task_id = p_task_id;
5023 
5024    CURSOR cur_ref_info
5025    IS
5026      SELECT *
5027        FROM pa_tasks
5028       WHERE project_id = p_reference_project_id
5029         AND task_id    = p_reference_task_id;
5030 
5031    CURSOR cur_data_length(c_pa_schema_name  VARCHAR2)
5032    IS
5033      SELECT column_name, data_length
5034        FROM user_synonyms syn, all_tab_columns col
5035       WHERE col.table_name = 'PA_TASKS'
5036         and col.owner      =  syn.table_owner
5037         and col.table_name = syn.table_name
5038         AND col.owner = c_pa_schema_name
5039         AND col.column_name IN ( 'TASK_NAME', 'LONG_TASK_NAME', 'TASK_NUMBER' );
5040 
5041    --schema swap changes
5042    l_table_owner           VARCHAR2(30);
5043    l_fnd_return_status     BOOLEAN;
5044    l_fnd_status            VARCHAR2(30);
5045    l_fnd_industry          VARCHAR2(30);
5046    --schema swap changes
5047 
5048    l_rec_cur_ref_info cur_ref_info%ROWTYPE;
5049 
5050    l_parent_task_id     NUMBER;
5051    l_top_task_id        NUMBER;
5052    l_wbs_level          NUMBER;
5053    l_task_id            NUMBER;
5054    l_display_seq        NUMBER;
5055    l_max_seq            NUMBER;
5056 
5057    l_estimated_start_date    DATE;
5058    l_estimated_end_date      DATE;
5059    l_msg_count                        NUMBER;
5060 
5061    l_task_number_len    NUMBER;
5062    l_task_name_len      NUMBER;
5063    l_long_task_name_len NUMBER;
5064    l_column_name        VARCHAR2(30);
5065    l_data_length        NUMBER;
5066 
5067  BEGIN
5068       IF p_commit = FND_API.G_TRUE
5069       THEN
5070          SAVEPOINT Copy;
5071       END IF;
5072       x_return_status := 'S';
5073 
5074       --get the max data length allowed for task_number and task_name from data dictionary
5075       --This is to make sure that the task_name and task_number does not exceed after
5076       --appended with prefix.
5077 
5078 --schema swap changes
5079        l_fnd_return_status := FND_INSTALLATION.GET_APP_INFO(
5080                                    application_short_name => 'PA',
5081                                    status                 => l_fnd_status,
5082                                    industry               => l_fnd_industry,
5083                                    oracle_schema          => l_table_owner);
5084        IF NOT l_fnd_return_status
5085        THEN
5086            fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5087                                    p_procedure_name => 'Copy_Entire_Project',
5088                                    p_error_text     => SUBSTRB('FND_INSTALLATION.GET_APP_INFO api call failed:'||SQLERRM,1,240));
5089            RAISE FND_API.G_EXC_ERROR;
5090        END IF;
5091 --schema swap changes
5092 
5093       OPEN cur_data_length(l_table_owner);
5094       LOOP
5095          FETCH cur_data_length INTO l_column_name, l_data_length;
5096          IF cur_data_length%FOUND
5097          THEN
5098             IF l_column_name = 'TASK_NUMBER'
5099             THEN
5100                l_task_number_len := l_data_length;
5101             ELSIF l_column_name = 'LONG_TASK_NAME'
5102             THEN
5103                l_long_task_name_len := l_data_length;
5104             ELSE
5105                l_task_name_len   := l_data_length;
5106             END IF;
5107          ELSE
5108             Exit;
5109          END IF;
5110       END LOOP;
5111 
5112       OPEN cur_ref_info;
5113       FETCH  cur_ref_info INTO l_rec_cur_ref_info;
5114       CLOSE cur_ref_info;
5115 
5116       -- Only a single task is going to be inserted in this for-loop cursor
5117       FOR  cur_select_task_rec IN cur_select_task LOOP
5118 
5119          IF p_peer_or_sub = 'PEER' AND
5120             l_rec_cur_ref_info.wbs_level > 1      ---Not a Top level
5121          THEN
5122             --l_estimated_start_date := cur_select_task_rec.estimated_start_date;
5123             --l_estimated_end_date := cur_select_task_rec.estimated_end_date;
5124             l_estimated_start_date := cur_select_task_rec.scheduled_start_date;
5125             l_estimated_end_date := cur_select_task_rec.scheduled_finish_date;
5126          ELSE --TOP LEVEL PEER task or SUB task.
5127             l_estimated_start_date := cur_select_task_rec.scheduled_start_date;
5128             l_estimated_end_date := cur_select_task_rec.scheduled_finish_date;
5129          END IF;
5130 
5131          IF   length( p_task_prefix||cur_select_task_rec.task_number ) > l_task_number_len OR
5132               length( p_task_prefix||cur_select_task_rec.task_name ) > l_task_name_len OR
5133               length( p_task_prefix||cur_select_task_rec.long_task_name ) > l_long_task_name_len
5134          THEN
5135               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5136                                    p_msg_name       => 'PA_TASK_PREFIX_TOO_LARGE' );
5137               x_msg_data := 'PA_TASK_PREFIX_TOO_LARGE';
5138               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5139               RAISE  FND_API.G_EXC_ERROR;
5140          END IF;
5141 
5142          PA_TASKS_MAINT_PVT.CREATE_TASK
5143                       (
5144                         p_commit                            => p_commit
5145                        ,p_validate_only                     => p_validate_only
5146                        ,p_validation_level                  => p_validation_level
5147                        ,p_calling_module                    => p_calling_module
5148                        ,p_debug_mode                        => p_debug_mode
5149 
5150                        ,p_project_id                        => p_reference_project_id
5151                        ,p_reference_task_id                 => p_reference_task_id
5152                        ,p_peer_or_sub                       => p_peer_or_sub
5153                        ,p_task_number                       => p_task_prefix||cur_select_task_rec.task_number
5154                        ,p_task_name                         => p_task_prefix||cur_select_task_rec.task_name
5155                        ,p_long_task_name                    => p_task_prefix||cur_select_task_rec.long_task_name
5156                        ,p_task_description                  => cur_select_task_rec.description
5157                        ,p_task_manager_person_id            => null
5158                        ,p_carrying_out_organization_id      => cur_select_task_rec.carrying_out_organization_id
5159                        --,p_task_type_code                    => cur_select_task_rec.task_type_code
5160                        --,p_priority_code                     => cur_select_task_rec.priority_code
5161                        ,p_work_type_id                      => cur_select_task_rec.work_type_id
5162                        ,p_service_type_code                 => cur_select_task_rec.service_type_code
5163                        --,p_milestone_flag                    => cur_select_task_rec.milestone_flag
5164                        --,p_critical_flag                     => null
5165                        ,p_chargeable_flag                   => cur_select_task_rec.chargeable_flag
5166                        ,p_billable_flag                     => cur_select_task_rec.billable_flag
5167                        ,p_receive_project_invoice_flag      => cur_select_task_rec.receive_project_invoice_flag
5168                        ,p_scheduled_start_date              => cur_select_task_rec.scheduled_start_date
5169                        ,p_scheduled_finish_date             => cur_select_task_rec.scheduled_finish_date
5170                        ,p_estimated_start_date              => l_estimated_start_date
5171                        ,p_estimated_end_date                => l_estimated_end_date
5172                        ,p_actual_start_date                 => null
5173                        ,p_actual_finish_date                => null
5174                        ,p_task_start_date                   => cur_select_task_rec.start_date
5175                        --,p_task_completion_date              => cur_select_task_rec.end_date
5176                        ,p_baseline_start_date               => null
5177                        ,p_baseline_end_date                 => null
5178 
5179                        ,p_estimate_to_complete_work         => null
5180                        ,p_baseline_work                     => null
5181 --                       ,p_scheduled_work                    => cur_select_task_rec.scheduled_work
5182                        ,p_actual_work_to_date               => null
5183                        ,p_work_unit                         => 'Hours'
5184 
5185                        ,p_task_id                     => l_task_id
5186                        ,x_display_seq                       => l_display_seq
5187 
5188                        ,x_return_status                     => x_return_status
5189                        ,x_msg_count                         => x_msg_count
5190                        ,x_msg_data                          => x_msg_data  );
5191 
5192             l_msg_count := FND_MSG_PUB.count_msg;
5193 
5194             IF l_msg_count > 0 THEN
5195                x_msg_count := l_msg_count;
5196                x_return_status := 'E';
5197                RAISE  FND_API.G_EXC_ERROR;
5198             END IF;
5199 
5200       END LOOP;
5201 
5202 /*
5203       --Call Update statement to update display order
5204 
5205       ************************************************************
5206        THIS FUNCTIONALITY IS MOVED IN PA_TASK_PUB1.COPY_TASK API.
5207       ************************************************************
5208 
5209       BEGIN
5210           -- Need to get max number
5211           SELECT max(display_sequence)
5212             INTO l_max_seq
5213             FROM PA_TASKS
5214            WHERE project_id = p_reference_project_id;
5215 
5216           UPDATE PA_TASKS
5217              SET display_sequence =
5218                  PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, l_max_seq, 1, 'INSERT', null),
5219                  record_version_number = record_version_number + 1
5220            WHERE project_id = p_reference_project_id
5221              AND ( display_sequence > -( l_display_seq + 1 ) or display_sequence < 0 );
5222       EXCEPTION
5223          WHEN OTHERS THEN
5224               PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
5225               RAISE FND_API.G_EXC_ERROR;
5226       END;*/
5227 
5228  EXCEPTION
5229     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
5230        IF p_commit = FND_API.G_TRUE
5231        THEN
5232           ROLLBACK TO Copy;
5233        END IF;
5234        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5235        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5236                                p_procedure_name => 'Copy_Selected_Task',
5237                                p_error_text     => SUBSTRB(SQLERRM,1,240));
5238        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5239 
5240     WHEN FND_API.G_EXC_ERROR THEN
5241        IF p_commit = FND_API.G_TRUE
5242        THEN
5243           ROLLBACK TO Copy;
5244        END IF;
5245        x_return_status := 'E';
5246 
5247      WHEN OTHERS THEN
5248        IF p_commit = FND_API.G_TRUE
5249        THEN
5250           ROLLBACK TO Copy;
5251        END IF;
5252        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5253        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5254                                p_procedure_name => 'Copy_Selected_Task',
5255                                p_error_text     => SUBSTRB(SQLERRM,1,240));
5256        RAISE;
5257  END Copy_Selected_Task;
5258 
5259 -- API name                      : Copy_Entire_Task
5260 -- Type                          : Private procedure
5261 -- Pre-reqs                      : None
5262 -- Return Value                  : N/A
5263 -- Prameters
5264 -- p_commit                    IN    VARCHAR2   REQUIRED   DEFAULT=FND_API.G_FALSE
5265 -- p_validate_only       IN  VARCHAR2   REQUIRED   DEFAULT=FND_API.G_TRUE
5266 -- p_validation_level        IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_VALID_LEVEL_FULL
5267 -- p_calling_module      IN      VARCHAR2   OPTIONAL   DEFAULT='SELF_SERVICE'
5268 -- p_debug_mode              IN  VARCHAR2   OPTIONAL   DEFAULT='N'
5269 -- p_max_msg_count       IN  NUMBER     OPTIONAL   DEFAULT=FND_API.G_MISS_NUM
5270 -- p_reference_project_id      IN    NUMBER
5271 -- p_reference_task_id         IN    NUMBER
5272 -- p_project_id                IN    NUMBER
5273 -- p_task_id                   IN    NUMBER
5274 -- p_peer_or_sub                    IN    VARCHAR2
5275 -- p_task_prefix               IN    VARCHAR2   --
5276 -- x_return_status         OUT   VARCHAR2   REQUIRED
5277 -- x_msg_count               OUT     VARCHAR2   REQUIRED
5278 -- x_msg_data                OUT     VARCHAR2   REQUIRED
5279 --
5280 --  History
5281 --
5282 --  25-JUN-01   Majid Ansari             -Created
5283 --
5284 --
5285 
5286  PROCEDURE Copy_Entire_Task(
5287    p_commit                    IN    VARCHAR2    DEFAULT FND_API.G_FALSE
5288   ,p_validate_only       IN  VARCHAR2    DEFAULT FND_API.G_TRUE
5289   ,p_validation_level        IN  NUMBER      DEFAULT FND_API.G_VALID_LEVEL_FULL
5290   ,p_calling_module      IN      VARCHAR2    DEFAULT 'SELF_SERVICE'
5291   ,p_debug_mode              IN  VARCHAR2    DEFAULT 'N'
5292   ,p_max_msg_count       IN  NUMBER      DEFAULT FND_API.G_MISS_NUM
5293   ,p_reference_project_id      IN    NUMBER
5294   ,p_reference_task_id         IN    NUMBER
5295   ,p_project_id                IN    NUMBER
5296   ,p_task_id                   IN    NUMBER
5297   ,p_peer_or_sub                    IN    VARCHAR2
5298   ,p_task_prefix               IN    VARCHAR2
5299   ,x_return_status         OUT   NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5300   ,x_msg_count               OUT     NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5301   ,x_msg_data                OUT     NOCOPY VARCHAR2   ) AS --File.Sql.39 bug 4440895
5302 
5303    CURSOR cur_entire_task
5304    IS
5305 
5306      /*SELECT *
5307        FROM pa_tasks
5308       WHERE project_id = p_project_id
5309      START WITH task_id = p_task_id
5310      CONNECT BY PRIOR task_id = parent_task_id
5311      ORDER BY display_sequence; */
5312 
5313     SELECT pt.task_number, pt.task_name, pt.long_task_name, pt.description, pt.carrying_out_organization_id,
5314             pt.work_type_id, pt.service_type_code,
5315             pt.chargeable_flag, pt.billable_flag, pt.receive_project_invoice_flag,
5316             pt.scheduled_start_date, pt.scheduled_finish_date, pt.start_date,
5317             pt.wbs_level, pt.task_id, ppev.display_sequence
5318       FROM
5319      ( SELECT task_id, task_number, task_name, long_task_name, description,carrying_out_organization_id,
5320               work_type_id, service_type_code,
5321               chargeable_flag, billable_flag, receive_project_invoice_flag,
5322               scheduled_start_date, scheduled_finish_date, start_date,
5323               wbs_level
5324          FROM pa_tasks
5325         WHERE project_id = p_project_id
5326       START WITH task_id = p_task_id
5327       CONNECT BY PRIOR task_id = parent_task_id ) pt,
5328                          pa_proj_element_versions ppev
5329      WHERE pt.task_id = ppev.proj_element_id
5330      ORDER BY ppev.display_sequence;
5331 
5332    CURSOR cur_ref_info
5333    IS
5334      SELECT *
5335        FROM pa_tasks
5336       WHERE project_id = p_reference_project_id
5337         AND task_id    = p_reference_task_id;
5338 
5339    CURSOR cur_data_length(c_pa_schema_name  VARCHAR2)
5340    IS
5341      SELECT column_name, data_length
5342        FROM user_synonyms syn, all_tab_columns col
5343       WHERE col.table_name = 'PA_TASKS'
5344     and col.owner      =  syn.table_owner
5345     and col.table_name = syn.table_name
5346     AND col.owner = c_pa_schema_name
5347     AND col.column_name IN ( 'TASK_NAME', 'LONG_TASK_NAME', 'TASK_NUMBER' );
5348 
5349    --schema swap changes
5350    l_table_owner           VARCHAR2(30);
5351    l_fnd_return_status     BOOLEAN;
5352    l_fnd_status            VARCHAR2(30);
5353    l_fnd_industry          VARCHAR2(30);
5354    --schema swap changes
5355 
5356    l_rec_cur_ref_info cur_ref_info%ROWTYPE;
5357 
5358    l_parent_task_id     NUMBER;
5359    l_top_task_id        NUMBER;
5360    l_wbs_level          NUMBER;
5361    l_option             VARCHAR2(4);
5362    l_reference_task_id  NUMBER;
5363    l_max_display        NUMBER;
5364    l_prev_wbs_level     NUMBER;
5365    l_task_id            NUMBER;
5366    l_display_seq        NUMBER;
5367    l_max_seq            NUMBER;
5368    l_first_seq          NUMBER;
5369 
5370    l_estimated_start_date    DATE;
5371    l_estimated_end_date      DATE;
5372 
5373    TYPE CurrTasks IS RECORD( task_id NUMBER(15), wbs_level NUMBER(15),
5374                              display_sequence NUMBER(15), new_task_id NUMBER(15) );
5375    TYPE TaskTab IS TABLE OF CurrTasks INDEX BY BINARY_INTEGER;
5376 
5377    l_TaskTab            TaskTab;
5378    i                    NUMBER := 0;
5379    k                    NUMBER := 0;
5380    l_msg_count                        NUMBER;
5381 
5382    l_task_number_len    NUMBER;
5383    l_task_name_len      NUMBER;
5384    l_long_task_name_len NUMBER;
5385    l_column_name        VARCHAR2(30);
5386    l_data_length        NUMBER;
5387 
5388  BEGIN
5389 
5390       IF p_commit = FND_API.G_TRUE
5391       THEN
5392          SAVEPOINT Copy;
5393       END IF;
5394       x_return_status := 'S';
5395 
5396       --get the max data length allowed for task_number and task_name from data dictionary
5397       --This is to make sure that the task_name and task_number does not exceed after
5398       --appended with prefix.
5399 
5400 --schema swap changes
5401        l_fnd_return_status := FND_INSTALLATION.GET_APP_INFO(
5402                                    application_short_name => 'PA',
5403                                    status                 => l_fnd_status,
5404                                    industry               => l_fnd_industry,
5405                                    oracle_schema          => l_table_owner);
5406        IF NOT l_fnd_return_status
5407        THEN
5408            fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5409                                    p_procedure_name => 'Copy_Entire_Project',
5410                                    p_error_text     => SUBSTRB('FND_INSTALLATION.GET_APP_INFO api call failed:'||SQLERRM,1,240));
5411            RAISE FND_API.G_EXC_ERROR;
5412        END IF;
5413 --schema swap changes
5414 
5415       OPEN cur_data_length(l_table_owner);
5416       LOOP
5417          FETCH cur_data_length INTO l_column_name, l_data_length;
5418          IF cur_data_length%FOUND
5419          THEN
5420             IF l_column_name = 'TASK_NUMBER'
5421             THEN
5422                l_task_number_len := l_data_length;
5423             ELSIF l_column_name = 'LONG_TASK_NAME'
5424             THEN
5425                l_long_task_name_len := l_data_length;
5426             ELSE
5427                l_task_name_len   := l_data_length;
5428             END IF;
5429          ELSE
5430             Exit;
5431          END IF;
5432       END LOOP;
5433 
5434       OPEN cur_ref_info;
5435       FETCH  cur_ref_info INTO l_rec_cur_ref_info;
5436       CLOSE cur_ref_info;
5437 
5438       l_option := p_peer_or_sub;
5439       l_reference_task_id := p_reference_task_id;
5440 
5441       FOR  cur_entire_task_rec IN cur_entire_task LOOP
5442 
5443          IF cur_entire_task%ROWCOUNT > 1
5444          THEN
5445              --Find now the relationship between the next task in the cursor and the previously created task.
5446              IF cur_entire_task_rec.wbs_level = l_prev_wbs_level
5447              THEN
5448                 l_reference_task_id := l_task_id;
5449                 l_option            := 'PEER';
5450              ELSIF cur_entire_task_rec.wbs_level > l_prev_wbs_level
5451              THEN
5452                 l_reference_task_id := l_task_id;
5453                 l_option            := 'SUB';
5454              ELSE
5455                 --Find the task above the heirarchy at the same level as that of the current task
5456                 --from the matrix.
5457                 --Assign a min value to max display sequence.
5458                 l_max_display := 0;
5459                 k := 1;
5460                 LOOP
5461                     --Getting the exact display sequence number. It is possible that there could be
5462                     --more than one task at the same level above.
5463                     IF l_TaskTab( k ).display_sequence > l_max_display AND
5464                        l_TaskTab( k ).display_sequence < cur_entire_task_rec.display_sequence AND
5465                        l_TaskTab( k ).wbs_level = cur_entire_task_rec.wbs_level
5466                     THEN
5467                        l_max_display := l_TaskTab( k ).display_sequence;
5468                        l_reference_task_id := l_TaskTab( k ).new_task_id;
5469                     END IF;
5470                     IF k = i   -- If there does not exists any record in the matrix.
5471                     THEN
5472                        Exit;
5473                     ELSE
5474                        k := k + 1;
5475                     END IF;
5476                 END LOOP;
5477                 l_option            := 'PEER';
5478              END IF;
5479          END IF;
5480 
5481 
5482          IF l_option = 'PEER' AND
5483             l_rec_cur_ref_info.wbs_level > 1      ---Not a Top level
5484          THEN
5485             --l_estimated_start_date := cur_entire_task_rec.estimated_start_date;
5486             --l_estimated_end_date := cur_entire_task_rec.estimated_end_date;
5487             l_estimated_start_date := cur_entire_task_rec.scheduled_start_date;
5488             l_estimated_end_date := cur_entire_task_rec.scheduled_finish_date;
5489          ELSE --TOP LEVEL PEER task or SUB task.
5490             l_estimated_start_date := cur_entire_task_rec.scheduled_start_date;
5491             l_estimated_end_date := cur_entire_task_rec.scheduled_finish_date;
5492          END IF;
5493 
5494          --Write the basic info in the PL/SQL table.
5495          i := i + 1;
5496          l_TaskTab( i ).task_id := cur_entire_task_rec.task_id;
5497          l_TaskTab( i ).new_task_id := 0;
5498          l_TaskTab( i ).wbs_level := cur_entire_task_rec.wbs_level;
5499          l_TaskTab( i ).display_sequence := cur_entire_task_rec.display_sequence;
5500 
5501          IF   length( p_task_prefix||cur_entire_task_rec.task_number ) > l_task_number_len OR
5502               length( p_task_prefix||cur_entire_task_rec.task_name ) > l_task_name_len OR
5503               length( p_task_prefix||cur_entire_task_rec.long_task_name) > l_long_task_name_len
5504          THEN
5505               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5506                                    p_msg_name       => 'PA_TASK_PREFIX_TOO_LARGE' );
5507               x_msg_data := 'PA_TASK_PREFIX_TOO_LARGE';
5508               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5509               RAISE  FND_API.G_EXC_ERROR;
5510          END IF;
5511 
5512          PA_TASKS_MAINT_PVT.CREATE_TASK
5513                       (
5514                         p_commit                            => p_commit
5515                        ,p_validate_only                     => p_validate_only
5516                        ,p_validation_level                  => p_validation_level
5517                        ,p_calling_module                    => p_calling_module
5518                        ,p_debug_mode                        => p_debug_mode
5519 
5520                        ,p_project_id                        => p_reference_project_id
5521                        ,p_reference_task_id                 => l_reference_task_id
5522                        ,p_peer_or_sub                       => l_option
5523                        ,p_task_number                       => p_task_prefix||cur_entire_task_rec.task_number
5524                        ,p_task_name                         => p_task_prefix||cur_entire_task_rec.task_name
5525                        ,p_long_task_name                    => p_task_prefix||cur_entire_task_rec.long_task_name
5526                        ,p_task_description                  => cur_entire_task_rec.description
5527                        ,p_task_manager_person_id            => null
5528                        ,p_carrying_out_organization_id      => cur_entire_task_rec.carrying_out_organization_id
5529                        --,p_task_type_code                    => cur_entire_task_rec.task_type_code
5530                        --,p_priority_code                     => cur_entire_task_rec.priority_code
5531                        ,p_work_type_id                      => cur_entire_task_rec.work_type_id
5532                        ,p_service_type_code                 => cur_entire_task_rec.service_type_code
5533                        --,p_milestone_flag                    => cur_entire_task_rec.milestone_flag
5534                        --,p_critical_flag                     => null
5535                        ,p_chargeable_flag                   => cur_entire_task_rec.chargeable_flag
5536                        ,p_billable_flag                     => cur_entire_task_rec.billable_flag
5537                        ,p_receive_project_invoice_flag      => cur_entire_task_rec.receive_project_invoice_flag
5538                        ,p_scheduled_start_date              => cur_entire_task_rec.scheduled_start_date
5539                        ,p_scheduled_finish_date             => cur_entire_task_rec.scheduled_finish_date
5540                        ,p_estimated_start_date              => l_estimated_start_date
5541                        ,p_estimated_end_date                => l_estimated_end_date
5542                        ,p_actual_start_date                 => null
5543                        ,p_actual_finish_date                => null
5544                        ,p_task_start_date                   => cur_entire_task_rec.start_date
5545                        --,p_task_completion_date              => cur_entire_task_rec.end_date
5546                        ,p_baseline_start_date               => null
5547                        ,p_baseline_end_date                 => null
5548 
5549                        ,p_estimate_to_complete_work         => null
5550                        ,p_baseline_work                     => null
5551 --                       ,p_scheduled_work                    => cur_entire_task_rec.scheduled_work
5552                        ,p_actual_work_to_date               => null
5553                        ,p_work_unit                         => 'Hours'
5554 
5555                        ,p_task_id                     => l_task_id
5556                        ,x_display_seq                       => l_display_seq
5557 
5558                        ,x_return_status                     => x_return_status
5559                        ,x_msg_count                         => x_msg_count
5560                        ,x_msg_data                          => x_msg_data  );
5561 
5562              l_prev_wbs_level := cur_entire_task_rec.wbs_level;
5563              l_TaskTab( i ).new_task_id := l_task_id;
5564 
5565              IF cur_entire_task%ROWCOUNT = 1
5566              THEN
5567                 --capture the first sequence created.
5568                 l_first_seq := l_display_seq;
5569              END IF;
5570 
5571 
5572             l_msg_count := FND_MSG_PUB.count_msg;
5573 
5574             IF l_msg_count > 0 THEN
5575                x_msg_count := l_msg_count;
5576                x_return_status := 'E';
5577                RAISE  FND_API.G_EXC_ERROR;
5578             END IF;
5579 
5580       END LOOP;
5581 
5582 /*
5583       --Call Update statement to update display order
5584 
5585       ************************************************************
5586        THIS FUNCTIONALITY IS MOVED IN PA_TASK_PUB1.COPY_TASK API.
5587       ************************************************************
5588 
5589       BEGIN
5590           -- Need to get max number
5591           SELECT max(display_sequence)
5592             INTO l_max_seq
5593             FROM PA_TASKS
5594            WHERE project_id = p_reference_project_id;
5595 
5596           UPDATE PA_TASKS
5597              SET display_sequence =
5598                  PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, l_max_seq, i, 'INSERT', null),
5599                  record_version_number = record_version_number + 1
5600            WHERE project_id = p_reference_project_id
5601              AND ( display_sequence > -( l_first_seq + 1 ) or display_sequence < 0 );
5602       EXCEPTION
5603          WHEN OTHERS THEN
5604               PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
5605               RAISE FND_API.G_EXC_ERROR;
5606       END; */
5607 
5608  EXCEPTION
5609     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
5610        IF p_commit = FND_API.G_TRUE
5611        THEN
5612           ROLLBACK TO Copy;
5613        END IF;
5614        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5615        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5616                                p_procedure_name => 'Copy_Entire_Task',
5617                                p_error_text     => SUBSTRB(SQLERRM,1,240));
5618        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5619 
5620     WHEN FND_API.G_EXC_ERROR THEN
5621        IF p_commit = FND_API.G_TRUE
5622        THEN
5623           ROLLBACK TO Copy;
5624        END IF;
5625        x_return_status := 'E';
5626 
5627      WHEN OTHERS THEN
5628        IF p_commit = FND_API.G_TRUE
5629        THEN
5630           ROLLBACK TO Copy;
5631        END IF;
5632        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5633        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
5634                                p_procedure_name => 'Copy_Entire_Task',
5635                                p_error_text     => SUBSTRB(SQLERRM,1,240));
5636        RAISE;
5637 
5638  END Copy_Entire_Task;
5639 
5640 
5641 -- API name                      : Move_Task
5642 -- Type                          : Private Procedure
5643 -- Pre-reqs                      : None
5644 -- Return Value                  : N/A
5645 -- Prameters
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 VARCHAR2
5660 -- x_msg_count                         OUT NUMBER
5661 -- x_msg_data                          OUT VARCHAR2
5662 --
5663 --  History
5664 --
5665 --  02-JUL-01   Majid Ansari             -Created
5666 --
5667 --
5668 
5669  PROCEDURE Move_Task(
5670     p_api_version                       IN  NUMBER      := 1.0
5671    ,p_init_msg_list                     IN  VARCHAR2    := FND_API.G_TRUE
5672    ,p_commit                            IN  VARCHAR2    := FND_API.G_FALSE
5673    ,p_validate_only                     IN  VARCHAR2    := FND_API.G_TRUE
5674    ,p_validation_level                  IN  VARCHAR2    := 100
5675    ,p_calling_module                    IN  VARCHAR2    := 'SELF_SERVICE'
5676    ,p_debug_mode                        IN  VARCHAR2    := 'N'
5677    ,p_reference_project_id              IN  NUMBER
5678    ,p_reference_task_id                 IN  NUMBER
5679    ,p_project_id                        IN  NUMBER
5680    ,p_task_id                           IN  NUMBER
5681    ,p_peer_or_sub                       IN  VARCHAR2
5682    ,p_record_version_number             IN  NUMBER
5683    ,x_return_status                     OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5684    ,x_msg_count                         OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5685    ,x_msg_data                          OUT NOCOPY VARCHAR2 ) AS --File.Sql.39 bug 4440895
5686 
5687    CURSOR cur_tasks
5688    IS
5689 /*     SELECT task_id, display_sequence, top_task_id, parent_task_id, wbs_level, record_version_number
5690        FROM pa_tasks
5691       WHERE project_id = p_project_id
5692         START WITH task_id = p_task_id
5693         CONNECT BY PRIOR task_id = parent_task_id
5694      ORDER BY display_sequence;*/
5695 
5696      SELECT pt.task_id, ppev.display_sequence, pt.top_task_id, pt.parent_task_id, pt.wbs_level, pt.record_version_number
5697        FROM
5698      ( SELECT task_id, top_task_id, parent_task_id, wbs_level, record_version_number
5699          FROM pa_tasks
5700         WHERE project_id = p_project_id
5701           START WITH task_id = p_task_id
5702           CONNECT BY PRIOR task_id = parent_task_id ) pt, pa_proj_element_versions ppev
5703       WHERE pt.task_id = ppev.proj_element_id
5704       ORDER BY ppev.display_sequence;
5705 
5706    CURSOR cur_ref_info
5707    IS
5708 /*     SELECT *
5709        FROM pa_tasks
5710       WHERE project_id = p_reference_project_id
5711         START WITH task_id    = p_reference_task_id
5712         CONNECT BY PRIOR task_id = parent_task_id
5713       ORDER BY display_sequence;*/
5714 
5715      SELECT pt.top_task_id, pt.parent_task_id, pt.wbs_level, ppev.display_sequence
5716        FROM
5717      ( SELECT  task_id, top_task_id, parent_task_id, wbs_level
5718          FROM pa_tasks
5719         WHERE project_id = p_reference_project_id
5720           START WITH task_id    = p_reference_task_id
5721           CONNECT BY PRIOR task_id = parent_task_id ) pt, pa_proj_element_versions ppev
5722        WHERE pt.task_id = ppev.proj_element_id
5723       ORDER BY ppev.display_sequence;
5724    --Added cur_task_detail for bug 16088808
5725    CURSOR cur_task_detail
5726    IS
5727      SELECT pt.task_id, ppev.display_sequence, pt.top_task_id, pt.parent_task_id, pt.wbs_level, pt.record_version_number
5728        FROM
5729      ( SELECT task_id, top_task_id, parent_task_id, wbs_level, record_version_number
5730          FROM pa_tasks
5731         WHERE project_id = p_project_id and task_id = p_task_id ) pt, pa_proj_element_versions ppev
5732       WHERE pt.task_id = ppev.proj_element_id
5733       ORDER BY ppev.display_sequence;
5734 
5735    l_rec_cur_ref_info cur_ref_info%ROWTYPE;
5736 
5737    l_top_level_task_flag      VARCHAR2(1) := 'N';
5738 
5739    l_max_seq                  NUMBER;
5740    i                          NUMBER;
5741 
5742    l_top_task_id              NUMBER;
5743    l_parent_task_id           NUMBER;
5744    l_wbs_level                NUMBER;
5745    l_display_sequence         NUMBER;
5746 
5747    l_ref_top_task_id          NUMBER;
5748    l_ref_parent_task_id       NUMBER;
5749    l_ref_wbs_level            NUMBER;
5750    l_ref_display_sequence     NUMBER;
5751 
5752    l_above_top_task_id        NUMBER;
5753    l_above_parent_task_id     NUMBER;
5754    l_above_wbs_level          NUMBER;
5755    l_above_display_sequence   NUMBER;
5756 
5757    l_ref_child_tasks_num      NUMBER := 0;
5758 
5759    l_lowest_moving_wbs_level  NUMBER;
5760    l_move_direction           VARCHAR2(4);
5761    l_min_display_sequence     NUMBER;
5762    l_max_display_sequence     NUMBER;
5763    l_above_child_tasks_num    NUMBER;
5764    l_reference_sequence       NUMBER;
5765 
5766    l_return_status                    VARCHAR2(1);
5767    l_error_msg_code                   VARCHAR2(250);
5768    l_msg_count                        NUMBER;
5769 
5770 -- 23-JUL-2001 Added by HSIU
5771     l_err_code                           NUMBER                 := 0;
5772     l_err_stack                          VARCHAR2(630);
5773     l_err_stage                          VARCHAR2(80); -- VARCHAR2(80)
5774     cur_tasks_rec             cur_tasks%ROWTYPE; -- added for bug 16088808
5775 
5776  BEGIN
5777 
5778       x_return_status:= FND_API.G_RET_STS_SUCCESS;
5779 
5780 --dbms_output.put_line( 'In move task 0' );
5781 
5782       --Ref project and task id Required check.
5783       PA_TASKS_MAINT_UTILS.REF_PRJ_TASK_ID_REQ_CHECK(
5784                                p_reference_project_id      => p_reference_project_id,
5785                                p_reference_task_id         => p_reference_task_id,
5786                                x_return_status           => l_return_status,
5787                                x_error_msg_code            => l_error_msg_code );
5788 
5789       IF l_return_status = FND_API.G_RET_STS_ERROR
5790       THEN
5791          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5792                               p_msg_name       => l_error_msg_code);
5793          x_msg_data := l_error_msg_code;
5794          x_return_status := 'E';
5795          RAISE  FND_API.G_EXC_ERROR;
5796       END IF;
5797 
5798 --dbms_output.put_line( 'In move task 1' );
5799 
5800       --project and task id Required check.
5801       PA_TASKS_MAINT_UTILS.SRC_PRJ_TASK_ID_REQ_CHECK(
5802                              p_project_id      => p_project_id,
5803                              p_task_id         => p_task_id,
5804                              x_return_status   => l_return_status,
5805                              x_error_msg_code  => l_error_msg_code );
5806 
5807       IF l_return_status = FND_API.G_RET_STS_ERROR
5808       THEN
5809          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5810                               p_msg_name       => l_error_msg_code);
5811          x_msg_data := l_error_msg_code;
5812          x_return_status := 'E';
5813          RAISE  FND_API.G_EXC_ERROR;
5814       END IF;
5815 --dbms_output.put_line( 'In move task 2' );
5816 
5817 
5818       IF p_reference_project_id <> p_project_id
5819       THEN
5820         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
5821                              p_msg_name       => 'PA_TASK_MOV_NOT_ALLOWED' );
5822         x_msg_data := 'PA_TASK_MOV_NOT_ALLOWED';
5823         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5824         RAISE  FND_API.G_EXC_ERROR;
5825       END IF;
5826 
5827 --dbms_output.put_line( 'In move task 3' );
5828 
5829 
5830       FOR l_rec_cur_ref_info IN cur_ref_info LOOP
5831          IF cur_ref_info%ROWCOUNT = 1
5832          THEN
5833              --store attributes of the first ref task itself
5834              l_ref_top_task_id         := l_rec_cur_ref_info.top_task_id;
5835              l_ref_parent_task_id      := l_rec_cur_ref_info.parent_task_id;
5836              l_ref_wbs_level           := l_rec_cur_ref_info.wbs_level;
5837              l_ref_display_sequence    := l_rec_cur_ref_info.display_sequence;
5838 
5839              --If only one record exists then both set of variables will hold the same value.
5840              l_above_top_task_id         := l_rec_cur_ref_info.top_task_id;
5841              l_above_parent_task_id      := l_rec_cur_ref_info.parent_task_id;
5842              l_above_wbs_level           := l_rec_cur_ref_info.wbs_level;
5843              l_above_display_sequence    := l_rec_cur_ref_info.display_sequence;
5844          ELSE
5845              --store attributes of the last child in the ref task heir.
5846              l_above_top_task_id         := l_rec_cur_ref_info.top_task_id;
5847              l_above_parent_task_id      := l_rec_cur_ref_info.parent_task_id;
5848              l_above_wbs_level           := l_rec_cur_ref_info.wbs_level;
5849              l_above_display_sequence    := l_rec_cur_ref_info.display_sequence;
5850          END IF;
5851          --no of children underneath the ref tasks
5852          l_above_child_tasks_num := l_above_child_tasks_num + 1;
5853       END LOOP;
5854 
5855 --dbms_output.put_line( 'In move task 4' );
5856 
5857 
5858       IF l_ref_wbs_level = 1 AND
5859          p_peer_or_sub = 'PEER'
5860       THEN
5861          l_top_level_task_flag := 'Y';
5862       ELSE
5863          l_top_task_id := l_ref_top_task_id;
5864          IF p_peer_or_sub = 'PEER'
5865          THEN
5866             l_parent_task_id := l_ref_parent_task_id;
5867          ELSE
5868             -- 23-JUL-2001
5869             -- Added by HSIU--check if the reference task can have child tasks
5870           PA_TASK_UTILS.CHECK_CREATE_SUBTASK_OK(x_task_id => p_reference_task_id,
5871                x_err_code => l_err_code,
5872                x_err_stack => l_err_stack,
5873                x_err_stage => l_err_stage
5874             );
5875             IF (l_err_code <> 0) THEN
5876                PA_UTILS.ADD_MESSAGE('PA', substr(l_err_stage,1,30));
5877             END IF;
5878             -- HSIU changes ends here
5879 
5880             l_parent_task_id := p_reference_task_id;
5881          END IF;
5882       END IF;
5883       i := 0;
5884 
5885 --dbms_output.put_line( 'In move task 5' );
5886       -- added for bug 16088808
5887       --If user deferred the rollup, then open cur_task_detail cursor instead of cur_tasks.
5888       --System should update new parent task id only for selected task not for all children of selected task.
5889       IF (NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N')='Y')
5890       THEN
5891           OPEN cur_task_detail;
5892       ELSE
5893           OPEN cur_tasks;
5894       END IF;
5895       --FOR cur_tasks_rec IN cur_tasks LOOP
5896       Loop
5897           IF (NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N')='Y')
5898 	      THEN
5899 	         FETCH cur_task_detail INTO cur_tasks_rec;
5900              EXIT WHEN cur_task_detail%NOTFOUND;
5901 	      ELSE
5902              FETCH cur_tasks INTO cur_tasks_rec;
5903              EXIT WHEN cur_tasks%NOTFOUND;
5904 	      END IF;
5905           IF ((NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N')='Y' and cur_task_detail%ROWCOUNT = 1) or (NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N')='N' and cur_tasks%ROWCOUNT = 1))
5906           THEN
5907              l_lowest_moving_wbs_level := cur_tasks_rec.wbs_level;
5908 
5909              --make the top task for p_task and its children as p_task
5910              IF l_top_level_task_flag = 'Y'
5911              THEN
5912                 l_top_task_id := cur_tasks_rec.task_id;
5913                 l_parent_task_id := null;                  --This is only for the first task in the moving tasks set.
5914              END IF;
5915 
5916              --Set the move direction and boundaries for the sequence number update
5917              IF p_peer_or_sub = 'PEER'
5918              THEN
5919                 l_reference_sequence := l_above_display_sequence;
5920              ELSE
5921                 l_reference_sequence := l_ref_display_sequence;
5922              END IF;
5923              IF cur_tasks_rec.display_sequence < l_reference_sequence
5924              THEN
5925                 l_move_direction := 'DOWN';
5926                 l_min_display_sequence := cur_tasks_rec.display_sequence;
5927                 IF p_peer_or_sub = 'PEER'
5928                 THEN
5929                    l_max_display_sequence := l_above_display_sequence ;
5930                 ELSE
5931                    l_max_display_sequence := l_ref_display_sequence ;
5932                 END IF;
5933              ELSIF cur_tasks_rec.display_sequence > l_reference_sequence
5934              THEN
5935                 l_move_direction := 'UP';
5936                 IF p_peer_or_sub = 'PEER'
5937                 THEN
5938                    l_min_display_sequence := l_above_display_sequence;
5939                 ELSE
5940                    l_min_display_sequence := l_ref_display_sequence;
5941                 END IF;
5942                 l_max_display_sequence := cur_tasks_rec.display_sequence;  --add the total tasks added
5943              ELSE
5944              --otherwise no change in the display sequence.
5945                null;
5946              END IF;
5947 
5948           ELSE
5949              --Parent task id for all other except the first task remains same
5950              l_parent_task_id := cur_tasks_rec.parent_task_id;
5951           END IF;
5952 
5953           i := i + 1;       --counting no. of moving tasks
5954 
5955           --initialize the wbs level of the moving tasks starting from 1
5956           l_wbs_level := cur_tasks_rec.wbs_level - l_lowest_moving_wbs_level + 1;
5957 
5958           IF p_peer_or_sub = 'PEER'
5959           THEN
5960              --creating -ve sequence numbers.
5961              --moving after all child tasks of the ref task
5962              l_display_sequence :=   -( l_above_display_sequence + i ) ;
5963 
5964              l_wbs_level := l_wbs_level + ( l_ref_wbs_level - 1 );
5965           ELSE
5966              l_wbs_level := l_wbs_level + l_ref_wbs_level ;
5967              --creating -ve sequence numbers.
5968              --moving immediately after ref task
5969              l_display_sequence :=   -( l_ref_display_sequence + i ) ;
5970           END IF;
5971 
5972           --dbms_output.put_line( 'Before update task ' );
5973            PA_TASKS_MAINT_PVT.UPDATE_TASK
5974                    (
5975                       p_commit                            => p_commit
5976                      ,p_validate_only                     => p_validate_only
5977                      ,p_validation_level                  => p_validation_level
5978                      ,p_calling_module                    => p_calling_module
5979                      ,p_debug_mode                        => p_debug_mode
5980 
5981                      ,p_project_id                        => p_reference_project_id
5982                      ,p_task_id                           => cur_tasks_rec.task_id
5983 
5984                      ,p_parent_task_id                    => l_parent_task_id
5985                      ,p_top_task_id                       => l_top_task_id
5986                      ,p_wbs_level                         => l_wbs_level
5987                      ,p_display_sequence                  => l_display_sequence
5988 
5989                      ,p_record_version_number             => cur_tasks_rec.record_version_number
5990                      ,x_return_status                     => x_return_status
5991                      ,x_msg_count                         => x_msg_count
5992                      ,x_msg_data                          => x_msg_data );
5993 
5994             l_msg_count := FND_MSG_PUB.count_msg;
5995 
5996             IF l_msg_count > 0 THEN
5997                x_msg_count := l_msg_count;
5998                x_return_status := 'E';
5999                x_msg_data := x_msg_data;
6000           --dbms_output.put_line( 'x_msg_data in update task  '||x_msg_data );
6001 
6002                RAISE  FND_API.G_EXC_ERROR;
6003             END IF;
6004 
6005       END LOOP;
6006 
6007 --dbms_output.put_line( 'In move task 6' );
6008 
6009       -- update chargeable flag for reference task to no.
6010       IF (Pa_Task_Utils.check_child_Exists(NVL(p_reference_task_id,0)) = 1 ) THEN
6011         UPDATE Pa_tasks
6012         SET Chargeable_Flag = 'N',
6013         RECORD_VERSION_NUMBER = nvl(RECORD_VERSION_NUMBER,0) + 1,
6014         last_updated_by = FND_GLOBAL.USER_ID,
6015         last_update_login = FND_GLOBAL.USER_ID,
6016         last_update_date = sysdate
6017         WHERE TASK_ID = p_reference_task_id;
6018       END IF;
6019 
6020 --dbms_output.put_line( 'In move task 7' );
6021 
6022 
6023 /*
6024       --Call Update statement to update display order
6025 
6026       ************************************************************
6027        THIS FUNCTIONALITY IS MOVED IN PA_TASK_PUB1.COPY_TASK API.
6028       ************************************************************
6029 
6030       BEGIN
6031           -- Need to get max number
6032           SELECT max(display_sequence)
6033             INTO l_max_seq
6034             FROM PA_TASKS
6035            WHERE project_id = p_reference_project_id;
6036 
6037 
6038           IF l_move_direction = 'UP'
6039           THEN
6040              l_max_display_sequence := l_max_display_sequence + i - 1;       --( )
6041              l_max_seq              := l_max_seq + i;
6042           END IF;
6043 
6044           UPDATE PA_TASKS
6045              SET display_sequence =
6046                  PA_TASKS_MAINT_UTILS.REARRANGE_DISPLAY_SEQ(display_sequence, l_max_seq, i, 'MOVE', l_move_direction ),
6047                  record_version_number = record_version_number + 1
6048            WHERE project_id = p_reference_project_id
6049              AND ( ( display_sequence > l_min_display_sequence and
6050                      display_sequence <= l_max_display_sequence ) or display_sequence < 0 );
6051       EXCEPTION
6052          WHEN OTHERS THEN
6053               PA_UTILS.ADD_MESSAGE('PA', 'PA_TASK_SEQ_NUM_ERR');
6054               RAISE FND_API.G_EXC_ERROR;
6055       END;    */
6056 
6057  EXCEPTION
6058     WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
6059        IF p_commit = FND_API.G_TRUE
6060        THEN
6061           ROLLBACK TO Move;
6062        END IF;
6063        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6064        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
6065                                p_procedure_name => 'Move_Task',
6066                                p_error_text     => SUBSTRB(SQLERRM,1,240));
6067        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6068 
6069     WHEN FND_API.G_EXC_ERROR THEN
6070        IF p_commit = FND_API.G_TRUE
6071        THEN
6072           ROLLBACK TO Move;
6073        END IF;
6074        x_return_status := 'E';
6075 
6076      WHEN OTHERS THEN
6077        IF p_commit = FND_API.G_TRUE
6078        THEN
6079           ROLLBACK TO Move;
6080        END IF;
6081        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6082        fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_TASKS_MAINT_PVT',
6083                                p_procedure_name => 'Move_Task',
6084                                p_error_text     => SUBSTRB(SQLERRM,1,240));
6085        RAISE;
6086 
6087  END Move_Task;
6088 --Begin add by rtarway for FP.M development
6089 -- Procedure            : SET_UNSET_FINANCIAL_TASK
6090 -- Type                 : Public Procedure
6091 -- Purpose              : This API will be called from set financial tasks page in financial tab
6092 --                      : This Api is to set unset the financial_task_flag in pa_proj_element_versions table.
6093 
6094 -- Note                 :
6095 --                      :
6096 --                      :
6097 -- Assumptions          :
6098 
6099 -- Parameters                   Type     Required        Description and Purpose
6100 -- ---------------------------  ------   --------        --------------------------------------------------------
6101 -- p_task_version_id            NUMBER   YES             Element Version Id.
6102 -- p_checked_flag               NUMBER   YES             Flag indicating Y/N.
6103 -- p_project_id                 NUMBER   YES             Project ID
6104 PROCEDURE SET_UNSET_FINANCIAL_TASK
6105     (
6106        p_api_version           IN   NUMBER   := 1.0
6107      , p_init_msg_list         IN   VARCHAR2 := FND_API.G_TRUE
6108      , p_commit                IN   VARCHAR2 := FND_API.G_FALSE
6109      , p_validate_only         IN   VARCHAR2 := FND_API.G_FALSE
6110      , p_validation_level      IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL
6111      , p_calling_module        IN   VARCHAR2 := 'SELF_SERVICE'
6112      , p_task_version_id       IN   NUMBER
6113     , p_project_id            IN   NUMBER
6114      , p_checked_flag          IN   VARCHAR2
6115      , p_debug_mode            IN   VARCHAR2 := 'N'
6116      , x_return_status         OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6117      , x_msg_count             OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
6118      , x_msg_data              OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6119    )
6120 IS
6121 
6122 l_msg_count                     NUMBER := 0;
6123 l_data                          VARCHAR2(2000);
6124 l_msg_data                      VARCHAR2(2000);
6125 l_msg_index_out                 NUMBER;
6126 l_debug_mode                    VARCHAR2(1);
6127 l_task_id                       NUMBER;
6128 l_error_msg_code                VARCHAR2(200);
6129 
6130 l_error_code                    NUMBER;
6131 
6132 l_debug_level2                   CONSTANT NUMBER := 2;
6133 l_debug_level3                   CONSTANT NUMBER := 3;
6134 l_debug_level4                   CONSTANT NUMBER := 4;
6135 l_debug_level5                   CONSTANT NUMBER := 5;
6136 
6137 CURSOR c_get_task_id (l_task_version_id NUMBER, l_project_id NUMBER)
6138 IS
6139 SELECT
6140      proj_element_id
6141 FROM
6142      pa_proj_element_versions
6143 WHERE
6144      project_id = l_project_id
6145 AND
6146      element_version_id = l_task_version_id;
6147 
6148 -- Bug 3735089 Added cursor
6149 CURSOR c_task_exists_in_pa_tasks(c_task_id NUMBER)
6150 IS
6151 --SELECT 'Y'
6152 SELECT task_number,task_name   --task_number and task_name added for the Bug 14640666
6153 from pa_tasks
6154 WHERE task_id = c_task_id
6155 and project_id = p_project_id;
6156 
6157 --Bug 3735089
6158 l_task_exists       VARCHAR2(1);
6159 l_user_id               NUMBER;
6160 l_login_id              NUMBER;
6161 --added for the Bug 14640666
6162 --This cursor gets the immediate parent of the passed task version id from the pa_object_relationships
6163 CURSOR c_get_immediate_parent (l_object_id_to1 NUMBER)
6164 IS
6165    SELECT proj_element_id
6166      FROM pa_proj_element_versions ppev,
6167     pa_object_relationships por
6168     WHERE ppev.element_version_id=por.object_id_from1
6169   AND por.relationship_type      ='S'
6170   AND por.relationship_subtype   ='TASK_TO_TASK'
6171   AND por.object_id_to1          = l_object_id_to1;
6172 l_err_stack                          VARCHAR2(630);
6173 l_err_stage                          VARCHAR2(80);
6174 l_task_number   pa_tasks.task_number%type;
6175 l_task_name     pa_tasks.task_number%type;
6176 l_err_message   fnd_new_messages.message_text%type;
6177 --added for the Bug 14640666
6178 
6179 
6180 BEGIN
6181      x_msg_count := 0;
6182      x_return_status := FND_API.G_RET_STS_SUCCESS;
6183 
6184      --Bug 3735089 - instead of fnd_profile.value use fnd_profile.value_specific
6185      --l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6186      l_user_id := fnd_global.user_id;
6187      l_login_id := fnd_global.login_id;
6188      l_debug_mode  := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',l_user_id, l_login_id,275,null,null),'N');
6189 
6190      --l_debug_mode  := NVL(p_debug_mode,'N');
6191      IF l_debug_mode = 'Y' THEN
6192           PA_DEBUG.set_curr_function( p_function   => 'SET_UNSET_FINANCIAL_TASK',
6193                                       p_debug_mode => l_debug_mode );
6194      END IF;
6195 
6196      IF l_debug_mode = 'Y' THEN
6197           Pa_Debug.g_err_stage:= 'PA_TASKS_MAINT_PVT : SET_UNSET_FINANCIAL_TASK : Printing Input parameters';
6198           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6199                                      l_debug_level3);
6200 
6201           Pa_Debug.WRITE(g_pkg_name,'p_task_version_id'||':'||p_task_version_id,
6202                                      l_debug_level3);
6203           Pa_Debug.WRITE(g_pkg_name,'p_checked_flag'||':'||p_checked_flag,
6204                                      l_debug_level3);
6205           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
6206                                      l_debug_level3);
6207      END IF;
6208 
6209      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
6210       FND_MSG_PUB.initialize;
6211      END IF;
6212 
6213      IF (p_commit = FND_API.G_TRUE) THEN
6214        savepoint SET_UNSET_FINANCIAL_TASK_PVT;
6215        --savepoint SET_FIN_FLAG_WRAPPER_PUBLIC; Bug 3735089
6216      END IF;
6217 
6218      IF l_debug_mode = 'Y' THEN
6219           Pa_Debug.g_err_stage:= 'PA_TASKS_MAINT_PVT : SET_UNSET_FINANCIAL_TASK : Validating Input parameters';
6220           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6221                                      l_debug_level3);
6222      END IF;
6223 
6224      IF (
6225           ( p_task_version_id IS NULL ) OR
6226           ( p_checked_flag IS NULL ) OR
6227           ( p_project_id IS NULL)
6228         )
6229      THEN
6230          IF l_debug_mode = 'Y' THEN
6231              Pa_Debug.g_err_stage:= 'PA_TASKS_MAINT_PVT : SET_UNSET_FINANCIAL_TASK : Both p_task_version_id and p_checked_flag are null';
6232              Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6233                                     l_debug_level3);
6234          END IF;
6235          RAISE Invalid_Arg_Exc_WP;
6236      END IF;
6237     --Get the task id for task_version_id
6238     IF (p_checked_flag ='N')
6239     THEN
6240          OPEN  c_get_task_id ( p_task_version_id , p_project_id );
6241          FETCH c_get_task_id INTO l_task_id;
6242          CLOSE c_get_task_id ;
6243 
6244     -- Bug 3735089 Added cursor call , we can add this additionally, currently not needed
6245     -- OPEN c_task_exists_in_pa_tasks(l_task_id);
6246     -- FETCH c_task_exists_in_pa_tasks INTO l_task_exists;
6247         -- CLOSE c_task_exists_in_pa_tasks ;
6248 
6249     -- IF NVL(l_task_exists,'N') ='Y' THEN -- Bug 3735089
6250          --Check if the task has any transaction associated with it
6251          PA_PROJ_ELEMENTS_UTILS.CHECK_TASK_HAS_TRANSACTION
6252          (
6253                 p_task_id               => l_task_id
6254               , p_project_id            => p_project_id -- Added for Performance fix 4903460
6255               , x_return_status         => x_return_status
6256               , x_msg_count             => x_msg_count
6257               , x_msg_data              => x_msg_data
6258               , x_error_msg_code        => l_error_msg_code
6259               , x_error_code            => l_error_code
6260          );
6261 
6262          --l_error_code is > 50 in case of associated transaction and < 0 in case of SQL error
6263          IF (l_error_code <> 0) THEN
6264 
6265 
6266               IF l_debug_mode = 'Y' THEN
6267                   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;
6268                   Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6269                                          l_debug_level3);
6270               END IF;
6271               PA_UTILS.ADD_MESSAGE(
6272                                      p_app_short_name => 'PA'
6273                                    , p_msg_name       => substr(l_error_msg_code,1,30)--bug 3735089 used substr
6274                                   );
6275               RAISE FND_API.G_EXC_ERROR;
6276          END IF;
6277     -- END IF; --NVL(l_task_exists,'N') ='Y' THEN
6278      END IF;
6279    --added for the Bug 14640666
6280 IF (p_checked_flag ='Y') THEN
6281 l_task_id:=null;
6282   OPEN c_get_immediate_parent(p_task_version_id);
6283   FETCH c_get_immediate_parent INTO l_task_id;
6284   IF c_get_immediate_parent%found THEN -- check if the immediate parent is present
6285     OPEN c_task_exists_in_pa_tasks(l_task_id);
6286     FETCH c_task_exists_in_pa_tasks INTO l_task_number,l_task_name;
6287     IF c_task_exists_in_pa_tasks%found THEN -- if the task is present in pa_tasks table, then call pa_task_utils.check_create_subtask_ok
6288       pa_task_utils.check_create_subtask_ok(x_task_id => l_task_id
6289                                           , x_err_code => l_error_code
6290                                           , x_err_stage => l_err_stage
6291                                           , x_err_stack => l_err_stack);
6292       IF (l_error_code <> 0) THEN
6293        l_err_message := FND_MESSAGE.GET_STRING('PA',l_err_stage) ;
6294         PA_UTILS.ADD_MESSAGE (p_app_short_name => 'PA',
6295                               p_msg_name       => 'PA_PS_TASK_NAME_NUM_ERR',
6296                               p_token1         => 'TASK_NAME',
6297                               p_value1         =>  l_task_name,
6298                               p_token2         => 'TASK_NUMBER',
6299                               p_value2         =>  l_task_number,
6300                               p_token3         => 'MESSAGE',
6301                               p_value3         =>  l_err_message);
6302         RAISE FND_API.G_EXC_ERROR;
6303       END IF;
6304     END IF;
6305     CLOSE c_task_exists_in_pa_tasks;
6306   END IF;
6307   CLOSE c_get_immediate_parent;
6308 END IF; --p_checked_flag ='Y'
6309 --added for the Bug 14640666
6310     --Update the table with financial flag
6311     --Not using table handler as only one field needs to be updated.
6312 
6313 
6314     UPDATE
6315      PA_PROJ_ELEMENT_VERSIONS
6316     SET
6317      financial_task_flag = p_checked_flag
6318     WHERE
6319      element_version_id = p_task_version_id
6320     AND
6321      project_id = p_project_id;
6322 
6323 
6324     IF (p_commit = FND_API.G_TRUE) THEN
6325           COMMIT;
6326     END IF;
6327 
6328      -- Bug 3735089 : using reset_curr_function too, just using set_curr_function may overflow it after several recursive calls
6329      -- and it gives ORA 06512 numeric or value error
6330       IF l_debug_mode = 'Y' THEN
6331     Pa_Debug.reset_curr_function;
6332       END IF;
6333 
6334 EXCEPTION
6335 
6336 WHEN FND_API.G_EXC_ERROR THEN
6337 
6338      x_return_status := Fnd_Api.G_RET_STS_ERROR;
6339      l_msg_count := Fnd_Msg_Pub.count_msg;
6340 
6341      IF p_commit = FND_API.G_TRUE THEN
6342        ROLLBACK TO  SET_UNSET_FINANCIAL_TASK_PVT;
6343        --ROLLBACK TO  SET_FIN_FLAG_WRAPPER_PUBLIC; Bug 3735089
6344      END IF;
6345      IF c_get_task_id%ISOPEN THEN
6346         CLOSE c_get_task_id;
6347      END IF;
6348      IF l_msg_count = 1 AND x_msg_data IS NULL
6349       THEN
6350           Pa_Interface_Utils_Pub.get_messages
6351               ( p_encoded        => Fnd_Api.G_TRUE
6352               , p_msg_index      => 1
6353               , p_msg_count      => l_msg_count
6354               , p_msg_data       => l_msg_data
6355               , p_data           => l_data
6356               , p_msg_index_out  => l_msg_index_out);
6357           x_msg_data := l_data;
6358           x_msg_count := l_msg_count;
6359      ELSE
6360           x_msg_count := l_msg_count;
6361      END IF;
6362 
6363      IF l_debug_mode = 'Y' THEN
6364           Pa_Debug.reset_curr_function;
6365      END IF;
6366 
6367 WHEN Invalid_Arg_Exc_WP THEN
6368 
6369      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6370      x_msg_count     := 1;
6371      x_msg_data      := 'PA_TASKS_MAINT_PVT : SET_UNSET_FINANCIAL_TASK : NULL PARAMETERS ARE PASSED OR CURSOR DIDNT RETURN ANY ROWS';
6372 
6373      IF p_commit = FND_API.G_TRUE THEN
6374        ROLLBACK TO  SET_UNSET_FINANCIAL_TASK_PVT;
6375        --ROLLBACK TO  DELETE_MAPPING_PUBLIC; Bug 3735089
6376      END IF;
6377      IF c_get_task_id%ISOPEN THEN
6378         CLOSE c_get_task_id;
6379      END IF;
6380      Fnd_Msg_Pub.add_exc_msg
6381                    ( p_pkg_name        => 'PA_TASKS_MAINT_PVT'
6382                     , p_procedure_name  => 'SET_UNSET_FINANCIAL_TASK'
6383                     , p_error_text      => x_msg_data);
6384 
6385      IF l_debug_mode = 'Y' THEN
6386           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6387           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6388                               l_debug_level5);
6389 
6390           Pa_Debug.reset_curr_function;
6391      END IF;
6392      RAISE;
6393 
6394 WHEN OTHERS THEN
6395 
6396      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6397      x_msg_count     := 1;
6398      x_msg_data      := substr(SQLERRM,1,120);-- Bug 3735089 Added substr
6399 
6400      IF p_commit = FND_API.G_TRUE THEN
6401        ROLLBACK TO  SET_UNSET_FINANCIAL_TASK_PVT;
6402        --ROLLBACK TO  DELETE_MAPPING_PUBLIC; Bug 3735089
6403      END IF;
6404 
6405      IF c_get_task_id%ISOPEN THEN
6406         CLOSE c_get_task_id;
6407      END IF;
6408 
6409      Fnd_Msg_Pub.add_exc_msg
6410                    ( p_pkg_name         => 'PA_TASKS_MAINT_PVT'
6411                     , p_procedure_name  => 'SET_UNSET_FINANCIAL_TASK'
6412                     , p_error_text      => x_msg_data);
6413 
6414      IF l_debug_mode = 'Y' THEN
6415           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6416           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6417                               l_debug_level5);
6418           Pa_Debug.reset_curr_function;
6419      END IF;
6420      RAISE;
6421 END SET_UNSET_FINANCIAL_TASK ;
6422 
6423 -- Procedure            : SYNC_UP_WP_TASKS_WITH_FIN
6424 -- Type                 : Private Procedure
6425 -- Purpose              : This API will be called from SYNC_UP_WP_TASKS_WITH_FIN public
6426 --                      : This API is to Sync up the financial tasks with pa_tasks table
6427 -- Note                 : This API can be called in two modes. One Singular and one All. In both the cases it will assume that
6428 --                      : 1. In Singular case this API will expect the p_task_version_id and p_checked_flag to be passed.
6429 --                      : 2. In All mode, it will expect the p_structre_version_id and p_syncup_all_tasks flag to be passed as
6430 --                      :    'N'. In this mode this API will loop thru all the tasks in the passed structure, get each tasks
6431 --                           financial_task_flag. If flag is Y in database, then check if the task is not present in
6432 --                           pa_tasks. If not present in pa_tasks then create it there. Similarly remove from
6433 --                           pa_tasks if flag is 'N'.
6434 -- Assumptions          : The financial_task_flag is already set in the database.
6435 
6436 -- Parameters                   Type     Required        Description and Purpose
6437 -- ---------------------------  ------   --------        --------------------------------------------------------
6438 -- p_parent_task_version_id    NUMBER     NO             Parent task id of the current task
6439 -- p_patask_record_version_number NUMBER  NO
6440 -- p_project_id                NUMBER     Yes            Project_id of the project being synced up.
6441 -- p_syncup_all_tasks          VARCHAR2   NO             Flag indicating Y/N whether to sync up all the tasks for the given structure version id.
6442 -- p_task_version_id           NUMBER     NO             The single task's version id. This is applicable for singular case.
6443 -- 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.
6444 -- 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.
6445 -- 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
6446 
6447 PROCEDURE SYNC_UP_WP_TASKS_WITH_FIN
6448     (
6449        p_api_version                    IN   NUMBER   := 1.0
6450      , p_init_msg_list                  IN   VARCHAR2 := FND_API.G_TRUE
6451      , p_commit                         IN   VARCHAR2 := FND_API.G_FALSE
6452      , p_validate_only                  IN   VARCHAR2 := FND_API.G_FALSE
6453      , p_validation_level               IN   NUMBER   := FND_API.G_VALID_LEVEL_FULL
6454      , p_calling_module                 IN   VARCHAR2 := 'SELF_SERVICE'
6455      , p_debug_mode                     IN   VARCHAR2 := 'N'
6456      , p_parent_task_version_id         IN   NUMBER   := FND_API.G_MISS_NUM
6457      , p_patask_record_version_number   IN   NUMBER   := FND_API.G_MISS_NUM
6458      , p_project_id                     IN   NUMBER
6459      , p_syncup_all_tasks               IN   VARCHAR2 := 'N'
6460      , p_task_version_id                IN   NUMBER   := FND_API.G_MISS_NUM
6461      , p_structure_version_id           IN   NUMBER   := FND_API.G_MISS_NUM
6462      , p_checked_flag                   IN   VARCHAR2 := FND_API.G_MISS_CHAR
6463      , p_mode                           IN   VARCHAR2 := 'SINGLE'
6464      , x_return_status                  OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6465      , x_msg_count                      OUT  NOCOPY NUMBER --File.Sql.39 bug 4440895
6466      , x_msg_data                       OUT  NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6467    )
6468 IS
6469 l_msg_count                     NUMBER := 0;
6470 l_data                          VARCHAR2(2000);
6471 l_msg_data                      VARCHAR2(2000);
6472 l_msg_index_out                 NUMBER;
6473 l_debug_mode                    VARCHAR2(1);
6474 l_task_id                       NUMBER ;
6475 l_parent_task_id                NUMBER;
6476 l_task_name                     VARCHAR2(240);
6477 l_task_number                   VARCHAR2(100);
6478 --l_display_seq                   NUMBER;
6479 l_carrying_out_organization_id  NUMBER;
6480 l_task_version_id               NUMBER;
6481 l_patask_record_version_number  NUMBER;
6482 l_debug_level2                   CONSTANT NUMBER := 2;
6483 l_debug_level3                   CONSTANT NUMBER := 3;
6484 l_debug_level4                   CONSTANT NUMBER := 4;
6485 l_debug_level5                   CONSTANT NUMBER := 5;
6486 
6487 --This cursor will give the element id corresponding to a element version id
6488 CURSOR c_get_task_id (l_element_version_id NUMBER, l_project_id NUMBER)
6489 IS
6490 SELECT
6491 proj_element_id
6492 FROM
6493 pa_proj_element_versions
6494 WHERE
6495      element_version_id = l_element_version_id
6496 AND
6497      project_id = l_project_id;
6498 --This cursor will return name and number for a particular element
6499 CURSOR c_get_task_name_and_number (l_element_id NUMBER, l_project_id NUMBER)
6500 IS
6501 SELECT
6502 name, element_number
6503 FROM
6504 pa_proj_elements
6505 WHERE
6506      proj_element_id = l_element_id
6507 AND
6508      project_id = l_project_id;
6509 
6510 --This cursor gets the immediate parent's task id for the passed task version id.
6511 CURSOR c_get_immediate_parent_task_id (l_object_id_to1 NUMBER, l_project_id NUMBER)
6512 IS
6513 SELECT
6514      elever.proj_element_id
6515 FROM
6516        pa_proj_element_versions elever
6517      , pa_object_relationships obRel
6518 WHERE
6519      obRel.relationship_type ='S'
6520 AND
6521      obRel.relationship_subtype ='TASK_TO_TASK'
6522 AND
6523      obRel.OBJECT_ID_TO1 =  l_object_id_to1
6524 AND
6525      elever.element_version_id=obRel.OBJECT_ID_FROM1
6526 AND
6527      elever.project_id = l_project_id;
6528 
6529 --This cursor returns name and number of a particular element, using element_version_id
6530 CURSOR c_get_task_name_number_frm_ver (l_element_version_id NUMBER, l_project_id NUMBER)
6531 IS
6532 SELECT
6533        elements.name
6534      , elements.element_number
6535 
6536 FROM
6537        pa_proj_elements elements
6538      , pa_proj_element_versions elever
6539 WHERE
6540        elever.element_version_id = l_element_version_id
6541 AND
6542        elever.project_id = l_project_id
6543 AND
6544        elements.proj_element_id = elever.proj_element_id
6545 AND
6546        elements.project_id = elever.project_id;
6547 
6548 --This curosr returns the record version number from pa_tasks for row containig passed task id.
6549 CURSOR c_get_pa_record_version_number (l_task_id NUMBER , l_project_id NUMBER)
6550 IS
6551 SELECT
6552      record_version_number
6553 FROM
6554      PA_TASKS
6555 WHERE
6556      task_id = l_task_id
6557 AND
6558      project_id = l_project_id;
6559 
6560 CURSOR c_get_all_tasks_in_structure(l_structure_version_id NUMBER, l_project_id NUMBER)
6561 IS
6562 SELECT
6563       element_version_id
6564      ,financial_task_flag
6565 FROM
6566      pa_proj_element_versions
6567 WHERE
6568      parent_structure_version_id = l_structure_version_id
6569 AND
6570      object_type='PA_TASKS'
6571 AND
6572      project_id = l_project_id;
6573 
6574 --Bug 3735089
6575 l_user_id                 NUMBER;
6576 l_login_id                 NUMBER;
6577 
6578 
6579 BEGIN
6580      x_msg_count := 0;
6581      x_return_status := FND_API.G_RET_STS_SUCCESS;
6582 
6583      --Bug 3735089 - instead of fnd_profile.value use fnd_profile.value_specific
6584      --l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
6585      l_user_id := fnd_global.user_id;
6586      l_login_id := fnd_global.login_id;
6587      l_debug_mode  := NVL(FND_PROFILE.value_specific('PA_DEBUG_MODE',l_user_id, l_login_id,275,null,null),'N');
6588 
6589      --l_debug_mode  := NVL(p_debug_mode,'N');
6590      IF l_debug_mode = 'Y' THEN
6591          PA_DEBUG.set_curr_function( p_function   => 'SYNC_UP_WP_TASKS_WITH_FIN',
6592                                       p_debug_mode => l_debug_mode );
6593      END IF;
6594 
6595      IF l_debug_mode = 'Y' THEN
6596           Pa_Debug.g_err_stage:= 'PA_TASKS_MAINT_PVT : SYNC_UP_WP_TASKS_WITH_FIN : Printing Input parameters';
6597           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6598                                      l_debug_level3);
6599 
6600           Pa_Debug.WRITE(g_pkg_name,'p_project_id  '||':'||p_project_id  ,
6601                                      l_debug_level3);
6602           Pa_Debug.WRITE(g_pkg_name,'p_syncup_all_tasks'||':'||p_syncup_all_tasks,
6603                                      l_debug_level3);
6604           Pa_Debug.WRITE(g_pkg_name,'p_task_version_id'||':'|| p_task_version_id   ,
6605                                      l_debug_level3);
6606           Pa_Debug.WRITE(g_pkg_name,'p_structure_version_id'||':'|| p_structure_version_id,
6607                                      l_debug_level3);
6608           Pa_Debug.WRITE(g_pkg_name,'p_checked_flag '||':'||p_checked_flag ,
6609                                      l_debug_level3);
6610           Pa_Debug.WRITE(g_pkg_name,'p_mode'||':'||p_mode,
6611                                      l_debug_level3);
6612           Pa_Debug.WRITE(g_pkg_name,'p_parent_task_version_id'||':'||p_parent_task_version_id,
6613                                      l_debug_level3);
6614      END IF;
6615 
6616      IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_TRUE)) THEN
6617       FND_MSG_PUB.initialize;
6618      END IF;
6619 
6620      IF (p_commit = FND_API.G_TRUE) THEN
6621       --savepoint SET_FIN_FLAG_WRAPPER_PUBLIC; Bug 3735089
6622       savepoint SYNC_UP_WP_TASKS_WITH_FIN_PVT;
6623      END IF;
6624      --get carrying_out_organization_id
6625       l_carrying_out_organization_id := PA_DELIVERABLE_UTILS.GET_CARRYING_OUT_ORG
6626       (
6627           p_project_id   => p_project_id
6628           ,p_task_id      => l_task_id
6629       );
6630      --If p_mode is single, and p_checked_flag is 'N', delete the task
6631      -- if p_mode is 'Y', and task is not in PA_TASKS, create the new task
6632      IF ( p_mode = 'SINGLE' )
6633      THEN
6634 
6635           IF (p_checked_flag='N')
6636           THEN
6637 
6638                OPEN c_get_task_id ( p_task_version_id , p_project_id );
6639                FETCH c_get_task_id INTO l_task_id;
6640                CLOSE c_get_task_id;
6641                IF (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)='Y')
6642                THEN
6643 
6644 
6645                    PA_TASKS_MAINT_PUB.DELETE_TASK
6646                    (
6647                           p_commit                => p_commit
6648                         , p_init_msg_list         => FND_API.G_FALSE
6649                         , p_calling_module        => p_calling_module
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 => p_patask_record_version_number
6654                         , p_wbs_record_version_number => 1 --parameter not used anywhere in PA_TASKS_MAINT_PUB.DELETE_TASK,pass any dummy value
6655                         , x_return_status         => x_return_status
6656                         , x_msg_count             => x_msg_count
6657                         , x_msg_data              => x_msg_data
6658                    );
6659 
6660 
6661                     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
6662                     THEN
6663                          RAISE FND_API.G_EXC_ERROR;
6664                     END IF;
6665                END IF;
6666 
6667           ELSIF (p_checked_flag='Y')
6668           THEN
6669                OPEN c_get_task_id ( p_task_version_id , p_project_id );
6670                FETCH c_get_task_id INTO l_task_id;
6671                CLOSE c_get_task_id;
6672                --get carrying_out_organization_id
6673                l_carrying_out_organization_id := PA_DELIVERABLE_UTILS.GET_CARRYING_OUT_ORG
6674                (
6675                      p_project_id   => p_project_id
6676                     ,p_task_id      => l_task_id
6677                );
6678                IF (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)='N')
6679                THEN
6680                     --Get the task id for the parent_task_version_id
6681                     OPEN  c_get_task_id ( p_parent_task_version_id , p_project_id );
6682                     FETCH c_get_task_id INTO l_parent_task_id;
6683                     CLOSE c_get_task_id;
6684                     --Get the task name from pa_proj_elements
6685                     OPEN  c_get_task_name_and_number ( l_task_id , p_project_id );
6686                     FETCH c_get_task_name_and_number INTO l_task_name, l_task_number;
6687                     CLOSE c_get_task_name_and_number ;
6688 
6689                    PA_TASKS_MAINT_PUB.CREATE_TASK
6690                    (
6691                          p_commit                 => p_commit
6692                         ,p_calling_module         => p_calling_module
6693                         ,p_init_msg_list          => FND_API.G_FALSE
6694                         ,p_debug_mode             => l_debug_mode
6695                         ,p_project_id             => p_project_id
6696                         ,p_reference_task_id      => l_parent_task_id
6697                         ,p_peer_or_sub            => 'SUB'
6698                         ,p_task_number            => l_task_number
6699                         ,p_task_name              => l_task_name
6700                         ,p_task_id                => l_task_id
6701                         ,p_wbs_record_version_number => 1--parameter not used anywhere in PA_TASKS_MAINT_PUB.DELETE_TASK,pass any dummy value
6702                         ,p_carrying_out_organization_id => l_carrying_out_organization_id
6703                         --,x_display_seq            => l_display_seq
6704                         ,x_return_status          => x_return_status
6705                         ,x_msg_count              => x_msg_count
6706                         ,x_msg_data               => x_msg_data
6707                    );
6708                    IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
6709                    THEN
6710                         RAISE FND_API.G_EXC_ERROR;
6711                    END IF;
6712 
6713                END IF;
6714           END IF;
6715      --If p_mode is ALL, get all the tasks for the passed structure id
6716      -- For each task
6717      -- If p_mode is 'N' delete the task
6718      -- if p_mode is 'Y', and task is not in PA_TASKS, create the new task
6719      ELSIF ( p_mode = 'ALL' )
6720      THEN
6721           OPEN  c_get_pa_record_version_number ( l_task_id , p_project_id);
6722           FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
6723           CLOSE c_get_pa_record_version_number;
6724 
6725           FOR iCounter IN c_get_all_tasks_in_structure (p_structure_version_id , p_project_id) LOOP
6726 
6727               --initialize all values to null here
6728               l_task_id := null;
6729               l_task_version_id := null;
6730               l_parent_task_id := null;
6731               l_task_name := null;
6732               l_task_number := null;
6733 
6734               --FETCH c_get_all_tasks_in_structure INTO l_task_version_id;
6735               l_task_version_id := iCounter.element_version_id;
6736 --commented by hsiu: incorrect cursor
6737 --              l_task_version_id := cursor_rec.element_version_id;
6738               OPEN  c_get_task_id ( l_task_version_id , p_project_id );
6739               FETCH c_get_task_id INTO l_task_id;
6740               CLOSE c_get_task_id;
6741 --Check_is_financial_task will return 'Y' when data is there is PA_TASKS
6742                     IF (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)='Y' AND iCounter.financial_task_flag='N' )
6743                     THEN
6744                          PA_TASKS_MAINT_PUB.DELETE_TASK
6745                          (
6746                                p_commit                => p_commit
6747                              , p_calling_module        => p_calling_module
6748                              , p_init_msg_list         => FND_API.G_FALSE
6749                              , p_debug_mode            => l_debug_mode
6750                              , p_project_id            => p_project_id
6751                              , p_task_id               => l_task_id
6752                              , p_record_version_number => l_patask_record_version_number
6753                              --, p_called_from_api       => p_called_from_api
6754                              , p_wbs_record_version_number => 1 --parameter not used anywhere in PA_TASKS_MAINT_PUB.DELETE_TASK,pass any dummy value
6755                              , x_return_status         => x_return_status
6756                              , x_msg_count             => x_msg_count
6757                              , x_msg_data              => x_msg_data
6758                          );
6759                          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
6760                          THEN
6761                               RAISE FND_API.G_EXC_ERROR;
6762                          END IF;
6763 
6764                     ELSIF (PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_task_id)='N' AND iCounter.financial_task_flag='Y')
6765                     THEN
6766                          --Get the task id for the parent_task_version_id
6767                          OPEN  c_get_immediate_parent_task_id ( l_task_version_id , p_project_id );
6768                          FETCH c_get_immediate_parent_task_id INTO l_parent_task_id;
6769                          CLOSE c_get_immediate_parent_task_id;
6770                          --Get the task name from pa_proj_elements
6771                          OPEN  c_get_task_name_number_frm_ver ( l_task_version_id, p_project_id );
6772                          FETCH c_get_task_name_number_frm_ver INTO l_task_name, l_task_number;
6773                          CLOSE c_get_task_name_number_frm_ver ;
6774 
6775 
6776                          PA_TASKS_MAINT_PUB.CREATE_TASK
6777                          (
6778                               p_commit                 => p_commit
6779                              ,p_calling_module         => p_calling_module
6780                              ,p_init_msg_list          => FND_API.G_FALSE
6781                              ,p_validate_only          => p_validate_only
6782                              ,p_debug_mode             => l_debug_mode
6783                              ,p_project_id             => p_project_id
6784                              ,p_reference_task_id      => l_parent_task_id
6785                              ,p_peer_or_sub            => 'SUB'
6786                              ,p_task_number            => l_task_number
6787                              ,p_task_name              => l_task_name
6788                              ,p_task_id                => l_task_id
6789                              ,p_wbs_record_version_number => 1--parameter not used anywhere in PA_TASKS_MAINT_PUB.DELETE_TASK,pass any dummy value
6790                              ,p_carrying_out_organization_id => l_carrying_out_organization_id
6791                              --,x_display_seq            => l_display_seq
6792                              ,x_return_status          =>x_return_status
6793                              ,x_msg_count              =>x_msg_count
6794                              ,x_msg_data               =>x_msg_data
6795                          );
6796                          IF (x_return_status <> FND_API.G_RET_STS_SUCCESS)
6797                          THEN
6798                               RAISE FND_API.G_EXC_ERROR;
6799                          END IF;
6800                     END IF;
6801           END LOOP;
6802      END IF;
6803 
6804      IF (p_commit = FND_API.G_TRUE) THEN
6805        COMMIT;
6806      END IF;
6807 
6808      -- Bug 3735089 : using reset_curr_function too, just using set_curr_function may overflow it after several recursive calls
6809      -- and it gives ORA 06512 numeric or value error
6810       IF l_debug_mode = 'Y' THEN
6811     Pa_Debug.reset_curr_function;
6812       END IF;
6813 
6814 EXCEPTION
6815 
6816 WHEN FND_API.G_EXC_ERROR THEN
6817 
6818      x_return_status := Fnd_Api.G_RET_STS_ERROR;
6819      l_msg_count := Fnd_Msg_Pub.count_msg;
6820 
6821      IF p_commit = FND_API.G_TRUE THEN
6822       --ROLLBACK TO  SET_FIN_FLAG_WRAPPER_PUBLIC; Bug 3735089
6823       ROLLBACK TO  SYNC_UP_WP_TASKS_WITH_FIN_PVT;
6824      END IF;
6825 
6826      IF c_get_task_id%ISOPEN THEN
6827         CLOSE c_get_task_id;
6828      END IF;
6829      IF c_get_task_name_and_number%ISOPEN THEN
6830         CLOSE c_get_task_name_and_number;
6831      END IF;
6832      IF c_get_immediate_parent_task_id%ISOPEN THEN
6833         CLOSE c_get_immediate_parent_task_id;
6834      END IF;
6835      IF c_get_task_name_number_frm_ver%ISOPEN THEN
6836         CLOSE c_get_task_name_number_frm_ver;
6837      END IF;
6838      IF c_get_pa_record_version_number%ISOPEN THEN
6839         CLOSE c_get_pa_record_version_number;
6840      END IF;
6841 
6842      IF l_msg_count = 1 AND x_msg_data IS NULL
6843       THEN
6844           Pa_Interface_Utils_Pub.get_messages
6845               ( p_encoded        => Fnd_Api.G_TRUE
6846               , p_msg_index      => 1
6847               , p_msg_count      => l_msg_count
6848               , p_msg_data       => l_msg_data
6849               , p_data           => l_data
6850               , p_msg_index_out  => l_msg_index_out);
6851           x_msg_data := l_data;
6852           x_msg_count := l_msg_count;
6853      ELSE
6854           x_msg_count := l_msg_count;
6855      END IF;
6856 
6857      IF l_debug_mode = 'Y' THEN
6858           Pa_Debug.reset_curr_function;
6859      END IF;
6860 
6861 WHEN Invalid_Arg_Exc_WP THEN
6862 
6863      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6864      x_msg_count     := 1;
6865      x_msg_data      := 'PA_TASKS_MAINT_PVT : SYNC_UP_WP_TASKS_WITH_FIN : NULL PARAMETERS ARE PASSED OR CURSOR DIDNT RETURN ANY ROWS';
6866 
6867      IF p_commit = FND_API.G_TRUE THEN
6868         --ROLLBACK TO  DELETE_MAPPING_PUBLIC; Bug 3735089
6869         ROLLBACK TO  SYNC_UP_WP_TASKS_WITH_FIN_PVT;
6870      END IF;
6871      IF c_get_task_id%ISOPEN THEN
6872         CLOSE c_get_task_id;
6873      END IF;
6874      IF c_get_task_name_and_number%ISOPEN THEN
6875         CLOSE c_get_task_name_and_number;
6876      END IF;
6877      IF c_get_immediate_parent_task_id%ISOPEN THEN
6878         CLOSE c_get_immediate_parent_task_id;
6879      END IF;
6880      IF c_get_task_name_number_frm_ver%ISOPEN THEN
6881         CLOSE c_get_task_name_number_frm_ver;
6882      END IF;
6883      IF c_get_pa_record_version_number%ISOPEN THEN
6884         CLOSE c_get_pa_record_version_number;
6885      END IF;
6886      Fnd_Msg_Pub.add_exc_msg
6887                    ( p_pkg_name        => 'PA_TASKS_MAINT_PVT'
6888                     , p_procedure_name  => 'SYNC_UP_WP_TASKS_WITH_FIN'
6889                     , p_error_text      => x_msg_data);
6890 
6891      IF l_debug_mode = 'Y' THEN
6892           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6893           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6894                               l_debug_level5);
6895       Pa_Debug.reset_curr_function;
6896      END IF;
6897      RAISE;
6898 
6899 WHEN OTHERS THEN
6900 
6901      x_return_status := Fnd_Api.G_RET_STS_UNEXP_ERROR;
6902      x_msg_count     := 1;
6903      x_msg_data      := substr(SQLERRM,1,120);-- Bug 3735089 Added substr
6904      IF p_commit = FND_API.G_TRUE THEN
6905         --ROLLBACK TO  DELETE_MAPPING_PUBLIC; Bug 3735089
6906         ROLLBACK TO  SYNC_UP_WP_TASKS_WITH_FIN_PVT;
6907      END IF;
6908 
6909      IF c_get_task_id%ISOPEN THEN
6910         CLOSE c_get_task_id;
6911      END IF;
6912      IF c_get_task_name_and_number%ISOPEN THEN
6913         CLOSE c_get_task_name_and_number;
6914      END IF;
6915      IF c_get_immediate_parent_task_id%ISOPEN THEN
6916         CLOSE c_get_immediate_parent_task_id;
6917      END IF;
6918      IF c_get_task_name_number_frm_ver%ISOPEN THEN
6919         CLOSE c_get_task_name_number_frm_ver;
6920      END IF;
6921      IF c_get_pa_record_version_number%ISOPEN THEN
6922         CLOSE c_get_pa_record_version_number;
6923      END IF;
6924      Fnd_Msg_Pub.add_exc_msg
6925                    ( p_pkg_name         => 'PA_TASKS_MAINT_PVT'
6926                     , p_procedure_name  => 'SYNC_UP_WP_TASKS_WITH_FIN'
6927                     , p_error_text      => x_msg_data);
6928 
6929      IF l_debug_mode = 'Y' THEN
6930           Pa_Debug.g_err_stage:= 'Unexpected Error'||x_msg_data;
6931           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
6932                               l_debug_level5);
6933 
6934           Pa_Debug.reset_curr_function;
6935      END IF;
6936      RAISE;
6937 END SYNC_UP_WP_TASKS_WITH_FIN ;
6938 
6939 --End add by rtarway for FP.M development
6940 
6941 end PA_TASKS_MAINT_PVT;