DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_BILLING_SCHEDULE_UTILS

Source


1 PACKAGE BODY PA_BILLING_SCHEDULE_UTILS AS
2 /* $Header: PABLINUB.pls 120.3 2005/08/19 16:16:26 mwasowic noship $ */
3 
4 -- API name                      : Emp_bill_rate_sch_name_To_Id
5 -- Type                          : Public procedure
6 -- Pre-reqs                      : None
7 -- Return Value                  : N/A
8 -- Prameters
9 -- p_emp_bill_rate_id	    	IN	NUMBER	OPTIONAL   DEFAULT FND_API.G_MISS_NUM
10 -- p_emp_bill_rate_name		IN	VARCHAR2	OPTIONAL   DEFAULT FND_API.G_MISS_CHAR
11 -- p_check_id_flag		IN	VARCHAR2	REQUIRED   DEFAULT 'A'
12 -- x_ emp_bill_rate_id		OUT 	NUMBER	REQUIRED
13 -- x_return_status		OUT	VARCHAR2	REQUIRED
14 -- x_error_msg_code		OUT	VARCHAR2	REQUIRED
15 --
16 --  History
17 --
18 --  21-MAY-01   Majid Ansari             -Created
19 --
20 --
21 
22  PROCEDURE  Emp_bill_rate_sch_name_To_Id(
23    p_emp_bill_rate_id	    	IN	NUMBER	DEFAULT FND_API.G_MISS_NUM,
24    p_emp_bill_rate_name		IN	VARCHAR2	DEFAULT FND_API.G_MISS_CHAR,
25    p_check_id_flag		IN	VARCHAR2	DEFAULT 'A',
26    x_emp_bill_rate_id		OUT 	NOCOPY NUMBER	, --File.Sql.39 bug 4440895
27    x_return_status		OUT	NOCOPY VARCHAR2	, --File.Sql.39 bug 4440895
28    x_error_msg_code		OUT	NOCOPY VARCHAR2	 --File.Sql.39 bug 4440895
29  ) IS
30 
31    l_current_id       NUMBER     := NULL;
32    l_num_ids          NUMBER     := 0;
33    l_id_found_flag    VARCHAR(1) := 'N';
34 
35    CURSOR c_ids
36    IS
37      SELECT brs.bill_rate_sch_id
38        FROM pa_std_bill_rate_schedules brs, pa_lookups l
39       WHERE brs.schedule_type = 'EMPLOYEE'
40         AND brs.std_bill_rate_schedule = p_emp_bill_rate_name
41         AND l.lookup_type = 'SCHEDULE TYPE'
42         AND l.lookup_code (+) = brs.schedule_type;
43 
44 BEGIN
45 
46     IF p_emp_bill_rate_id IS NOT NULL
47     THEN
48        IF p_check_id_flag = 'Y'
49        THEN
50           SELECT brs.bill_rate_sch_id
51             INTO x_emp_bill_rate_id
52             FROM pa_std_bill_rate_schedules brs, pa_lookups l
53            WHERE brs.schedule_type = 'EMPLOYEE'
54              AND brs.bill_rate_sch_id = p_emp_bill_rate_id
55              AND l.lookup_type = 'SCHEDULE TYPE'
56              AND l.lookup_code (+) = brs.schedule_type;
57        ELSIF p_check_id_flag = 'N'
58        THEN
59            x_emp_bill_rate_id := p_emp_bill_rate_id;
60        ELSIF p_check_id_flag = 'A'
61        THEN
62            IF (p_emp_bill_rate_name IS NULL) THEN
63               -- Return a null ID since the name is null.
64               x_emp_bill_rate_id := NULL;
65            ELSE
66               -- Find the ID which matches the Name passed
67               OPEN c_ids;
68               LOOP
69                   FETCH c_ids INTO l_current_id;
70                   EXIT WHEN c_ids%NOTFOUND;
71                   IF (l_current_id = p_emp_bill_rate_id) THEN
72                       l_id_found_flag := 'Y';
73                       x_emp_bill_rate_id := p_emp_bill_rate_id;
74                   END IF;
75               END LOOP;
76               l_num_ids := c_ids%ROWCOUNT;
77               CLOSE c_ids;
78               IF (l_num_ids = 0) THEN
79                   -- No IDs for name
80                   RAISE NO_DATA_FOUND;
81               ELSIF (l_num_ids = 1) THEN
82                   -- Since there is only one ID for the name use it.
83                   x_emp_bill_rate_id := l_current_id;
84               ELSIF (l_id_found_flag = 'N') THEN
85                   -- More than one ID for the name and none of the IDs matched
86                   -- the ID passed in.
87                   RAISE TOO_MANY_ROWS;
88               END IF;
89            END IF;
90        END IF;
91     ELSE
92         IF p_emp_bill_rate_name IS NOT NULL
93         THEN
94             SELECT brs.bill_rate_sch_id
95               INTO x_emp_bill_rate_id
96               FROM pa_std_bill_rate_schedules brs, pa_lookups l
97              WHERE brs.schedule_type = 'EMPLOYEE'
98                AND brs.std_bill_rate_schedule = p_emp_bill_rate_name
99                AND l.lookup_type = 'SCHEDULE TYPE'
100                AND l.lookup_code (+) = brs.schedule_type;
101         ELSE
102             x_emp_bill_rate_id := null;
103         END IF;
104     END IF;
105     x_return_status:= FND_API.G_RET_STS_SUCCESS;
106   EXCEPTION
107        WHEN no_data_found THEN
108          x_emp_bill_rate_id := null;
109          x_return_status:= FND_API.G_RET_STS_ERROR;
110          x_error_msg_code:= 'PA_PRJ_INV_EMP_BR_SCH_ID';
111        WHEN too_many_rows THEN
112          x_emp_bill_rate_id := null;
113          x_return_status:= FND_API.G_RET_STS_ERROR;
114          x_error_msg_code:= 'PA_PRJ_TOO_MANY_EMP_BR';
115        WHEN OTHERS THEN
116          x_emp_bill_rate_id := null;
117          x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
118          RAISE;
119 END Emp_bill_rate_sch_name_To_Id;
120 
121 -- API name                      : Job_bill_rate_sch_name_To_Id
122 -- Type                          : Public procedure
123 -- Pre-reqs                      : None
124 -- Return Value                  : N/A
125 -- Prameters
126 -- p_job_bill_rate_id	    	IN	NUMBER	OPTIONAL   DEFAULT FND_API.G_MISS_NUM
127 -- p_job_bill_rate_name		IN	VARCHAR2	OPTIONAL   DEFAULT FND_API.G_MISS_CHAR
128 -- p_check_id_flag		IN	VARCHAR2	REQUIRED   DEFAULT 'A'
129 -- p_job_group_id	        IN	NUMBER	REQUIRED
130 -- x_job_bill_rate_id		OUT 	NUMBER	REQUIRED
131 -- x_return_status		OUT	VARCHAR2	REQUIRED
132 -- x_error_msg_code		OUT	VARCHAR2	REQUIRED
133 --
134 --  History
135 --
136 --  21-MAY-01   Majid Ansari             -Created
137 --
138 --
139 
140  PROCEDURE  job_bill_rate_sch_name_To_Id(
141    p_job_bill_rate_id	    	IN	NUMBER	DEFAULT FND_API.G_MISS_NUM,
142    p_job_bill_rate_name		IN	VARCHAR2	DEFAULT FND_API.G_MISS_CHAR,
143    p_check_id_flag		IN	VARCHAR2	DEFAULT 'A',
144    p_job_group_id             IN    NUMBER ,
145    x_job_bill_rate_id		OUT 	NOCOPY NUMBER,	 --File.Sql.39 bug 4440895
146    x_return_status		OUT	NOCOPY VARCHAR2	, --File.Sql.39 bug 4440895
147    x_error_msg_code		OUT	NOCOPY VARCHAR2	 --File.Sql.39 bug 4440895
148  ) IS
149 
150    l_current_id       NUMBER     := NULL;
151    l_num_ids          NUMBER     := 0;
152    l_id_found_flag    VARCHAR(1) := 'N';
153 
154    CURSOR c_ids
155    IS
156      SELECT brs.bill_rate_sch_id
157        FROM pa_std_bill_rate_schedules brs, pa_lookups l
158       WHERE brs.schedule_type = 'JOB'
159         AND brs.std_bill_rate_schedule = p_job_bill_rate_name
160         AND brs.job_group_id = p_job_group_id
161         AND l.lookup_type = 'SCHEDULE TYPE'
162         AND l.lookup_code (+) = brs.schedule_type;
163 
164 BEGIN
165 
166     IF p_job_bill_rate_id IS NOT NULL
167     THEN
168        IF p_check_id_flag = 'Y'
169        THEN
170           SELECT brs.bill_rate_sch_id
171             INTO x_job_bill_rate_id
172             FROM pa_std_bill_rate_schedules brs, pa_lookups l
173            WHERE brs.schedule_type = 'JOB'
174              AND brs.bill_rate_sch_id = p_job_bill_rate_id
175              AND brs.job_group_id = p_job_group_id
176              AND l.lookup_type = 'SCHEDULE TYPE'
177              AND l.lookup_code (+) = brs.schedule_type;
178        ELSIF p_check_id_flag = 'N'
179        THEN
180            x_job_bill_rate_id := p_job_bill_rate_id;
181        ELSIF p_check_id_flag = 'A'
182        THEN
183            IF (p_job_bill_rate_name IS NULL) THEN
184               -- Return a null ID since the name is null.
185               x_job_bill_rate_id := NULL;
186            ELSE
187               -- Find the ID which matches the Name passed
188               OPEN c_ids;
189               LOOP
190                   FETCH c_ids INTO l_current_id;
191                   EXIT WHEN c_ids%NOTFOUND;
192                   IF (l_current_id = p_job_bill_rate_id) THEN
193                       l_id_found_flag := 'Y';
194                       x_job_bill_rate_id := p_job_bill_rate_id;
195                   END IF;
196               END LOOP;
197               l_num_ids := c_ids%ROWCOUNT;
198               CLOSE c_ids;
199               IF (l_num_ids = 0) THEN
200                   -- No IDs for name
201                   RAISE NO_DATA_FOUND;
202               ELSIF (l_num_ids = 1) THEN
206                   -- More than one ID for the name and none of the IDs matched
203                   -- Since there is only one ID for the name use it.
204                   x_job_bill_rate_id := l_current_id;
205               ELSIF (l_id_found_flag = 'N') THEN
207                   -- the ID passed in.
208                   RAISE TOO_MANY_ROWS;
209               END IF;
210            END IF;
211        END IF;
212     ELSE
213         IF p_job_bill_rate_name IS NOT NULL
214         THEN
215           SELECT brs.bill_rate_sch_id
216             INTO x_job_bill_rate_id
217             FROM pa_std_bill_rate_schedules brs, pa_lookups l
218            WHERE brs.schedule_type = 'JOB'
219              AND brs.std_bill_rate_schedule = p_job_bill_rate_name
220              AND brs.job_group_id = p_job_group_id
221              AND l.lookup_type = 'SCHEDULE TYPE'
222              AND l.lookup_code (+) = brs.schedule_type;
223         ELSE
224            x_job_bill_rate_id  := null;
225         END IF;
226     END IF;
227     x_return_status:= FND_API.G_RET_STS_SUCCESS;
228   EXCEPTION
229        WHEN no_data_found THEN
230          x_job_bill_rate_id := null;
231          x_return_status:= FND_API.G_RET_STS_ERROR;
232          x_error_msg_code:= 'PA_PRJ_INV_JOB_BR_SCH_ID';
233        WHEN too_many_rows THEN
234          x_job_bill_rate_id := null;
235          x_return_status:= FND_API.G_RET_STS_ERROR;
236          x_error_msg_code:= 'PA_PRJ_TOO_MANY_JOB_BR';
237        WHEN OTHERS THEN
238          x_job_bill_rate_id := null;
239          x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
240          RAISE;
241 END Job_bill_rate_sch_name_To_Id;
242 
243 
244 -- API name                      : Rev_Sch_Name_To_Id
245 -- Type                          : Public procedure
246 -- Pre-reqs                      : None
247 -- Return Value                  : N/A
248 -- Prameters
249 -- p_rev_sch_id	    	      IN	NUMBER	OPTIONAL   DEFAULT FND_API.G_MISS_NUM
250 -- p_rev_sch_name	      IN	VARCHAR2	OPTIONAL   DEFAULT FND_API.G_MISS_CHAR
251 -- p_check_id_flag	      IN	VARCHAR2	REQUIRED   DEFAULT 'A'
252 -- x_rev_sch_id		      OUT 	NUMBER	REQUIRED
253 -- x_return_status	      OUT	VARCHAR2	REQUIRED
254 -- x_error_msg_code	      OUT	VARCHAR2	REQUIRED
255 --
256 --  History
257 --
258 --  21-MAY-01   Majid Ansari             -Created
259 --
260 --
261 
262  PROCEDURE  Rev_Sch_Name_To_Id(
263    p_rev_sch_id	    	      IN	NUMBER	DEFAULT FND_API.G_MISS_NUM,
264    p_rev_sch_name	            IN	VARCHAR2	DEFAULT FND_API.G_MISS_CHAR,
265    p_check_id_flag	      IN	VARCHAR2	DEFAULT 'A',
266    x_rev_sch_id		      OUT 	NOCOPY NUMBER	, --File.Sql.39 bug 4440895
267    x_return_status	      OUT	NOCOPY VARCHAR2	, --File.Sql.39 bug 4440895
268    x_error_msg_code	      OUT	NOCOPY VARCHAR2	 --File.Sql.39 bug 4440895
269  ) IS
270 
271    l_current_id       NUMBER     := NULL;
272    l_num_ids          NUMBER     := 0;
273    l_id_found_flag    VARCHAR(1) := 'N';
274 
275    CURSOR c_ids
276    IS
277            SELECT irs.ind_rate_sch_id
278              FROM pa_lookups l, pa_ind_rate_schedules irs
279             WHERE l.lookup_type = 'IND RATE SCHEDULE TYPE'
280               AND l.lookup_code = irs.ind_rate_schedule_type
281               AND irs.project_id IS NULL
282               AND trunc(sysdate) BETWEEN irs.start_date_active
283                                  AND nvl(irs.end_date_active,trunc(sysdate+1))
284               AND irs.ind_rate_sch_name = p_rev_sch_name ;
285 
286 BEGIN
287     IF p_rev_sch_id IS NOT NULL
288     THEN
289        IF p_check_id_flag = 'Y'
290        THEN
291            SELECT irs.ind_rate_sch_id
292              INTO x_rev_sch_id
293              FROM pa_lookups l, pa_ind_rate_schedules irs
294             WHERE l.lookup_type = 'IND RATE SCHEDULE TYPE'
295               AND l.lookup_code = irs.ind_rate_schedule_type
296               AND irs.project_id IS NULL
297               AND trunc(sysdate) BETWEEN irs.start_date_active
298                                  AND nvl(irs.end_date_active,trunc(sysdate+1))
299               AND irs.ind_rate_sch_id = p_rev_sch_id;
300 
301        ELSIF p_check_id_flag = 'N'
302        THEN
303            x_rev_sch_id := p_rev_sch_id;
304        ELSIF p_check_id_flag = 'A'
305        THEN
306            IF (p_rev_sch_name IS NULL) THEN
307               -- Return a null ID since the name is null.
308               x_rev_sch_id := NULL;
309            ELSE
310               -- Find the ID which matches the Name passed
311               OPEN c_ids;
312               LOOP
313                   FETCH c_ids INTO l_current_id;
314                   EXIT WHEN c_ids%NOTFOUND;
315                   IF (l_current_id = p_rev_sch_id) THEN
316                       l_id_found_flag := 'Y';
317                       x_rev_sch_id := p_rev_sch_id;
318                   END IF;
319               END LOOP;
320               l_num_ids := c_ids%ROWCOUNT;
321               CLOSE c_ids;
322               IF (l_num_ids = 0) THEN
323                   -- No IDs for name
324                   RAISE NO_DATA_FOUND;
328               ELSIF (l_id_found_flag = 'N') THEN
325               ELSIF (l_num_ids = 1) THEN
326                   -- Since there is only one ID for the name use it.
327                   x_rev_sch_id := l_current_id;
329                   -- More than one ID for the name and none of the IDs matched
330                   -- the ID passed in.
331                   RAISE TOO_MANY_ROWS;
332               END IF;
333            END IF;
334        END IF;
335     ELSE
336         IF p_rev_sch_name IS NOT NULL
337         THEN
338            SELECT irs.ind_rate_sch_id
339              INTO x_rev_sch_id
340              FROM pa_lookups l, pa_ind_rate_schedules irs
341             WHERE l.lookup_type = 'IND RATE SCHEDULE TYPE'
342               AND l.lookup_code = irs.ind_rate_schedule_type
343               AND irs.project_id IS NULL
344               AND trunc(sysdate) BETWEEN irs.start_date_active
345                                  AND nvl(irs.end_date_active,trunc(sysdate+1))
346               AND irs.ind_rate_sch_name = p_rev_sch_name ;
347         ELSE
348            x_rev_sch_id  := null;
349         END IF;
350     END IF;
351     x_return_status:= FND_API.G_RET_STS_SUCCESS;
352   EXCEPTION
353        WHEN no_data_found THEN
354          x_rev_sch_id := null;
355          x_return_status:= FND_API.G_RET_STS_ERROR;
356          x_error_msg_code:= 'PA_PRJ_REV_SCHEDULE_ID';
357        WHEN too_many_rows THEN
358          x_rev_sch_id := null;
359          x_return_status:= FND_API.G_RET_STS_ERROR;
360          x_error_msg_code:= 'PA_PRJ_TOO_MANY_REV_SCH';
361        WHEN OTHERS THEN
362          x_rev_sch_id := null;
363          x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
364          RAISE;
365 END Rev_Sch_Name_To_Id;
366 
367 
368 -- API name                      : Inv_Sch_Name_To_Id
369 -- Type                          : Public procedure
370 -- Pre-reqs                      : None
371 -- Return Value                  : N/A
372 -- Prameters
373 -- p_inv_sch_id	    	      IN	NUMBER	OPTIONAL   DEFAULT FND_API.G_MISS_NUM
374 -- p_inv_sch_name	      IN	VARCHAR2	OPTIONAL   DEFAULT FND_API.G_MISS_CHAR
375 -- p_check_id_flag            IN	VARCHAR2	REQUIRED   DEFAULT 'A'
376 -- x_inv_sch_id		      OUT 	NUMBER	REQUIRED
377 -- x_return_status	      OUT	VARCHAR2	REQUIRED
378 -- x_error_msg_code	      OUT	VARCHAR2	REQUIRED
379 --
380 --  History
381 --
382 --  21-MAY-01   Majid Ansari             -Created
383 --
384 --
385 
386  PROCEDURE  Inv_Sch_Name_To_Id(
387    p_Inv_sch_id	    	      IN	NUMBER	DEFAULT FND_API.G_MISS_NUM,
388    p_Inv_sch_name	            IN	VARCHAR2	DEFAULT FND_API.G_MISS_CHAR,
389    p_check_id_flag	      IN	VARCHAR2	DEFAULT 'A',
390    x_Inv_sch_id		      OUT 	NOCOPY NUMBER	, --File.Sql.39 bug 4440895
391    x_return_status	      OUT	NOCOPY VARCHAR2	, --File.Sql.39 bug 4440895
392    x_error_msg_code	      OUT	NOCOPY VARCHAR2	 --File.Sql.39 bug 4440895
393  ) IS
394 
395    l_current_id       NUMBER     := NULL;
396    l_num_ids          NUMBER     := 0;
397    l_id_found_flag    VARCHAR(1) := 'N';
398 
399    CURSOR c_ids
400    IS
401            SELECT irs.ind_rate_sch_id
402              FROM pa_lookups l, pa_ind_rate_schedules irs
403             WHERE l.lookup_type = 'IND RATE SCHEDULE TYPE'
404               AND l.lookup_code = irs.ind_rate_schedule_type
405               AND irs.project_id IS NULL
406               AND trunc(sysdate) BETWEEN irs.start_date_active
407                                  AND nvl(irs.end_date_active,trunc(sysdate+1))
408               AND irs.ind_rate_sch_name = p_inv_sch_name ;
409 
410 BEGIN
411     IF p_inv_sch_id IS NOT NULL
412     THEN
413        IF p_check_id_flag = 'Y'
414        THEN
415            SELECT irs.ind_rate_sch_id
416              INTO x_inv_sch_id
417              FROM pa_lookups l, pa_ind_rate_schedules irs
418             WHERE l.lookup_type = 'IND RATE SCHEDULE TYPE'
419               AND l.lookup_code = irs.ind_rate_schedule_type
420               AND irs.project_id IS NULL
421               AND trunc(sysdate) BETWEEN irs.start_date_active
422                                  AND nvl(irs.end_date_active,trunc(sysdate+1))
423               AND irs.ind_rate_sch_id = p_inv_sch_id;
424 
425        ELSIF p_check_id_flag = 'N'
426        THEN
427            x_inv_sch_id := p_inv_sch_id;
428        ELSIF p_check_id_flag = 'A'
429        THEN
430            IF (p_inv_sch_name IS NULL) THEN
431               -- Return a null ID since the name is null.
432               x_inv_sch_id := NULL;
433            ELSE
437                   FETCH c_ids INTO l_current_id;
434               -- Find the ID which matches the Name passed
435               OPEN c_ids;
436               LOOP
438                   EXIT WHEN c_ids%NOTFOUND;
439                   IF (l_current_id = p_inv_sch_id) THEN
440                       l_id_found_flag := 'Y';
441                       x_inv_sch_id := p_inv_sch_id;
442                   END IF;
443               END LOOP;
444               l_num_ids := c_ids%ROWCOUNT;
445               CLOSE c_ids;
446               IF (l_num_ids = 0) THEN
447                   -- No IDs for name
448                   RAISE NO_DATA_FOUND;
449               ELSIF (l_num_ids = 1) THEN
450                   -- Since there is only one ID for the name use it.
451                   x_inv_sch_id := l_current_id;
452               ELSIF (l_id_found_flag = 'N') THEN
453                   -- More than one ID for the name and none of the IDs matched
454                   -- the ID passed in.
455                   RAISE TOO_MANY_ROWS;
456               END IF;
457            END IF;
458        END IF;
459     ELSE
460         IF p_inv_sch_name IS NOT NULL
461         THEN
462            SELECT irs.ind_rate_sch_id
463              INTO x_inv_sch_id
464              FROM pa_lookups l, pa_ind_rate_schedules irs
465             WHERE l.lookup_type = 'IND RATE SCHEDULE TYPE'
466               AND l.lookup_code = irs.ind_rate_schedule_type
467               AND irs.project_id IS NULL
468               AND trunc(sysdate) BETWEEN irs.start_date_active
469                                  AND nvl(irs.end_date_active,trunc(sysdate+1))
470               AND irs.ind_rate_sch_name = p_inv_sch_name ;
471         ELSE
472            x_inv_sch_id  := null;
473         END IF;
474     END IF;
475     x_return_status:= FND_API.G_RET_STS_SUCCESS;
476   EXCEPTION
477        WHEN no_data_found THEN
478          x_inv_sch_id := null;
479          x_return_status:= FND_API.G_RET_STS_ERROR;
480          x_error_msg_code:= 'PA_PRJ_INV_SCHEDULE_ID';
481        WHEN too_many_rows THEN
482          x_inv_sch_id := null;
486          x_inv_sch_id := null;
483          x_return_status:= FND_API.G_RET_STS_ERROR;
484          x_error_msg_code:= 'PA_PRJ_TOO_MANY_INV_SCH';
485        WHEN OTHERS THEN
487          x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
488          RAISE;
489 END Inv_Sch_Name_To_Id;
490 
491 
492 -- API name                      : Nlbr_schedule_name_To_Id
493 -- Type                          : Public procedure
494 -- Pre-reqs                      : None
495 -- Return Value                  : N/A
496 -- Prameters
497 -- p_sch_id	    	IN	NUMBER	OPTIONAL   DEFAULT FND_API.G_MISS_NUM
498 -- p_sch_name		IN	VARCHAR2	OPTIONAL   DEFAULT FND_API.G_MISS_CHAR
499 -- p_nlbr_org_id        IN    NUMBER      REQUIRED
500 -- p_check_id_flag	IN	VARCHAR2	REQUIRED   DEFAULT 'A'
501 -- x_sch_id		OUT 	NUMBER	REQUIRED
502 -- x_return_status	OUT	VARCHAR2	REQUIRED
503 -- x_error_msg_code	OUT	VARCHAR2	REQUIRED
504 --
505 --  History
506 --
507 --  21-MAY-01   Majid Ansari             -Created
508 --
509 --
510 
511  PROCEDURE  Nlbr_schedule_name_To_Id(
512    p_sch_name		IN	VARCHAR2	DEFAULT FND_API.G_MISS_CHAR,
513    p_nlbr_org_id        IN    NUMBER,
514    p_check_id_flag	IN	VARCHAR2	DEFAULT 'A',
515    x_sch_name	      OUT 	NOCOPY VARCHAR2	, --File.Sql.39 bug 4440895
516    x_return_status	OUT	NOCOPY VARCHAR2	, --File.Sql.39 bug 4440895
517    x_error_msg_code	OUT	NOCOPY VARCHAR2	 --File.Sql.39 bug 4440895
518  ) IS
519 BEGIN
520     IF p_sch_name IS NOT NULL
521     THEN
522        IF p_check_id_flag = 'Y'
523        THEN
524           SELECT brs.std_bill_rate_schedule
525             INTO x_sch_name
526             FROM pa_std_bill_rate_schedules brs, pa_lookups l
527            WHERE organization_id = p_nlbr_org_id
528              AND brs.schedule_type = 'NON-LABOR'
529              AND l.lookup_type = 'SCHEDULE TYPE'
530              AND l.lookup_code (+) = brs.schedule_type
531              AND brs.std_bill_rate_schedule = p_sch_name;
532        ELSE
533            x_sch_name := p_sch_name;
534        END IF;
535     END IF;
536     x_return_status:= FND_API.G_RET_STS_SUCCESS;
537   EXCEPTION
538        WHEN no_data_found THEN
539          x_sch_name := NULL;
540          x_return_status:= FND_API.G_RET_STS_ERROR;
541          x_error_msg_code:= 'PA_PRJ_NL_SCHEDULE_ID';
542        WHEN too_many_rows THEN
543          x_sch_name := NULL;
544          x_return_status:= FND_API.G_RET_STS_ERROR;
545          x_error_msg_code:= 'PA_PRJ_TOO_MANY_NL_SCH';
546        WHEN OTHERS THEN
547          x_sch_name := NULL;
548          x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
549          RAISE;
550 END Nlbr_schedule_name_To_Id;
551 
552 
556 -- Return Value                  : N/A
553 -- API name                      : NL_org_sch_Name_To_Id
554 -- Type                          : Public procedure
555 -- Pre-reqs                      : None
557 -- Prameters
558 -- p_org_id	    	IN	NUMBER	OPTIONAL   DEFAULT FND_API.G_MISS_NUM
559 -- p_org_name		IN	VARCHAR2	OPTIONAL   DEFAULT FND_API.G_MISS_CHAR
560 -- p_nlbr_org_id        IN    NUMBER      REQUIRED
561 -- p_check_id_flag	IN	VARCHAR2	REQUIRED   DEFAULT 'A'
562 -- x_org_id		OUT 	NUMBER	REQUIRED
563 -- x_return_status	OUT	VARCHAR2	REQUIRED
564 -- x_error_msg_code	OUT	VARCHAR2	REQUIRED
565 --
566 --  History
567 --
568 --  21-MAY-01   Majid Ansari             -Created
569 --
570 --
571 
572  PROCEDURE  NL_org_sch_Name_To_Id(
573    p_org_id	    	      IN	NUMBER	DEFAULT FND_API.G_MISS_NUM,
574    p_org_name		IN	VARCHAR2	DEFAULT FND_API.G_MISS_CHAR,
575    p_check_id_flag	IN	VARCHAR2	DEFAULT 'A',
576    x_org_id		      OUT 	NOCOPY NUMBER	, --File.Sql.39 bug 4440895
577    x_return_status	OUT	NOCOPY VARCHAR2	, --File.Sql.39 bug 4440895
578    x_error_msg_code	OUT	NOCOPY VARCHAR2	 --File.Sql.39 bug 4440895
579  ) IS
580 
581    l_current_id       NUMBER     := NULL;
582    l_num_ids          NUMBER     := 0;
583    l_id_found_flag    VARCHAR(1) := 'N';
584 
585    CURSOR c_ids
586    IS
587            SELECT o.organization_id
588              FROM pa_organizations_sbrs_v o
589             WHERE o.schedule_type = 'NON-LABOR'
590               AND o.name = p_org_name;
591 
592 BEGIN
593     IF p_org_id IS NOT NULL
594     THEN
595        IF p_check_id_flag = 'Y'
596        THEN
597            SELECT o.organization_id
598              INTO x_org_id
599              FROM pa_organizations_sbrs_v o
600             WHERE o.schedule_type = 'NON-LABOR'
601               AND o.organization_id = p_org_id;
602        ELSIF p_check_id_flag = 'N'
603        THEN
604            x_org_id := p_org_id;
605        ELSIF p_check_id_flag = 'A'
606        THEN
607            IF (p_org_name IS NULL) THEN
608               -- Return a null ID since the name is null.
609               x_org_id := NULL;
610            ELSE
611               -- Find the ID which matches the Name passed
612               OPEN c_ids;
613               LOOP
614                   FETCH c_ids INTO l_current_id;
615                   EXIT WHEN c_ids%NOTFOUND;
616                   IF (l_current_id = p_org_id) THEN
617                       l_id_found_flag := 'Y';
618                       x_org_id := p_org_id;
619                   END IF;
620               END LOOP;
621               l_num_ids := c_ids%ROWCOUNT;
622               CLOSE c_ids;
623               IF (l_num_ids = 0) THEN
624                   -- No IDs for name
625                   RAISE NO_DATA_FOUND;
626               ELSIF (l_num_ids = 1) THEN
627                   -- Since there is only one ID for the name use it.
628                   x_org_id := l_current_id;
629               ELSIF (l_id_found_flag = 'N') THEN
630                   -- More than one ID for the name and none of the IDs matched
631                   -- the ID passed in.
632                   RAISE TOO_MANY_ROWS;
633               END IF;
634            END IF;
635        END IF;
636     ELSE
637         IF p_org_name IS NOT NULL
638         THEN
639            SELECT o.organization_id
640              INTO x_org_id
641              FROM pa_organizations_sbrs_v o
642             WHERE o.schedule_type = 'NON-LABOR'
643               AND o.name = p_org_name;
644         ELSE
645            x_org_id := null;
646         END IF;
647     END IF;
648     x_return_status:= FND_API.G_RET_STS_SUCCESS;
649   EXCEPTION
650        WHEN no_data_found THEN
651          x_org_id := null;
652          x_return_status:= FND_API.G_RET_STS_ERROR;
653          x_error_msg_code:= 'PA_PRJ_INVALID_ORG';
654        WHEN too_many_rows THEN
655          x_org_id := null;
661          RAISE;
656          x_return_status:= FND_API.G_RET_STS_ERROR;
657          x_error_msg_code:= 'PA_PRJ_TOO_MANY_ORG';
658        WHEN OTHERS THEN
659          x_org_id := null;
660          x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
662 END NL_org_sch_Name_To_Id;
663 
664 
665 -- API name                      : Duplicate_labor_Multiplier
666 -- Type                          : Public Function
667 -- Pre-reqs                      : None
668 -- Return Value                  : BOLLEAN
669 -- Prameters
670 -- p_project_id	          IN	NUMBER	REQUIRED
671 -- p_task_id	          IN	NUMBER	OPTIONAL      DEFAULT FND_API.MISS_NUM
672 -- p_effective_from_date  IN	DATE	      REQUIRED
673 -- p_effective_to_date      IN      DATE
674 -- p_labor_multiplier_id    IN      NUMBER
675 -- x_return_status	  OUT 	VARCHAR2	REQUIRED
676 --
677 --  History
678 --
679 --  21-MAY-01   Majid Ansari             -Created
680 --
681 --
682 
683  FUNCTION  Duplicate_labor_Multiplier(
684    p_project_id	          IN	NUMBER  ,
685    p_task_id	          IN	NUMBER  DEFAULT FND_API.G_MISS_NUM,
686    p_effective_from_date    IN	DATE	  ,
687    p_effective_to_date      IN      DATE    ,
688    p_labor_multiplier_id    IN      NUMBER ,
689    x_return_status	    OUT 	NOCOPY VARCHAR2	 --File.Sql.39 bug 4440895
690  ) RETURN BOOLEAN IS
691 
692    CURSOR cur_lbr_mult
693    IS
694      SELECT 'x'
695        FROM pa_labor_multipliers
696       WHERE project_id  = p_project_id
697         AND NVL( TASK_ID, -1 ) = DECODE( p_task_id, NULL, -1, p_task_id )
698         AND (p_effective_from_date BETWEEN START_DATE_ACTIVE AND NVL(END_DATE_ACTIVE, p_effective_from_date + 1)
699              OR  p_effective_to_date BETWEEN START_DATE_ACTIVE AND NVL(END_DATE_ACTIVE, p_effective_to_date + 1)
700              OR  START_DATE_ACTIVE BETWEEN p_effective_from_date AND NVL(p_effective_to_date, START_DATE_ACTIVE + 1))
701         AND ( p_labor_multiplier_id IS NULL OR labor_multiplier_id <> p_labor_multiplier_id );
702    l_dummy_char         VARCHAR2(1);
703  BEGIN
704       OPEN cur_lbr_mult;
705       FETCH cur_lbr_mult INTO l_dummy_char;
706       IF cur_lbr_mult%FOUND
707       THEN
708           CLOSE cur_lbr_mult;
709           RETURN TRUE;
710       ELSE
711          CLOSE cur_lbr_mult;
712          RETURN FALSE;
713       END IF;
714       x_return_status:= FND_API.G_RET_STS_SUCCESS;
715  EXCEPTION
716        WHEN OTHERS THEN
717          x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
718          RAISE;
719  END Duplicate_labor_Multiplier;
720 
721 -- API name                      : Emp_job_mandatory_validation
722 -- Type                          : Public procedure
723 -- Pre-reqs                      : None
724 -- Return Value                  : N/A
725 -- Prameters
726 -- p_emp_bill_rate_sch_id	IN	NUMBER	OPTIONAL DEFAULT FND_API.G_MISS_NUM
727 -- p_job_bill_rate_sch_id	IN	VARCHAR2	OPTIONAL DEFAULT FND_API.G_MISS_NUM
728 -- x_return_status	        OUT	VARCHAR2	REQUIRED
729 -- x_error_msg_code	        OUT	VARCHAR2	REQUIRED
730 --
731 --  History
732 --
733 --  21-MAY-01   Majid Ansari             -Created
734 --
735 --
736 
737  PROCEDURE  Emp_job_mandatory_validation(
738    p_emp_bill_rate_sch_id	  IN	NUMBER	DEFAULT FND_API.G_MISS_NUM,
739    p_job_bill_rate_sch_id	  IN	VARCHAR2	DEFAULT FND_API.G_MISS_NUM,
740    x_return_status	        OUT	NOCOPY VARCHAR2	, --File.Sql.39 bug 4440895
741    x_error_msg_code	        OUT	NOCOPY VARCHAR2	 --File.Sql.39 bug 4440895
742  ) IS
743  BEGIN
744       IF pa_install.is_prm_licensed = 'Y' THEN
745          IF p_job_bill_rate_sch_id IS NULL OR p_job_bill_rate_sch_id = FND_API.G_MISS_NUM
746          THEN
747             x_return_status:= FND_API.G_RET_STS_ERROR;
748             x_error_msg_code:= 'PA_JOB_BILL_RT_SCH_NOT_NULL';
749          END IF;
750       ELSE
751          IF ( p_emp_bill_rate_sch_id IS NULL OR p_emp_bill_rate_sch_id = FND_API.G_MISS_NUM ) AND
752             ( p_job_bill_rate_sch_id IS NULL OR p_job_bill_rate_sch_id = FND_API.G_MISS_NUM )
753          THEN
754             x_return_status:= FND_API.G_RET_STS_ERROR;
755             x_error_msg_code:= 'PA_EJ_BILL_RT_SCH_NOT_NULL';
756          END IF;
757       END IF;
758  EXCEPTION
759        WHEN OTHERS THEN
760          x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
761          RAISE;
762  END Emp_job_mandatory_validation;
763 
764 -- API name                      : Get_Job_Group_Id
765 -- Type                          : Public procedure
766 -- Pre-reqs                      : None
767 -- Return Value                  : N/A
768 -- Prameters
769 -- p_project_id                 IN      NUMBER          REQUIRED
770 -- x_return_status	        OUT	VARCHAR2	REQUIRED
771 --
772 --  History
773 --
774 --  21-MAY-01   Majid Ansari             -Created
775 --
776 --
777 
778  FUNCTION Get_Job_Group_Id(
779    p_project_id NUMBER ,
780    x_return_status OUT NOCOPY VARCHAR2  --File.Sql.39 bug 4440895
781  ) RETURN NUMBER AS
782 
783   --Derive bill_job_group_id from pa_projects_prm_v using project-task id.
784   CURSOR cur_job_group IS
785          SELECT bill_job_group_id
786            FROM pa_projects_prm_v
787           WHERE project_id = p_project_id;
788   l_job_group_id NUMBER;
789 
790  BEGIN
791       OPEN cur_job_group;
792       FETCH cur_job_group INTO l_job_group_id;
793       CLOSE cur_job_group;
794       x_return_status:= FND_API.G_RET_STS_SUCCESS;
795       RETURN l_job_group_id;
796  EXCEPTION
800  END Get_Job_Group_Id;
797        WHEN OTHERS THEN
798          x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
799          RAISE;
801 
802 
803 -- API name                      : Get_Project_Type_Class
804 -- Type                          : Public procedure
805 -- Pre-reqs                      : None
806 -- Return Value                  : VARCHAR2
807 -- Prameters
808 -- p_project_id                 IN      NUMBER          REQUIRED
809 -- x_return_status              OUT     VARCHAR2        REQUIRED
810 --
811 --  History
812 --
813 --  21-MAY-01   Majid Ansari             -Created
814 --
815 --
816 
817  FUNCTION Get_Project_Type_Class(
818    p_project_id NUMBER ,
819    x_return_status OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
820  ) RETURN VARCHAR2 AS
821 
822   CURSOR cur_projects_all
823   IS
824     SELECT ppt.project_type_class_code
825       FROM pa_projects_all ppa, pa_project_types ppt
826      WHERE ppa.project_id = p_project_id
827        AND ppa.project_type = ppt.project_type;
828 
829   l_project_type_class_code  VARCHAR2(30);
830 BEGIN
831    OPEN cur_projects_all;
832    FETCH cur_projects_all INTO l_project_type_class_code;
833    CLOSE cur_projects_all;
834    RETURN l_project_type_class_code;
835    x_return_status:= FND_API.G_RET_STS_SUCCESS;
836 EXCEPTION
837     WHEN OTHERS THEN
838     x_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
839 END Get_Project_Type_Class;
840 
841 -- API name                      : CHECK_BILL_INFO_REQ
842 -- Type                          : Public procedure
843 -- Pre-reqs                      : None
844 -- Return Value                  : N/A
845 -- Prameters
846 -- p_project_type_class_code   IN    VARCHAR2    REQUIRED
847 -- p_lbr_schedule_type         IN    VARCHAR2    REQUIRED
848 -- p_non_lbr_schedule_type     IN    VARCHAR2    REQUIRED
849 -- p_emp_bill_rate_sch_id      IN    NUMBER      REQUIRED
850 -- p_job_bill_rate_sch_id      IN    NUMBER      REQUIRED
851 -- p_rev_schedule_id           IN    NUMBER      REQUIRED
852 -- p_inv_schedule_id           IN    NUMBER      REQUIRED
853 -- p_nlbr_bill_rate_org_id     IN    NUMBER      REQUIRED
854 -- p_nlbr_std_bill_rate_sch    IN    VARCHAR2    REQUIRED
855 -- x_error_msg_code            OUT   VARCHAR2    REQUIRED
856 -- x_return_status             OUT   VARCHAR2    REQUIRED
857 --
858 --  History
859 --
860 --  06-JUN-01   Majid Ansari             -Created
861 --
862 --
863 
864 PROCEDURE CHECK_BILL_INFO_REQ(
865    p_project_type_class_code       IN VARCHAR2,
866    p_lbr_schedule_type             IN VARCHAR2,
867    p_non_lbr_schedule_type         IN VARCHAR2,
868    p_emp_bill_rate_sch_id          IN NUMBER,
869    p_job_bill_rate_sch_id          IN NUMBER,
870    p_rev_schedule_id               IN NUMBER,
871    p_inv_schedule_id               IN NUMBER,
872    p_nlbr_bill_rate_org_id         IN NUMBER,
873    p_nlbr_std_bill_rate_sch        IN VARCHAR2,
874    x_error_msg_code               OUT  NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
875    x_return_status                OUT  NOCOPY VARCHAR2    --File.Sql.39 bug 4440895
876  ) AS
877 
878   l_error_msg_code   VARCHAR2(250);
879   l_return_status    VARCHAR2(1);
880 BEGIN
881    x_return_status := 'S';
882    IF p_project_type_class_code = 'CONTRACT'
883    THEN
884       IF p_lbr_schedule_type = 'B'
885       THEN
886         PA_BILLING_SCHEDULE_UTILS.Emp_job_mandatory_validation(
887                                 p_emp_bill_rate_sch_id,
888                                 p_job_bill_rate_sch_id,
889                                 l_return_status,
890                                 l_error_msg_code );
891         IF l_return_status = FND_API.G_RET_STS_ERROR
892         THEN
893             x_error_msg_code := l_error_msg_code;
894             x_return_status := 'E';
895             RAISE  FND_API.G_EXC_ERROR;
896         END IF;
897       ELSIF p_lbr_schedule_type = 'I'
898       THEN
899          --If any of the revenue or inv schedule is null then raise a message.
900          IF p_rev_schedule_id IS NULL OR p_rev_schedule_id = FND_API.G_MISS_NUM
901          THEN
902             x_error_msg_code := 'PA_PRJ_REV_SCH_REQ';
903             x_return_status:= FND_API.G_RET_STS_ERROR;
904             RAISE  FND_API.G_EXC_ERROR;
905          END IF;
906 
907          IF p_inv_schedule_id IS NULL OR p_inv_schedule_id = FND_API.G_MISS_NUM
908          THEN
909             x_error_msg_code := 'PA_PRJ_INV_SCH_REQ';
910             x_return_status:= FND_API.G_RET_STS_ERROR;
911             RAISE  FND_API.G_EXC_ERROR;
912          END IF;
913       END IF;
914 
915       IF p_non_lbr_schedule_type = 'B'
916       THEN
917          IF p_nlbr_bill_rate_org_id IS NULL OR p_nlbr_bill_rate_org_id = FND_API.G_MISS_NUM
918          THEN
919             x_error_msg_code := 'PA_PRJ_ORG_ID_REQ';
920             x_return_status:= FND_API.G_RET_STS_ERROR;
921             RAISE  FND_API.G_EXC_ERROR;
922          END IF;
923 
924          IF p_nlbr_std_bill_rate_sch IS NULL  OR p_nlbr_std_bill_rate_sch = FND_API.G_MISS_CHAR
925          THEN
926             x_error_msg_code := 'PA_PRJ_NL_SCH_REQ';
927             x_return_status:= FND_API.G_RET_STS_ERROR;
928             RAISE  FND_API.G_EXC_ERROR;
929          END IF;
930 
931       ELSIF p_non_lbr_schedule_type = 'I'
932       THEN
933 
934          IF p_rev_schedule_id IS NULL OR p_rev_schedule_id = FND_API.G_MISS_NUM
935          THEN
936             x_error_msg_code := 'PA_PRJ_REV_SCH_REQ';
937             x_return_status:= FND_API.G_RET_STS_ERROR;
938             RAISE  FND_API.G_EXC_ERROR;
939          END IF;
940 
941          IF p_inv_schedule_id IS NULL OR p_inv_schedule_id = FND_API.G_MISS_NUM
942          THEN
943             x_error_msg_code := 'PA_PRJ_INV_SCH_REQ';
944             x_return_status:= FND_API.G_RET_STS_ERROR;
945             RAISE  FND_API.G_EXC_ERROR;
946          END IF;
947       END IF;
948 
949    END IF;
950 EXCEPTION
951     WHEN FND_API.G_EXC_ERROR THEN
952     x_return_status:= FND_API.G_RET_STS_ERROR;
953 END CHECK_BILL_INFO_REQ;
954 
955 -- API name                      : CHECK_LABOR_MULTIPLIER_REQ
956 -- Type                          : Public procedure
957 -- Pre-reqs                      : None
958 -- Return Value                  : N/A
959 -- Prameters
960 -- p_labor_multiplier              IN NUMBER,
961 -- p_effective_from_date           IN VARCHAR2,
962 -- x_error_msg_code                OUT   VARCHAR2    REQUIRED
963 -- x_return_status                 OUT   VARCHAR2    REQUIRED
964 --
965 --  History
966 --
967 --  06-JUN-01   Majid Ansari             -Created
968 --
969 --
970 
971 PROCEDURE CHECK_LABOR_MULTIPLIER_REQ(
972    p_labor_multiplier              IN NUMBER,
973    p_effective_from_date           IN DATE,
974    x_error_msg_code                OUT NOCOPY VARCHAR2, --File.Sql.39 bug 4440895
975    x_return_status                 OUT NOCOPY VARCHAR2    --File.Sql.39 bug 4440895
976  ) AS
977 BEGIN
978      x_return_status:= FND_API.G_RET_STS_SUCCESS;
979      IF p_labor_multiplier IS NULL OR p_labor_multiplier = FND_API.G_MISS_NUM
980      THEN
981         x_error_msg_code := 'PA_PRJ_LB_MULT_REQ';
982         x_return_status:= FND_API.G_RET_STS_ERROR;
983         RAISE  FND_API.G_EXC_ERROR;
984      END IF;
985 
986      IF p_effective_from_date IS NULL OR p_effective_from_date = FND_API.G_MISS_DATE
987      THEN
988         x_error_msg_code := 'PA_PRJ_ST_DT_REQ';
989         x_return_status:= FND_API.G_RET_STS_ERROR;
990         RAISE  FND_API.G_EXC_ERROR;
991      END IF;
992 
993 EXCEPTION
994     WHEN FND_API.G_EXC_ERROR THEN
995     x_return_status:= FND_API.G_RET_STS_ERROR;
996 END CHECK_LABOR_MULTIPLIER_REQ;
997 
998 -- API name                      : CHECK_START_END_DATE
999 -- Type                          : Public procedure
1000 -- Pre-reqs                      : None
1001 -- Return Value                  : N/A
1002 -- Prameters
1003 -- p_effective_from_date           IN  DATE        REQUIRED
1004 -- p_effective_to_date             IN  DATE        REQUIRED
1005 -- x_msg_count                     OUT NUMBER      REQUIRED
1006 -- x_msg_data                      OUT VARCHAR2    REQUIRED
1007 -- x_return_status                 OUT VARCHAR2    REQUIRED
1008 --
1009 --  History
1010 --
1011 --  06-JUN-01   Majid Ansari             -Created
1012 --
1013 --
1014 
1015 PROCEDURE CHECK_START_END_DATE(
1016    p_effective_from_date           IN DATE,
1017    p_effective_to_date             IN DATE,
1018    x_return_status                 OUT NOCOPY VARCHAR2  , --File.Sql.39 bug 4440895
1019    x_error_msg_code                OUT NOCOPY VARCHAR2 --File.Sql.39 bug 4440895
1020  ) AS
1021 BEGIN
1022      x_return_status := FND_API.G_RET_STS_SUCCESS;
1023      IF p_effective_from_date IS NOT NULL AND p_effective_to_date IS NOT NULL
1024      THEN
1025         IF p_effective_from_date > p_effective_to_date
1026         THEN
1027            x_error_msg_code := 'PA_PRJ_ST_DT_LESS_ED_DT';
1028            x_return_status:= FND_API.G_RET_STS_ERROR;
1029            RAISE  FND_API.G_EXC_ERROR;
1030         END IF;
1031      END IF;
1032 EXCEPTION
1033     WHEN FND_API.G_EXC_ERROR THEN
1034     x_return_status:= FND_API.G_RET_STS_ERROR;
1035 END CHECK_START_END_DATE;
1036 
1037 END PA_BILLING_SCHEDULE_UTILS;