DBA Data[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;