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