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