[Home] [Help]
PACKAGE BODY: APPS.PA_BILLING_SCHEDULE_PVT
Source
1 PACKAGE BODY PA_BILLING_SCHEDULE_PVT AS
2 /* $Header: PABLINVB.pls 120.3 2005/08/19 16:16:35 mwasowic noship $ */
3
4 G_PKG_NAME VARCHAR2(30) := 'PA_BILLING_SCHEDULE_PVT';
5
6 -- API name : Update_Project_Task_Bill_Info
7 -- Type : Public procedure
8 -- Pre-reqs : None
9 -- Return Value : N/A
10 -- Prameters
11 -- p_commit IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_FALSE
12 -- p_validate_only IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_TRUE
13 -- p_validation_level IN NUMBER OPTIONAL DEFAULT=FND_API.G_VALID_LEVEL_FULL
14 -- p_calling_module IN VARCHAR2 OPTIONAL DEFAULT='SELF_SERVICE'
15 -- p_debug_mode IN VARCHAR2 OPTIONAL DEFAULT='N'
16 -- p_max_msg_count IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
17 -- p_project_id IN NUMBER REQUIRED
18 -- p_task_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
19 -- p_lbr_schedule_type IN VARCHAR2 OPTIONAL DEFAULT=FND_API.G_MISS_CHAR
20 -- p_non_lbr_schedule_type IN VARCHAR2 OPTIONAL DEFAULT=FND_API.G_MISS_CHAR
21 -- p_emp_bill_rate_sch_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
22 -- p_job_bill_rate_sch_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
23 -- p_lbr_sch_fxd_date IN DATE OPTIONAL DEFAULT=FND_API.G_MISS_DATE
24 -- p_lbr_sch_discount IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
25 -- p_rev_schedule_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
26 -- p_inv_schedule_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
27 -- p_rev_ind_sch_fxd_date IN DATE OPTIONAL DEFAULT=FND_API.G_MISS_DATE
28 -- p_inv_ind_sch_fxd_date IN DATE OPTIONAL DEFAULT=FND_API.G_MISS_DATE
29 -- p_nlbr_bill_rate_org_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
30 -- p_nlbr_std_bill_rate_sch IN VARCHAR2 OPTIONAL DEFAULT=FND_API.G_MISS_CHAR
31 -- p_nlbr_sch_fxd_date IN DATE OPTIONAL DEFAULT=FND_API.G_MISS_DATE
32 -- p_nlbr_sch_discount IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
33 -- p_record_version_number IN NUMBER REQUIRED DEFAULT=1
34 -- x_return_status OUT VARCHAR2 REQUIRED
35 -- x_msg_count OUT VARCHAR2 REQUIRED
36 -- x_msg_data OUT VARCHAR2 REQUIRED
37 --
38 -- History
39 --
40 -- 21-MAY-01 Majid Ansari -Created
41 --
42 --
43
44 PROCEDURE Update_Project_Task_Bill_Info(
45 p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
46 p_validate_only IN VARCHAR2 DEFAULT FND_API.G_TRUE,
47 p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
48 p_calling_module IN VARCHAR2 DEFAULT 'SELF_SERVICE',
49 p_debug_mode IN VARCHAR2 DEFAULT 'N',
50 p_max_msg_count IN NUMBER DEFAULT FND_API.G_MISS_NUM,
51 p_project_id IN NUMBER ,
52 p_task_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
53 p_lbr_schedule_type IN VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
54 p_non_lbr_schedule_type IN VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
55 p_emp_bill_rate_sch_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
56 p_job_bill_rate_sch_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
57 p_lbr_sch_fxd_date IN DATE DEFAULT FND_API.G_MISS_DATE,
58 p_lbr_sch_discount IN NUMBER DEFAULT FND_API.G_MISS_NUM,
59 p_rev_schedule_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
60 p_inv_schedule_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
61 p_rev_ind_sch_fxd_date IN DATE DEFAULT FND_API.G_MISS_DATE,
62 p_inv_ind_sch_fxd_date IN DATE DEFAULT FND_API.G_MISS_DATE,
63 p_nlbr_bill_rate_org_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
64 p_nlbr_std_bill_rate_sch IN VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
65 p_nlbr_sch_fxd_date IN DATE DEFAULT FND_API.G_MISS_DATE,
66 p_nlbr_sch_discount IN NUMBER DEFAULT FND_API.G_MISS_NUM,
67 p_record_version_number IN NUMBER DEFAULT 1,
68 x_return_status OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
69 x_msg_count OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
70 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
71 ) IS
72
73 l_return_status VARCHAR2(1);
74 l_error_msg_code VARCHAR2(250);
75 l_dummy_char VARCHAR2(1);
76 l_msg_count NUMBER;
77
78
79 l_task_id NUMBER;
80 l_lbr_schedule_type VARCHAR2(1);
81 l_non_lbr_schedule_type VARCHAR2(1);
82 l_emp_bill_rate_sch_id NUMBER;
83 l_job_bill_rate_sch_id NUMBER;
84 l_lbr_sch_fxd_date DATE;
85 l_lbr_sch_discount NUMBER;
86 l_rev_schedule_id NUMBER;
87 l_inv_schedule_id NUMBER;
88 l_rev_ind_sch_fxd_date DATE;
89 l_inv_ind_sch_fxd_date DATE;
90 l_nlbr_bill_rate_org_id NUMBER;
91 l_nlbr_std_bill_rate_sch VARCHAR2(30);
92 l_nlbr_sch_fxd_date DATE;
93 l_nlbr_sch_discount NUMBER;
94 l_project_type_class_code PA_PROJECT_TYPES.PROJECT_TYPE_CLASS_CODE%TYPE;
95
96 BEGIN
97
98 IF p_commit = FND_API.G_TRUE
99 THEN
100 SAVEPOINT Update_Bill_Info;
101 END IF;
102
103 x_return_status := 'S';
104
105 IF p_validate_only = FND_API.G_TRUE AND
106 p_validation_level > 0
107 THEN
108
109 IF (p_debug_mode = 'Y')
110 THEN
111 pa_debug.debug('Update_Project_Task_Bill_Info PVT: Checking PRM installation');
112 END IF;
113
114 --this functionality is moved to a utility procedure. PA_BILLING_SCHEDULES.CHECK_BILL_INFO_REQ
115 /*PA_BILLING_SCHEDULE_UTILS.Emp_job_mandatory_validation(
116 p_emp_bill_rate_sch_id,
117 p_job_bill_rate_sch_id,
118 l_return_status,
119 l_error_msg_code );*/
120
121 --Get the project type class code and pass to procedure to validate mandaory columns
122 l_project_type_class_code := PA_BILLING_SCHEDULE_UTILS.Get_Project_Type_Class(
123 p_project_id,
124 l_return_status );
125
126 PA_BILLING_SCHEDULE_UTILS.CHECK_BILL_INFO_REQ(
127 p_project_type_class_code => l_project_type_class_code,
128 p_lbr_schedule_type => p_lbr_schedule_type,
129 p_non_lbr_schedule_type => p_non_lbr_schedule_type,
130 p_emp_bill_rate_sch_id => p_emp_bill_rate_sch_id,
131 p_job_bill_rate_sch_id => p_job_bill_rate_sch_id,
132 p_rev_schedule_id => p_rev_schedule_id,
133 p_inv_schedule_id => p_inv_schedule_id,
134 p_nlbr_bill_rate_org_id => p_nlbr_bill_rate_org_id,
135 p_nlbr_std_bill_rate_sch => p_nlbr_std_bill_rate_sch,
136 x_error_msg_code => l_error_msg_code,
137 x_return_status => l_return_status );
138
139 IF l_return_status = FND_API.G_RET_STS_ERROR
140 THEN
141 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
142 p_msg_name => l_error_msg_code);
143
144 x_msg_data := l_error_msg_code;
145 x_return_status := 'E';
146 RAISE FND_API.G_EXC_ERROR;
147 END IF;
148
149 END IF;
150
151 IF (p_debug_mode = 'Y')
152 THEN
153 pa_debug.debug('Update_Project_Task_Bill_Info PVT: Checking Lock on record');
154 END IF;
155
156 IF p_validate_only <> FND_API.G_TRUE
157 THEN
158 BEGIN
159 SELECT 'x' INTO l_dummy_char
160 FROM pa_projects
161 WHERE project_id = p_project_id
162 AND record_version_number = p_record_version_number
163 FOR UPDATE OF record_version_number NOWAIT;
164 EXCEPTION
165 WHEN TIMEOUT_ON_RESOURCE THEN
166 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
167 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
168 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
169 x_return_status := 'E' ;
170 WHEN NO_DATA_FOUND THEN
171 if p_calling_module = 'FORM' then
172 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
173 p_msg_name => 'FORM_RECORD_CHANGED');
174 x_msg_data := 'FORM_RECORD_CHANGED';
175 else
176 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
177 p_msg_name => 'PA_XC_RECORD_CHANGED');
178 x_msg_data := 'PA_XC_RECORD_CHANGED';
179 end if;
180 x_return_status := 'E' ;
181 WHEN OTHERS THEN
182 IF SQLCODE = -54 THEN
183 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
184 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
185 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
186 x_return_status := 'E' ;
187 ELSE
188 raise;
189 END IF;
190 END;
191 ELSE
192 BEGIN
193 SELECT 'x' INTO l_dummy_char
194 FROM pa_projects
195 WHERE project_id = p_project_id
196 AND record_version_number = p_record_version_number;
197 EXCEPTION
198 WHEN NO_DATA_FOUND THEN
199 if p_calling_module = 'FORM' then
200 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
201 p_msg_name => 'FORM_RECORD_CHANGED');
202 x_msg_data := 'FORM_RECORD_CHANGED';
203 else
204 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
205 p_msg_name => 'PA_XC_RECORD_CHANGED');
206 x_msg_data := 'PA_XC_RECORD_CHANGED';
207 end if;
208 x_return_status := 'E' ;
209 WHEN OTHERS THEN
210 IF SQLCODE = -54 THEN
211 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
212 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
213 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
214 x_return_status := 'E' ;
215 END IF;
216 END;
217 end if;
218 l_msg_count := FND_MSG_PUB.count_msg;
219
220 IF l_msg_count > 0 THEN
221 x_msg_count := l_msg_count;
222 x_return_status := 'E';
223 RAISE FND_API.G_EXC_ERROR;
224 END IF;
225
226 IF p_validate_only = FND_API.G_TRUE AND
227 p_validation_level > 0
228 THEN
229 IF p_task_id = FND_API.G_MISS_NUM
230 THEN
231 l_task_id := null;
232 ELSE
233 l_task_id := p_task_id;
234 END IF;
235
236 IF p_lbr_schedule_type = FND_API.G_MISS_CHAR
237 THEN
238 l_lbr_schedule_type := null;
239 ELSE
240 l_lbr_schedule_type := p_lbr_schedule_type;
241 END IF;
242
243 IF p_non_lbr_schedule_type = FND_API.G_MISS_CHAR
244 THEN
245 l_non_lbr_schedule_type := null;
246 ELSE
247 l_non_lbr_schedule_type := p_non_lbr_schedule_type;
248 END IF;
249
250 IF p_emp_bill_rate_sch_id = FND_API.G_MISS_NUM
251 THEN
252 l_emp_bill_rate_sch_id := null;
253 ELSE
254 l_emp_bill_rate_sch_id := p_emp_bill_rate_sch_id;
255 END IF;
256
257 IF p_job_bill_rate_sch_id = FND_API.G_MISS_NUM
258 THEN
259 l_job_bill_rate_sch_id := null;
260 ELSE
261 l_job_bill_rate_sch_id := p_job_bill_rate_sch_id;
262 END IF;
263
264 IF p_lbr_sch_fxd_date = FND_API.G_MISS_DATE
265 THEN
266 l_lbr_sch_fxd_date := null;
267 ELSE
268 l_lbr_sch_fxd_date := p_lbr_sch_fxd_date;
269 END IF;
270
271 IF p_lbr_sch_discount = FND_API.G_MISS_NUM
272 THEN
273 l_lbr_sch_discount := null;
274 ELSE
275 l_lbr_sch_discount := p_lbr_sch_discount;
276 END IF;
277
278 IF p_rev_schedule_id = FND_API.G_MISS_NUM
279 THEN
280 l_rev_schedule_id := null;
281 ELSE
282 l_rev_schedule_id := p_rev_schedule_id;
283 END IF;
284
285 IF p_inv_schedule_id = FND_API.G_MISS_NUM
286 THEN
287 l_inv_schedule_id := null;
288 ELSE
289 l_inv_schedule_id := p_inv_schedule_id;
290 END IF;
291
292 IF p_rev_ind_sch_fxd_date = FND_API.G_MISS_DATE
293 THEN
294 l_rev_ind_sch_fxd_date := null;
295 ELSE
296 l_rev_ind_sch_fxd_date := p_rev_ind_sch_fxd_date;
297 END IF;
298
299 IF p_inv_ind_sch_fxd_date = FND_API.G_MISS_DATE
300 THEN
301 l_inv_ind_sch_fxd_date := null;
302 ELSE
303 l_inv_ind_sch_fxd_date := p_inv_ind_sch_fxd_date;
304 END IF;
305
306 IF p_nlbr_bill_rate_org_id = FND_API.G_MISS_NUM
307 THEN
308 l_nlbr_bill_rate_org_id := null;
309 ELSE
310 l_nlbr_bill_rate_org_id := p_nlbr_bill_rate_org_id;
311 END IF;
312
313 IF p_nlbr_std_bill_rate_sch = FND_API.G_MISS_CHAR
314 THEN
315 l_nlbr_std_bill_rate_sch := null;
316 ELSE
317 l_nlbr_std_bill_rate_sch := p_nlbr_std_bill_rate_sch;
318 END IF;
319
320 IF p_nlbr_sch_fxd_date = FND_API.G_MISS_DATE
321 THEN
322 l_nlbr_sch_fxd_date := null;
323 ELSE
324 l_nlbr_sch_fxd_date := p_nlbr_sch_fxd_date;
325 END IF;
326
327 IF p_nlbr_sch_discount = FND_API.G_MISS_NUM
328 THEN
329 l_nlbr_sch_discount := null;
333
330 ELSE
331 l_nlbr_sch_discount := p_nlbr_sch_discount;
332 END IF;
334 IF p_task_id = FND_API.G_MISS_NUM OR l_task_id is NULL
335 THEN
336 UPDATE pa_projects
337 SET LABOR_SCH_TYPE = l_lbr_schedule_type,
338 NON_LABOR_SCH_TYPE = l_non_lbr_schedule_type,
339 EMP_BILL_RATE_SCHEDULE_ID = l_emp_bill_rate_sch_id ,
340 JOB_BILL_RATE_SCHEDULE_ID = l_job_bill_rate_sch_id ,
341 LABOR_SCHEDULE_FIXED_DATE = l_lbr_sch_fxd_date,
342 LABOR_SCHEDULE_DISCOUNT = l_lbr_sch_discount,
343 REV_IND_RATE_SCH_ID = l_rev_schedule_id,
344 INV_IND_RATE_SCH_ID = l_inv_schedule_id,
345 REV_IND_SCH_FIXED_DATE = l_rev_ind_sch_fxd_date,
346 INV_IND_SCH_FIXED_DATE = l_inv_ind_sch_fxd_date,
347 NON_LABOR_BILL_RATE_ORG_ID = l_nlbr_bill_rate_org_id,
348 NON_LABOR_STD_BILL_RATE_SCHDL = l_nlbr_std_bill_rate_sch,
349 NON_LABOR_SCHEDULE_FIXED_DATE = l_nlbr_sch_fxd_date,
350 NON_LABOR_SCHEDULE_DISCOUNT = l_nlbr_sch_discount,
351 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
352 WHERE project_id = p_project_id
353 AND RECORD_VERSION_NUMBER = p_record_version_number;
354
355 ELSE
356
357 --lock pa_tasks table
358 IF p_validate_only <> FND_API.G_TRUE
359 THEN
360 BEGIN
361 SELECT 'x' INTO l_dummy_char
362 FROM pa_tasks
363 WHERE task_id = l_task_id
364 AND record_version_number = p_record_version_number
365 FOR UPDATE OF record_version_number NOWAIT;
366 EXCEPTION
367 WHEN TIMEOUT_ON_RESOURCE THEN
368 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
369 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
370 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
371 x_return_status := 'E' ;
372 WHEN NO_DATA_FOUND THEN
373 if p_calling_module = 'FORM' then
374 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
375 p_msg_name => 'FORM_RECORD_CHANGED');
376 x_msg_data := 'FORM_RECORD_CHANGED';
377 else
378 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
379 p_msg_name => 'PA_XC_RECORD_CHANGED');
380 x_msg_data := 'PA_XC_RECORD_CHANGED';
381 end if;
382 x_return_status := 'E' ;
383 WHEN OTHERS THEN
384 IF SQLCODE = -54 THEN
385 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
386 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
387 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
388 x_return_status := 'E' ;
389 ELSE
390 raise;
391 END IF;
392 END;
393 ELSE
394 BEGIN
395 SELECT 'x' INTO l_dummy_char
396 FROM pa_tasks
397 WHERE task_id = l_task_id
398 AND record_version_number = p_record_version_number;
399 EXCEPTION
400 WHEN NO_DATA_FOUND THEN
401 if p_calling_module = 'FORM' then
402 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
403 p_msg_name => 'FORM_RECORD_CHANGED');
404 x_msg_data := 'FORM_RECORD_CHANGED';
405 else
406 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
407 p_msg_name => 'PA_XC_RECORD_CHANGED');
408 x_msg_data := 'PA_XC_RECORD_CHANGED';
409 end if;
410 x_return_status := 'E' ;
411 WHEN OTHERS THEN
412 IF SQLCODE = -54 THEN
413 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
414 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
415 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
416 x_return_status := 'E' ;
417 END IF;
418 END;
419 END IF;
420 l_msg_count := FND_MSG_PUB.count_msg;
421
422 IF l_msg_count > 0 THEN
423 x_msg_count := l_msg_count;
424 x_return_status := 'E';
425 RAISE FND_API.G_EXC_ERROR;
426 END IF;
427 UPDATE pa_tasks
428 SET LABOR_SCH_TYPE = l_lbr_schedule_type,
429 NON_LABOR_SCH_TYPE = l_non_lbr_schedule_type,
430 EMP_BILL_RATE_SCHEDULE_ID = l_emp_bill_rate_sch_id ,
431 JOB_BILL_RATE_SCHEDULE_ID = l_job_bill_rate_sch_id ,
432 LABOR_SCHEDULE_FIXED_DATE = l_lbr_sch_fxd_date,
433 LABOR_SCHEDULE_DISCOUNT = l_lbr_sch_discount,
434 REV_IND_RATE_SCH_ID = l_rev_schedule_id,
435 INV_IND_RATE_SCH_ID = l_inv_schedule_id,
439 NON_LABOR_STD_BILL_RATE_SCHDL = l_nlbr_std_bill_rate_sch,
436 REV_IND_SCH_FIXED_DATE = l_rev_ind_sch_fxd_date,
437 INV_IND_SCH_FIXED_DATE = l_inv_ind_sch_fxd_date,
438 NON_LABOR_BILL_RATE_ORG_ID = l_nlbr_bill_rate_org_id,
440 NON_LABOR_SCHEDULE_FIXED_DATE = l_nlbr_sch_fxd_date,
441 NON_LABOR_SCHEDULE_DISCOUNT = l_nlbr_sch_discount,
442 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
443 WHERE task_id = l_task_id
444 AND RECORD_VERSION_NUMBER = p_record_version_number;
445 END IF;
446
447 END IF;
448
449 IF FND_API.TO_BOOLEAN(P_COMMIT)
450 THEN
451 COMMIT WORK;
452 END IF;
453
454 EXCEPTION
455 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
456 IF p_commit = FND_API.G_TRUE
457 THEN
458 ROLLBACK TO Update_Bill_Info;
459 END IF;
460 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
461 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
462 p_procedure_name => 'Update_Project_Task_Bill_Info',
463 p_error_text => SUBSTRB(SQLERRM,1,240));
464 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
465
466 WHEN FND_API.G_EXC_ERROR THEN
467 IF p_commit = FND_API.G_TRUE
468 THEN
469 ROLLBACK TO Update_Bill_Info;
470 END IF;
471 x_return_status := 'E';
472
473 WHEN OTHERS THEN
474 IF p_commit = FND_API.G_TRUE
475 THEN
476 ROLLBACK TO Update_Bill_Info;
477 END IF;
478 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
479 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
480 p_procedure_name => 'Update_Project_Task_Bill_Info',
481 p_error_text => SUBSTRB(SQLERRM,1,240));
482 RAISE;
483 END Update_Project_Task_Bill_Info;
484
485 -- API name : update_billing_schedule_type
486 -- Type : Public procedure
487 -- Pre-reqs : None
488 -- Return Value : N/A
489 -- Prameters
490 -- p_commit IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_FALSE
491 -- p_validate_only IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_TRUE
492 -- p_validation_level IN NUMBER OPTIONAL DEFAULT=FND_API.G_VALID_LEVEL_FULL
493 -- p_calling_module IN VARCHAR2 OPTIONAL DEFAULT='SELF_SERVICE'
494 -- p_debug_mode IN VARCHAR2 OPTIONAL DEFAULT='N'
495 -- p_max_msg_count IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
496 -- p_project_id IN NUMBER REQUIRED
497 -- p_task_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
498 -- p_lbr_schedule_type IN VARCHAR2 REQUIRED,
499 -- p_non_lbr_schedule_type IN VARCHAR2 REQUIRED,
500 -- p_record_version_number IN NUMBER REQUIRED DEFAULT=1
501 -- x_return_status OUT VARCHAR2 REQUIRED
502 -- x_msg_count OUT VARCHAR2 REQUIRED
503 -- x_msg_data OUT VARCHAR2 REQUIRED
504 --
505 -- History
506 --
507 -- 21-MAY-01 Majid Ansari -Created
508 --
509 --
510 PROCEDURE update_billing_schedule_type(
511 p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
512 p_validate_only IN VARCHAR2 DEFAULT FND_API.G_TRUE,
513 p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
514 p_calling_module IN VARCHAR2 DEFAULT 'SELF_SERVICE',
515 p_debug_mode IN VARCHAR2 DEFAULT 'N',
516 p_max_msg_count IN NUMBER DEFAULT FND_API.G_MISS_NUM,
517 p_project_id IN NUMBER ,
518 p_task_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
519 p_lbr_schedule_type IN VARCHAR2 ,
520 p_non_lbr_schedule_type IN VARCHAR2 ,
521 p_record_version_number IN NUMBER DEFAULT 1,
522 x_return_status OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
523 x_msg_count OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
524 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
525 ) IS
526
527 l_return_status VARCHAR2(1);
528 l_error_msg_code VARCHAR2(250);
529 l_dummy_char VARCHAR2(1);
530 l_msg_count NUMBER;
531
532 l_task_id NUMBER;
533 l_effective_to_date DATE;
534 BEGIN
535 IF p_commit = FND_API.G_TRUE
536 THEN
537 SAVEPOINT bill_sch_type;
538 END IF;
539
540 x_return_status := 'S';
541
542 IF p_validate_only = FND_API.G_TRUE AND
543 p_validation_level > 0
544 THEN
545 IF p_task_id = FND_API.G_MISS_NUM
546 THEN
547 l_task_id := null;
548 ELSE
549 l_task_id := p_task_id;
550 END IF;
551
552 END IF;
553
554 IF (p_debug_mode = 'Y')
555 THEN
556 pa_debug.debug('update_billing_schedule_type PVT: Checking Lock on record');
557 END IF;
558 IF( p_task_id = FND_API.G_MISS_NUM OR l_task_id is NULL )
559 THEN
560 IF p_validate_only <> FND_API.G_TRUE
561 THEN
562 BEGIN
563 SELECT 'x' INTO l_dummy_char
564 FROM pa_projects
565 WHERE project_id = p_project_id
566 AND record_version_number = p_record_version_number
567 FOR UPDATE OF record_version_number NOWAIT;
568 EXCEPTION
569 WHEN TIMEOUT_ON_RESOURCE THEN
573 x_return_status := 'E' ;
570 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
571 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
572 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
574 WHEN NO_DATA_FOUND THEN
575 if p_calling_module = 'FORM' then
576 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
577 p_msg_name => 'FORM_RECORD_CHANGED');
578 x_msg_data := 'FORM_RECORD_CHANGED';
579 else
580 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
581 p_msg_name => 'PA_XC_RECORD_CHANGED');
582 x_msg_data := 'PA_XC_RECORD_CHANGED';
583 end if;
584 x_return_status := 'E' ;
585 WHEN OTHERS THEN
586 IF SQLCODE = -54 THEN
587 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
588 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
589 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
590 x_return_status := 'E' ;
591 ELSE
592 raise;
593 END IF;
594 END;
595 ELSE
596 BEGIN
597 SELECT 'x' INTO l_dummy_char
598 FROM pa_projects
599 WHERE project_id = p_project_id
600 AND record_version_number = p_record_version_number;
601 EXCEPTION
602 WHEN NO_DATA_FOUND THEN
603 if p_calling_module = 'FORM' then
604 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
605 p_msg_name => 'FORM_RECORD_CHANGED');
606 x_msg_data := 'FORM_RECORD_CHANGED';
607 else
608 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
609 p_msg_name => 'PA_XC_RECORD_CHANGED');
610 x_msg_data := 'PA_XC_RECORD_CHANGED';
611 end if;
612 x_return_status := 'E' ;
613 WHEN OTHERS THEN
614 IF SQLCODE = -54 THEN
615 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
616 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
617 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
618 x_return_status := 'E' ;
619 END IF;
620 END;
621 END IF;
622 ELSE
623 --lock pa_tasks
624 IF p_validate_only <> FND_API.G_TRUE
625 THEN
626 BEGIN
627 SELECT 'x' INTO l_dummy_char
628 FROM pa_tasks
629 WHERE task_id = l_task_id
630 AND record_version_number = p_record_version_number
631 FOR UPDATE OF record_version_number NOWAIT;
632 EXCEPTION
633 WHEN TIMEOUT_ON_RESOURCE THEN
634 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
635 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
636 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
637 x_return_status := 'E' ;
638 WHEN NO_DATA_FOUND THEN
639 if p_calling_module = 'FORM' then
640 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
641 p_msg_name => 'FORM_RECORD_CHANGED');
642 x_msg_data := 'FORM_RECORD_CHANGED';
643 else
644 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
645 p_msg_name => 'PA_XC_RECORD_CHANGED');
646 x_msg_data := 'PA_XC_RECORD_CHANGED';
647 end if;
648 x_return_status := 'E' ;
649 WHEN OTHERS THEN
650 IF SQLCODE = -54 THEN
651 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
652 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
653 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
654 x_return_status := 'E' ;
655 ELSE
656 raise;
657 END IF;
658 END;
659 ELSE
660 BEGIN
661 SELECT 'x' INTO l_dummy_char
662 FROM pa_tasks
663 WHERE task_id = l_task_id
664 AND record_version_number = p_record_version_number;
665 EXCEPTION
666 WHEN NO_DATA_FOUND THEN
667 if p_calling_module = 'FORM' then
668 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
669 p_msg_name => 'FORM_RECORD_CHANGED');
670 x_msg_data := 'FORM_RECORD_CHANGED';
671 else
672 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
673 p_msg_name => 'PA_XC_RECORD_CHANGED');
674 x_msg_data := 'PA_XC_RECORD_CHANGED';
675 end if;
676 x_return_status := 'E' ;
677 WHEN OTHERS THEN
678 IF SQLCODE = -54 THEN
679 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
680 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
681 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
682 x_return_status := 'E' ;
683 END IF;
684 END;
685 END IF;
686 END IF;
687
688 l_msg_count := FND_MSG_PUB.count_msg;
689
690 IF l_msg_count > 0 THEN
691 x_msg_count := l_msg_count;
692 x_return_status := 'E';
693 RAISE FND_API.G_EXC_ERROR;
694 END IF;
695
699 THEN
696 IF p_lbr_schedule_type = 'B' and p_non_lbr_schedule_type = 'B'
697 THEN
698 IF( p_task_id = FND_API.G_MISS_NUM OR l_task_id is NULL )
700 UPDATE pa_projects
701 SET LABOR_SCH_TYPE = p_lbr_schedule_type,
702 NON_LABOR_SCH_TYPE = p_non_lbr_schedule_type,
703 REV_IND_RATE_SCH_ID = null,
704 INV_IND_RATE_SCH_ID = null,
705 REV_IND_SCH_FIXED_DATE = null,
706 INV_IND_SCH_FIXED_DATE = null,
707 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
708 WHERE project_id = p_project_id
709 AND RECORD_VERSION_NUMBER = p_record_version_number;
710 ELSE
711 UPDATE pa_tasks
712 SET LABOR_SCH_TYPE = p_lbr_schedule_type,
713 NON_LABOR_SCH_TYPE = p_non_lbr_schedule_type,
714 REV_IND_RATE_SCH_ID = null,
715 INV_IND_RATE_SCH_ID = null,
716 REV_IND_SCH_FIXED_DATE = null,
717 INV_IND_SCH_FIXED_DATE = null,
718 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
719 WHERE task_id = l_task_id
720 AND RECORD_VERSION_NUMBER = p_record_version_number;
721 END IF;
722 ELSIF p_lbr_schedule_type = 'B' and p_non_lbr_schedule_type = 'I'
723 THEN
724 IF( p_task_id = FND_API.G_MISS_NUM OR l_task_id is NULL )
725 THEN
726 UPDATE pa_projects
727 SET LABOR_SCH_TYPE = p_lbr_schedule_type,
728 NON_LABOR_SCH_TYPE = p_non_lbr_schedule_type,
729 NON_LABOR_BILL_RATE_ORG_ID = null,
730 NON_LABOR_STD_BILL_RATE_SCHDL = null,
731 NON_LABOR_SCHEDULE_FIXED_DATE = null,
732 NON_LABOR_SCHEDULE_DISCOUNT = null,
733 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
734 WHERE project_id = p_project_id
735 AND RECORD_VERSION_NUMBER = p_record_version_number;
736 ELSE
737 UPDATE pa_tasks
738 SET LABOR_SCH_TYPE = p_lbr_schedule_type,
739 NON_LABOR_SCH_TYPE = p_non_lbr_schedule_type,
740 NON_LABOR_BILL_RATE_ORG_ID = null,
741 NON_LABOR_STD_BILL_RATE_SCHDL = null,
742 NON_LABOR_SCHEDULE_FIXED_DATE = null,
743 NON_LABOR_SCHEDULE_DISCOUNT = null,
744 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
745 WHERE task_id = l_task_id
746 AND RECORD_VERSION_NUMBER = p_record_version_number;
747 END IF;
748 ELSIF p_lbr_schedule_type = 'I' and p_non_lbr_schedule_type = 'B'
749 THEN
750 IF( p_task_id = FND_API.G_MISS_NUM OR l_task_id is NULL )
751 THEN
752 UPDATE pa_projects
753 SET LABOR_SCH_TYPE = p_lbr_schedule_type,
754 NON_LABOR_SCH_TYPE = p_non_lbr_schedule_type,
755 EMP_BILL_RATE_SCHEDULE_ID = null,
756 JOB_BILL_RATE_SCHEDULE_ID = null,
757 LABOR_SCHEDULE_FIXED_DATE = null,
758 LABOR_SCHEDULE_DISCOUNT = null,
759 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
760 WHERE project_id = p_project_id
761 AND RECORD_VERSION_NUMBER = p_record_version_number;
762 ELSE
763 UPDATE pa_tasks
764 SET LABOR_SCH_TYPE = p_lbr_schedule_type,
765 NON_LABOR_SCH_TYPE = p_non_lbr_schedule_type,
766 EMP_BILL_RATE_SCHEDULE_ID = null,
767 JOB_BILL_RATE_SCHEDULE_ID = null,
768 LABOR_SCHEDULE_FIXED_DATE = null,
769 LABOR_SCHEDULE_DISCOUNT = null,
770 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
771 WHERE task_id = l_task_id
772 AND RECORD_VERSION_NUMBER = p_record_version_number;
773 END IF;
774 ELSIF p_lbr_schedule_type = 'I' and p_non_lbr_schedule_type = 'I'
775 THEN
776 IF( p_task_id = FND_API.G_MISS_NUM OR l_task_id is NULL )
777 THEN
778 UPDATE pa_projects
779 SET LABOR_SCH_TYPE = p_lbr_schedule_type,
780 NON_LABOR_SCH_TYPE = p_non_lbr_schedule_type,
781 EMP_BILL_RATE_SCHEDULE_ID = null,
782 JOB_BILL_RATE_SCHEDULE_ID = null,
783 LABOR_SCHEDULE_FIXED_DATE = null,
784 LABOR_SCHEDULE_DISCOUNT = null,
785 NON_LABOR_BILL_RATE_ORG_ID = null,
786 NON_LABOR_STD_BILL_RATE_SCHDL = null,
787 NON_LABOR_SCHEDULE_FIXED_DATE = null,
788 NON_LABOR_SCHEDULE_DISCOUNT = null,
789 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
790 WHERE project_id = p_project_id
791 AND RECORD_VERSION_NUMBER = p_record_version_number;
792 ELSE
793 UPDATE pa_tasks
794 SET LABOR_SCH_TYPE = p_lbr_schedule_type,
795 NON_LABOR_SCH_TYPE = p_non_lbr_schedule_type,
796 EMP_BILL_RATE_SCHEDULE_ID = null,
797 JOB_BILL_RATE_SCHEDULE_ID = null,
798 LABOR_SCHEDULE_FIXED_DATE = null,
799 LABOR_SCHEDULE_DISCOUNT = null,
800 NON_LABOR_BILL_RATE_ORG_ID = null,
804 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
801 NON_LABOR_STD_BILL_RATE_SCHDL = null,
802 NON_LABOR_SCHEDULE_FIXED_DATE = null,
803 NON_LABOR_SCHEDULE_DISCOUNT = null,
805 WHERE task_id = p_task_id
806 AND RECORD_VERSION_NUMBER = p_record_version_number;
807 END IF;
808 END IF;
809
810 EXCEPTION
811 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
812 IF p_commit = FND_API.G_TRUE
813 THEN
814 ROLLBACK TO bill_sch_type;
815 END IF;
816 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
817 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
818 p_procedure_name => 'update_billing_schedule_type',
819 p_error_text => SUBSTRB(SQLERRM,1,240));
820 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
821
822 WHEN FND_API.G_EXC_ERROR THEN
823 IF p_commit = FND_API.G_TRUE
824 THEN
825 ROLLBACK TO bill_sch_type;
826 END IF;
827 x_return_status := 'E';
828
829 WHEN OTHERS THEN
830 IF p_commit = FND_API.G_TRUE
831 THEN
832 ROLLBACK TO bill_sch_type;
833 END IF;
834 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
835 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
836 p_procedure_name => 'update_billing_schedule_type',
837 p_error_text => SUBSTRB(SQLERRM,1,240));
838 RAISE;
839
840 END update_billing_schedule_type;
841
842 -- API name : create_labor_multiplier
843 -- Type : Public procedure
844 -- Pre-reqs : None
845 -- Return Value : N/A
846 -- Prameters
847 -- p_commit IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_FALSE
848 -- p_validate_only IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_TRUE
849 -- p_validation_level IN NUMBER OPTIONAL DEFAULT=FND_API.G_VALID_LEVEL_FULL
850 -- p_calling_module IN VARCHAR2 OPTIONAL DEFAULT='SELF_SERVICE'
851 -- p_debug_mode IN VARCHAR2 OPTIONAL DEFAULT='N'
852 -- p_max_msg_count IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
853 -- p_project_id IN NUMBER REQUIRED
854 -- p_task_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
855 -- p_labor_multiplier IN NUMBER REQUIRED
856 -- p_effective_from_date IN DATE REQUIRED
857 -- p_effective_to_date IN DATE OPTIONAL DEFAULT=FND_API.G_MISS_DATE
858 -- x_labor_multiplier_id OUT NUMBER REQUIRED
859 -- x_return_status OUT VARCHAR2 REQUIRED
860 -- x_msg_count OUT VARCHAR2 REQUIRED
861 -- x_msg_data OUT VARCHAR2 REQUIRED
862 --
863 -- History
864 --
865 -- 21-MAY-01 Majid Ansari -Created
866 --
867 --
868 PROCEDURE Create_Labor_Multiplier(
869 p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
870 p_validate_only IN VARCHAR2 DEFAULT FND_API.G_TRUE,
871 p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
872 p_calling_module IN VARCHAR2 DEFAULT 'SELF_SERVICE',
873 p_debug_mode IN VARCHAR2 DEFAULT 'N',
874 p_max_msg_count IN NUMBER DEFAULT FND_API.G_MISS_NUM,
875 p_project_id IN NUMBER ,
876 p_task_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
877 p_labor_multiplier IN NUMBER ,
878 p_effective_from_date IN DATE ,
879 p_effective_to_date IN DATE DEFAULT FND_API.G_MISS_DATE,
880 x_labor_multiplier_id OUT NOCOPY NUMBER, --File.Sql.39 bug 4440895
881 x_return_status OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
882 x_msg_count OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
883 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
884 ) IS
885
886 l_return_status VARCHAR2(1);
887 l_error_msg_code VARCHAR2(250);
888 l_dummy_char VARCHAR2(1);
889 l_msg_count NUMBER;
890
891 l_task_id NUMBER;
892 l_effective_to_date DATE;
893 l_labor_multiplier_id NUMBER;
894 BEGIN
895 IF p_commit = FND_API.G_TRUE
896 THEN
897 SAVEPOINT Labor_Multiplier;
898 END IF;
899
900 x_return_status := 'S';
901
902 IF p_validate_only = FND_API.G_TRUE AND
903 p_validation_level > 0
904 THEN
905 IF p_task_id = FND_API.G_MISS_NUM
906 THEN
907 l_task_id := null;
908 ELSE
909 l_task_id := p_task_id;
910 END IF;
911
912 IF p_effective_to_date = FND_API.G_MISS_DATE
913 THEN
914 l_effective_to_date := null;
915 ELSE
916 l_effective_to_date := p_effective_to_date;
917 END IF;
918 END IF;
919
920 IF p_labor_multiplier < 0
921 THEN
922 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
923 p_msg_name => 'PA_PRJ_LB_MULT_GR_ZR' );
924 x_msg_count := FND_MSG_PUB.count_msg;
925 x_msg_data := 'PA_PRJ_LB_MULT_GR_ZR';
926 x_return_status := 'E';
927 RAISE FND_API.G_EXC_ERROR;
928 END IF;
929
930
931 PA_BILLING_SCHEDULE_UTILS.CHECK_START_END_DATE(
932 p_effective_from_date => p_effective_from_date,
933 p_effective_to_date => l_effective_to_date,
934 x_error_msg_code => l_error_msg_code,
938 THEN
935 x_return_status => l_return_status );
936
937 IF l_return_status = FND_API.G_RET_STS_ERROR
939 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
940 p_msg_name => l_error_msg_code);
941 x_msg_data := l_error_msg_code;
942 x_return_status := 'E';
943 RAISE FND_API.G_EXC_ERROR;
944 END IF;
945
946 PA_BILLING_SCHEDULE_UTILS.CHECK_LABOR_MULTIPLIER_REQ(
947 p_labor_multiplier => p_labor_multiplier,
948 p_effective_from_date => p_effective_from_date,
949 x_error_msg_code => l_error_msg_code,
950 x_return_status => l_return_status );
951
952 IF l_return_status = FND_API.G_RET_STS_ERROR
953 THEN
954 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
955 p_msg_name => l_error_msg_code);
956 x_msg_data := l_error_msg_code;
957 x_return_status := 'E';
958 RAISE FND_API.G_EXC_ERROR;
959 END IF;
960
961
962 IF NOT PA_BILLING_SCHEDULE_UTILS.DUPLICATE_LABOR_MULTIPLIER(
963 p_project_id ,
964 l_task_id ,
965 p_effective_from_date ,
966 l_effective_to_date ,
967 l_labor_multiplier_id,
968 l_return_status
969 )
970 THEN
971 SELECT pa_labor_multipliers_s.NEXTVAL INTO l_labor_multiplier_id
972 FROM dual;
973 x_labor_multiplier_id := l_labor_multiplier_id;
974 INSERT INTO pa_labor_multipliers(
975 labor_multiplier_id,
976 PROJECT_ID,
977 TASK_ID ,
978 LABOR_MULTIPLIER ,
979 START_DATE_ACTIVE ,
980 END_DATE_ACTIVE ,
981 CREATED_BY ,
982 CREATION_DATE ,
983 LAST_UPDATED_BY ,
984 LAST_UPDATE_DATE ,
985 LAST_UPDATE_LOGIN ,
986 RECORD_VERSION_NUMBER )
987 VALUES(
988 l_labor_multiplier_id,
989 p_project_id,
990 l_task_id,
991 p_labor_multiplier,
992 p_effective_from_date,
993 l_effective_to_date,
994 FND_GLOBAL.USER_ID,
995 SYSDATE,
996 FND_GLOBAL.USER_ID,
997 SYSDATE,
998 FND_GLOBAl.LOGIN_ID,
999 1
1000 );
1001
1002
1003 ELSE
1004 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1005 p_msg_name => 'PA_PRJ_DATE_OVERLAP' );
1006 x_msg_data := 'PA_PRJ_DATE_OVERLAP';
1007 x_return_status := 'E';
1008 RAISE FND_API.G_EXC_ERROR;
1009 END IF;
1010
1011 EXCEPTION
1012 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1013 x_labor_multiplier_id := NULL; -- NOCOPY
1014 IF p_commit = FND_API.G_TRUE
1015 THEN
1016 ROLLBACK TO Labor_Multiplier;
1017 END IF;
1018 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1019 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
1020 p_procedure_name => 'create_labor_multiplier',
1021 p_error_text => SUBSTRB(SQLERRM,1,240));
1022 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1023
1024 WHEN FND_API.G_EXC_ERROR THEN
1025 x_labor_multiplier_id := NULL; -- NOCOPY
1026 IF p_commit = FND_API.G_TRUE
1027 THEN
1028 ROLLBACK TO Labor_Multiplier;
1029 END IF;
1030 x_return_status := 'E';
1031
1032 WHEN OTHERS THEN
1033 x_labor_multiplier_id := NULL; -- NOCOPY
1034 IF p_commit = FND_API.G_TRUE
1035 THEN
1036 ROLLBACK TO Labor_Multiplier;
1037 END IF;
1038 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1039 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
1040 p_procedure_name => 'create_labor_multiplier',
1041 p_error_text => SUBSTRB(SQLERRM,1,240));
1042 RAISE;
1043
1044 END Create_Labor_Multiplier;
1045
1046 -- API name : update_labor_multiplier
1047 -- Type : Public procedure
1048 -- Pre-reqs : None
1049 -- Return Value : N/A
1050 -- Prameters
1051 -- p_commit IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_FALSE
1052 -- p_validate_only IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_TRUE
1053 -- p_validation_level IN NUMBER OPTIONAL DEFAULT=FND_API.G_VALID_LEVEL_FULL
1054 -- p_calling_module IN VARCHAR2 OPTIONAL DEFAULT='SELF_SERVICE'
1055 -- p_debug_mode IN VARCHAR2 OPTIONAL DEFAULT='N'
1056 -- p_max_msg_count IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
1057 -- p_labor_multiplier_id IN NUMBER REQUIRED
1061 -- p_effective_from_date IN DATE REQUIRED
1058 -- p_project_id IN NUMBER REQUIRED
1059 -- p_task_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
1060 -- p_labor_multiplier IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
1062 -- p_effective_to_date IN DATE OPTIONAL DEFAULT=FND_API.G_MISS_DATE
1063 -- p_record_version_number IN NUMBER REQUIRED DEFAULT=1
1064 -- x_return_status OUT VARCHAR2 REQUIRED
1065 -- x_msg_count OUT VARCHAR2 REQUIRED
1066 -- x_msg_data OUT VARCHAR2 REQUIRED
1067 --
1068 -- History
1069 --
1070 -- 21-MAY-01 Majid Ansari -Created
1071 --
1072 --
1073 PROCEDURE Update_Labor_Multiplier(
1074 p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
1075 p_validate_only IN VARCHAR2 DEFAULT FND_API.G_TRUE,
1076 p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
1077 p_calling_module IN VARCHAR2 DEFAULT 'SELF_SERVICE',
1078 p_debug_mode IN VARCHAR2 DEFAULT 'N',
1079 p_max_msg_count IN NUMBER DEFAULT FND_API.G_MISS_NUM,
1080 p_labor_multiplier_id IN NUMBER,
1081 p_project_id IN NUMBER ,
1082 p_task_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
1083 p_labor_multiplier IN NUMBER ,
1084 p_effective_from_date IN DATE ,
1085 p_effective_to_date IN DATE DEFAULT FND_API.G_MISS_DATE,
1086 p_record_version_number IN NUMBER DEFAULT 1,
1087 x_return_status OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
1088 x_msg_count OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
1089 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1090 ) IS
1091
1092 l_return_status VARCHAR2(1);
1093 l_error_msg_code VARCHAR2(250);
1094 l_dummy_char VARCHAR2(1);
1095 l_msg_count NUMBER;
1096
1097 l_task_id NUMBER;
1098 l_effective_to_date DATE;
1099 BEGIN
1100 IF p_commit = FND_API.G_TRUE
1101 THEN
1102 SAVEPOINT Labor_Multiplier;
1103 END IF;
1104
1105 x_return_status := 'S';
1106
1107 IF p_validate_only = FND_API.G_TRUE AND
1108 p_validation_level > 0
1109 THEN
1110 IF p_task_id = FND_API.G_MISS_NUM
1111 THEN
1112 l_task_id := null;
1113 ELSE
1114 l_task_id := p_task_id;
1115 END IF;
1116
1117 IF p_effective_to_date = FND_API.G_MISS_DATE
1118 THEN
1119 l_effective_to_date := null;
1120 ELSE
1121 l_effective_to_date := p_effective_to_date;
1122 END IF;
1123 END IF;
1124
1125 IF p_labor_multiplier < 0
1126 THEN
1127 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1128 p_msg_name => 'PA_PRJ_LB_MULT_GR_ZR' );
1129 x_msg_count := FND_MSG_PUB.count_msg;
1130 x_msg_data := 'PA_PRJ_LB_MULT_GR_ZR';
1131 x_return_status := 'E';
1132 RAISE FND_API.G_EXC_ERROR;
1133 END IF;
1134
1135 --Mandatory params check
1136
1137 PA_BILLING_SCHEDULE_UTILS.CHECK_LABOR_MULTIPLIER_REQ(
1138 p_labor_multiplier => p_labor_multiplier,
1139 p_effective_from_date => p_effective_from_date,
1140 x_error_msg_code => l_error_msg_code,
1141 x_return_status => l_return_status );
1142
1143 IF l_return_status = FND_API.G_RET_STS_ERROR
1144 THEN
1145 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1146 p_msg_name => l_error_msg_code);
1147 x_msg_data := l_error_msg_code;
1148 x_return_status := 'E';
1149 RAISE FND_API.G_EXC_ERROR;
1150 END IF;
1151
1152 ---Start end date check
1153 PA_BILLING_SCHEDULE_UTILS.CHECK_START_END_DATE(
1154 p_effective_from_date => p_effective_from_date,
1155 p_effective_to_date => l_effective_to_date,
1156 x_error_msg_code => l_error_msg_code,
1157 x_return_status => l_return_status );
1158
1159 IF l_return_status = FND_API.G_RET_STS_ERROR
1160 THEN
1161 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1162 p_msg_name => l_error_msg_code);
1163 x_msg_data := l_error_msg_code;
1164 x_return_status := 'E';
1165 RAISE FND_API.G_EXC_ERROR;
1166 END IF;
1167
1168
1169 IF (p_debug_mode = 'Y')
1170 THEN
1171 pa_debug.debug('Update_Labor_Multiplier PVT: Checking Lock on record');
1172 END IF;
1173
1174 IF p_validate_only <> FND_API.G_TRUE
1175 THEN
1176 BEGIN
1177 SELECT 'x' INTO l_dummy_char
1178 FROM pa_labor_multipliers
1179 WHERE labor_multiplier_id = p_labor_multiplier_id
1180 AND record_version_number = p_record_version_number
1181 FOR UPDATE OF record_version_number NOWAIT;
1182 EXCEPTION
1183 WHEN TIMEOUT_ON_RESOURCE THEN
1184 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1185 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1186 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1187 x_return_status := 'E' ;
1188 WHEN NO_DATA_FOUND THEN
1189 if p_calling_module = 'FORM' then
1190 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
1191 p_msg_name => 'FORM_RECORD_CHANGED');
1195 p_msg_name => 'PA_XC_RECORD_CHANGED');
1192 x_msg_data := 'FORM_RECORD_CHANGED';
1193 else
1194 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1196 x_msg_data := 'PA_XC_RECORD_CHANGED';
1197 end if;
1198 x_return_status := 'E' ;
1199 WHEN OTHERS THEN
1200 IF SQLCODE = -54 THEN
1201 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1202 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1203 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1204 x_return_status := 'E' ;
1205 ELSE
1206 raise;
1207 END IF;
1208 END;
1209 ELSE
1210 BEGIN
1211 SELECT 'x' INTO l_dummy_char
1212 FROM pa_labor_multipliers
1213 WHERE labor_multiplier_id = p_labor_multiplier_id
1214 AND record_version_number = p_record_version_number;
1215 EXCEPTION
1216 WHEN NO_DATA_FOUND THEN
1217 if p_calling_module = 'FORM' then
1218 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
1219 p_msg_name => 'FORM_RECORD_CHANGED');
1220 x_msg_data := 'FORM_RECORD_CHANGED';
1221 else
1222 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1223 p_msg_name => 'PA_XC_RECORD_CHANGED');
1224 x_msg_data := 'PA_XC_RECORD_CHANGED';
1225 end if;
1226 x_return_status := 'E' ;
1227 WHEN OTHERS THEN
1228 IF SQLCODE = -54 THEN
1229 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1230 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1231 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1232 x_return_status := 'E' ;
1233 END IF;
1234 END;
1235 end if;
1236 l_msg_count := FND_MSG_PUB.count_msg;
1237
1238 IF l_msg_count > 0 THEN
1239 x_msg_count := l_msg_count;
1240 x_return_status := 'E';
1241 RAISE FND_API.G_EXC_ERROR;
1242 END IF;
1243
1244 IF NOT PA_BILLING_SCHEDULE_UTILS.DUPLICATE_LABOR_MULTIPLIER(
1245 p_project_id ,
1246 l_task_id ,
1247 p_effective_from_date ,
1248 l_effective_to_date ,
1249 p_labor_multiplier_id,
1250 l_return_status
1251 )
1252 THEN
1253 UPDATE pa_labor_multipliers
1254 SET LABOR_MULTIPLIER = p_labor_multiplier,
1255 START_DATE_ACTIVE = p_effective_from_date,
1256 END_DATE_ACTIVE = l_effective_to_date,
1257 LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
1258 LAST_UPDATE_DATE = SYSDATE,
1259 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
1260 RECORD_VERSION_NUMBER = NVL( RECORD_VERSION_NUMBER, 0 ) + 1
1261 WHERE labor_multiplier_id = p_labor_multiplier_id
1262 AND RECORD_VERSION_NUMBER = p_RECORD_VERSION_NUMBER;
1263 ELSE
1264 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1265 p_msg_name => 'PA_PRJ_DATE_OVERLAP' );
1266 x_msg_data := 'PA_PRJ_DATE_OVERLAP';
1267 x_return_status := 'E';
1268 RAISE FND_API.G_EXC_ERROR;
1269 END IF;
1270
1271 EXCEPTION
1272 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1273 IF p_commit = FND_API.G_TRUE
1274 THEN
1275 ROLLBACK TO Labor_Multiplier;
1276 END IF;
1277 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1278 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
1279 p_procedure_name => 'update_labor_multiplier',
1280 p_error_text => SUBSTRB(SQLERRM,1,240));
1281 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1282
1283 WHEN FND_API.G_EXC_ERROR THEN
1284 IF p_commit = FND_API.G_TRUE
1285 THEN
1286 ROLLBACK TO Labor_Multiplier;
1287 END IF;
1288 x_return_status := 'E';
1289
1290 WHEN OTHERS THEN
1291 IF p_commit = FND_API.G_TRUE
1292 THEN
1293 ROLLBACK TO Labor_Multiplier;
1294 END IF;
1295 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1296 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
1297 p_procedure_name => 'update_labor_multiplier',
1298 p_error_text => SUBSTRB(SQLERRM,1,240));
1299 RAISE;
1300
1301 END Update_Labor_Multiplier;
1302
1303
1304 -- API name : delete_labor_multiplier
1305 -- Type : Public procedure
1306 -- Pre-reqs : None
1307 -- Return Value : N/A
1308 -- Prameters
1309 -- p_commit IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_FALSE
1310 -- p_validate_only IN VARCHAR2 REQUIRED DEFAULT=FND_API.G_TRUE
1311 -- p_validation_level IN NUMBER OPTIONAL DEFAULT=FND_API.G_VALID_LEVEL_FULL
1312 -- p_calling_module IN VARCHAR2 OPTIONAL DEFAULT='SELF_SERVICE'
1313 -- p_debug_mode IN VARCHAR2 OPTIONAL DEFAULT='N'
1314 -- p_max_msg_count IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
1315 -- p_labor_multiplier_id IN NUMBER REQUIRED
1316 -- p_project_id IN NUMBER REQUIRED
1317 -- p_task_id IN NUMBER OPTIONAL DEFAULT=FND_API.G_MISS_NUM
1321 -- x_return_status OUT VARCHAR2 REQUIRED
1318 -- p_labor_multiplier IN NUMBER OPTIONAL
1319 -- p_effective_from_date IN DATE REQUIRED
1320 -- p_record_version_number IN NUMBER REQUIRED DEFAULT=1
1322 -- x_msg_count OUT VARCHAR2 REQUIRED
1323 -- x_msg_data OUT VARCHAR2 REQUIRED
1324 --
1325 -- History
1326 --
1327 -- 21-MAY-01 Majid Ansari -Created
1328 --
1329 --
1330 PROCEDURE delete_Labor_Multiplier(
1331 p_commit IN VARCHAR2 DEFAULT FND_API.G_FALSE,
1332 p_validate_only IN VARCHAR2 DEFAULT FND_API.G_TRUE,
1333 p_validation_level IN NUMBER DEFAULT FND_API.G_VALID_LEVEL_FULL,
1334 p_calling_module IN VARCHAR2 DEFAULT 'SELF_SERVICE',
1335 p_debug_mode IN VARCHAR2 DEFAULT 'N',
1336 p_max_msg_count IN NUMBER DEFAULT FND_API.G_MISS_NUM,
1337 p_labor_multiplier_id IN NUMBER,
1338 p_project_id IN NUMBER ,
1339 p_task_id IN NUMBER DEFAULT FND_API.G_MISS_NUM,
1340 p_labor_multiplier IN NUMBER ,
1341 p_effective_from_date IN DATE ,
1342 p_record_version_number IN NUMBER DEFAULT 1,
1343 x_return_status OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
1344 x_msg_count OUT NOCOPY VARCHAR2 , --File.Sql.39 bug 4440895
1345 x_msg_data OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1346 )IS
1347
1348 l_return_status VARCHAR2(1);
1349 l_error_msg_code VARCHAR2(250);
1350 l_dummy_char VARCHAR2(1);
1351 l_msg_count NUMBER;
1352
1353 l_task_id NUMBER;
1354 l_effective_to_date DATE;
1355 BEGIN
1356 IF p_commit = FND_API.G_TRUE
1357 THEN
1358 SAVEPOINT Labor_Multiplier;
1359 END IF;
1360
1361 x_return_status := 'S';
1362
1363 IF p_validate_only = FND_API.G_TRUE AND
1364 p_validation_level > 0
1365 THEN
1366 IF p_task_id = FND_API.G_MISS_NUM
1367 THEN
1368 l_task_id := null;
1369 ELSE
1370 l_task_id := p_task_id;
1371 END IF;
1372
1373 END IF;
1374
1375 IF (p_debug_mode = 'Y')
1376 THEN
1377 pa_debug.debug('Delete_Labor_Multiplier PVT: Checking Lock on record');
1378 END IF;
1379
1380 IF p_validate_only <> FND_API.G_TRUE
1381 THEN
1382 BEGIN
1383 SELECT 'x' INTO l_dummy_char
1384 FROM pa_labor_multipliers
1385 WHERE labor_multiplier_id = p_labor_multiplier_id
1386 AND record_version_number = p_record_version_number
1387 FOR UPDATE OF record_version_number NOWAIT;
1388 EXCEPTION
1389 WHEN TIMEOUT_ON_RESOURCE THEN
1390 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1391 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1392 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1393 x_return_status := 'E' ;
1394 WHEN NO_DATA_FOUND THEN
1395 if p_calling_module = 'FORM' then
1396 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
1397 p_msg_name => 'FORM_RECORD_CHANGED');
1398 x_msg_data := 'FORM_RECORD_CHANGED';
1399 else
1400 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1401 p_msg_name => 'PA_XC_RECORD_CHANGED');
1402 x_msg_data := 'PA_XC_RECORD_CHANGED';
1403 end if;
1404 x_return_status := 'E' ;
1405 WHEN OTHERS THEN
1406 IF SQLCODE = -54 THEN
1407 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1408 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1409 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1410 x_return_status := 'E' ;
1411 ELSE
1412 raise;
1413 END IF;
1414 END;
1415 ELSE
1416 BEGIN
1417 SELECT 'x' INTO l_dummy_char
1418 FROM pa_labor_multipliers
1419 WHERE labor_multiplier_id = p_labor_multiplier_id
1420 AND record_version_number = p_record_version_number;
1421 EXCEPTION
1422 WHEN NO_DATA_FOUND THEN
1423 if p_calling_module = 'FORM' then
1424 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'FND',
1425 p_msg_name => 'FORM_RECORD_CHANGED');
1426 x_msg_data := 'FORM_RECORD_CHANGED';
1427 else
1428 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1429 p_msg_name => 'PA_XC_RECORD_CHANGED');
1430 x_msg_data := 'PA_XC_RECORD_CHANGED';
1431 end if;
1432 x_return_status := 'E' ;
1433 WHEN OTHERS THEN
1434 IF SQLCODE = -54 THEN
1435 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
1436 p_msg_name => 'PA_XC_ROW_ALREADY_LOCKED');
1437 x_msg_data := 'PA_XC_ROW_ALREADY_LOCKED';
1438 x_return_status := 'E' ;
1439 END IF;
1440 END;
1441 end if;
1442 l_msg_count := FND_MSG_PUB.count_msg;
1443
1444 IF l_msg_count > 0 THEN
1445 x_msg_count := l_msg_count;
1446 x_return_status := 'E';
1447 RAISE FND_API.G_EXC_ERROR;
1448 END IF;
1449
1450 DELETE pa_labor_multipliers
1451 WHERE labor_multiplier_id = p_labor_multiplier_id
1452 AND RECORD_VERSION_NUMBER = p_RECORD_VERSION_NUMBER;
1453 EXCEPTION
1454 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1455 IF p_commit = FND_API.G_TRUE
1456 THEN
1457 ROLLBACK TO Labor_Multiplier;
1458 END IF;
1459 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1460 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
1461 p_procedure_name => 'delete_labor_multiplier',
1462 p_error_text => SUBSTRB(SQLERRM,1,240));
1463 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1464
1465 WHEN FND_API.G_EXC_ERROR THEN
1466 IF p_commit = FND_API.G_TRUE
1467 THEN
1468 ROLLBACK TO Labor_Multiplier;
1469 END IF;
1470 x_return_status := 'E';
1471
1472 WHEN OTHERS THEN
1473 IF p_commit = FND_API.G_TRUE
1474 THEN
1475 ROLLBACK TO Labor_Multiplier;
1476 END IF;
1477 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1478 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_BILLING_SCHEDULE_PVT',
1479 p_procedure_name => 'delete_labor_multiplier',
1480 p_error_text => SUBSTRB(SQLERRM,1,240));
1481 RAISE;
1482
1483 END Delete_Labor_Multiplier;
1484
1485 END PA_BILLING_SCHEDULE_PVT;