1 PACKAGE BODY PO_HXC_INTERFACE_PVT AS
2 /* $Header: POXVIHXB.pls 120.2.12020000.2 2013/02/10 19:05:50 vegajula ship $*/
3
4 g_pkg_name CONSTANT VARCHAR2(30) := 'PO_HXC_INTERFACE_PVT';
5 g_log_head CONSTANT VARCHAR2(40) := 'po.plsql.' || g_pkg_name || '.';
6 g_debug_unexp BOOLEAN := PO_DEBUG.is_debug_unexp_on;
7 g_debug_stmt BOOLEAN := PO_DEBUG.is_debug_stmt_on;
8
9 --<Bug 13828916 Start>
10 -------------------------------------------------------------------------------
11 --Start of Comments
12 --Name: check_if_line_rate_based
13 --Pre-reqs:
14 -- None.
15 --Modifies:
16 -- None.
17 --Locks:
18 -- None.
19 --Function:
20 -- Check whether the given standard PO header includes any least one rate
21 -- based line or the given line is rate based. Only rate based line can
22 -- be associated with timecard. There is no need to check OTL timecards
23 -- for non-rate-based line.
24 --Parameters:
25 --IN:
26 --p_field_name
27 -- Use g_field_PO_HEADER_ID or g_field_PO_LINE_ID.
28 -- From a PLD, use the functions field_po_header_id and field_po_line_id.
29 --p_field_value
30 -- Identifier of the header/line to check
31 --OUT:
32 --x_line_rate_based
33 -- TRUE if the given standard PO header or line meets conditions, FALSE otherwise.
34 --x_return_status
35 -- FND_API.G_RET_STS_SUCCESS if the API completed successfully.
36 -- FND_API.G_RET_STS_UNEXP_ERROR if an unexpected error occurred.
37 --End of Comments
38 -------------------------------------------------------------------------------
39 PROCEDURE check_if_line_rate_based (
40 p_api_version IN NUMBER,
41 x_return_status OUT NOCOPY VARCHAR2,
42 p_field_name IN VARCHAR2,
43 p_field_value IN VARCHAR2,
44 x_line_rate_based OUT NOCOPY BOOLEAN
45 ) IS
46 l_api_name CONSTANT VARCHAR2(30) := 'CHECK_IF_LINE_RATE_BASED';
47 l_log_head CONSTANT VARCHAR2(100) := g_log_head || l_api_name;
48 l_api_version CONSTANT NUMBER := 1.0;
49 l_progress VARCHAR2(3) := '000';
50 c_RATE CONSTANT VARCHAR2(30) := 'RATE';
51 l_exists_flag NUMBER := 0;
52 BEGIN
53 IF g_debug_stmt THEN
54 PO_DEBUG.debug_begin(l_log_head);
55 END IF;
56
57 x_return_status := FND_API.G_RET_STS_SUCCESS;
58
59 -- Standard API initialization:
60 IF NOT FND_API.compatible_api_call (
61 p_current_version_number => l_api_version,
62 p_caller_version_number => p_api_version,
63 p_api_name => l_api_name,
64 p_pkg_name => g_pkg_name ) THEN
65 RAISE FND_API.g_exc_unexpected_error;
66 END IF;
67
68 IF g_debug_stmt THEN
69 PO_DEBUG.debug_stmt(l_log_head, l_progress,
70 'Calling API check_if_line_rate_based for'
71 ||' field_name: '||p_field_name
72 ||' field_value: '||p_field_value);
73 END IF;
74
75 IF PO_HXC_INTERFACE_PVT.field_PO_HEADER_ID = p_field_name THEN
76 SELECT
77 sign(count(*))
78 INTO
79 l_exists_flag
80 FROM
81 PO_LINES_ALL LINE
82 WHERE
83 LINE.PO_HEADER_ID = p_field_value
84 AND LINE.ORDER_TYPE_LOOKUP_CODE = c_RATE;
85
86 ELSIF PO_HXC_INTERFACE_PVT.field_PO_LINE_ID = p_field_name THEN
87 SELECT
88 sign(count(*))
89 INTO
90 l_exists_flag
91 FROM
92 PO_LINES_ALL LINE
93 WHERE
94 LINE.PO_LINE_ID = p_field_value
95 AND LINE.order_type_lookup_code = c_RATE;
96
97 END IF;
98
99 IF l_exists_flag = 1 THEN
100 x_line_rate_based := TRUE;
101 ELSE
102 x_line_rate_based := FALSE;
103 END IF;
104
105 IF g_debug_stmt THEN
106 IF (x_line_rate_based) THEN
107 PO_DEBUG.debug_stmt(l_log_head, l_progress,
108 'x_line_rate_based returned true.');
109 ELSE
110 PO_DEBUG.debug_stmt(l_log_head, l_progress,
111 'x_line_rate_based returned false.');
112 END IF;
113 END IF;
114
115 EXCEPTION
116 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
117 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
118 IF g_debug_unexp THEN
119 PO_DEBUG.debug_exc(l_log_head, l_progress);
120 END IF;
121 WHEN OTHERS THEN
122 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
123 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
124 IF g_debug_unexp THEN
125 PO_DEBUG.debug_exc(l_log_head, l_progress);
126 END IF;
127 END check_if_line_rate_based;
128 --<Bug 13828916 End>
129
130 -------------------------------------------------------------------------------
131 --Start of Comments
132 --Name: get_timecard_amount
133 --Pre-reqs:
134 -- None.
135 --Modifies:
136 -- None.
137 --Locks:
138 -- None.
139 --Function:
140 -- Calls an OTL API to obtain the total amount of submitted/approved
141 -- timecards associated with the given PO line.
142 --Parameters:
143 --IN:
144 --p_po_line_id
145 -- Identifier of the Standard PO line
146 --OUT:
147 --x_amount
148 -- Total timecard amount for the PO line; 0 if no contractor is associated
149 -- with the line.
150 --x_return_status
151 -- FND_API.G_RET_STS_SUCCESS if the API completed successfully.
152 -- FND_API.G_RET_STS_UNEXP_ERROR if an unexpected error occurred.
153 --End of Comments
154 -------------------------------------------------------------------------------
155 PROCEDURE get_timecard_amount (
156 p_api_version IN NUMBER,
157 x_return_status OUT NOCOPY VARCHAR2,
158 p_po_line_id IN PO_LINES_ALL.po_line_id%TYPE,
159 x_amount OUT NOCOPY NUMBER
160 ) IS
161 l_api_name CONSTANT VARCHAR2(30) := 'GET_TIMECARD_AMOUNT';
162 l_log_head CONSTANT VARCHAR2(100) := g_log_head || l_api_name;
163 l_api_version CONSTANT NUMBER := 1.0;
164 l_progress VARCHAR2(3) := '000';
165 l_person_id PER_ALL_PEOPLE_F.person_id%TYPE;
166
167 --<Bug 14578229 Start>
168 l_line_rate_based BOOLEAN := FALSE;
169 l_return_status VARCHAR2(1);
170 --<Bug 14578229 End>
171
172 BEGIN
173 IF g_debug_stmt THEN
174 PO_DEBUG.debug_begin(l_log_head);
175 END IF;
176
177 x_return_status := FND_API.G_RET_STS_SUCCESS;
178
179 -- Standard API initialization:
180 IF NOT FND_API.compatible_api_call (
181 p_current_version_number => l_api_version,
182 p_caller_version_number => p_api_version,
183 p_api_name => l_api_name,
184 p_pkg_name => g_pkg_name ) THEN
185 RAISE FND_API.g_exc_unexpected_error;
186 END IF;
187
188 --<Bug 14578229 Start>
189 check_if_line_rate_based (p_api_version => p_api_version,
190 x_return_status => l_return_status,
191 p_field_name => PO_HXC_INTERFACE_PVT.field_PO_LINE_ID(),
192 p_field_value => p_po_line_id,
193 x_line_rate_based => l_line_rate_based);
194 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
195 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
196 END IF;
197
198 IF (l_line_rate_based <> TRUE) THEN
199 x_amount := 0;
200 ELSE
201
202 -- Retrieve the contractor associated with this Standard PO Temp Labor line.
203 l_person_id := HR_PO_INFO.get_person_id_for_po_line (
204 p_po_line_id => p_po_line_id );
205
206 IF g_debug_stmt THEN
207 PO_DEBUG.debug_stmt(l_log_head, l_progress,
208 'Calling OTL API get_mappingvalue_sum for'
209 ||' po_line_id: '||p_po_line_id
210 ||', person_id: '||l_person_id);
211 END IF;
212
213 IF (l_person_id IS NULL) THEN
214 x_amount := 0;
215 ELSE -- l_person_id IS NOT NULL
216 -- Bug 3518004: Changed the package name from HXC_MAPPING_UTILITIES
217 -- to HXC_INTEGRATION_LAYER_V1_GRP.
218 x_amount := HXC_INTEGRATION_LAYER_V1_GRP.get_mappingvalue_sum (
219 p_bld_blk_info_type => g_bld_blk_info_type_PO,
220 p_field_name1 => g_field_AMOUNT,
221 p_field_name2 => g_field_PO_LINE_ID,
222 p_field_value2 => p_po_line_id,
223 p_status => g_status_SUBMITTED,
224 p_resource_id => l_person_id);
225
226 IF g_debug_stmt THEN
227 PO_DEBUG.debug_stmt(l_log_head, l_progress,
228 'get_mappingvalue_sum returned: '||x_amount);
229 END IF;
230 END IF;
231
232 END IF;
233 --<Bug 14578229 End>
234
235 EXCEPTION
236 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
237 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
238 IF g_debug_unexp THEN
239 PO_DEBUG.debug_exc(l_log_head, l_progress);
240 END IF;
241 WHEN OTHERS THEN
242 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
243 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
244 IF g_debug_unexp THEN
245 PO_DEBUG.debug_exc(l_log_head, l_progress);
246 END IF;
247 END get_timecard_amount;
248
249 -------------------------------------------------------------------------------
250 --Start of Comments
251 --Name: check_timecard_exists
252 --Pre-reqs:
253 -- None.
254 --Modifies:
255 -- None.
256 --Locks:
257 -- None.
258 --Function:
259 -- Calls an OTL API to check whether there are any timecards associated with
260 -- the given standard PO header or line.
261 --Parameters:
262 --IN:
263 --p_field_name
264 -- Use g_field_PO_HEADER_ID or g_field_PO_LINE_ID.
265 -- From a PLD, use the functions field_po_header_id and field_po_line_id.
266 --p_field_value
267 -- Identifier of the header/line to check
268 --p_end_date
269 -- If not NULL, we will only check for timecards whose end dates are on
270 -- p_end_date or later.
271 --OUT:
272 --x_timecard_exists
273 -- TRUE if there are timecards matching the given conditions, FALSE otherwise.
274 --x_return_status
275 -- FND_API.G_RET_STS_SUCCESS if the API completed successfully.
276 -- FND_API.G_RET_STS_UNEXP_ERROR if an unexpected error occurred.
277 --End of Comments
278 -------------------------------------------------------------------------------
279 PROCEDURE check_timecard_exists (
280 p_api_version IN NUMBER,
281 x_return_status OUT NOCOPY VARCHAR2,
282 p_field_name IN VARCHAR2,
283 p_field_value IN VARCHAR2,
284 p_end_date IN PO_LINES_ALL.expiration_date%TYPE,
285 x_timecard_exists OUT NOCOPY BOOLEAN
286 ) IS
287 l_api_name CONSTANT VARCHAR2(30) := 'CHECK_TIMECARD_EXISTS';
288 l_log_head CONSTANT VARCHAR2(100) := g_log_head || l_api_name;
289 l_api_version CONSTANT NUMBER := 1.0;
290 l_progress VARCHAR2(3) := '000';
291
292 --<Bug 13828916 Start>
293 l_line_rate_based BOOLEAN := FALSE;
294 l_return_status VARCHAR2(1);
295 --<Bug 13828916 End>
296
297 BEGIN
298 IF g_debug_stmt THEN
299 PO_DEBUG.debug_begin(l_log_head);
300 END IF;
301
302 x_return_status := FND_API.G_RET_STS_SUCCESS;
303
304 -- Standard API initialization:
305 IF NOT FND_API.compatible_api_call (
306 p_current_version_number => l_api_version,
307 p_caller_version_number => p_api_version,
308 p_api_name => l_api_name,
309 p_pkg_name => g_pkg_name ) THEN
310 RAISE FND_API.g_exc_unexpected_error;
311 END IF;
312
313 --<Bug 13828916 Start>
314 check_if_line_rate_based (p_api_version => p_api_version,
315 x_return_status => l_return_status,
316 p_field_name => p_field_name,
317 p_field_value => p_field_value,
318 x_line_rate_based => l_line_rate_based);
319 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
320 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
321 END IF;
322
323 IF (l_line_rate_based <> TRUE) THEN
324 x_timecard_exists := FALSE;
325 RETURN;
326 END IF;
327 --<Bug 13828916 End>
328
329 IF g_debug_stmt THEN
330 PO_DEBUG.debug_stmt(l_log_head, l_progress,
331 'Calling OTL API chk_mapping_exists for'
332 ||' field_name: '||p_field_name
333 ||' field_value: '||p_field_value
334 ||', end_date: '||p_end_date);
335 END IF;
336
337 -- Bug# 3569255: For the parameter 'p_retrieval_process_name', pass on the
338 -- value 'Purchasing Retrieval Process' instead of 'NONE'. Otherwise, the API
339 -- will return TRUE, even if all approved timecards have been interfaced into
340 -- PO. What we really want to check is, if there exist any submitted/approved
341 -- timecards that have NOT yet been interfaced into PO.
342
343 -- Bug 3518004: Changed the package name from HXC_MAPPING_UTILITIES
344 -- to HXC_INTEGRATION_LAYER_V1_GRP.
345 x_timecard_exists := HXC_INTEGRATION_LAYER_V1_GRP.chk_mapping_exists (
346 p_bld_blk_info_type => g_bld_blk_info_type_PO,
347 p_field_name => p_field_name,
348 p_field_value => p_field_value,
349 p_scope => g_scope_DETAIL,
350 --p_retrieval_process_name => g_retrieval_process_NONE, -- Bug# 3569255
351 p_retrieval_process_name => RCV_HXT_GRP.purchasing_retrieval_process, --'Purchasing Retrieval Process'
352 p_status => g_status_SUBMITTED,
353 p_end_date => p_end_date
354 );
355
356 IF g_debug_stmt THEN
357 IF (x_timecard_exists) THEN
358 PO_DEBUG.debug_stmt(l_log_head, l_progress,
359 'chk_mapping_exists returned true.');
360 ELSE
361 PO_DEBUG.debug_stmt(l_log_head, l_progress,
362 'chk_mapping_exists returned false.');
363 END IF;
364 END IF;
365
366 EXCEPTION
367 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
368 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
369 IF g_debug_unexp THEN
370 PO_DEBUG.debug_exc(l_log_head, l_progress);
371 END IF;
372 WHEN OTHERS THEN
373 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
374 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
375 IF g_debug_unexp THEN
376 PO_DEBUG.debug_exc(l_log_head, l_progress);
377 END IF;
378 END check_timecard_exists;
379
380 -------------------------------------------------------------------------------
381 --Start of Comments
382 --Name: field_po_header_id
383 --Pre-reqs:
384 -- None.
385 --Modifies:
386 -- None.
387 --Locks:
388 -- None.
389 --Function:
390 -- Returns the value of the g_field_PO_HEADER_ID constant. This should be used
391 -- by PLD callers, which cannot access the constants directly.
392 --End of Comments
393 -------------------------------------------------------------------------------
394 FUNCTION field_po_header_id RETURN VARCHAR2 IS
395 BEGIN
396 RETURN g_field_PO_HEADER_ID;
397 END;
398
399 -------------------------------------------------------------------------------
400 --Start of Comments
401 --Name: field_po_line_id
402 --Pre-reqs:
403 -- None.
404 --Modifies:
405 -- None.
406 --Locks:
407 -- None.
408 --Function:
409 -- Returns the value of the g_field_PO_LINE_ID constant. This should be used
410 -- by PLD callers, which cannot access the constants directly.
411 --End of Comments
412 -------------------------------------------------------------------------------
413 FUNCTION field_po_line_id RETURN VARCHAR2 IS
414 BEGIN
415 RETURN g_field_PO_LINE_ID;
416 END;
417
418 -------------------------------------------------------------------------------
419 --Start of Comments
420 --Name: check_timecard_exists
421 --Pre-reqs:
422 -- None.
423 --Modifies:
424 -- None.
425 --Locks:
426 -- None.
427 --Function:
428 -- Execute a Cursor Query on HXC Building Block table to search for timecards
429 -- against Contingent Worker and Po Line Id.
430 --Parameters:
431 --IN:
432 --po_line_id
433 -- Identifier of the Standard PO line:
434 --p_person_id
435 -- Identifier of the Contingnet worker:
436 --OUT:
437 -- 'True'/'False'
438 -- Return whether the timecard exists or not.
439 --End of Comments
440 -------------------------------------------------------------------------------
441
442 FUNCTION check_timecard_exists (
443 p_person_id IN NUMBER,
444 po_line_id IN NUMBER)
445 RETURN VARCHAR2
446 IS
447
448 CURSOR csr_chk_tc_exists_ss
449 IS
450 SELECT 'Y'
451 FROM hxc_Time_Building_Blocks htb,
452 hxc_Time_Attributes hta,
453 hxc_Time_Attribute_Usages htau
454 WHERE hta.Time_Attribute_Id = htau.Time_Attribute_Id
455 AND htau.Time_Building_Block_Id = htb.Time_Building_Block_Id
456 AND htau.Time_Building_Block_ovn = htb.Object_Version_Number
457 AND htb.Date_To = hr_General.End_Of_Time
458 AND htb.Scope = 'DETAIL'
459 AND hta.Attribute_Category = 'PURCHASING'
460 AND hta.Attribute2 = To_Char(po_line_id)
461 AND htb.Resource_Id = p_person_id
462 AND ROWNUM = 1;
463
464 l_dummy VARCHAR2 (1);
465 BEGIN
466
467
468 OPEN csr_chk_tc_exists_ss;
469 FETCH csr_chk_tc_exists_ss INTO l_dummy;
470
471 IF (csr_chk_tc_exists_ss%FOUND) THEN
472 CLOSE csr_chk_tc_exists_ss;
473 return 'true' ;
474 ELSE
475 return 'false' ;
476 END IF;
477
478 CLOSE csr_chk_tc_exists_ss;
479
480 END check_timecard_exists;
481
482 -------------------------------------------------------------------------------
483 --Start of Comments
484 --Name: get_pa_timecard_amount
485 --Pre-reqs:
486 -- None.
487 --Modifies:
488 -- None.
489 --Locks:
490 -- None.
491 --Function:
492 -- Calls an OTL API to obtain the total amount of submitted/approved
493 -- timecards associated with the given PO line, project and task
494 --Parameters:
495 --IN:
496 --p_po_line_id
497 -- Identifier of the Standard PO line:
498 --p_project_id
499 -- Identifier of the project on the PO line:
500 --p_task_id
501 -- Identifier of the task on the Standard PO line
502 --OUT:
503 --x_amount
504 -- Total timecard amount for the PO line project /task; 0 if no contractor is associated
505 -- with the line.
506 --x_return_status
507 -- FND_API.G_RET_STS_SUCCESS if the API completed successfully.
508 -- FND_API.G_RET_STS_UNEXP_ERROR if an unexpected error occurred.
509 --End of Comments
510 -------------------------------------------------------------------------------
511 PROCEDURE get_pa_timecard_amount (
512 p_api_version IN NUMBER,
513 x_return_status OUT NOCOPY VARCHAR2,
514 p_po_line_id IN PO_LINES_ALL.po_line_id%TYPE,
515 p_project_id IN PO_DISTRIBUTIONS_ALL.project_id%TYPE ,
516 p_task_id IN PO_DISTRIBUTIONS_ALL.task_id%TYPE,
517 x_amount OUT NOCOPY NUMBER
518 ) IS
519 l_api_name CONSTANT VARCHAR2(30) := 'GET_PA_TIMECARD_AMOUNT';
520 l_log_head CONSTANT VARCHAR2(100) := g_log_head || l_api_name;
521 l_api_version CONSTANT NUMBER := 1.0;
522 l_progress VARCHAR2(3) := '000';
523 l_person_id PER_ALL_PEOPLE_F.person_id%TYPE;
524
525 --<Bug 14578229 Start>
526 l_line_rate_based BOOLEAN := FALSE;
527 l_return_status VARCHAR2(1);
528 --<Bug 14578229 End>
529
530 BEGIN
531 IF g_debug_stmt THEN
532 PO_DEBUG.debug_begin(l_log_head);
533 END IF;
534
535 x_return_status := FND_API.G_RET_STS_SUCCESS;
536
537 -- Standard API initialization:
538 IF NOT FND_API.compatible_api_call (
539 p_current_version_number => l_api_version,
540 p_caller_version_number => p_api_version,
541 p_api_name => l_api_name,
542 p_pkg_name => g_pkg_name ) THEN
543 RAISE FND_API.g_exc_unexpected_error;
544 END IF;
545
546 --<Bug 14578229 Start>
547 check_if_line_rate_based (p_api_version => p_api_version,
548 x_return_status => l_return_status,
549 p_field_name => PO_HXC_INTERFACE_PVT.field_PO_LINE_ID(),
550 p_field_value => p_po_line_id,
551 x_line_rate_based => l_line_rate_based);
552
553 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
554 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
555 END IF;
556
557 IF (l_line_rate_based <> TRUE) THEN
558 x_amount := 0;
559 ELSE
560
561 -- Retrieve the contractor associated with this Standard PO Temp Labor line.
562 l_person_id := HR_PO_INFO.get_person_id_for_po_line (
563 p_po_line_id => p_po_line_id );
564
565 IF g_debug_stmt THEN
566 PO_DEBUG.debug_stmt(l_log_head, l_progress,
567 'Calling OTL API get_mappingvalue_sum for'
568 ||' po_line_id: '||p_po_line_id
569 ||' project_id: '||p_project_id
570 ||' task_id: '||p_task_id
571 ||', person_id: '||l_person_id);
572 END IF;
573
574 IF (l_person_id IS NULL) THEN
575 x_amount := 0;
576 ELSE -- l_person_id IS NOT NULL
577 -- Bug 3518004: Changed the package name from HXC_MAPPING_UTILITIES
578 -- to HXC_INTEGRATION_LAYER_V1_GRP.
579 x_amount := HXC_INTEGRATION_LAYER_V2_GRP.get_mappingvalue_sum (
580 p_bld_blk_info_type => g_bld_blk_info_type_PO,
581 p_field_name1 => g_field_AMOUNT,
582 p_bld_blk_info_type2 => g_bld_blk_info_type_PO,
583 p_field_name2 => g_field_PO_LINE_ID,
584 p_field_value2 => p_po_line_id,
585 p_bld_blk_info_type3 => g_bld_blk_info_type_PA,
586 p_field_name3 => g_field_PROJECT_ID,
587 p_field_value3 => p_project_id,
588 p_bld_blk_info_type4 => g_bld_blk_info_type_PA,
589 p_field_name4 => g_field_TASK_ID,
590 p_field_value4 => p_task_id,
591 p_status => g_status_SUBMITTED,
592 p_resource_id => l_person_id);
593
594 IF g_debug_stmt THEN
595 PO_DEBUG.debug_stmt(l_log_head, l_progress,
596 'get_mappingvalue_sum for projects returned: '||x_amount);
597 END IF;
598 END IF;
599 END IF;
600 --<Bug 14578229 End>
601
602 EXCEPTION
603 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
604 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
605 IF g_debug_unexp THEN
606 PO_DEBUG.debug_exc(l_log_head, l_progress);
607 END IF;
608 WHEN OTHERS THEN
609 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
610 FND_MSG_PUB.add_exc_msg(g_pkg_name, l_api_name);
611 IF g_debug_unexp THEN
612 PO_DEBUG.debug_exc(l_log_head, l_progress);
613 END IF;
614 END get_pa_timecard_amount;
615
616 END PO_HXC_INTERFACE_PVT;