DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_ASSIGNMENTS_PUB

Source


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