DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_ASSIGNMENTS_PUB

Source


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