[Home] [Help]
PACKAGE BODY: APPS.PA_ASSIGNMENTS_PUB
Source
1 PACKAGE BODY pa_assignments_pub AS
2 /*$Header: PARAPUBB.pls 120.28 2011/11/24 11:28:15 krkondur ship $*/
3 --
4
5 P_DEBUG_MODE varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N'); /* Added Debug Profile Option variable initialization for bug#2674619 */
6 li_message_level NUMBER := 1;
7
8 PROCEDURE Execute_Create_Assignment
9 ( p_asgn_creation_mode IN VARCHAR2 := 'FULL'
10 ,p_unfilled_assignment_status IN pa_project_assignments.status_code%TYPE := FND_API.G_MISS_CHAR
11 ,p_assignment_name IN pa_project_assignments.assignment_name%TYPE := FND_API.G_MISS_CHAR
12 ,p_assignment_type IN pa_project_assignments.assignment_type%TYPE := FND_API.G_MISS_CHAR
13 ,p_multiple_status_flag IN pa_project_assignments.multiple_status_flag%TYPE := FND_API.G_MISS_CHAR
14 ,p_status_code IN pa_project_assignments.status_code%TYPE := FND_API.G_MISS_CHAR
15 ,p_staffing_priority_code IN pa_project_assignments.staffing_priority_code%TYPE := FND_API.G_MISS_CHAR
16 ,p_project_id IN pa_project_assignments.project_id%TYPE := FND_API.G_MISS_NUM
17 ,p_assignment_template_id IN pa_project_assignments.assignment_template_id%TYPE := FND_API.G_MISS_NUM
18 ,p_project_role_id IN pa_project_assignments.project_role_id%TYPE := FND_API.G_MISS_NUM
19 ,p_role_list_id IN pa_role_lists.role_list_id%TYPE := FND_API.G_MISS_NUM
20 ,p_resource_id IN pa_resources.resource_id%TYPE := FND_API.G_MISS_NUM
21 ,p_project_party_id IN pa_project_assignments.project_party_id%TYPE := FND_API.G_MISS_NUM
22 ,p_project_subteam_id IN pa_project_subteams.project_subteam_id%TYPE := FND_API.G_MISS_NUM
23 ,p_description IN pa_project_assignments.description%TYPE := FND_API.G_MISS_CHAR
24 ,p_start_date IN pa_project_assignments.start_date%TYPE := FND_API.G_MISS_DATE
25 ,p_end_date IN pa_project_assignments.end_date%TYPE := FND_API.G_MISS_DATE
26 ,p_assignment_effort IN pa_project_assignments.assignment_effort%TYPE := FND_API.G_MISS_NUM
27 ,p_extension_possible IN pa_project_assignments.extension_possible%TYPE := FND_API.G_MISS_CHAR
28 ,p_source_assignment_id IN pa_project_assignments.source_assignment_id%TYPE := FND_API.G_MISS_NUM
29 ,p_min_resource_job_level IN pa_project_assignments.min_resource_job_level%TYPE := FND_API.G_MISS_NUM
30 ,p_max_resource_job_level IN pa_project_assignments.max_resource_job_level%TYPE := FND_API.G_MISS_NUM
31 ,p_additional_information IN pa_project_assignments.additional_information%TYPE := FND_API.G_MISS_CHAR
32 ,p_location_id IN pa_project_assignments.location_id%TYPE := FND_API.G_MISS_NUM
33 ,p_work_type_id IN pa_project_assignments.work_type_id%TYPE := FND_API.G_MISS_NUM
34 ,p_revenue_currency_code IN pa_project_assignments.revenue_currency_code%TYPE := FND_API.G_MISS_CHAR
35 ,p_revenue_bill_rate IN pa_project_assignments.revenue_bill_rate%TYPE := FND_API.G_MISS_NUM
36 ,p_markup_percent IN pa_project_assignments.markup_percent%TYPE := FND_API.G_MISS_NUM
37 ,p_expense_owner IN pa_project_assignments.expense_owner%TYPE := FND_API.G_MISS_CHAR
38 ,p_expense_limit IN pa_project_assignments.expense_limit%TYPE := FND_API.G_MISS_NUM
39 ,p_expense_limit_currency_code IN pa_project_assignments.expense_limit_currency_code%TYPE := FND_API.G_MISS_CHAR
40 ,p_fcst_tp_amount_type IN pa_project_assignments.fcst_tp_amount_type%TYPE := FND_API.G_MISS_CHAR
41 ,p_fcst_job_id IN pa_project_assignments.fcst_job_id%TYPE := FND_API.G_MISS_NUM
42 ,p_fcst_job_group_id IN pa_project_assignments.fcst_job_group_id%TYPE := FND_API.G_MISS_NUM
43 ,p_expenditure_org_id IN pa_project_assignments.expenditure_org_id%TYPE := FND_API.G_MISS_NUM
44 ,p_expenditure_organization_id IN pa_project_assignments.expenditure_organization_id%TYPE := FND_API.G_MISS_NUM
45 ,p_expenditure_type_class IN pa_project_assignments.expenditure_type_class%TYPE := FND_API.G_MISS_CHAR
46 ,p_expenditure_type IN pa_project_assignments.expenditure_type%TYPE := FND_API.G_MISS_CHAR
47 ,p_calendar_type IN pa_project_assignments.calendar_type%TYPE := FND_API.G_MISS_CHAR
48 ,p_calendar_id IN pa_project_assignments.calendar_id%TYPE := FND_API.G_MISS_NUM
49 ,p_resource_calendar_percent IN pa_project_assignments.resource_calendar_percent%TYPE := FND_API.G_MISS_NUM
50 ,p_project_name IN pa_projects_all.name%TYPE := FND_API.G_MISS_CHAR
51 ,p_project_number IN pa_projects_all.segment1%TYPE := FND_API.G_MISS_CHAR
52 ,p_resource_name IN pa_resources.name%TYPE := FND_API.G_MISS_CHAR
53 ,p_resource_source_id IN NUMBER := FND_API.G_MISS_NUM
54 ,p_project_subteam_name IN pa_project_subteams.name%TYPE := FND_API.G_MISS_CHAR
55 ,p_project_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
56 ,p_staffing_priority_name IN pa_lookups.meaning%TYPE := FND_API.G_MISS_CHAR
57 ,p_project_role_name IN pa_project_role_types.meaning%TYPE := FND_API.G_MISS_CHAR
58 ,p_location_city IN pa_locations.city%TYPE := FND_API.G_MISS_CHAR
59 ,p_location_region IN pa_locations.region%TYPE := FND_API.G_MISS_CHAR
60 ,p_location_country_name IN fnd_territories_tl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
61 ,p_location_country_code IN pa_locations.country_code%TYPE := FND_API.G_MISS_CHAR
62 ,p_calendar_name IN jtf_calendars_tl.calendar_name%TYPE := FND_API.G_MISS_CHAR
63 ,p_work_type_name IN pa_work_types_vl.name%TYPE := FND_API.G_MISS_CHAR
64 ,p_fcst_job_name IN per_jobs.name%TYPE := FND_API.G_MISS_CHAR
65 ,p_fcst_job_group_name IN per_job_groups.displayed_name%TYPE := FND_API.G_MISS_CHAR
66 ,p_expenditure_org_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
67 ,p_exp_organization_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
68 ,p_adv_action_set_id IN NUMBER := FND_API.G_MISS_NUM
69 ,p_start_adv_action_set_flag IN VARCHAR2 := FND_API.G_MISS_CHAR
70 ,p_adv_action_set_name IN pa_action_sets.action_set_name%TYPE := FND_API.G_MISS_CHAR
71 ,p_bill_rate_override IN pa_project_assignments.bill_rate_override%TYPE := FND_API.G_MISS_NUM
72 ,p_bill_rate_curr_override IN pa_project_assignments.bill_rate_curr_override%TYPE := FND_API.G_MISS_CHAR
73 ,p_markup_percent_override IN pa_project_assignments.markup_percent_override%TYPE := FND_API.G_MISS_NUM
74 ,p_discount_percentage IN pa_project_assignments.discount_percentage%TYPE := FND_API.G_MISS_NUM
75 ,p_rate_disc_reason_code IN pa_project_assignments.rate_disc_reason_code%TYPE := FND_API.G_MISS_CHAR
76 ,p_tp_rate_override IN pa_project_assignments.tp_rate_override%TYPE := FND_API.G_MISS_NUM
77 ,p_tp_currency_override IN pa_project_assignments.tp_currency_override%TYPE := FND_API.G_MISS_CHAR
78 ,p_tp_calc_base_code_override IN pa_project_assignments.tp_calc_base_code_override%TYPE := FND_API.G_MISS_CHAR
79 ,p_tp_percent_applied_override IN pa_project_assignments.tp_percent_applied_override%TYPE := FND_API.G_MISS_NUM
80 ,p_staffing_owner_person_id IN pa_project_assignments.staffing_owner_person_id%TYPE := FND_API.G_MISS_NUM
81 ,p_staffing_owner_name IN per_people_f.full_name%TYPE := FND_API.G_MISS_CHAR
82 ,p_resource_list_member_id IN pa_project_assignments.resource_list_member_id%TYPE := FND_API.G_MISS_NUM
83 ,p_sum_tasks_flag IN VARCHAR2 := FND_API.G_FALSE -- FP.M Development
84 ,p_budget_version_id IN pa_resource_assignments.budget_version_id%TYPE := FND_API.G_MISS_NUM
85 ,p_attribute_category IN pa_project_assignments.attribute_category%TYPE := FND_API.G_MISS_CHAR
86 ,p_attribute1 IN pa_project_assignments.attribute1%TYPE := FND_API.G_MISS_CHAR
87 ,p_attribute2 IN pa_project_assignments.attribute2%TYPE := FND_API.G_MISS_CHAR
88 ,p_attribute3 IN pa_project_assignments.attribute3%TYPE := FND_API.G_MISS_CHAR
89 ,p_attribute4 IN pa_project_assignments.attribute4%TYPE := FND_API.G_MISS_CHAR
90 ,p_attribute5 IN pa_project_assignments.attribute5%TYPE := FND_API.G_MISS_CHAR
91 ,p_attribute6 IN pa_project_assignments.attribute6%TYPE := FND_API.G_MISS_CHAR
92 ,p_attribute7 IN pa_project_assignments.attribute7%TYPE := FND_API.G_MISS_CHAR
93 ,p_attribute8 IN pa_project_assignments.attribute8%TYPE := FND_API.G_MISS_CHAR
94 ,p_attribute9 IN pa_project_assignments.attribute9%TYPE := FND_API.G_MISS_CHAR
95 ,p_attribute10 IN pa_project_assignments.attribute10%TYPE := FND_API.G_MISS_CHAR
96 ,p_attribute11 IN pa_project_assignments.attribute11%TYPE := FND_API.G_MISS_CHAR
97 ,p_attribute12 IN pa_project_assignments.attribute12%TYPE := FND_API.G_MISS_CHAR
98 ,p_attribute13 IN pa_project_assignments.attribute13%TYPE := FND_API.G_MISS_CHAR
99 ,p_attribute14 IN pa_project_assignments.attribute14%TYPE := FND_API.G_MISS_CHAR
100 ,p_attribute15 IN pa_project_assignments.attribute15%TYPE := FND_API.G_MISS_CHAR
101 ,p_number_of_requirements IN NUMBER := 1
102 ,p_api_version IN NUMBER := 1.0
103 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
104 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
105 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
106 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
107 -- 5130421 Begin
108 ,p_comp_match_weighting IN pa_project_assignments.competence_match_weighting%TYPE := FND_API.G_MISS_NUM
109 ,p_avail_match_weighting IN pa_project_assignments.availability_match_weighting%TYPE := FND_API.G_MISS_NUM
110 ,p_job_level_match_weighting IN pa_project_assignments.job_level_match_weighting%TYPE := FND_API.G_MISS_NUM
111 ,p_search_min_availability IN pa_project_assignments.search_min_availability%TYPE := FND_API.G_MISS_NUM
112 ,p_search_country_code IN pa_project_assignments.search_country_code%TYPE := FND_API.G_MISS_CHAR
113 ,p_search_exp_org_struct_ver_id IN pa_project_assignments.search_exp_org_struct_ver_id%TYPE := FND_API.G_MISS_NUM
114 ,p_search_exp_start_org_id IN pa_project_assignments.search_exp_start_org_id%TYPE := FND_API.G_MISS_NUM
115 ,p_search_min_candidate_score IN pa_project_assignments.search_min_candidate_score%TYPE := FND_API.G_MISS_NUM
116 ,p_enable_auto_cand_nom_flag IN pa_project_assignments.enable_auto_cand_nom_flag%TYPE := FND_API.G_MISS_CHAR
117 -- 5130421 End
118 ,x_new_assignment_id_tbl OUT NOCOPY system.pa_num_tbl_type --File.Sql.39 bug 4440895
119 ,x_new_assignment_id OUT NOCOPY pa_project_assignments.assignment_id%TYPE --File.Sql.39 bug 4440895
120 ,x_assignment_number OUT NOCOPY pa_project_assignments.assignment_number%TYPE --File.Sql.39 bug 4440895
121 ,x_assignment_row_id OUT NOCOPY ROWID --File.Sql.39 bug 4440895
122 ,x_resource_id OUT NOCOPY pa_resources.resource_id%TYPE --File.Sql.39 bug 4440895
123 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
124 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
125 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
126 )
127 IS
128
129 l_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
130 l_return_status VARCHAR2(1);
131 /*Added for the bug 3464074*/
132 l_person_name PER_PEOPLE_F.full_name%TYPE;
133 l_error_message_code fnd_new_messages.message_name%TYPE;
134 l_work_type_exixts varchar2(1) := 'N'; --bug#8368384
135
136 -- start of cursor or work type validation bug 8368384
137 CURSOR c_validate_work_type (p_wrk_typ_id number,p_start_dt Date, p_end_dt Date) IS
138 SELECT 'Y' Flag
139 FROM PA_WORK_TYPES_B B
140 WHERE B.work_type_id = p_wrk_typ_id
141 AND TRUNC(SYSDATE) BETWEEN start_date_active
142 AND NVL(end_date_active,TRUNC(SYSDATE));
143 BEGIN
144
145 -- Initialize the Error Stack
146 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Exceute_Create_Assignment');
147
148 -- Initialize the return status to success
149 x_return_status := FND_API.G_RET_STS_SUCCESS;
150
151 --Clear the global PL/SQL message table
152 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
153
154 FND_MSG_PUB.initialize;
155 END IF;
156
157 --Log Message
158 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
159 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exceute_Create_Assignment.begin'
160 ,x_msg => 'Beginning of the Execute_Create_Assignment'
161 ,x_log_level => 5);
162 END IF;
163 /*
164 changes start for bug#8368384
165 */
166
167 OPEN c_validate_work_type(p_work_type_id,p_start_date,p_end_date);
168 FETCH c_validate_work_type into l_work_type_exixts;
169 close c_validate_work_type;
170
171 IF l_work_type_exixts='Y' then
172
173 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exceute_Create_Assignment.begin'
174 ,x_msg => 'Work type is valid'
175 ,x_log_level => 5);
176 ELSE
177 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exceute_Create_Assignment.begin'
178 ,x_msg => 'Work type is not valid'
179 ,x_log_level => 5);
180
181 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
182 ,p_msg_name => 'PA_INVALID_WORK_TYPE');
183 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
184
185
186 END IF;
187
188 /*
189 changes end for bug#8368384
190 */
191 --
192 -- Assign the scalar parameters to the assignment record fields
193 --
194 --p_rate_disc_reason_code = FND_API.G_MISS_CHAR or
195
196
197 l_assignment_rec.assignment_name := p_assignment_name;
198 l_assignment_rec.assignment_type := p_assignment_type;
199 l_assignment_rec.multiple_status_flag := p_multiple_status_flag;
200 l_assignment_rec.status_code := p_status_code;
201
202 IF p_status_code is NULL THEN -- Added default value population for Status Code. Bug 7309934
203
204 IF p_assignment_type = 'OPEN_ASSIGNMENT' THEN
205 FND_PROFILE.Get('PA_START_OPEN_ASGMT_STATUS',l_assignment_rec.status_code);
206 IF l_assignment_rec.status_code IS NULL THEN
207 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
208 ,p_msg_name => 'PA_START_STATUS_NOT_DEFINED');
209 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
210 END IF;
211 END IF;
212
213 IF (p_assignment_type = 'STAFFED_ASSIGNMENT' OR p_assignment_type = 'STAFFED_ADMIN_ASSIGNMENT') THEN
214 FND_PROFILE.Get('PA_START_STAFFED_ASGMT_STATUS',l_assignment_rec.status_code);
215 IF l_assignment_rec.status_code IS NULL THEN
216 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
217 ,p_msg_name => 'PA_START_STATUS_NOT_DEFINED');
218 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
219 END IF;
220 END IF;
221
222 ELSE
223
224 l_assignment_rec.status_code := p_status_code;
225
226 END IF;
227
228
229 l_assignment_rec.staffing_priority_code := p_staffing_priority_code;
230 l_assignment_rec.project_id := p_project_id;
231 l_assignment_rec.assignment_template_id := p_assignment_template_id;
232 l_assignment_rec.project_role_id := p_project_role_id;
233 l_assignment_rec.resource_id := p_resource_id;
234 l_assignment_rec.project_party_id := p_project_party_id;
235 l_assignment_rec.description := p_description;
236 l_assignment_rec.start_date := p_start_date;
237 l_assignment_rec.end_date := p_end_date;
238 l_assignment_rec.assignment_effort := p_assignment_effort;
239 l_assignment_rec.extension_possible := p_extension_possible;
240 l_assignment_rec.source_assignment_id := p_source_assignment_id;
241 l_assignment_rec.min_resource_job_level := p_min_resource_job_level;
242 l_assignment_rec.max_resource_job_level := p_max_resource_job_level;
243 l_assignment_rec.additional_information := p_additional_information;
244 l_assignment_rec.work_type_id := p_work_type_id;
245 l_assignment_rec.location_id := p_location_id;
246 l_assignment_rec.revenue_currency_code := p_revenue_currency_code;
247 l_assignment_rec.revenue_bill_rate := p_revenue_bill_rate;
248 l_assignment_rec.markup_percent := p_markup_percent;
249 l_assignment_rec.expense_owner := p_expense_owner;
250 l_assignment_rec.expense_limit := p_expense_limit;
251 l_assignment_rec.expense_limit_currency_code := p_expense_limit_currency_code;
252 l_assignment_rec.fcst_tp_amount_type := p_fcst_tp_amount_type;
253 l_assignment_rec.fcst_job_id := p_fcst_job_id;
254 l_assignment_rec.fcst_job_group_id := p_fcst_job_group_id;
255 l_assignment_rec.expenditure_org_id := p_expenditure_org_id;
256 l_assignment_rec.expenditure_organization_id := p_expenditure_organization_id;
257 l_assignment_rec.expenditure_type_class := p_expenditure_type_class;
258 l_assignment_rec.expenditure_type := p_expenditure_type;
259 l_assignment_rec.calendar_type := p_calendar_type;
260 l_assignment_rec.calendar_id := p_calendar_id;
261 l_assignment_rec.resource_calendar_percent := p_resource_calendar_percent;
262
263 IF P_DEBUG_MODE = 'Y' THEN
264 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exceute_Create_Assignment'
265 ,x_msg => 'Execute_Create_Assignment before L'
266 ,x_log_level => li_message_level);
267 END IF;
268
269 -- FP.L Development
270 l_assignment_rec.bill_rate_override := p_bill_rate_override;
271 l_assignment_rec.bill_rate_curr_override := p_bill_rate_curr_override;
272 l_assignment_rec.markup_percent_override := p_markup_percent_override;
273 l_assignment_rec.discount_percentage := p_discount_percentage;
274 l_assignment_rec.rate_disc_reason_code := p_rate_disc_reason_code;
275 l_assignment_rec.tp_rate_override := p_tp_rate_override;
276 l_assignment_rec.tp_currency_override := p_tp_currency_override;
277 l_assignment_rec.tp_calc_base_code_override := p_tp_calc_base_code_override;
278 l_assignment_rec.tp_percent_applied_override := p_tp_percent_applied_override;
279 l_assignment_rec.staffing_owner_person_id := p_staffing_owner_person_id;
280
281 IF P_DEBUG_MODE = 'Y' THEN
282 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exceute_Create_Assignment'
283 ,x_msg => 'Execute_Create_Assignment before M'
284 ,x_log_level => li_message_level);
285 END IF;
286 -- FP.M Development
287 l_assignment_rec.resource_list_member_id := p_resource_list_member_id;
288
289 l_assignment_rec.attribute_category := p_attribute_category;
290 l_assignment_rec.attribute1 := p_attribute1;
291 l_assignment_rec.attribute2 := p_attribute2;
292 l_assignment_rec.attribute3 := p_attribute3;
293 l_assignment_rec.attribute4 := p_attribute4;
294 l_assignment_rec.attribute5 := p_attribute5;
295 l_assignment_rec.attribute6 := p_attribute6;
296 l_assignment_rec.attribute7 := p_attribute7;
297 l_assignment_rec.attribute8 := p_attribute8;
298 l_assignment_rec.attribute9 := p_attribute9;
299 l_assignment_rec.attribute10 := p_attribute10;
300 l_assignment_rec.attribute11 := p_attribute11;
301 l_assignment_rec.attribute12 := p_attribute12;
302 l_assignment_rec.attribute13 := p_attribute13;
303 l_assignment_rec.attribute14 := p_attribute14;
304 l_assignment_rec.attribute15 := p_attribute15;
305
306 -- 5130421 Begin
307 l_assignment_rec.comp_match_weighting := p_comp_match_weighting;
308 l_assignment_rec.avail_match_weighting := p_avail_match_weighting;
309 l_assignment_rec.job_level_match_weighting := p_job_level_match_weighting;
310 l_assignment_rec.search_min_availability := p_search_min_availability;
311 l_assignment_rec.search_country_code := p_search_country_code;
312 l_assignment_rec.search_exp_org_struct_ver_id := p_search_exp_org_struct_ver_id;
313 l_assignment_rec.search_exp_start_org_id := p_search_exp_start_org_id;
314 l_assignment_rec.search_min_candidate_score := p_search_min_candidate_score;
315 l_assignment_rec.enable_auto_cand_nom_flag := p_enable_auto_cand_nom_flag;
316 -- 5130421 End
317
318 --Start Bug 3249669 : Check for profile option PA: Global Week Start Day being set.
319 IF NVL(FND_PROFILE.value('PA_GLOBAL_WEEK_START_DAY'),'N') = 'N' THEN
320 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
321 ,p_msg_name => 'PA_GLOBAL_WEEK_START_DAY_ERR' );
322 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
323 END IF;
324 --End Bug 3249669 : Check for profile option PA: Global Week Start Day being set.
325
326 --Log Message
327 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
328 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exceute_Create_Assignment.create_asgmt'
329 ,x_msg => 'Calling Create_Assignment'
330 ,x_log_level => 5);
331 END IF;
332
333 --
334 -- Call the create assignment public API
335
336 /*Added for the bug 3464074*/
337 IF l_assignment_rec.staffing_owner_person_id = FND_API.G_MISS_NUM
338 -- Bug 4049534: when user explicitly clears staffing_owner,
339 -- it shouldn't be derived.
340 -- OR l_assignment_rec.staffing_owner_person_id IS NULL
341
342 THEN
343
344 pa_assignment_utils.Get_Default_Staffing_Owner
345 ( p_project_id => l_assignment_rec.project_id
346 ,p_exp_org_id => null
347 ,x_person_id => l_assignment_rec.staffing_owner_person_id
348 ,x_person_name => l_person_name
349 ,x_return_status => l_return_status
350 ,x_error_message_code => l_error_message_code);
351
352
353 END IF;
354
355 IF P_DEBUG_MODE = 'Y' THEN
356 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exceute_Create_Assignment'
357 ,x_msg => 'before calling pub.Create_Assignment'
358 ,x_log_level => li_message_level);
359 END IF;
360
361 PA_ASSIGNMENTS_PUB.Create_Assignment
362 ( p_assignment_rec => l_assignment_rec
363 ,p_asgn_creation_mode => p_asgn_creation_mode
364 ,p_project_number => p_project_number
365 ,p_project_name => p_project_name
366 ,p_resource_name => p_resource_name
367 ,p_resource_source_id => p_resource_source_id
368 ,p_project_subteam_id => p_project_subteam_id
369 ,p_project_subteam_name => p_project_subteam_name
370 ,p_project_status_name => p_project_status_name
371 ,p_staffing_priority_name => p_staffing_priority_name
372 ,p_project_role_name => p_project_role_name
373 ,p_location_city => p_location_city
374 ,p_location_region => p_location_region
375 ,p_location_country_name => p_location_country_name
376 ,p_location_country_code => p_location_country_code
377 ,p_calendar_name => p_calendar_name
378 ,p_work_type_name => p_work_type_name
379 ,p_role_list_id => p_role_list_id
380 ,p_adv_action_set_id => p_adv_action_set_id
381 ,p_start_adv_action_set_flag => p_start_adv_action_set_flag
382 ,p_adv_action_set_name => p_adv_action_set_name
383 ,p_staffing_owner_name => p_staffing_owner_name
384 ,p_sum_tasks_flag => p_sum_tasks_flag -- FP.M Development
385 ,p_budget_version_id => p_budget_version_id
386 ,p_number_of_requirements => p_number_of_requirements
387 ,p_api_version => p_api_version
388 ,p_commit => p_commit
389 ,p_validate_only => p_validate_only
390 ,p_max_msg_count => p_max_msg_count
391 ,x_new_assignment_id => x_new_assignment_id
392 ,x_assignment_number => x_assignment_number
393 ,x_assignment_row_id => x_assignment_row_id
394 ,x_resource_id => x_resource_id
395 ,x_return_status => l_return_status
396 ,x_msg_count => x_msg_count
397 ,x_msg_data => x_msg_data
398 );
399
400 IF P_DEBUG_MODE = 'Y' THEN
401 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exceute_Create_Assignment'
402 ,x_msg => 'after calling pub.Create_Assignment'
403 ,x_log_level => li_message_level);
404 END IF;
405
406 -- Reset the error stack when returning to the calling program
407 PA_DEBUG.Reset_Err_Stack;
408
409 -- If there are any messages in the stack then set x_return_status
410
411 IF FND_MSG_PUB.Count_Msg > 0 THEN
412
413 x_return_status := FND_API.G_RET_STS_ERROR;
414
415 END IF;
416
417 -- Bug 3132280 : MOved the following table initialization outside the if
418 -- so that the NPE can be avoided in Java Layer
419 x_new_assignment_id_tbl:= SYSTEM.pa_num_tbl_type();
420
421 IF PA_ASSIGNMENTS_PUB.g_assignment_id_tbl.count > 0 THEN -- Bug 3132280
422
423 /*Added the code for bug 3079906*/
424 IF p_asgn_creation_mode <> 'MASS' OR (p_asgn_creation_mode = 'MASS' AND p_validate_only = FND_API.G_FALSE) THEN
425 -- Bug 3132280 x_new_assignment_id_tbl:= SYSTEM.pa_num_tbl_type();
426 FOR i in PA_ASSIGNMENTS_PUB.g_assignment_id_tbl.FIRST..PA_ASSIGNMENTS_PUB.g_assignment_id_tbl.LAST LOOP
427 x_new_assignment_id_tbl.extend(1);
428 x_new_assignment_id_tbl(i):=PA_ASSIGNMENTS_PUB.g_assignment_id_tbl(i).assignment_id;
429 END LOOP;
430 /* code addition for bug 3079906 ends*/
431 end if;
432 END IF;
433 EXCEPTION
434 WHEN OTHERS THEN
435 -- Set the excetption Message and the stack
436 FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Execute_Create_Assignment'
437 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
438 --
439 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
440 RAISE; -- This is optional depending on the needs
441
442 END Execute_Create_Assignment;
443
444
445 PROCEDURE Exec_Create_Assign_With_Def
446 ( p_asgn_creation_mode IN VARCHAR2 := 'FULL'
447 ,p_role_name IN pa_project_role_types.meaning%TYPE := FND_API.G_MISS_CHAR
448 ,p_assignment_type IN pa_project_assignments.assignment_type%TYPE := FND_API.G_MISS_CHAR
449 ,p_multiple_status_flag IN pa_project_assignments.multiple_status_flag%TYPE := 'N'
450 ,p_project_id IN pa_project_assignments.project_id%TYPE := FND_API.G_MISS_NUM
451 ,p_project_name IN pa_projects_all.name%TYPE := FND_API.G_MISS_CHAR
452 ,p_project_number IN pa_projects_all.segment1%TYPE := FND_API.G_MISS_CHAR
453 ,p_project_role_id IN pa_project_assignments.project_role_id%TYPE := FND_API.G_MISS_NUM
454 ,p_resource_id IN pa_resources.resource_id%TYPE := FND_API.G_MISS_NUM
455 ,p_project_party_id IN pa_project_assignments.project_party_id%TYPE := FND_API.G_MISS_NUM
456 ,p_start_date IN pa_project_assignments.start_date%TYPE := FND_API.G_MISS_DATE
457 ,p_end_date IN pa_project_assignments.end_date%TYPE := FND_API.G_MISS_DATE
458 ,p_resource_name IN pa_resources.name%TYPE := FND_API.G_MISS_CHAR
459 ,p_resource_source_id IN per_all_people_f.person_id%TYPE := FND_API.G_MISS_NUM
460 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
461 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
462 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
463 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
464 ,x_new_assignment_id OUT NOCOPY pa_project_assignments.assignment_id%TYPE --File.Sql.39 bug 4440895
465 ,x_assignment_number OUT NOCOPY pa_project_assignments.assignment_number%TYPE --File.Sql.39 bug 4440895
466 ,x_assignment_row_id OUT NOCOPY ROWID --File.Sql.39 bug 4440895
467 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
468 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
469 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
470 )
471 IS
472
473 l_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
474 l_return_status VARCHAR2(1);
475 l_person_name PER_PEOPLE_F.full_name%TYPE;
476 l_err_msg_code VARCHAR2(80);
477
478 BEGIN
479
480
481 -- Initialize the Error Stack
482 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Exec_Create_Assign_With_Def');
483
484 -- Initialize the return status to success
485 x_return_status := FND_API.G_RET_STS_SUCCESS;
486
487 --Clear the global PL/SQL message table
488 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
489 FND_MSG_PUB.initialize;
490 END IF;
491
492 --Log Message
493 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
494 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exec_Create_Assign_With_Def.begin'
495 ,x_msg => 'Beginning of the Exec_Create_Assign_With_Def'
496 ,x_log_level => 5);
497 END IF;
498
499 --
500 -- Assign the scalar parameters to the assignment record fields
501 --
502
503 l_assignment_rec.assignment_name := p_role_name;
504
505 l_assignment_rec.assignment_type := p_assignment_type;
506 l_assignment_rec.multiple_status_flag := p_multiple_status_flag;
507 l_assignment_rec.project_id := p_project_id;
508 l_assignment_rec.project_role_id := p_project_role_id;
509 l_assignment_rec.resource_id := p_resource_id;
510 l_assignment_rec.project_party_id := p_project_party_id;
511 l_assignment_rec.start_date := p_start_date;
512 l_assignment_rec.end_date := p_end_date;
513
514
515 -- Retrieve default staffing owner person id
516 pa_assignment_utils.Get_Default_Staffing_Owner
517 ( p_project_id => p_project_id
518 ,p_exp_org_id => null
519 ,x_person_id => l_assignment_rec.staffing_owner_person_id
520 ,x_person_name => l_person_name
521 ,x_return_status => x_return_status
522 ,x_error_message_code => l_err_msg_code);
523
524 --Log Message
525 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
526 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Exec_Create_Assign_With_Def.begin'
527 ,x_msg => 'Calling Create_Assign_With_Def'
528 ,x_log_level => 5);
529 END IF;
530 --
531 -- Call the create staff assignment with defaults public API
532
533 PA_ASSIGNMENTS_PUB.Create_Assign_With_Def
534 ( p_assignment_rec => l_assignment_rec
535 ,p_asgn_creation_mode => p_asgn_creation_mode
536 ,p_role_name => p_role_name
537 ,p_project_name => p_project_name
538 ,p_project_number => p_project_number
539 ,p_resource_name => p_resource_name
540 ,p_resource_source_id => p_resource_source_id
541 ,p_init_msg_list => p_init_msg_list
542 ,p_commit => p_commit
543 ,p_validate_only => p_validate_only
544 ,p_max_msg_count => p_max_msg_count
545 ,x_new_assignment_id => x_new_assignment_id
546 ,x_assignment_number => x_assignment_number
547 ,x_assignment_row_id => x_assignment_row_id
548 ,x_return_status => l_return_status
549 ,x_msg_count => x_msg_count
550 ,x_msg_data => x_msg_data
551 );
552
553
554 -- Reset the error stack when returning to the calling program
555 PA_DEBUG.Reset_Err_Stack;
556
557 -- Put any message text from message stack into the Message ARRAY
558 EXCEPTION
559 WHEN OTHERS THEN
560
561 -- Set the excetption Message and the stack
562 FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Execute_Create_Assignment'
563 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
564 --
565 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
566 RAISE; -- This is optional depending on the needs
567
568 END Exec_Create_Assign_With_Def;
569
570
571 PROCEDURE Create_Assign_With_Def
572 ( p_assignment_rec IN PA_ASSIGNMENTS_PUB.Assignment_Rec_Type
573 ,p_role_name IN pa_project_role_types.meaning%TYPE := FND_API.G_MISS_CHAR
574 ,p_asgn_creation_mode IN VARCHAR2 := 'FULL'
575 ,p_project_name IN pa_projects_all.name%TYPE := FND_API.G_MISS_CHAR
576 ,p_project_number IN pa_projects_all.segment1%TYPE := FND_API.G_MISS_CHAR
577 ,p_resource_name IN pa_resources.name%TYPE := FND_API.G_MISS_CHAR
578 ,p_resource_source_id IN per_all_people_f.person_id%TYPE := FND_API.G_MISS_NUM
579 ,p_api_version IN NUMBER := 1.0
580 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
581 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
582 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
583 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
584 ,x_new_assignment_id OUT NOCOPY pa_project_assignments.assignment_id%TYPE --File.Sql.39 bug 4440895
585 ,x_assignment_number OUT NOCOPY pa_project_assignments.assignment_number%TYPE --File.Sql.39 bug 4440895
586 ,x_assignment_row_id OUT NOCOPY ROWID --File.Sql.39 bug 4440895
587 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
588 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
589 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
590 )
591
592 IS
593
594 l_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
595 l_return_status VARCHAR2(1);
596 l_schedulable_flag VARCHAR2(1);
597 l_msg_index_out NUMBER;
598 l_menu_id NUMBER;
599 l_assignment_status_name PA_PROJECT_STATUSES.project_status_name%TYPE;
600 l_job_id NUMBER;
601 l_error_message_code fnd_new_messages.message_name%TYPE;
602 l_competencies_tbl PA_HR_COMPETENCE_UTILS.Competency_Tbl_Typ;
603 l_location_country_code pa_locations.country_code%TYPE;
604 l_resource_id pa_resources.resource_id%TYPE;
605 l_msg_count NUMBER;
606 l_msg_data VARCHAR2(4000);
607 l_work_type_id NUMBER;
608 l_check_id_flag VARCHAR2(1);
609 l_person_name PER_PEOPLE_F.full_name%TYPE; -- Bug 3466411
610 l_err_msg_code VARCHAR2(80); -- Bug 3466411
611 -- Bug: 4537865
612 l_new_project_role_id pa_project_assignments.project_role_id%TYPE;
613 -- Bug: 4537865
614
615 -- Commented this cursor for Performance Fix 4898314 SQL ID 14905800
616 --CURSOR get_project_defaults IS
617 --SELECT work_type_id, calendar_id, location_id, country_code
618 --FROM pa_projects_prm_v
619 --WHERE project_id = l_assignment_rec.project_id;
620
621 -- Start of Performance Fix 4898314 SQL ID 14905800
622 CURSOR get_project_defaults IS
623 SELECT ppa.work_type_id,ppa.calendar_id ,pl.location_id ,pl.country_code
624 FROM pa_projects_all ppa,pa_locations pl
625 WHERE project_id = l_assignment_rec.project_id
626 AND PPA.LOCATION_ID = PL.LOCATION_ID(+) ;
627 -- End of Performance Fix 4898314 SQL ID 14905800
628
629 BEGIN
630
631
632 l_assignment_rec := p_assignment_rec;
633
634 -- Initialize the Error Stack
635 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Create_Assign_With_Def');
636
637 -- Initialize the error flag
638 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_FALSE;
639
640 -- Initialize the return status to success
641 x_return_status := FND_API.G_RET_STS_SUCCESS;
642
643 --Issue API savepoint if the transaction is to be committed
644 IF p_commit = FND_API.G_TRUE THEN
645 SAVEPOINT ASG_PUB_CREATE_ASGMT_WITH_DEF;
646 END IF;
647
648 --Clear the global PL/SQL message table
649 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
650
651 FND_MSG_PUB.initialize;
652 END IF;
653 --Log Message
654 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
655 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assign_With_Def.begin'
656 ,x_msg => 'Beginning of Create_Assign_With_Def'
657 ,x_log_level => 5);
658 END IF;
659
660 -- Assign the record to the local variable
661 l_assignment_rec := p_assignment_rec;
662
663 --l_assignment_rec.project_role_id := 2007;
664
665 /* A temporary fix:
666 Need to avoid the LOV ID clearing check implemented in most validation packages.
667 Since only the ids are passed in and not the names.
668 */
669
670 l_check_id_flag := PA_STARTUP.G_Check_ID_Flag;
671 IF PA_STARTUP.G_Calling_Application = 'SELF_SERVICE' THEN
672 PA_STARTUP.G_Check_ID_Flag := 'N';
673 END IF;
674
675 --
676 -- Validate Role details
677 --
678
679 PA_ROLE_UTILS.Check_Role_Name_Or_Id( p_role_id => l_assignment_rec.project_role_id
680 ,p_role_name => p_role_name
681 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
682 --,x_role_id => l_assignment_rec.project_role_id Bug: 4537865
683 ,x_role_id => l_new_project_role_id -- Bug: 4537865
684 ,x_return_status => l_return_status
685 ,x_error_message_code => l_error_message_code );
686 -- Bug: 4537865
687 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
688 l_assignment_rec.project_role_id := l_new_project_role_id;
689 END IF;
690 -- Bug: 4537865
691
692 --
693 -- Get role default values and forecast defaults
694 --
695
696 IF l_assignment_rec.project_role_id IS NOT NULL THEN
697
698 --
699 -- Get role default values
700 --
701 PA_ROLE_UTILS.Get_Role_Defaults( p_role_id => l_assignment_rec.project_role_id
702 ,x_meaning => l_assignment_rec.assignment_name
703 ,x_default_min_job_level => l_assignment_rec.min_resource_job_level
704 ,x_default_max_job_level => l_assignment_rec.max_resource_job_level
705 ,x_menu_id => l_menu_id
706 ,x_schedulable_flag => l_schedulable_flag
707 ,x_default_job_id => l_job_id
708 ,x_def_competencies => l_competencies_tbl
709 ,x_return_status => l_return_status
710 ,x_error_message_code => l_error_message_code );
711
712
713 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
714 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
715 ,p_msg_name => l_error_message_code );
716 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
717 END IF;
718
719 IF l_schedulable_flag <> 'Y' THEN
720 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
721 ,p_msg_name => 'PA_ROLE_NOT_SCHEDULABLE' );
722 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
723 return;
724 END IF;
725
726 --Log Message
727 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
728 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assign_With_Def.role_defaults'
729 ,x_msg => 'After gettting role defaults'
730 ,x_log_level => 5);
731 END IF;
732
733 --
734 --Get forecast defaults
735 --
736
737 PA_FORECAST_ITEMS_UTILS.Get_Assignment_Default(
738 p_assignment_type => l_assignment_rec.assignment_type,
739 p_project_id => l_assignment_rec.project_id,
740 p_project_role_id => l_assignment_rec.project_role_id,
741 p_work_type_id => NULL, -- Bug 2318503
742 x_work_type_id => l_work_type_id,
743 x_default_tp_amount_type => l_assignment_rec.fcst_tp_amount_type,
744 x_default_job_group_id => l_assignment_rec.fcst_job_group_id,
745 x_default_job_id => l_assignment_rec.fcst_job_id,
746 x_org_id => l_assignment_rec.expenditure_org_id,
747 x_carrying_out_organization_id=> l_assignment_rec.expenditure_organization_id,
748 x_default_assign_exp_type => l_assignment_rec.expenditure_type,
749 x_default_assign_exp_type_cls => l_assignment_rec.expenditure_type_class,
750 x_return_status => l_return_status,
751 x_msg_count => l_msg_count,
752 x_msg_data => l_msg_data
753 );
754 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
755 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
756 END IF;
757
758 --Log Message
759 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
760 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assign_With_Def.utilization_defaults'
761 ,x_msg => 'After gettting utilization defaults'
762 ,x_log_level => 5);
763 END IF;
764 END IF;
765
766 OPEN get_project_defaults;
767
768 FETCH get_project_defaults INTO l_assignment_rec.work_type_id, l_assignment_rec.calendar_id, l_assignment_rec.location_id, l_location_country_code;
769
770 IF get_project_defaults%NOTFOUND THEN
771
772 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
773 ,p_msg_name => 'PA_CANNOT_GET_PROJ_DEFAULTS');
774 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
775
776 END IF;
777
778 CLOSE get_project_defaults;
779
780 --Set calendar_type to 'PROJECT'as default
781 l_assignment_rec.calendar_type := 'PROJECT';
782
783 FND_PROFILE.Get('PA_START_STAFFED_ASGMT_STATUS',l_assignment_rec.status_code);
784
785 IF l_assignment_rec.status_code IS NULL THEN
786
787 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
788 ,p_msg_name => 'PA_START_STATUS_NOT_DEFINED');
789 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
790
791 END IF;
792
793 -- Bug 3466411
794 -- Retrieve default staffing owner person id
795 pa_assignment_utils.Get_Default_Staffing_Owner
796 ( p_project_id => l_assignment_rec.project_id
797 ,p_exp_org_id => null
798 ,x_person_id => l_assignment_rec.staffing_owner_person_id
799 ,x_person_name => l_person_name
800 ,x_return_status => x_return_status
801 ,x_error_message_code => l_err_msg_code);
802
803 --Log Message
804 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
805 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assign_With_Def.create_asgmt'
806 ,x_msg => 'Calling Create_Assignment'
807 ,x_log_level => 5);
808 END IF;
809
810 PA_ASSIGNMENTS_PUB.Create_Assignment
811 ( p_assignment_rec => l_assignment_rec
812 ,p_asgn_creation_mode => p_asgn_creation_mode
813 ,p_project_name => p_project_name
814 ,p_project_number => p_project_number
815 ,p_resource_name => p_resource_name
816 ,p_resource_source_id => p_resource_source_id
817 ,p_project_role_name => p_role_name
818 ,p_location_country_code => l_location_country_code
819 ,p_api_version => p_api_version
820 ,p_commit => p_commit
821 ,p_validate_only => p_validate_only
822 ,p_max_msg_count => p_max_msg_count
823 ,x_new_assignment_id => x_new_assignment_id
824 ,x_assignment_number => x_assignment_number
825 ,x_assignment_row_id => x_assignment_row_id
826 ,x_resource_id => l_resource_id
827 ,x_return_status => l_return_status
828 ,x_msg_count => x_msg_count
829 ,x_msg_data => x_msg_data
830 );
831
832 --set the global check_id_flag back to the orignal
833 PA_STARTUP.G_Check_ID_Flag := l_check_id_flag;
834
835 --
836 -- IF the number of messaages is 1 then fetch the message code from the stack and return its text
837 --
838
839 x_msg_count := FND_MSG_PUB.Count_Msg;
840
841 IF x_msg_count = 1 THEN
842 pa_interface_utils_pub.get_messages ( p_encoded => FND_API.G_TRUE
843 ,p_msg_index => 1
844 ,p_data => x_msg_data
845 ,p_msg_index_out => l_msg_index_out
846 );
847 END IF;
848
849 -- Reset the error stack when returning to the calling program
850
851 PA_DEBUG.Reset_Err_Stack;
852
853 -- If g_error_exists is TRUE then set the x_return_status to 'E'
854
855 IF FND_MSG_PUB.Count_Msg >0 THEN
856
857 x_return_status := FND_API.G_RET_STS_ERROR;
858
859 END IF;
860
861 IF p_commit = FND_API.G_TRUE THEN
862 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
863 COMMIT;
864 ELSE
865 ROLLBACK TO ASG_PUB_CREATE_ASGMT_WITH_DEF;
866 END IF;
867 END IF;
868
869 -- Put any message text from message stack into the Message ARRAY
870 --
871 EXCEPTION
872 WHEN OTHERS THEN
873 IF p_commit = FND_API.G_TRUE THEN
874 ROLLBACK TO ASG_PUB_CREATE_ASGMT_WITH_DEF;
875 END IF;
876 -- Set the excetption Message and the stack
877 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Create_Assignment'
878 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
879 --
880 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
881 RAISE; -- This is optional depending on the needs
882 --
883
884 END Create_Assign_With_Def;
885
886
887
888
889 PROCEDURE Create_Assignment
890 ( p_assignment_rec IN PA_ASSIGNMENTS_PUB.Assignment_Rec_Type
891 ,p_asgn_creation_mode IN VARCHAR2 := 'FULL'
892 ,p_project_name IN pa_projects_all.name%TYPE := FND_API.G_MISS_CHAR
893 ,p_project_number IN pa_projects_all.segment1%TYPE := FND_API.G_MISS_CHAR
894 ,p_resource_name IN pa_resources.name%TYPE := FND_API.G_MISS_CHAR
895 ,p_resource_source_id IN NUMBER := FND_API.G_MISS_NUM
896 ,p_project_subteam_id IN pa_project_subteams.project_subteam_id%TYPE := FND_API.G_MISS_NUM
897 ,p_project_subteam_name IN pa_project_subteams.name%TYPE := FND_API.G_MISS_CHAR
898 ,p_project_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
899 ,p_staffing_priority_name IN pa_lookups.meaning%TYPE := FND_API.G_MISS_CHAR
900 ,p_project_role_name IN pa_project_role_types.meaning%TYPE := FND_API.G_MISS_CHAR
901 ,p_location_city IN pa_locations.city%TYPE := FND_API.G_MISS_CHAR
902 ,p_location_region IN pa_locations.region%TYPE := FND_API.G_MISS_CHAR
903 ,p_location_country_name IN fnd_territories_tl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
904 ,p_location_country_code IN pa_locations.country_code%TYPE := FND_API.G_MISS_CHAR
905 ,p_calendar_name IN jtf_calendars_tl.calendar_name%TYPE := FND_API.G_MISS_CHAR
906 ,p_work_type_name IN pa_work_types_vl.name%TYPE := FND_API.G_MISS_CHAR
907 ,p_role_list_id IN pa_role_lists.role_list_id%TYPE := FND_API.G_MISS_NUM
908 ,p_adv_action_set_id IN NUMBER := FND_API.G_MISS_NUM
909 ,p_start_adv_action_set_flag IN VARCHAR2 := FND_API.G_MISS_CHAR
910 ,p_adv_action_set_name IN pa_action_sets.action_set_name%TYPE := FND_API.G_MISS_CHAR
911 ,p_staffing_owner_name IN per_people_f.full_name%TYPE := FND_API.G_MISS_CHAR
912 ,p_sum_tasks_flag IN VARCHAR2 := FND_API.G_FALSE -- FP.M Development
913 ,p_budget_version_id IN pa_resource_assignments.budget_version_id%TYPE := FND_API.G_MISS_NUM
914 ,p_number_of_requirements IN NUMBER := 1
915 ,p_api_version IN NUMBER := 1.0
916 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
917 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
918 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
919 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
920 ,x_new_assignment_id OUT NOCOPY pa_project_assignments.assignment_id%TYPE --File.Sql.39 bug 4440895
921 ,x_assignment_number OUT NOCOPY pa_project_assignments.assignment_number%TYPE --File.Sql.39 bug 4440895
922 ,x_assignment_row_id OUT NOCOPY ROWID --File.Sql.39 bug 4440895
923 ,x_resource_id OUT NOCOPY pa_resources.resource_id%TYPE --File.Sql.39 bug 4440895
924 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
925 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
926 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
927 )
928 IS
929
930 l_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
931 l_resource_source_id NUMBER;
932 -- Bug: 4537865
933 l_new_resource_source_id NUMBER;
934 l_new_project_role_id pa_project_assignments.project_role_id%TYPE;
935 l_new_role_list_id pa_role_lists.role_list_id%TYPE;
936 l_new_calendar_id pa_project_assignments.calendar_id %TYPE;
937 l_new_staffing_priority_code pa_project_assignments.staffing_priority_code%TYPE;
938 -- Bug: 4537865
939 l_location_country_name fnd_territories_tl.territory_short_name%TYPE;
940 l_location_country_code fnd_territories.territory_code%TYPE;
941 l_calendar_id jtf_calendars_b.calendar_id%TYPE;
942 l_return_status VARCHAR2(1);
943 l_error_message_code fnd_new_messages.message_name%TYPE;
944 l_unfilled_assignment_id pa_project_assignments.assignment_id%TYPE;
945 l_resource_type_id NUMBER;
946 l_msg_index_out NUMBER;
947 l_msg_count NUMBER;
948 l_msg_data VARCHAR2(2000);
949 l_valid_flag VARCHAR2(1);
950 l_project_status_type PA_PROJECT_STATUSES.status_type%TYPE := null;
951 l_status_code PA_PROJECT_STATUSES.project_status_code%TYPE;
952 l_subteam_id pa_project_subteams.project_subteam_id%TYPE;
953 l_admin_flag pa_project_types_all.administrative_flag%TYPE;
954 l_unassigned_time pa_project_types_all.unassigned_time%TYPE;
955 l_object_type pa_project_subteams.object_type%TYPE;
956 l_object_id pa_project_subteams.object_id%TYPE;
957 l_workflow_in_progress_flag pa_team_templates.workflow_in_progress_flag%TYPE;
958 l_role_list_id pa_role_lists.role_list_id%TYPE;
959 l_project_id pa_project_assignments.project_id%TYPE;
960 l_adv_action_set_id NUMBER;
961
962 l_temp_expenditure_type_class pa_project_assignments.expenditure_type_class%TYPE;
963 l_temp_work_type_id pa_project_assignments.work_type_id%TYPE;
964 l_temp_staff_owner_person_id NUMBER;
965 l_valid_assign_start_flag VARCHAR2(1) := 'Y'; -- Bug 6411422
966 l_profile_begin_date DATE; -- Bug 6411422
967
968 -- Commented this cursor for Performance Fix 4898314 SQL ID 14905832
969 -- CURSOR get_project_number_info IS
970 -- SELECT administrative_flag, calendar_id, project_currency_code, unassigned_time
971 -- FROM pa_projects_prm_v
972 -- WHERE segment1 = p_project_number;
973
974 -- Start of Performance Fix 4898314 SQL ID 14905832
975 CURSOR get_project_number_info IS
976 SELECT ppt.administrative_flag, ppa.calendar_id, ppa.project_currency_code, ppt.unassigned_time
977 FROM pa_projects_all ppa,pa_project_types_all ppt
978 WHERE segment1 = p_project_number
979 AND PPA.PROJECT_TYPE = PPT.PROJECT_TYPE
980 AND PPA.ORG_ID = PPT.ORG_ID;
981 -- End of Performance Fix 4898314 SQL ID 14905832
982
983 CURSOR get_expenditure_type_class IS
984 SELECT system_linkage_function
985 FROM pa_expend_typ_sys_links_v
986 WHERE expenditure_type = l_assignment_rec.expenditure_type
987 AND system_linkage_function in ('ST', 'OT');
988
989 CURSOR check_team_template_wf IS
990 SELECT workflow_in_progress_flag
991 FROM pa_team_templates
992 WHERE team_template_id = l_assignment_rec.assignment_template_id;
993
994 CURSOR get_resource_source_id IS
995 SELECT person_id
996 FROM pa_resource_txn_attributes
997 WHERE resource_id = l_assignment_rec.resource_id;
998
999 BEGIN
1000
1001 IF P_DEBUG_MODE = 'Y' THEN
1002 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1003 ,x_msg => 'Entrance of pub.Create_Assignment'
1004 ,x_log_level => li_message_level);
1005 END IF;
1006
1007 --dbms_output.put_line('PA_ASSIGNMENTS_PUB.Create_Assignment');
1008 /* Moved the call for deleting the global table from below to above for bug 3079906*/
1009 PA_ASSIGNMENTS_PUB.g_assignment_id_tbl.DELETE;
1010 -- Initialize the Error Stack
1011 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Create_Assignment');
1012
1013 -- Initialize the error flag
1014 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_FALSE;
1015
1016 -- Initialize the return status to success
1017 x_return_status := FND_API.G_RET_STS_SUCCESS;
1018
1019 --Issue API savepoint if the transaction is to be committed
1020 IF p_commit = FND_API.G_TRUE THEN
1021 SAVEPOINT ASG_PUB_CREATE_ASSIGNMENT;
1022 END IF;
1023
1024 --Clear the global PL/SQL message table
1025 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
1026 FND_MSG_PUB.initialize;
1027 END IF;
1028
1029 --Log Message
1030 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
1031 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment.begin'
1032 ,x_msg => 'Beginning of Create_Assignment'
1033 ,x_log_level => 5);
1034 END IF;
1035
1036 -- Assign the record to the local variable
1037 l_assignment_rec := p_assignment_rec;
1038
1039 --------------------------------------------------------------------
1040 -- Bug Ref : 6411422 ---
1041 -- Keeping this check for Making sure that no assignments are created
1042 -- with Start date prior to the Profile value for utilization date.
1043 --------------------------------------------------------------------
1044 IF (l_assignment_rec.project_id IS NOT NULL or l_assignment_rec.project_id <> FND_API.G_MISS_NUM) THEN
1045 l_valid_assign_start_flag := PA_PROJECT_DATES_UTILS.IS_VALID_ASSIGN_START_DATE( p_project_id => l_assignment_rec.project_id,
1046 p_assign_start_date => l_assignment_rec.start_date ) ;
1047 END IF ;
1048 IF ( l_valid_assign_start_flag = 'Y' ) THEN
1049 --if this is a template requirement then check that worflow is not in progress
1050 --on the parent team template. If it is in progress then no new template requirements
1051 --can be created.
1052 IF (l_assignment_rec.project_id IS NULL or l_assignment_rec.project_id = FND_API.G_MISS_NUM) AND
1053 (l_assignment_rec.assignment_template_id IS NOT NULL and l_assignment_rec.assignment_template_id <>FND_API.G_MISS_NUM) THEN
1054
1055 OPEN check_team_template_wf;
1056 FETCH check_team_template_wf INTO l_workflow_in_progress_flag;
1057 CLOSE check_team_template_wf;
1058
1059 IF l_workflow_in_progress_flag='Y' THEN
1060 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1061 ,p_msg_name => 'PA_NO_REQ_WF');
1062 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1063 x_return_status := FND_API.G_RET_STS_ERROR;
1064 END IF;
1065 END IF;
1066
1067 -- Bug 2513254
1068 -- Comment this IF condition out so that this part of the code will be executed
1069 -- within workflow autonomous transaction
1070 --IF PA_STARTUP.G_Calling_Application = 'SELF_SERVICE' THEN
1071
1072 --When project number is present, do the Project Number validation
1073 --IF project number is present, but not project id, then get the defaults from project table
1074 -- IF the passed in calendar type is 'PROJECT', then use the default Calendar.
1075
1076 --Assumption: Add Template Requirement does not pass in Project Number
1077
1078 IF P_DEBUG_MODE = 'Y' THEN
1079 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1080 ,x_msg => 'before check project number'
1081 ,x_log_level => li_message_level);
1082 END IF;
1083
1084 --Check to see if project number is passed in
1085 IF (p_project_number IS NOT NULL AND p_project_number <> FND_API.G_MISS_CHAR )THEN
1086
1087 IF P_DEBUG_MODE = 'Y' THEN
1088 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1089 ,x_msg => 'project number is ok'
1090 ,x_log_level => li_message_level);
1091 END IF;
1092
1093 --Do Number to ID validation
1094 PA_PROJECT_UTILS2.Check_Project_Number_Or_Id
1095 ( p_project_id => l_assignment_rec.project_id
1096 ,p_project_number => p_project_number
1097 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1098 ,x_project_id => l_project_id
1099 ,x_return_status => l_return_status
1100 ,x_error_message_code => l_error_message_code );
1101
1102 --dbms_output.put_line('error_message_code :'||l_error_message_code);
1103
1104 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1105 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1106 ,p_msg_name => l_error_message_code);
1107 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1108 END IF;
1109 l_return_status := FND_API.G_MISS_CHAR;
1110 l_error_message_code := FND_API.G_MISS_CHAR;
1111
1112
1113 -- Bug 2513254
1114 -- Comment this IF condition out so that this part of the code
1115 -- will be executed within Mass Transaction workflow
1116 --If project id is not passed in, then get defaults from project table
1117 -- IF (l_assignment_rec.project_id IS NULL OR l_assignment_rec.project_id = FND_API.G_MISS_NUM) THEN
1118
1119 --dbms_output.put_line('Before Get project_number_info');
1120
1121 IF P_DEBUG_MODE = 'Y' THEN
1122 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1123 ,x_msg => 'before get calendar id'
1124 ,x_log_level => li_message_level);
1125 END IF;
1126
1127 --Get the Administrative Flag, calendar id, currency code from the fetched Project ID
1128 OPEN get_project_number_info;
1129 FETCH get_project_number_info INTO l_admin_flag, l_calendar_id,
1130 l_assignment_rec.expense_limit_currency_code, l_unassigned_time;
1131 CLOSE get_project_number_info;
1132
1133 --dbms_output.put_line('After Get project_number_info');
1134
1135 --
1136 --Return error if a non-admin project is used to Create Admin Assignment or
1137 -- an admin project is used to Create Delivery Assignment
1138 --
1139 IF (l_assignment_rec.assignment_type = 'STAFFED_ADMIN_ASSIGNMENT' AND
1140 l_admin_flag <> 'Y') OR
1141 (l_assignment_rec.assignment_type = 'STAFFED_ASSIGNMENT' AND l_admin_flag = 'Y') THEN
1142 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1143 ,p_msg_name => 'PA_CREATE_ADMIN_RESTRICT');
1144 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1145 END IF; --staffed admin or staffed assignment with admin project
1146
1147 IF P_DEBUG_MODE = 'Y' THEN
1148 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1149 ,x_msg => 'before calendar=PROJECT?'
1150 ,x_log_level => li_message_level);
1151 END IF;
1152
1153 --
1154 --IF Calendar Type is 'PROJECT', then set calendar_id as the default from the project table.
1155 --
1156 IF l_assignment_rec.calendar_type = 'PROJECT' THEN
1157 l_assignment_rec.calendar_id := l_calendar_id;
1158 END IF;
1159 -- END IF; --end of project id not passed in
1160
1161 --
1162 --Set the project id to the result after the project number validation
1163 l_assignment_rec.project_id := l_project_id;
1164
1165 END IF; --end of project number is passed in.
1166 --END IF; -- end of self-service
1167 --dbms_output.put_line('end of project number');
1168
1169 --validate that the project is not an unassigned time project.
1170 --assignments are not allowed on unassigned time projects
1171 IF l_assignment_rec.project_id IS NOT NULL and l_assignment_rec.project_id <> FND_API.G_MISS_NUM THEN
1172 IF l_unassigned_time IS NULL THEN
1173 l_unassigned_time := PA_PROJECT_UTILS.is_unassigned_time_project(l_assignment_rec.project_id);
1174 END IF;
1175 IF l_unassigned_time = 'Y' THEN
1176 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1177 ,p_msg_name => 'PA_NO_ASGMT_UNASSIGN_TIME_PROJ');
1178 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1179 END IF;
1180
1181 -- Check for Org Project
1182 PA_FP_ORG_FCST_UTILS.detect_org_project(
1183 p_project_id => l_assignment_rec.project_id,
1184 x_return_status => l_return_status,
1185 x_err_code => l_error_message_code
1186 );
1187
1188 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1189 PA_ASSIGNMENT_UTILS.Add_Message(
1190 p_app_short_name => 'PA'
1191 ,p_msg_name => l_error_message_code
1192 );
1193 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1194 END IF;
1195
1196 l_return_status := FND_API.G_MISS_CHAR;
1197 l_error_message_code := FND_API.G_MISS_CHAR;
1198
1199 END IF;
1200
1201 --Check that start_date <= end_date
1202 --
1203 IF l_assignment_rec.start_date > l_assignment_rec.end_date THEN
1204 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1205 ,p_msg_name => 'PA_INVALID_START_DATE');
1206 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1207 END IF;
1208
1209
1210 --
1211 -- Validate Resource detail
1212 --
1213 --if this a mass assignment online validation then don't need to validate
1214 --the resource ids - they must be valid.
1215 IF p_asgn_creation_mode <> 'MASS' THEN
1216 IF l_assignment_rec.assignment_type <> 'OPEN_ASSIGNMENT' THEN
1217 IF l_assignment_rec.resource_id IS NOT NULL AND l_assignment_rec.resource_id <> FND_API.G_MISS_NUM THEN
1218
1219 OPEN get_resource_source_id;
1220 FETCH get_resource_source_id INTO l_resource_source_id;
1221 CLOSE get_resource_source_id;
1222
1223 ELSE
1224 l_resource_source_id := p_resource_source_id;
1225 END IF; -- resource id not null
1226
1227 PA_RESOURCE_UTILS.Check_ResourceName_Or_Id ( p_resource_id => l_resource_source_id
1228 ,p_resource_name => p_resource_name
1229 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1230 ,p_date => l_assignment_rec.start_date
1231 ,p_end_date => l_assignment_rec.end_date -- 3235018 : Added this
1232 --,x_resource_id => l_resource_source_id * Bug: 4537865
1233 ,x_resource_id => l_new_resource_source_id --Bug: 4537865
1234 ,x_resource_type_id => l_resource_type_id
1235 ,x_return_status => l_return_status
1236 ,x_error_message_code => l_error_message_code);
1237 -- Bug: 4537865
1238 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1239 l_resource_source_id := l_new_resource_source_id;
1240 END IF;
1241 -- Bug: 4537865
1242
1243 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1244 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1245 ,p_msg_name => l_error_message_code);
1246 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1247 l_assignment_rec.resource_id := NULL;
1248 END IF;
1249
1250 l_return_status := FND_API.G_MISS_CHAR;
1251 l_error_message_code := FND_API.G_MISS_CHAR;
1252 END IF; -- if open assignment
1253 END IF; -- if mass
1254
1255 --
1256 -- Validate Status code
1257 --
1258 -- need to convert from assignment status types to the status type
1259 -- defined in pa_project_statuses.
1260
1261 --don't need to validate status if copying a team role
1262
1263 IF p_asgn_creation_mode <> 'COPY' THEN
1264
1265 IF l_assignment_rec.assignment_type = 'OPEN_ASSIGNMENT' THEN
1266
1267 l_project_status_type := 'OPEN_ASGMT';
1268
1269 ELSIF l_assignment_rec.assignment_type = 'STAFFED_ASSIGNMENT' THEN
1270
1271 l_project_status_type := 'STAFFED_ASGMT';
1272
1273 ELSIF l_assignment_rec.assignment_type = 'STAFFED_ADMIN_ASSIGNMENT' THEN
1274
1275 l_project_status_type := 'STAFFED_ASGMT';
1276
1277 END IF;
1278
1279 IF l_assignment_rec.status_code = FND_API.G_MISS_CHAR THEN
1280
1281 l_status_code := null;
1282
1283 ELSE l_status_code := l_assignment_rec.status_code;
1284
1285 END IF;
1286
1287 PA_PROJECT_STUS_UTILS.Check_Status_Name_Or_Code ( p_status_code => l_status_code
1288 ,p_status_name => p_project_status_name
1289 ,p_status_type => l_project_status_type
1290 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1291 ,x_status_code => l_assignment_rec.status_code
1292 ,x_return_status => l_return_status
1293 ,x_error_message_code => l_error_message_code);
1294 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1295 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1296 , p_msg_name => l_error_message_code);
1297 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1298 END IF;
1299 l_return_status := FND_API.G_MISS_CHAR;
1300 l_error_message_code := FND_API.G_MISS_CHAR;
1301
1302 END IF;
1303
1304
1305 -- Validate Staffing Owner
1306 IF (l_assignment_rec.staffing_owner_person_id <> FND_API.G_MISS_NUM
1307 AND l_assignment_rec.staffing_owner_person_id IS NOT NULL)
1308 OR (p_staffing_owner_name <> FND_API.G_MISS_CHAR and p_staffing_owner_name IS NOT NULL) THEN
1309
1310 l_temp_staff_owner_person_id := l_assignment_rec.staffing_owner_person_id;
1311 PA_RESOURCE_UTILS.Check_ResourceName_Or_Id (
1312 p_resource_id => l_temp_staff_owner_person_id
1313 ,p_resource_name => p_staffing_owner_name
1314 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1315 ,p_date => sysdate
1316 ,x_resource_id => l_assignment_rec.staffing_owner_person_id
1317 ,x_resource_type_id => l_resource_type_id
1318 ,x_return_status => l_return_status
1319 ,x_error_message_code => l_error_message_code);
1320
1321 IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR l_resource_type_id <> 101 THEN
1322 PA_UTILS.Add_Message ('PA', 'PA_INV_STAFF_OWNER');
1323 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1324 END IF;
1325
1326 l_return_status := FND_API.G_MISS_CHAR;
1327 l_error_message_code := FND_API.G_MISS_CHAR;
1328
1329 END IF;
1330
1331 IF P_DEBUG_MODE = 'Y' THEN
1332 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1333 ,x_msg => 'before calendar = resource'
1334 ,x_log_level => li_message_level);
1335 END IF;
1336
1337 --
1338 --Check that resource calendar percent is between 0 and 100 if calender type is resource.
1339 --
1340 IF l_assignment_rec.calendar_type = 'RESOURCE' AND
1341 (l_assignment_rec.resource_calendar_percent IS NULL OR l_assignment_rec.resource_calendar_percent < 0 OR l_assignment_rec.resource_calendar_percent > 100) THEN
1342 PA_UTILS.Add_Message( p_app_short_name => 'PA'
1343 ,p_msg_name => 'PA_CALENDAR_PERCENT_INVALID');
1344 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1345 END IF;
1346
1347 -- initialize local action set id variable
1348 --
1349 l_adv_action_Set_id := p_adv_action_set_id;
1350
1351 -- The value to ID conversions which follow are not required
1352 -- in the following 2 cases:
1353 --
1354 -- 1) a staffed assignment is being created from an open assignment
1355 -- 2) an new open assignment is being created because the previous
1356 -- open assignment was partially filled.
1357
1358 IF l_assignment_rec.source_assignment_id = FND_API.G_MISS_NUM THEN
1359
1360 --
1361 -- Validate Role details
1362 -- This API will validate
1363 -- 1) the role
1364 -- 2) that the role belongs to the role list(if any)
1365
1366 --if the role list is not passed to the API then get it from the
1367 --project or team template.
1368 --PRM client side may pass in -999 b/c they can't pass in
1369 --FND_API.G_MISS_NUM and they need to bind the variable with something
1370 --as this API call is used in a number of different situations
1371 --- -999 should be treated as FND_API.G_MISS_NUM
1372 IF p_role_list_id = FND_API.G_MISS_NUM OR p_role_list_id = -999 THEN
1373 IF l_assignment_rec.project_id IS NOT NULL AND l_assignment_rec.project_id <> FND_API.G_MISS_NUM THEN
1374 SELECT role_list_id INTO l_role_list_id
1375 FROM pa_projects_all
1376 WHERE project_id = l_assignment_rec.project_id;
1377 ELSIF l_assignment_rec.assignment_template_id IS NOT NULL AND l_assignment_rec.assignment_template_id <> FND_API.G_MISS_NUM THEN
1378 SELECT role_list_id INTO l_role_list_id
1379 FROM pa_team_templates
1380 WHERE team_template_id = l_assignment_rec.assignment_template_id;
1381 END IF;
1382 ELSE
1383 l_role_list_id := p_role_list_id;
1384 END IF;
1385
1386 PA_ROLE_UTILS.Check_Role_RoleList ( p_role_id => l_assignment_rec.project_role_id
1387 ,p_role_name => p_project_role_name
1388 ,p_role_list_id => l_role_list_id
1389 ,p_role_list_name => NULL
1390 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1391 --,x_role_id => l_assignment_rec.project_role_id Bug: 4537865
1392 ,x_role_id => l_new_project_role_id --Bug: 4537865
1393 --,x_role_list_id => l_role_list_id Bug: 4537865
1394 ,x_role_list_id => l_new_role_list_id --Bug: 4537865
1395 ,x_return_status => l_return_status
1396 ,x_error_message_code => l_error_message_code );
1397 -- Bug: 4537865
1398 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1399 l_assignment_rec.project_role_id := l_new_project_role_id;
1400 l_role_list_id := l_new_role_list_id;
1401 END IF;
1402 -- Bug: 4537865
1403
1404 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1405 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1406 , p_msg_name => l_error_message_code );
1407 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1408 END IF;
1409 l_return_status := FND_API.G_MISS_CHAR;
1410 l_error_message_code := FND_API.G_MISS_CHAR;
1411
1412 --dbms_output.put_line('After Check Role List');
1413
1414 --
1415 -- Validate Location detail
1416 -- If country name is valid ans country_code is null returns the country_code
1417 --
1418 --No Need to Validate if country code and name are both not passed in
1419
1420 IF (p_location_country_code IS NOT NULL AND p_location_country_code <> FND_API.G_MISS_CHAR) OR
1421 (p_location_country_name IS NOT NULL AND p_location_country_name <> FND_API.G_MISS_CHAR) THEN
1422
1423 PA_LOCATION_UTILS.Check_Country_Name_Or_Code( p_country_code => p_location_country_code
1424 ,p_country_name => p_location_country_name
1425 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1426 ,x_country_code => l_location_country_code
1427 ,x_return_status => l_return_status
1428 ,x_error_message_code => l_error_message_code );
1429 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1430 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1431 ,p_msg_name => l_error_message_code );
1432 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1433 END IF;
1434 l_return_status := FND_API.G_MISS_CHAR;
1435 l_error_message_code := FND_API.G_MISS_CHAR;
1436 -- if country is not passed in, but region/city is passed in, give an error.
1437 ELSIF (p_location_city IS NOT NULL AND p_location_city <> FND_API.G_MISS_CHAR) OR
1438 (p_location_region IS NOT NULL AND p_location_region <> FND_API.G_MISS_CHAR) THEN
1439 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1440 ,p_msg_name => 'PA_COUNTRY_INVALID');
1441 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1442 END IF;
1443
1444 --
1445 --
1446 -- Validate assignment Job Levels only for Open Assignments
1447 --
1448
1449 IF l_assignment_rec.assignment_type = 'OPEN_ASSIGNMENT' THEN
1450
1451 -- Check Min level
1452 PA_JOB_UTILS.Check_JobLevel( p_level => l_assignment_rec.min_resource_job_level
1453 ,x_valid => l_valid_flag
1454 ,x_return_status => l_return_status
1455 ,x_error_message_code => l_error_message_code );
1456 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1457 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1458 ,p_msg_name => l_error_message_code );
1459 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1460 END IF;
1461 l_return_status := FND_API.G_MISS_CHAR;
1462 l_error_message_code := FND_API.G_MISS_CHAR;
1463
1464 -- Check Max level
1465 PA_JOB_UTILS.Check_JobLevel( p_level => l_assignment_rec.max_resource_job_level
1466 ,x_valid => l_valid_flag
1467 ,x_return_status => l_return_status
1468 ,x_error_message_code => l_error_message_code );
1469 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1470 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1471 ,p_msg_name => l_error_message_code );
1472 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1473 END IF;
1474 l_return_status := FND_API.G_MISS_CHAR;
1475 l_error_message_code := FND_API.G_MISS_CHAR;
1476
1477 -- Check that max job level is >= min job level
1478 --
1479 IF l_assignment_rec.min_resource_job_level > l_assignment_rec.max_resource_job_level THEN
1480 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1481 ,p_msg_name => 'PA_MIN_JL_GREATER_THAN_MAX');
1482 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1483 END IF;
1484
1485 --
1486 -- Validate number of requirements only for Open Assignments
1487 --
1488
1489 IF p_number_of_requirements - ROUND(p_number_of_requirements) <> 0
1490 OR p_number_of_requirements < 1 THEN
1491
1492 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1493 ,p_msg_name => 'PA_INVALID_REQ_COPIES_NO' );
1494 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1495 END IF;
1496
1497 END IF;
1498
1499 --
1500 --Validate Subteam Name / Subteam Id
1501 --
1502 IF ((p_project_subteam_id IS NOT NULL AND p_project_subteam_id <> FND_API.G_MISS_NUM) OR
1503 (p_project_subteam_name IS NOT NULL AND p_project_subteam_name <> FND_API.G_MISS_CHAR)) AND
1504 ((l_assignment_rec.project_id IS NOT NULL AND l_assignment_rec.project_id <>FND_API.G_MISS_NUM) OR
1505 (l_assignment_rec.assignment_template_id IS NOT NULL AND l_assignment_rec.assignment_template_id <> FND_API.G_MISS_NUM)) THEN
1506
1507 IF l_assignment_rec.project_id IS NOT NULL AND l_assignment_rec.project_id <>FND_API.G_MISS_NUM THEN
1508
1509 l_object_type := 'PA_PROJECTS';
1510
1511 l_object_id := l_assignment_rec.project_id;
1512
1513 ELSIF l_assignment_rec.assignment_template_id IS NOT NULL AND l_assignment_rec.assignment_template_id <> FND_API.G_MISS_NUM THEN
1514
1515 l_object_type := 'PA_TEAM_TEMPLATES';
1516
1517 l_object_id := l_assignment_rec.assignment_template_id;
1518
1519 END IF;
1520
1521 l_subteam_id := p_project_subteam_id;
1522
1523 IF (l_subteam_id = FND_API.G_MISS_NUM) THEN
1524 l_subteam_id := NULL;
1525 END IF;
1526
1527 PA_PROJECT_SUBTEAM_UTILS.Check_Subteam_Name_Or_Id( p_subteam_name => p_project_subteam_name
1528 ,p_object_type => l_object_type
1529 ,p_object_id => l_object_id
1530 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1531 ,x_subteam_id => l_subteam_id
1532 ,x_return_status => l_return_status
1533 ,x_error_message_code => l_error_message_code );
1534 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1535
1536 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1537 ,p_msg_name => l_error_message_code );
1538 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1539 END IF;
1540 l_return_status := FND_API.G_MISS_CHAR;
1541 l_error_message_code := FND_API.G_MISS_CHAR;
1542 END IF;
1543 --dbms_output.put_line('Project Subteam Id'||l_subteam_id);
1544
1545 IF P_DEBUG_MODE = 'Y' THEN
1546 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1547 ,x_msg => 'before calendar = project'
1548 ,x_log_level => li_message_level);
1549 END IF;
1550
1551 /* Bug 2887390 : Added the following condition */
1552 IF (l_assignment_rec.calendar_type = 'PROJECT' AND l_assignment_rec.calendar_id is NULL)
1553 THEN
1554 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1555 ,p_msg_name => 'PA_INVALID_CAL_PROJ_SETUP' );
1556
1557 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1558 END IF;
1559
1560 --
1561 --Calendar validation is only necessary when
1562 -- 1) For self-service, only Other calendar type need the check (since the project calendar is not user entered)
1563 -- 2) For non self-service, resource calendar does not need to be checked.
1564
1565 IF ((l_assignment_rec.calendar_type = 'OTHER' AND PA_STARTUP.G_Calling_Application = 'SELF_SERVICE')
1566 OR (l_assignment_rec.calendar_type <> 'RESOURCE' AND PA_STARTUP.G_Calling_Application <> 'SELF_SERVICE')) THEN
1567
1568 IF P_DEBUG_MODE = 'Y' THEN
1569 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1570 ,x_msg => 'cal_id='||l_assignment_rec.calendar_id||
1571 ', cal_name=' ||p_calendar_name
1572 ,x_log_level => li_message_level);
1573 END IF;
1574 --added for 13336768
1575 IF (l_assignment_rec.calendar_type = 'OTHER' AND p_calendar_name is null AND l_assignment_rec.calendar_id is NULL)
1576 THEN
1577 PA_UTILS.Add_Message( p_app_short_name => 'PA'
1578 ,p_msg_name => 'PA_OTHER_CALENDAR_NULL');
1579 RAISE FND_API.G_EXC_ERROR;
1580 END IF;
1581 --end for 13336768
1582
1583
1584
1585
1586 --
1587 -- Validate Calendar detail
1588 -- If calendar name is valid and calendar_id is null then returns the calendar_id
1589 --
1590 PA_CALENDAR_UTILS.Check_Calendar_Name_Or_Id( p_calendar_id => l_assignment_rec.calendar_id
1591 ,p_calendar_name => p_calendar_name
1592 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1593 --,x_calendar_id => l_assignment_rec.calendar_id * Bug: 4537865
1594 ,x_calendar_id => l_new_calendar_id --Bug: 4537865
1595 ,x_return_status => l_return_status
1596 ,x_error_message_code => l_error_message_code );
1597 -- Bug:4537865
1598 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1599 l_assignment_rec.calendar_id := l_new_calendar_id;
1600 END IF;
1601 -- Bug:4537865
1602
1603 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1604
1605 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1606 ,p_msg_name => l_error_message_code );
1607 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1608
1609
1610 END IF;
1611 l_return_status := FND_API.G_MISS_CHAR;
1612 l_error_message_code := FND_API.G_MISS_CHAR;
1613
1614 END IF;
1615 --dbms_output.put_line('After Calendar Check');
1616
1617 --
1618 -- Validate Work Type
1619 -- If work type name is valid and work_type_id is null then returns the work_type_id
1620 --
1621 IF P_DEBUG_MODE = 'Y' THEN
1622 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1623 ,x_msg => 'work_type_id='||l_assignment_rec.work_type_id||
1624 ', work_type_name='||p_work_type_name||
1625 ', flag='||PA_STARTUP.G_Check_ID_Flag
1626 ,x_log_level => li_message_level);
1627 END IF;
1628
1629 -- Bug 4499172
1630 l_temp_work_type_id := l_assignment_rec.work_type_id;
1631 PA_WORK_TYPE_UTILS.Check_Work_Type_Name_Or_Id( p_work_type_id => l_temp_work_type_id
1632 ,p_name => p_work_type_name
1633 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1634 ,x_work_type_id => l_assignment_rec.work_type_id
1635 ,x_return_status => l_return_status
1636 ,x_error_message_code => l_error_message_code );
1637
1638
1639
1640 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1641 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1642 ,p_msg_name => l_error_message_code );
1643 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1644 END IF;
1645 l_return_status := FND_API.G_MISS_CHAR;
1646 l_error_message_code := FND_API.G_MISS_CHAR;
1647
1648
1649 IF l_assignment_rec.expenditure_type IS NOT NULL AND l_assignment_rec.expenditure_type <> FND_API.G_MISS_CHAR THEN
1650 --
1651 --Validate Expenditure Type
1652 --
1653
1654 --Call Name to ID validation
1655 PA_EXPENDITURES_UTILS.Check_Expenditure_Type( p_expenditure_type => l_assignment_rec.expenditure_type
1656 ,p_date => l_assignment_rec.start_date
1657 ,x_valid => l_valid_flag
1658 ,x_return_status => l_return_status
1659 ,x_error_message_code => l_error_message_code);
1660
1661 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1662 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1663 ,p_msg_name => l_error_message_code );
1664 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1665 END IF;
1666 l_return_status := FND_API.G_MISS_CHAR;
1667 l_error_message_code := FND_API.G_MISS_CHAR;
1668
1669
1670 --
1671 --Validate Expenditure Type Class
1672 --
1673
1674 --Call Name to ID validation
1675 IF (l_assignment_rec.expenditure_type_class IS NOT NULL) AND
1676 (l_assignment_rec.expenditure_type_class <> FND_API.G_MISS_CHAR) THEN
1677
1678 l_temp_expenditure_type_class := l_assignment_rec.expenditure_type_class;
1679 PA_EXPENDITURES_UTILS.Check_Exp_Type_Class_Code(
1680 p_sys_link_func => l_temp_expenditure_type_class
1681 ,p_exp_meaning => NULL
1682 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1683 ,x_sys_link_func => l_assignment_rec.expenditure_type_class
1684 ,x_return_status => l_return_status
1685 ,x_error_message_code=> l_error_message_code) ;
1686 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1687 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1688 ,p_msg_name => l_error_message_code );
1689 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1690 END IF;
1691 l_return_status := FND_API.G_MISS_CHAR;
1692 l_error_message_code := FND_API.G_MISS_CHAR;
1693
1694 --else get expenditure type class using expenditure type
1695 ELSIF (l_assignment_rec.expenditure_type <> NULL
1696 AND l_assignment_rec.expenditure_type <>FND_API.G_MISS_CHAR) THEN
1697 --Get expenditure type class code
1698 OPEN get_expenditure_type_class;
1699 FETCH get_expenditure_type_class INTO l_assignment_rec.expenditure_type_class;
1700
1701 IF get_expenditure_type_class%NOTFOUND THEN
1702 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1703 ,p_msg_name => 'PA_EXPTYPE_INVALID' );
1704 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1705 END IF;
1706 CLOSE get_expenditure_type_class;
1707 END IF;
1708
1709
1710
1711 --
1712 --Validate Expenditure Type and Type Class comb
1713 l_valid_flag := 'Y'; --
1714 PA_EXPENDITURES_UTILS.Check_Exp_Type_Sys_Link_Combo(
1715 p_exp_type => l_assignment_rec.expenditure_type
1716 ,p_ei_date => l_assignment_rec.start_date
1717 ,p_sys_link_func => l_assignment_Rec.expenditure_type_class
1718 ,x_valid => l_valid_flag
1719 ,x_return_status => l_return_status
1720 ,x_error_message_code=> l_error_message_code);
1721
1722 -- 5130421 : We shd check both l_return_status and also l_valid_flag
1723 -- This is because of a bug in Check_Exp_Type_Sys_Link_Combo code
1724 --IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1725 IF l_valid_flag <> 'Y' THEN
1726 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1727 ,p_msg_name => 'PA_EXPTYPE_SYSLINK_INVALID' );
1728 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1729 END IF;
1730 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1731 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1732 ,p_msg_name => l_error_message_code );
1733 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1734 END IF;
1735 l_return_status := FND_API.G_MISS_CHAR;
1736 l_error_message_code := FND_API.G_MISS_CHAR;
1737 END IF; -- end of checking expenditure type and expenditure type class
1738
1739 -- Bug 5130421 : Validate expense limit to be positive
1740 IF (l_assignment_rec.expense_limit < 0) THEN
1741 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1742 ,p_msg_name => 'PA_EXPENSE_LIMIT_INVALID' );
1743 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1744 END IF;
1745 -- End Bug 5130421
1746 --
1747 --Validate Staffing Priority
1748 --
1749 IF (l_assignment_rec.staffing_priority_code IS NOT NULL AND
1750 l_assignment_rec.staffing_priority_code <> FND_API.G_MISS_CHAR) OR
1751 (p_staffing_priority_name IS NOT NULL AND p_staffing_priority_name <> FND_API.G_MISS_CHAR) THEN
1752
1753 PA_ASSIGNMENT_UTILS.Check_STF_PriorityName_Or_Code (p_staffing_priority_code => l_assignment_rec.staffing_priority_code
1754 ,p_staffing_priority_name => p_staffing_priority_name
1755 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1756 --,x_staffing_priority_code => l_assignment_rec.staffing_priority_code Bug:4537865
1757 ,x_staffing_priority_code => l_new_staffing_priority_code --Bug:4537865
1758 ,x_return_status => l_return_status
1759 ,x_error_message_code => l_error_message_code);
1760 -- Bug: 4537865
1761 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1762 l_assignment_rec.staffing_priority_code := l_new_staffing_priority_code;
1763 END IF;
1764 -- Bug: 4537865
1765 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1766 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1767 ,p_msg_name => l_error_message_code );
1768 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1769 END IF;
1770 l_return_status := FND_API.G_MISS_CHAR;
1771 l_error_message_code := FND_API.G_MISS_CHAR;
1772 END IF;
1773
1774 --dbms_output.put_line('before calling check action set name or id = '|| p_adv_action_set_id);
1775
1776 --Validate Advertisement Action Set
1777 --
1778 IF (p_adv_action_set_id IS NOT NULL AND p_adv_action_set_id <> FND_API.G_MISS_NUM) OR
1779 (p_adv_action_set_name IS NOT NULL AND p_adv_action_set_name <> FND_API.G_MISS_CHAR) THEN
1780
1781 PA_ACTION_SET_UTILS.Check_Action_Set_Name_or_Id(
1782 p_action_set_id => p_adv_action_set_id
1783 ,p_action_set_name => p_adv_action_set_name
1784 ,p_action_set_type_code => 'ADVERTISEMENT'
1785 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
1786 ,p_date => sysdate
1787 ,x_action_set_id => l_adv_action_set_id
1788 ,x_return_status => l_return_status
1789 ,x_error_message_code => l_error_message_code
1790 );
1791
1792 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1793 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
1794 ,p_msg_name => l_error_message_code );
1795 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1796 END IF;
1797 l_return_status := FND_API.G_MISS_CHAR;
1798 l_error_message_code := FND_API.G_MISS_CHAR;
1799
1800 END IF;
1801
1802 END IF; --if source_assignment_id IS NULL
1803
1804 --Log Message
1805 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
1806 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment.after_validation'
1807 ,x_msg => 'Finished Validation, calling private create_assignment'
1808 ,x_log_level => 5);
1809 END IF;
1810
1811 IF p_asgn_creation_mode <> 'MASS' OR (p_asgn_creation_mode = 'MASS' AND p_validate_only = FND_API.G_FALSE) THEN
1812
1813 IF P_DEBUG_MODE = 'Y' THEN
1814 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1815 ,x_msg => 'before call pvt.create_assignment'
1816 ,x_log_level => li_message_level);
1817 END IF;
1818
1819 -- Call the private package
1820 PA_ASSIGNMENTS_PVT.Create_Assignment
1821 ( p_assignment_rec => l_assignment_rec
1822 ,p_asgn_creation_mode => p_asgn_creation_mode
1823 ,p_resource_source_id => l_resource_source_id
1824 ,p_project_subteam_id => l_subteam_id
1825 ,p_location_city => p_location_city
1826 ,p_location_region => p_location_region
1827 ,p_location_country_code => l_location_country_code
1828 ,p_adv_action_set_id => l_adv_action_set_id
1829 ,p_start_adv_action_set_flag => p_start_adv_action_set_flag
1830 ,p_sum_tasks_flag => p_sum_tasks_flag -- FP.M Development
1831 ,p_budget_version_id => p_budget_version_id
1832 ,p_number_of_requirements => p_number_of_requirements
1833 ,p_commit => p_commit
1834 ,p_validate_only => p_validate_only
1835 ,x_new_assignment_id => x_new_assignment_id
1836 ,x_assignment_number => x_assignment_number
1837 ,x_assignment_row_id => x_assignment_row_id
1838 ,x_resource_id => x_resource_id
1839 ,x_return_status => l_return_status
1840 );
1841 IF P_DEBUG_MODE = 'Y' THEN
1842 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Create_Assignment'
1843 ,x_msg => 'after call pvt.create_assignment'
1844 ,x_log_level => li_message_level);
1845 END IF;
1846
1847 END IF;
1848
1849 --
1850 -- IF the number of messaages is 1 then fetch the message code from the stack and return its text
1851 --
1852
1853 x_msg_count := FND_MSG_PUB.Count_Msg;
1854
1855 IF x_msg_count = 1 THEN
1856 pa_interface_utils_pub.get_messages ( p_encoded => FND_API.G_TRUE
1857 ,p_msg_index => 1
1858 ,p_data => x_msg_data
1859 ,p_msg_index_out => l_msg_index_out
1860 );
1861 END IF;
1862
1863 --clear global table of newly created assignment ids
1864 /* Commented the code for bug 3079906
1865 PA_ASSIGNMENTS_PUB.g_assignment_id_tbl.DELETE;*/
1866
1867
1868 -- Reset the error stack when returning to the calling program
1869
1870 PA_DEBUG.Reset_Err_Stack;
1871
1872 -- If g_error_exists is TRUE then set the x_return_status to 'E'
1873
1874 IF FND_MSG_PUB.Count_Msg > 0 THEN
1875
1876 x_return_status := FND_API.G_RET_STS_ERROR;
1877
1878 END IF;
1879
1880 IF p_commit = FND_API.G_TRUE THEN
1881 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
1882 COMMIT;
1883 ELSE
1884 ROLLBACK TO ASG_PUB_CREATE_ASSIGNMENT;
1885 END IF;
1886 END IF;
1887
1888 ELSE -- IF ( l_valid_assign_start_flag = 'Y' )
1889 -- l_profile_begin_date := to_date(fnd_profile.value('PA_UTL_START_DATE'), 'DD/MM/YYYY'); /* commenting for For Bug 7304151 */
1890 l_profile_begin_date := to_date(fnd_profile.value('PA_UTL_START_DATE'), 'DD/MM/YYYY', 'NLS_DATE_LANGUAGE=AMERICAN'); /*Adding For Bug 7304151 */
1891 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
1892 ,p_msg_name => 'PA_INVALID_ASSIGN_START_DATE'
1893 ,p_token1 => 'PROFILE_DATE'
1894 ,p_value1 => l_profile_begin_date );
1895 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
1896 x_return_status := FND_API.G_RET_STS_ERROR;
1897 l_error_message_code := 'PA_INVALID_ASSIGN_START_DATE';
1898 END IF; -- IF ( l_valid_assign_start_flag = 'Y' )
1899
1900 EXCEPTION
1901
1902 ----addded for 13336768
1903 WHEN FND_API.G_EXC_ERROR THEN
1904 x_return_status := FND_API.G_RET_STS_ERROR;
1905 x_msg_count := FND_MSG_PUB.Count_Msg;
1906
1907 IF x_msg_count = 1 THEN
1908 pa_interface_utils_pub.get_messages
1909 (p_encoded => FND_API.G_TRUE,
1910 p_msg_index => 1,
1911 p_data => x_msg_data,
1912 p_msg_index_out => l_msg_index_out );
1913 END IF;
1914 --end for 13336768
1915 WHEN OTHERS THEN
1916
1917 IF p_commit = FND_API.G_TRUE THEN
1918 ROLLBACK TO ASG_PUB_CREATE_ASSIGNMENT;
1919 END IF;
1920
1921 --clear global table of newly created assignment ids
1922 PA_ASSIGNMENTS_PUB.g_assignment_id_tbl.DELETE;
1923
1924 -- Set the excetption Message and the stack
1925 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Create_Assignment'
1926 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
1927 --
1928 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1929 RAISE;
1930 --
1931 END Create_Assignment;
1932
1933
1934
1935 PROCEDURE Execute_Staff_Assign_From_Open
1936 ( p_asgn_creation_mode IN VARCHAR2 := 'FULL'
1937 ,p_record_version_number IN NUMBER := FND_API.G_MISS_NUM
1938 ,p_multiple_status_flag IN pa_project_assignments.multiple_status_flag%TYPE := FND_API.G_MISS_CHAR
1939 ,p_assignment_status_code IN pa_project_statuses.project_status_code%TYPE := FND_API.G_MISS_CHAR
1940 ,p_assignment_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
1941 ,p_unfilled_assign_status_code IN pa_project_statuses.project_status_code%TYPE := FND_API.G_MISS_CHAR
1942 ,p_unfilled_assign_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
1943 ,p_remaining_candidate_code IN pa_lookups.lookup_code%TYPE := FND_API.G_MISS_CHAR
1944 ,p_change_reason_code IN pa_lookups.lookup_code%TYPE := FND_API.G_MISS_CHAR
1945 ,p_resource_id IN pa_resources.resource_id%TYPE := FND_API.G_MISS_NUM
1946 ,p_project_party_id IN pa_project_assignments.project_party_id%TYPE := FND_API.G_MISS_NUM
1947 ,p_start_date IN pa_project_assignments.start_date%TYPE := FND_API.G_MISS_DATE
1948 ,p_end_date IN pa_project_assignments.end_date%TYPE := FND_API.G_MISS_DATE
1949 ,p_source_assignment_id IN pa_project_assignments.source_assignment_id%TYPE := FND_API.G_MISS_NUM
1950 ,p_resource_name IN pa_resources.name%TYPE := FND_API.G_MISS_CHAR
1951 ,p_resource_source_id IN NUMBER := FND_API.G_MISS_NUM
1952 ,p_api_version IN NUMBER := 1.0
1953 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
1954 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
1955 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
1956 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
1957 ,x_new_assignment_id OUT NOCOPY pa_project_assignments.assignment_id%TYPE --File.Sql.39 bug 4440895
1958 ,x_assignment_number OUT NOCOPY pa_project_assignments.assignment_number%TYPE --File.Sql.39 bug 4440895
1959 ,x_assignment_row_id OUT NOCOPY ROWID --File.Sql.39 bug 4440895
1960 ,x_resource_id OUT NOCOPY pa_resources.resource_id%TYPE --File.Sql.39 bug 4440895
1961 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1962 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
1963 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1964 )
1965 IS
1966
1967 l_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
1968 l_return_status VARCHAR2(1);
1969 l_msg_index_out NUMBER;
1970
1971 BEGIN
1972
1973 -- Initialize the Error Stack
1974 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Execute_Staff_Assign_From_Open');
1975
1976 -- Initialize the return status to success
1977 x_return_status := FND_API.G_RET_STS_SUCCESS;
1978
1979 -- Clear the global PL/SQL message table
1980 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
1981 FND_MSG_PUB.initialize;
1982 END IF;
1983
1984 --Log Message
1985 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
1986 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Execute_Staff_Assign_From_Open.begin'
1987 ,x_msg => 'Beginning of Execute_Staff_Assign_From_Open'
1988 ,x_log_level => 5);
1989 END IF;
1990
1991 --
1992 -- Assign the scalar parameters to the assignment record fields
1993 --
1994 BEGIN
1995 l_assignment_rec.assignment_type := 'STAFFED_ASSIGNMENT';
1996 l_assignment_rec.multiple_status_flag := p_multiple_status_flag;
1997 l_assignment_rec.status_code := p_assignment_status_code;
1998 l_assignment_rec.resource_id := p_resource_id;
1999 l_assignment_rec.project_party_id := p_project_party_id;
2000 l_assignment_rec.start_date := p_start_date;
2001 l_assignment_rec.end_date := p_end_date;
2002 l_assignment_rec.source_assignment_id := p_source_assignment_id;
2003 l_assignment_rec.record_version_number := p_record_version_number;
2004 END;
2005
2006 --Log Message
2007 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
2008 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Execute_Staff_Assign_From_Open.staff_assign'
2009 ,x_msg => 'Calling Staff_Assign_From_Open'
2010 ,x_log_level => 5);
2011 END IF;
2012 --
2013 -- Call the assign resource to open assignment public API
2014 PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open
2015 ( p_assignment_rec => l_assignment_rec
2016 ,p_asgn_creation_mode => p_asgn_creation_mode
2017 ,p_unfilled_assign_status_code => p_unfilled_assign_status_code
2018 ,p_unfilled_assign_status_name => p_unfilled_assign_status_name
2019 ,p_remaining_candidate_code => p_remaining_candidate_code
2020 ,p_change_reason_code => p_change_reason_code
2021 ,p_resource_name => p_resource_name
2022 ,p_resource_source_id => p_resource_source_id
2023 ,p_assignment_status_name => p_assignment_status_name
2024 ,p_api_version => p_api_version
2025 ,p_commit => p_commit
2026 ,p_validate_only => p_validate_only
2027 ,p_max_msg_count => p_max_msg_count
2028 ,x_new_assignment_id => x_new_assignment_id
2029 ,x_assignment_number => x_assignment_number
2030 ,x_assignment_row_id => x_assignment_row_id
2031 ,x_resource_id => x_resource_id
2032 ,x_return_status => l_return_status
2033 ,x_msg_count => x_msg_count
2034 ,x_msg_data => x_msg_data
2035 );
2036
2037 -- If g_error_exists is TRUE then set the x_return_status to 'E'
2038
2039 x_msg_count := FND_MSG_PUB.Count_Msg;
2040 IF x_msg_count = 1 THEN
2041 pa_interface_utils_pub.get_messages ( p_encoded => FND_API.G_TRUE
2042 ,p_msg_index => 1
2043 ,p_data => x_msg_data
2044 ,p_msg_index_out => l_msg_index_out
2045 );
2046 END IF;
2047
2048 IF x_msg_count > 0 THEN
2049 x_return_status := FND_API.G_RET_STS_ERROR;
2050 END IF;
2051
2052 IF p_commit = FND_API.G_TRUE THEN
2053 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
2054 COMMIT;
2055 ELSE
2056 ROLLBACK TO ASG_PUB_STAFF_ASSIGN_FROM_OPEN;
2057 END IF;
2058 END IF;
2059
2060 -- Reset the error stack when returning to the calling program
2061 PA_DEBUG.Reset_Err_Stack;
2062
2063 EXCEPTION
2064 WHEN OTHERS THEN
2065
2066 -- Set the excetption Message and the stack
2067 FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Exec_Staff_Assign_From_Open'
2068 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
2069 --
2070 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2071 RAISE; -- This is optional depending on the needs
2072
2073 END Execute_Staff_Assign_From_Open;
2074
2075
2076
2077
2078 PROCEDURE Staff_Assign_From_Open
2079 ( p_assignment_rec IN PA_ASSIGNMENTS_PUB.Assignment_Rec_Type
2080 ,p_asgn_creation_mode IN VARCHAR2 := 'FULL'
2081 ,p_unfilled_assign_status_code IN pa_project_statuses.project_status_code%TYPE := FND_API.G_MISS_CHAR
2082 ,p_unfilled_assign_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
2083 ,p_remaining_candidate_code IN pa_lookups.lookup_code%TYPE := FND_API.G_MISS_CHAR
2084 ,p_change_reason_code IN pa_lookups.lookup_code%TYPE := FND_API.G_MISS_CHAR
2085 ,p_resource_name IN pa_resources.name%TYPE := FND_API.G_MISS_CHAR
2086 ,p_resource_source_id IN NUMBER := FND_API.G_MISS_NUM
2087 ,p_assignment_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
2088 ,p_api_version IN NUMBER := 1.0
2089 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
2090 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
2091 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
2092 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
2093 ,x_new_assignment_id OUT NOCOPY pa_project_assignments.assignment_id%TYPE --File.Sql.39 bug 4440895
2094 ,x_assignment_number OUT NOCOPY pa_project_assignments.assignment_number%TYPE --File.Sql.39 bug 4440895
2095 ,x_assignment_row_id OUT NOCOPY ROWID --File.Sql.39 bug 4440895
2096 ,x_resource_id OUT NOCOPY pa_resources.resource_id%TYPE --File.Sql.39 bug 4440895
2097 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2098 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
2099 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
2100 )
2101 IS
2102
2103 l_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
2104 l_source_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
2105 l_new_open_assignment_tbl PA_ASSIGNMENTS_PUB.Assignment_Tbl_Type;
2106 l_resource_source_id NUMBER;
2107 l_return_status VARCHAR2(1);
2108 l_error_message_code fnd_new_messages.message_name%TYPE;
2109 l_msg_count NUMBER;
2110 l_msg_data VARCHAR2(2000);
2111 l_new_open_asgn_id NUMBER;
2112 l_new_open_asgn_number NUMBER;
2113 l_new_open_asgn_row_id ROWID;
2114 l_resource_type_id NUMBER;
2115 l_msg_index_out NUMBER;
2116 l_default_filled_status_code VARCHAR2(80);
2117 l_sch_exception_id NUMBER;
2118 l_status_controls_valid VARCHAR2(1) := 'Y';
2119 l_index NUMBER;
2120
2121 l_task_assignment_id_tbl system.pa_num_tbl_type := system.pa_num_tbl_type();
2122 l_task_version_id_tbl system.pa_num_tbl_type := system.pa_num_tbl_type();
2123 l_budget_version_id_tbl system.pa_num_tbl_type := system.pa_num_tbl_type();
2124 l_struct_version_id_tbl system.pa_num_tbl_type := system.pa_num_tbl_type();
2125 l_task_id_tbl system.pa_num_tbl_type := system.pa_num_tbl_type();
2126
2127 l_resource_list_members_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2128 l_resource_class_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := system.pa_varchar2_1_tbl_type();
2129 l_resource_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2130 l_resource_class_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2131 l_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2132 l_incur_by_res_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2133 l_person_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2134 l_job_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2135 l_person_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2136 l_named_role_tbl SYSTEM.PA_VARCHAR2_80_TBL_TYPE := system.pa_varchar2_80_tbl_type();
2137 l_bom_resource_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2138 l_non_labor_resource_tbl SYSTEM.PA_VARCHAR2_20_TBL_TYPE := system.pa_varchar2_20_tbl_type();
2139 l_inventory_item_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2140 l_item_category_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2141 l_project_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2142 l_organization_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2143 l_fc_res_type_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2144 l_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2145 l_expenditure_category_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2146 l_event_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2147 l_revenue_category_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2148 l_supplier_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2149 l_spread_curve_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2150 l_etc_method_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2151 l_mfc_cost_type_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2152 l_incurred_by_res_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := system.pa_varchar2_1_tbl_type();
2153 l_incur_by_res_class_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2154 l_incur_by_role_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2155 l_unit_of_measure_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2156 l_org_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2157 l_rate_based_flag_tbl SYSTEM.PA_VARCHAR2_1_TBL_TYPE := system.pa_varchar2_1_tbl_type();
2158 l_rate_expenditure_type_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2159 l_rate_func_curr_code_tbl SYSTEM.PA_VARCHAR2_30_TBL_TYPE := system.pa_varchar2_30_tbl_type();
2160 l_rate_incurred_by_org_id_tbl SYSTEM.PA_NUM_TBL_TYPE := system.pa_num_tbl_type();
2161 l_cur_role_flag Varchar2(1);
2162
2163 CURSOR check_record_version IS
2164 SELECT ROWID
2165 FROM pa_project_assignments
2166 WHERE assignment_id = p_assignment_rec.source_assignment_id
2167 AND record_version_number = p_assignment_rec.record_version_number;
2168
2169 CURSOR get_status_codes IS
2170 SELECT DISTINCT status_code
2171 FROM pa_schedules /* Bug 5614557 Changed usage from pa_schedules_v to pa_schedules */
2172 WHERE assignment_id = p_assignment_rec.source_assignment_id;
2173
2174 CURSOR check_project_assignment_wf IS
2175 SELECT mass_wf_in_progress_flag
2176 FROM pa_project_assignments
2177 WHERE assignment_id = p_assignment_rec.source_assignment_id;
2178
2179 -- get advertisement action set details
2180 CURSOR get_action_set IS
2181 SELECT action_set_id, record_version_number
2182 FROM pa_action_sets
2183 WHERE object_id = p_assignment_rec.source_assignment_id
2184 AND object_type = 'OPEN_ASSIGNMENT'
2185 AND action_set_type_code = 'ADVERTISEMENT'
2186 AND status_code <> 'DELETED';
2187
2188 -- get rlm of the new staffed assignment
2189 CURSOR get_staffed_asgmt_rlm(c_assignment_id NUMBER) IS
2190 SELECT pa.resource_list_member_id, rta.person_id
2191 FROM pa_project_assignments pa,
2192 pa_resource_txn_attributes rta
2193 WHERE pa.assignment_id = c_assignment_id
2194 AND pa.resource_id = rta.resource_id;
2195
2196 CURSOR get_linked_res_asgmts IS
2197 SELECT resource_assignment_id, wbs_element_version_id, budget_version_id, project_structure_version_id
2198 FROM
2199 (
2200 (SELECT ra.resource_assignment_id, ra.wbs_element_version_id, bv.budget_version_id, bv.project_structure_version_id
2201 FROM PA_RESOURCE_ASSIGNMENTS ra
2202 ,PA_BUDGET_VERSIONS bv
2203 ,PA_PROJ_ELEM_VER_STRUCTURE evs
2204 WHERE ra.project_id = bv.project_id
2205 AND bv.project_id = evs.project_id
2206 AND ra.budget_version_id = bv.budget_version_id
2207 AND bv.project_structure_version_id = evs.element_version_id
2208 AND ra.project_id = l_assignment_rec.project_id
2209 AND ra.project_assignment_id = l_assignment_rec.source_assignment_id
2210 AND evs.status_code = 'STRUCTURE_WORKING')
2211 UNION ALL
2212 (SELECT ra.resource_assignment_id, ra.wbs_element_version_id, bv.budget_version_id, bv.project_structure_version_id
2213 FROM PA_RESOURCE_ASSIGNMENTS ra
2214 ,PA_BUDGET_VERSIONS bv
2215 ,PA_PROJ_ELEM_VER_STRUCTURE evs
2216 ,PA_PROJ_WORKPLAN_ATTR pwa
2217 WHERE pwa.wp_enable_Version_flag = 'N'
2218 AND pwa.project_id = ra.project_id
2219 AND pwa.proj_element_id = evs.proj_element_id
2220 AND ra.project_id = bv.project_id
2221 AND bv.project_id = evs.project_id
2222 AND ra.budget_version_id = bv.budget_version_id
2223 AND bv.project_structure_version_id = evs.element_version_id
2224 AND ra.project_id = l_assignment_rec.project_id
2225 AND ra.project_assignment_id = l_assignment_rec.source_assignment_id)
2226 )
2227 ORDER BY budget_version_id, project_structure_version_id;
2228
2229 CURSOR get_rlm_changeable_linked_ra (p_new_resource_list_member_id NUMBER) IS
2230 SELECT resource_assignment_id, wbs_element_version_id, budget_version_id, project_structure_version_id, task_id
2231 FROM
2232 (
2233 (SELECT ra.resource_assignment_id, ra.wbs_element_version_id, bv.budget_version_id, bv.project_structure_version_id, ra.task_id
2234 FROM PA_RESOURCE_ASSIGNMENTS ra
2235 ,PA_BUDGET_VERSIONS bv
2236 ,PA_PROJ_ELEM_VER_STRUCTURE evs
2237 WHERE ra.project_id = bv.project_id
2238 AND bv.project_id = evs.project_id
2239 AND ra.budget_version_id = bv.budget_version_id
2240 AND bv.project_structure_version_id = evs.element_version_id
2241 AND ra.project_id = l_assignment_rec.project_id
2242 AND ra.project_assignment_id = l_assignment_rec.source_assignment_id
2243 AND evs.status_code = 'STRUCTURE_WORKING')
2244 UNION ALL
2245 (SELECT ra.resource_assignment_id, ra.wbs_element_version_id, bv.budget_version_id, bv.project_structure_version_id, ra.task_id
2246 FROM PA_RESOURCE_ASSIGNMENTS ra
2247 ,PA_BUDGET_VERSIONS bv
2248 ,PA_PROJ_ELEM_VER_STRUCTURE evs
2249 ,PA_PROJ_WORKPLAN_ATTR pwa
2250 WHERE pwa.wp_enable_Version_flag = 'N'
2251 AND pwa.project_id = ra.project_id
2252 AND pwa.proj_element_id = evs.proj_element_id
2253 AND ra.project_id = bv.project_id
2254 AND bv.project_id = evs.project_id
2255 AND ra.budget_version_id = bv.budget_version_id
2256 AND bv.project_structure_version_id = evs.element_version_id
2257 AND ra.project_id = l_assignment_rec.project_id
2258 AND ra.project_assignment_id = l_assignment_rec.source_assignment_id)
2259 ) linked_res_asgmts
2260 WHERE NOT EXISTS
2261 (
2262 SELECT *
2263 FROM pa_resource_assignments ra
2264 WHERE ra.budget_version_id = linked_res_asgmts.budget_version_id
2265 AND ra.resource_list_member_id = p_new_resource_list_member_id
2266 AND ra.task_id = linked_res_asgmts.task_id
2267 AND ra.resource_assignment_id <> linked_res_asgmts.resource_assignment_id
2268 )
2269 ORDER BY budget_version_id, project_structure_version_id;
2270
2271 CURSOR get_rlm_unchangeable_linked_ra (p_new_resource_list_member_id NUMBER) IS
2272 SELECT resource_assignment_id, wbs_element_version_id, budget_version_id, project_structure_version_id, task_id
2273 FROM
2274 (
2275 (SELECT ra.resource_assignment_id, ra.wbs_element_version_id, bv.budget_version_id, bv.project_structure_version_id, ra.task_id
2276 FROM PA_RESOURCE_ASSIGNMENTS ra
2277 ,PA_BUDGET_VERSIONS bv
2278 ,PA_PROJ_ELEM_VER_STRUCTURE evs
2279 WHERE ra.project_id = bv.project_id
2280 AND bv.project_id = evs.project_id
2281 AND ra.budget_version_id = bv.budget_version_id
2282 AND bv.project_structure_version_id = evs.element_version_id
2283 AND ra.project_id = l_assignment_rec.project_id
2284 AND ra.project_assignment_id = l_assignment_rec.source_assignment_id
2285 AND evs.status_code = 'STRUCTURE_WORKING')
2286 UNION ALL
2287 (SELECT ra.resource_assignment_id, ra.wbs_element_version_id, bv.budget_version_id, bv.project_structure_version_id, ra.task_id
2288 FROM PA_RESOURCE_ASSIGNMENTS ra
2289 ,PA_BUDGET_VERSIONS bv
2290 ,PA_PROJ_ELEM_VER_STRUCTURE evs
2291 ,PA_PROJ_WORKPLAN_ATTR pwa
2292 WHERE pwa.wp_enable_Version_flag = 'N'
2293 AND pwa.project_id = ra.project_id
2294 AND pwa.proj_element_id = evs.proj_element_id
2295 AND ra.project_id = bv.project_id
2296 AND bv.project_id = evs.project_id
2297 AND ra.budget_version_id = bv.budget_version_id
2298 AND bv.project_structure_version_id = evs.element_version_id
2299 AND ra.project_id = l_assignment_rec.project_id
2300 AND ra.project_assignment_id = l_assignment_rec.source_assignment_id)
2301 ) linked_res_asgmts
2302 WHERE EXISTS
2303 (
2304 SELECT *
2305 FROM pa_resource_assignments ra
2306 WHERE ra.budget_version_id = linked_res_asgmts.budget_version_id
2307 AND ra.resource_list_member_id = p_new_resource_list_member_id
2308 AND ra.task_id = linked_res_asgmts.task_id
2309 AND ra.resource_assignment_id <> linked_res_asgmts.resource_assignment_id
2310 )
2311 ORDER BY budget_version_id, project_structure_version_id;
2312
2313 CURSOR get_res_mand_attributes IS
2314 SELECT rf.ROLE_ENABLED_FLAG
2315 FROM pa_res_formats_b rf,
2316 pa_resource_list_members rlm,
2317 pa_project_assignments pa
2318 WHERE pa.assignment_id = l_assignment_rec.source_assignment_id
2319 AND pa.resource_list_member_id IS NOT NULL
2320 AND rlm.resource_list_member_id = pa.resource_list_member_id
2321 AND rlm.res_format_id = rf.res_format_id;
2322
2323
2324 TYPE status_codes IS TABLE OF pa_project_assignments.status_code%TYPE;
2325 l_status_codes status_codes;
2326 l_mass_wf_in_progress_flag pa_project_assignments.mass_wf_in_progress_flag%TYPE;
2327 l_action_set_id NUMBER;
2328 l_record_version_number NUMBER;
2329
2330 l_new_rlm_id pa_project_assignments.resource_list_member_id%TYPE;
2331 l_old_rlm_id pa_project_assignments.resource_list_member_id%TYPE;
2332 l_new_person_id pa_resource_txn_attributes.person_id%TYPE;
2333 l_rlm_id pa_project_assignments.resource_list_member_id%TYPE;
2334
2335 l_candidate_in_rec PA_RES_MANAGEMENT_AMG_PUB.CANDIDATE_IN_REC_TYPE; -- Added for bug 9187892
2336
2337 BEGIN
2338
2339 -- Initialize the Error Stack
2340 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open');
2341 --dbms_output.put_line('PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open');
2342
2343 -- Initialize the error flag
2344 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_FALSE;
2345
2346 -- Initialize the return status to success
2347 x_return_status := FND_API.G_RET_STS_SUCCESS;
2348
2349 --Issue API savepoint if the transaction is to be committed
2350 IF p_commit = FND_API.G_TRUE THEN
2351 SAVEPOINT ASG_PUB_STAFF_ASSIGN_FROM_OPEN;
2352 END IF;
2353
2354 --Clear the global PL/SQL message table
2355 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
2356 FND_MSG_PUB.initialize;
2357 END IF;
2358
2359 --Log Message
2360 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
2361 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open.begin'
2362 ,x_msg => 'Staff_Assign_From_Open, src_asgmt_id='||p_assignment_rec.source_assignment_id
2363 ,x_log_level => 5);
2364 END IF;
2365 l_assignment_rec := p_assignment_rec;
2366
2367 OPEN check_project_assignment_wf;
2368 FETCH check_project_assignment_wf INTO l_mass_wf_in_progress_flag;
2369 CLOSE check_project_assignment_wf;
2370
2371 OPEN check_record_version;
2372 FETCH check_record_version INTO l_assignment_rec.assignment_row_id;
2373
2374 IF l_mass_wf_in_progress_flag = 'Y' THEN
2375
2376 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
2377 ,p_msg_name => 'PA_ASSIGNMENT_WF');
2378 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
2379
2380 ELSIF check_record_version%NOTFOUND THEN
2381
2382 PA_UTILS.Add_Message( p_app_short_name => 'PA'
2383 ,p_msg_name => 'PA_XC_RECORD_CHANGED');
2384 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
2385
2386 ELSE
2387
2388 FND_PROFILE.Get('PA_DEF_FILLED_ASGMT_STATUS',l_default_filled_status_code);
2389
2390 IF l_default_filled_status_code IS NULL THEN
2391
2392 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
2393 ,p_msg_name => 'PA_FILLED_STATUS_NOT_DEFINED');
2394 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
2395
2396 ELSE
2397
2398 -- Assign the record to the local variable
2399
2400 -- Get the details of the open assignment. These details are required to
2401 -- 1) create a new Staffed Assignment from the existing Open Assignment and
2402 -- 2) create new Open Assignment(s) if the open assignment is only being
2403 -- partially filled.
2404
2405 --
2406 -- Load the source open assignment detail into the source record
2407 --
2408 SELECT assignment_id
2409 ,assignment_name
2410 ,assignment_type
2411 ,status_code
2412 ,staffing_priority_code
2413 ,project_id
2414 ,project_role_id
2415 ,description
2416 ,start_date
2417 ,end_date
2418 ,assignment_effort
2419 ,extension_possible
2420 ,source_assignment_id
2421 ,min_resource_job_level
2422 ,max_resource_job_level
2423 ,additional_information
2424 ,location_id
2425 ,work_type_id
2426 ,revenue_currency_code
2427 ,revenue_bill_rate
2428 ,markup_percent
2429 ,expense_owner
2430 ,expense_limit
2431 ,expense_limit_currency_code
2432 ,fcst_tp_amount_type
2433 ,fcst_job_id
2434 ,fcst_job_group_id
2435 ,expenditure_org_id
2436 ,expenditure_organization_id
2437 ,expenditure_type_class
2438 ,expenditure_type
2439 ,calendar_type
2440 ,calendar_id
2441 ,attribute_category
2442 ,attribute1
2443 ,attribute2
2444 ,attribute3
2445 ,attribute4
2446 ,attribute5
2447 ,attribute6
2448 ,attribute7
2449 ,attribute8
2450 ,attribute9
2451 ,attribute10
2452 ,attribute11
2453 ,attribute12
2454 ,attribute13
2455 ,attribute14
2456 ,attribute15
2457 ,bill_rate_override
2458 ,bill_rate_curr_override
2459 ,markup_percent_override
2460 ,tp_rate_override
2461 ,tp_currency_override
2462 ,tp_calc_base_code_override
2463 ,tp_percent_applied_override
2464 ,staffing_owner_person_id
2465 ,resource_list_member_id
2466 INTO
2467 l_source_assignment_rec.assignment_id
2468 ,l_source_assignment_rec.assignment_name
2469 ,l_source_assignment_rec.assignment_type
2470 ,l_source_assignment_rec.status_code
2471 ,l_source_assignment_rec.staffing_priority_code
2472 ,l_source_assignment_rec.project_id
2473 ,l_source_assignment_rec.project_role_id
2474 ,l_source_assignment_rec.description
2475 ,l_source_assignment_rec.start_date
2476 ,l_source_assignment_rec.end_date
2477 ,l_source_assignment_rec.assignment_effort
2478 ,l_source_assignment_rec.extension_possible
2479 ,l_source_assignment_rec.source_assignment_id
2480 ,l_source_assignment_rec.min_resource_job_level
2481 ,l_source_assignment_rec.max_resource_job_level
2482 ,l_source_assignment_rec.additional_information
2483 ,l_source_assignment_rec.location_id
2484 ,l_source_assignment_rec.work_type_id
2485 ,l_source_assignment_rec.revenue_currency_code
2486 ,l_source_assignment_rec.revenue_bill_rate
2487 ,l_source_assignment_rec.markup_percent
2488 ,l_source_assignment_rec.expense_owner
2489 ,l_source_assignment_rec.expense_limit
2490 ,l_source_assignment_rec.expense_limit_currency_code
2491 ,l_source_assignment_rec.fcst_tp_amount_type
2492 ,l_source_assignment_rec.fcst_job_id
2493 ,l_source_assignment_rec.fcst_job_group_id
2494 ,l_source_assignment_rec.expenditure_org_id
2495 ,l_source_assignment_rec.expenditure_organization_id
2496 ,l_source_assignment_rec.expenditure_type_class
2497 ,l_source_assignment_rec.expenditure_type
2498 ,l_source_assignment_rec.calendar_type
2499 ,l_source_assignment_rec.calendar_id
2500 ,l_source_assignment_rec.attribute_category
2501 ,l_source_assignment_rec.attribute1
2502 ,l_source_assignment_rec.attribute2
2503 ,l_source_assignment_rec.attribute3
2504 ,l_source_assignment_rec.attribute4
2505 ,l_source_assignment_rec.attribute5
2506 ,l_source_assignment_rec.attribute6
2507 ,l_source_assignment_rec.attribute7
2508 ,l_source_assignment_rec.attribute8
2509 ,l_source_assignment_rec.attribute9
2510 ,l_source_assignment_rec.attribute10
2511 ,l_source_assignment_rec.attribute11
2512 ,l_source_assignment_rec.attribute12
2513 ,l_source_assignment_rec.attribute13
2514 ,l_source_assignment_rec.attribute14
2515 ,l_source_assignment_rec.attribute15
2516 ,l_source_assignment_rec.bill_rate_override
2517 ,l_source_assignment_rec.bill_rate_curr_override
2518 ,l_source_assignment_rec.markup_percent_override
2519 ,l_source_assignment_rec.tp_rate_override
2520 ,l_source_assignment_rec.tp_currency_override
2521 ,l_source_assignment_rec.tp_calc_base_code_override
2522 ,l_source_assignment_rec.tp_percent_applied_override
2523 ,l_source_assignment_rec.staffing_owner_person_id
2524 ,l_old_rlm_id
2525 FROM pa_project_assignments
2526 WHERE assignment_id = p_assignment_rec.source_assignment_id;
2527
2528 --Check that assign resource to the given requirement is allowed
2529 --the requirement may have multiple statuses. If it does have multiple
2530 --statuses (status_code IS NULL in pa_project_assignments) then get all
2531 --of the statuses and check status controls on each one.
2532 IF l_source_assignment_rec.status_code IS NULL THEN
2533 OPEN get_status_codes;
2534 FETCH get_status_codes BULK COLLECT INTO l_status_codes;
2535 CLOSE get_status_codes;
2536 ELSE
2537 --use constructor to initialize the nested table.
2538 l_status_codes := status_codes(l_source_assignment_rec.status_code);
2539 END IF;
2540
2541
2542
2543 FOR l_index IN 1..l_status_codes.COUNT LOOP
2544 l_return_status := PA_PROJECT_UTILS.Check_prj_stus_action_allowed
2545 ( x_project_status_code => l_status_codes(l_index)
2546 ,x_action_code => 'OPEN_ASGMT_ASSIGN_RESOURCES');
2547 IF l_return_status <> 'Y' THEN
2548 PA_UTILS.Add_Message( p_app_short_name => 'PA'
2549 ,p_msg_name => 'PA_ASGN_NOT_ALLOWED_FOR_STUS');
2550 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
2551 l_status_controls_valid := 'N';
2552 EXIT;
2553 --dbms_output.put_line('Open Assignment Status not allowed');
2554 END IF;
2555 END LOOP;
2556
2557 --continue if the status control validation is successful.
2558 IF l_status_controls_valid = 'Y' THEN
2559
2560 --Log Message
2561 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
2562 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open.after_source'
2563 ,x_msg => 'After getting requirement details, now assign requirement details'
2564 ,x_log_level => 5);
2565 END IF;
2566
2567 l_assignment_rec.assignment_name := l_source_assignment_rec.assignment_name;
2568 l_assignment_rec.staffing_priority_code := l_source_assignment_rec.staffing_priority_code;
2569 l_assignment_rec.project_id := l_source_assignment_rec.project_id;
2570 l_assignment_rec.project_role_id := l_source_assignment_rec.project_role_id;
2571 l_assignment_rec.description := l_source_assignment_rec.description;
2572 l_assignment_rec.assignment_effort := l_source_assignment_rec.assignment_effort;
2573 l_assignment_rec.extension_possible := l_source_assignment_rec.extension_possible;
2574 l_assignment_rec.source_assignment_id := l_source_assignment_rec.assignment_id;
2575 l_assignment_rec.min_resource_job_level := l_source_assignment_rec.min_resource_job_level;
2576 l_assignment_rec.max_resource_job_level := l_source_assignment_rec.max_resource_job_level;
2577 l_assignment_rec.additional_information := l_source_assignment_rec.additional_information;
2578 l_assignment_rec.location_id := l_source_assignment_rec.location_id;
2579 l_assignment_rec.work_type_id := l_source_assignment_rec.work_type_id;
2580 l_assignment_rec.revenue_currency_code := l_source_assignment_rec.revenue_currency_code;
2581 l_assignment_rec.revenue_bill_rate := l_source_assignment_rec.revenue_bill_rate;
2582 l_assignment_rec.markup_percent := l_source_assignment_rec.markup_percent;
2583 l_assignment_rec.expense_owner := l_source_assignment_rec.expense_owner;
2584 l_assignment_rec.expense_limit := l_source_assignment_rec.expense_limit;
2585 l_assignment_rec.expense_limit_currency_code := l_source_assignment_rec.expense_limit_currency_code;
2586 l_assignment_rec.fcst_tp_amount_type := l_source_assignment_rec.fcst_tp_amount_type;
2587 l_assignment_rec.fcst_job_id := l_source_assignment_rec.fcst_job_id;
2588 l_assignment_rec.expenditure_type := l_source_assignment_rec.expenditure_type;
2589 l_assignment_rec.expenditure_type_class := l_source_assignment_rec.expenditure_type_class;
2590 l_assignment_rec.calendar_type := l_source_assignment_rec.calendar_type;
2591 l_assignment_rec.calendar_id := l_source_assignment_rec.calendar_id;
2592 l_assignment_rec.attribute_category := l_source_assignment_rec.attribute_category;
2593 l_assignment_rec.attribute1 := l_source_assignment_rec.attribute1;
2594 l_assignment_rec.attribute2 := l_source_assignment_rec.attribute2;
2595 l_assignment_rec.attribute3 := l_source_assignment_rec.attribute3;
2596 l_assignment_rec.attribute4 := l_source_assignment_rec.attribute4;
2597 l_assignment_rec.attribute5 := l_source_assignment_rec.attribute5;
2598 l_assignment_rec.attribute6 := l_source_assignment_rec.attribute6;
2599 l_assignment_rec.attribute7 := l_source_assignment_rec.attribute7;
2600 l_assignment_rec.attribute8 := l_source_assignment_rec.attribute8;
2601 l_assignment_rec.attribute9 := l_source_assignment_rec.attribute9;
2602 l_assignment_rec.attribute10 := l_source_assignment_rec.attribute10;
2603 l_assignment_rec.attribute11 := l_source_assignment_rec.attribute11;
2604 l_assignment_rec.attribute12 := l_source_assignment_rec.attribute12;
2605 l_assignment_rec.attribute13 := l_source_assignment_rec.attribute13;
2606 l_assignment_rec.attribute14 := l_source_assignment_rec.attribute14;
2607 l_assignment_rec.attribute15 := l_source_assignment_rec.attribute15;
2608 l_assignment_rec.bill_rate_override :=
2609 l_source_assignment_rec.bill_rate_override;
2610 l_assignment_rec.bill_rate_curr_override :=
2611 l_source_assignment_rec.bill_rate_curr_override;
2612 l_assignment_rec.markup_percent_override :=
2613 l_source_assignment_rec.markup_percent_override;
2614 l_assignment_rec.tp_rate_override :=
2615 l_source_assignment_rec.tp_rate_override;
2616 l_assignment_rec.tp_currency_override :=
2617 l_source_assignment_rec.tp_currency_override;
2618 l_assignment_rec.tp_calc_base_code_override :=
2619 l_source_assignment_rec.tp_calc_base_code_override;
2620 l_assignment_rec.tp_percent_applied_override :=
2621 l_source_assignment_rec.tp_percent_applied_override;
2622 l_assignment_rec.staffing_owner_person_id := l_source_assignment_rec.staffing_owner_person_id;
2623
2624 --Log Message
2625 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
2626 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open.dates_compare'
2627 ,x_msg => 'Differentiate between 4 possibility for Dates'
2628 ,x_log_level => 5);
2629 END IF;
2630
2631
2632 --If the unfilled assignment status is not null and the assignment is being
2633 --partially staffed then create new open assignment(s) for the unfilled duration.
2634
2635 IF (p_unfilled_assign_status_name <> FND_API.G_MISS_CHAR OR p_unfilled_assign_status_code <> FND_API.G_MISS_CHAR)
2636 AND p_asgn_creation_mode = 'PARTIAL' THEN
2637
2638 --
2639 -- If assignment is direct against a project then there is no validation
2640 -- peformed against the start or end date
2641 --
2642 --
2643 -- For staffed assignment against an open assignment there are four scenarios:
2644 --
2645 -- 1) IF staffed assignment start_date <= open assignment start_date AND
2646 -- staffed assignment end_date >= open assignment end_date THEN
2647 -- create a staffed assignment with the from staffed assignment start to end date
2648 -- No new open assignment created.
2649 --
2650 -- 2) IF staffed assignment start_date <= open assignment start_date AND
2651 -- staffed assignment end_date < open assignment end_date THEN
2652 -- create a staffed assignment from staffed assignment start date to end date
2653 -- + create an open assignment from staff assignment end_date (+1) to open assignment end_date
2654 --
2655 -- 3) IF staffed assignment start_date > open assignment start_date AND
2656 -- staffed assignment end_date >= open assignment end_date THEN
2657 -- create a staffed assignment from staffed assignment start date to end date
2658 -- + create an open assignment from open assignment start_date to staffed assignment start_date (-1)
2659 --
2660 -- 4) IF staffed assignment start_date > open assignment start_date AND
2661 -- staffed assignment end_date < open assignment end_date THEN
2662 -- create a staffed assignment from staffed assignment start date to end date
2663 -- + create two new open assignments:
2664 -- open assignment1 from open assignment start_date to staffed assignment start_date (-1)
2665 -- AND
2666 -- open assignment2 from staffed_assignment end_date(+1) to open assignment end_date
2667 --
2668 --
2669
2670 -- Case 1)
2671
2672 IF l_assignment_rec.start_date <= l_source_assignment_rec.start_date
2673 AND l_assignment_rec.end_date >= l_source_assignment_rec.end_date THEN
2674
2675 NULL;
2676
2677 -- Create an staff assignment from l_assignment_rec.start_date to l_assignment_rec.end_date
2678
2679
2680 --Case 2)
2681
2682 ELSIF l_assignment_rec.start_date <= l_source_assignment_rec.start_date
2683 AND l_assignment_rec.end_date < l_source_assignment_rec.end_date THEN
2684
2685 -- Create an staff assignment from l_assignment_rec.start_date to l_assignment_rec.end_date
2686 -- Create an open assignment from staff assignment end_date (+1) to open assignment end_date
2687
2688 l_new_open_assignment_tbl(1) := l_source_assignment_rec;
2689
2690 l_new_open_assignment_tbl(1).start_date := l_assignment_rec.end_date + 1;
2691 l_new_open_assignment_tbl(1).end_date := l_source_assignment_rec.end_date;
2692 l_new_open_assignment_tbl(1).source_assignment_id := l_source_assignment_rec.assignment_id;
2693
2694
2695 --Case 3)
2696
2697 ELSIF l_assignment_rec.start_date > l_source_assignment_rec.start_date
2698 AND l_assignment_rec.end_date >= l_source_assignment_rec.end_date THEN
2699
2700 l_new_open_assignment_tbl(1) := l_source_assignment_rec;
2701
2702 -- Create an staff assignment from l_assignment_rec.start_date to l_assignment_rec.end_date
2703 -- Create an open assignment from open assignment start_date to staffed assignment start_date (-1)
2704
2705 l_new_open_assignment_tbl(1).start_date := l_source_assignment_rec.start_date;
2706
2707 -- Bug 3134204 The condition below to get start date was incorrect.
2708 -- l_new_open_assignment_tbl(1).end_date := l_assignment_rec.end_date - 1;
2709 l_new_open_assignment_tbl(1).end_date := l_assignment_rec.start_date - 1;
2710 l_new_open_assignment_tbl(1).source_assignment_id := l_source_assignment_rec.assignment_id;
2711
2712
2713 -- Case 4)
2714
2715 ELSIF l_assignment_rec.start_date > l_source_assignment_rec.start_date AND
2716 l_assignment_rec.end_date < l_source_assignment_rec.end_date THEN
2717
2718 l_new_open_assignment_tbl(1) := l_source_assignment_rec;
2719
2720 l_new_open_assignment_tbl(2) := l_source_assignment_rec;
2721
2722 -- Create an staff assignment from l_assignment_rec.start_date to l_assignment_rec.end_date
2723 -- Create two new open assignments:
2724 -- open assignment1 from open assignment start_date to staffed assignment start_date (-1)
2725 -- AND
2726 -- open assignment2 from staffed_assignment end_date(+1) to open assignment end_date
2727 -- Dates of first record
2728
2729 l_new_open_assignment_tbl(1).start_date := l_source_assignment_rec.start_date;
2730 l_new_open_assignment_tbl(1).end_date := l_assignment_rec.start_date - 1;
2731 l_new_open_assignment_tbl(1).source_assignment_id := l_source_assignment_rec.assignment_id;
2732
2733 -- Dates of second record
2734
2735 l_new_open_assignment_tbl(2).start_date := l_assignment_rec.end_date + 1;
2736 l_new_open_assignment_tbl(2).end_date := l_source_assignment_rec.end_date;
2737 l_new_open_assignment_tbl(2).source_assignment_id := l_source_assignment_rec.assignment_id;
2738
2739
2740 END IF; --dates check for partial assignments
2741
2742 --create the new open assignments
2743
2744 FOR l_counter IN 1 .. l_new_open_assignment_tbl.COUNT LOOP
2745
2746 l_new_open_assignment_tbl(l_counter).status_code := p_unfilled_assign_status_code;
2747 l_new_open_assignment_tbl(l_counter).assignment_type := 'OPEN_ASSIGNMENT';
2748 l_new_open_assignment_tbl(l_counter).source_assignment_id := l_source_assignment_rec.assignment_id;
2749 l_new_open_assignment_tbl(l_counter).source_assignment_type := 'OPEN_ASSIGNMENT'; --added for Bug 7211057
2750
2751
2752
2753 --Log Message
2754 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
2755 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open.create_open'
2756 ,x_msg => 'Creating Requirement.'
2757 ,x_log_level => 5);
2758 END IF;
2759
2760
2761
2762
2763 -- Create the open assignment
2764 PA_ASSIGNMENTS_PUB.Create_Assignment
2765 ( p_assignment_rec => l_new_open_assignment_tbl(l_counter)
2766 ,p_asgn_creation_mode => p_asgn_creation_mode
2767 ,p_project_status_name => p_unfilled_assign_status_name
2768 ,p_resource_name => p_resource_name
2769 ,p_resource_source_id => p_resource_source_id
2770 ,p_commit => p_commit
2771 ,p_validate_only => p_validate_only
2772 ,p_max_msg_count => p_max_msg_count
2773 ,x_new_assignment_id => l_new_open_asgn_id
2774 ,x_assignment_number => l_new_open_asgn_number
2775 ,x_assignment_row_id => l_new_open_asgn_row_id
2776 ,x_resource_id => x_resource_id
2777 ,x_return_status => l_return_status
2778 ,x_msg_count => l_msg_count
2779 ,x_msg_data => l_msg_data
2780 );
2781
2782
2783 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2784 --Copy the Candidate List from the old requirement to the new requirement
2785 PA_CANDIDATE_PUB.Copy_Candidates
2786 (p_old_requirement_id => l_source_assignment_rec.assignment_id
2787 ,p_new_requirement_id => l_new_open_asgn_id
2788 ,p_new_start_date => l_new_open_assignment_tbl(l_counter).start_date
2789 ,x_return_status => l_return_status
2790 ,x_msg_count => l_msg_count
2791 ,x_msg_data => l_msg_data);
2792
2793 ELSE
2794 PA_UTILS.Add_Message( p_app_short_name => 'PA'
2795 ,p_msg_name => 'PA_FAILED_TO_CREATE_OPEN_ASGN');
2796 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
2797 END IF;
2798 --
2799
2800 END LOOP; --loop through new open assignments to be created.
2801
2802 END IF; -- unfilled status code is passed.
2803
2804 --create the new staffed assignment
2805
2806 --Log Message
2807 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
2808 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open.create_staff'
2809 ,x_msg => 'Creating Assignment'
2810 ,x_log_level => 5);
2811 END IF;
2812
2813 --dbms_output.put_line('Creating staff assignment');
2814 PA_ASSIGNMENTS_PUB.Create_Assignment
2815 ( p_assignment_rec => l_assignment_rec
2816 ,p_asgn_creation_mode => p_asgn_creation_mode
2817 ,p_project_status_name => p_assignment_status_name
2818 ,p_resource_name => p_resource_name
2819 ,p_resource_source_id => p_resource_source_id
2820 ,p_commit => p_commit
2821 ,p_validate_only => p_validate_only
2822 ,p_max_msg_count => p_max_msg_count
2823 ,x_new_assignment_id => x_new_assignment_id
2824 ,x_assignment_number => x_assignment_number
2825 ,x_assignment_row_id => x_assignment_row_id
2826 ,x_resource_id => x_resource_id
2827 ,x_return_status => l_return_status
2828 ,x_msg_count => x_msg_count
2829 ,x_msg_data => x_msg_data
2830 );
2831
2832 IF P_DEBUG_MODE = 'Y' THEN
2833 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open'
2834 ,x_msg => 'Create new staffed assignment,status='||l_return_status
2835 ,x_log_level => li_message_level);
2836 END IF;
2837
2838 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
2839 -- FP.M Development
2840
2841 -- 1. get the new staffed assignment's derived rlm and person ids
2842 IF P_DEBUG_MODE = 'Y' THEN
2843 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open'
2844 ,x_msg => 'x_new_assignment_id='||x_new_assignment_id
2845 ,x_log_level => li_message_level);
2846 END IF;
2847
2848 OPEN get_staffed_asgmt_rlm(x_new_assignment_id);
2849 FETCH get_staffed_asgmt_rlm INTO l_new_rlm_id, l_new_person_id;
2850 CLOSE get_staffed_asgmt_rlm;
2851
2852 IF P_DEBUG_MODE = 'Y' THEN
2853 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open'
2854 ,x_msg => 'l_new_rlm_id='||l_new_rlm_id||
2855 ' l_new_person_id='||l_new_person_id
2856 ,x_log_level => li_message_level);
2857 END IF;
2858
2859 -- TAs should be delinked from the filled requirement for sure.
2860
2861 IF l_new_rlm_id IS NULL THEN
2862 l_rlm_id := l_old_rlm_id;
2863
2864 -- if no planning resource can be derived of the staffed
2865 -- assignment, use the planning resource from the filled
2866 -- requirement
2867 UPDATE pa_project_assignments
2868 SET resource_list_member_id = l_old_rlm_id
2869 WHERE assignment_id = x_new_assignment_id;
2870
2871 ELSE
2872 l_rlm_id := l_new_rlm_id;
2873 END IF;
2874
2875 IF P_DEBUG_MODE = 'Y' THEN
2876 pa_debug.write(x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open'
2877 ,x_msg => 'l_rlm_id='||l_rlm_id
2878 ,x_log_level => li_message_level);
2879 END IF;
2880
2881 -- 2. if the planning resource can be derived on the new
2882 -- staffed assignment,TAs should use the new planning
2883 -- resource and be linked to new assignment if possible.
2884
2885 IF l_new_rlm_id IS NOT NULL AND
2886 l_new_rlm_id <> l_old_rlm_id THEN
2887
2888 /* bug 3730480 - remove call to get_resource_defaults
2889
2890 -- get default resource attributes of the new rlm
2891 l_resource_list_members_tbl.extend(1);
2892 l_resource_list_members_tbl(1) := l_rlm_id;
2893 pa_planning_resource_utils.get_resource_defaults (
2894 P_resource_list_members => l_resource_list_members_tbl
2895 ,P_project_id => p_assignment_rec.project_id
2896 ,X_resource_class_flag => l_resource_class_flag_tbl
2897 ,X_resource_class_code => l_resource_class_code_tbl
2898 ,X_resource_class_id => l_resource_class_id_tbl
2899 ,X_res_type_code => l_res_type_code_tbl
2900 ,X_incur_by_res_type => l_incur_by_res_type_tbl
2901 ,X_person_id => l_person_id_tbl
2902 ,X_job_id => l_job_id_tbl
2903 ,X_person_type_code => l_person_type_code_tbl
2904 ,X_named_role => l_named_role_tbl
2905 ,X_bom_resource_id => l_bom_resource_id_tbl
2906 ,X_non_labor_resource => l_non_labor_resource_tbl
2907 ,X_inventory_item_id => l_inventory_item_id_tbl
2908 ,X_item_category_id => l_item_category_id_tbl
2909 ,X_project_role_id => l_project_role_id_tbl
2910 ,X_organization_id => l_organization_id_tbl
2911 ,X_fc_res_type_code => l_fc_res_type_code_tbl
2912 ,X_expenditure_type => l_expenditure_type_tbl
2913 ,X_expenditure_category => l_expenditure_category_tbl
2914 ,X_event_type => l_event_type_tbl
2915 ,X_revenue_category_code => l_revenue_category_code_tbl
2916 ,X_supplier_id => l_supplier_id_tbl
2917 ,X_spread_curve_id => l_spread_curve_id_tbl
2918 ,X_etc_method_code => l_etc_method_code_tbl
2919 ,X_mfc_cost_type_id => l_mfc_cost_type_id_tbl
2920 ,X_incurred_by_res_flag => l_incurred_by_res_flag_tbl
2921 ,X_incur_by_res_class_code => l_incur_by_res_class_code_tbl
2922 ,X_incur_by_role_id => l_incur_by_role_id_tbl
2923 ,X_unit_of_measure => l_unit_of_measure_tbl
2924 ,X_org_id => l_org_id_tbl
2925 ,X_rate_based_flag => l_rate_based_flag_tbl
2926 ,X_rate_expenditure_type => l_rate_expenditure_type_tbl
2927 ,X_rate_func_curr_code => l_rate_func_curr_code_tbl
2928 -- ,X_rate_incurred_by_org_id => l_rate_incurred_by_org_id_tbl
2929 ,X_msg_data => l_msg_data
2930 ,X_msg_count => l_msg_count
2931 ,X_return_status => l_return_status
2932 );
2933 bug 3730480 */
2934
2935 /*
2936 -- if the planning resource on the TAs are not changed,
2937 -- stamp the person on the TAs
2938 IF l_new_rlm_id IS NULL THENt
2939
2940 l_person_id_tbl(1) := l_new_person_id;
2941 l_res_type_code_tbl(1) := 'NAMED_PERSON';
2942
2943 END IF;
2944 */
2945
2946 OPEN get_rlm_changeable_linked_ra(l_new_rlm_id);
2947 FETCH get_rlm_changeable_linked_ra
2948 BULK COLLECT INTO l_task_assignment_id_tbl,
2949 l_task_version_id_tbl,
2950 l_budget_version_id_tbl,
2951 l_struct_version_id_tbl,
2952 l_task_id_tbl;
2953 CLOSE get_rlm_changeable_linked_ra;
2954
2955 pa_assignments_pvt.Update_Task_Assignments(
2956 p_task_assignment_id_tbl => l_task_assignment_id_tbl
2957 ,p_task_version_id_tbl => l_task_version_id_tbl
2958 ,p_budget_version_id_tbl => l_budget_version_id_tbl
2959 ,p_struct_version_id_tbl => l_struct_version_id_tbl
2960 ,p_project_assignment_id => x_new_assignment_id
2961 -- change resource list member
2962 ,p_resource_list_member_id => l_new_rlm_id
2963 ,p_named_role => l_assignment_rec.assignment_name
2964 ,p_project_role_id => l_assignment_rec.project_role_id
2965 ,x_return_status => l_return_status
2966 );
2967 --Log Message
2968 IF P_DEBUG_MODE = 'Y' THEN
2969 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staffed_Assign_From_Open'
2970 ,x_msg => 'Update_task_assignments(case 1), status='||l_return_status
2971 ,x_log_level => 5);
2972 END IF;
2973
2974 OPEN get_rlm_unchangeable_linked_ra(l_new_rlm_id);
2975 FETCH get_rlm_unchangeable_linked_ra
2976 BULK COLLECT INTO l_task_assignment_id_tbl,
2977 l_task_version_id_tbl,
2978 l_budget_version_id_tbl,
2979 l_struct_version_id_tbl,
2980 l_task_id_tbl;
2981 CLOSE get_rlm_unchangeable_linked_ra;
2982
2983 OPEN get_res_mand_attributes;
2984 FETCH get_res_mand_attributes INTO l_cur_role_flag;
2985
2986 IF get_res_mand_attributes%FOUND AND l_cur_role_flag = 'Y' THEN
2987 pa_assignments_pvt.Update_Task_Assignments(
2988 p_task_assignment_id_tbl => l_task_assignment_id_tbl
2989 ,p_task_version_id_tbl => l_task_version_id_tbl
2990 ,p_budget_version_id_tbl => l_budget_version_id_tbl
2991 ,p_struct_version_id_tbl => l_struct_version_id_tbl
2992 ,p_project_assignment_id => -1
2993 ,x_return_status => l_return_status
2994 );
2995 ELSE
2996 pa_assignments_pvt.Update_Task_Assignments(
2997 p_task_assignment_id_tbl => l_task_assignment_id_tbl
2998 ,p_task_version_id_tbl => l_task_version_id_tbl
2999 ,p_budget_version_id_tbl => l_budget_version_id_tbl
3000 ,p_struct_version_id_tbl => l_struct_version_id_tbl
3001 ,p_project_assignment_id => -1
3002 ,p_named_role => FND_API.G_MISS_CHAR
3003 ,x_return_status => l_return_status
3004 );
3005 END IF;
3006 CLOSE get_res_mand_attributes;
3007
3008 --Log Message
3009 IF P_DEBUG_MODE = 'Y' THEN
3010 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staffed_Assign_From_Open'
3011 ,x_msg => 'Update_task_assignments(case 2), status='||l_return_status
3012 ,x_log_level => 5);
3013 END IF;
3014
3015 ELSIF l_rlm_id IS NOT NULL THEN
3016
3017 -- 3. If planning resource cannot be derived on the new staffed
3018 -- assignment, planning resource on TAs should be unchanged.
3019 -- And TAs linked to filled requirement should be linked to
3020 -- new staffed assignment.
3021
3022 -- get all the TA linked to the filled requirement in
3023 -- all working versions
3024 OPEN get_linked_res_asgmts;
3025 FETCH get_linked_res_asgmts
3026 BULK COLLECT INTO l_task_assignment_id_tbl,
3027 l_task_version_id_tbl,
3028 l_budget_version_id_tbl,
3029 l_struct_version_id_tbl;
3030 CLOSE get_linked_res_asgmts;
3031
3032 pa_assignments_pvt.Update_Task_Assignments(
3033 p_task_assignment_id_tbl => l_task_assignment_id_tbl
3034 ,p_task_version_id_tbl => l_task_version_id_tbl
3035 ,p_budget_version_id_tbl => l_budget_version_id_tbl
3036 ,p_struct_version_id_tbl => l_struct_version_id_tbl
3037 ,p_project_assignment_id => x_new_assignment_id
3038 ,p_named_role => l_assignment_rec.assignment_name
3039 ,p_project_role_id => l_assignment_rec.project_role_id
3040 ,x_return_status => l_return_status
3041 );
3042 --Log Message
3043 IF P_DEBUG_MODE = 'Y' THEN
3044 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staffed_Assign_From_Open'
3045 ,x_msg => 'Update_task_assignments(case 3), status='||l_return_status
3046 ,x_log_level => 5);
3047 END IF;
3048
3049 END IF; --IF l_new_rlm_id IS NOT NULL AND l_new_rlm_id <> l_old_rln_id THEN
3050
3051 -- End of FP.M Development
3052
3053 --Log Message
3054 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
3055 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open.change_status'
3056 ,x_msg => 'calling schedule change_status'
3057 ,x_log_level => 5);
3058 END IF;
3059
3060 --Change Open Requirement status to Filled.
3061 PA_SCHEDULE_PUB.Change_Status(p_record_version_number => p_assignment_rec.record_version_number,
3062 p_project_id => l_source_assignment_rec.project_id,
3063 p_calendar_id =>l_source_assignment_rec.calendar_id,
3064 p_assignment_id => l_source_assignment_rec.assignment_id,
3065 p_assignment_type => 'OPEN_ASSIGNMENT',
3066 p_status_type => null,
3067 p_start_date => l_source_assignment_rec.start_date,
3068 p_end_date => l_source_assignment_rec.end_date,
3069 p_assignment_status_code => l_default_filled_status_code,
3070 p_asgn_start_date => l_source_assignment_rec.start_date,
3071 p_asgn_end_date => l_source_assignment_rec.end_date,
3072 x_return_status => l_return_status,
3073 x_msg_count => x_msg_count,
3074 x_msg_data => x_msg_data);
3075
3076 -- Close the Open Requirement's Advertisement Action Set
3077 OPEN get_action_set;
3078 FETCH get_action_set INTO l_action_set_id, l_record_version_number;
3079 CLOSE get_action_set;
3080
3081 PA_ACTION_SETS_PUB.Update_Action_Set(
3082 p_action_set_id => l_action_set_id
3083 ,p_object_id => l_source_assignment_rec.assignment_id
3084 ,p_object_type => 'OPEN_ASSIGNMENT'
3085 ,p_action_set_type_code => 'ADVERTISEMENT'
3086 ,p_status_code => 'CLOSED'
3087 ,p_record_version_number => l_record_version_number
3088 ,p_commit => p_commit
3089 ,p_validate_only => p_validate_only
3090 ,p_init_msg_list => FND_API.G_FALSE
3091 ,x_return_status => l_return_status
3092 ,x_msg_count => x_msg_count
3093 ,x_msg_data => x_msg_data);
3094
3095 --Assign status to the remaining candidates
3096 --This API update the record number.
3097 --IF p_remaining_candidate_code IS NOT NULL AND p_remaining_candidate_code <> FND_API.G_MISS_CHAR THEN
3098
3099 PA_CANDIDATE_PUB.Update_Remaining_Candidates(p_assignment_id => p_assignment_rec.source_assignment_id
3100 ,p_resource_id => x_resource_id
3101 ,p_status_code => p_remaining_candidate_code
3102 ,p_change_reason_code => p_change_reason_code
3103 -- Added for bug 9187892
3104 ,p_attribute_category => l_candidate_in_rec.attribute_category
3105 ,p_attribute1 => l_candidate_in_rec.attribute1
3106 ,p_attribute2 => l_candidate_in_rec.attribute2
3107 ,p_attribute3 => l_candidate_in_rec.attribute3
3108 ,p_attribute4 => l_candidate_in_rec.attribute4
3109 ,p_attribute5 => l_candidate_in_rec.attribute5
3110 ,p_attribute6 => l_candidate_in_rec.attribute6
3111 ,p_attribute7 => l_candidate_in_rec.attribute7
3112 ,p_attribute8 => l_candidate_in_rec.attribute8
3113 ,p_attribute9 => l_candidate_in_rec.attribute9
3114 ,p_attribute10 => l_candidate_in_rec.attribute10
3115 ,p_attribute11 => l_candidate_in_rec.attribute11
3116 ,p_attribute12 => l_candidate_in_rec.attribute12
3117 ,p_attribute13 => l_candidate_in_rec.attribute13
3118 ,p_attribute14 => l_candidate_in_rec.attribute14
3119 ,p_attribute15 => l_candidate_in_rec.attribute15
3120 ,x_return_status => l_return_status
3121 ,x_msg_data => x_msg_data
3122 ,x_msg_count => x_msg_count);
3123
3124 END IF; --IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN (Create staffed asgmt)
3125
3126 END IF; -- end of checking assign resource allowed
3127
3128 END IF; --IF l_default_filled_status_code IS NULL THEN
3129
3130 END IF;--end of checking mass wf in progress
3131
3132
3133 --
3134 -- IF the number of messaages is 1 then fetch the message code from the stack and return its text
3135 --
3136
3137 CLOSE check_record_version;
3138
3139 x_msg_count := FND_MSG_PUB.Count_Msg;
3140 IF x_msg_count = 1 THEN
3141 pa_interface_utils_pub.get_messages ( p_encoded => FND_API.G_TRUE
3142 ,p_msg_index => 1
3143 ,p_data => x_msg_data
3144 ,p_msg_index_out => l_msg_index_out
3145 );
3146 END IF;
3147
3148 -- Reset the error stack when returning to the calling program
3149
3150 PA_DEBUG.Reset_Err_Stack;
3151
3152 IF x_msg_count > 0 THEN
3153 x_return_status := FND_API.G_RET_STS_ERROR;
3154 END IF;
3155
3156 IF p_commit = FND_API.G_TRUE THEN
3157 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
3158 COMMIT;
3159 ELSE
3160 ROLLBACK TO ASG_PUB_STAFF_ASSIGN_FROM_OPEN;
3161 END IF;
3162 END IF;
3163
3164
3165
3166 EXCEPTION
3167 WHEN OTHERS THEN
3168 IF p_commit = FND_API.G_TRUE THEN
3169 ROLLBACK TO ASG_PUB_STAFF_ASSIGN_FROM_OPEN;
3170 END IF;
3171 -- Set the excetption Message and the stack
3172 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Staff_Assign_From_Open'
3173 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
3174 --
3175 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3176 RAISE; -- This is optional depending on the needs
3177 --
3178 END Staff_Assign_From_Open;
3179
3180
3181
3182 PROCEDURE Execute_Update_Assignment
3183 ( p_asgn_update_mode IN VARCHAR2 := FND_API.G_MISS_CHAR
3184 ,p_assignment_row_id IN ROWID := NULL
3185 ,p_assignment_id IN pa_project_assignments.assignment_id%TYPE := FND_API.G_MISS_NUM
3186 ,p_record_version_number IN NUMBER := FND_API.G_MISS_NUM
3187 ,p_assignment_name IN pa_project_assignments.assignment_name%TYPE := FND_API.G_MISS_CHAR
3188 ,p_assignment_type IN pa_project_assignments.assignment_type%TYPE := FND_API.G_MISS_CHAR
3189 ,p_multiple_status_flag IN pa_project_assignments.multiple_status_flag%TYPE := FND_API.G_MISS_CHAR
3190 ,p_project_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
3191 ,p_status_code IN pa_project_assignments.status_code%TYPE := FND_API.G_MISS_CHAR
3192 ,p_start_date IN pa_project_assignments.start_date%TYPE := FND_API.G_MISS_DATE
3193 ,p_end_date IN pa_project_assignments.end_date%TYPE := FND_API.G_MISS_DATE
3194 ,p_staffing_priority_code IN pa_project_assignments.staffing_priority_code%TYPE := FND_API.G_MISS_CHAR
3195 ,p_project_id IN pa_project_assignments.project_id%TYPE := FND_API.G_MISS_NUM
3196 ,p_assignment_template_id IN pa_project_assignments.assignment_template_id%TYPE := FND_API.G_MISS_NUM
3197 ,p_project_role_id IN pa_project_assignments.project_role_id%TYPE := FND_API.G_MISS_NUM
3198 ,p_project_party_id IN pa_project_assignments.project_party_id%TYPE := FND_API.G_MISS_NUM
3199 ,p_project_subteam_id IN pa_project_subteams.project_subteam_id%TYPE := FND_API.G_MISS_NUM
3200 ,p_project_subteam_party_id IN pa_project_subteam_parties.project_subteam_party_id%TYPE := FND_API.G_MISS_NUM
3201 ,p_description IN pa_project_assignments.description%TYPE := FND_API.G_MISS_CHAR
3202 ,p_assignment_effort IN pa_project_assignments.assignment_effort%TYPE := FND_API.G_MISS_NUM
3203 ,p_extension_possible IN pa_project_assignments.extension_possible%TYPE := FND_API.G_MISS_CHAR
3204 ,p_source_assignment_id IN pa_project_assignments.source_assignment_id%TYPE := FND_API.G_MISS_NUM
3205 ,p_min_resource_job_level IN pa_project_assignments.min_resource_job_level%TYPE := FND_API.G_MISS_NUM
3206 ,p_max_resource_job_level IN pa_project_assignments.max_resource_job_level%TYPE := FND_API.G_MISS_NUM
3207 ,p_assignment_number IN pa_project_assignments.assignment_number%TYPE := FND_API.G_MISS_NUM
3208 ,p_additional_information IN pa_project_assignments.additional_information%TYPE := FND_API.G_MISS_CHAR
3209 ,p_location_id IN pa_project_assignments.location_id%TYPE := FND_API.G_MISS_NUM
3210 ,p_work_type_id IN pa_project_assignments.work_type_id%TYPE := FND_API.G_MISS_NUM
3211 ,p_revenue_currency_code IN pa_project_assignments.revenue_currency_code%TYPE := FND_API.G_MISS_CHAR
3212 ,p_revenue_bill_rate IN pa_project_assignments.revenue_bill_rate%TYPE := FND_API.G_MISS_NUM
3213 ,p_markup_percent IN pa_project_assignments.markup_percent%TYPE := FND_API.G_MISS_NUM
3214 ,p_expense_owner IN pa_project_assignments.expense_owner%TYPE := FND_API.G_MISS_CHAR
3215 ,p_expense_limit IN pa_project_assignments.expense_limit%TYPE := FND_API.G_MISS_NUM
3216 ,p_expense_limit_currency_code IN pa_project_assignments.expense_limit_currency_code%TYPE := FND_API.G_MISS_CHAR
3217 ,p_fcst_tp_amount_type IN pa_project_assignments.fcst_tp_amount_type%TYPE := FND_API.G_MISS_CHAR
3218 ,p_fcst_job_id IN pa_project_assignments.fcst_job_id%TYPE := FND_API.G_MISS_NUM
3219 ,p_fcst_job_group_id IN pa_project_assignments.fcst_job_group_id%TYPE := FND_API.G_MISS_NUM
3220 ,p_expenditure_org_id IN pa_project_assignments.expenditure_org_id%TYPE := FND_API.G_MISS_NUM
3221 ,p_expenditure_organization_id IN pa_project_assignments.expenditure_organization_id%TYPE := FND_API.G_MISS_NUM
3222 ,p_expenditure_type_class IN pa_project_assignments.expenditure_type_class%TYPE := FND_API.G_MISS_CHAR
3223 ,p_expenditure_type IN pa_project_assignments.expenditure_type%TYPE := FND_API.G_MISS_CHAR
3224 ,p_project_number IN pa_projects_all.segment1%TYPE := FND_API.G_MISS_CHAR /* Bug 1851096 */
3225 ,p_resource_name IN pa_resources.name%TYPE := FND_API.G_MISS_CHAR
3226 ,p_resource_source_id IN NUMBER := FND_API.G_MISS_NUM
3227 ,p_resource_id IN pa_resources.resource_id%TYPE := FND_API.G_MISS_NUM
3228 ,p_project_subteam_name IN pa_project_subteams.name%TYPE := FND_API.G_MISS_CHAR
3229 ,p_staffing_priority_name IN pa_lookups.meaning%TYPE := FND_API.G_MISS_CHAR
3230 ,p_project_role_name IN pa_project_role_types.meaning%TYPE := FND_API.G_MISS_CHAR
3231 ,p_location_city IN pa_locations.city%TYPE := FND_API.G_MISS_CHAR
3232 ,p_location_region IN pa_locations.region%TYPE := FND_API.G_MISS_CHAR
3233 ,p_location_country_name IN fnd_territories_tl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
3234 ,p_location_country_code IN pa_locations.country_code%TYPE := FND_API.G_MISS_CHAR
3235 ,p_calendar_name IN jtf_calendars_tl.calendar_name%TYPE := FND_API.G_MISS_CHAR
3236 ,p_calendar_id IN jtf_calendars_tl.calendar_id%TYPE := FND_API.G_MISS_NUM
3237 ,p_work_type_name IN pa_work_types_vl.name%TYPE := FND_API.G_MISS_CHAR
3238 ,p_fcst_job_name IN per_jobs.name%TYPE := FND_API.G_MISS_CHAR
3239 ,p_fcst_job_group_name IN per_job_groups.displayed_name%TYPE := FND_API.G_MISS_CHAR
3240 ,p_expenditure_org_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
3241 ,p_exp_organization_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
3242 ,p_comp_match_weighting IN pa_project_assignments.competence_match_weighting%TYPE := FND_API.G_MISS_NUM
3243 ,p_avail_match_weighting IN pa_project_assignments.availability_match_weighting%TYPE := FND_API.G_MISS_NUM
3244 ,p_job_level_match_weighting IN pa_project_assignments.job_level_match_weighting%TYPE := FND_API.G_MISS_NUM
3245 ,p_search_min_availability IN pa_project_assignments.search_min_availability%TYPE := FND_API.G_MISS_NUM
3246 ,p_search_country_code IN pa_project_assignments.search_country_code%TYPE := FND_API.G_MISS_CHAR
3247 ,p_search_country_name IN fnd_territories_vl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
3248 ,p_search_exp_org_struct_ver_id IN pa_project_assignments.search_exp_org_struct_ver_id%TYPE := FND_API.G_MISS_NUM
3249 ,p_search_exp_org_hier_name IN per_organization_structures.name%TYPE := FND_API.G_MISS_CHAR
3250 ,p_search_exp_start_org_id IN pa_project_assignments.search_exp_start_org_id%TYPE := FND_API.G_MISS_NUM
3251 ,p_search_exp_start_org_name IN hr_organization_units.name%TYPE := FND_API.G_MISS_CHAR
3252 ,p_search_min_candidate_score IN pa_project_assignments.search_min_candidate_score%TYPE := FND_API.G_MISS_NUM
3253 ,p_enable_auto_cand_nom_flag IN pa_project_assignments.enable_auto_cand_nom_flag%TYPE := FND_API.G_MISS_CHAR
3254 ,p_bill_rate_override IN pa_project_assignments.bill_rate_override%TYPE := FND_API.G_MISS_NUM
3255 ,p_bill_rate_curr_override IN pa_project_assignments.bill_rate_curr_override%TYPE := FND_API.G_MISS_CHAR
3256 ,p_markup_percent_override IN pa_project_assignments.markup_percent_override%TYPE := FND_API.G_MISS_NUM
3257 ,p_discount_percentage IN pa_project_assignments.discount_percentage%TYPE := FND_API.G_MISS_NUM -- Bug 2590938
3258 ,p_rate_disc_reason_code IN pa_project_assignments.rate_disc_reason_code%TYPE := FND_API.G_MISS_CHAR -- Bug 2590938
3259 ,p_tp_rate_override IN pa_project_assignments.tp_rate_override%TYPE := FND_API.G_MISS_NUM
3260 ,p_tp_currency_override IN pa_project_assignments.tp_currency_override%TYPE := FND_API.G_MISS_CHAR
3261 ,p_tp_calc_base_code_override IN pa_project_assignments.tp_calc_base_code_override%TYPE := FND_API.G_MISS_CHAR
3262 ,p_tp_percent_applied_override IN pa_project_assignments.tp_percent_applied_override%TYPE := FND_API.G_MISS_NUM
3263 ,p_staffing_owner_person_id IN pa_project_assignments.staffing_owner_person_id%TYPE := FND_API.G_MISS_NUM
3264 ,p_staffing_owner_name IN per_people_f.full_name%TYPE := FND_API.G_MISS_CHAR
3265 ,p_resource_list_member_id IN pa_project_assignments.resource_list_member_id%TYPE := FND_API.G_MISS_NUM
3266 ,p_attribute_category IN pa_project_assignments.attribute_category%TYPE := FND_API.G_MISS_CHAR
3267 ,p_attribute1 IN pa_project_assignments.attribute1%TYPE := FND_API.G_MISS_CHAR
3268 ,p_attribute2 IN pa_project_assignments.attribute2%TYPE := FND_API.G_MISS_CHAR
3269 ,p_attribute3 IN pa_project_assignments.attribute3%TYPE := FND_API.G_MISS_CHAR
3270 ,p_attribute4 IN pa_project_assignments.attribute4%TYPE := FND_API.G_MISS_CHAR
3271 ,p_attribute5 IN pa_project_assignments.attribute5%TYPE := FND_API.G_MISS_CHAR
3272 ,p_attribute6 IN pa_project_assignments.attribute6%TYPE := FND_API.G_MISS_CHAR
3273 ,p_attribute7 IN pa_project_assignments.attribute7%TYPE := FND_API.G_MISS_CHAR
3274 ,p_attribute8 IN pa_project_assignments.attribute8%TYPE := FND_API.G_MISS_CHAR
3275 ,p_attribute9 IN pa_project_assignments.attribute9%TYPE := FND_API.G_MISS_CHAR
3276 ,p_attribute10 IN pa_project_assignments.attribute10%TYPE := FND_API.G_MISS_CHAR
3277 ,p_attribute11 IN pa_project_assignments.attribute11%TYPE := FND_API.G_MISS_CHAR
3278 ,p_attribute12 IN pa_project_assignments.attribute12%TYPE := FND_API.G_MISS_CHAR
3279 ,p_attribute13 IN pa_project_assignments.attribute13%TYPE := FND_API.G_MISS_CHAR
3280 ,p_attribute14 IN pa_project_assignments.attribute14%TYPE := FND_API.G_MISS_CHAR
3281 ,p_attribute15 IN pa_project_assignments.attribute15%TYPE := FND_API.G_MISS_CHAR
3282 ,p_api_version IN NUMBER := 1.0
3283 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
3284 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
3285 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
3286 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
3287 ,p_context IN VARCHAR2 := FND_API.G_MISS_CHAR -- Added for GSI PJR Enhancement bug 7693634
3288 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3289 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
3290 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
3291 )
3292 IS
3293
3294 l_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
3295 l_return_status VARCHAR2(1);
3296
3297 /*Code addition for bug 3096132 starts*/
3298 l_br_rate_oride VARCHAR2(1);
3299 l_br_rate_dics VARCHAR2(1);
3300 l_req_rdisc_reason VARCHAR2(1);
3301 --MOAC changes Bug 4363092: removed nvl with org_id
3302 Cursor bil_rate_oride_imple(p_project_id number) is
3303 SELECT impl.RATE_DISCOUNT_REASON_FLAG,impl.BR_OVERRIDE_FLAG,impl.BR_DISCOUNT_OVERRIDE_FLAG
3304 FROM PA_IMPLEMENTATIONS_ALL impl,pa_projects_all proj
3305 WHERE proj.org_id=impl.org_id
3306 and proj.project_id = p_project_id ;
3307 /*Code addition for bug 3096132 ends*/
3308
3309 BEGIN
3310
3311
3312
3313
3314 --dbms_output.put_line('Beginning Execute_Update_Assignment');
3315 -- Initialize the Error Stack
3316 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Execute_Update_Assignment');
3317
3318 --Log Message
3319 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
3320 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Execute_Update_Assignment.begin'
3321 ,x_msg => 'Beginning of Execute_Update_Assignment'
3322 ,x_log_level => 5);
3323 END IF;
3324
3325 --Clear the global PL/SQL message table
3326 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
3327 FND_MSG_PUB.initialize;
3328 END IF;
3329
3330 --dbms_output.put_line('In execute_update_assigment');
3331
3332 -- Assign the scalar parameters to the assignment record fields
3333 --
3334 /*Code addition for bug 3096132 starts*/
3335 /*Corrected the order of the fetch from l_br_rate_oride,l_br_rate_dics,l_req_rdisc_reason to
3336 l_req_rdisc_reason,l_br_rate_oride,l_br_rate_dics for the bug 3132323*/
3337 Open bil_rate_oride_imple(p_project_id);
3338 fetch bil_rate_oride_imple into l_req_rdisc_reason,l_br_rate_oride,l_br_rate_dics;
3339 close bil_rate_oride_imple;
3340
3341 if (l_br_rate_oride ='Y' OR l_br_rate_dics='Y') then
3342 if l_req_rdisc_reason = 'Y' then
3343 if ((p_bill_rate_override <> FND_API.G_MISS_NUM AND p_bill_rate_override IS NOT NULL)
3344 OR (p_discount_percentage <> FND_API.G_MISS_NUM AND p_discount_percentage IS NOT NULL))
3345 then
3346 if (p_rate_disc_reason_code IS NULL OR p_rate_disc_reason_code = FND_API.G_MISS_CHAR) then
3347 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
3348 ,p_msg_name => 'PA_RATE_DISC_REASON_REQUIRED');
3349 --PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
3350 x_return_status := FND_API.G_RET_STS_ERROR;
3351
3352 end if;
3353 end if;
3354 end if;
3355 end if;
3356
3357 /*Code addition for bug 3096132 ends*/
3358 l_assignment_rec.assignment_row_id := p_assignment_row_id;
3359 l_assignment_rec.assignment_id := p_assignment_id;
3360 l_assignment_rec.record_version_number := p_record_version_number;
3361 l_assignment_rec.assignment_name := p_assignment_name;
3362 l_assignment_rec.assignment_type := p_assignment_type;
3363 l_assignment_rec.multiple_status_flag := p_multiple_status_flag;
3364 l_assignment_rec.staffing_priority_code := p_staffing_priority_code;
3365 l_assignment_rec.project_id := p_project_id;
3366 l_assignment_rec.assignment_template_id := p_assignment_template_id;
3367 l_assignment_rec.project_role_id := p_project_role_id;
3368 l_assignment_rec.project_party_id := p_project_party_id;
3369 l_assignment_rec.description := p_description;
3370 l_assignment_rec.assignment_effort := p_assignment_effort;
3371 l_assignment_rec.extension_possible := p_extension_possible;
3372 l_assignment_rec.source_assignment_id := p_source_assignment_id;
3373 l_assignment_rec.min_resource_job_level := p_min_resource_job_level;
3374 l_assignment_rec.max_resource_job_level := p_max_resource_job_level;
3375 l_assignment_rec.assignment_number := p_assignment_number;
3376 l_assignment_rec.additional_information := p_additional_information;
3377 l_assignment_rec.work_type_id := p_work_type_id;
3378 l_assignment_rec.location_id := p_location_id;
3379 l_assignment_rec.revenue_currency_code := p_revenue_currency_code;
3380 l_assignment_rec.revenue_bill_rate := p_revenue_bill_rate;
3381 l_assignment_rec.markup_percent := p_markup_percent;
3382 l_assignment_rec.expense_owner := p_expense_owner;
3383 l_assignment_rec.expense_limit := p_expense_limit;
3384 l_assignment_rec.expense_limit_currency_code := p_expense_limit_currency_code;
3385 l_assignment_rec.fcst_tp_amount_type := p_fcst_tp_amount_type;
3386 l_assignment_rec.fcst_job_id := p_fcst_job_id;
3387 l_assignment_rec.fcst_job_group_id := p_fcst_job_group_id;
3388 l_assignment_rec.expenditure_org_id := p_expenditure_org_id;
3389 l_assignment_rec.expenditure_organization_id := p_expenditure_organization_id;
3390 l_assignment_rec.expenditure_type_class := p_expenditure_type_class;
3391 l_assignment_rec.expenditure_type := p_expenditure_type;
3392 l_assignment_rec.comp_match_weighting := p_comp_match_weighting;
3393 l_assignment_rec.avail_match_weighting := p_avail_match_weighting;
3394 l_assignment_rec.job_level_match_weighting := p_job_level_match_weighting;
3395 l_assignment_rec.search_min_availability := p_search_min_availability;
3396 l_assignment_rec.search_country_code := p_search_country_code;
3397 l_assignment_rec.search_exp_org_struct_ver_id := p_search_exp_org_struct_ver_id;
3398 l_assignment_rec.search_exp_start_org_id := p_search_exp_start_org_id;
3399 l_assignment_rec.search_min_candidate_score := p_search_min_candidate_score;
3400 l_assignment_rec.enable_auto_cand_nom_flag := p_enable_auto_cand_nom_flag;
3401 l_assignment_rec.bill_rate_override := p_bill_rate_override;
3402 l_assignment_rec.bill_rate_curr_override := p_bill_rate_curr_override;
3403 l_assignment_rec.markup_percent_override := p_markup_percent_override;
3404 l_assignment_rec.discount_percentage := p_discount_percentage; -- Bug2590938
3405 l_assignment_rec.rate_disc_reason_code := p_rate_disc_reason_code; -- Bug2590938
3406 l_assignment_rec.tp_rate_override := p_tp_rate_override;
3407 l_assignment_rec.tp_currency_override := p_tp_currency_override;
3408 l_assignment_rec.tp_calc_base_code_override := p_tp_calc_base_code_override;
3409 l_assignment_rec.tp_percent_applied_override := p_tp_percent_applied_override;
3410 l_assignment_rec.staffing_owner_person_id := p_staffing_owner_person_id;
3411 l_assignment_rec.resource_list_member_id := p_resource_list_member_id;
3412 l_assignment_rec.attribute_category := p_attribute_category;
3413 l_assignment_rec.attribute1 := p_attribute1;
3414 l_assignment_rec.attribute2 := p_attribute2;
3415 l_assignment_rec.attribute3 := p_attribute3;
3416 l_assignment_rec.attribute4 := p_attribute4;
3417 l_assignment_rec.attribute5 := p_attribute5;
3418 l_assignment_rec.attribute6 := p_attribute6;
3419 l_assignment_rec.attribute7 := p_attribute7;
3420 l_assignment_rec.attribute8 := p_attribute8;
3421 l_assignment_rec.attribute9 := p_attribute9;
3422 l_assignment_rec.attribute10 := p_attribute10;
3423 l_assignment_rec.attribute11 := p_attribute11;
3424 l_assignment_rec.attribute12 := p_attribute12;
3425 l_assignment_rec.attribute13 := p_attribute13;
3426 l_assignment_rec.attribute14 := p_attribute14;
3427 l_assignment_rec.attribute15 := p_attribute15;
3428 IF PA_ASSIGNMENTS_PUB.G_update_assignment_bulk_call = 'Y' THEN--9108007
3429 l_assignment_rec.calendar_id := p_calendar_id;
3430 END IF;
3431
3432 --The following parameters are only updateable through this API is the
3433 --requirement is a TEMPLATE REQUIREMENT. For requirements which belong to a project,
3434 --the updates to these attributes go through the schedule API - TEMPLATE REQUIREMENTS
3435 --do not have a schedule.
3436
3437 IF p_project_id = FND_API.G_MISS_NUM OR p_project_id IS NULL THEN
3438 l_assignment_rec.start_date := p_start_date;
3439 l_assignment_rec.end_date := p_end_date;
3440 l_assignment_rec.status_code := p_status_code;
3441 l_assignment_rec.calendar_id := p_calendar_id;
3442
3443 END IF;
3444 /* Added condition for GSI PJR enhancement. bug # 7693634*/
3445 IF p_context = 'SS_UPDATE_ASSIGN' THEN
3446 l_assignment_rec.start_date := p_start_date;
3447 l_assignment_rec.end_date := p_end_date;
3448 END IF;
3449 --Log Message
3450 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
3451 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Execute_Update_Assignment.update_assignment'
3452 ,x_msg => 'After record assignment, Calling Update_Assignment'
3453 ,x_log_level => 5);
3454 END IF;
3455 -- Call the update assignment public API
3456 --dbms_output.put_line('Calling Update_Assignment');
3457 PA_ASSIGNMENTS_PUB.Update_Assignment
3458 ( p_assignment_rec => l_assignment_rec
3459 ,p_asgn_update_mode => p_asgn_update_mode
3460 ,p_project_number => p_project_number
3461 ,p_resource_name => p_resource_name
3462 ,p_resource_source_id => p_resource_source_id
3463 ,p_resource_id => p_resource_id
3464 ,p_project_status_name => p_project_status_name
3465 ,p_project_subteam_id => p_project_subteam_id
3466 ,p_project_subteam_party_id => p_project_subteam_party_id
3467 ,p_project_subteam_name => p_project_subteam_name
3468 ,p_calendar_name => p_calendar_name
3469 ,p_staffing_priority_name => p_staffing_priority_name
3470 ,p_project_role_name => p_project_role_name
3471 ,p_location_city => p_location_city
3472 ,p_location_region => p_location_region
3473 ,p_location_country_name => p_location_country_name
3474 ,p_location_country_code => p_location_country_code
3475 ,p_work_type_name => p_work_type_name
3476 ,p_fcst_job_name => p_fcst_job_name
3477 ,p_fcst_job_group_name => p_fcst_job_group_name
3478 ,p_expenditure_org_name => p_expenditure_org_name
3479 ,p_exp_organization_name => p_exp_organization_name
3480 ,p_search_country_name => p_search_country_name
3481 ,p_search_exp_org_hier_name => p_search_exp_org_hier_name
3482 ,p_search_exp_start_org_name => p_search_exp_start_org_name
3483 ,p_staffing_owner_name => p_staffing_owner_name
3484 ,p_api_version => p_api_version
3485 ,p_commit => p_commit
3486 ,p_validate_only => p_validate_only
3487 ,p_context => p_context -- Added for GSI PJR Enhancement bug 7693634
3488 ,p_max_msg_count => p_max_msg_count
3489 ,x_return_status => x_return_status
3490 ,x_msg_count => x_msg_count
3491 ,x_msg_data => x_msg_data
3492 );
3493
3494 -- Reset the error stack when returning to the calling program
3495 PA_DEBUG.Reset_Err_Stack;
3496
3497
3498 -- Put any message text from message stack into the Message ARRAY
3499 EXCEPTION
3500 WHEN OTHERS THEN
3501
3502 -- Set the excetption Message and the stack
3503 FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_ASSIGNMENT_PUB.Execute_Update_Assignment'
3504 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
3505 --
3506 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3507 RAISE; -- This is optional depending on the needs
3508 --
3509 END Execute_Update_Assignment;
3510
3511
3512
3513
3514 /* Bug 8233045: Added the below procedure. This procedure can be invoked in bulk and
3515 further calls Execute_Update_Assignment within loop*/
3516
3517 PROCEDURE Execute_Update_Assignment_bulk (
3518 p_asgn_update_mode_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3519 ,p_assignment_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3520 ,p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3521 ,p_assignment_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3522 ,p_assignment_type_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3523 ,p_multiple_status_flag_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3524 ,p_status_code_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3525 ,p_start_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := NULL
3526 ,p_end_date_tbl IN SYSTEM.PA_DATE_TBL_TYPE := NULL
3527 ,p_staffing_priority_code_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3528 ,p_project_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3529 ,p_assignment_template_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3530 ,p_project_subteam_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3531 ,p_project_subteam_party_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3532 ,p_description_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3533 ,p_extension_possible_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3534 ,p_min_resource_job_level_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3535 ,p_max_resource_job_level_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3536 ,p_additional_information_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3537 ,p_work_type_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3538 ,p_project_role_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL --Bug#9108007
3539 ,p_expense_owner_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3540 ,p_expense_limit_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3541 ,p_fcst_tp_amount_type_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3542 ,p_fcst_job_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3543 ,p_fcst_job_group_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3544 ,p_expenditure_org_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3545 ,p_exp_organization_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3546 ,p_expenditure_type_class_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3547 ,p_expenditure_type_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3548 ,p_project_subteam_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3549 ,p_location_city_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3550 ,p_location_region_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3551 ,p_location_country_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3552 ,p_calendar_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3553 ,p_calendar_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3554 ,p_fcst_job_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3555 ,p_fcst_job_group_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3556 ,p_expenditure_org_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3557 ,p_exp_organization_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3558 ,p_comp_match_weighting_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3559 ,p_avail_match_weighting_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3560 ,p_job_level_match_weight_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3561 ,p_search_min_availability_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3562 ,p_search_country_code_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3563 ,p_search_country_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3564 ,p_search_exp_org_st_ver_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3565 ,p_search_exp_org_hier_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3566 ,p_search_exp_start_org_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3567 ,p_search_exp_start_org_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3568 ,p_search_min_candidate_sc_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3569 ,p_enable_auto_cand_nom_flg_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3570 ,p_bill_rate_override_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3571 ,p_bill_rate_curr_override_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3572 ,p_markup_percent_override_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3573 ,p_discount_percentage_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3574 ,p_rate_disc_reason_code_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3575 ,p_tp_rate_override_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3576 ,p_tp_currency_override_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3577 ,p_staffing_owner_person_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3578 ,p_staffing_owner_name_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3579 ,p_resource_list_member_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL--Bug#9108007
3580 ,p_attribute_category_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3581 ,p_attribute1_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3582 ,p_attribute2_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3583 ,p_attribute3_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3584 ,p_attribute4_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3585 ,p_attribute5_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3586 ,p_attribute6_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3587 ,p_attribute7_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3588 ,p_attribute8_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3589 ,p_attribute9_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3590 ,p_attribute10_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3591 ,p_attribute11_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3592 ,p_attribute12_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3593 ,p_attribute13_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3594 ,p_attribute14_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3595 ,p_attribute15_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3596 ,p_api_version_tbl IN SYSTEM.PA_NUM_TBL_TYPE := NULL
3597 ,p_init_msg_list_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3598 ,p_commit_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3599 ,p_validate_only_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3600 ,p_context_tbl IN SYSTEM.PA_VARCHAR2_2000_TBL_TYPE := NULL
3601 ,x_return_status_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_2000_TBL_TYPE
3602 ,x_msg_count_tbl OUT NOCOPY SYSTEM.PA_NUM_TBL_TYPE
3603 ,x_msg_data_tbl OUT NOCOPY SYSTEM.PA_VARCHAR2_2000_TBL_TYPE
3604 ,p_bulk_context IN varchar2 := 'N'
3605 )
3606
3607 IS
3608
3609
3610
3611 l_asgn_update_mode varchar2(2000);
3612 l_assignment_id number;
3613 l_record_version_number number;
3614 l_assignment_name varchar2(2000);
3615 l_assignment_type varchar2(2000);
3616 l_multiple_status_flag varchar2(2000);
3617 l_status_code varchar2(2000);
3618 l_start_date date;
3619 l_end_date date;
3620 l_staffing_priority_code varchar2(2000);
3621 l_project_id number;
3622 l_assignment_template_id number;
3623 l_project_subteam_id number;
3624 l_project_subteam_party_id number;
3625 l_description varchar2(2000);
3626 l_extension_possible varchar2(2000);
3627 l_min_resource_job_level number;
3628 l_max_resource_job_level number;
3629 l_additional_information varchar2(2000);
3630 l_work_type_id number;
3631 l_project_role_id number;--Bug#9108007
3632 l_expense_owner varchar2(2000);
3633 l_expense_limit number;
3634 l_fcst_tp_amount_type varchar2(2000);
3635 l_fcst_job_id number;
3636 l_fcst_job_group_id number;
3637 l_expenditure_org_id number;
3638 l_exp_organization_id number;
3639 l_expenditure_type_class varchar2(2000);
3640 l_expenditure_type varchar2(2000);
3641 l_project_subteam_name varchar2(2000);
3642 l_location_city varchar2(2000);
3643 l_location_region varchar2(2000);
3644 l_location_country_name varchar2(2000);
3645 l_calendar_name varchar2(2000);
3646 l_calendar_id number;
3647 l_fcst_job_name varchar2(2000);
3648 l_fcst_job_group_name varchar2(2000);
3649 l_expenditure_org_name varchar2(2000);
3650 l_exp_organization_name varchar2(2000);
3651 l_comp_match_weighting number;
3652 l_avail_match_weighting number;
3653 l_job_level_match_weight number;
3654 l_search_min_availability number;
3655 l_search_country_code varchar2(2000);
3656 l_search_country_name varchar2(2000);
3657 l_search_exp_org_st_ver_id number;
3658 l_search_exp_org_hier_name varchar2(2000);
3659 l_search_exp_start_org_id number;
3660 l_search_exp_start_org varchar2(2000);
3661 l_search_min_candidate_sc number;
3662 l_enable_auto_cand_nom_flg varchar2(2000);
3663 l_bill_rate_override number;
3664 l_bill_rate_curr_override varchar2(2000);
3665 l_markup_percent_override number;
3666 l_discount_percentage number;
3667 l_rate_disc_reason_code varchar2(2000);
3668 l_tp_rate_override number;
3669 l_tp_currency_override varchar2(2000);
3670 l_staffing_owner_person_id number;
3671 l_staffing_owner_name varchar2(2000);
3672 l_resource_list_member_id number;--Bug#9108007
3673 l_attribute_category varchar2(2000);
3674 l_attribute1 varchar2(2000);
3675 l_attribute2 varchar2(2000);
3676 l_attribute3 varchar2(2000);
3677 l_attribute4 varchar2(2000);
3678 l_attribute5 varchar2(2000);
3679 l_attribute6 varchar2(2000);
3680 l_attribute7 varchar2(2000);
3681 l_attribute8 varchar2(2000);
3682 l_attribute9 varchar2(2000);
3683 l_attribute10 varchar2(2000);
3684 l_attribute11 varchar2(2000);
3685 l_attribute12 varchar2(2000);
3686 l_attribute13 varchar2(2000);
3687 l_attribute14 varchar2(2000);
3688 l_attribute15 varchar2(2000);
3689 l_api_version number;
3690 l_init_msg_list varchar2(2000);
3691 l_commit varchar2(2000);
3692 l_validate_only varchar2(2000);
3693 l_context varchar2(2000);
3694
3695 BEGIN
3696
3697 G_update_assignment_bulk_call := p_bulk_context;
3698
3699 fnd_msg_pub.initialize;
3700
3701 x_return_status_tbl := p_assignment_name_tbl;
3702 x_msg_count_tbl := p_assignment_id_tbl;
3703 x_msg_data_tbl := p_assignment_name_tbl;
3704
3705
3706 for i in p_assignment_id_tbl.first .. p_assignment_id_tbl.last loop
3707
3708
3709 BEGIN
3710
3711
3712 l_asgn_update_mode := FND_API.G_MISS_CHAR;
3713
3714 if p_assignment_id_tbl is null then
3715 l_assignment_id := FND_API.G_MISS_NUM;
3716 else
3717 l_assignment_id := p_assignment_id_tbl(i);
3718 end if;
3719
3720 if p_record_version_number_tbl is null then
3721 l_record_version_number := FND_API.G_MISS_NUM;
3722 else
3723 l_record_version_number := p_record_version_number_tbl(i);
3724 end if;
3725
3726 if p_assignment_name_tbl is null then
3727 l_assignment_name := FND_API.G_MISS_CHAR;
3728 else
3729 l_assignment_name := p_assignment_name_tbl(i);
3730 end if;
3731
3732 if p_assignment_type_tbl is null then
3733 l_assignment_type := FND_API.G_MISS_CHAR;
3734 else
3735 l_assignment_type := p_assignment_type_tbl(i);
3736 end if;
3737
3738 if p_multiple_status_flag_tbl is null then
3739 l_multiple_status_flag := FND_API.G_MISS_CHAR;
3740 else
3741 l_multiple_status_flag := p_multiple_status_flag_tbl(i);
3742 end if;
3743
3744 if p_status_code_tbl is null then
3745 l_status_code := FND_API.G_MISS_CHAR;
3746 else
3747 l_status_code := p_status_code_tbl(i);
3748 end if;
3749 if p_start_date_tbl is null then
3750 l_start_date := FND_API.G_MISS_DATE;
3751 else
3752 l_start_date := p_start_date_tbl(i);
3753 end if;
3754
3755 if p_end_date_tbl is null then
3756 l_end_date := FND_API.G_MISS_DATE;
3757 else
3758 l_end_date := p_end_date_tbl(i);
3759 end if;
3760
3761 if p_staffing_priority_code_tbl is null then
3762 l_staffing_priority_code := FND_API.G_MISS_CHAR;
3763 else
3764 l_staffing_priority_code := p_staffing_priority_code_tbl(i);
3765 end if;
3766
3767 if p_project_id_tbl is null then
3768 l_project_id := FND_API.G_MISS_NUM;
3769 else
3770 l_project_id := p_project_id_tbl(i);
3771 end if;
3772
3773 if p_assignment_template_id_tbl is null then
3774 l_assignment_template_id := NULL ;
3775 else
3776 l_assignment_template_id := p_assignment_template_id_tbl(i);
3777 end if;
3778
3779 if p_project_subteam_id_tbl is null then
3780 l_project_subteam_id :=NULL ;
3781 elsif p_project_subteam_id_tbl(i) = -99999 then
3782 l_project_subteam_id := NULL ;
3783 else
3784 l_project_subteam_id := p_project_subteam_id_tbl(i);
3785 end if;
3786
3787 if p_project_subteam_party_id_tbl is null then
3788 l_project_subteam_party_id := NULL ;
3789 elsif p_project_subteam_party_id_tbl(i) = -99999 then
3790 l_project_subteam_party_id := NULL ;
3791 else
3792 l_project_subteam_party_id := p_project_subteam_party_id_tbl(i);
3793 end if;
3794
3795 if p_description_tbl is null then
3796 l_description := FND_API.G_MISS_CHAR;
3797 else
3798 l_description := p_description_tbl(i);
3799 end if;
3800
3801 if p_extension_possible_tbl is null then
3802 l_extension_possible := FND_API.G_MISS_CHAR;
3803 else
3804 l_extension_possible := p_extension_possible_tbl(i);
3805 end if;
3806
3807 if p_min_resource_job_level_tbl is null then
3808 l_min_resource_job_level := FND_API.G_MISS_NUM;
3809 else
3810 l_min_resource_job_level := p_min_resource_job_level_tbl(i);
3811 end if;
3812
3813 if p_max_resource_job_level_tbl is null then
3814 l_max_resource_job_level := FND_API.G_MISS_NUM;
3815 else
3816 l_max_resource_job_level := p_max_resource_job_level_tbl(i);
3817 end if;
3818
3819 if p_additional_information_tbl is null then
3820 l_additional_information := FND_API.G_MISS_CHAR;
3821 else
3822 l_additional_information := p_additional_information_tbl(i);
3823 end if;
3824
3825 if p_work_type_id_tbl is null then
3826 l_work_type_id := FND_API.G_MISS_NUM;
3827 else
3828 l_work_type_id := p_work_type_id_tbl(i);
3829 end if;
3830
3831 --Bug#9108007 - Addition starts
3832 if p_project_role_id_tbl is null then
3833 l_project_role_id := FND_API.G_MISS_NUM;
3834 else
3835 -- l_project_role_id := p_project_role_id_tbl(i); --nisinha
3836 l_project_role_id := FND_API.G_MISS_NUM;
3837
3838 end if;
3839 --Bug#9108007 - Addition end
3840
3841 if p_expense_owner_tbl is null then
3842 l_expense_owner := FND_API.G_MISS_CHAR;
3843 else
3844 l_expense_owner := p_expense_owner_tbl(i);
3845 end if;
3846
3847 if p_expense_limit_tbl is null then
3848 l_expense_limit := NULL ;
3849 else
3850 l_expense_limit := p_expense_limit_tbl(i);
3851 end if;
3852
3853 if p_fcst_tp_amount_type_tbl is null then
3854 l_fcst_tp_amount_type := FND_API.G_MISS_CHAR;
3855 else
3856 l_fcst_tp_amount_type := p_fcst_tp_amount_type_tbl(i);
3857 end if;
3858
3859 if p_fcst_job_id_tbl is null then
3860 l_fcst_job_id := FND_API.G_MISS_NUM;
3861 else
3862 l_fcst_job_id := p_fcst_job_id_tbl(i);
3863 end if;
3864
3865 if p_fcst_job_group_id_tbl is null then
3866 l_fcst_job_group_id := FND_API.G_MISS_NUM;
3867 else
3868 l_fcst_job_group_id := p_fcst_job_group_id_tbl(i);
3869 end if;
3870
3871 if p_expenditure_org_id_tbl is null then
3872 l_expenditure_org_id := FND_API.G_MISS_NUM;
3873 else
3874 l_expenditure_org_id := p_expenditure_org_id_tbl(i);
3875 end if;
3876
3877 if p_exp_organization_id_tbl is null then
3878 l_exp_organization_id := FND_API.G_MISS_NUM;
3879 else
3880 l_exp_organization_id := p_exp_organization_id_tbl(i);
3881 end if;
3882
3883 if p_expenditure_type_class_tbl is null then
3884 l_expenditure_type_class := FND_API.G_MISS_CHAR;
3885 else
3886 l_expenditure_type_class := p_expenditure_type_class_tbl(i);
3887 end if;
3888
3889 if p_expenditure_type_tbl is null then
3890 l_expenditure_type := FND_API.G_MISS_CHAR;
3891 else
3892 l_expenditure_type := p_expenditure_type_tbl(i);
3893 end if;
3894
3895 if p_project_subteam_name_tbl is null then
3896 l_project_subteam_name := FND_API.G_MISS_CHAR;
3897 else
3898 l_project_subteam_name := p_project_subteam_name_tbl(i);
3899 end if;
3900
3901 if p_location_city_tbl is null then
3902 l_location_city := FND_API.G_MISS_CHAR;
3903 else
3904 l_location_city := p_location_city_tbl(i);
3905 end if;
3906
3907 if p_location_region_tbl is null then
3908 l_location_region := FND_API.G_MISS_CHAR;
3909 else
3910 l_location_region := p_location_region_tbl(i);
3911 end if;
3912
3913 if p_location_country_name_tbl is null then
3914 l_location_country_name := FND_API.G_MISS_CHAR;
3915 else
3916 l_location_country_name := p_location_country_name_tbl(i);
3917 end if;
3918
3919 if p_calendar_name_tbl is null then
3920 l_calendar_name := FND_API.G_MISS_CHAR;
3921 else
3922 l_calendar_name := p_calendar_name_tbl(i);
3923 end if;
3924
3925 if p_calendar_id_tbl is null then
3926 l_calendar_id := FND_API.G_MISS_NUM;
3927 else
3928 l_calendar_id := p_calendar_id_tbl(i);
3929 end if;
3930
3931 if p_fcst_job_name_tbl is null then
3932 l_fcst_job_name := FND_API.G_MISS_CHAR;
3933 else
3934 l_fcst_job_name := p_fcst_job_name_tbl(i);
3935 end if;
3936
3937
3938 if p_fcst_job_group_name_tbl is null then
3939 l_fcst_job_group_name := FND_API.G_MISS_CHAR;
3940 else
3941 l_fcst_job_group_name := p_fcst_job_group_name_tbl(i);
3942 end if;
3943
3944 if p_expenditure_org_name_tbl is null then
3945 l_expenditure_org_name := FND_API.G_MISS_CHAR;
3946 else
3947 l_expenditure_org_name := p_expenditure_org_name_tbl(i);
3948 end if;
3949
3950
3951 if p_exp_organization_name_tbl is null then
3952 l_exp_organization_name := FND_API.G_MISS_CHAR;
3953 else
3954 l_exp_organization_name := p_exp_organization_name_tbl(i);
3955 end if;
3956
3957
3958 if p_comp_match_weighting_tbl is null then
3959 l_comp_match_weighting := FND_API.G_MISS_NUM;
3960 else
3961 l_comp_match_weighting := p_comp_match_weighting_tbl(i);
3962 end if;
3963
3964
3965 if p_avail_match_weighting_tbl is null then
3966 l_avail_match_weighting := FND_API.G_MISS_NUM;
3967 else
3968 l_avail_match_weighting := p_avail_match_weighting_tbl(i);
3969 end if;
3970
3971 if p_job_level_match_weight_tbl is null then
3972 l_job_level_match_weight := FND_API.G_MISS_NUM;
3973 else
3974 l_job_level_match_weight := p_job_level_match_weight_tbl(i);
3975 end if;
3976
3977
3978 if p_search_min_availability_tbl is null then
3979 l_search_min_availability := FND_API.G_MISS_NUM;
3980 else
3981 l_search_min_availability := p_search_min_availability_tbl(i);
3982 end if;
3983
3984 if p_search_country_code_tbl is null then
3985 l_search_country_code := FND_API.G_MISS_CHAR;
3986 else
3987 l_search_country_code := p_search_country_code_tbl(i);
3988 end if;
3989
3990 if p_search_country_name_tbl is null then
3991 l_search_country_name := FND_API.G_MISS_CHAR;
3992 else
3993 l_search_country_name := p_search_country_name_tbl(i);
3994 end if;
3995
3996 if p_search_exp_org_st_ver_id_tbl is null then
3997 l_search_exp_org_st_ver_id := FND_API.G_MISS_NUM;
3998 else
3999 l_search_exp_org_st_ver_id := p_search_exp_org_st_ver_id_tbl(i);
4000 end if;
4001
4002
4003 if p_search_exp_org_hier_name_tbl is null then
4004 l_search_exp_org_hier_name := FND_API.G_MISS_CHAR;
4005 else
4006 l_search_exp_org_hier_name := p_search_exp_org_hier_name_tbl(i);
4007 end if;
4008
4009 if p_search_exp_start_org_id_tbl is null then
4010 l_search_exp_start_org_id := FND_API.G_MISS_NUM;
4011 else
4012 l_search_exp_start_org_id := p_search_exp_start_org_id_tbl(i);
4013 end if;
4014
4015 if p_search_exp_start_org_tbl is null then
4016 l_search_exp_start_org := FND_API.G_MISS_CHAR;
4017 else
4018 l_search_exp_start_org := p_search_exp_start_org_tbl(i);
4019 end if;
4020
4021 if p_search_min_candidate_sc_tbl is null then
4022 l_search_min_candidate_sc := FND_API.G_MISS_NUM;
4023 else
4024 l_search_min_candidate_sc := p_search_min_candidate_sc_tbl(i);
4025 end if;
4026
4027 if p_enable_auto_cand_nom_flg_tbl is null then
4028 l_enable_auto_cand_nom_flg := FND_API.G_MISS_CHAR;
4029 else
4030 l_enable_auto_cand_nom_flg := p_enable_auto_cand_nom_flg_tbl(i);
4031 end if;
4032
4033 if p_bill_rate_override_tbl is null then
4034 l_bill_rate_override := FND_API.G_MISS_NUM;
4035 else
4036 l_bill_rate_override := p_bill_rate_override_tbl(i);
4037 end if;
4038
4039 if p_bill_rate_curr_override_tbl is null then
4040 l_bill_rate_curr_override := FND_API.G_MISS_CHAR;
4041 else
4042 l_bill_rate_curr_override := p_bill_rate_curr_override_tbl(i);
4043 end if;
4044
4045
4046 if p_markup_percent_override_tbl is null then
4047 l_markup_percent_override := FND_API.G_MISS_NUM;
4048 else
4049 l_markup_percent_override := p_markup_percent_override_tbl(i);
4050 end if;
4051
4052
4053 if p_discount_percentage_tbl is null then
4054 l_discount_percentage := FND_API.G_MISS_NUM;
4055 else
4056 l_discount_percentage := p_discount_percentage_tbl(i);
4057 end if;
4058
4059
4060 if p_rate_disc_reason_code_tbl is null then
4061 l_rate_disc_reason_code := FND_API.G_MISS_CHAR;
4062 else
4063 l_rate_disc_reason_code := p_rate_disc_reason_code_tbl(i);
4064 end if;
4065
4066
4067 if p_tp_rate_override_tbl is null then
4068 l_tp_rate_override := FND_API.G_MISS_NUM;
4069 else
4070 l_tp_rate_override := p_tp_rate_override_tbl(i);
4071 end if;
4072
4073
4074 if p_tp_currency_override_tbl is null then
4075 l_tp_currency_override := FND_API.G_MISS_CHAR;
4076 else
4077 l_tp_currency_override := p_tp_currency_override_tbl(i);
4078 end if;
4079
4080 if p_staffing_owner_person_id_tbl is null then
4081 l_staffing_owner_person_id := FND_API.G_MISS_NUM;
4082 else
4083 l_staffing_owner_person_id := p_staffing_owner_person_id_tbl(i);
4084 end if;
4085
4086 if p_staffing_owner_name_tbl is null then
4087 l_staffing_owner_name := FND_API.G_MISS_CHAR;
4088 else
4089 l_staffing_owner_name := p_staffing_owner_name_tbl(i);
4090 end if;
4091
4092 if p_resource_list_member_id_tbl is null then
4093 l_resource_list_member_id := FND_API.G_MISS_NUM;
4094 else
4095 l_resource_list_member_id := p_resource_list_member_id_tbl(i);
4096 end if;
4097
4098 if p_attribute_category_tbl is null then
4099 l_attribute_category := FND_API.G_MISS_CHAR;
4100 else
4101 l_attribute_category := p_attribute_category_tbl(i);
4102 end if;
4103
4104 if p_attribute1_tbl is null then
4105 l_attribute1 := FND_API.G_MISS_CHAR;
4106 else
4107 l_attribute1 := p_attribute1_tbl(i);
4108 end if;
4109
4110 if p_attribute2_tbl is null then
4111 l_attribute2 := FND_API.G_MISS_CHAR;
4112 else
4113 l_attribute2 := p_attribute2_tbl(i);
4114 end if;
4115
4116
4117 if p_attribute3_tbl is null then
4118 l_attribute3 := FND_API.G_MISS_CHAR;
4119 else
4120 l_attribute3 := p_attribute3_tbl(i);
4121 end if;
4122
4123 if p_attribute4_tbl is null then
4124 l_attribute4 := FND_API.G_MISS_CHAR;
4125 else
4126 l_attribute4 := p_attribute4_tbl(i);
4127 end if;
4128
4129 if p_attribute5_tbl is null then
4130 l_attribute5 := FND_API.G_MISS_CHAR;
4131 else
4132 l_attribute5 := p_attribute5_tbl(i);
4133 end if;
4134
4135 if p_attribute6_tbl is null then
4136 l_attribute6 := FND_API.G_MISS_CHAR;
4137 else
4138 l_attribute6 := p_attribute6_tbl(i);
4139 end if;
4140
4141 if p_attribute7_tbl is null then
4142 l_attribute7 := FND_API.G_MISS_CHAR;
4143 else
4144 l_attribute7 := p_attribute7_tbl(i);
4145 end if;
4146
4147 if p_attribute8_tbl is null then
4148 l_attribute8 := FND_API.G_MISS_CHAR;
4149 else
4150 l_attribute8 := p_attribute8_tbl(i);
4151 end if;
4152
4153 if p_attribute9_tbl is null then
4154 l_attribute9 := FND_API.G_MISS_CHAR;
4155 else
4156 l_attribute9 := p_attribute9_tbl(i);
4157 end if;
4158
4159 if p_attribute10_tbl is null then
4160 l_attribute10 := FND_API.G_MISS_CHAR;
4161 else
4162 l_attribute10 := p_attribute10_tbl(i);
4163 end if;
4164
4165 if p_attribute11_tbl is null then
4166 l_attribute11 := FND_API.G_MISS_CHAR;
4167 else
4168 l_attribute11 := p_attribute11_tbl(i);
4169 end if;
4170
4171 if p_attribute12_tbl is null then
4172 l_attribute12 := FND_API.G_MISS_CHAR;
4173 else
4174 l_attribute12 := p_attribute12_tbl(i);
4175 end if;
4176
4177 if p_attribute13_tbl is null then
4178 l_attribute13 := FND_API.G_MISS_CHAR;
4179 else
4180 l_attribute13 := p_attribute13_tbl(i);
4181 end if;
4182
4183 if p_attribute14_tbl is null then
4184 l_attribute14 := FND_API.G_MISS_CHAR;
4185 else
4186 l_attribute14 := p_attribute14_tbl(i);
4187 end if;
4188
4189 if p_attribute15_tbl is null then
4190 l_attribute15 := FND_API.G_MISS_CHAR;
4191 else
4192 l_attribute15 := p_attribute15_tbl(i);
4193 end if;
4194
4195 if p_api_version_tbl is null then
4196 l_api_version := 1.0;
4197 else
4198 l_api_version := p_api_version_tbl(i);
4199 end if;
4200
4201 if p_init_msg_list_tbl is null then
4202 l_init_msg_list := FND_API.G_FALSE;
4203 else
4204 l_init_msg_list := p_init_msg_list_tbl(i);
4205 end if;
4206
4207 if p_commit_tbl is null then
4208 l_commit := FND_API.G_FALSE;
4209 else
4210 l_commit := p_commit_tbl(i);
4211 end if;
4212
4213 if p_validate_only_tbl is null then
4214 l_validate_only := FND_API.G_TRUE;
4215 else
4216 l_validate_only := p_validate_only_tbl(i);
4217 end if;
4218
4219 if p_context_tbl is null then
4220 l_context := FND_API.G_MISS_CHAR;
4221 else
4222 l_context := p_context_tbl(i);
4223 end if;
4224
4225 --nisinha Bug9468685
4226 -- Min and Max lob levels from Sch people update should be retained as it is.
4227 IF PA_ASSIGNMENTS_PUB.G_update_assignment_bulk_call = 'Y' THEN
4228 SELECT fcst_tp_amount_type
4229 ,min_resource_job_level
4230 ,max_resource_job_level
4231 INTO l_fcst_tp_amount_type
4232 ,l_min_resource_job_level
4233 ,l_max_resource_job_level
4234 FROM pa_project_assignments_v
4235
4236 WHERE assignment_id= l_assignment_id;
4237 end if;
4238 -- Bug#9468685
4239
4240 Execute_Update_Assignment
4241 (
4242 p_asgn_update_mode => l_asgn_update_mode
4243 ,p_assignment_id => l_assignment_id
4244 ,p_record_version_number => l_record_version_number
4245 ,p_assignment_name => l_assignment_name
4246 ,p_assignment_type => l_assignment_type
4247 ,p_multiple_status_flag => l_multiple_status_flag
4248 ,p_status_code => l_status_code
4249 ,p_start_date => l_start_date
4250 ,p_end_date => l_end_date
4251 ,p_staffing_priority_code => l_staffing_priority_code
4252 ,p_project_id => l_project_id
4253 ,p_assignment_template_id => l_assignment_template_id
4254 ,p_project_subteam_id => l_project_subteam_id
4255 ,p_project_subteam_party_id => l_project_subteam_party_id
4256 ,p_description => l_description
4257 ,p_extension_possible => l_extension_possible
4258 ,p_min_resource_job_level => l_min_resource_job_level
4259 ,p_max_resource_job_level => l_max_resource_job_level
4260 ,p_additional_information => l_additional_information
4261 ,p_work_type_id => l_work_type_id
4262 ,p_project_role_id => l_project_role_id--Bug#9108007
4263 ,p_expense_owner => l_expense_owner
4264 ,p_expense_limit => l_expense_limit
4265 ,p_fcst_tp_amount_type => l_fcst_tp_amount_type
4266 ,p_fcst_job_id => l_fcst_job_id
4267 ,p_fcst_job_group_id => l_fcst_job_group_id
4268 ,p_expenditure_org_id => l_expenditure_org_id
4269 ,p_expenditure_organization_id => l_exp_organization_id
4270 ,p_expenditure_type_class => l_expenditure_type_class
4271 ,p_expenditure_type => l_expenditure_type
4272 ,p_project_subteam_name => l_project_subteam_name
4273 ,p_location_city => l_location_city
4274 ,p_location_region => l_location_region
4275 ,p_location_country_name => l_location_country_name
4276 ,p_calendar_name => l_calendar_name
4277 ,p_calendar_id => l_calendar_id
4278 ,p_fcst_job_name => l_fcst_job_name
4279 ,p_fcst_job_group_name => l_fcst_job_group_name
4280 ,p_expenditure_org_name => l_expenditure_org_name
4281 ,p_exp_organization_name => l_exp_organization_name
4282 ,p_comp_match_weighting => l_comp_match_weighting
4283 ,p_avail_match_weighting => l_avail_match_weighting
4284 ,p_job_level_match_weighting => l_job_level_match_weight
4285 ,p_search_min_availability => l_search_min_availability
4286 ,p_search_country_code => l_search_country_code
4287 ,p_search_country_name => l_search_country_name
4288 ,p_search_exp_org_struct_ver_id => l_search_exp_org_st_ver_id
4289 ,p_search_exp_org_hier_name => l_search_exp_org_hier_name
4290 ,p_search_exp_start_org_id => l_search_exp_start_org_id
4291 ,p_search_exp_start_org_name => l_search_exp_start_org
4292 ,p_search_min_candidate_score => l_search_min_candidate_sc
4293 ,p_enable_auto_cand_nom_flag => l_enable_auto_cand_nom_flg
4294 ,p_bill_rate_override => l_bill_rate_override
4295 ,p_bill_rate_curr_override => l_bill_rate_curr_override
4296 ,p_markup_percent_override => l_markup_percent_override
4297 ,p_discount_percentage => l_discount_percentage
4298 ,p_rate_disc_reason_code => l_rate_disc_reason_code
4299 ,p_tp_rate_override => l_tp_rate_override
4300 ,p_tp_currency_override => l_tp_currency_override
4301 ,p_staffing_owner_person_id => l_staffing_owner_person_id
4302 ,p_staffing_owner_name => l_staffing_owner_name
4303 ,p_resource_list_member_id => l_resource_list_member_id
4304 ,p_attribute_category => l_attribute_category
4305 ,p_attribute1 => l_attribute1
4306 ,p_attribute2 => l_attribute2
4307 ,p_attribute3 => l_attribute3
4308 ,p_attribute4 => l_attribute4
4309 ,p_attribute5 => l_attribute5
4310 ,p_attribute6 => l_attribute6
4311 ,p_attribute7 => l_attribute7
4312 ,p_attribute8 => l_attribute8
4313 ,p_attribute9 => l_attribute9
4314 ,p_attribute10 => l_attribute10
4315 ,p_attribute11 => l_attribute11
4316 ,p_attribute12 => l_attribute12
4317 ,p_attribute13 => l_attribute13
4318 ,p_attribute14 => l_attribute14
4319 ,p_attribute15 => l_attribute15
4320 ,p_api_version => l_api_version
4321 ,p_init_msg_list => l_init_msg_list
4322 ,p_commit => l_commit
4323 ,p_validate_only => l_validate_only
4324 ,p_context => l_context
4325 ,x_return_status => x_return_status_tbl(i)
4326 ,x_msg_count => x_msg_count_tbl(i)
4327 ,x_msg_data => x_msg_data_tbl(i));
4328
4329 EXCEPTION
4330 WHEN OTHERS THEN
4331
4332 -- Set the excetption Message and the stack
4333 FND_MSG_PUB.add_exc_msg ( p_pkg_name => 'PA_ASSIGNMENT_PUB.Execute_Update_Assignment'
4334 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
4335 --
4336 x_return_status_tbl(i) := FND_API.G_RET_STS_UNEXP_ERROR ;
4337 RAISE; -- This is optional depending on the needs
4338 --
4339 END;
4340
4341 end loop;
4342
4343 END Execute_Update_Assignment_bulk;
4344
4345
4346
4347
4348
4349 PROCEDURE Update_Assignment
4350 ( p_assignment_rec IN PA_ASSIGNMENTS_PUB.Assignment_Rec_Type
4351 ,p_asgn_update_mode IN VARCHAR2 := FND_API.G_MISS_CHAR
4352 ,p_project_number IN pa_projects_all.segment1%TYPE := FND_API.G_MISS_CHAR /* Bug 1851096 */
4353 ,p_resource_name IN pa_resources.name%TYPE := FND_API.G_MISS_CHAR
4354 ,p_resource_source_id IN NUMBER := FND_API.G_MISS_NUM
4355 ,p_resource_id IN pa_resources.resource_id%TYPE := FND_API.G_MISS_NUM
4356 ,p_calendar_name IN jtf_calendars_tl.calendar_name%TYPE := FND_API.G_MISS_CHAR
4357 ,p_project_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
4358 ,p_project_subteam_id IN pa_project_subteams.project_subteam_id%TYPE := FND_API.G_MISS_NUM
4359 ,p_project_subteam_party_id IN pa_project_subteam_parties.project_subteam_party_id%TYPE := FND_API.G_MISS_NUM
4360 ,p_project_subteam_name IN pa_project_subteams.name%TYPE := FND_API.G_MISS_CHAR
4361 ,p_staffing_priority_name IN pa_lookups.meaning%TYPE := FND_API.G_MISS_CHAR
4362 ,p_project_role_name IN pa_project_role_types.meaning%TYPE := FND_API.G_MISS_CHAR
4363 ,p_location_city IN pa_locations.city%TYPE := FND_API.G_MISS_CHAR
4364 ,p_location_region IN pa_locations.region%TYPE := FND_API.G_MISS_CHAR
4365 ,p_location_country_name IN fnd_territories_tl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
4366 ,p_location_country_code IN pa_locations.country_code%TYPE := FND_API.G_MISS_CHAR
4367 ,p_work_type_name IN pa_work_types_vl.name%TYPE := FND_API.G_MISS_CHAR
4368 ,p_fcst_job_name IN per_jobs.name%TYPE := FND_API.G_MISS_CHAR
4369 ,p_fcst_job_group_name IN per_job_groups.displayed_name%TYPE := FND_API.G_MISS_CHAR
4370 ,p_expenditure_org_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
4371 ,p_exp_organization_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
4372 ,p_search_country_name IN fnd_territories_vl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
4373 ,p_search_exp_org_hier_name IN per_organization_structures.name%TYPE := FND_API.G_MISS_CHAR
4374 ,p_search_exp_start_org_name IN hr_organization_units.name%TYPE := FND_API.G_MISS_CHAR
4375 ,p_staffing_owner_name IN per_people_f.full_name%TYPE := FND_API.G_MISS_CHAR
4376 ,p_api_version IN NUMBER := 1
4377 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
4378 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
4379 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
4380 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
4381 ,p_context IN VARCHAR2 := FND_API.G_MISS_CHAR -- Added for GSI PJR Enhancement bug 7693634
4382 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4383 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
4384 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
4385 )IS
4386
4387 l_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
4388 l_assignment_id pa_project_assignments.assignment_id%TYPE;
4389 l_project_id pa_projects.project_id%TYPE;
4390 l_resource_source_id pa_resources.resource_id%TYPE;
4391 l_status_code pa_project_statuses.project_status_code%TYPE;
4392 l_project_role_id pa_project_role_types.project_role_id%TYPE;
4393 l_location_country_name fnd_territories_tl.territory_short_name%TYPE;
4394 l_location_country_code fnd_territories.territory_code%TYPE;
4395 l_calendar_id jtf_calendars_b.calendar_id%TYPE;
4396 l_return_status VARCHAR2(1);
4397 l_tp_amount_type_desc VARCHAR2(80);
4398 l_msg_count NUMBER;
4399 l_msg_data VARCHAR2(2000);
4400 l_resource_type_id NUMBER;
4401 l_error_message_code fnd_new_messages.message_name%TYPE;
4402 l_msg_index_out NUMBER;
4403 l_valid_flag VARCHAR2(1);
4404 l_project_status_type PA_PROJECT_STATUSES.status_type%TYPE := null;
4405 l_subteam_id pa_project_subteams.project_subteam_id%TYPE;
4406 l_object_type pa_project_subteams.object_type%TYPE;
4407 l_object_id pa_project_subteams.object_id%TYPE;
4408 l_workflow_in_progress_flag pa_team_templates.workflow_in_progress_flag%TYPE;
4409 l_project_status_name pa_project_statuses.project_status_name%TYPE;
4410 l_calendar_name jtf_calendars_tl.calendar_name%TYPE;
4411 l_record_version_check VARCHAR2(1) := 'Y';
4412 l_pending_wf_check VARCHAR2(1) := 'Y';
4413 l_mass_wf_in_progress_flag pa_project_assignments.mass_wf_in_progress_flag%TYPE;
4414 l_ret_code VARCHAR2(1);
4415 l_project_system_status_code pa_project_statuses.project_system_status_code%TYPE;
4416
4417 l_temp_expenditure_type_class pa_project_assignments.expenditure_type_class%TYPE;
4418 l_temp_fcst_job_group_id NUMBER;
4419 l_temp_fcst_tp_amount_type pa_project_assignments.fcst_tp_amount_type%TYPE;
4420 l_temp_status_code pa_project_statuses.project_status_code%TYPE;
4421 l_temp_calendar_id NUMBER;
4422 l_temp_fcst_job_id NUMBER;
4423 l_temp_exp_organization_id NUMBER;
4424 l_temp_expenditure_org_id NUMBER;
4425 l_temp_work_type_id NUMBER;
4426 l_temp_staff_owner_person_id NUMBER;
4427 -- Bug: 4537865
4428 t_search_exp_org_struct_ver_id pa_project_assignments.search_exp_org_struct_ver_id%TYPE;
4429 l_new_search_exp_start_org_id pa_project_assignments.search_exp_start_org_id%TYPE;
4430 --l_new_tp_currency_override pa_project_assignments.tp_rate_override%TYPE;
4431 --Bug 8277143
4432 l_new_tp_currency_override pa_project_assignments.tp_currency_override%TYPE;
4433 l_new_search_country_code pa_project_assignments.search_country_code%TYPE;
4434 l_new_bill_rate_curr_override pa_project_assignments.bill_rate_curr_override%TYPE;
4435 l_new_staffing_priority_code pa_project_assignments.staffing_priority_code%TYPE;
4436 -- Bug: 4537865
4437 CURSOR check_record_version IS
4438 SELECT ROWID, apprvl_status_code
4439 FROM pa_project_assignments
4440 WHERE assignment_id = p_assignment_rec.assignment_id
4441 AND record_version_number = nvl (p_assignment_rec.record_version_number, record_version_number);
4442
4443 CURSOR get_expenditure_type_class IS
4444 SELECT system_linkage_function
4445 FROM pa_expend_typ_sys_links_v
4446 WHERE expenditure_type = l_assignment_rec.expenditure_type
4447 AND system_linkage_function in ('ST', 'OT');
4448
4449 CURSOR get_start_date IS
4450 SELECT start_date
4451 FROM pa_project_assignments
4452 WHERE assignment_id = l_assignment_rec.assignment_id;
4453
4454 CURSOR check_team_template_wf IS
4455 SELECT workflow_in_progress_flag
4456 FROM pa_team_templates
4457 WHERE team_template_id = l_assignment_rec.assignment_template_id;
4458
4459 CURSOR check_project_assignment_wf IS
4460 SELECT mass_wf_in_progress_flag
4461 FROM pa_project_assignments
4462 WHERE assignment_id = l_assignment_rec.assignment_id;
4463
4464 CURSOR get_project_system_status_code IS
4465 SELECT ps.project_system_status_code
4466 FROM pa_project_assignments asgn,
4467 pa_project_statuses ps
4468 WHERE asgn.assignment_id = l_assignment_rec.assignment_id
4469 AND asgn.status_code = ps.project_status_code(+);
4470
4471 /* Bug 2590938 Begin */
4472 -- MOAC Changes bug 4363092: removed nvl used with org_id
4473 CURSOR get_bill_rate_override_flags IS
4474 SELECT impl.RATE_DISCOUNT_REASON_FLAG
4475 ,impl.BR_OVERRIDE_FLAG
4476 ,impl.BR_DISCOUNT_OVERRIDE_FLAG
4477 FROM PA_IMPLEMENTATIONS_ALL impl
4478 ,pa_projects_all proj
4479 WHERE proj.org_id=impl.org_id
4480 and proj.project_id = l_assignment_rec.project_id ;
4481
4482 l_rate_discount_reason_flag varchar2(1);
4483 l_br_override_flag varchar2(1);
4484 l_br_discount_override_flag varchar2(1);
4485 /* Bug 2590938 End */
4486
4487 BEGIN
4488 -- Initialize the Error Stack
4489 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Update_Assignment');
4490 --Log Message
4491 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
4492 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Update_Assignment.begin'
4493 ,x_msg => 'Beginning of Update_Assignment'
4494 ,x_log_level => 5);
4495 END IF;
4496
4497 -- Initialize the return status to success
4498 x_return_status := FND_API.G_RET_STS_SUCCESS;
4499
4500 -- Initialize the error flag
4501 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_FALSE;
4502
4503 -- Issue API savepoint if the transaction is to be committed
4504 IF p_commit = FND_API.G_TRUE THEN
4505 SAVEPOINT ASG_PUB_UPDATE_ASSIGNMENT;
4506 END IF;
4507
4508 --Clear the global PL/SQL message table
4509 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
4510 FND_MSG_PUB.initialize;
4511 END IF;
4512
4513 -- Assign the record to the local variable
4514 l_assignment_rec := p_assignment_rec;
4515
4516 --if this is a template requirement then check that worflow is not in progress
4517 --on the parent team template. If it is in progress then no new template requirements
4518 --can be created.
4519 IF (l_assignment_rec.project_id IS NULL or l_assignment_rec.project_id = FND_API.G_MISS_NUM) AND
4520 (l_assignment_rec.assignment_template_id IS NOT NULL and l_assignment_rec.assignment_template_id <>FND_API.G_MISS_NUM) THEN
4521
4522 OPEN check_team_template_wf;
4523 FETCH check_team_template_wf INTO l_workflow_in_progress_flag;
4524 CLOSE check_team_template_wf;
4525
4526 IF l_workflow_in_progress_flag='Y' THEN
4527
4528 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
4529 ,p_msg_name => 'PA_NO_REQ_WF');
4530 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4531 x_return_status := FND_API.G_RET_STS_ERROR;
4532 END IF;
4533 END IF;
4534 -- check that mass workflow for updating assignment is not in progress.
4535 -- if mass workflow is in progress, cannot update the assignment
4536 -- perform this check only if this is online single update
4537
4538
4539 IF p_asgn_update_mode <> PA_MASS_ASGMT_TRX.G_MASS_UPDATE_ASGMT_BASIC_INFO
4540 and p_asgn_update_mode <> PA_MASS_ASGMT_TRX.G_MASS_UPDATE_FORECAST_ITEMS
4541 and p_asgn_update_mode <> 'MASS_ONLINE' THEN
4542
4543 --dbms_output.put_line('single update - check number_mass_wf_in_progress');
4544
4545 OPEN check_project_assignment_wf;
4546 FETCH check_project_assignment_wf INTO l_mass_wf_in_progress_flag;
4547 CLOSE check_project_assignment_wf;
4548
4549 IF l_mass_wf_in_progress_flag = 'Y' THEN
4550 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
4551 ,p_msg_name => 'PA_ASSIGNMENT_WF');
4552 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4553 x_return_status := FND_API.G_RET_STS_ERROR;
4554 END IF;
4555 END IF;
4556 -- check that the assignment or requirement is cancelled or filled
4557 -- only if this is during mass workflow
4558 -- do not allow user to update cancelled or filled asgn/req
4559 IF p_asgn_update_mode = PA_MASS_ASGMT_TRX.G_MASS_UPDATE_ASGMT_BASIC_INFO
4560 OR p_asgn_update_mode = PA_MASS_ASGMT_TRX.G_MASS_UPDATE_FORECAST_ITEMS THEN
4561 OPEN get_project_system_status_code;
4562 FETCH get_project_system_status_code INTO l_project_system_status_code;
4563 CLOSE get_project_system_status_code;
4564
4565 IF l_project_system_status_code = 'OPEN_ASGMT_FILLED' OR
4566 l_project_system_status_code = 'OPEN_ASGMT_CANCEL' OR
4567 l_project_system_status_code = 'STAFFED_ASGMT_CANCEL' THEN
4568
4569 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
4570 ,p_msg_name => 'PA_UPDATE_CAN_FILL_ASMT');
4571 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4572 x_return_status := FND_API.G_RET_STS_ERROR;
4573 END IF;
4574
4575 END IF;
4576 --Neither schedule attributes (dates, calendar) nor status
4577 --can be updated through this API. Updates to schedule attributes
4578 --must go through the schedule APIs. If any of these attributes
4579 --are passed in to this API then return an error.
4580 --UNLESS THIS IS A TEMPLATE REQUIREMENT. Updates to these attributes for TEMPLATE REQUIREMENTS
4581 --are allowed - template requirements do not have schedules.
4582 --
4583 --The schedule attributes are allowed to be passed in if they are from PRM pages.
4584 --For PRM pages, the PA_STARTUP.G_Check_ID_Flag will be set to 'N'.
4585 --In this case, these schedule attributes will be reset to default values and ignored.
4586 --If these attributes are not from PRM pages, and this is not a template requirement
4587 --then an error will be thrown.
4588
4589 -- Bug 8233045: If call is from Schedule People page, then flow should continue.
4590
4591 IF (l_assignment_rec.project_id <> FND_API.G_MISS_NUM AND l_assignment_rec.project_id IS NOT NULL) AND
4592 (l_assignment_rec.start_date <> FND_API.G_MISS_DATE OR
4593 l_assignment_rec.end_date <> FND_API.G_MISS_DATE OR
4594 l_assignment_rec.status_code <> FND_API.G_MISS_CHAR OR
4595 p_project_status_name <> FND_API.G_MISS_CHAR OR
4596 l_assignment_rec.calendar_id <> FND_API.G_MISS_NUM OR
4597 p_calendar_name <> FND_API.G_MISS_CHAR OR
4598 l_assignment_rec.calendar_type <> FND_API.G_MISS_CHAR) AND
4599 (PA_STARTUP.G_Calling_Application <> 'SELF_SERVICE' OR PA_STARTUP.G_Calling_Application IS NULL) /*AND
4600 PA_ASSIGNMENTS_PUB.G_update_assignment_bulk_call <> 'Y' */ THEN -- Bug 8233045
4601
4602 /*
4603 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4604 ,p_msg_name => 'PA_SCH_UPDATE_NOT_ALLOWED');
4605 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4606 */
4607
4608 NULL;
4609
4610 --Update to Resource or Project Role is not allowed for Version 1.
4611 --So if any role/resource attributes is passed in (or NULL is passed in),
4612 --Then throw an error.
4613 --Do not throw error if this is with in Mass Update Workflow
4614 ELSIF p_asgn_update_mode <> PA_MASS_ASGMT_TRX.G_MASS_UPDATE_ASGMT_BASIC_INFO
4615 AND p_asgn_update_mode <> PA_MASS_ASGMT_TRX.G_MASS_UPDATE_FORECAST_ITEMS
4616 AND ((l_assignment_rec.project_role_id <> FND_API.G_MISS_NUM OR l_assignment_rec.project_role_id IS NULL) OR
4617 (p_project_role_name <> FND_API.G_MISS_CHAR OR p_project_role_name IS NULL) OR
4618 (p_resource_id <> FND_API.G_MISS_NUM OR p_resource_id IS NULL) OR
4619 (p_resource_name <> FND_API.G_MISS_CHAR OR p_resource_name IS NULL) OR
4620 (p_resource_source_id <> FND_API.G_MISS_NUM OR p_resource_source_id IS NULL) ) THEN
4621
4622 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4623 ,p_msg_name => 'PA_RES_OR_ROLE_NOT_ALLOWED');
4624 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4625
4626
4627 ELSE
4628
4629 l_project_status_name := p_project_status_name;
4630 l_calendar_name := p_calendar_name;
4631
4632 /* Added extra condition for GSI PJR enhancement. bug # 7693634*/
4633 --For non Template Requirement, reset schedule attributes to default values.
4634
4635
4636 IF (l_assignment_rec.project_id <> FND_API.G_MISS_NUM AND l_assignment_rec.project_id IS NOT NULL AND p_context <>'SS_UPDATE_ASSIGN') THEN
4637
4638 l_assignment_rec.start_date :=FND_API.G_MISS_DATE;
4639 l_assignment_rec.end_date :=FND_API.G_MISS_DATE;
4640 l_assignment_rec.status_code :=FND_API.G_MISS_CHAR;
4641 l_project_status_name :=FND_API.G_MISS_CHAR;
4642 IF PA_ASSIGNMENTS_PUB.G_update_assignment_bulk_call <> 'Y' THEN--Bug#9108007
4643 l_assignment_rec.calendar_id :=FND_API.G_MISS_NUM;
4644 END IF;
4645 l_calendar_name :=FND_API.G_MISS_CHAR;
4646 l_assignment_rec.calendar_type :=FND_API.G_MISS_CHAR;
4647
4648 ELSIF p_context = 'SS_UPDATE_ASSIGN' THEN
4649
4650 l_assignment_rec.status_code :=FND_API.G_MISS_CHAR;
4651 l_project_status_name :=FND_API.G_MISS_CHAR;
4652 l_assignment_rec.calendar_id :=FND_API.G_MISS_NUM;
4653 l_calendar_name :=FND_API.G_MISS_CHAR;
4654 l_assignment_rec.calendar_type :=FND_API.G_MISS_CHAR;
4655 END IF;
4656
4657 --dbms_output.put_line('Before Opening Cursor');
4658
4659 --IF in Mass_Online Mode which is only for validation, do not check record version number, or check workflow pending.
4660
4661 IF p_asgn_update_mode <> 'MASS_ONLINE' and p_asgn_update_mode <> 'MASS_UPDATE_ASGMT_BASIC_INFO_BULK' THEN
4662
4663 OPEN check_record_version;
4664
4665 FETCH check_record_version INTO l_assignment_rec.assignment_row_id, l_assignment_rec.apprvl_status_code;
4666
4667
4668 IF PA_ASGMT_WFSTD.is_approval_pending(p_assignment_id => l_assignment_rec.assignment_id) = 'Y' THEN
4669
4670 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4671 ,p_msg_name => 'PA_WF_APPROVAL_PENDING');
4672 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4673 l_pending_wf_check := 'N';
4674
4675
4676 /* bug 8233045: GSI ER, skipping the following validation only when call is in bulk mode. This might need to be revisited later */
4677 ELSIF ((check_record_version%NOTFOUND )) THEN
4678
4679 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4680 ,p_msg_name => 'PA_XC_RECORD_CHANGED');
4681 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4682 l_record_version_check := 'N';
4683
4684 END IF;
4685
4686 CLOSE check_record_version;
4687 END IF; -- end of checking not in Mass Online Mode, Mass Online can avoid check record version number
4688
4689
4690 IF (l_record_version_check <> 'N') AND (l_pending_wf_check <> 'N') THEN
4691 --do validation for these attributes when passed for a template requirement.
4692
4693
4694
4695 IF (l_assignment_rec.status_code <> FND_API.G_MISS_CHAR AND l_assignment_rec.status_code IS NOT NULL) OR
4696 (l_project_status_name <> FND_API.G_MISS_CHAR AND l_project_status_name IS NOT NULL) THEN
4697 -- Validate Status code
4698 --
4699 -- need to convert from assignment status types to the status type
4700 -- defined in pa_project_statuses.
4701
4702 IF l_assignment_rec.assignment_type = 'OPEN_ASSIGNMENT' THEN
4703
4704 l_project_status_type := 'OPEN_ASGMT';
4705
4706 ELSIF l_assignment_rec.assignment_type = 'STAFFED_ASSIGNMENT' THEN
4707
4708 l_project_status_type := 'STAFFED_ASGMT';
4709
4710 ELSIF l_assignment_rec.assignment_type = 'ADMIN_ASSIGNMENT' THEN
4711
4712 l_project_status_type := 'STAFFED_ASGMT';
4713
4714 END IF;
4715 IF l_assignment_rec.status_code = FND_API.G_MISS_CHAR THEN
4716
4717 l_status_code := null;
4718
4719 ELSE l_status_code := l_assignment_rec.status_code;
4720
4721 END IF;
4722 l_temp_status_code := l_assignment_rec.status_code;
4723 PA_PROJECT_STUS_UTILS.Check_Status_Name_Or_Code ( p_status_code => l_temp_status_code
4724 ,p_status_name => l_project_status_name
4725 ,p_status_type => l_project_status_type
4726 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
4727 ,x_status_code => l_assignment_rec.status_code
4728 ,x_return_status => l_return_status
4729 ,x_error_message_code => l_error_message_code);
4730
4731 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4732 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4733 , p_msg_name => l_error_message_code);
4734 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4735 END IF;
4736
4737 l_return_status := FND_API.G_MISS_CHAR;
4738 l_error_message_code := FND_API.G_MISS_CHAR;
4739 l_assignment_rec.status_code := l_status_code;
4740
4741 END IF;
4742
4743 /* Bug 2887390 : Added the following condition */
4744 IF (l_assignment_rec.calendar_type = 'PROJECT' AND l_assignment_rec.calendar_id is NULL)
4745 THEN
4746 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
4747 ,p_msg_name => 'PA_INVALID_CAL_PROJ_SETUP' );
4748 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4749 END IF;
4750 IF (l_calendar_name <> FND_API.G_MISS_CHAR AND l_calendar_name IS NOT NULL) OR
4751 (l_assignment_rec.calendar_id <> FND_API.G_MISS_NUM AND l_assignment_rec.calendar_id IS NOT NULL) THEN
4752
4753 -- Validate Calendar detail
4754 -- If calendar name is valid and calendar_id is null then returns the calendar_id
4755 --
4756 l_temp_calendar_id := l_assignment_rec.calendar_id;
4757 PA_CALENDAR_UTILS.Check_Calendar_Name_Or_Id( p_calendar_id => l_temp_calendar_id
4758 ,p_calendar_name => l_calendar_name
4759 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
4760 ,x_calendar_id => l_assignment_rec.calendar_id
4761 ,x_return_status => l_return_status
4762 ,x_error_message_code => l_error_message_code );
4763 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4764 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
4765 ,p_msg_name => l_error_message_code );
4766 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4767 END IF;
4768 l_return_status := FND_API.G_MISS_CHAR;
4769 l_error_message_code := FND_API.G_MISS_CHAR;
4770 END IF;
4771 --Log Message
4772 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
4773 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Update_Assignment.Id_validation'
4774 ,x_msg => 'Do Value to ID conversion.'
4775 ,x_log_level => 5);
4776 END IF;
4777
4778 -- Do all Value to ID conversions and validations
4779 IF (l_assignment_rec.project_id IS NULL OR l_assignment_rec.project_id = FND_API.G_MISS_NUM)
4780 AND (p_project_number IS NOT NULL AND p_project_number <> FND_API.G_MISS_CHAR) THEN
4781 l_assignment_rec.project_id := PA_UTILS.GetProjId (x_project_num => p_project_number);
4782 END IF;
4783 IF (p_asgn_update_mode <> 'MASS_ONLINE') THEN
4784 IF l_assignment_rec.start_date IS NULL OR l_assignment_rec.start_date = FND_API.G_MISS_DATE THEN
4785 --
4786 --Get assignment start date
4787 --
4788 OPEN get_start_date;
4789 FETCH get_start_date into l_assignment_rec.start_date;
4790 CLOSE get_start_date;
4791 END IF;
4792 END IF;
4793
4794
4795 --Currently all changes to Status must go through the Schedule APIs,
4796 --so commenting out.
4797 --No updates to assignment dates / status allowed through the
4798 --Update Assignment API.
4799
4800 --dbms_output.put_line('Before Validate Location');
4801 --
4802 -- Validate Location detail
4803 --
4804
4805 IF p_location_country_code = FND_API.G_MISS_CHAR THEN
4806
4807 l_location_country_code := null;
4808
4809 ELSE l_location_country_code := p_location_country_code;
4810
4811 END IF;
4812 --
4813 -- Validate Location detail
4814 -- If country name is valid and country_code is null returns the country_code
4815 --
4816 --No Need to Validate if country code and name are both not passed in
4817
4818 IF (l_location_country_code IS NOT NULL) OR
4819 (p_location_country_name IS NOT NULL AND p_location_country_name <> FND_API.G_MISS_CHAR) THEN
4820 PA_LOCATION_UTILS.Check_Country_Name_Or_Code( p_country_code => p_location_country_code
4821 ,p_country_name => p_location_country_name
4822 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
4823 ,x_country_code => l_location_country_code
4824 ,x_return_status => l_return_status
4825 ,x_error_message_code => l_error_message_code );
4826 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4827 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
4828 ,p_msg_name => l_error_message_code );
4829 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4830 END IF;
4831 l_return_status := FND_API.G_MISS_CHAR;
4832 l_error_message_code := FND_API.G_MISS_CHAR;
4833
4834 -- if country is not passed in, but region/city is passed in, give an error.
4835 ELSIF (p_location_city IS NOT NULL AND p_location_city <> FND_API.G_MISS_CHAR) OR
4836 (p_location_region IS NOT NULL AND p_location_region <> FND_API.G_MISS_CHAR) THEN
4837 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
4838 ,p_msg_name => 'PA_COUNTRY_INVALID');
4839 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4840
4841 --Bug 1795160: when user empty the location fields, the location id needs to be nulled out.
4842 --If in self-service mode, if country name and code is null, then set location id to NULL
4843 ELSIF l_location_country_code IS NULL AND p_location_country_name IS NULL AND PA_STARTUP.G_Calling_Application =
4844
4845 'SELF_SERVICE' THEN
4846 l_assignment_rec.location_id := NULL;
4847
4848 END IF;
4849
4850 --
4851 -- Validate assignment Job Levels
4852 --
4853 IF l_assignment_rec.assignment_type = 'OPEN_ASSIGNMENT' AND
4854 l_assignment_rec.min_resource_job_level <> FND_API.G_MISS_NUM AND
4855 l_assignment_rec.max_resource_job_level <> FND_API.G_MISS_NUM THEN
4856 -- Check Min level
4857 PA_JOB_UTILS.Check_JobLevel( p_level => l_assignment_rec.min_resource_job_level
4858 ,x_valid => l_valid_flag
4859 ,x_return_status => l_return_status
4860 ,x_error_message_code => l_error_message_code );
4861 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4862 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
4863 ,p_msg_name => l_error_message_code );
4864 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4865 END IF;
4866 l_return_status := FND_API.G_MISS_CHAR;
4867 l_error_message_code := FND_API.G_MISS_CHAR;
4868
4869 -- Check Max level
4870 PA_JOB_UTILS.Check_JobLevel( p_level => l_assignment_rec.max_resource_job_level
4871 ,x_valid => l_valid_flag
4872 ,x_return_status => l_return_status
4873 ,x_error_message_code => l_error_message_code );
4874 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4875 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
4876 ,p_msg_name => l_error_message_code );
4877 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4878 END IF;
4879 l_return_status := FND_API.G_MISS_CHAR;
4880 l_error_message_code := FND_API.G_MISS_CHAR;
4881
4882
4883 --
4884 -- Check that max job level is >= min job level
4885 --
4886 IF l_assignment_rec.min_resource_job_level > l_assignment_rec.max_resource_job_level THEN
4887 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4888 ,p_msg_name => 'PA_MIN_JL_GREATER_THAN_MAX');
4889 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4890 END IF;
4891
4892 END IF; -- end of checking job levels for only open assignments
4893 --
4894 -- Validate Candidate Score Match Weightings
4895 --
4896 IF (l_assignment_rec.comp_match_weighting <> FND_API.G_MISS_NUM AND l_assignment_rec.comp_match_weighting IS NOT NULL)
4897
4898 THEN
4899 IF l_assignment_rec.comp_match_weighting < 0 OR l_assignment_rec.comp_match_weighting > 100 THEN
4900 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4901 ,p_msg_name => 'PA_INVALID_MATCH_WEIGHTING');
4902 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4903 END IF;
4904 END IF;
4905
4906 IF (l_assignment_rec.avail_match_weighting <> FND_API.G_MISS_NUM AND l_assignment_rec.avail_match_weighting IS NOT NULL) THEN
4907 IF l_assignment_rec.avail_match_weighting < 0 OR l_assignment_rec.avail_match_weighting > 100 THEN
4908 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4909 ,p_msg_name => 'PA_INVALID_MATCH_WEIGHTING');
4910 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4911 END IF;
4912 END IF;
4913
4914 IF (l_assignment_rec.job_level_match_weighting <> FND_API.G_MISS_NUM AND l_assignment_rec.job_level_match_weighting IS NOT
4915
4916 NULL) THEN
4917 IF l_assignment_rec.job_level_match_weighting < 0 OR l_assignment_rec.job_level_match_weighting > 100 THEN
4918 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4919 ,p_msg_name => 'PA_INVALID_MATCH_WEIGHTING');
4920 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4921 END IF;
4922 END IF;
4923
4924
4925 -- Validate Search Minimum Availiability
4926 --
4927
4928 IF l_assignment_rec.search_min_availability <> FND_API.G_MISS_NUM AND l_assignment_rec.search_min_availability IS NOT NULL THEN
4929 IF l_assignment_rec.search_min_availability < 0 OR
4930 l_assignment_rec.search_min_availability > 100 THEN
4931
4932 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4933 ,p_msg_name => 'PA_MIN_AVAIL_INVALID');
4934 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4935 END IF;
4936 END IF;
4937 --
4938 -- Validate Search Min Candidate Score
4939 --
4940
4941 IF l_assignment_rec.search_min_candidate_score <> FND_API.G_MISS_NUM AND l_assignment_rec.search_min_candidate_score IS NOT
4942
4943 NULL THEN
4944 IF l_assignment_rec.search_min_candidate_score < 0 OR
4945 l_assignment_rec.search_min_candidate_score > 100 THEN
4946
4947 PA_UTILS.Add_Message( p_app_short_name => 'PA'
4948 ,p_msg_name => 'PA_MIN_CAN_SCORE_INVALID');
4949 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4950 END IF;
4951 END IF;
4952
4953 --
4954 -- Validate Search Org_Hierarchy
4955 --
4956 IF (l_assignment_rec.search_exp_org_struct_ver_id <> FND_API.G_MISS_NUM AND l_assignment_rec.search_exp_org_struct_ver_id IS
4957
4958 NOT NULL) OR (p_search_exp_org_hier_name <> FND_API.G_MISS_CHAR AND p_search_exp_org_hier_name IS NOT NULL ) THEN
4959
4960 PA_HR_ORG_UTILS.Check_OrgHierName_Or_Id (p_org_hierarchy_version_id => l_assignment_rec.search_exp_org_struct_ver_id,
4961 p_org_hierarchy_name => p_search_exp_org_hier_name,
4962 p_check_id_flag => PA_STARTUP.G_Check_ID_Flag,
4963 -- Bug: 4537865
4964 --x_org_hierarchy_version_id => l_assignment_rec.search_exp_org_struct_ver_id,
4965 x_org_hierarchy_version_id => t_search_exp_org_struct_ver_id,
4966 -- Bug: 4537865
4967 x_return_status => l_return_status,
4968 x_error_msg_code => l_error_message_code);
4969 -- Bug: 4537865
4970 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
4971 l_assignment_rec.search_exp_org_struct_ver_id := t_search_exp_org_struct_ver_id;
4972 END IF;
4973 -- Bug: 4537865
4974
4975 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4976 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
4977 ,p_msg_name => l_error_message_code );
4978 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4979 ELSE
4980
4981 l_return_status := FND_API.G_MISS_CHAR;
4982 l_error_message_code := FND_API.G_MISS_CHAR;
4983
4984 -- check if the org hierarchy is of the correct type, i.e EXPENDITURES
4985 PA_ORG_UTILS.Check_OrgHierarchy_Type(
4986 p_org_structure_version_id => l_assignment_rec.search_exp_org_struct_ver_id,
4987 p_org_structure_type => 'EXPENDITURES',
4988 x_return_status => l_return_status,
4989 x_error_message_code => l_error_message_code);
4990
4991 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4992 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
4993 ,p_msg_name => l_error_message_code );
4994 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
4995 END IF;
4996 END IF;
4997 l_return_status := FND_API.G_MISS_CHAR;
4998 l_error_message_code := FND_API.G_MISS_CHAR;
4999 END IF;
5000 --
5001 -- Validate Search Start Org
5002 --
5003
5004 IF (l_assignment_rec.search_exp_start_org_id <> FND_API.G_MISS_NUM AND l_assignment_rec.search_exp_start_org_id IS NOT NULL)
5005
5006 OR (p_search_exp_start_org_name <> FND_API.G_MISS_CHAR and p_search_exp_start_org_name IS NOT NULL) THEN
5007 PA_HR_ORG_UTILS.Check_OrgName_Or_Id (p_organization_id => l_assignment_rec.search_exp_start_org_id,
5008 p_organization_name => p_search_exp_start_org_name,
5009 p_check_id_flag => PA_STARTUP.G_Check_ID_Flag,
5010 --x_organization_id => l_assignment_rec.search_exp_start_org_id, * Bug: 4537865
5011 x_organization_id => l_new_search_exp_start_org_id, --Bug: 4537865
5012 x_return_status => l_return_status,
5013 x_error_msg_code => l_error_message_code);
5014 -- Bug: 4537865
5015 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
5016 l_assignment_rec.search_exp_start_org_id := l_new_search_exp_start_org_id;
5017 END IF;
5018 -- Bug: 4537865
5019
5020 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5021 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5022 ,p_msg_name => l_error_message_code );
5023 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5024 ELSE
5025
5026 l_return_status := FND_API.G_MISS_CHAR;
5027 l_error_message_code := FND_API.G_MISS_CHAR;
5028
5029 -- check if the starting org is of the correct type i.e.EXPENDITURES
5030 PA_ORG_UTILS.Check_Org_Type(
5031 p_organization_id => l_assignment_rec.search_exp_start_org_id,
5032 p_org_structure_type => 'EXPENDITURES',
5033 x_return_status => l_return_status,
5034 x_error_message_code => l_error_message_code);
5035
5036 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5037 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5038 ,p_msg_name => l_error_message_code );
5039 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5040 END IF;
5041
5042 END IF;
5043 l_return_status := FND_API.G_MISS_CHAR;
5044 l_error_message_code := FND_API.G_MISS_CHAR;
5045
5046 END IF;
5047 --
5048 -- Validate if Search Start Org is in the Search Org Hierarchy
5049 --
5050
5051 IF (l_assignment_rec.search_exp_start_org_id <> FND_API.G_MISS_NUM AND l_assignment_rec.search_exp_start_org_id IS NOT NULL)
5052
5053 OR (p_search_exp_start_org_name <> FND_API.G_MISS_CHAR and p_search_exp_start_org_name IS NOT NULL) THEN
5054 IF l_assignment_rec.search_exp_start_org_id IS NOT NULL AND l_assignment_rec.search_exp_org_struct_ver_id IS NOT NULL THEN
5055 PA_ORG_UTILS.Check_Org_In_OrgHierarchy(
5056 p_organization_id => l_assignment_rec.search_exp_start_org_id,
5057 p_org_structure_version_id => l_assignment_rec.search_exp_org_struct_ver_id,
5058 p_org_structure_type => 'EXPENDITURES',
5059 x_return_status => l_return_status,
5060 x_error_message_code => l_error_message_code);
5061
5062 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5063 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5064 ,p_msg_name => l_error_message_code );
5065 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5066 END IF;
5067 l_return_status := FND_API.G_MISS_CHAR;
5068 l_error_message_code := FND_API.G_MISS_CHAR;
5069
5070 END IF;
5071
5072 END IF;
5073
5074
5075 -- Validate Staffing Owner
5076 IF (l_assignment_rec.staffing_owner_person_id <> FND_API.G_MISS_NUM AND l_assignment_rec.staffing_owner_person_id IS NOT NULL)
5077
5078 OR (p_staffing_owner_name <> FND_API.G_MISS_CHAR and p_staffing_owner_name IS NOT NULL) THEN
5079 l_temp_staff_owner_person_id := l_assignment_rec.staffing_owner_person_id;
5080 PA_RESOURCE_UTILS.Check_ResourceName_Or_Id (
5081 p_resource_id => l_temp_staff_owner_person_id
5082 ,p_resource_name => p_staffing_owner_name
5083 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
5084 ,p_date => sysdate
5085 ,x_resource_id => l_assignment_rec.staffing_owner_person_id
5086 ,x_resource_type_id => l_resource_type_id
5087 ,x_return_status => l_return_status
5088 ,x_error_message_code => l_error_message_code);
5089
5090 IF l_return_status <> FND_API.G_RET_STS_SUCCESS OR l_resource_type_id <> 101 THEN
5091 PA_UTILS.Add_Message ('PA', 'PA_INV_STAFF_OWNER');
5092 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5093 END IF;
5094
5095 l_return_status := FND_API.G_MISS_CHAR;
5096 l_error_message_code := FND_API.G_MISS_CHAR;
5097
5098 END IF;
5099 --
5100 -- Validate Transfer Price Currency
5101 --
5102
5103 IF l_assignment_rec.tp_currency_override <> FND_API.G_MISS_CHAR AND l_assignment_rec.tp_currency_override IS NOT NULL THEN
5104
5105 PA_PROJECTS_MAINT_UTILS.Check_currency_name_or_code(
5106 p_agreement_currency => l_assignment_rec.tp_currency_override
5107 ,p_agreement_currency_name => null
5108 ,p_check_id_flag => 'Y'
5109 --,x_agreement_currency => l_assignment_rec.tp_currency_override Bug: 4537865
5110 ,x_agreement_currency => l_new_tp_currency_override -- Bug: 4537865
5111 ,x_return_status => l_return_status
5112 ,x_error_msg_code => l_error_message_code);
5113 --Bug:4537865
5114 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
5115 l_assignment_rec.tp_currency_override := l_new_tp_currency_override;
5116 END IF;
5117 --Bug:4537865
5118
5119 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5120 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5121 ,p_msg_name => 'PA_CURR_NOT_VALID');
5122 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5123 END IF;
5124 l_return_status := FND_API.G_MISS_CHAR;
5125 l_error_message_code := FND_API.G_MISS_CHAR;
5126
5127 END IF;
5128 --
5129 -- Validate Bill Rate Currency
5130 --
5131
5132 IF l_assignment_rec.bill_rate_curr_override <> FND_API.G_MISS_CHAR AND l_assignment_rec.bill_rate_curr_override IS NOT NULL THEN
5133
5134 PA_PROJECTS_MAINT_UTILS.Check_currency_name_or_code(
5135 p_agreement_currency => l_assignment_rec.bill_rate_curr_override
5136 ,p_agreement_currency_name => null
5137 ,p_check_id_flag => 'Y'
5138 --,x_agreement_currency => l_assignment_rec.bill_rate_curr_override Bug: 4537865
5139 ,x_agreement_currency => l_new_bill_rate_curr_override --Bug: 4537865
5140 ,x_return_status => l_return_status
5141 ,x_error_msg_code => l_error_message_code);
5142 -- Bug: 4537865
5143 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
5144 l_assignment_rec.bill_rate_curr_override := l_new_bill_rate_curr_override;
5145 END IF;
5146 -- Bug: 4537865
5147
5148 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5149 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5150 ,p_msg_name => 'PA_CURR_NOT_VALID');
5151 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5152 END IF;
5153 l_return_status := FND_API.G_MISS_CHAR;
5154 l_error_message_code := FND_API.G_MISS_CHAR;
5155
5156 END IF;
5157
5158 --
5159 -- Validate Transfer Price Overrides - Transfer Price Rate
5160 --
5161 IF l_assignment_rec.tp_rate_override <> FND_API.G_MISS_NUM AND l_assignment_rec.tp_rate_override IS NOT NULL THEN
5162
5163 IF l_assignment_rec.tp_rate_override < 0 THEN -- Bug 3198183
5164 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5165 ,p_msg_name => 'PA_INVALID_TP_RATE_OVRD');
5166 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5167 END IF;
5168 END IF;
5169
5170 --
5171 -- Validate Bill Rate Overrides - Bill Rate
5172 --
5173 IF l_assignment_rec.bill_rate_override <> FND_API.G_MISS_NUM AND l_assignment_rec.bill_rate_override IS NOT NULL THEN
5174
5175 IF l_assignment_rec.bill_rate_override <= 0 THEN
5176 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5177 ,p_msg_name => 'PA_INVALID_BILL_RATE_OVRD');
5178 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5179 END IF;
5180 END IF;
5181 --
5182 -- Validate Bill Rate Overrides - Markup %
5183 --
5184
5185 IF l_assignment_rec.markup_percent_override <> FND_API.G_MISS_NUM AND l_assignment_rec.markup_percent_override IS NOT NULL
5186
5187 THEN
5188
5189 IF l_assignment_rec.markup_percent_override < 0 THEN
5190
5191 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5192 ,p_msg_name => 'PA_INVALID_MARKUP_PERCENT');
5193 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5194 END IF;
5195
5196 END IF;
5197
5198 /* Bug2590938 Begin */
5199 --
5200 -- Validate Bill Rate Overrides - Discount %
5201 --
5202 IF (l_assignment_rec.discount_percentage <> FND_API.G_MISS_NUM AND l_assignment_rec.discount_percentage IS NOT NULL) THEN
5203
5204 IF (l_assignment_rec.discount_percentage < 0 OR l_assignment_rec.discount_percentage > 100)THEN
5205
5206 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5207 ,p_msg_name => 'PA_INVALID_DISCOUNT_PERCENT');
5208 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5209 END IF;
5210
5211 END IF;
5212
5213
5214 OPEN get_bill_rate_override_flags;
5215 FETCH get_bill_rate_override_flags INTO l_rate_discount_reason_flag, l_br_override_flag, l_br_discount_override_flag;
5216 CLOSE get_bill_rate_override_flags;
5217
5218
5219
5220
5221 -- This message is being populated here instead of java code because of easy code implementation steps
5222 IF (l_assignment_rec.rate_disc_reason_code = FND_API.G_MISS_CHAR OR l_assignment_rec.rate_disc_reason_code is NULL)THEN
5223 IF (l_rate_discount_reason_flag ='Y' AND (l_br_override_flag ='Y' OR l_br_discount_override_flag='Y') AND
5224 ((l_assignment_rec.discount_percentage <> FND_API.G_MISS_NUM AND l_assignment_rec.discount_percentage IS NOT NULL) OR
5225 (l_assignment_rec.discount_percentage <> FND_API.G_MISS_NUM AND l_assignment_rec.discount_percentage IS NOT NULL) OR
5226 (l_assignment_rec.discount_percentage <> FND_API.G_MISS_NUM AND l_assignment_rec.discount_percentage IS NOT NULL))) THEN
5227
5228 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5229 ,p_msg_name => 'PA_RATE_DISC_REASON_REQUIRED');
5230 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5231
5232 END IF;
5233 END IF;
5234 /* Bug2590938 End */
5235
5236 --
5237 -- Validate Bill Rate Overrides - Basis Apply %
5238 --
5239 IF l_assignment_rec.tp_percent_applied_override <> FND_API.G_MISS_NUM AND l_assignment_rec.tp_percent_applied_override IS NOT
5240
5241 NULL THEN
5242
5243 IF l_assignment_rec.tp_percent_applied_override < 0 THEN
5244
5245 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5246 ,p_msg_name => 'PA_INVALID_APPLY_BASIS_PERCENT');
5247 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5248 END IF;
5249
5250 END IF;
5251 --
5252 -- Validate Search Country
5253 --
5254
5255
5256 IF (l_assignment_rec.search_country_code <> FND_API.G_MISS_CHAR AND l_assignment_rec.search_country_code IS NOT NULL) OR
5257
5258 (p_search_country_name <> FND_API.G_MISS_CHAR AND p_search_country_name IS NOT NULL) THEN
5259 PA_LOCATION_UTILS.Check_Country_Name_Or_Code(p_country_code => l_assignment_rec.search_country_code,
5260 p_country_name => p_search_country_name,
5261 p_check_id_flag => PA_STARTUP.G_Check_ID_Flag,
5262 --x_country_code => l_assignment_rec.search_country_code, Bug:4537865
5263 x_country_code => l_new_search_country_code, --Bug: 4537865
5264 x_return_status => l_return_status,
5265 x_error_message_code => l_error_message_code);
5266 -- Bug: 4537865
5267 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
5268 l_assignment_rec.search_country_code := l_new_search_country_code;
5269 END IF;
5270
5271 -- Bug: 4537865
5272
5273 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5274 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5275 ,p_msg_name => l_error_message_code );
5276 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5277 END IF;
5278 l_return_status := FND_API.G_MISS_CHAR;
5279 l_error_message_code := FND_API.G_MISS_CHAR;
5280
5281 END IF;
5282
5283
5284 --
5285 --Validate Subteam
5286 --
5287
5288 IF ((p_project_subteam_id IS NOT NULL AND p_project_subteam_id <> FND_API.G_MISS_NUM) OR
5289 (p_project_subteam_name IS NOT NULL AND p_project_subteam_name <> FND_API.G_MISS_CHAR)) AND
5290 ((l_assignment_rec.project_id IS NOT NULL AND l_assignment_rec.project_id <>FND_API.G_MISS_NUM) OR
5291 (l_assignment_rec.assignment_template_id IS NOT NULL AND l_assignment_rec.assignment_template_id <> FND_API.G_MISS_NUM))
5292
5293 THEN
5294
5295 IF l_assignment_rec.project_id IS NOT NULL AND l_assignment_rec.project_id <>FND_API.G_MISS_NUM THEN
5296
5297 l_object_type := 'PA_PROJECTS';
5298
5299 l_object_id := l_assignment_rec.project_id;
5300
5301 ELSIF l_assignment_rec.assignment_template_id IS NOT NULL AND l_assignment_rec.assignment_template_id <> FND_API.G_MISS_NUM
5302
5303 THEN
5304
5305 l_object_type := 'PA_TEAM_TEMPLATES';
5306
5307 l_object_id := l_assignment_rec.assignment_template_id;
5308
5309 END IF;
5310
5311
5312 l_subteam_id := p_project_subteam_id;
5313
5314 IF (l_subteam_id = FND_API.G_MISS_NUM) THEN
5315 l_subteam_id := NULL;
5316 END IF;
5317
5318 PA_PROJECT_SUBTEAM_UTILS.Check_Subteam_Name_Or_Id( p_subteam_name => p_project_subteam_name
5319 ,p_object_type => l_object_type
5320 ,p_object_id => l_object_id
5321 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
5322 ,x_subteam_id => l_subteam_id --IN/OUT
5323 ,x_return_status => l_return_status
5324 ,x_error_message_code => l_error_message_code );
5325
5326 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5327
5328 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5329 ,p_msg_name => l_error_message_code );
5330 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5331 END IF;
5332 l_return_status := FND_API.G_MISS_CHAR;
5333 l_error_message_code := FND_API.G_MISS_CHAR;
5334 END IF;
5335
5336 --dbms_output.put_line('after check subteam name');
5337 --dbms_output.put_line('subteam id'||l_subteam_id);
5338
5339 --
5340 -- Validate Work Type
5341 -- If work type name is valid and work_type_id is null then returns the work_type_id
5342 --
5343 -- 5130421 : Replaced AND with OR
5344
5345 IF l_assignment_rec.work_type_id <> FND_API.G_MISS_NUM OR
5346 p_work_type_name <> FND_API.G_MISS_CHAR THEN
5347
5348 l_temp_work_type_id := l_assignment_rec.work_type_id;
5349 PA_WORK_TYPE_UTILS.Check_Work_Type_Name_Or_Id( p_work_type_id => l_temp_work_type_id
5350 ,p_name => p_work_type_name
5351 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
5352 ,x_work_type_id => l_assignment_rec.work_type_id
5353 ,x_return_status => l_return_status
5354 ,x_error_message_code => l_error_message_code );
5355 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5356 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5357 ,p_msg_name => l_error_message_code );
5358 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5359 --dbms_output.put_line('work type error');
5360
5361 ELSIF l_assignment_rec.project_id IS NOT NULL AND l_assignment_rec.project_id <> FND_API.G_MISS_NUM THEN
5362 --
5363 --check for indirect project, only non-billable work types if this is NOT
5364 --a template requirement
5365 --
5366 PA_WORK_TYPE_UTILS.CHECK_WORK_TYPE (
5367 P_WORK_TYPE_ID => l_assignment_rec.work_type_id
5368 ,P_PROJECT_ID => l_assignment_rec.project_id
5369 ,P_TASK_ID => NULL
5370 ,X_RETURN_STATUS => l_return_status
5371 ,X_ERROR_MESSAGE_CODE => l_error_message_code);
5372 --dbms_output.put_line('after check work type');
5373
5374
5375 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5376
5377
5378 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5379 ,p_msg_name => l_error_message_code );
5380 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5381 END IF;
5382
5383 END IF;
5384 l_return_status := FND_API.G_MISS_CHAR;
5385 l_error_message_code := FND_API.G_MISS_CHAR;
5386
5387 END IF; -- validate work type
5388 --
5389 --Validate Staffing Priority
5390 --
5391 IF (l_assignment_rec.staffing_priority_code IS NOT NULL AND
5392 l_assignment_rec.staffing_priority_code <> FND_API.G_MISS_CHAR) OR
5393 (p_staffing_priority_name IS NOT NULL AND p_staffing_priority_name <> FND_API.G_MISS_CHAR) THEN
5394
5395 PA_ASSIGNMENT_UTILS.Check_STF_PriorityName_Or_Code (p_staffing_priority_code => l_assignment_rec.staffing_priority_code
5396 ,p_staffing_priority_name => p_staffing_priority_name
5397 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
5398 --,x_staffing_priority_code => l_assignment_rec.staffing_priority_code Bug: 4537865
5399 ,x_staffing_priority_code => l_new_staffing_priority_code -- Bug: 4537865
5400 ,x_return_status => l_return_status
5401 ,x_error_message_code => l_error_message_code);
5402 -- Bug: 4537865
5403 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
5404 l_assignment_rec.staffing_priority_code := l_new_staffing_priority_code;
5405 END IF;
5406 -- Bug: 4537865
5407 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5408 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5409 ,p_msg_name => l_error_message_code );
5410 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5411 END IF;
5412 l_return_status := FND_API.G_MISS_CHAR;
5413 l_error_message_code := FND_API.G_MISS_CHAR;
5414 END IF;
5415
5416 --
5417 --Validate Expenditure Type Class
5418 --
5419
5420
5421 --Call Name to ID validation
5422 --NO FORECASTING ATTRIBUTES FOR TEMPLATE REQUIREMENTS
5423 IF (l_assignment_rec.expenditure_type_class IS NOT NULL) AND
5424 (l_assignment_rec.expenditure_type_class <> FND_API.G_MISS_CHAR) AND
5425 (l_assignment_rec.project_id <> FND_API.G_MISS_NUM AND l_assignment_rec.project_id IS NOT NULL) THEN
5426
5427 l_temp_expenditure_type_class := l_assignment_rec.expenditure_type_class;
5428 PA_EXPENDITURES_UTILS.Check_Exp_Type_Class_Code(
5429 p_sys_link_func => l_temp_expenditure_type_class
5430 ,p_exp_meaning => NULL
5431 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
5432 ,x_sys_link_func => l_assignment_rec.expenditure_type_class
5433 ,x_return_status => l_return_status
5434 ,x_error_message_code=> l_error_message_code) ;
5435 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5436
5437
5438 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5439 ,p_msg_name => l_error_message_code );
5440 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5441 --dbms_output.put_line('expenditure type class error1');
5442
5443 END IF;
5444 l_return_status := FND_API.G_MISS_CHAR;
5445 l_error_message_code := FND_API.G_MISS_CHAR;
5446
5447 --else get expenditure type class using expenditure type
5448 ELSIF (l_assignment_rec.expenditure_type <> FND_API.G_MISS_CHAR
5449 AND l_assignment_rec.expenditure_type IS NOT NULL) THEN
5450 --Get expenditure type class code
5451 --dbms_output.put_line('get expenditure type class ');
5452
5453 OPEN get_expenditure_type_class;
5454 FETCH get_expenditure_type_class INTO l_assignment_rec.expenditure_type_class;
5455
5456 IF get_expenditure_type_class%NOTFOUND THEN
5457 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5458 ,p_msg_name => 'PA_EXPTYPE_INVALID' );
5459 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5460 END IF;
5461 CLOSE get_expenditure_type_class;
5462 END IF;
5463
5464
5465 IF (p_asgn_update_mode <> 'MASS_ONLINE') THEN
5466
5467
5468 --
5469 --Validate Expenditure Type
5470 --
5471 --dbms_output.put_line('start date:'||l_assignment_rec.start_date);
5472 --Call Name to ID validation
5473 --NO FORECASTING ATTRIBUTES FOR TEMPLATE REQUIREMENTS
5474 IF l_assignment_rec.project_id IS NOT NULL AND l_assignment_rec.project_id <>FND_API.G_MISS_NUM AND
5475 l_assignment_rec.expenditure_type <> FND_API.G_MISS_CHAR AND l_assignment_rec.expenditure_type IS NOT NULL THEN
5476
5477 PA_EXPENDITURES_UTILS.Check_Expenditure_Type( p_expenditure_type => l_assignment_rec.expenditure_type
5478 ,p_date => l_assignment_rec.start_date
5479 ,x_valid => l_valid_flag
5480 ,x_return_status => l_return_status
5481 ,x_error_message_code => l_error_message_code);
5482
5483 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5484 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5485 ,p_msg_name => l_error_message_code );
5486 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5487 --dbms_output.put_line('expenditure type error');
5488
5489 END IF;
5490 l_return_status := FND_API.G_MISS_CHAR;
5491 l_error_message_code := FND_API.G_MISS_CHAR;
5492
5493 END IF;
5494 --
5495 --Validate Expenditure Type and Type Class comb
5496 --NO FORECASTING ATTRIBUTES FOR TEMPLATE REQUIREMENTS
5497 IF (l_assignment_rec.project_id <> FND_API.G_MISS_NUM AND l_assignment_rec.project_id IS NOT NULL) AND
5498 l_assignment_rec.expenditure_type <> FND_API.G_MISS_CHAR AND l_assignment_rec.expenditure_type IS NOT NULL AND
5499 l_assignment_Rec.expenditure_type_class <> FND_API.G_MISS_CHAR AND l_assignment_rec.expenditure_type_class IS NOT NULL
5500
5501 THEN
5502 l_valid_flag := 'Y'; -- 5130421
5503 PA_EXPENDITURES_UTILS.Check_Exp_Type_Sys_Link_Combo(
5504 p_exp_type => l_assignment_rec.expenditure_type
5505 ,p_ei_date => l_assignment_rec.start_date
5506 ,p_sys_link_func => l_assignment_Rec.expenditure_type_class
5507 ,x_valid => l_valid_flag
5508 ,x_return_status => l_return_status
5509 ,x_error_message_code=> l_error_message_code);
5510 -- 5130421 : We shd check both l_return_status and also l_valid_flag
5511 -- This is because of a bug in Check_Exp_Type_Sys_Link_Combo code
5512 --IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5513 IF l_valid_flag <> 'Y' THEN
5514 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
5515 ,p_msg_name => 'PA_EXPTYPE_SYSLINK_INVALID' );
5516 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5517 END IF;
5518 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5519 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
5520 ,p_msg_name => l_error_message_code );
5521 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5522 END IF;
5523 l_return_status := FND_API.G_MISS_CHAR;
5524 l_error_message_code := FND_API.G_MISS_CHAR;
5525 END IF;
5526 END IF; -- end of checking not in Mass Online mode, the date related validation should be avoided.
5527 --
5528 -- The following validation only need to be done for Requirement - NOT TEMPLATE REQUIREMENTS
5529 --NO FORECASTING ATTRIBUTES FOR TEMPLATE REQUIREMENTS
5530 IF l_assignment_rec.assignment_type = 'OPEN_ASSIGNMENT' AND
5531 (l_assignment_rec.project_id <> FND_API.G_MISS_NUM AND l_assignment_rec.project_id IS NOT NULL) THEN
5532
5533 --
5534 --Validate Oganization Name/ID
5535 --
5536 --Call validation API
5537 IF (l_assignment_rec.expenditure_organization_id <> FND_API.G_MISS_NUM AND l_assignment_rec.expenditure_organization_id IS NOT
5538
5539 NULL) OR (p_exp_organization_name <> FND_API.G_MISS_CHAR AND p_exp_organization_name IS NOT NULL ) THEN
5540
5541 l_temp_exp_organization_id := l_assignment_rec.expenditure_organization_id;
5542 PA_HR_ORG_UTILS.Check_OrgName_Or_Id (p_organization_id => l_temp_exp_organization_id,
5543 p_organization_name => p_exp_organization_name,
5544 p_check_id_flag => PA_STARTUP.G_Check_ID_Flag,
5545 x_organization_id =>l_assignment_rec.expenditure_organization_id,
5546 x_return_status => l_return_status,
5547 x_error_msg_code =>l_error_message_code );
5548 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5549 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5550 ,p_msg_name => 'PA_EXP_ORG_INVALID');
5551 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5552
5553 ELSIF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
5554 IF (p_asgn_update_mode <> 'MASS_ONLINE') THEN
5555
5556 --check a valid expenditure organization
5557 l_valid_flag := PA_UTILS2.CheckExpOrg (x_org_id => l_assignment_rec.expenditure_organization_id,
5558 x_txn_date => l_assignment_rec.start_date);
5559
5560 IF l_valid_flag <> 'Y' THEN
5561
5562 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5563 ,p_msg_name => 'PA_INVALID_EXP_ORG');
5564 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5565 --dbms_output.put_line('orgn id error2:'||l_valid_flag);
5566
5567 END IF;
5568 END IF; -- end of checking in Mass Update Online Mode, in which case start date related checks are skipped.
5569
5570 END IF;
5571 l_return_status := FND_API.G_MISS_CHAR;
5572 l_error_message_code := FND_API.G_MISS_CHAR;
5573 l_valid_flag := FND_API.G_MISS_CHAR;
5574
5575 END IF; -- Validate Oganization Name/ID
5576 --
5577 --Validate Forecast Job Group Name/ID
5578 --NO FORECASTING ATTRIBUTES FOR TEMPLATE REQUIREMENTS
5579 --Call validation API
5580 IF (l_assignment_rec.fcst_job_group_id <> FND_API.G_MISS_NUM AND l_assignment_rec.fcst_job_group_id IS NOT NULL) OR
5581
5582 (p_fcst_job_group_name <> FND_API.G_MISS_CHAR AND p_fcst_job_group_name IS NOT NULL ) THEN
5583
5584 l_temp_fcst_job_group_id := l_assignment_rec.fcst_job_group_id;
5585 PA_JOB_UTILS.Check_Job_GroupName_Or_Id(
5586 p_job_group_id => l_temp_fcst_job_group_id
5587 ,p_job_group_name => p_fcst_job_group_name
5588 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
5589 ,x_job_group_id => l_assignment_rec.fcst_job_group_id
5590 ,x_return_status => l_return_status
5591 ,x_error_message_code => l_error_message_code );
5592
5593 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5594 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5595 ,p_msg_name => l_error_message_code );
5596 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5597 --dbms_output.put_line('job group error1');
5598
5599 END IF;
5600 l_return_status := FND_API.G_MISS_CHAR;
5601 l_error_message_code := FND_API.G_MISS_CHAR;
5602 END IF;
5603 --
5604 --Validate Forecast Job Name/ID
5605 --
5606 --Call validation API
5607 --dbms_output.put_line('job name'||p_fcst_job_name);
5608 --NO FORECASTING ATTRIBUTES FOR TEMPLATE REQUIREMENTS
5609 IF (l_assignment_rec.fcst_job_id <> FND_API.G_MISS_NUM AND l_assignment_rec.fcst_job_id IS NOT NULL) OR (p_fcst_job_name <>
5610
5611 FND_API.G_MISS_CHAR AND p_fcst_job_name IS NOT NULL ) THEN
5612
5613 l_temp_fcst_job_id := l_assignment_rec.fcst_job_id;
5614 PA_JOB_UTILS.Check_JobName_Or_Id (
5615 p_job_id => l_temp_fcst_job_id
5616 ,p_job_name => p_fcst_job_name
5617 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
5618 ,x_job_id => l_assignment_rec.fcst_job_id
5619 ,x_return_status => l_return_status
5620 ,x_error_message_code => l_error_message_code);
5621
5622 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5623 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5624 ,p_msg_name => l_error_message_code );
5625 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5626 --dbms_output.put_line('job error1');
5627
5628 END IF;
5629 l_return_status := FND_API.G_MISS_CHAR;
5630 l_error_message_code := FND_API.G_MISS_CHAR;
5631 END IF;
5632 --
5633 --Validate Job is part of the Job Group
5634 --NO FORECASTING ATTRIBUTES FOR TEMPLATE REQUIREMENTS
5635 IF l_assignment_rec.fcst_job_id IS NOT NULL AND l_assignment_rec.fcst_job_id <> FND_API.G_MISS_NUM AND
5636 l_assignment_rec.fcst_job_group_id IS NOT NULL AND l_assignment_rec.fcst_job_group_id <> FND_API.G_MISS_NUM THEN
5637
5638 PA_JOB_UTILS.validate_job_relationship (
5639 p_job_id => l_assignment_rec.fcst_job_id
5640 ,p_job_group_id => l_assignment_rec.fcst_job_group_id
5641 ,x_return_status => l_return_status
5642 ,x_error_message_code => l_error_message_code);
5643 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5644 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5645 ,p_msg_name => l_error_message_code );
5646 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5647 --dbms_output.put_line('job relation error1');
5648 END IF;
5649 l_return_status := FND_API.G_MISS_CHAR;
5650 l_error_message_code := FND_API.G_MISS_CHAR;
5651 END IF;
5652
5653 --
5654 --Validate Operating Unit Name/ID
5655 --
5656 --Call Name to ID validation
5657 --NO FORECASTING ATTRIBUTES FOR TEMPLATE REQUIREMENTS
5658
5659 IF (l_assignment_rec.expenditure_org_id <> FND_API.G_MISS_NUM AND l_assignment_rec.expenditure_org_id IS NOT NULL) OR
5660
5661 (p_expenditure_org_name <> FND_API.G_MISS_CHAR AND p_expenditure_org_name IS NOT NULL ) THEN
5662
5663 l_temp_expenditure_org_id := l_assignment_rec.expenditure_org_id;
5664 PA_HR_ORG_UTILS.Check_OrgName_Or_Id (p_organization_id => l_temp_expenditure_org_id,
5665 p_organization_name => p_expenditure_org_name,
5666 p_check_id_flag => PA_STARTUP.G_Check_ID_Flag,
5667 x_organization_id =>l_assignment_rec.expenditure_org_id,
5668 x_return_status => l_return_status,
5669 x_error_msg_code =>l_error_message_code );
5670
5671 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5672 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5673 ,p_msg_name => 'PA_EXP_OU_INVALID' );
5674 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5675
5676 ELSIF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
5677 l_return_status := FND_API.G_MISS_CHAR;
5678 l_error_message_code := FND_API.G_MISS_CHAR;
5679
5680 --
5681 --Validate a valid Operating Unit
5682 --
5683 pa_hr_update_api.check_exp_OU(p_org_id =>l_assignment_rec.expenditure_org_id
5684 ,x_return_status =>l_return_status
5685 ,x_error_message_code =>l_error_message_code ) ;
5686 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5687 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5688 ,p_msg_name => l_error_message_code );
5689 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5690 --dbms_output.put_line('OU id error1');
5691
5692 END IF;
5693 END IF;
5694 l_return_status := FND_API.G_MISS_CHAR;
5695 l_error_message_code := FND_API.G_MISS_CHAR;
5696 --dbms_output.put_line('after OU check');
5697
5698 END IF; -- Validate Operating Unit Name/ID
5699 END IF; --end of Requirement (NOT TEMPLATE REQUIREMENTS) validations
5700
5701 --
5702 --Validation for Amount Type, no need if Admin Assignment OR TEMPLATE REQUIREMENT
5703 --
5704
5705 IF (l_assignment_rec.fcst_tp_amount_type IS NOT NULL AND l_assignment_rec.fcst_tp_amount_type <>FND_API.G_MISS_CHAR)
5706 AND (l_assignment_rec.project_id <> FND_API.G_MISS_NUM AND l_assignment_rec.project_id IS NOT NULL)
5707 THEN
5708
5709 --Call validation API
5710 l_temp_fcst_tp_amount_type := l_assignment_rec.fcst_tp_amount_type;
5711 PA_FORECAST_ITEMS_UTILS.Check_TPAmountType(
5712 p_tp_amount_type_code => l_temp_fcst_tp_amount_type
5713 ,p_tp_amount_type_desc => NULL
5714 ,p_check_id_flag => PA_STARTUP.G_Check_ID_Flag
5715 ,x_tp_amount_type_code => l_assignment_rec.fcst_tp_amount_type
5716 ,x_tp_amount_type_desc => l_tp_amount_type_desc
5717 ,x_return_status => l_return_status
5718 ,x_msg_count => l_msg_count
5719 ,x_msg_data => l_msg_data);
5720 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5721 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5722 --dbms_output.put_line('TP amount type error1');
5723
5724 END IF;
5725 l_return_status := FND_API.G_MISS_CHAR;
5726
5727 END IF; --end of Amount Type
5728
5729 -- Perform security check for Admin Assignment
5730 -- if this is with in Mass Update Workflow
5731 IF l_assignment_rec.assignment_type='STAFFED_ADMIN_ASSIGNMENT' AND p_resource_id IS NOT NULL THEN
5732
5733 IF p_asgn_update_mode = PA_MASS_ASGMT_TRX.G_MASS_UPDATE_ASGMT_BASIC_INFO OR
5734 p_asgn_update_mode = PA_MASS_ASGMT_TRX.G_MASS_UPDATE_FORECAST_ITEMS THEN
5735
5736 --dbms_output.put_line('check PA_ADM_ASN_CR_AND_DL for Mass Update ');
5737
5738 pa_security_pvt.check_confirm_asmt(p_project_id => l_assignment_rec.project_id,
5739 p_resource_id => p_resource_id,
5740 p_resource_name => null,
5741 p_privilege => 'PA_ADM_ASN_CR_AND_DL',
5742 p_start_date => l_assignment_rec.start_date,
5743 x_ret_code => l_ret_code,
5744 x_return_status => l_return_status,
5745 x_msg_count => l_msg_count,
5746 x_msg_data => l_msg_data);
5747
5748 IF l_ret_code = FND_API.G_FALSE THEN
5749 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5750 ,p_msg_name => 'PA_ADD_ADMIN_ASMT_SECURITY' );
5751 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5752 END IF;
5753 END IF;
5754 IF p_asgn_update_mode = PA_MASS_ASGMT_TRX.G_MASS_UPDATE_FORECAST_ITEMS THEN
5755
5756 --dbms_output.put_line('check PA_ADM_ASN_CR_AND_DL for Mass Update Forecast ');
5757
5758 pa_security_pvt.check_confirm_asmt(p_project_id => l_assignment_rec.project_id,
5759 p_resource_id => p_resource_id,
5760 p_resource_name => null,
5761 p_privilege => 'PA_ADM_ASN_FCST_INFO_ED',
5762 p_start_date => l_assignment_rec.start_date,
5763 x_ret_code => l_ret_code,
5764 x_return_status => l_return_status,
5765 x_msg_count => l_msg_count,
5766 x_msg_data => l_msg_data);
5767
5768 IF l_ret_code = FND_API.G_FALSE THEN
5769 PA_UTILS.Add_Message ( p_app_short_name => 'PA'
5770 ,p_msg_name => 'PA_ADD_ADMIN_ASMT_SECURITY' );
5771 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5772 END IF;
5773 END IF;
5774
5775 END IF;
5776 --dbms_output.put_line('Finish Validation');
5777
5778 --Log Message
5779 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
5780 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Update_Assignment.pvt_update_asgmt'
5781 ,x_msg => 'Calling PVT Update_Assignment'
5782 ,x_log_level => 5);
5783 END IF;
5784
5785 --For non Template Requirement, reset start_date to default values.
5786 /* Added extra condition for GSI PJR enhancement. bug # 7693634*/
5787 IF (l_assignment_rec.project_id <> FND_API.G_MISS_NUM AND l_assignment_rec.project_id IS NOT NULL AND p_context <> 'SS_UPDATE_ASSIGN') THEN
5788 l_assignment_rec.start_date := FND_API.G_MISS_DATE;
5789 END IF;
5790
5791 IF p_asgn_update_mode <> 'MASS_ONLINE' THEN
5792
5793
5794 --dbms_output.put_line('Calling PVTB Update_Assignment');
5795 PA_ASSIGNMENTS_PVT.Update_Assignment
5796 ( p_assignment_rec => l_assignment_rec
5797 ,p_project_subteam_id => l_subteam_id
5798 ,p_project_subteam_party_id=> p_project_subteam_party_id
5799 ,p_location_city => p_location_city
5800 ,p_location_region => p_location_region
5801 ,p_location_country_code => l_location_country_code
5802 ,p_commit => p_commit
5803 ,p_validate_only => p_validate_only
5804 ,x_return_status => l_return_status
5805 );
5806
5807
5808 END IF;
5809
5810 END IF; -- end of checking if record version and wf pending is OK.
5811
5812 END IF; -- end of checking if trying to change schedule status for non template requirement.
5813
5814 --
5815 -- IF the number of messaages is 1 then fetch the message code from the stack and return its text
5816 --
5817 x_msg_count := FND_MSG_PUB.Count_Msg;
5818 IF x_msg_count = 1 THEN
5819 pa_interface_utils_pub.get_messages ( p_encoded => FND_API.G_TRUE
5820 ,p_msg_index => 1
5821 ,p_data => x_msg_data
5822 ,p_msg_index_out => l_msg_index_out
5823 );
5824 END IF;
5825
5826 -- Reset the error stack when returning to the calling program
5827 PA_DEBUG.Reset_Err_Stack;
5828
5829 -- If g_error_exists is TRUE then set the x_return_status to 'E'
5830
5831 --IF PA_ASSIGNMENTS_PUB.g_error_exists = FND_API.G_TRUE THEN
5832 IF x_msg_count > 0 THEN
5833
5834 x_return_status := FND_API.G_RET_STS_ERROR;
5835
5836 END IF;
5837
5838 IF p_commit = FND_API.G_TRUE THEN
5839 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
5840 COMMIT;
5841 ELSE
5842 ROLLBACK TO ASG_PUB_UPDATE_ASSIGNMENT;
5843 END IF;
5844 END IF;
5845
5846 --
5847 -- Put any message text from message stack into the Message ARRAY
5848 --
5849 EXCEPTION
5850 WHEN OTHERS THEN
5851
5852 IF p_commit = FND_API.G_TRUE THEN
5853 ROLLBACK TO ASG_PUB_UPDATE_ASSIGNMENT;
5854 END IF;
5855 -- Set the excetption Message and the stack
5856 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Update_Assignment'
5857 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
5858 --
5859 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5860 RAISE; -- This is optional depending on the needs
5861 --
5862 END Update_Assignment;
5863
5864
5865
5866 PROCEDURE Delete_Assignment
5867 ( p_assignment_row_id IN ROWID := NULL
5868 ,p_assignment_id IN pa_project_assignments.assignment_id%TYPE := FND_API.G_MISS_NUM
5869 ,p_record_version_number IN NUMBER := FND_API.G_MISS_NUM
5870 ,p_assignment_type IN pa_project_assignments.assignment_type%TYPE := FND_API.G_MISS_CHAR
5871 ,p_assignment_number IN pa_project_assignments.assignment_number%TYPE := FND_API.G_MISS_NUM
5872 ,p_calling_module IN VARCHAR2 := FND_API.G_MISS_CHAR
5873 ,p_api_version IN NUMBER := 1.0 /* Bug 1851096 */
5874 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
5875 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
5876 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
5877 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
5878 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5879 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
5880 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
5881 ) IS
5882
5883 l_project_party_id NUMBER;
5884 l_msg_index_out NUMBER;
5885 l_assignment_row_id ROWID;
5886 l_assignment_id NUMBER;
5887 l_workflow_in_progress_flag pa_team_templates.workflow_in_progress_flag%TYPE;
5888 l_project_id pa_project_assignments.project_id%TYPE;
5889 l_mass_wf_in_progress_flag pa_project_assignments.mass_wf_in_progress_flag%TYPE;
5890 l_return_status VARCHAR2(1);
5891
5892 CURSOR check_record_version IS
5893 SELECT ROWID, project_party_id,project_id
5894 FROM pa_project_assignments
5895 WHERE assignment_id = p_assignment_id
5896 AND record_version_number = p_record_version_number;
5897
5898 CURSOR check_source_assignment IS
5899 SELECT assignment_id
5900 FROM pa_project_assignments
5901 WHERE source_assignment_id = p_assignment_id;
5902
5903 CURSOR check_team_template_wf IS
5904 SELECT tt.workflow_in_progress_flag
5905 FROM pa_project_assignments asgn,
5906 pa_team_templates tt
5907 WHERE asgn.assignment_id = p_assignment_id
5908 AND asgn.template_flag = 'Y'
5909 AND tt.team_template_id = asgn.assignment_template_id;
5910
5911 CURSOR check_project_assignment_wf IS
5912 SELECT mass_wf_in_progress_flag
5913 FROM pa_project_assignments
5914 WHERE assignment_id = p_assignment_id;
5915
5916 BEGIN
5917
5918 -- Initialize the Error Stack
5919 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Delete_Assignment');
5920 --dbms_output.put_line('PA_ASSIGNMENTS_PUB.delete assignment');
5921
5922 --Log Message
5923 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
5924 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Delete_Assignment.begin'
5925 ,x_msg => 'Beginning of Delete_Assignment'
5926 ,x_log_level => 5);
5927 END IF;
5928
5929 -- Initialize the error flag
5930 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_FALSE;
5931 x_return_status := FND_API.G_RET_STS_SUCCESS;
5932
5933 -- Issue API savepoint if the transaction is to be committed
5934 IF p_commit = FND_API.G_TRUE THEN
5935 SAVEPOINT ASG_PUB_DELETE_ASSIGNMENT;
5936 END IF;
5937
5938 --Clear the global PL/SQL message table
5939 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
5940 FND_MSG_PUB.initialize;
5941 END IF;
5942
5943
5944 --check if this assignment is the source of another assignment.
5945 --if so, it can't be deleted.
5946 OPEN check_source_assignment;
5947 FETCH check_source_assignment INTO l_assignment_id;
5948 CLOSE check_source_assignment;
5949 IF l_assignment_id IS NOT NULL THEN
5950
5951 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5952 ,p_msg_name => 'PA_ASGN_AS_SOURCE_ASGN');
5953 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5954 x_return_status := FND_API.G_RET_STS_ERROR;
5955
5956 ELSE
5957
5958 --check the record version number
5959 OPEN check_record_version;
5960 FETCH check_record_version INTO l_assignment_row_id, l_project_party_id, l_project_id;
5961 CLOSE check_record_version;
5962 IF l_assignment_row_id IS NULL THEN
5963 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5964 ,p_msg_name => 'PA_XC_RECORD_CHANGED');
5965 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5966 x_return_status := FND_API.G_RET_STS_ERROR;
5967
5968 ELSE
5969
5970 --check if workflow is in progress for the parent team template.
5971 --if so, it can't be deleted.
5972 --if this is not a template requirement the cursor won't return any
5973 --rows and the delete API will continue.
5974 --we don't know if this is a template requirement (no project_id in the API) prior
5975 --to opening the cursor.
5976 OPEN check_team_template_wf;
5977 FETCH check_team_template_wf INTO l_workflow_in_progress_flag;
5978 CLOSE check_team_template_wf;
5979 IF l_workflow_in_progress_flag = 'Y' THEN
5980 PA_UTILS.Add_Message( p_app_short_name => 'PA'
5981 ,p_msg_name => 'PA_NO_REQ_WF');
5982 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5983 x_return_status := FND_API.G_RET_STS_ERROR;
5984
5985 ELSE
5986
5987 -- check that mass workflow for updating assignment is not in progress.
5988 -- if mass workflow is in progress, cannot delete the assignment
5989 OPEN check_project_assignment_wf;
5990 FETCH check_project_assignment_wf INTO l_mass_wf_in_progress_flag;
5991 CLOSE check_project_assignment_wf;
5992
5993 --dbms_output.put_line('mass_wf_in_progress_flag='||l_mass_wf_in_progress_flag);
5994
5995 IF l_mass_wf_in_progress_flag = 'Y' THEN
5996 PA_ASSIGNMENT_UTILS.Add_Message( p_app_short_name => 'PA'
5997 ,p_msg_name => 'PA_ASSIGNMENT_WF');
5998 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
5999 x_return_status := FND_API.G_RET_STS_ERROR;
6000
6001 ELSE
6002
6003 --IF assignment is pending approval, abort the approval process
6004 IF PA_ASGMT_WFSTD.is_approval_pending(p_assignment_id => p_assignment_id) = 'Y' THEN
6005 PA_ASSIGNMENT_APPROVAL_PVT.Abort_Assignment_Approval(p_assignment_id => p_assignment_id
6006 ,p_project_id => l_project_id
6007 ,x_return_status => l_return_status);
6008 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
6009 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
6010 END IF;
6011 END IF;
6012
6013 --Log Message
6014 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
6015 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Delete_Assignment.pvt_delete_asgmt'
6016 ,x_msg => 'Calling PVT Delete_Assignment'
6017 ,x_log_level => 5);
6018 END IF;
6019
6020 -- Call the private API
6021 PA_ASSIGNMENTS_PVT.Delete_Assignment
6022 ( p_assignment_row_id => l_assignment_row_id
6023 ,p_assignment_id => p_assignment_id
6024 ,p_assignment_type => p_assignment_type
6025 ,p_record_version_number => p_record_version_number
6026 ,p_assignment_number => p_assignment_number
6027 ,p_project_party_id => l_project_party_id
6028 ,p_calling_module => p_calling_module
6029 ,p_commit => p_commit
6030 ,p_validate_only => p_validate_only
6031 ,x_return_status => l_return_status
6032 );
6033
6034 END IF;
6035 END IF;
6036 END IF;
6037 END IF;
6038 --
6039 -- IF the number of messaages is 1 then fetch the message code from the stack and return its text
6040 --
6041 x_msg_count := FND_MSG_PUB.Count_Msg;
6042 IF x_msg_count = 1 THEN
6043 pa_interface_utils_pub.get_messages ( p_encoded => FND_API.G_TRUE
6044 ,p_msg_index => 1
6045 ,p_data => x_msg_data
6046 ,p_msg_index_out => l_msg_index_out
6047 );
6048 END IF;
6049
6050 -- Reset the error stack when returning to the calling program
6051 PA_DEBUG.Reset_Err_Stack;
6052
6053 -- If any errors exist then set the x_return_status to 'E'
6054
6055 IF x_msg_count > 0 THEN
6056
6057 x_return_status := FND_API.G_RET_STS_ERROR;
6058
6059 END IF;
6060
6061 -- Reset the error stack when returning to the calling program
6062 PA_DEBUG.Reset_Err_Stack;
6063
6064 IF p_commit = FND_API.G_TRUE THEN
6065 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
6066 COMMIT;
6067 ELSE
6068 ROLLBACK TO ASG_PUB_DELETE_ASSIGNMENT;
6069 END IF;
6070 END IF;
6071
6072 -- Put any message text from message stack into the Message ARRAY
6073 --
6074 EXCEPTION
6075 WHEN OTHERS THEN
6076 IF p_commit = FND_API.G_TRUE THEN
6077 ROLLBACK TO ASG_PUB_DELETE_ASSIGNMENT;
6078 END IF;
6079 -- Set the excetption Message and the stack
6080 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Delete_Assignment'
6081 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
6082 --
6083 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6084 RAISE; -- This is optional depending on the needs
6085 --
6086 END Delete_Assignment;
6087
6088
6089 PROCEDURE Copy_Team_Role
6090 (p_assignment_id IN pa_project_assignments.assignment_id%TYPE
6091 ,p_asgn_creation_mode IN VARCHAR2 := 'COPY'
6092 ,p_api_version IN NUMBER := 1.0 /* Bug 1851096 */
6093 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
6094 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6095 ,p_validate_only IN VARCHAR2 := FND_API.G_FALSE
6096 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
6097 ,x_new_assignment_id OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6098 ,x_assignment_number OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6099 ,x_assignment_row_id OUT NOCOPY ROWID --File.Sql.39 bug 4440895
6100 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6101 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6102 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6103 )
6104 IS
6105
6106 l_return_status VARCHAR2(1);
6107 l_msg_data VARCHAR2(2000);
6108 l_msg_count NUMBER;
6109 l_msg_index_out NUMBER;
6110 l_assignment_rec assignment_rec_type;
6111 l_resource_id pa_resources_denorm.resource_id%TYPE;
6112 l_start_req_status_code pa_project_statuses.project_status_code%TYPE;
6113 l_adv_action_set_id pa_action_sets.action_set_id%TYPE;
6114
6115 BEGIN
6116
6117 --dbms_output.put_line('PA_ASSIGNMENTS_PUB.Copy_Team_Role');
6118
6119 -- Initialize the Error Stack
6120 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Copy_Team_Role');
6121 --dbms_output.put_line('PA_ASSIGNMENTS_PUB.Copy_Team_Role');
6122
6123 --Log Message
6124 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
6125 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Copy_Team_Role'
6126 ,x_msg => 'Beginning of Copy_Team_Role'
6127 ,x_log_level => 5);
6128 END IF;
6129
6130 --Clear the global PL/SQL message table
6131 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
6132 FND_MSG_PUB.initialize;
6133 END IF;
6134
6135 --Initialize return status to success
6136 x_return_status := FND_API.G_RET_STS_SUCCESS;
6137
6138 -- bill rate and transfer price override values are not copied
6139
6140 SELECT pa.assignment_name
6141 ,'OPEN_ASSIGNMENT'
6142 ,pa.assignment_type
6143 ,pa.staffing_priority_code
6144 ,pa.project_id
6145 ,pa.project_role_id
6146 ,pa.description
6147 ,pa.start_date
6148 ,pa.end_date
6149 ,pa.status_code
6150 ,pa.assignment_effort
6151 ,pa.extension_possible
6152 ,pa.min_resource_job_level
6153 ,pa.max_resource_job_level
6154 ,pa.additional_information
6155 ,pa.location_id
6156 ,pa.work_type_id
6157 ,pa.revenue_currency_code
6158 ,pa.revenue_bill_rate
6159 ,pa.markup_percent
6160 ,pa.expense_owner
6161 ,pa.expense_limit
6162 ,pa.expense_limit_currency_code
6163 ,pa.fcst_tp_amount_type
6164 ,pa.fcst_job_id
6165 ,pa.fcst_job_group_id
6166 ,pa.expenditure_org_id
6167 ,pa.expenditure_organization_id
6168 ,pa.expenditure_type_class
6169 ,pa.expenditure_type
6170 ,pa.calendar_type
6171 ,pa.calendar_id
6172 ,pa.competence_match_weighting
6173 ,pa.availability_match_weighting
6174 ,pa.job_level_match_weighting
6175 ,pa.search_min_availability
6176 ,pa.search_country_code
6177 ,pa.search_exp_org_struct_ver_id
6178 ,pa.search_exp_start_org_id
6179 ,pa.search_min_candidate_score
6180 ,pa.enable_auto_cand_nom_flag
6181 ,pa.staffing_owner_person_id
6182 ,pa.attribute_category
6183 ,pa.attribute1
6184 ,pa.attribute2
6185 ,pa.attribute3
6186 ,pa.attribute4
6187 ,pa.attribute5
6188 ,pa.attribute6
6189 ,pa.attribute7
6190 ,pa.attribute8
6191 ,pa.attribute9
6192 ,pa.attribute10
6193 ,pa.attribute11
6194 ,pa.attribute12
6195 ,pa.attribute13
6196 ,pa.attribute14
6197 ,pa.attribute15
6198 ,asets.action_set_id
6199 ,pa.bill_rate_override
6200 ,pa.bill_rate_curr_override
6201 ,pa.markup_percent_override
6202 ,pa.tp_rate_override
6203 ,pa.tp_currency_override
6204 ,pa.tp_calc_base_code_override
6205 ,pa.tp_percent_applied_override
6206 ,pa.resource_list_member_id -- FP.M Development
6207 INTO
6208 l_assignment_rec.assignment_name
6209 ,l_assignment_rec.assignment_type
6210 ,l_assignment_rec.source_assignment_type
6211 ,l_assignment_rec.staffing_priority_code
6212 ,l_assignment_rec.project_id
6213 ,l_assignment_rec.project_role_id
6214 ,l_assignment_rec.description
6215 ,l_assignment_rec.start_date
6216 ,l_assignment_rec.end_date
6217 ,l_assignment_rec.status_code
6218 ,l_assignment_rec.assignment_effort
6219 ,l_assignment_rec.extension_possible
6220 ,l_assignment_rec.min_resource_job_level
6221 ,l_assignment_rec.max_resource_job_level
6222 ,l_assignment_rec.additional_information
6223 ,l_assignment_rec.location_id
6224 ,l_assignment_rec.work_type_id
6225 ,l_assignment_rec.revenue_currency_code
6226 ,l_assignment_rec.revenue_bill_rate
6227 ,l_assignment_rec.markup_percent
6228 ,l_assignment_rec.expense_owner
6229 ,l_assignment_rec.expense_limit
6230 ,l_assignment_rec.expense_limit_currency_code
6231 ,l_assignment_rec.fcst_tp_amount_type
6232 ,l_assignment_rec.fcst_job_id
6233 ,l_assignment_rec.fcst_job_group_id
6234 ,l_assignment_rec.expenditure_org_id
6235 ,l_assignment_rec.expenditure_organization_id
6236 ,l_assignment_rec.expenditure_type_class
6237 ,l_assignment_rec.expenditure_type
6238 ,l_assignment_rec.calendar_type
6239 ,l_assignment_rec.calendar_id
6240 ,l_assignment_rec.comp_match_weighting
6241 ,l_assignment_rec.avail_match_weighting
6242 ,l_assignment_rec.job_level_match_weighting
6243 ,l_assignment_rec.search_min_availability
6244 ,l_assignment_rec.search_country_code
6245 ,l_assignment_rec.search_exp_org_struct_ver_id
6246 ,l_assignment_rec.search_exp_start_org_id
6247 ,l_assignment_rec.search_min_candidate_score
6248 ,l_assignment_rec.enable_auto_cand_nom_flag
6249 ,l_assignment_rec.staffing_owner_person_id
6250 ,l_assignment_rec.attribute_category
6251 ,l_assignment_rec.attribute1
6252 ,l_assignment_rec.attribute2
6253 ,l_assignment_rec.attribute3
6254 ,l_assignment_rec.attribute4
6255 ,l_assignment_rec.attribute5
6256 ,l_assignment_rec.attribute6
6257 ,l_assignment_rec.attribute7
6258 ,l_assignment_rec.attribute8
6259 ,l_assignment_rec.attribute9
6260 ,l_assignment_rec.attribute10
6261 ,l_assignment_rec.attribute11
6262 ,l_assignment_rec.attribute12
6263 ,l_assignment_rec.attribute13
6264 ,l_assignment_rec.attribute14
6265 ,l_assignment_rec.attribute15
6266 ,l_adv_action_set_id
6267 ,l_assignment_rec.bill_rate_override
6268 ,l_assignment_rec.bill_rate_curr_override
6269 ,l_assignment_rec.markup_percent_override
6270 ,l_assignment_rec.tp_rate_override
6271 ,l_assignment_rec.tp_currency_override
6272 ,l_assignment_rec.tp_calc_base_code_override
6273 ,l_assignment_rec.tp_percent_applied_override
6274 ,l_assignment_rec.resource_list_member_id
6275 FROM pa_project_assignments pa,
6276 pa_action_sets asets
6277 WHERE pa.assignment_id = p_assignment_id
6278 AND asets.object_id(+) = pa.assignment_id
6279 AND asets.object_type(+) = 'OPEN_ASSIGNMENT'
6280 AND asets.action_set_type_code(+) = 'ADVERTISEMENT'
6281 AND asets.status_code(+) <> 'DELETED';
6282
6283
6284 -- p_asgn_creation_mode = 'FULL' means it's cancel team role flow where we copy
6285 -- the planning resource of the once filled requirment to the new requirement
6286 IF p_asgn_creation_mode <> 'FULL' THEN
6287 l_assignment_rec.resource_list_member_id := NULL;
6288 END IF;
6289
6290 l_assignment_rec.source_assignment_id := p_assignment_id;
6291
6292 /* This is added because in Cancel_Assignment, this API is called to copy a new requirement
6293 from the old requirement with mode = 'FULL', but the source_assignment_id should not be NULLed out to
6294 keep link between the two records
6295 */
6296 IF p_asgn_creation_mode = 'FULL' THEN
6297
6298 FND_PROFILE.Get('PA_START_OPEN_ASGMT_STATUS',l_assignment_rec.status_code);
6299
6300 IF l_assignment_rec.status_code IS NULL THEN
6301
6302 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
6303 ,p_msg_name => 'PA_START_STATUS_NOT_DEFINED');
6304 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
6305
6306 END IF;
6307 END IF;
6308
6309 IF l_assignment_rec.calendar_type = 'RESOURCE' THEN
6310 l_assignment_rec.calendar_type := 'PROJECT';
6311 SELECT calendar_id INTO l_assignment_rec.calendar_id
6312 FROM pa_projects_all
6313 WHERE project_id = l_assignment_rec.project_id;
6314 END IF;
6315
6316 -- Create the requirement
6317 --Log Message
6318 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
6319 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Copy_Team_Role'
6320 ,x_msg => 'Calling create assignment'
6321 ,x_log_level => 5);
6322 END IF;
6323
6324 --dbms_output.put_line('calling PA_ASSIGNMENTS_PUB.Create_Assignment');
6325 --dbms_output.put_line('action set id = '|| l_adv_action_set_id );
6326 PA_ASSIGNMENTS_PUB.Create_Assignment
6327 ( p_assignment_rec => l_assignment_rec
6328 ,p_asgn_creation_mode => p_asgn_creation_mode
6329 ,p_adv_action_set_id => l_adv_action_set_id
6330 ,p_commit => p_commit
6331 ,p_validate_only => p_validate_only
6332 ,p_max_msg_count => p_max_msg_count
6333 ,p_init_msg_list => FND_API.G_TRUE
6334 ,x_new_assignment_id => x_new_assignment_id
6335 ,x_assignment_number => x_assignment_number
6336 ,x_assignment_row_id => x_assignment_row_id
6337 ,x_resource_id => l_resource_id
6338 ,x_return_status => l_return_status
6339 ,x_msg_count => l_msg_count
6340 ,x_msg_data => l_msg_data
6341 );
6342
6343 --
6344 -- IF the number of messaages is 1 then fetch the message code from the stack and return its text
6345 --
6346 x_msg_count := FND_MSG_PUB.Count_Msg;
6347 IF x_msg_count = 1 THEN
6348 pa_interface_utils_pub.get_messages ( p_encoded => FND_API.G_TRUE
6349 ,p_msg_index => 1
6350 ,p_data => x_msg_data
6351 ,p_msg_index_out => l_msg_index_out
6352 );
6353 END IF;
6354
6355 -- Reset the error stack when returning to the calling program
6356 PA_DEBUG.Reset_Err_Stack;
6357
6358 -- If any errors exist then set the x_return_status to 'E'
6359
6360 IF x_msg_count > 0 THEN
6361
6362 x_return_status := FND_API.G_RET_STS_ERROR;
6363
6364 END IF;
6365
6366 EXCEPTION
6367 WHEN OTHERS THEN
6368 -- Set the excetption Message and the stack
6369 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Copy_Team_Role'
6370 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
6371 --
6372 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6373 RAISE;
6374
6375 END Copy_Team_Role;
6376
6377
6378 PROCEDURE Mass_Exec_Create_Assignments
6379 ( p_asgn_creation_mode IN VARCHAR2
6380 ,p_unfilled_assignment_status IN pa_project_assignments.status_code%TYPE := FND_API.G_MISS_CHAR
6381 ,p_assignment_name IN pa_project_assignments.assignment_name%TYPE := FND_API.G_MISS_CHAR
6382 ,p_assignment_type IN pa_project_assignments.assignment_type%TYPE := FND_API.G_MISS_CHAR
6383 ,p_multiple_status_flag IN pa_project_assignments.multiple_status_flag%TYPE := FND_API.G_MISS_CHAR
6384 ,p_status_code IN pa_project_assignments.status_code%TYPE := FND_API.G_MISS_CHAR
6385 ,p_staffing_priority_code IN pa_project_assignments.staffing_priority_code%TYPE := FND_API.G_MISS_CHAR
6386 ,p_project_id IN pa_project_assignments.project_id%TYPE := FND_API.G_MISS_NUM
6387 ,p_assignment_template_id IN pa_project_assignments.assignment_template_id%TYPE := FND_API.G_MISS_NUM
6388 ,p_project_role_id IN pa_project_assignments.project_role_id%TYPE := FND_API.G_MISS_NUM
6389 ,p_role_list_id IN pa_role_lists.role_list_id%TYPE := FND_API.G_MISS_NUM
6390 ,p_resource_id_tbl IN system.pa_num_tbl_type := NULL
6391 ,p_resource_name_tbl IN system.pa_varchar2_240_tbl_type := NULL
6392 ,p_resource_source_id_tbl IN system.pa_num_tbl_type := NULL
6393 ,p_project_subteam_id IN pa_project_subteams.project_subteam_id%TYPE := FND_API.G_MISS_NUM
6394 ,p_description IN pa_project_assignments.description%TYPE := FND_API.G_MISS_CHAR
6395 ,p_start_date IN pa_project_assignments.start_date%TYPE := FND_API.G_MISS_DATE
6396 ,p_end_date IN pa_project_assignments.end_date%TYPE := FND_API.G_MISS_DATE
6397 ,p_assignment_effort IN pa_project_assignments.assignment_effort%TYPE := FND_API.G_MISS_NUM
6398 ,p_extension_possible IN pa_project_assignments.extension_possible%TYPE := FND_API.G_MISS_CHAR
6399 ,p_source_assignment_id IN pa_project_assignments.source_assignment_id%TYPE := FND_API.G_MISS_NUM
6400 ,p_min_resource_job_level IN pa_project_assignments.min_resource_job_level%TYPE := FND_API.G_MISS_NUM
6401 ,p_max_resource_job_level IN pa_project_assignments.max_resource_job_level%TYPE := FND_API.G_MISS_NUM
6402 ,p_additional_information IN pa_project_assignments.additional_information%TYPE := FND_API.G_MISS_CHAR
6403 ,p_location_id IN pa_project_assignments.location_id%TYPE := FND_API.G_MISS_NUM
6404 ,p_work_type_id IN pa_project_assignments.work_type_id%TYPE := FND_API.G_MISS_NUM
6405 ,p_revenue_currency_code IN pa_project_assignments.revenue_currency_code%TYPE := FND_API.G_MISS_CHAR
6406 ,p_revenue_bill_rate IN pa_project_assignments.revenue_bill_rate%TYPE := FND_API.G_MISS_NUM
6407 ,p_markup_percent IN pa_project_assignments.markup_percent%TYPE := FND_API.G_MISS_NUM
6408 ,p_expense_owner IN pa_project_assignments.expense_owner%TYPE := FND_API.G_MISS_CHAR
6409 ,p_expense_limit IN pa_project_assignments.expense_limit%TYPE := FND_API.G_MISS_NUM
6410 ,p_expense_limit_currency_code IN pa_project_assignments.expense_limit_currency_code%TYPE := FND_API.G_MISS_CHAR
6411 ,p_fcst_tp_amount_type IN pa_project_assignments.fcst_tp_amount_type%TYPE := FND_API.G_MISS_CHAR
6412 ,p_fcst_job_id IN pa_project_assignments.fcst_job_id%TYPE := FND_API.G_MISS_NUM
6413 ,p_fcst_job_group_id IN pa_project_assignments.fcst_job_group_id%TYPE := FND_API.G_MISS_NUM
6414 ,p_expenditure_org_id IN pa_project_assignments.expenditure_org_id%TYPE := FND_API.G_MISS_NUM
6415 ,p_expenditure_organization_id IN pa_project_assignments.expenditure_organization_id%TYPE := FND_API.G_MISS_NUM
6416 ,p_expenditure_type_class IN pa_project_assignments.expenditure_type_class%TYPE := FND_API.G_MISS_CHAR
6417 ,p_expenditure_type IN pa_project_assignments.expenditure_type%TYPE := FND_API.G_MISS_CHAR
6418 ,p_calendar_type IN pa_project_assignments.calendar_type%TYPE := FND_API.G_MISS_CHAR
6419 ,p_calendar_id IN pa_project_assignments.calendar_id%TYPE := FND_API.G_MISS_NUM
6420 ,p_resource_calendar_percent IN pa_project_assignments.resource_calendar_percent%TYPE := FND_API.G_MISS_NUM
6421 ,p_project_name IN pa_projects_all.name%TYPE := FND_API.G_MISS_CHAR
6422 ,p_project_number IN pa_projects_all.segment1%TYPE := FND_API.G_MISS_CHAR
6423 ,p_project_subteam_name IN pa_project_subteams.name%TYPE := FND_API.G_MISS_CHAR
6424 ,p_project_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
6425 ,p_staffing_priority_name IN pa_lookups.meaning%TYPE := FND_API.G_MISS_CHAR
6426 ,p_project_role_name IN pa_project_role_types.meaning%TYPE := FND_API.G_MISS_CHAR
6427 ,p_location_city IN pa_locations.city%TYPE := FND_API.G_MISS_CHAR
6428 ,p_location_region IN pa_locations.region%TYPE := FND_API.G_MISS_CHAR
6429 ,p_location_country_name IN fnd_territories_tl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
6430 ,p_location_country_code IN pa_locations.country_code%TYPE := FND_API.G_MISS_CHAR
6431 ,p_calendar_name IN jtf_calendars_tl.calendar_name%TYPE := FND_API.G_MISS_CHAR
6432 ,p_work_type_name IN pa_work_types_vl.name%TYPE := FND_API.G_MISS_CHAR
6433 ,p_fcst_job_name IN per_jobs.name%TYPE := FND_API.G_MISS_CHAR
6434 ,p_fcst_job_group_name IN per_job_groups.displayed_name%TYPE := FND_API.G_MISS_CHAR
6435 ,p_expenditure_org_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
6436 ,p_exp_organization_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
6437 ,p_attribute_category IN pa_project_assignments.attribute_category%TYPE := FND_API.G_MISS_CHAR
6438 ,p_attribute1 IN pa_project_assignments.attribute1%TYPE := FND_API.G_MISS_CHAR
6439 ,p_attribute2 IN pa_project_assignments.attribute2%TYPE := FND_API.G_MISS_CHAR
6440 ,p_attribute3 IN pa_project_assignments.attribute3%TYPE := FND_API.G_MISS_CHAR
6441 ,p_attribute4 IN pa_project_assignments.attribute4%TYPE := FND_API.G_MISS_CHAR
6442 ,p_attribute5 IN pa_project_assignments.attribute5%TYPE := FND_API.G_MISS_CHAR
6443 ,p_attribute6 IN pa_project_assignments.attribute6%TYPE := FND_API.G_MISS_CHAR
6444 ,p_attribute7 IN pa_project_assignments.attribute7%TYPE := FND_API.G_MISS_CHAR
6445 ,p_attribute8 IN pa_project_assignments.attribute8%TYPE := FND_API.G_MISS_CHAR
6446 ,p_attribute9 IN pa_project_assignments.attribute9%TYPE := FND_API.G_MISS_CHAR
6447 ,p_attribute10 IN pa_project_assignments.attribute10%TYPE := FND_API.G_MISS_CHAR
6448 ,p_attribute11 IN pa_project_assignments.attribute11%TYPE := FND_API.G_MISS_CHAR
6449 ,p_attribute12 IN pa_project_assignments.attribute12%TYPE := FND_API.G_MISS_CHAR
6450 ,p_attribute13 IN pa_project_assignments.attribute13%TYPE := FND_API.G_MISS_CHAR
6451 ,p_attribute14 IN pa_project_assignments.attribute14%TYPE := FND_API.G_MISS_CHAR
6452 ,p_attribute15 IN pa_project_assignments.attribute15%TYPE := FND_API.G_MISS_CHAR
6453 ,p_number_of_requirements IN NUMBER := 1
6454 ,p_api_version IN NUMBER := 1.0
6455 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
6456 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6457 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
6458 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
6459 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6460 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6461 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6462 )
6463 IS
6464
6465 cursor csr_get_tp_amt_type (p_asg_id NUMBER) IS
6466 SELECT fcst_tp_amount_type
6467 FROM pa_project_assignments -- 5078700 changed from pa_project_assignments_v to pa_project_assignments
6468 WHERE assignment_id = p_asg_id;
6469
6470 l_new_assignment_id pa_project_assignments.assignment_id%TYPE;
6471 l_resource_id pa_resources_denorm.resource_id%TYPE;
6472 l_assignment_number pa_project_assignments.assignment_number%TYPE;
6473 l_assignment_row_id ROWID;
6474 l_status_code pa_project_assignments.status_code%TYPE ; --Bug 7309934
6475
6476 l_new_assignment_id_tbl system.pa_num_tbl_type;
6477 l_asg_tp_amount_type pa_project_assignments_v.FCST_TP_AMOUNT_TYPE%TYPE;
6478
6479 BEGIN
6480
6481 l_status_code := p_status_code ; -- Added default value population for Status Code. Bug 7309934
6482
6483 IF l_status_code is NULL THEN
6484
6485 IF (p_assignment_type = 'OPEN_ASSIGNMENT') THEN
6486 FND_PROFILE.Get('PA_START_OPEN_ASGMT_STATUS',l_status_code);
6487 IF l_status_code IS NULL THEN
6488 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
6489 ,p_msg_name => 'PA_START_STATUS_NOT_DEFINED');
6490 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
6491 END IF;
6492 END IF;
6493
6494 IF (p_assignment_type = 'STAFFED_ASSIGNMENT' OR p_assignment_type = 'STAFFED_ADMIN_ASSIGNMENT') THEN
6495 FND_PROFILE.Get('PA_START_STAFFED_ASGMT_STATUS',l_status_code);
6496 IF l_status_code IS NULL THEN
6497 PA_ASSIGNMENT_UTILS.Add_Message ( p_app_short_name => 'PA'
6498 ,p_msg_name => 'PA_START_STATUS_NOT_DEFINED');
6499 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
6500 END IF;
6501 END IF;
6502
6503 END IF;
6504
6505
6506 -- l_new_assignment_id_tbl:= SYSTEM.pa_num_tbl_type();
6507 --do online validation
6508 PA_ASSIGNMENTS_PUB.Execute_Create_Assignment
6509 ( p_asgn_creation_mode => 'MASS'
6510 ,p_unfilled_assignment_status => p_unfilled_assignment_status
6511 ,p_assignment_name => p_assignment_name
6512 ,p_assignment_type => p_assignment_type
6513 ,p_multiple_status_flag => p_multiple_status_flag
6514 ,p_status_code => l_status_code
6515 ,p_staffing_priority_code => p_staffing_priority_code
6516 ,p_project_id => p_project_id
6517 ,p_assignment_template_id => p_assignment_template_id
6518 ,p_project_role_id => p_project_role_id
6519 ,p_role_list_id => p_role_list_id
6520 ,p_project_subteam_id => p_project_subteam_id
6521 ,p_description => p_description
6522 ,p_start_date => p_start_date
6523 ,p_end_date => p_end_date
6524 ,p_assignment_effort => p_assignment_effort
6525 ,p_extension_possible => p_extension_possible
6526 ,p_source_assignment_id => p_source_assignment_id
6527 ,p_min_resource_job_level => p_min_resource_job_level
6528 ,p_max_resource_job_level => p_max_resource_job_level
6529 ,p_additional_information => p_additional_information
6530 ,p_location_id => p_location_id
6531 ,p_work_type_id => p_work_type_id
6532 ,p_revenue_currency_code => p_revenue_currency_code
6533 ,p_revenue_bill_rate => p_revenue_bill_rate
6534 ,p_markup_percent => p_markup_percent
6535 ,p_expense_owner => p_expense_owner
6536 ,p_expense_limit => p_expense_limit
6537 ,p_expense_limit_currency_code => p_expense_limit_currency_code
6538 ,p_fcst_tp_amount_type => p_fcst_tp_amount_type
6539 ,p_fcst_job_id => p_fcst_job_id
6540 ,p_fcst_job_group_id => p_fcst_job_group_id
6541 ,p_expenditure_org_id => p_expenditure_org_id
6542 ,p_expenditure_organization_id => p_expenditure_organization_id
6543 ,p_expenditure_type_class => p_expenditure_type_class
6544 ,p_expenditure_type => p_expenditure_type
6545 ,p_calendar_type => p_calendar_type
6546 ,p_calendar_id => p_calendar_id
6547 ,p_resource_calendar_percent => p_resource_calendar_percent
6548 ,p_project_name => p_project_name
6549 ,p_project_number => p_project_number
6550 ,p_project_subteam_name => p_project_subteam_name
6551 ,p_project_status_name => p_project_status_name
6552 ,p_staffing_priority_name => p_staffing_priority_name
6553 ,p_project_role_name => p_project_role_name
6554 ,p_location_city => p_location_city
6555 ,p_location_region => p_location_region
6556 ,p_location_country_name => p_location_country_name
6557 ,p_location_country_code => p_location_country_code
6558 ,p_calendar_name => p_calendar_name
6559 ,p_work_type_name => p_work_type_name
6560 ,p_fcst_job_name => p_fcst_job_name
6561 ,p_fcst_job_group_name => p_fcst_job_group_name
6562 ,p_expenditure_org_name => p_expenditure_org_name
6563 ,p_exp_organization_name => p_exp_organization_name
6564 ,p_attribute_category => p_attribute_category
6565 ,p_attribute1 => p_attribute1
6566 ,p_attribute2 => p_attribute2
6567 ,p_attribute3 => p_attribute3
6568 ,p_attribute4 => p_attribute4
6569 ,p_attribute5 => p_attribute5
6570 ,p_attribute6 => p_attribute6
6571 ,p_attribute7 => p_attribute7
6572 ,p_attribute8 => p_attribute8
6573 ,p_attribute9 => p_attribute9
6574 ,p_attribute10 => p_attribute10
6575 ,p_attribute11 => p_attribute11
6576 ,p_attribute12 => p_attribute12
6577 ,p_attribute13 => p_attribute13
6578 ,p_attribute14 => p_attribute14
6579 ,p_attribute15 => p_attribute15
6580 ,p_api_version => p_api_version
6581 ,p_init_msg_list => p_init_msg_list
6582 ,p_commit => p_commit
6583 ,p_validate_only => FND_API.G_TRUE
6584 ,p_max_msg_count => p_max_msg_count
6585 ,x_new_assignment_id_tbl => l_new_assignment_id_tbl /*Added the parameter for bug 3079906*/
6586 ,x_new_assignment_id => l_new_assignment_id
6587 ,x_assignment_number => l_assignment_number
6588 ,x_assignment_row_id => l_assignment_row_id
6589 ,x_resource_id => l_resource_id
6590 ,x_return_status => x_return_status
6591 ,x_msg_count => x_msg_count
6592 ,x_msg_data => x_msg_data
6593 );
6594
6595
6596 --if p_validate_only=false and there are no errors then start the workflow process.
6597 IF p_validate_only = FND_API.G_FALSE AND FND_MSG_PUB.Count_Msg =0 THEN
6598
6599 OPEN csr_get_tp_amt_type(l_new_assignment_id);
6600 FETCH csr_get_tp_amt_type into l_asg_tp_amount_type;
6601 CLOSE csr_get_tp_amt_type;
6602
6603 --start the mass WF
6604 PA_MASS_ASGMT_TRX.Start_Mass_Asgmt_Trx_Wf(
6605 p_mode => PA_MASS_ASGMT_TRX.G_MASS_ASGMT
6606 ,p_action => PA_MASS_ASGMT_TRX.G_SAVE
6607 ,p_resource_id_tbl => p_resource_id_tbl
6608 ,p_assignment_name => p_assignment_name
6609 ,p_assignment_type => p_assignment_type
6610 ,p_multiple_status_flag => p_multiple_status_flag
6611 ,p_status_code => l_status_code
6612 ,p_staffing_priority_code => p_staffing_priority_code
6613 ,p_project_id => p_project_id
6614 ,p_project_role_id => p_project_role_id
6615 ,p_project_subteam_id => p_project_subteam_id
6616 ,p_description => p_description
6617 ,p_start_date => p_start_date
6618 ,p_end_date => p_end_date
6619 ,p_extension_possible => p_extension_possible
6620 ,p_min_resource_job_level => p_min_resource_job_level
6621 ,p_max_resource_job_level => p_max_resource_job_level
6622 ,p_additional_information => p_additional_information
6623 ,p_location_id => p_location_id
6624 ,p_work_type_id => p_work_type_id
6625 ,p_expense_owner => p_expense_owner
6626 ,p_expense_limit => p_expense_limit
6627 ,p_expense_limit_currency_code => p_expense_limit_currency_code
6628 ,p_fcst_tp_amount_type => l_asg_tp_amount_type
6629 ,p_fcst_job_id => p_fcst_job_id
6630 ,p_fcst_job_group_id => p_fcst_job_group_id
6631 ,p_expenditure_org_id => p_expenditure_org_id
6632 ,p_expenditure_organization_id => p_expenditure_organization_id
6633 ,p_expenditure_type_class => p_expenditure_type_class
6634 ,p_expenditure_type => p_expenditure_type
6635 ,p_calendar_type => p_calendar_type
6636 ,p_calendar_id => p_calendar_id
6637 ,p_resource_calendar_percent => p_resource_calendar_percent
6638 ,p_project_name => p_project_name
6639 ,p_project_number => p_project_number
6640 ,p_project_subteam_name => p_project_subteam_name
6641 ,p_project_status_name => p_project_status_name
6642 ,p_staffing_priority_name => p_staffing_priority_name
6643 ,p_project_role_name => p_project_role_name
6644 ,p_location_city => p_location_city
6645 ,p_location_region => p_location_region
6646 ,p_location_country_name => p_location_country_name
6647 ,p_location_country_code => p_location_country_code
6648 ,p_calendar_name => p_calendar_name
6649 ,p_work_type_name => p_work_type_name
6650 ,p_revenue_currency_code => p_revenue_currency_code
6651 ,p_revenue_bill_rate => p_revenue_bill_rate
6652 ,p_fcst_job_name => p_fcst_job_name
6653 ,p_fcst_job_group_name => p_fcst_job_group_name
6654 ,p_expenditure_org_name => p_expenditure_org_name
6655 ,p_exp_organization_name => p_exp_organization_name
6656 ,x_return_status => x_return_status
6657 );
6658
6659
6660 END IF;
6661
6662 EXCEPTION
6663 WHEN OTHERS THEN
6664 -- Set the exception Message and the stack
6665 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Mass_Exec_Create_Assignments'
6666 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
6667 --
6668 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6669
6670 END Mass_Exec_Create_Assignments;
6671
6672
6673
6674 PROCEDURE Mass_Create_Assignments
6675 ( p_asgn_creation_mode IN VARCHAR2
6676 ,p_unfilled_assignment_status IN pa_project_assignments.status_code%TYPE := FND_API.G_MISS_CHAR
6677 ,p_assignment_name IN pa_project_assignments.assignment_name%TYPE := FND_API.G_MISS_CHAR
6678 ,p_assignment_type IN pa_project_assignments.assignment_type%TYPE := FND_API.G_MISS_CHAR
6679 ,p_multiple_status_flag IN pa_project_assignments.multiple_status_flag%TYPE := FND_API.G_MISS_CHAR
6680 ,p_status_code IN pa_project_assignments.status_code%TYPE := FND_API.G_MISS_CHAR
6681 ,p_staffing_priority_code IN pa_project_assignments.staffing_priority_code%TYPE := FND_API.G_MISS_CHAR
6682 ,p_project_id IN pa_project_assignments.project_id%TYPE := FND_API.G_MISS_NUM
6683 ,p_assignment_template_id IN pa_project_assignments.assignment_template_id%TYPE := FND_API.G_MISS_NUM
6684 ,p_project_role_id IN pa_project_assignments.project_role_id%TYPE := FND_API.G_MISS_NUM
6685 ,p_role_list_id IN pa_role_lists.role_list_id%TYPE := FND_API.G_MISS_NUM
6686 ,p_resource_id_tbl IN system.pa_num_tbl_type
6687 ,p_project_subteam_id IN pa_project_subteams.project_subteam_id%TYPE := FND_API.G_MISS_NUM
6688 ,p_description IN pa_project_assignments.description%TYPE := FND_API.G_MISS_CHAR
6689 ,p_start_date IN pa_project_assignments.start_date%TYPE := FND_API.G_MISS_DATE
6690 ,p_end_date IN pa_project_assignments.end_date%TYPE := FND_API.G_MISS_DATE
6691 ,p_assignment_effort IN pa_project_assignments.assignment_effort%TYPE := FND_API.G_MISS_NUM
6692 ,p_extension_possible IN pa_project_assignments.extension_possible%TYPE := FND_API.G_MISS_CHAR
6693 ,p_source_assignment_id IN pa_project_assignments.source_assignment_id%TYPE := FND_API.G_MISS_NUM
6694 ,p_min_resource_job_level IN pa_project_assignments.min_resource_job_level%TYPE := FND_API.G_MISS_NUM
6695 ,p_max_resource_job_level IN pa_project_assignments.max_resource_job_level%TYPE := FND_API.G_MISS_NUM
6696 ,p_additional_information IN pa_project_assignments.additional_information%TYPE := FND_API.G_MISS_CHAR
6697 ,p_location_id IN pa_project_assignments.location_id%TYPE := FND_API.G_MISS_NUM
6698 ,p_work_type_id IN pa_project_assignments.work_type_id%TYPE := FND_API.G_MISS_NUM
6699 ,p_revenue_currency_code IN pa_project_assignments.revenue_currency_code%TYPE := FND_API.G_MISS_CHAR
6700 ,p_revenue_bill_rate IN pa_project_assignments.revenue_bill_rate%TYPE := FND_API.G_MISS_NUM
6701 ,p_markup_percent IN pa_project_assignments.markup_percent%TYPE := FND_API.G_MISS_NUM
6702 ,p_expense_owner IN pa_project_assignments.expense_owner%TYPE := FND_API.G_MISS_CHAR
6703 ,p_expense_limit IN pa_project_assignments.expense_limit%TYPE := FND_API.G_MISS_NUM
6704 ,p_expense_limit_currency_code IN pa_project_assignments.expense_limit_currency_code%TYPE := FND_API.G_MISS_CHAR
6705 ,p_fcst_tp_amount_type IN pa_project_assignments.fcst_tp_amount_type%TYPE := FND_API.G_MISS_CHAR
6706 ,p_fcst_job_id IN pa_project_assignments.fcst_job_id%TYPE := FND_API.G_MISS_NUM
6707 ,p_fcst_job_group_id IN pa_project_assignments.fcst_job_group_id%TYPE := FND_API.G_MISS_NUM
6708 ,p_expenditure_org_id IN pa_project_assignments.expenditure_org_id%TYPE := FND_API.G_MISS_NUM
6709 ,p_expenditure_organization_id IN pa_project_assignments.expenditure_organization_id%TYPE := FND_API.G_MISS_NUM
6710 ,p_expenditure_type_class IN pa_project_assignments.expenditure_type_class%TYPE := FND_API.G_MISS_CHAR
6711 ,p_expenditure_type IN pa_project_assignments.expenditure_type%TYPE := FND_API.G_MISS_CHAR
6712 ,p_calendar_type IN pa_project_assignments.calendar_type%TYPE := FND_API.G_MISS_CHAR
6713 ,p_calendar_id IN pa_project_assignments.calendar_id%TYPE := FND_API.G_MISS_NUM
6714 ,p_resource_calendar_percent IN pa_project_assignments.resource_calendar_percent%TYPE := FND_API.G_MISS_NUM
6715 ,p_project_name IN pa_projects_all.name%TYPE := FND_API.G_MISS_CHAR
6716 ,p_project_number IN pa_projects_all.segment1%TYPE := FND_API.G_MISS_CHAR
6717 ,p_project_subteam_name IN pa_project_subteams.name%TYPE := FND_API.G_MISS_CHAR
6718 ,p_project_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
6719 ,p_staffing_priority_name IN pa_lookups.meaning%TYPE := FND_API.G_MISS_CHAR
6720 ,p_project_role_name IN pa_project_role_types.meaning%TYPE := FND_API.G_MISS_CHAR
6721 ,p_location_city IN pa_locations.city%TYPE := FND_API.G_MISS_CHAR
6722 ,p_location_region IN pa_locations.region%TYPE := FND_API.G_MISS_CHAR
6723 ,p_location_country_name IN fnd_territories_tl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
6724 ,p_location_country_code IN pa_locations.country_code%TYPE := FND_API.G_MISS_CHAR
6725 ,p_calendar_name IN jtf_calendars_tl.calendar_name%TYPE := FND_API.G_MISS_CHAR
6726 ,p_work_type_name IN pa_work_types_vl.name%TYPE := FND_API.G_MISS_CHAR
6727 ,p_fcst_job_name IN per_jobs.name%TYPE := FND_API.G_MISS_CHAR
6728 ,p_fcst_job_group_name IN per_job_groups.displayed_name%TYPE := FND_API.G_MISS_CHAR
6729 ,p_expenditure_org_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
6730 ,p_exp_organization_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
6731 ,p_attribute_category IN pa_project_assignments.attribute_category%TYPE := FND_API.G_MISS_CHAR
6732 ,p_attribute1 IN pa_project_assignments.attribute1%TYPE := FND_API.G_MISS_CHAR
6733 ,p_attribute2 IN pa_project_assignments.attribute2%TYPE := FND_API.G_MISS_CHAR
6734 ,p_attribute3 IN pa_project_assignments.attribute3%TYPE := FND_API.G_MISS_CHAR
6735 ,p_attribute4 IN pa_project_assignments.attribute4%TYPE := FND_API.G_MISS_CHAR
6736 ,p_attribute5 IN pa_project_assignments.attribute5%TYPE := FND_API.G_MISS_CHAR
6737 ,p_attribute6 IN pa_project_assignments.attribute6%TYPE := FND_API.G_MISS_CHAR
6738 ,p_attribute7 IN pa_project_assignments.attribute7%TYPE := FND_API.G_MISS_CHAR
6739 ,p_attribute8 IN pa_project_assignments.attribute8%TYPE := FND_API.G_MISS_CHAR
6740 ,p_attribute9 IN pa_project_assignments.attribute9%TYPE := FND_API.G_MISS_CHAR
6741 ,p_attribute10 IN pa_project_assignments.attribute10%TYPE := FND_API.G_MISS_CHAR
6742 ,p_attribute11 IN pa_project_assignments.attribute11%TYPE := FND_API.G_MISS_CHAR
6743 ,p_attribute12 IN pa_project_assignments.attribute12%TYPE := FND_API.G_MISS_CHAR
6744 ,p_attribute13 IN pa_project_assignments.attribute13%TYPE := FND_API.G_MISS_CHAR
6745 ,p_attribute14 IN pa_project_assignments.attribute14%TYPE := FND_API.G_MISS_CHAR
6746 ,p_attribute15 IN pa_project_assignments.attribute15%TYPE := FND_API.G_MISS_CHAR
6747 ,p_number_of_requirements IN NUMBER := 1
6748 ,p_api_version IN NUMBER := 1.0
6749 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
6750 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6751 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
6752 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
6753 ,x_success_assignment_id_tbl OUT NOCOPY system.pa_num_tbl_type -- For 1159 mandate changes bug#2674619
6754 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6755 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6756 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6757 )
6758 IS
6759
6760 l_new_assignment_id pa_project_assignments.assignment_id%TYPE;
6761 l_new_assignment_id_tbl system.pa_num_tbl_type := p_resource_id_tbl;
6762 l_resource_id pa_resources_denorm.resource_id%TYPE;
6763 l_assignment_number pa_project_assignments.assignment_number%TYPE;
6764 l_assignment_row_id ROWID;
6765 l_new_assignment_tabl system.pa_num_tbl_type;
6766 l_return_status VARCHAR2(1);
6767 l_staffing_owner_name PER_PEOPLE_F.full_name%TYPE := null;
6768 l_err_msg_code VARCHAR2(80);
6769 l_staffing_owner_person_id pa_project_assignments.staffing_owner_person_id%TYPE := null;
6770
6771 BEGIN
6772
6773
6774 -- Default Staffing Owner for the assignments
6775 IF p_assignment_type = 'STAFFED_ASSIGNMENT' THEN
6776 pa_assignment_utils.Get_Default_Staffing_Owner
6777 ( p_project_id => p_project_id
6778 ,p_exp_org_id => p_expenditure_org_id
6779 ,x_person_id => l_staffing_owner_person_id
6780 ,x_person_name => l_staffing_owner_name
6781 ,x_return_status => x_return_status
6782 ,x_error_message_code => l_err_msg_code);
6783 END IF;
6784
6785 --loop through the resource ids and call execute_create_assignment
6786 --to actually create the assignment. This is the WF (offline) process
6787
6788 FOR i IN p_resource_id_tbl.FIRST .. p_resource_id_tbl.LAST LOOP
6789
6790 --call execute_create_assignment
6791 PA_ASSIGNMENTS_PUB.Execute_Create_Assignment
6792 ( p_asgn_creation_mode => 'MASS'
6793 ,p_unfilled_assignment_status => p_unfilled_assignment_status
6794 ,p_assignment_name => p_assignment_name
6795 ,p_assignment_type => p_assignment_type
6796 ,p_multiple_status_flag => p_multiple_status_flag
6797 ,p_status_code => p_status_code
6798 ,p_staffing_priority_code => p_staffing_priority_code
6799 ,p_project_id => p_project_id
6800 ,p_assignment_template_id => p_assignment_template_id
6801 ,p_project_role_id => p_project_role_id
6802 ,p_role_list_id => p_role_list_id
6803 ,p_resource_id => p_resource_id_tbl(i)
6804 ,p_project_subteam_id => p_project_subteam_id
6805 ,p_description => p_description
6806 ,p_start_date => p_start_date
6807 ,p_end_date => p_end_date
6808 ,p_assignment_effort => p_assignment_effort
6809 ,p_extension_possible => p_extension_possible
6810 ,p_source_assignment_id => p_source_assignment_id
6811 ,p_min_resource_job_level => p_min_resource_job_level
6812 ,p_max_resource_job_level => p_max_resource_job_level
6813 ,p_additional_information => p_additional_information
6814 ,p_location_id => p_location_id
6815 ,p_work_type_id => p_work_type_id
6816 ,p_revenue_currency_code => p_revenue_currency_code
6817 ,p_revenue_bill_rate => p_revenue_bill_rate
6818 ,p_markup_percent => p_markup_percent
6819 ,p_expense_owner => p_expense_owner
6820 ,p_expense_limit => p_expense_limit
6821 ,p_expense_limit_currency_code => p_expense_limit_currency_code
6822 ,p_fcst_tp_amount_type => p_fcst_tp_amount_type
6823 ,p_fcst_job_id => p_fcst_job_id
6824 ,p_fcst_job_group_id => p_fcst_job_group_id
6825 ,p_expenditure_org_id => p_expenditure_org_id
6826 ,p_expenditure_organization_id => p_expenditure_organization_id
6827 ,p_expenditure_type_class => p_expenditure_type_class
6828 ,p_expenditure_type => p_expenditure_type
6829 ,p_calendar_type => p_calendar_type
6830 ,p_calendar_id => p_calendar_id
6831 ,p_resource_calendar_percent => p_resource_calendar_percent
6832 ,p_project_name => p_project_name
6833 ,p_project_number => p_project_number
6834 ,p_project_subteam_name => p_project_subteam_name
6835 ,p_project_status_name => p_project_status_name
6836 ,p_staffing_priority_name => p_staffing_priority_name
6837 ,p_project_role_name => p_project_role_name
6838 ,p_location_city => p_location_city
6839 ,p_location_region => p_location_region
6840 ,p_location_country_name => p_location_country_name
6841 ,p_location_country_code => p_location_country_code
6842 ,p_calendar_name => p_calendar_name
6843 ,p_work_type_name => p_work_type_name
6844 ,p_fcst_job_name => p_fcst_job_name
6845 ,p_fcst_job_group_name => p_fcst_job_group_name
6846 ,p_expenditure_org_name => p_expenditure_org_name
6847 ,p_exp_organization_name => p_exp_organization_name
6848 ,p_staffing_owner_person_id => l_staffing_owner_person_id
6849 ,p_staffing_owner_name => l_staffing_owner_name
6850 ,p_attribute_category => p_attribute_category
6851 ,p_attribute1 => p_attribute1
6852 ,p_attribute2 => p_attribute2
6853 ,p_attribute3 => p_attribute3
6854 ,p_attribute4 => p_attribute4
6855 ,p_attribute5 => p_attribute5
6856 ,p_attribute6 => p_attribute6
6857 ,p_attribute7 => p_attribute7
6858 ,p_attribute8 => p_attribute8
6859 ,p_attribute9 => p_attribute9
6860 ,p_attribute10 => p_attribute10
6861 ,p_attribute11 => p_attribute11
6862 ,p_attribute12 => p_attribute12
6863 ,p_attribute13 => p_attribute13
6864 ,p_attribute14 => p_attribute14
6865 ,p_attribute15 => p_attribute15
6866 ,p_api_version => p_api_version
6867 ,p_init_msg_list => FND_API.G_TRUE
6868 ,p_commit => p_commit
6869 ,p_validate_only => p_validate_only
6870 ,p_max_msg_count => p_max_msg_count
6871 ,x_new_assignment_id_tbl => l_new_assignment_tabl /*Added the parameter for bug 3079906*/
6872 ,x_new_assignment_id => l_new_assignment_id
6873 ,x_assignment_number => l_assignment_number
6874 ,x_assignment_row_id => l_assignment_row_id
6875 ,x_resource_id => l_resource_id
6876 ,x_return_status => x_return_status
6877 ,x_msg_count => x_msg_count
6878 ,x_msg_data => x_msg_data
6879 );
6880
6881 l_new_assignment_id_tbl(i) := l_new_assignment_id;
6882
6883 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6884 l_new_assignment_id_tbl(i) := NULL;
6885 PA_MESSAGE_UTILS.save_messages(p_user_id => PA_MASS_ASGMT_TRX.G_SUBMITTER_USER_ID,
6886 p_source_type1 => PA_MASS_ASGMT_TRX.G_SOURCE_TYPE1,
6887 p_source_type2 => PA_MASS_ASGMT_TRX.G_MASS_ASGMT,
6888 p_source_identifier1 => PA_MASS_ASGMT_TRX.G_WORKFLOW_ITEM_TYPE,
6889 p_source_identifier2 => PA_MASS_ASGMT_TRX.G_WORKFLOW_ITEM_KEY,
6890 p_context1 => p_project_id,
6891 p_context2 => NULL,
6892 p_context3 => p_resource_id_tbl(i),
6893 p_commit => FND_API.G_TRUE,
6894 x_return_status => l_return_status);
6895
6896 END IF;
6897
6898 END LOOP;
6899
6900 x_success_assignment_id_tbl := l_new_assignment_id_tbl;
6901
6902 EXCEPTION
6903 WHEN OTHERS THEN
6904 -- Set the exception Message and the stack
6905 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Mass_Create_Assignments'
6906 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
6907 --
6908 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6909 RAISE;
6910
6911 END Mass_Create_Assignments;
6912
6913
6914 PROCEDURE Mass_Exec_Update_Assignments
6915 ( p_asgn_update_mode IN VARCHAR2 := FND_API.G_MISS_CHAR
6916 ,p_assignment_id_tbl IN system.pa_num_tbl_type
6917 ,p_assignment_type IN pa_project_assignments.assignment_type%TYPE := FND_API.G_MISS_CHAR
6918 ,p_assignment_name IN pa_project_assignments.assignment_name%TYPE := FND_API.G_MISS_CHAR
6919 ,p_staffing_priority_code IN pa_project_assignments.staffing_priority_code%TYPE := FND_API.G_MISS_CHAR
6920 ,p_project_id IN pa_project_assignments.project_id%TYPE := FND_API.G_MISS_NUM
6921 ,p_project_subteam_id IN pa_project_subteams.project_subteam_id%TYPE := FND_API.G_MISS_NUM
6922 ,p_append_description_flag IN VARCHAR2 := 'N'
6923 ,p_description IN pa_project_assignments.description%TYPE := FND_API.G_MISS_CHAR
6924 ,p_extension_possible IN pa_project_assignments.extension_possible%TYPE := FND_API.G_MISS_CHAR
6925 ,p_min_resource_job_level IN pa_project_assignments.min_resource_job_level%TYPE := FND_API.G_MISS_NUM
6926 ,p_max_resource_job_level IN pa_project_assignments.max_resource_job_level%TYPE := FND_API.G_MISS_NUM
6927 ,p_append_information_flag IN VARCHAR2 := 'N'
6928 ,p_additional_information IN pa_project_assignments.additional_information%TYPE := FND_API.G_MISS_CHAR
6929 ,p_location_id IN pa_project_assignments.location_id%TYPE := FND_API.G_MISS_NUM
6930 ,p_work_type_id IN pa_project_assignments.work_type_id%TYPE := FND_API.G_MISS_NUM
6931 ,p_expense_owner IN pa_project_assignments.expense_owner%TYPE := FND_API.G_MISS_CHAR
6932 ,p_expense_limit IN pa_project_assignments.expense_limit%TYPE := FND_API.G_MISS_NUM
6933 ,p_expense_limit_currency_code IN pa_project_assignments.expense_limit_currency_code%TYPE := FND_API.G_MISS_CHAR
6934 ,p_fcst_tp_amount_type IN pa_project_assignments.fcst_tp_amount_type%TYPE := FND_API.G_MISS_CHAR
6935 ,p_fcst_job_id IN pa_project_assignments.fcst_job_id%TYPE := FND_API.G_MISS_NUM
6936 ,p_fcst_job_group_id IN pa_project_assignments.fcst_job_group_id%TYPE := FND_API.G_MISS_NUM
6937 ,p_expenditure_org_id IN pa_project_assignments.expenditure_org_id%TYPE := FND_API.G_MISS_NUM
6938 ,p_expenditure_organization_id IN pa_project_assignments.expenditure_organization_id%TYPE := FND_API.G_MISS_NUM
6939 ,p_expenditure_type_class IN pa_project_assignments.expenditure_type_class%TYPE := FND_API.G_MISS_CHAR
6940 ,p_expenditure_type IN pa_project_assignments.expenditure_type%TYPE := FND_API.G_MISS_CHAR
6941 ,p_project_subteam_name IN pa_project_subteams.name%TYPE := FND_API.G_MISS_CHAR
6942 ,p_staffing_priority_name IN pa_lookups.meaning%TYPE := FND_API.G_MISS_CHAR
6943 ,p_location_city IN pa_locations.city%TYPE := FND_API.G_MISS_CHAR
6944 ,p_location_region IN pa_locations.region%TYPE := FND_API.G_MISS_CHAR
6945 ,p_location_country_name IN fnd_territories_tl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
6946 ,p_location_country_code IN pa_locations.country_code%TYPE := FND_API.G_MISS_CHAR
6947 ,p_work_type_name IN pa_work_types_vl.name%TYPE := FND_API.G_MISS_CHAR
6948 ,p_fcst_job_name IN per_jobs.name%TYPE := FND_API.G_MISS_CHAR
6949 ,p_fcst_job_group_name IN per_job_groups.displayed_name%TYPE := FND_API.G_MISS_CHAR
6950 ,p_expenditure_org_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
6951 ,p_exp_organization_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
6952 ,p_comp_match_weighting IN pa_project_assignments.competence_match_weighting%TYPE := FND_API.G_MISS_NUM
6953 ,p_avail_match_weighting IN pa_project_assignments.availability_match_weighting%TYPE := FND_API.G_MISS_NUM
6954 ,p_job_level_match_weighting IN pa_project_assignments.job_level_match_weighting%TYPE := FND_API.G_MISS_NUM
6955 ,p_search_min_availability IN pa_project_assignments.search_min_availability%TYPE := FND_API.G_MISS_NUM
6956 ,p_search_country_code IN pa_project_assignments.search_country_code%TYPE := FND_API.G_MISS_CHAR
6957 ,p_search_country_name IN fnd_territories_vl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
6958 ,p_search_exp_org_struct_ver_id IN pa_project_assignments.search_exp_org_struct_ver_id%TYPE := FND_API.G_MISS_NUM
6959 ,p_search_exp_org_hier_name IN per_organization_structures.name%TYPE := FND_API.G_MISS_CHAR
6960 ,p_search_exp_start_org_id IN pa_project_assignments.search_exp_start_org_id%TYPE := FND_API.G_MISS_NUM
6961 ,p_search_exp_start_org_name IN hr_organization_units.name%TYPE := FND_API.G_MISS_CHAR
6962 ,p_search_min_candidate_score IN pa_project_assignments.search_min_candidate_score%TYPE := FND_API.G_MISS_NUM
6963 ,p_enable_auto_cand_nom_flag IN pa_project_assignments.enable_auto_cand_nom_flag%TYPE := FND_API.G_MISS_CHAR
6964 ,p_staffing_owner_person_id IN pa_project_assignments.staffing_owner_person_id%TYPE := FND_API.G_MISS_NUM
6965 ,p_staffing_owner_name IN per_people_f.full_name%TYPE := FND_API.G_MISS_CHAR
6966 ,p_attribute_category IN pa_project_assignments.attribute_category%TYPE := FND_API.G_MISS_CHAR
6967 ,p_attribute1 IN pa_project_assignments.attribute1%TYPE := FND_API.G_MISS_CHAR
6968 ,p_attribute2 IN pa_project_assignments.attribute2%TYPE := FND_API.G_MISS_CHAR
6969 ,p_attribute3 IN pa_project_assignments.attribute3%TYPE := FND_API.G_MISS_CHAR
6970 ,p_attribute4 IN pa_project_assignments.attribute4%TYPE := FND_API.G_MISS_CHAR
6971 ,p_attribute5 IN pa_project_assignments.attribute5%TYPE := FND_API.G_MISS_CHAR
6972 ,p_attribute6 IN pa_project_assignments.attribute6%TYPE := FND_API.G_MISS_CHAR
6973 ,p_attribute7 IN pa_project_assignments.attribute7%TYPE := FND_API.G_MISS_CHAR
6974 ,p_attribute8 IN pa_project_assignments.attribute8%TYPE := FND_API.G_MISS_CHAR
6975 ,p_attribute9 IN pa_project_assignments.attribute9%TYPE := FND_API.G_MISS_CHAR
6976 ,p_attribute10 IN pa_project_assignments.attribute10%TYPE := FND_API.G_MISS_CHAR
6977 ,p_attribute11 IN pa_project_assignments.attribute11%TYPE := FND_API.G_MISS_CHAR
6978 ,p_attribute12 IN pa_project_assignments.attribute12%TYPE := FND_API.G_MISS_CHAR
6979 ,p_attribute13 IN pa_project_assignments.attribute13%TYPE := FND_API.G_MISS_CHAR
6980 ,p_attribute14 IN pa_project_assignments.attribute14%TYPE := FND_API.G_MISS_CHAR
6981 ,p_attribute15 IN pa_project_assignments.attribute15%TYPE := FND_API.G_MISS_CHAR
6982 ,p_api_version IN NUMBER := 1.0
6983 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
6984 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
6985 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
6986 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
6987 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6988 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
6989 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
6990 )
6991
6992 IS
6993
6994 l_wf_mode VARCHAR2(200);
6995 l_return_status VARCHAR2(1);
6996
6997 BEGIN
6998
6999 --This API is only called to do value-id validations
7000
7001 pa_assignments_pub.Execute_Update_Assignment
7002 ( p_asgn_update_mode => 'MASS_ONLINE'
7003 ,p_assignment_name => p_assignment_name
7004 ,p_assignment_type => p_assignment_type
7005 ,p_staffing_priority_code => p_staffing_priority_code
7006 ,p_project_id => p_project_id
7007 ,p_project_subteam_id => p_project_subteam_id
7008 ,p_description => p_description
7009 ,p_extension_possible => p_extension_possible
7010 ,p_min_resource_job_level => p_min_resource_job_level
7011 ,p_max_resource_job_level => p_max_resource_job_level
7012 ,p_additional_information => p_additional_information
7013 ,p_location_id => p_location_id
7014 ,p_work_type_id => p_work_type_id
7015 ,p_expense_owner => p_expense_owner
7016 ,p_expense_limit => p_expense_limit
7017 ,p_expense_limit_currency_code => p_expense_limit_currency_code
7018 ,p_fcst_tp_amount_type => p_fcst_tp_amount_type
7019 ,p_fcst_job_id => p_fcst_job_id
7020 ,p_fcst_job_group_id => p_fcst_job_group_id
7021 ,p_expenditure_org_id => p_expenditure_org_id
7022 ,p_expenditure_organization_id => p_expenditure_organization_id
7023 ,p_expenditure_type_class => p_expenditure_type_class
7024 ,p_expenditure_type => p_expenditure_type
7025 ,p_project_subteam_name => p_project_subteam_name
7026 ,p_staffing_priority_name => p_staffing_priority_name
7027 ,p_location_city => p_location_city
7028 ,p_location_region => p_location_region
7029 ,p_location_country_name => p_location_country_name
7030 ,p_location_country_code => p_location_country_code
7031 ,p_work_type_name => p_work_type_name
7032 ,p_fcst_job_name => p_fcst_job_name
7033 ,p_fcst_job_group_name => p_fcst_job_group_name
7034 ,p_expenditure_org_name => p_expenditure_org_name
7035 ,p_exp_organization_name => p_exp_organization_name
7036 ,p_comp_match_weighting => p_avail_match_weighting
7037 ,p_avail_match_weighting => p_avail_match_weighting
7038 ,p_job_level_match_weighting => p_job_level_match_weighting
7039 ,p_search_min_availability => p_search_min_availability
7040 ,p_search_country_code => p_search_country_code
7041 ,p_search_country_name => p_search_country_name
7042 ,p_search_exp_org_struct_ver_id => p_search_exp_org_struct_ver_id
7043 ,p_search_exp_org_hier_name => p_search_exp_org_hier_name
7044 ,p_search_exp_start_org_id => p_search_exp_start_org_id
7045 ,p_search_exp_start_org_name => p_search_exp_start_org_name
7046 ,p_search_min_candidate_score => p_search_min_candidate_score
7047 ,p_enable_auto_cand_nom_flag => p_enable_auto_cand_nom_flag
7048 ,p_staffing_owner_person_id => p_staffing_owner_person_id
7049 ,p_staffing_owner_name => p_staffing_owner_name
7050 ,p_attribute_category => p_attribute_category
7051 ,p_attribute1 => p_attribute1
7052 ,p_attribute2 => p_attribute2
7053 ,p_attribute3 => p_attribute3
7054 ,p_attribute4 => p_attribute4
7055 ,p_attribute5 => p_attribute5
7056 ,p_attribute6 => p_attribute6
7057 ,p_attribute7 => p_attribute7
7058 ,p_attribute8 => p_attribute8
7059 ,p_attribute9 => p_attribute9
7060 ,p_attribute10 => p_attribute10
7061 ,p_attribute11 => p_attribute11
7062 ,p_attribute12 => p_attribute12
7063 ,p_attribute13 => p_attribute13
7064 ,p_attribute14 => p_attribute14
7065 ,p_attribute15 => p_attribute15
7066 ,p_api_version => p_api_version
7067 ,p_init_msg_list => p_init_msg_list
7068 ,p_commit => p_commit
7069 ,p_validate_only => p_validate_only
7070 ,p_max_msg_count => p_max_msg_count
7071 ,x_return_status => x_return_status
7072 ,x_msg_count => x_msg_count
7073 ,x_msg_data => x_msg_data
7074 );
7075
7076 --if p_validate_only=false and there are no errors then start the workflow process.
7077 IF p_validate_only = FND_API.G_FALSE AND FND_MSG_PUB.Count_Msg =0 THEN
7078
7079 IF p_asgn_update_mode = 'Forecast' THEN
7080 l_wf_mode := PA_MASS_ASGMT_TRX.G_MASS_UPDATE_FORECAST_ITEMS;
7081 ELSE
7082 -- update BasicInfo or Candidate
7083 l_wf_mode := PA_MASS_ASGMT_TRX.G_MASS_UPDATE_ASGMT_BASIC_INFO;
7084 END IF;
7085
7086 --start the mass WF
7087 PA_MASS_ASGMT_TRX.Start_Mass_Asgmt_Trx_Wf(
7088 p_mode => l_wf_mode
7089 ,p_action => PA_MASS_ASGMT_TRX.G_SAVE
7090 ,p_assignment_id_tbl => p_assignment_id_tbl
7091 ,p_assignment_name => p_assignment_name
7092 ,p_assignment_type => p_assignment_type
7093 ,p_staffing_priority_code => p_staffing_priority_code
7094 ,p_project_id => p_project_id
7095 ,p_project_subteam_id => p_project_subteam_id
7096 ,p_description => p_description
7097 ,p_append_description_flag => p_append_description_flag
7098 ,p_extension_possible => p_extension_possible
7099 ,p_min_resource_job_level => p_min_resource_job_level
7100 ,p_max_resource_job_level => p_max_resource_job_level
7101 ,p_additional_information => p_additional_information
7102 ,p_append_information_flag => p_append_information_flag
7103 ,p_location_id => p_location_id
7104 ,p_work_type_id => p_work_type_id
7105 ,p_expense_owner => p_expense_owner
7106 ,p_expense_limit => p_expense_limit
7107 ,p_expense_limit_currency_code => p_expense_limit_currency_code
7108 ,p_fcst_tp_amount_type => p_fcst_tp_amount_type
7109 ,p_fcst_job_id => p_fcst_job_id
7110 ,p_fcst_job_group_id => p_fcst_job_group_id
7111 ,p_expenditure_org_id => p_expenditure_org_id
7112 ,p_expenditure_organization_id => p_expenditure_organization_id
7113 ,p_expenditure_type_class => p_expenditure_type_class
7114 ,p_expenditure_type => p_expenditure_type
7115 ,p_project_subteam_name => p_project_subteam_name
7116 ,p_staffing_priority_name => p_staffing_priority_name
7117 ,p_location_city => p_location_city
7118 ,p_location_region => p_location_region
7119 ,p_location_country_name => p_location_country_name
7120 ,p_location_country_code => p_location_country_code
7121 ,p_work_type_name => p_work_type_name
7122 ,p_fcst_job_name => p_fcst_job_name
7123 ,p_fcst_job_group_name => p_fcst_job_group_name
7124 ,p_expenditure_org_name => p_expenditure_org_name
7125 ,p_exp_organization_name => p_exp_organization_name
7126 ,p_comp_match_weighting => p_comp_match_weighting
7127 ,p_avail_match_weighting => p_avail_match_weighting
7128 ,p_job_level_match_weighting => p_job_level_match_weighting
7129 ,p_search_min_availability => p_search_min_availability
7130 ,p_search_country_code => p_search_country_code
7131 ,p_search_exp_org_struct_ver_id => p_search_exp_org_struct_ver_id
7132 ,p_search_exp_start_org_id => p_search_exp_start_org_id
7133 ,p_search_min_candidate_score => p_search_min_candidate_score
7134 ,p_enable_auto_cand_nom_flag => p_enable_auto_cand_nom_flag
7135 ,p_search_country_name => p_search_country_name
7136 ,p_search_exp_org_hier_name => p_search_exp_org_hier_name
7137 ,p_search_exp_start_org_name => p_search_exp_start_org_name
7138 ,p_staffing_owner_person_id => p_staffing_owner_person_id
7139 ,p_staffing_owner_name => p_staffing_owner_name
7140 ,x_return_status => x_return_status
7141 );
7142
7143 END IF;
7144
7145 EXCEPTION
7146 WHEN OTHERS THEN
7147 -- Set the exception Message and the stack
7148 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Mass_Exec_Update_Assignments'
7149 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
7150 --
7151 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7152 RAISE;
7153
7154 END Mass_Exec_Update_Assignments;
7155
7156
7157
7158 PROCEDURE Mass_Update_Assignments
7159 ( p_update_mode IN VARCHAR2 := FND_API.G_MISS_CHAR
7160 ,p_assignment_id_tbl IN system.pa_num_tbl_type
7161 ,p_assignment_type IN pa_project_assignments.assignment_type%TYPE := FND_API.G_MISS_CHAR
7162 ,p_assignment_name IN pa_project_assignments.assignment_name%TYPE := FND_API.G_MISS_CHAR
7163 ,p_staffing_priority_code IN pa_project_assignments.staffing_priority_code%TYPE := FND_API.G_MISS_CHAR
7164 ,p_project_id IN pa_project_assignments.project_id%TYPE := FND_API.G_MISS_NUM
7165 ,p_project_subteam_id IN pa_project_subteams.project_subteam_id%TYPE := FND_API.G_MISS_NUM
7166 ,p_append_description_flag IN VARCHAR2 := 'N'
7167 ,p_description IN pa_project_assignments.description%TYPE := FND_API.G_MISS_CHAR
7168 ,p_extension_possible IN pa_project_assignments.extension_possible%TYPE := FND_API.G_MISS_CHAR
7169 ,p_min_resource_job_level IN pa_project_assignments.min_resource_job_level%TYPE := FND_API.G_MISS_NUM
7170 ,p_max_resource_job_level IN pa_project_assignments.max_resource_job_level%TYPE := FND_API.G_MISS_NUM
7171 ,p_append_information_flag IN VARCHAR2 := 'N'
7172 ,p_additional_information IN pa_project_assignments.additional_information%TYPE := FND_API.G_MISS_CHAR
7173 ,p_location_id IN pa_project_assignments.location_id%TYPE := FND_API.G_MISS_NUM
7174 ,p_work_type_id IN pa_project_assignments.work_type_id%TYPE := FND_API.G_MISS_NUM
7175 ,p_expense_owner IN pa_project_assignments.expense_owner%TYPE := FND_API.G_MISS_CHAR
7176 ,p_expense_limit IN pa_project_assignments.expense_limit%TYPE := FND_API.G_MISS_NUM
7177 ,p_expense_limit_currency_code IN pa_project_assignments.expense_limit_currency_code%TYPE := FND_API.G_MISS_CHAR
7178 ,p_fcst_tp_amount_type IN pa_project_assignments.fcst_tp_amount_type%TYPE := FND_API.G_MISS_CHAR
7179 ,p_fcst_job_id IN pa_project_assignments.fcst_job_id%TYPE := FND_API.G_MISS_NUM
7180 ,p_fcst_job_group_id IN pa_project_assignments.fcst_job_group_id%TYPE := FND_API.G_MISS_NUM
7181 ,p_expenditure_org_id IN pa_project_assignments.expenditure_org_id%TYPE := FND_API.G_MISS_NUM
7182 ,p_expenditure_organization_id IN pa_project_assignments.expenditure_organization_id%TYPE := FND_API.G_MISS_NUM
7183 ,p_expenditure_type_class IN pa_project_assignments.expenditure_type_class%TYPE := FND_API.G_MISS_CHAR
7184 ,p_expenditure_type IN pa_project_assignments.expenditure_type%TYPE := FND_API.G_MISS_CHAR
7185 ,p_project_subteam_name IN pa_project_subteams.name%TYPE := FND_API.G_MISS_CHAR
7186 ,p_staffing_priority_name IN pa_lookups.meaning%TYPE := FND_API.G_MISS_CHAR
7187 ,p_location_city IN pa_locations.city%TYPE := FND_API.G_MISS_CHAR
7188 ,p_location_region IN pa_locations.region%TYPE := FND_API.G_MISS_CHAR
7189 ,p_location_country_name IN fnd_territories_tl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
7190 ,p_location_country_code IN pa_locations.country_code%TYPE := FND_API.G_MISS_CHAR
7191 ,p_work_type_name IN pa_work_types_vl.name%TYPE := FND_API.G_MISS_CHAR
7192 ,p_fcst_job_name IN per_jobs.name%TYPE := FND_API.G_MISS_CHAR
7193 ,p_fcst_job_group_name IN per_job_groups.displayed_name%TYPE := FND_API.G_MISS_CHAR
7194 ,p_expenditure_org_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
7195 ,p_exp_organization_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
7196 ,p_comp_match_weighting IN pa_project_assignments.competence_match_weighting%TYPE := FND_API.G_MISS_NUM
7197 ,p_avail_match_weighting IN pa_project_assignments.availability_match_weighting%TYPE := FND_API.G_MISS_NUM
7198 ,p_job_level_match_weighting IN pa_project_assignments.job_level_match_weighting%TYPE := FND_API.G_MISS_NUM
7199 ,p_search_min_availability IN pa_project_assignments.search_min_availability%TYPE := FND_API.G_MISS_NUM
7200 ,p_search_country_code IN pa_project_assignments.search_country_code%TYPE := FND_API.G_MISS_CHAR
7201 ,p_search_country_name IN fnd_territories_vl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
7202 ,p_search_exp_org_struct_ver_id IN pa_project_assignments.search_exp_org_struct_ver_id%TYPE := FND_API.G_MISS_NUM
7203 ,p_search_exp_org_hier_name IN per_organization_structures.name%TYPE := FND_API.G_MISS_CHAR
7204 ,p_search_exp_start_org_id IN pa_project_assignments.search_exp_start_org_id%TYPE := FND_API.G_MISS_NUM
7205 ,p_search_exp_start_org_name IN hr_organization_units.name%TYPE := FND_API.G_MISS_CHAR
7206 ,p_search_min_candidate_score IN pa_project_assignments.search_min_candidate_score%TYPE := FND_API.G_MISS_NUM
7207 ,p_enable_auto_cand_nom_flag IN pa_project_assignments.enable_auto_cand_nom_flag%TYPE := FND_API.G_MISS_CHAR
7208 ,p_staffing_owner_person_id IN pa_project_assignments.staffing_owner_person_id%TYPE := FND_API.G_MISS_NUM --FP.L Development
7209 ,p_staffing_owner_name IN per_people_f.full_name%TYPE := FND_API.G_MISS_CHAR --FP.L Development
7210 ,p_attribute_category IN pa_project_assignments.attribute_category%TYPE := FND_API.G_MISS_CHAR
7211 ,p_attribute1 IN pa_project_assignments.attribute1%TYPE := FND_API.G_MISS_CHAR
7212 ,p_attribute2 IN pa_project_assignments.attribute2%TYPE := FND_API.G_MISS_CHAR
7213 ,p_attribute3 IN pa_project_assignments.attribute3%TYPE := FND_API.G_MISS_CHAR
7214 ,p_attribute4 IN pa_project_assignments.attribute4%TYPE := FND_API.G_MISS_CHAR
7215 ,p_attribute5 IN pa_project_assignments.attribute5%TYPE := FND_API.G_MISS_CHAR
7216 ,p_attribute6 IN pa_project_assignments.attribute6%TYPE := FND_API.G_MISS_CHAR
7217 ,p_attribute7 IN pa_project_assignments.attribute7%TYPE := FND_API.G_MISS_CHAR
7218 ,p_attribute8 IN pa_project_assignments.attribute8%TYPE := FND_API.G_MISS_CHAR
7219 ,p_attribute9 IN pa_project_assignments.attribute9%TYPE := FND_API.G_MISS_CHAR
7220 ,p_attribute10 IN pa_project_assignments.attribute10%TYPE := FND_API.G_MISS_CHAR
7221 ,p_attribute11 IN pa_project_assignments.attribute11%TYPE := FND_API.G_MISS_CHAR
7222 ,p_attribute12 IN pa_project_assignments.attribute12%TYPE := FND_API.G_MISS_CHAR
7223 ,p_attribute13 IN pa_project_assignments.attribute13%TYPE := FND_API.G_MISS_CHAR
7224 ,p_attribute14 IN pa_project_assignments.attribute14%TYPE := FND_API.G_MISS_CHAR
7225 ,p_attribute15 IN pa_project_assignments.attribute15%TYPE := FND_API.G_MISS_CHAR
7226 ,p_api_version IN NUMBER := 1.0
7227 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
7228 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
7229 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
7230 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
7231 ,x_success_assignment_id_tbl OUT NOCOPY system.pa_num_tbl_type -- For 1159 mandate changes bug#2674619
7232 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7233 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7234 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7235 )
7236 IS
7237
7238
7239 l_assignment_id_tbl system.pa_num_tbl_type;
7240
7241 l_subteam_party_id NUMBER;
7242 l_description pa_project_assignments.description%TYPE := NULL;
7243 l_additional_info pa_project_assignments.additional_information%TYPE := NULL;
7244 l_assignment_type pa_project_assignments.assignment_type%TYPE;
7245 l_start_date pa_project_assignments.start_date%TYPE;
7246 l_end_date pa_project_assignments.end_date%TYPE;
7247 l_msg_index_out NUMBER;
7248 l_return_status VARCHAR2(1);
7249
7250 l_min_resource_job_level pa_project_assignments.min_resource_job_level%TYPE;
7251 l_max_resource_job_level pa_project_assignments.max_resource_job_level%TYPE;
7252 l_fcst_job_id pa_project_assignments.fcst_job_id%TYPE;
7253 l_fcst_job_group_id pa_project_assignments.fcst_job_group_id%TYPE;
7254 l_expenditure_org_id pa_project_assignments.expenditure_org_id%TYPE;
7255 l_expenditure_organization_id pa_project_assignments.expenditure_organization_id%TYPE;
7256 l_fcst_job_name per_jobs.name%TYPE;
7257 l_fcst_job_group_name per_job_groups.displayed_name%TYPE;
7258 l_expenditure_org_name per_organization_units.name%TYPE;
7259 l_exp_organization_name per_organization_units.name%TYPE;
7260 l_fcst_tp_amount_type pa_project_assignments.fcst_tp_amount_type%TYPE;
7261 l_req_max_resource_job_level pa_project_assignments.max_resource_job_level%TYPE;
7262 l_req_min_resource_job_level pa_project_assignments.min_resource_job_level%TYPE;
7263 l_resource_id pa_resources.resource_id%TYPE;
7264
7265 CURSOR get_asgn_info(l_asmt_id NUMBER) IS
7266 SELECT ppsp.project_subteam_party_id, ppa.assignment_type, ppa.description, ppa.additional_information, ppa.start_date, ppa.end_date, ppa.min_resource_job_level, ppa.max_resource_job_level, ppa.resource_id
7267 FROM pa_project_assignments ppa,
7268 pa_project_subteam_parties ppsp
7269 WHERE ppa.assignment_id = l_asmt_id
7270 AND ppsp.object_type (+)= 'PA_PROJECT_ASSIGNMENTS'
7271 AND ppa.assignment_id = ppsp.object_id(+)
7272 AND ppsp.primary_subteam_flag(+) = 'Y';
7273
7274 BEGIN
7275
7276 --dbms_output.put_line('mass_update_assignments');
7277
7278 --should we clear the fnd_msg_pub stack right here?
7279 --if we will pass p_init_msg_list = false to the API
7280 --so that we don't clear the stack between assignments then we
7281 --should clear the stack here before we start looping.
7282 --open issue - waiting to find out how errors will be handled
7283 --in mass assign.
7284 --FND_MSG_PUB.initialize;
7285
7286 --assign local plsql table
7287 --update this local table for out x_success_assignment_id_tbl
7288 l_assignment_id_tbl := p_assignment_id_tbl;
7289
7290 --loop through the assignment ids and call execute_update_assignment
7291 --to actually update the assignment. This is the WF (offline) process
7292 FOR i IN p_assignment_id_tbl.FIRST .. p_assignment_id_tbl.LAST LOOP
7293
7294 OPEN get_asgn_info(p_assignment_id_tbl(i));
7295 FETCH get_asgn_info INTO l_subteam_party_id, l_assignment_type,l_description, l_additional_info, l_start_date, l_end_date, l_req_min_resource_job_level, l_req_max_resource_job_level, l_resource_id;
7296 CLOSE get_asgn_info;
7297
7298 --dbms_output.put_line('assignment id = '|| p_assignment_id_tbl(i));
7299 --dbms_output.put_line('assignment_type = '|| l_assignment_type);
7300
7301 --Check to see if original description need to be appended.
7302 IF p_description IS NOT NULL AND p_description <> FND_API.G_MISS_CHAR THEN
7303
7304 IF p_append_description_flag = 'Y' THEN
7305 -- Only get the first 2000 characters
7306 l_description := SUBSTR(l_description || p_description, 1, 2000);
7307 ELSE
7308 l_description := p_description;
7309 END IF;
7310 END IF;
7311
7312 --Check to see if original additional information need to be appended.
7313 IF p_additional_information IS NOT NULL AND p_additional_information <> FND_API.G_MISS_CHAR THEN
7314
7315 IF p_append_information_flag = 'Y' THEN
7316 -- Only get the first 2000 characters
7317 l_additional_info := SUBSTR(l_additional_info || p_additional_information, 1, 2000);
7318 ELSE
7319 l_additional_info := p_additional_information;
7320 END IF;
7321 END IF;
7322
7323 --If this is not a requirement, pass FND_API.G_MISS_CHAR/NUM
7324 --to the following parameters:
7325 IF l_assignment_type <> 'OPEN_ASSIGNMENT' THEN
7326 l_min_resource_job_level := FND_API.G_MISS_NUM;
7327 l_max_resource_job_level := FND_API.G_MISS_NUM;
7328 l_fcst_job_id := FND_API.G_MISS_NUM;
7329 l_fcst_job_group_id := FND_API.G_MISS_NUM;
7330 l_expenditure_org_id := FND_API.G_MISS_NUM;
7331 l_expenditure_organization_id := FND_API.G_MISS_NUM;
7332 l_fcst_job_name := FND_API.G_MISS_CHAR;
7333 l_fcst_job_group_name := FND_API.G_MISS_CHAR;
7334 l_expenditure_org_name := FND_API.G_MISS_CHAR;
7335 l_exp_organization_name := FND_API.G_MISS_CHAR;
7336 ELSE
7337 l_min_resource_job_level := p_min_resource_job_level;
7338 l_max_resource_job_level := p_max_resource_job_level;
7339 l_fcst_job_id := p_fcst_job_id;
7340 l_fcst_job_group_id := p_fcst_job_group_id;
7341 l_expenditure_org_id := p_expenditure_org_id;
7342 l_expenditure_organization_id := p_expenditure_organization_id;
7343 l_fcst_job_name := p_fcst_job_name;
7344 l_fcst_job_group_name := p_fcst_job_group_name;
7345 l_expenditure_org_name := p_expenditure_org_name;
7346 l_exp_organization_name := p_exp_organization_name;
7347 END IF;
7348
7349 --If this is admin assigment, pass FND_API.G_MISS_CHAR
7350 --to the following parameter:
7351 IF l_assignment_type = 'STAFFED_ADMIN_ASSIGNMENT' THEN
7352 l_fcst_tp_amount_type := FND_API.G_MISS_CHAR;
7353 ELSE
7354 l_fcst_tp_amount_type := p_fcst_tp_amount_type;
7355 END IF;
7356
7357 --dbms_output.put_line('before calling Execute_Update_Assignment ');
7358
7359 --1. If user chooses not to update a field on the Mass Update page
7360 -- client side will pass in NULL to the corresponding parameters;
7361 --2. If user updates Forecasting Info
7362 -- client side will pass in NULL to the parameters corresponding to
7363 -- Basic Info section and vice versa
7364 --Therefore, for Mass Update, if any parameters are passed in as NULL
7365 -- set them to FND_API.G_MISS_NUM/CHAR
7366 -- 3. Pass in the min and max resource job level of the requirement
7367 -- if NULL was passed in from the client side. This is to ensure
7368 -- validation on min and max job level is done even if user
7369 -- specifies only min job level or only max job level for mass update
7370
7371 --call execute_update_assignment
7372 pa_assignments_pub.Execute_Update_Assignment
7373 ( p_asgn_update_mode => p_update_mode
7374 ,p_assignment_id => p_assignment_id_tbl(i)
7375 ,p_record_version_number => NULL
7376 ,p_assignment_type => l_assignment_type
7377 ,p_assignment_name => nvl(p_assignment_name, FND_API.G_MISS_CHAR)
7378 ,p_staffing_priority_code => nvl(p_staffing_priority_code, FND_API.G_MISS_CHAR)
7379 ,p_project_id => p_project_id
7380 ,p_project_subteam_id => nvl(p_project_subteam_id, FND_API.G_MISS_NUM)
7381 ,p_project_subteam_party_id => l_subteam_party_id
7382 ,p_description => nvl(l_description, FND_API.G_MISS_CHAR)
7383 ,p_extension_possible => nvl(p_extension_possible, FND_API.G_MISS_CHAR)
7384 ,p_min_resource_job_level => nvl(l_min_resource_job_level, l_req_min_resource_job_level)
7385 ,p_max_resource_job_level => nvl(l_max_resource_job_level, l_req_max_resource_job_level)
7386 ,p_additional_information => nvl(l_additional_info, FND_API.G_MISS_CHAR)
7387 ,p_location_id => nvl(p_location_id, FND_API.G_MISS_NUM)
7388 ,p_work_type_id => nvl(p_work_type_id, FND_API.G_MISS_NUM)
7389 ,p_expense_owner => nvl(p_expense_owner, FND_API.G_MISS_CHAR)
7390 ,p_expense_limit => nvl(p_expense_limit, FND_API.G_MISS_NUM)
7391 ,p_expense_limit_currency_code => nvl(p_expense_limit_currency_code, FND_API.G_MISS_CHAR)
7392 ,p_fcst_tp_amount_type => nvl(p_fcst_tp_amount_type, FND_API.G_MISS_CHAR)
7393 ,p_fcst_job_id => nvl(p_fcst_job_id, FND_API.G_MISS_NUM)
7394 ,p_fcst_job_group_id => nvl(p_fcst_job_group_id, FND_API.G_MISS_NUM)
7395 ,p_expenditure_org_id => nvl(p_expenditure_org_id, FND_API.G_MISS_NUM)
7396 ,p_expenditure_organization_id => nvl(p_expenditure_organization_id, FND_API.G_MISS_NUM)
7397 ,p_expenditure_type_class => nvl(p_expenditure_type_class, FND_API.G_MISS_CHAR)
7398 ,p_expenditure_type => nvl(p_expenditure_type, FND_API.G_MISS_CHAR)
7399 ,p_project_subteam_name => nvl(p_project_subteam_name, FND_API.G_MISS_CHAR)
7400 ,p_staffing_priority_name => nvl(p_staffing_priority_name, FND_API.G_MISS_CHAR)
7401 ,p_location_city => nvl(p_location_city, FND_API.G_MISS_CHAR)
7402 ,p_location_region => nvl(p_location_region, FND_API.G_MISS_CHAR)
7403 ,p_location_country_name => nvl(p_location_country_name, FND_API.G_MISS_CHAR)
7404 ,p_location_country_code => nvl(p_location_country_code, FND_API.G_MISS_CHAR)
7405 ,p_work_type_name => nvl(p_work_type_name, FND_API.G_MISS_CHAR)
7406 ,p_fcst_job_name => nvl(p_fcst_job_name, FND_API.G_MISS_CHAR)
7407 ,p_fcst_job_group_name => nvl(p_fcst_job_group_name, FND_API.G_MISS_CHAR)
7408 ,p_expenditure_org_name => nvl(p_expenditure_org_name, FND_API.G_MISS_CHAR)
7409 ,p_exp_organization_name => nvl(p_exp_organization_name, FND_API.G_MISS_CHAR)
7410 ,p_resource_id => nvl(l_resource_id, FND_API.G_MISS_NUM)
7411 ,p_comp_match_weighting => nvl(p_comp_match_weighting, FND_API.G_MISS_NUM)
7412 ,p_avail_match_weighting => nvl(p_avail_match_weighting, FND_API.G_MISS_NUM)
7413 ,p_job_level_match_weighting => nvl(p_job_level_match_weighting, FND_API.G_MISS_NUM)
7414 ,p_search_min_availability => nvl(p_search_min_availability, FND_API.G_MISS_NUM)
7415 ,p_search_country_code => nvl(p_search_country_code, FND_API.G_MISS_CHAR)
7416 ,p_search_country_name => nvl(p_search_country_name, FND_API.G_MISS_CHAR)
7417 ,p_search_exp_org_struct_ver_id => nvl(p_search_exp_org_struct_ver_id, FND_API.G_MISS_NUM)
7418 ,p_search_exp_org_hier_name => nvl(p_search_exp_org_hier_name, FND_API.G_MISS_CHAR)
7419
7420 ,p_search_exp_start_org_id => nvl(p_search_exp_start_org_id, FND_API.G_MISS_NUM)
7421 ,p_search_exp_start_org_name => nvl(p_search_exp_start_org_name, FND_API.G_MISS_CHAR)
7422 ,p_search_min_candidate_score => nvl(p_search_min_candidate_score, FND_API.G_MISS_NUM)
7423 ,p_enable_auto_cand_nom_flag => nvl(p_enable_auto_cand_nom_flag, FND_API.G_MISS_CHAR)
7424 -- FP.L Development
7425 ,p_staffing_owner_person_id => nvl(p_staffing_owner_person_id, FND_API.G_MISS_NUM)
7426 ,p_staffing_owner_name => nvl(p_staffing_owner_name, FND_API.G_MISS_CHAR)
7427 ,p_attribute_category => nvl(p_attribute_category, FND_API.G_MISS_CHAR)
7428 ,p_attribute1 => nvl(p_attribute1, FND_API.G_MISS_CHAR)
7429 ,p_attribute2 => nvl(p_attribute2, FND_API.G_MISS_CHAR)
7430 ,p_attribute3 => nvl(p_attribute3, FND_API.G_MISS_CHAR)
7431 ,p_attribute4 => nvl(p_attribute4, FND_API.G_MISS_CHAR)
7432 ,p_attribute5 => nvl(p_attribute5, FND_API.G_MISS_CHAR)
7433 ,p_attribute6 => nvl(p_attribute6, FND_API.G_MISS_CHAR)
7434 ,p_attribute7 => nvl(p_attribute7, FND_API.G_MISS_CHAR)
7435 ,p_attribute8 => nvl(p_attribute8, FND_API.G_MISS_CHAR)
7436 ,p_attribute9 => nvl(p_attribute9, FND_API.G_MISS_CHAR)
7437 ,p_attribute10 => nvl(p_attribute10, FND_API.G_MISS_CHAR)
7438 ,p_attribute11 => nvl(p_attribute11, FND_API.G_MISS_CHAR)
7439 ,p_attribute12 => nvl(p_attribute12, FND_API.G_MISS_CHAR)
7440 ,p_attribute13 => nvl(p_attribute13, FND_API.G_MISS_CHAR)
7441 ,p_attribute14 => nvl(p_attribute14, FND_API.G_MISS_CHAR)
7442 ,p_attribute15 => nvl(p_attribute15, FND_API.G_MISS_CHAR)
7443 ,p_api_version => p_api_version
7444 ,p_init_msg_list => p_init_msg_list
7445 ,p_commit => p_commit
7446 ,p_validate_only => p_validate_only
7447 ,p_max_msg_count => p_max_msg_count
7448 ,x_return_status => x_return_status
7449 ,x_msg_count => x_msg_count
7450 ,x_msg_data => x_msg_data
7451 );
7452
7453 --dbms_output.put_line('after calling execute_update_assignment');
7454
7455 --if successful and update mode is 'update forecast'
7456 --then call forecast API to generate forecast items
7457 IF x_return_status = FND_API.G_RET_STS_SUCCESS AND
7458 p_update_mode = PA_MASS_ASGMT_TRX.G_MASS_UPDATE_FORECAST_ITEMS THEN
7459
7460 --dbms_output.put_line('calling PA_FORECASTITEM_PVT.Create_Forecast_Item');
7461
7462 PA_FORECASTITEM_PVT.Create_Forecast_Item(
7463 p_assignment_id => l_assignment_id_tbl(i)
7464 ,p_start_date => l_start_date
7465 ,p_end_date => l_end_date
7466 ,p_process_mode => 'GENERATE'
7467 ,x_return_status => x_return_status
7468 ,x_msg_count => x_msg_count
7469 ,x_msg_data => x_msg_data
7470 );
7471
7472 --dbms_output.put_line('after calling PA_FORECASTITEM_PVT.Create_Forecast_Item');
7473
7474 END IF;
7475
7476 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7477 l_assignment_id_tbl(i) := NULL;
7478
7479 PA_MESSAGE_UTILS.save_messages(p_user_id => PA_MASS_ASGMT_TRX.G_SUBMITTER_USER_ID,
7480 p_source_type1 => PA_MASS_ASGMT_TRX.G_SOURCE_TYPE1,
7481 p_source_type2 => p_update_mode,
7482 p_source_identifier1 => PA_MASS_ASGMT_TRX.G_WORKFLOW_ITEM_TYPE,
7483 p_source_identifier2 => PA_MASS_ASGMT_TRX.G_WORKFLOW_ITEM_KEY,
7484 p_context1 => p_project_id,
7485 p_context2 => p_assignment_id_tbl(i),
7486 p_context3 => NULL,
7487 p_commit => FND_API.G_TRUE,
7488 x_return_status => l_return_status);
7489 END IF;
7490
7491 END LOOP;
7492
7493 x_success_assignment_id_tbl := l_assignment_id_tbl;
7494
7495 --
7496 -- IF the number of messaages is 1 then fetch the message code from the stack and return its text
7497 --
7498 x_msg_count := FND_MSG_PUB.Count_Msg;
7499 IF x_msg_count = 1 THEN
7500 pa_interface_utils_pub.get_messages ( p_encoded => FND_API.G_TRUE
7501 ,p_msg_index => 1
7502 ,p_data => x_msg_data
7503 ,p_msg_index_out => l_msg_index_out
7504 );
7505 END IF;
7506
7507 -- Reset the error stack when returning to the calling program
7508 PA_DEBUG.Reset_Err_Stack;
7509
7510 -- If any errors exist then set the x_return_status to 'E'
7511
7512 IF x_msg_count > 0 THEN
7513
7514 x_return_status := FND_API.G_RET_STS_ERROR;
7515
7516 END IF;
7517
7518 EXCEPTION
7519 WHEN OTHERS THEN
7520 -- Set the exception Message and the stack
7521 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Mass_Update_Assignment'
7522 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
7523 --
7524 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7525 RAISE;
7526
7527
7528
7529 END Mass_Update_Assignments;
7530
7531
7532 PROCEDURE Execute_Update_Requirement
7533
7534 ( p_asgn_update_mode IN VARCHAR2 := FND_API.G_MISS_CHAR
7535 ,p_assignment_row_id IN ROWID := NULL
7536 ,p_assignment_id IN pa_project_assignments.assignment_id%TYPE := FND_API.G_MISS_NUM
7537 ,p_record_version_number IN NUMBER := FND_API.G_MISS_NUM
7538 ,p_assignment_name IN pa_project_assignments.assignment_name%TYPE := FND_API.G_MISS_CHAR
7539 ,p_assignment_type IN pa_project_assignments.assignment_type%TYPE := FND_API.G_MISS_CHAR
7540 ,p_multiple_status_flag IN pa_project_assignments.multiple_status_flag%TYPE := FND_API.G_MISS_CHAR
7541 ,p_project_status_name IN pa_project_statuses.project_status_name%TYPE := FND_API.G_MISS_CHAR
7542 ,p_status_code IN pa_project_assignments.status_code%TYPE := FND_API.G_MISS_CHAR
7543 ,p_start_date IN pa_project_assignments.start_date%TYPE := FND_API.G_MISS_DATE
7544 ,p_end_date IN pa_project_assignments.end_date%TYPE := FND_API.G_MISS_DATE
7545 ,p_staffing_priority_code IN pa_project_assignments.staffing_priority_code%TYPE := FND_API.G_MISS_CHAR
7546 ,p_project_id IN pa_project_assignments.project_id%TYPE := FND_API.G_MISS_NUM
7547 ,p_assignment_template_id IN pa_project_assignments.assignment_template_id%TYPE := FND_API.G_MISS_NUM
7548 ,p_project_role_id IN pa_project_assignments.project_role_id%TYPE := FND_API.G_MISS_NUM
7549 ,p_project_party_id IN pa_project_assignments.project_party_id%TYPE := FND_API.G_MISS_NUM
7550 ,p_project_subteam_id IN pa_project_subteams.project_subteam_id%TYPE := FND_API.G_MISS_NUM
7551 ,p_project_subteam_party_id IN pa_project_subteam_parties.project_subteam_party_id%TYPE := FND_API.G_MISS_NUM
7552 ,p_description IN pa_project_assignments.description%TYPE := FND_API.G_MISS_CHAR
7553 ,p_assignment_effort IN pa_project_assignments.assignment_effort%TYPE := FND_API.G_MISS_NUM
7554 ,p_extension_possible IN pa_project_assignments.extension_possible%TYPE := FND_API.G_MISS_CHAR
7555 ,p_source_assignment_id IN pa_project_assignments.source_assignment_id%TYPE := FND_API.G_MISS_NUM
7556 ,p_min_resource_job_level IN pa_project_assignments.min_resource_job_level%TYPE := FND_API.G_MISS_NUM
7557 ,p_max_resource_job_level IN pa_project_assignments.max_resource_job_level%TYPE := FND_API.G_MISS_NUM
7558 ,p_assignment_number IN pa_project_assignments.assignment_number%TYPE := FND_API.G_MISS_NUM
7559 ,p_additional_information IN pa_project_assignments.additional_information%TYPE := FND_API.G_MISS_CHAR
7560 ,p_location_id IN pa_project_assignments.location_id%TYPE := FND_API.G_MISS_NUM
7561 ,p_work_type_id IN pa_project_assignments.work_type_id%TYPE := FND_API.G_MISS_NUM
7562 ,p_revenue_currency_code IN pa_project_assignments.revenue_currency_code%TYPE := FND_API.G_MISS_CHAR
7563 ,p_revenue_bill_rate IN pa_project_assignments.revenue_bill_rate%TYPE := FND_API.G_MISS_NUM
7564 ,p_markup_percent IN pa_project_assignments.markup_percent%TYPE := FND_API.G_MISS_NUM
7565 ,p_expense_owner IN pa_project_assignments.expense_owner%TYPE := FND_API.G_MISS_CHAR
7566 ,p_expense_limit IN pa_project_assignments.expense_limit%TYPE := FND_API.G_MISS_NUM
7567 ,p_expense_limit_currency_code IN pa_project_assignments.expense_limit_currency_code%TYPE := FND_API.G_MISS_CHAR
7568 ,p_fcst_tp_amount_type IN pa_project_assignments.fcst_tp_amount_type%TYPE := FND_API.G_MISS_CHAR
7569 ,p_fcst_job_id IN pa_project_assignments.fcst_job_id%TYPE := FND_API.G_MISS_NUM
7570 ,p_fcst_job_group_id IN pa_project_assignments.fcst_job_group_id%TYPE := FND_API.G_MISS_NUM
7571 ,p_expenditure_org_id IN pa_project_assignments.expenditure_org_id%TYPE := FND_API.G_MISS_NUM
7572 ,p_expenditure_organization_id IN pa_project_assignments.expenditure_organization_id%TYPE := FND_API.G_MISS_NUM
7573 ,p_expenditure_type_class IN pa_project_assignments.expenditure_type_class%TYPE := FND_API.G_MISS_CHAR
7574 ,p_expenditure_type IN pa_project_assignments.expenditure_type%TYPE := FND_API.G_MISS_CHAR
7575 ,p_project_number IN pa_projects_all.segment1%TYPE := FND_API.G_MISS_CHAR /* Bug 1851096 */
7576 ,p_resource_name IN pa_resources.name%TYPE := FND_API.G_MISS_CHAR
7577 ,p_resource_source_id IN NUMBER := FND_API.G_MISS_NUM
7578 ,p_resource_id IN pa_resources.resource_id%TYPE := FND_API.G_MISS_NUM
7579 ,p_project_subteam_name IN pa_project_subteams.name%TYPE := FND_API.G_MISS_CHAR
7580 ,p_staffing_priority_name IN pa_lookups.meaning%TYPE := FND_API.G_MISS_CHAR
7581 ,p_project_role_name IN pa_project_role_types.meaning%TYPE := FND_API.G_MISS_CHAR
7582 ,p_location_city IN pa_locations.city%TYPE := FND_API.G_MISS_CHAR
7583 ,p_location_region IN pa_locations.region%TYPE := FND_API.G_MISS_CHAR
7584 ,p_location_country_name IN fnd_territories_tl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
7585 ,p_location_country_code IN pa_locations.country_code%TYPE := FND_API.G_MISS_CHAR
7586 ,p_calendar_name IN jtf_calendars_tl.calendar_name%TYPE := FND_API.G_MISS_CHAR
7587 ,p_calendar_id IN jtf_calendars_tl.calendar_id%TYPE := FND_API.G_MISS_NUM
7588 ,p_work_type_name IN pa_work_types_vl.name%TYPE := FND_API.G_MISS_CHAR
7589 ,p_fcst_job_name IN per_jobs.name%TYPE := FND_API.G_MISS_CHAR
7590 ,p_fcst_job_group_name IN per_job_groups.displayed_name%TYPE := FND_API.G_MISS_CHAR
7591 ,p_expenditure_org_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
7592 ,p_exp_organization_name IN per_organization_units.name%TYPE := FND_API.G_MISS_CHAR
7593 ,p_comp_match_weighting IN pa_project_assignments.competence_match_weighting%TYPE := FND_API.G_MISS_NUM
7594 ,p_avail_match_weighting IN pa_project_assignments.availability_match_weighting%TYPE := FND_API.G_MISS_NUM
7595 ,p_job_level_match_weighting IN pa_project_assignments.job_level_match_weighting%TYPE := FND_API.G_MISS_NUM
7596 ,p_search_min_availability IN pa_project_assignments.search_min_availability%TYPE := FND_API.G_MISS_NUM
7597 ,p_search_country_code IN pa_project_assignments.search_country_code%TYPE := FND_API.G_MISS_CHAR
7598 ,p_search_country_name IN fnd_territories_vl.territory_short_name%TYPE := FND_API.G_MISS_CHAR
7599 ,p_search_exp_org_struct_ver_id IN pa_project_assignments.search_exp_org_struct_ver_id%TYPE := FND_API.G_MISS_NUM
7600 ,p_search_exp_org_hier_name IN per_organization_structures.name%TYPE := FND_API.G_MISS_CHAR
7601 ,p_search_exp_start_org_id IN pa_project_assignments.search_exp_start_org_id%TYPE := FND_API.G_MISS_NUM
7602 ,p_search_exp_start_org_name IN hr_organization_units.name%TYPE := FND_API.G_MISS_CHAR
7603 ,p_search_min_candidate_score IN pa_project_assignments.search_min_candidate_score%TYPE := FND_API.G_MISS_NUM
7604 ,p_enable_auto_cand_nom_flag IN pa_project_assignments.enable_auto_cand_nom_flag%TYPE := FND_API.G_MISS_CHAR
7605 ,p_bill_rate_override IN pa_project_assignments.bill_rate_override%TYPE := FND_API.G_MISS_NUM
7606 ,p_bill_rate_curr_override IN pa_project_assignments.bill_rate_curr_override%TYPE := FND_API.G_MISS_CHAR
7607 ,p_markup_percent_override IN pa_project_assignments.markup_percent_override%TYPE := FND_API.G_MISS_NUM
7608 ,p_discount_percentage IN pa_project_assignments.discount_percentage%TYPE := FND_API.G_MISS_NUM -- Bug 2590938
7609 ,p_rate_disc_reason_code IN pa_project_assignments.rate_disc_reason_code%TYPE := FND_API.G_MISS_CHAR -- Bug 2590938
7610 ,p_tp_rate_override IN pa_project_assignments.tp_rate_override%TYPE := FND_API.G_MISS_NUM
7611 ,p_tp_currency_override IN pa_project_assignments.tp_currency_override%TYPE := FND_API.G_MISS_CHAR
7612 ,p_tp_calc_base_code_override IN pa_project_assignments.tp_calc_base_code_override%TYPE := FND_API.G_MISS_CHAR
7613 ,p_tp_percent_applied_override IN pa_project_assignments.tp_percent_applied_override%TYPE := FND_API.G_MISS_NUM
7614 ,p_staffing_owner_person_id IN pa_project_assignments.staffing_owner_person_id%TYPE := FND_API.G_MISS_NUM
7615 ,p_staffing_owner_name IN per_people_f.full_name%TYPE := FND_API.G_MISS_CHAR
7616 ,p_attribute_category IN pa_project_assignments.attribute_category%TYPE := FND_API.G_MISS_CHAR
7617 ,p_attribute1 IN pa_project_assignments.attribute1%TYPE := FND_API.G_MISS_CHAR
7618 ,p_attribute2 IN pa_project_assignments.attribute2%TYPE := FND_API.G_MISS_CHAR
7619 ,p_attribute3 IN pa_project_assignments.attribute3%TYPE := FND_API.G_MISS_CHAR
7620 ,p_attribute4 IN pa_project_assignments.attribute4%TYPE := FND_API.G_MISS_CHAR
7621 ,p_attribute5 IN pa_project_assignments.attribute5%TYPE := FND_API.G_MISS_CHAR
7622 ,p_attribute6 IN pa_project_assignments.attribute6%TYPE := FND_API.G_MISS_CHAR
7623 ,p_attribute7 IN pa_project_assignments.attribute7%TYPE := FND_API.G_MISS_CHAR
7624 ,p_attribute8 IN pa_project_assignments.attribute8%TYPE := FND_API.G_MISS_CHAR
7625 ,p_attribute9 IN pa_project_assignments.attribute9%TYPE := FND_API.G_MISS_CHAR
7626 ,p_attribute10 IN pa_project_assignments.attribute10%TYPE := FND_API.G_MISS_CHAR
7627 ,p_attribute11 IN pa_project_assignments.attribute11%TYPE := FND_API.G_MISS_CHAR
7628 ,p_attribute12 IN pa_project_assignments.attribute12%TYPE := FND_API.G_MISS_CHAR
7629 ,p_attribute13 IN pa_project_assignments.attribute13%TYPE := FND_API.G_MISS_CHAR
7630 ,p_attribute14 IN pa_project_assignments.attribute14%TYPE := FND_API.G_MISS_CHAR
7631 ,p_attribute15 IN pa_project_assignments.attribute15%TYPE := FND_API.G_MISS_CHAR
7632 ,p_api_version IN NUMBER := 1.0
7633 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
7634 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
7635 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
7636 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
7637 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7638 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7639 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7640 )
7641
7642 IS
7643 l_assignment_rec PA_ASSIGNMENTS_PUB.Assignment_Rec_Type;
7644 l_return_status VARCHAR2(1);
7645 l_exists VARCHAR2(1) := 'N';
7646 l_return_code VARCHAR2(1);
7647
7648 BEGIN
7649
7650 --dbms_output.put_line('Beginning Execute_Update_Assignment');
7651 -- Initialize the Error Stack
7652 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Execute_Update_Assignment');
7653
7654
7655 --Log Message
7656 IF P_DEBUG_MODE = 'Y' THEN
7657 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Execute_Update_Requirement.begin'
7658 ,x_msg => 'Beginning of Execute_Update_Assignment'
7659 ,x_log_level => 5);
7660 END IF;
7661
7662 --Clear the global PL/SQL message table
7663 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
7664 FND_MSG_PUB.initialize;
7665 END IF;
7666
7667 BEGIN
7668 SELECT 'Y'
7669 INTO l_exists
7670 FROM pa_project_assignments asgn
7671 ,pa_project_subteam_parties psp
7672 ,pa_locations loc
7673 WHERE asgn.project_id = p_project_id
7674 AND asgn.assignment_id = p_assignment_id
7675 AND asgn.assignment_name = p_assignment_name
7676 AND asgn.min_resource_job_level = p_min_resource_job_level
7677 AND asgn.max_resource_job_level = p_max_resource_job_level
7678 AND asgn.staffing_priority_code = p_staffing_priority_code
7679 AND asgn.staffing_owner_person_id = p_staffing_owner_person_id
7680 AND asgn.description = p_description
7681 AND asgn.additional_information = p_additional_information
7682 AND psp.project_subteam_id = p_project_subteam_id
7683 AND loc.country_code = p_location_country_code
7684 AND loc.region = p_location_region
7685 AND loc.city = p_location_city
7686 AND asgn.assignment_id = psp.object_id (+)
7687 AND psp.object_type(+) = 'PA_PROJECT_ASSIGNMENTS'
7688 AND psp.primary_subteam_flag(+) = 'Y'
7689 AND asgn.location_id = loc.location_id (+);
7690
7691 EXCEPTION
7692 WHEN NO_DATA_FOUND THEN
7693 PA_SECURITY_PVT.CHECK_USER_PRIVILEGE(
7694 x_ret_code => l_return_code,
7695 x_return_status => x_return_status,
7696 x_msg_count => x_msg_count,
7697 x_msg_data => x_msg_data,
7698 p_privilege => 'PA_ASN_BASIC_INFO_ED',
7699 p_object_name => 'PA_PROJECTS',
7700 p_object_key => p_project_id);
7701
7702 IF l_return_code <> FND_API.G_TRUE THEN
7703
7704 PA_SECURITY_PVT.CHECK_USER_PRIVILEGE(
7705 x_ret_code => l_return_code,
7706 x_return_status => x_return_status,
7707 x_msg_count => x_msg_count,
7708 x_msg_data => x_msg_data,
7709 p_privilege => 'PA_ASN_BASIC_INFO_ED',
7710 p_object_name => 'PA_PROJECT_ASSIGNMENTS',
7711 p_object_key => p_assignment_id);
7712
7713 IF l_return_code <> FND_API.G_TRUE THEN
7714 pa_utils.add_message (p_app_short_name => 'PA',
7715 p_msg_name => 'PA_UPD_ASGN_BASIC_INFO');
7716 END IF;
7717 END IF;
7718 END;
7719
7720 BEGIN
7721 SELECT 'Y'
7722 INTO l_exists
7723 FROM pa_project_assignments
7724 WHERE project_id = p_project_id
7725 AND assignment_id = p_assignment_id
7726 AND competence_match_weighting = p_comp_match_weighting
7727 AND availability_match_weighting = p_avail_match_weighting
7728 AND job_level_match_weighting = p_job_level_match_weighting
7729 AND enable_auto_cand_nom_flag = p_enable_auto_cand_nom_flag
7730 AND search_min_availability = p_search_min_availability
7731 AND search_exp_org_struct_ver_id = p_search_exp_org_struct_ver_id
7732 AND search_exp_start_org_id = p_search_exp_start_org_id
7733 AND search_country_code = p_search_country_code
7734 AND search_min_candidate_score = p_search_min_candidate_score;
7735
7736 EXCEPTION
7737 WHEN NO_DATA_FOUND THEN
7738 PA_SECURITY_PVT.CHECK_USER_PRIVILEGE(
7739 x_ret_code => l_return_code,
7740 x_return_status => x_return_status,
7741 x_msg_count => x_msg_count,
7742 x_msg_data => x_msg_data,
7743 p_privilege => 'PA_CREATE_CANDIDATES',
7744 p_object_name => 'PA_PROJECTS',
7745 p_object_key => p_project_id);
7746
7747 IF l_return_code <> FND_API.G_TRUE THEN
7748 PA_SECURITY_PVT.CHECK_USER_PRIVILEGE(
7749 x_ret_code => l_return_code,
7750 x_return_status => x_return_status,
7751 x_msg_count => x_msg_count,
7752 x_msg_data => x_msg_data,
7753 p_privilege => 'PA_CREATE_CANDIDATES',
7754 p_object_name => 'PA_PROJECT_ASSIGNMENTS',
7755 p_object_key => p_assignment_id);
7756
7757 IF l_return_code <> FND_API.G_TRUE THEN
7758 pa_utils.add_message (p_app_short_name => 'PA',
7759 p_msg_name => 'PA_UPD_ASGN_CANDIDATE');
7760 END IF;
7761 END IF;
7762 END;
7763
7764 BEGIN
7765 SELECT 'Y'
7766 INTO l_exists
7767 FROM pa_project_assignments
7768 WHERE project_id = p_project_id
7769 AND assignment_id = p_assignment_id
7770 AND extension_possible = p_extension_possible
7771 AND expense_owner = p_expense_owner
7772 AND expense_limit = p_expense_limit
7773 AND expenditure_org_id = p_expenditure_org_id
7774 AND expenditure_organization_id = p_expenditure_organization_id
7775 AND expenditure_type_class = p_expenditure_type_class
7776 AND fcst_job_group_id = p_fcst_job_group_id
7777 AND fcst_job_id = p_fcst_job_id
7778 AND work_type_id = p_fcst_job_id;
7779
7780 EXCEPTION
7781 WHEN NO_DATA_FOUND THEN
7782 PA_SECURITY_PVT.CHECK_USER_PRIVILEGE(
7783 x_ret_code => l_return_code,
7784 x_return_status => x_return_status,
7785 x_msg_count => x_msg_count,
7786 x_msg_data => x_msg_data,
7787 p_privilege => 'PA_ASN_FCST_INFO_ED',
7788 p_object_name => 'PA_PROJECTS',
7789 p_object_key => p_project_id);
7790
7791 IF l_return_code <> FND_API.G_TRUE THEN
7792 PA_SECURITY_PVT.CHECK_USER_PRIVILEGE(
7793 x_ret_code => l_return_code,
7794 x_return_status => x_return_status,
7795 x_msg_count => x_msg_count,
7796 x_msg_data => x_msg_data,
7797 p_privilege => 'PA_CREATE_CANDIDATES',
7798 p_object_name => 'PA_PROJECT_ASSIGNMENTS',
7799 p_object_key => p_assignment_id);
7800
7801 IF l_return_code <> FND_API.G_TRUE THEN
7802 pa_utils.add_message (p_app_short_name => 'PA',
7803 p_msg_name => 'PA_UPD_ASGN_FIN_INFO');
7804 END IF;
7805 END IF;
7806 END;
7807
7808 IF FND_MSG_PUB.Count_Msg > 0 THEN
7809 RAISE FND_API.G_EXC_ERROR;
7810 END IF;
7811
7812 -- Assign the scalar parameters to the assignment record fields
7813 l_assignment_rec.assignment_row_id := p_assignment_row_id;
7814 l_assignment_rec.assignment_id := p_assignment_id;
7815 l_assignment_rec.record_version_number := p_record_version_number;
7816 l_assignment_rec.assignment_name := p_assignment_name;
7817 l_assignment_rec.assignment_type := p_assignment_type;
7818 l_assignment_rec.multiple_status_flag := p_multiple_status_flag;
7819 l_assignment_rec.staffing_priority_code := p_staffing_priority_code;
7820 l_assignment_rec.project_id := p_project_id;
7821 l_assignment_rec.assignment_template_id := p_assignment_template_id;
7822 l_assignment_rec.project_role_id := p_project_role_id;
7823 l_assignment_rec.project_party_id := p_project_party_id;
7824 l_assignment_rec.description := p_description;
7825 l_assignment_rec.assignment_effort := p_assignment_effort;
7826 l_assignment_rec.extension_possible := p_extension_possible;
7827 l_assignment_rec.source_assignment_id := p_source_assignment_id;
7828
7829 l_assignment_rec.min_resource_job_level := p_min_resource_job_level;
7830 l_assignment_rec.max_resource_job_level := p_max_resource_job_level;
7831 l_assignment_rec.assignment_number := p_assignment_number;
7832 l_assignment_rec.additional_information := p_additional_information;
7833 l_assignment_rec.work_type_id := p_work_type_id;
7834 l_assignment_rec.location_id := p_location_id;
7835 l_assignment_rec.revenue_currency_code := p_revenue_currency_code;
7836 l_assignment_rec.revenue_bill_rate := p_revenue_bill_rate;
7837 l_assignment_rec.markup_percent := p_markup_percent;
7838 l_assignment_rec.expense_owner := p_expense_owner;
7839 l_assignment_rec.expense_limit := p_expense_limit;
7840 l_assignment_rec.expense_limit_currency_code := p_expense_limit_currency_code;
7841
7842 l_assignment_rec.fcst_tp_amount_type := p_fcst_tp_amount_type;
7843 l_assignment_rec.fcst_job_id := p_fcst_job_id;
7844 l_assignment_rec.fcst_job_group_id := p_fcst_job_group_id;
7845 l_assignment_rec.expenditure_org_id := p_expenditure_org_id;
7846 l_assignment_rec.expenditure_organization_id := p_expenditure_organization_id;
7847
7848 l_assignment_rec.expenditure_type_class := p_expenditure_type_class;
7849 l_assignment_rec.expenditure_type := p_expenditure_type;
7850 l_assignment_rec.comp_match_weighting := p_comp_match_weighting;
7851 l_assignment_rec.avail_match_weighting := p_avail_match_weighting;
7852 l_assignment_rec.job_level_match_weighting := p_job_level_match_weighting;
7853 l_assignment_rec.search_min_availability := p_search_min_availability;
7854 l_assignment_rec.search_country_code := p_search_country_code;
7855 l_assignment_rec.search_exp_org_struct_ver_id := p_search_exp_org_struct_ver_id;
7856
7857 l_assignment_rec.search_exp_start_org_id := p_search_exp_start_org_id;
7858 l_assignment_rec.search_min_candidate_score := p_search_min_candidate_score;
7859 l_assignment_rec.enable_auto_cand_nom_flag := p_enable_auto_cand_nom_flag;
7860 l_assignment_rec.bill_rate_override := p_bill_rate_override;
7861 l_assignment_rec.bill_rate_curr_override := p_bill_rate_curr_override;
7862 l_assignment_rec.markup_percent_override := p_markup_percent_override;
7863 l_assignment_rec.discount_percentage := p_discount_percentage;
7864
7865 l_assignment_rec.rate_disc_reason_code := p_rate_disc_reason_code;
7866 l_assignment_rec.tp_rate_override := p_tp_rate_override;
7867 l_assignment_rec.tp_currency_override := p_tp_currency_override;
7868 l_assignment_rec.tp_calc_base_code_override := p_tp_calc_base_code_override;
7869 l_assignment_rec.tp_percent_applied_override := p_tp_percent_applied_override;
7870 l_assignment_rec.staffing_owner_person_id := p_staffing_owner_person_id;
7871
7872 l_assignment_rec.attribute_category := p_attribute_category;
7873 l_assignment_rec.attribute1 := p_attribute1;
7874 l_assignment_rec.attribute2 := p_attribute2;
7875 l_assignment_rec.attribute3 := p_attribute3;
7876 l_assignment_rec.attribute4 := p_attribute4;
7877 l_assignment_rec.attribute5 := p_attribute5;
7878 l_assignment_rec.attribute6 := p_attribute6;
7879 l_assignment_rec.attribute7 := p_attribute7;
7880 l_assignment_rec.attribute8 := p_attribute8;
7881 l_assignment_rec.attribute9 := p_attribute9;
7882 l_assignment_rec.attribute10 := p_attribute10;
7883 l_assignment_rec.attribute11 := p_attribute11;
7884 l_assignment_rec.attribute12 := p_attribute12;
7885 l_assignment_rec.attribute13 := p_attribute13;
7886 l_assignment_rec.attribute14 := p_attribute14;
7887 l_assignment_rec.attribute15 := p_attribute15;
7888
7889 --dbms_output.put_line('Calling Update_Assignment');
7890 PA_ASSIGNMENTS_PUB.Update_Assignment
7891 ( p_assignment_rec => l_assignment_rec
7892 ,p_asgn_update_mode => p_asgn_update_mode
7893 ,p_project_number => p_project_number
7894 ,p_resource_name => p_resource_name
7895 ,p_resource_source_id => p_resource_source_id
7896 ,p_resource_id => p_resource_id
7897 ,p_project_status_name => p_project_status_name
7898 ,p_project_subteam_id => p_project_subteam_id
7899 ,p_project_subteam_party_id => p_project_subteam_party_id
7900 ,p_project_subteam_name => p_project_subteam_name
7901 ,p_calendar_name => p_calendar_name
7902 ,p_staffing_priority_name => p_staffing_priority_name
7903 ,p_project_role_name => p_project_role_name
7904 ,p_location_city => p_location_city
7905 ,p_location_region => p_location_region
7906 ,p_location_country_name => p_location_country_name
7907 ,p_location_country_code => p_location_country_code
7908 ,p_work_type_name => p_work_type_name
7909 ,p_fcst_job_name => p_fcst_job_name
7910 ,p_fcst_job_group_name => p_fcst_job_group_name
7911 ,p_expenditure_org_name => p_expenditure_org_name
7912 ,p_exp_organization_name => p_exp_organization_name
7913 ,p_search_country_name => p_search_country_name
7914 ,p_search_exp_org_hier_name => p_search_exp_org_hier_name
7915 ,p_search_exp_start_org_name => p_search_exp_start_org_name
7916 ,p_staffing_owner_name => p_staffing_owner_name
7917 ,p_api_version => p_api_version
7918 ,p_commit => p_commit
7919 ,p_validate_only => p_validate_only
7920 ,p_max_msg_count => p_max_msg_count
7921 ,x_return_status => x_return_status
7922 ,x_msg_count => x_msg_count
7923 ,x_msg_data => x_msg_data
7924 );
7925 END Execute_Update_Requirement;
7926
7927 PROCEDURE DELETE_PJR_TXNS
7928 (p_project_id IN pa_project_assignments.project_id%TYPE := FND_API.G_MISS_NUM
7929 ,p_calling_module IN VARCHAR2 := FND_API.G_MISS_CHAR
7930 ,p_api_version IN NUMBER := 1.0
7931 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
7932 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
7933 ,p_validate_only IN VARCHAR2 := FND_API.G_TRUE
7934 ,p_max_msg_count IN NUMBER := FND_API.G_MISS_NUM
7935 ,x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7936 ,x_msg_count OUT NOCOPY NUMBER --File.Sql.39 bug 4440895
7937 ,x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
7938 )
7939
7940 IS
7941
7942 CURSOR asgn_details IS
7943 SELECT ROWID row_id
7944 ,assignment_id
7945 ,assignment_type
7946 ,record_version_number
7947 ,assignment_number
7948 ,project_party_id
7949 FROM pa_project_assignments a
7950 WHERE a.project_id = p_project_id;
7951
7952 l_return_status VARCHAR2(1);
7953 l_msg_index_out NUMBER;
7954
7955 BEGIN
7956
7957 -- Initialize the Error Stack
7958 PA_DEBUG.init_err_stack('PA_ASSIGNMENTS_PUB.Delete_PJR_Txns');
7959
7960 --Log Message
7961 IF P_DEBUG_MODE = 'Y' THEN
7962 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Delete_PJR_Txns.begin'
7963 ,x_msg => 'Beginning of Delete_PJR_Txns'
7964 ,x_log_level => 5);
7965 END IF;
7966
7967 -- Initialize the error flag
7968 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_FALSE;
7969 x_return_status := FND_API.G_RET_STS_SUCCESS;
7970
7971 -- Issue API savepoint if the transaction is to be committed
7972 IF p_commit = FND_API.G_TRUE THEN
7973 SAVEPOINT ASG_PUB_DELETE_PJR_TXNS;
7974 END IF;
7975
7976 --Clear the global PL/SQL message table
7977 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
7978 FND_MSG_PUB.initialize;
7979 END IF;
7980
7981 FOR l_rec IN asgn_details
7982 LOOP
7983
7984 --Log Message
7985 IF P_DEBUG_MODE = 'Y' THEN
7986 PA_DEBUG.write_log (x_module => 'pa.plsql.PA_ASSIGNMENTS_PUB.Delete_PJR_Txns.pvt_delete_asgmt'
7987 ,x_msg => 'Calling PVT Delete_Assignment'
7988 ,x_log_level => 5);
7989 END IF;
7990
7991 PA_ASSIGNMENTS_PVT.Delete_Assignment
7992 ( p_assignment_row_id => l_rec.row_id
7993 ,p_assignment_id => l_rec.assignment_id
7994 ,p_assignment_type => l_rec.assignment_type
7995 ,p_record_version_number => l_rec.record_version_number
7996 ,p_assignment_number => l_rec.assignment_number
7997 ,p_project_party_id => l_rec.project_party_id
7998 ,p_calling_module => p_calling_module
7999 ,p_commit => p_commit
8000 ,p_validate_only => p_validate_only
8001 ,x_return_status => l_return_status
8002 );
8003
8004 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8005 PA_ASSIGNMENTS_PUB.g_error_exists := FND_API.G_TRUE;
8006 END IF;
8007
8008 END LOOP;
8009
8010 --
8011 -- IF the number of messaages is 1 then fetch the message code from the stack and return its text
8012 --
8013 x_msg_count := FND_MSG_PUB.Count_Msg;
8014 IF x_msg_count = 1 THEN
8015 pa_interface_utils_pub.get_messages ( p_encoded => FND_API.G_TRUE
8016 ,p_msg_index => 1
8017 ,p_data => x_msg_data
8018 ,p_msg_index_out => l_msg_index_out
8019 );
8020 END IF;
8021
8022 -- Reset the error stack when returning to the calling program
8023 PA_DEBUG.Reset_Err_Stack;
8024
8025 -- If any errors exist then set the x_return_status to 'E'
8026
8027 IF x_msg_count > 0 THEN
8028
8029 x_return_status := FND_API.G_RET_STS_ERROR;
8030
8031 END IF;
8032
8033 -- Reset the error stack when returning to the calling program
8034 PA_DEBUG.Reset_Err_Stack;
8035
8036 IF p_commit = FND_API.G_TRUE THEN
8037 IF x_return_status = FND_API.G_RET_STS_SUCCESS THEN
8038 COMMIT;
8039 ELSE
8040 ROLLBACK TO ASG_PUB_DELETE_PJR_TXNS;
8041 END IF;
8042 END IF;
8043
8044 -- Put any message text from message stack into the Message ARRAY
8045 --
8046
8047 EXCEPTION
8048 WHEN OTHERS THEN
8049 IF p_commit = FND_API.G_TRUE THEN
8050 ROLLBACK TO ASG_PUB_DELETE_PJR_TXNS;
8051 END IF;
8052 -- Set the exception Message and the stack
8053 FND_MSG_PUB.add_exc_msg( p_pkg_name => 'PA_ASSIGNMENTS_PUB.Delete_PJR_Txns'
8054 ,p_procedure_name => PA_DEBUG.G_Err_Stack );
8055 --
8056 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8057 RAISE; -- This is optional depending on the needs
8058 --
8059 END DELETE_PJR_TXNS;
8060
8061 /* Added the procedure for bug 8557453 */
8062
8063 PROCEDURE VALIDATE_PROJECT_ROLE(
8064 p_assignment_id IN NUMBER,
8065 x_return_status OUT NOCOPY NUMBER) IS
8066
8067 BEGIN
8068 x_return_status := 0;
8069
8070 Select 1 INTO x_return_status from dual
8071 where exists (
8072 Select role.project_role_id from
8073 pa_project_role_types_b role,
8074 pa_project_assignments asm where
8075 asm.project_role_id = role.project_role_id and
8076 trunc(SYSDATE) Between trunc(role.start_date_active) and trunc(NVL(role.end_date_active,SYSDATE+1))
8077 and asm.assignment_id = p_assignment_id);
8078
8079 EXCEPTION
8080 WHEN NO_DATA_FOUND THEN
8081 x_return_status := 0;
8082 WHEN OTHERS THEN
8083 RAISE;
8084
8085 END VALIDATE_PROJECT_ROLE;
8086 END pa_assignments_pub;