DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_DOCUMENT_ACTION_AUTH

Source


1 PACKAGE BODY PO_DOCUMENT_ACTION_AUTH AS
2 -- $Header: POXDAAPB.pls 120.8.12020000.3 2013/02/10 17:04:21 vegajula ship $
3 
4 -- Private package constants
5 
6 g_pkg_name CONSTANT varchar2(30) := 'PO_DOCUMENT_ACTION_AUTH';
7 g_log_head CONSTANT VARCHAR2(50) := 'po.plsql.'|| g_pkg_name || '.';
8 
9 
10 -- Forward Declare Private Methods
11 --As part of bug fix 13507482, changing this procedure to public
12 /*
13 PROCEDURE get_supply_action_name(
14    p_action            IN          VARCHAR2
15 ,  p_document_type     IN          VARCHAR2
16 ,  p_document_subtype  IN          VARCHAR2
17 ,  x_supply_action     OUT NOCOPY  VARCHAR2
18 ,  x_return_status     OUT NOCOPY  VARCHAR2
19 );
20 */
21 
22 -- Public Methods (to be used only by other DOCUMENT_ACTION packages)
23 
24 ------------------------------------------------------------------------------
25 --Start of Comments
26 --Name: approve
27 --Pre-reqs:
28 --  Document is locked.
29 --  Org context is set to that of document.
30 --Modifies:
31 --  None, directly.
32 --Locks:
33 --  None.
34 --Function:
35 --  This procedure handles logic to approves a document.
36 --  The logic is:
37 --    1. update action history
38 --    2. update document authorization status and approved flags
39 --    3. if not a PA, call appropriate supply action
40 --    4. if not a requisition, archive the document.
41 --Replaces:
42 --  This method covers some of the logic in poxdmaction in poxdm.lpc.
43 --Parameters:
44 --IN:
45 --  p_action_ctl_rec
46 --    Record containing all necessary parameters for action.
47 --OUT:
48 --  p_action_ctl_rec
49 --    Record contains variables that record output values depending
50 --    on the action.  All actions will populate at least a return_status.
51 --End of Comments
52 -------------------------------------------------------------------------------
53 PROCEDURE approve(
54    p_action_ctl_rec  IN OUT NOCOPY  PO_DOCUMENT_ACTION_PVT.doc_action_call_rec_type
55 )
56 IS
57 
58 l_ret_sts         VARCHAR2(1);
59 l_err_msg         VARCHAR2(200);
60 l_bool_ret_sts    BOOLEAN;
61 
62 l_msg_data        VARCHAR2(2000);
63 l_msg_count       NUMBER;
64 
65 d_progress        NUMBER;
66 d_module          VARCHAR2(70) := 'po.plsql.PO_DOCUMENT_ACTION_AUTH.approve';
67 
68 l_supply_action   VARCHAR2(40);
69 l_enable_payment_inst VARCHAR2(1); -- Payment Instruction
70 l_org_id NUMBER;
71 
72 BEGIN
73 
74   d_progress := 0;
75   IF (PO_LOG.d_proc) THEN
76     PO_LOG.proc_begin(d_module);
77     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_id', p_action_ctl_rec.document_id);
78     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_type', p_action_ctl_rec.document_type);
79     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_subtype', p_action_ctl_rec.document_subtype);
80     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.action', p_action_ctl_rec.action);
81     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.new_document_status', p_action_ctl_rec.new_document_status);
82     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.employee_id', p_action_ctl_rec.employee_id);
83   END IF;
84 
85   d_progress := 10;
86 
87   BEGIN
88 
89     IF (PO_LOG.d_stmt) THEN
90       PO_LOG.stmt(d_module, d_progress, 'Calling change_doc_auth_state');
91     END IF;
92 
93     PO_DOCUMENT_ACTION_UTIL.change_doc_auth_state(
94        p_document_id         => p_action_ctl_rec.document_id
95     ,  p_document_type       => p_action_ctl_rec.document_type
96     ,  p_document_subtype    => p_action_ctl_rec.document_subtype
97     ,  p_draft_id         	 => p_action_ctl_rec.draft_id		-- Bug 13444730
98     ,  p_action              => 'APPROVE'
99     ,  p_fwd_to_id           => p_action_ctl_rec.forward_to_id
100     ,  p_offline_code        => p_action_ctl_rec.offline_code
101     ,  p_approval_path_id    => p_action_ctl_rec.approval_path_id
102     ,  p_note                => p_action_ctl_rec.note
103     ,  p_new_status          => PO_DOCUMENT_ACTION_PVT.g_doc_status_APPROVED
104     ,  p_notify_action       => 'APPROVAL'
105     ,  p_notify_employee     => p_action_ctl_rec.forward_to_id
106     ,  x_return_status       => l_ret_sts
107     );
108 
109     IF (l_ret_sts <> 'S')
110     THEN
111 
112        d_progress := 20;
113        p_action_ctl_rec.return_status := 'U';
114        l_err_msg := 'change_doc_auth_state not successful';
115        RAISE PO_CORE_S.g_early_return_exc;
116 
117     END IF;
118 	/* Bug 14046925 : Skipping supply and archive for Mod*/
119     if p_action_ctl_rec.draft_id <> -1 then
120        p_action_ctl_rec.return_status := 'S';
121        return;
122     end if;
123 
124     d_progress := 30;
125 
126     IF (p_action_ctl_rec.document_type <> 'PA')
127     THEN
128 
129       get_supply_action_name(
130          p_action           => p_action_ctl_rec.action
131       ,  p_document_type    => p_action_ctl_rec.document_type
132       ,  p_document_subtype => p_action_ctl_rec.document_subtype
133       ,  x_return_status    => l_ret_sts
134       ,  x_supply_action    => l_supply_action
135       );
136 
137       IF (l_ret_sts <> 'S')
138       THEN
139         d_progress := 40;
140         p_action_ctl_rec.return_status := 'U';
141         l_err_msg := 'get_supply_action_name not successful';
142         RAISE PO_CORE_S.g_early_return_exc;
143       END IF;
144 
145       d_progress := 50;
146       IF (PO_LOG.d_stmt) THEN
147         PO_LOG.stmt(d_module, d_progress, 'l_supply_action', l_supply_action);
148       END IF;
149 
150       l_bool_ret_sts :=
151         PO_SUPPLY.po_req_supply(
152            p_docid          => p_action_ctl_rec.document_id
153         ,  p_lineid         => NULL
154         ,  p_shipid         => NULL
155         ,  p_action         => l_supply_action
156         ,  p_recreate_flag  => FALSE
157         ,  p_qty            => NULL
158         ,  p_receipt_date   => NULL
159         );
160 
161       IF (NOT l_bool_ret_sts)
162       THEN
163         d_progress := 60;
164         l_err_msg := 'po_req_supply returned false';
165         RAISE PO_CORE_S.g_early_return_exc;
166       END IF;
167 
168     END IF;  -- p_action_ctl_rec.document_type <> 'PA'
169 
170     d_progress := 70;
171     -- <Unified Catalog R12 Start>
172     IF ((p_action_ctl_rec.document_type = 'PA') AND
173         (p_action_ctl_rec.document_subtype = 'BLANKET'))
174     THEN
175       -- Rebuild catalog search index.
176       -- Call this procedure BEFORE calling archive_po because this one
177       -- compares against the archive tables to check if any of the
178       -- searchable fields have been modified or not.
179       PO_CATALOG_INDEX_PVT.rebuild_index
180       (
181         p_type => PO_CATALOG_INDEX_PVT.TYPE_BLANKET
182       , p_po_header_id => P_ACTION_CTL_REC.document_id
183       );
184 
185     END IF; -- if Blanket Agreement
186     -- <Unified Catalog R12 End>
187 
188     d_progress := 80;
189     IF (p_action_ctl_rec.document_type <> 'REQUISITION')
190     THEN
191 
192       -- Payment Instruction
193       -- Generate payment sequence only if it is enabled in clm opions page and doc type is PO.
194       IF p_action_ctl_rec.document_type = 'PO' THEN
195 
196         SELECT org_id INTO l_org_id
197         FROM  po_headers_all poh
198         WHERE poh.po_header_id =  p_action_ctl_rec.document_id ;
199         l_enable_payment_inst := PO_CORE_S.retrieveOptionValue(p_org_id => l_org_id,
200                                                                p_option_column => PO_CORE_S.g_PAYMENT_INSTR_COL);
201         IF  l_enable_payment_inst = 'Y' THEN
202           PO_CORE_S3.generate_payment_sequence (p_po_header_id =>  p_action_ctl_rec.document_id);
203         END IF;
204       END IF;
205 
206       PO_DOCUMENT_ARCHIVE_GRP.archive_po(
207          p_api_version      => 1.0
208       ,  p_document_id      => p_action_ctl_rec.document_id
209       ,  p_document_type    => p_action_ctl_rec.document_type
210       ,  p_document_subtype => p_action_ctl_rec.document_subtype
211       ,  p_process          => 'APPROVE'
212       ,  x_return_status    => l_ret_sts
213       ,  x_msg_count        => l_msg_count
214       ,  x_msg_data         => l_msg_data
215       );
216 
217       IF (l_ret_sts <> 'S')
218       THEN
219         d_progress := 90;
220         l_err_msg := 'archive_po not successful';
221         RAISE PO_CORE_S.g_early_return_exc;
222       END IF;
223 
224     END IF;  -- if p_action_ctl_rec.document_type <> 'REQUISITION'
225 
226     -- TODO: ANALYZE return_code value (as opposed to return_status).
227     p_action_ctl_rec.return_status := 'S';
228 
229   EXCEPTION
230     WHEN PO_CORE_S.g_early_return_exc THEN
231       p_action_ctl_rec.return_status := 'U';
232       IF (PO_LOG.d_exc) THEN
233         PO_LOG.exc(d_module, d_progress, l_err_msg);
234       END IF;
235       PO_DOCUMENT_ACTION_PVT.error_msg_append(d_module, d_progress, l_err_msg);
236 
237   END;
238 
239   IF (PO_LOG.d_proc) THEN
240     PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_status', p_action_ctl_rec.return_status);
241     PO_LOG.proc_end(d_module);
242   END IF;
243 
244   RETURN;
245 
246 EXCEPTION
247   WHEN OTHERS THEN
248     p_action_ctl_rec.return_status := 'U';
249 
250     PO_DOCUMENT_ACTION_PVT.error_msg_append(d_module, d_progress, SQLCODE, SQLERRM);
251     IF (PO_LOG.d_exc) THEN
252       PO_LOG.exc(d_module, d_progress, SQLCODE || SQLERRM);
253       PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_status', p_action_ctl_rec.return_status);
254       PO_LOG.proc_end(d_module);
255     END IF;
256 
257     RETURN;
258 
259 END approve;
260 
261 
262 ------------------------------------------------------------------------------
263 --Start of Comments
264 --Name: reject
265 --Pre-reqs:
266 --  Document is locked.
267 --  Org context is set to that of document.
268 --Modifies:
269 --  None, directly.
270 --Locks:
271 --  None.
272 --Function:
273 --  This procedure handles logic to reject a document that is
274 --  either pre-approved or in process.
275 --  The logic is:
276 --    1. check that document is in right status
277 --    2. handle encumbrance
278 --    3. update action history
279 --    4. update document authorization status
280 --    5. if not a PA, call appropriate supply action
281 --Replaces:
282 --  This method covers the logic in podareject in podar.lpc.
283 --Parameters:
284 --IN:
285 --  p_action_ctl_rec
286 --    Record containing all necessary parameters for action.
287 --OUT:
288 --  p_action_ctl_rec
289 --    Record contains variables that record output values depending
290 --    on the action.  All actions will populate at least a return_status.
291 --End of Comments
292 -------------------------------------------------------------------------------
293 PROCEDURE reject(
294    p_action_ctl_rec  IN OUT NOCOPY  PO_DOCUMENT_ACTION_PVT.doc_action_call_rec_type
295 )
296 IS
297 
298 l_doc_state_ok    BOOLEAN;
299 l_preparer_id     PO_HEADERS_ALL.agent_id%TYPE;
300 
301 l_ret_sts         VARCHAR2(1);
302 l_err_msg         VARCHAR2(200);
303 l_bool_ret_sts    BOOLEAN;
304 
305 l_enc_flag        VARCHAR2(1);
306 l_enc_ret_code    VARCHAR2(10);
307 l_enc_report_id   NUMBER;
308 
309 l_supply_action   VARCHAR2(40);
310 
311 d_progress        NUMBER;
312 d_module          VARCHAR2(70) := 'po.plsql.PO_DOCUMENT_ACTION_AUTH.reject';
313 
314 BEGIN
315 
316   d_progress := 0;
317   IF (PO_LOG.d_proc) THEN
318     PO_LOG.proc_begin(d_module);
319     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_id', p_action_ctl_rec.document_id);
320     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_type', p_action_ctl_rec.document_type);
321     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_subtype', p_action_ctl_rec.document_subtype);
322     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.draft_id', p_action_ctl_rec.draft_id); 		--CLM Apprvl
323     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.action', p_action_ctl_rec.action);
324     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.forward_to_id', p_action_ctl_rec.forward_to_id);
325     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.approval_path_id', p_action_ctl_rec.approval_path_id);
326     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.note', p_action_ctl_rec.note);
327   END IF;
328 
329   d_progress := 10;
330 
331   BEGIN
332 
333     PO_DOCUMENT_ACTION_CHECK.reject_status_check(p_action_ctl_rec);
334 
335     d_progress := 20;
336 
337     IF (p_action_ctl_rec.return_status <> 'S')
338     THEN
339 
340       d_progress := 30;
341       p_action_ctl_rec.return_status := 'U';
342       l_err_msg := 'reject_status_check not successful';
343       RAISE PO_CORE_S.g_early_return_exc;
344 
345     END IF;
346 
347     IF (p_action_ctl_rec.return_code IS NOT NULL)
348     THEN
349 
350       d_progress := 40;
351       p_action_ctl_rec.return_status := 'S';
352       p_action_ctl_rec.return_code := 'STATE_FAILED';
353       l_err_msg := 'State check failed';
354       RAISE PO_CORE_S.g_early_return_exc;
355 
356     END IF;
357 
358     -- reset return status and return code after reject_status_check call
359     p_action_ctl_rec.return_status := NULL;
360     p_action_ctl_rec.return_code := NULL;
361 
362     d_progress := 50;
363 
364     PO_DOCUMENT_ACTION_UTIL.get_doc_preparer_id(
365        p_document_id => p_action_ctl_rec.document_id
366     ,  p_document_type => p_action_ctl_rec.document_type
367     ,  p_draft_id      => p_action_ctl_rec.draft_id		-- CLM Apprvl
368     ,  x_return_status => l_ret_sts
369     ,  x_preparer_id => l_preparer_id
370     );
371 
372     IF (l_ret_sts <> 'S')
373     THEN
374 
375       d_progress := 60;
376       p_action_ctl_rec.return_status := 'U';
377       l_err_msg := 'get_doc_preparer_id not successful';
378       RAISE PO_CORE_S.g_early_return_exc;
379 
380     END IF;
381 
382     d_progress := 70;
383 
384     IF (PO_LOG.d_stmt) THEN
385       PO_LOG.stmt(d_module, d_progress, 'l_preparer_id', l_preparer_id);
386     END IF;
387 
388 
389     IF ( PO_CORE_S.is_encumbrance_on(
390             p_doc_type => p_action_ctl_rec.document_type
391          ,  p_org_id => NULL
392          )
393         )
394     THEN
395       l_enc_flag := 'Y';
396     ELSE
397       l_enc_flag := 'N';
398     END IF;
399 
400     --CLM Apprvl--Need to bypass funds processing for Modification documents
401     IF p_action_ctl_rec.document_type = 'PO' AND p_action_ctl_rec.draft_id IS NOT NULL AND p_action_ctl_rec.draft_id <> -1 THEN
402 			l_enc_flag := 'N';
403 		END IF;
404 
405     d_progress := 80;
406 
407     IF ((l_enc_flag = 'Y') AND (p_action_ctl_rec.document_type = 'PA')
408        AND (p_action_ctl_rec.document_subtype = 'BLANKET'))
409     THEN
410 
411       d_progress := 90;
412 
413       SELECT nvl(poh.encumbrance_required_flag, 'N')
414       INTO l_enc_flag
415       FROM po_headers_all poh
416       WHERE po_header_id = p_action_ctl_rec.document_id;
417 
418     END IF;
419 
420     IF (PO_LOG.d_stmt) THEN
421       PO_LOG.stmt(d_module, d_progress, 'l_enc_flag', l_enc_flag);
422     END IF;
423 
424 
425     IF ((l_enc_flag = 'Y') AND (p_action_ctl_rec.document_subtype <> 'CONTRACT'))  -- bug 8498264
426     THEN
427 
428       d_progress := 100;
429 
430       PO_DOCUMENT_FUNDS_PVT.do_reject(
431         x_return_status     => l_ret_sts
432       , p_doc_type          => p_action_ctl_rec.document_type
433       , p_doc_subtype       => p_action_ctl_rec.document_subtype
434       , p_doc_level         => PO_DOCUMENT_FUNDS_PVT.g_doc_level_HEADER
435       , p_doc_level_id      => p_action_ctl_rec.document_id
436       , p_use_enc_gt_flag   => PO_DOCUMENT_FUNDS_PVT.g_parameter_NO
437       , p_override_funds    => PO_DOCUMENT_FUNDS_PVT.g_parameter_NO
438       , p_use_gl_date       => PO_DOCUMENT_FUNDS_PVT.g_parameter_USE_PROFILE
439       , p_override_date     => SYSDATE
440       , x_po_return_code    => l_enc_ret_code
441       , x_online_report_id  => l_enc_report_id
442       );
443 
444 
445       IF (l_ret_sts <> FND_API.g_ret_sts_success)
446       THEN
447 
448         d_progress := 110;
449         p_action_ctl_rec.return_status := 'U';
450         l_err_msg := 'do_reject not successful';
451         RAISE PO_CORE_S.g_early_return_exc;
452 
453       END IF;
454 
455       d_progress := 120;
456 
457       IF (PO_LOG.d_stmt) THEN
458         PO_LOG.stmt(d_module, d_progress, 'l_enc_ret_code', l_enc_ret_code);
459         PO_LOG.stmt(d_module, d_progress, 'l_enc_report_id', l_enc_report_id);
460       END IF;
461 
462       p_action_ctl_rec.online_report_id := l_enc_report_id;
463 
464       IF ((l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_SUCCESS)
465            OR (l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_WARNING))
466       THEN
467 
468         d_progress := 125;
469         -- Just continue with reject action.
470 
471       ELSIF (l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_PARTIAL)
472       THEN
473 
474         d_progress := 130;
475         p_action_ctl_rec.return_status := 'S';
476         p_action_ctl_rec.return_code := 'P';
477         l_err_msg := 'funds do_reject partial';
478         RAISE PO_CORE_S.g_early_return_exc;
479 
480       ELSIF (l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_FAILURE)
481       THEN
482 
483         d_progress := 140;
484         p_action_ctl_rec.return_status := 'S';
485         p_action_ctl_rec.return_code := 'F';
486         l_err_msg := 'funds do_reject failure';
487         RAISE PO_CORE_S.g_early_return_exc;
488 
489       ELSIF (l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_FATAL)
490       THEN
491 
492         d_progress := 150;
493         p_action_ctl_rec.return_status := 'S';
494         p_action_ctl_rec.return_code := 'T';
495         l_err_msg := 'funds do_reject fatal';
496         RAISE PO_CORE_S.g_early_return_exc;
497 
498       ELSE
499 
500        d_progress := 160;
501        p_action_ctl_rec.return_status := 'U';
502        l_err_msg := 'Bad return code from funds do_reject';
503        RAISE PO_CORE_S.g_early_return_exc;
504 
505       END IF;  -- if l_enc_ret_code IN (...)
506 
507     END IF;  -- if l_enc_flag = 'Y' ...
508 
509     d_progress := 170;
510 
511     IF (PO_LOG.d_stmt) THEN
512       PO_LOG.stmt(d_module, d_progress, 'Calling change_doc_auth_state');
513     END IF;
514 
515     PO_DOCUMENT_ACTION_UTIL.change_doc_auth_state(
516        p_document_id         => p_action_ctl_rec.document_id
517     ,  p_document_type       => p_action_ctl_rec.document_type
518     ,  p_document_subtype    => p_action_ctl_rec.document_subtype
519     ,  p_draft_id         	 => p_action_ctl_rec.draft_id		-- CLM Apprvl
520     ,  p_action              => 'REJECT'
521     ,  p_fwd_to_id           => p_action_ctl_rec.forward_to_id
522     ,  p_offline_code        => p_action_ctl_rec.offline_code
523     ,  p_approval_path_id    => p_action_ctl_rec.approval_path_id
524     ,  p_note                => p_action_ctl_rec.note
525     ,  p_new_status          => PO_DOCUMENT_ACTION_PVT.g_doc_status_REJECTED
526     ,  p_notify_action       => 'REJECTED_BY_APPROVER'
527     ,  p_notify_employee     => l_preparer_id
528     ,  x_return_status       => l_ret_sts
529     );
530 
531     IF (l_ret_sts <> 'S')
532     THEN
533 
534        d_progress := 180;
535        p_action_ctl_rec.return_status := 'U';
536        l_err_msg := 'change_doc_auth_state not successful';
537        RAISE PO_CORE_S.g_early_return_exc;
538 
539     END IF;
540 
541     d_progress := 190;
542 --    Bug 9488727 supply/reservations need not be altered for reject action
543 --    IF (p_action_ctl_rec.document_type <> 'PA') AND (p_action_ctl_rec.draft_id IS NULL OR p_action_ctl_rec.draft_id = -1) /*CLM Apprvl, included the condition to check if it is modification doc and skip the supply logic if so.*/
544 --    THEN
545 --
546 --      get_supply_action_name(
547 --         p_action           => p_action_ctl_rec.action
548 --      ,  p_document_type    => p_action_ctl_rec.document_type
549 --      ,  p_document_subtype => p_action_ctl_rec.document_subtype
550 --      ,  x_return_status    => l_ret_sts
551 --      ,  x_supply_action    => l_supply_action
552 --      );
553 --
554 --      IF (l_ret_sts <> 'S')
555 --      THEN
556 --        d_progress := 195;
557 --        p_action_ctl_rec.return_status := 'U';
558 --        l_err_msg := 'get_supply_action_name not successful';
559 --        RAISE PO_CORE_S.g_early_return_exc;
560 --      END IF;
561 --
562 --      d_progress := 200;
563 --      IF (PO_LOG.d_stmt) THEN
564 --        PO_LOG.stmt(d_module, d_progress, 'l_supply_action', l_supply_action);
565 --      END IF;
566 --
567 --      l_bool_ret_sts :=
568 --        PO_SUPPLY.po_req_supply(
569 --           p_docid          => p_action_ctl_rec.document_id
570 --        ,  p_lineid         => NULL
571 --        ,  p_shipid         => NULL
572 --        ,  p_action         => l_supply_action
573 --        ,  p_recreate_flag  => FALSE
574 --        ,  p_qty            => NULL
575 --        ,  p_receipt_date   => NULL
576 --        );
577 --
578 --      IF (NOT l_bool_ret_sts)
579 --      THEN
580 --        d_progress := 210;
581 --        p_action_ctl_rec.return_status := 'U';
582 --        l_err_msg := 'po_req_supply returned false';
583 --        RAISE PO_CORE_S.g_early_return_exc;
584 --      END IF;
585 --
586 --    END IF;  -- document_type <> 'PA'
587 
588     p_action_ctl_rec.return_status := 'S';
589 
590   EXCEPTION
591     WHEN PO_CORE_S.g_early_return_exc THEN
592       IF (p_action_ctl_rec.return_status = 'U')
593       THEN
594         IF (PO_LOG.d_exc) THEN
595           PO_LOG.exc(d_module, d_progress, l_err_msg);
596         END IF;
597       END IF;
598 
599       PO_DOCUMENT_ACTION_PVT.error_msg_append(d_module, d_progress, l_err_msg);
600 
601   END;
602 
603   IF (PO_LOG.d_proc) THEN
604     PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_status', p_action_ctl_rec.return_status);
605     PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_code', p_action_ctl_rec.return_code);
606     PO_LOG.proc_end(d_module, 'p_action_ctl_rec.online_report_id', p_action_ctl_rec.online_report_id);
607     PO_LOG.proc_end(d_module);
608   END IF;
609 
610   RETURN;
611 
612 EXCEPTION
613   WHEN OTHERS THEN
614     p_action_ctl_rec.return_status := 'U';
615 
616     PO_DOCUMENT_ACTION_PVT.error_msg_append(d_module, d_progress, SQLCODE, SQLERRM);
617     IF (PO_LOG.d_exc) THEN
618       PO_LOG.exc(d_module, d_progress, SQLCODE || SQLERRM);
619       PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_status', p_action_ctl_rec.return_status);
620       PO_LOG.proc_end(d_module);
621     END IF;
622 
623     RETURN;
624 
625 END reject;
626 
627 
628 ------------------------------------------------------------------------------
629 --Start of Comments
630 --Name: forward
631 --Pre-reqs:
632 --  Document is locked.
633 --  Org context is set to that of document.
634 --Modifies:
635 --  None, directly.
636 --Locks:
637 --  None.
638 --Function:
639 --  This procedure handles the forwarding of a document from one employee
640 --  to another.  It is just a wrapper around PO_DOCUMENT_ACTION_UTIL.change_doc_auth_state().
641 --  The logic is:
642 --    1. update action history
643 --    2. update document authorization status, if necessary
644 --Replaces:
645 --  This method covers some of the logic in poxdmaction in poxdm.lpc.
646 --Parameters:
647 --IN:
648 --  p_action_ctl_rec
649 --    Record containing all necessary parameters for action.
650 --OUT:
651 --  p_action_ctl_rec
652 --    Record contains variables that record output values depending
653 --    on the action.  All actions will populate at least a return_status.
654 --End of Comments
655 -------------------------------------------------------------------------------
656 PROCEDURE forward(
657    p_action_ctl_rec  IN OUT NOCOPY  PO_DOCUMENT_ACTION_PVT.doc_action_call_rec_type
658 )
659 IS
660 
661 l_ret_sts        VARCHAR2(1);
662 l_err_msg        VARCHAR2(200);
663 
664 d_progress       NUMBER;
665 d_module         VARCHAR2(70) := 'po.plsql.PO_DOCUMENT_ACTION_AUTH.forward';
666 
667 BEGIN
668 
669   d_progress := 0;
670   IF (PO_LOG.d_proc) THEN
671     PO_LOG.proc_begin(d_module);
672     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_id', p_action_ctl_rec.document_id);
673     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_type', p_action_ctl_rec.document_type);
674     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_subtype', p_action_ctl_rec.document_subtype);
675     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.action', p_action_ctl_rec.action);
676     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.forward_to_id', p_action_ctl_rec.forward_to_id);
677   END IF;
678 
679   d_progress := 10;
680 
681   BEGIN
682 
683     IF (PO_LOG.d_stmt) THEN
684       PO_LOG.stmt(d_module, d_progress, 'Calling change_doc_auth_state');
685     END IF;
686 
687     PO_DOCUMENT_ACTION_UTIL.change_doc_auth_state(
688        p_document_id         => p_action_ctl_rec.document_id
689     ,  p_document_type       => p_action_ctl_rec.document_type
690     ,  p_document_subtype    => p_action_ctl_rec.document_subtype
691     ,  p_draft_id         	 => p_action_ctl_rec.draft_id		-- CLM Apprvl
692     ,  p_action              => 'FORWARD'
693     ,  p_fwd_to_id           => p_action_ctl_rec.forward_to_id
694     ,  p_offline_code        => p_action_ctl_rec.offline_code
695     ,  p_approval_path_id    => p_action_ctl_rec.approval_path_id
696     ,  p_note                => p_action_ctl_rec.note
697     ,  p_new_status          => p_action_ctl_rec.new_document_status
698     ,  p_notify_action       => 'APPROVAL'
699     ,  p_notify_employee     => p_action_ctl_rec.forward_to_id
700     ,  x_return_status       => l_ret_sts
701     );
702 
703     IF (l_ret_sts <> 'S')
704     THEN
705       d_progress := 20;
706       l_ret_sts := 'U';
707       l_err_msg := 'change doc state not successful';
708       RAISE PO_CORE_S.g_early_return_exc;
709     END IF;
710 
711     d_progress := 30;
712     l_ret_sts := 'S';
713 
714   EXCEPTION
715     WHEN PO_CORE_S.g_early_return_exc THEN
716       IF (PO_LOG.d_exc) THEN
717         PO_LOG.exc(d_module, d_progress, l_err_msg);
718       END IF;
719       PO_DOCUMENT_ACTION_PVT.error_msg_append(d_module, d_progress, l_err_msg);
720 
721   END;
722 
723   p_action_ctl_rec.return_status := l_ret_sts;
724   IF (PO_LOG.d_proc) THEN
725     PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_status', p_action_ctl_rec.return_status);
726     PO_LOG.proc_end(d_module);
727   END IF;
728 
729   RETURN;
730 
731 EXCEPTION
732   WHEN OTHERS THEN
733     p_action_ctl_rec.return_status := 'U';
734 
735     PO_DOCUMENT_ACTION_PVT.error_msg_append(d_module, d_progress, SQLCODE, SQLERRM);
736     IF (PO_LOG.d_exc) THEN
737       PO_LOG.exc(d_module, d_progress, SQLCODE || SQLERRM);
738       PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_status', p_action_ctl_rec.return_status);
739       PO_LOG.proc_end(d_module);
740     END IF;
741 
742     RETURN;
743 
744 END forward;
745 
746 ------------------------------------------------------------------------------
747 --Start of Comments
748 --Name: return_action
749 --Pre-reqs:
750 --  Document is locked.
751 --  Org context is set to that of document.
752 --Modifies:
753 --  None, directly.
754 --Locks:
755 --  None.
756 --Function:
757 --  This procedure handles logic to return a requistion during autocreate.
758 --  The logic is:
759 --    1. verify document is requisition
760 --    2. verify requisition state - e.g. that it is approved.
761 --    3. handle encumbrance
762 --    4. update action history
763 --    5. update authorization_status and appropriate flags
764 --    6. call appropriate methods to handle supply
765 --Replaces:
766 --  This method covers some of the logic in podatreturn in podat.lpc.
767 --Parameters:
768 --IN:
769 --  p_action_ctl_rec
770 --    Record containing all necessary parameters for action.
771 --OUT:
772 --  p_action_ctl_rec
773 --    Record contains variables that record output values depending
774 --    on the action.  All actions will populate at least a return_status.
775 --End of Comments
776 -------------------------------------------------------------------------------
777 PROCEDURE return_action(
778    p_action_ctl_rec  IN OUT NOCOPY  PO_DOCUMENT_ACTION_PVT.doc_action_call_rec_type
779 )
780 IS
781 
782 l_ret_sts        VARCHAR2(1);
783 l_bool_ret_sts   BOOLEAN;
784 l_err_msg        VARCHAR2(200);
785 
786 l_allowed_states    PO_DOCUMENT_ACTION_UTIL.doc_state_rec_type;
787 l_doc_state_ok      BOOLEAN;
788 
789 l_req_enc_on        BOOLEAN;
790 l_enc_ret_code      VARCHAR2(10);
791 l_enc_report_id     NUMBER;
792 
793 l_preparer_id     PO_REQUISITION_HEADERS.preparer_id%TYPE;
794 l_supply_action   VARCHAR2(40);
795 
796 d_progress       NUMBER;
797 d_module         VARCHAR2(70) := 'po.plsql.PO_DOCUMENT_ACTION_AUTH.return_action';
798 
799 BEGIN
800 
801   d_progress := 0;
802   IF (PO_LOG.d_proc) THEN
803     PO_LOG.proc_begin(d_module);
804     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_id', p_action_ctl_rec.document_id);
805     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_type', p_action_ctl_rec.document_type);
806     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.document_subtype', p_action_ctl_rec.document_subtype);
807     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.action', p_action_ctl_rec.action);
808     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.note', p_action_ctl_rec.note);
809     PO_LOG.proc_begin(d_module, 'p_action_ctl_rec.approval_path_id', p_action_ctl_rec.approval_path_id);
810   END IF;
811 
812   d_progress := 10;
813 
814   BEGIN
815 
816     IF (p_action_ctl_rec.document_type <> 'REQUISITION')
817     THEN
818 
819       d_progress := 20;
820       l_err_msg := 'Invalid document type';
821       l_ret_sts := 'U';
822       RAISE PO_CORE_S.g_early_return_exc;
823 
824     END IF;
825 
826     d_progress := 30;
827 
828     l_allowed_states.auth_states(1) := PO_DOCUMENT_ACTION_PVT.g_doc_status_APPROVED;
829     l_allowed_states.hold_flag := 'N';
830     l_allowed_states.frozen_flag := 'N';
831     l_allowed_states.closed_states(1) := PO_DOCUMENT_ACTION_PVT.g_doc_closed_sts_CLOSED;
832     l_allowed_states.closed_states(2) := PO_DOCUMENT_ACTION_PVT.g_doc_closed_sts_OPEN;
833 
834     l_doc_state_ok := PO_DOCUMENT_ACTION_UTIL.check_doc_state(
835                                 p_document_id => p_action_ctl_rec.document_id
836                              ,  p_document_type => p_action_ctl_rec.document_type
837                              ,  p_draft_id         	 => p_action_ctl_rec.draft_id		-- CLM Apprvl
838                              ,  p_allowed_states => l_allowed_states
839                              ,  x_return_status  => l_ret_sts
840                              );
841 
842     IF (l_ret_sts <> 'S')
843     THEN
844 
845       d_progress := 40;
846       l_err_msg := 'check_doc_state not successful';
847       RAISE PO_CORE_S.g_early_return_exc;
848 
849     END IF;
850 
851     IF (NOT l_doc_state_ok)
852     THEN
853 
854       d_progress := 45;
855       l_ret_sts := 'S';
856       p_action_ctl_rec.return_code := 'STATE_FAILED';
857       l_err_msg := 'State check failed.';
858       RAISE PO_CORE_S.g_early_return_exc;
859 
860     END IF;
861 
862     d_progress := 50;
863 
864     l_req_enc_on := PO_CORE_S.is_encumbrance_on(
865                            p_doc_type => PO_CORE_S.g_doc_type_REQUISITION
866                         ,  p_org_id   => NULL
867                         );
868 
869     d_progress := 60;
870     IF (PO_LOG.d_stmt) THEN
871       PO_LOG.stmt(d_module, d_progress, 'l_req_enc_on', l_req_enc_on);
872     END IF;
873 
874      IF (l_req_enc_on)
875     ---Bug#14332568 : Added below condition so that The Requistion is not be un-reserved during Return action.
876     -- Any changes on the line done during amendment creation will take care of further encumbrance actions
877     AND po_partial_funding_pkg.is_CLM_Enabled = 'N'
878     THEN
879 
880       d_progress := 70;
881 
882       PO_DOCUMENT_FUNDS_PVT.do_return(
883         x_return_status     => l_ret_sts
884       , p_doc_type          => p_action_ctl_rec.document_type
885       , p_doc_subtype       => p_action_ctl_rec.document_subtype
886       , p_doc_level         => PO_DOCUMENT_FUNDS_PVT.g_doc_level_HEADER
887       , p_doc_level_id      => p_action_ctl_rec.document_id
888       , p_use_enc_gt_flag   => PO_DOCUMENT_FUNDS_PVT.g_parameter_NO
889       , p_use_gl_date       => PO_DOCUMENT_FUNDS_PVT.g_parameter_USE_PROFILE
890       , p_override_date     => SYSDATE
891       , x_po_return_code    => l_enc_ret_code
892       , x_online_report_id  => l_enc_report_id
893       );
894 
895 
896       IF (l_ret_sts <> FND_API.g_ret_sts_success)
897       THEN
898 
899         d_progress := 80;
900         l_ret_sts := 'U';
901         l_err_msg := 'do_return not successful';
902         RAISE PO_CORE_S.g_early_return_exc;
903 
904       END IF;
905 
906       d_progress := 90;
907 
908       IF (PO_LOG.d_stmt) THEN
909         PO_LOG.stmt(d_module, d_progress, 'l_enc_ret_code', l_enc_ret_code);
910         PO_LOG.stmt(d_module, d_progress, 'l_enc_report_id', l_enc_report_id);
911       END IF;
912 
913       p_action_ctl_rec.online_report_id := l_enc_report_id;
914 
915       IF ((l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_SUCCESS)
916            OR (l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_WARNING))
917       THEN
918 
919         d_progress := 100;
920         -- Just continue with return action.
921 
922       ELSIF (l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_PARTIAL)
923       THEN
924 
925         d_progress := 110;
926         l_ret_sts := 'S';
927         p_action_ctl_rec.return_code := 'P';
928         l_err_msg := 'funds do_return partial';
929         RAISE PO_CORE_S.g_early_return_exc;
930 
931       ELSIF (l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_FAILURE)
932       THEN
933 
934         d_progress := 120;
935         l_ret_sts := 'S';
936         p_action_ctl_rec.return_code := 'F';
937         l_err_msg := 'funds do_return failure';
938         RAISE PO_CORE_S.g_early_return_exc;
939 
940       ELSIF (l_enc_ret_code = PO_DOCUMENT_FUNDS_PVT.g_return_FATAL)
941       THEN
942 
943         d_progress := 130;
944         l_ret_sts := 'S';
945         p_action_ctl_rec.return_code := 'T';
946         l_err_msg := 'funds do_return fatal';
947         RAISE PO_CORE_S.g_early_return_exc;
948 
949       ELSE
950 
951        d_progress := 140;
952        l_ret_sts := 'U';
953        l_err_msg := 'Bad return code from funds do_return';
954        RAISE PO_CORE_S.g_early_return_exc;
955 
956       END IF;  -- if l_enc_ret_code IN (...)
957 
958     END IF;  -- IF l_req_enc_on
959 
960     d_progress := 150;
961 
962     PO_DOCUMENT_ACTION_UTIL.get_doc_preparer_id(
963        p_document_id => p_action_ctl_rec.document_id
964     ,  p_document_type => p_action_ctl_rec.document_type
965     ,  p_draft_id      => p_action_ctl_rec.draft_id		-- CLM Apprvl
966     ,  x_return_status => l_ret_sts
967     ,  x_preparer_id => l_preparer_id
968     );
969 
970     IF (l_ret_sts <> 'S')
971     THEN
972 
973       d_progress := 160;
974       l_ret_sts := 'U';
975       l_err_msg := 'get_doc_preparer_id not successful';
976       RAISE PO_CORE_S.g_early_return_exc;
977 
978     END IF;
979 
980     d_progress := 170;
981 
982     IF (PO_LOG.d_stmt) THEN
983       PO_LOG.stmt(d_module, d_progress, 'Calling change_doc_auth_state');
984     END IF;
985 
986     PO_DOCUMENT_ACTION_UTIL.change_doc_auth_state(
987        p_document_id         => p_action_ctl_rec.document_id
988     ,  p_document_type       => p_action_ctl_rec.document_type
989     ,  p_document_subtype    => p_action_ctl_rec.document_subtype
990     ,  p_draft_id      => p_action_ctl_rec.draft_id		-- CLM Apprvl
991     ,  p_action              => 'RETURN'
992     ,  p_fwd_to_id           => NULL
993     ,  p_offline_code        => NULL
994     ,  p_approval_path_id    => p_action_ctl_rec.approval_path_id
995     ,  p_note                => p_action_ctl_rec.note
996     ,  p_new_status          => PO_DOCUMENT_ACTION_PVT.g_doc_status_RETURNED
997     ,  p_notify_action       => 'APPROVAL'
998     ,  p_notify_employee     => l_preparer_id
999     ,  x_return_status       => l_ret_sts
1000     );
1001 
1002     IF (l_ret_sts <> 'S')
1003     THEN
1004 
1005        d_progress := 180;
1006        l_ret_sts := 'U';
1007        l_err_msg := 'change_doc_auth_state not successful';
1008        RAISE PO_CORE_S.g_early_return_exc;
1009 
1010     END IF;
1011 
1012     d_progress := 190;
1013 
1014     get_supply_action_name(
1015        p_action           => p_action_ctl_rec.action
1016     ,  p_document_type    => p_action_ctl_rec.document_type
1017     ,  p_document_subtype => p_action_ctl_rec.document_subtype
1018     ,  x_return_status    => l_ret_sts
1019     ,  x_supply_action    => l_supply_action
1020     );
1021 
1022     IF (l_ret_sts <> 'S')
1023     THEN
1024       d_progress := 195;
1025       l_ret_sts := 'U';
1026       l_err_msg := 'get_supply_action_name not successful';
1027       RAISE PO_CORE_S.g_early_return_exc;
1028     END IF;
1029 
1030     d_progress := 200;
1031     IF (PO_LOG.d_stmt) THEN
1032       PO_LOG.stmt(d_module, d_progress, 'l_supply_action', l_supply_action);
1033     END IF;
1034 
1035     l_bool_ret_sts :=
1036       PO_SUPPLY.po_req_supply(
1037          p_docid          => p_action_ctl_rec.document_id
1038       ,  p_lineid         => NULL
1039       ,  p_shipid         => NULL
1040       ,  p_action         => l_supply_action
1041       ,  p_recreate_flag  => FALSE
1042       ,  p_qty            => NULL
1043       ,  p_receipt_date   => NULL
1044       );
1045 
1046     IF (NOT l_bool_ret_sts)
1047     THEN
1048       d_progress := 210;
1049       l_ret_sts := 'U';
1050       l_err_msg := 'po_req_supply returned false';
1051       RAISE PO_CORE_S.g_early_return_exc;
1052     END IF;
1053 
1054     d_progress := 220;
1055     p_action_ctl_rec.return_code := NULL;
1056     l_ret_sts := 'S';
1057 
1058   EXCEPTION
1059     WHEN PO_CORE_S.g_early_return_exc THEN
1060       IF (l_ret_sts = 'U') THEN
1061         IF (PO_LOG.d_exc) THEN
1062           PO_LOG.exc(d_module, d_progress, l_err_msg);
1063         END IF;
1064       END IF;
1065 
1066       PO_DOCUMENT_ACTION_PVT.error_msg_append(d_module, d_progress, l_err_msg);
1067   END;
1068 
1069   p_action_ctl_rec.return_status := l_ret_sts;
1070   IF (PO_LOG.d_proc) THEN
1071     PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_status', p_action_ctl_rec.return_status);
1072     PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_code', p_action_ctl_rec.return_code);
1073     PO_LOG.proc_end(d_module, 'p_action_ctl_rec.online_report_id', p_action_ctl_rec.online_report_id);
1074     PO_LOG.proc_end(d_module);
1075   END IF;
1076 
1077   RETURN;
1078 
1079 EXCEPTION
1080   WHEN OTHERS THEN
1081     p_action_ctl_rec.return_status := 'U';
1082 
1083     PO_DOCUMENT_ACTION_PVT.error_msg_append(d_module, d_progress, SQLCODE, SQLERRM);
1084     IF (PO_LOG.d_exc) THEN
1085       PO_LOG.exc(d_module, d_progress, SQLCODE || SQLERRM);
1086       PO_LOG.proc_end(d_module, 'p_action_ctl_rec.return_status', p_action_ctl_rec.return_status);
1087       PO_LOG.proc_end(d_module);
1088     END IF;
1089 
1090     RETURN;
1091 
1092 END return_action;
1093 
1094 -- Private package methods
1095 
1096 ------------------------------------------------------------------------------
1097 --Start of Comments
1098 --Name: get_supply_action_name
1099 --Pre-reqs:
1100 --  None.
1101 --Modifies:
1102 --  None.
1103 --Locks:
1104 --  None.
1105 --Function:
1106 -- Given an action and document type, returns the appropriate supply action
1107 -- to call via PO_SUPPLY.po_req_supply().
1108 --Parameters:
1109 --IN:
1110 --  p_action
1111 --    REJECT, APPROVE, RETURN
1112 --  p_document_type
1113 --    APPROVE/REJECT: PO, PA, RELEASE, REQUISITION
1114 --    RETURN: REQUISITION
1115 --  p_document_subtype
1116 --    RELEASE: BLANKET, SCHEDULED
1117 --    PO: PLANNED, STANDARD
1118 --    PA: CONTRACT, BLANKET
1119 --OUT:
1120 --  x_return_status
1121 --    'S' if successful
1122 --    'U' if unexpected error
1123 --  x_supply_action
1124 --    Name of supply action to pass to PO_SUPPLY.po_req_supply()
1125 --End of Comments
1126 -------------------------------------------------------------------------------
1127 PROCEDURE get_supply_action_name(
1128    p_action            IN          VARCHAR2
1129 ,  p_document_type     IN          VARCHAR2
1130 ,  p_document_subtype  IN          VARCHAR2
1131 ,  x_supply_action     OUT NOCOPY  VARCHAR2
1132 ,  x_return_status     OUT NOCOPY  VARCHAR2
1133 )
1134 IS
1135 
1136 d_progress  NUMBER;
1137 d_module    VARCHAR2(70) := 'po.plsql.PO_DOCUMENT_ACTION_AUTH.get_supply_action_name';
1138 
1139 l_supply_action  VARCHAR2(40);
1140 
1141 BEGIN
1142 
1143   d_progress := 0;
1144   IF (PO_LOG.d_proc) THEN
1145     PO_LOG.proc_begin(d_module);
1146     PO_LOG.proc_begin(d_module, 'p_document_type', p_document_subtype);
1147     PO_LOG.proc_begin(d_module, 'p_document_type', p_document_subtype);
1148   END IF;
1149 
1150   IF (p_action IN (PO_DOCUMENT_ACTION_PVT.g_doc_action_APPROVE,
1151                    PO_DOCUMENT_ACTION_PVT.g_doc_action_REJECT))
1152   THEN
1153 
1154     IF (p_document_type = 'PO')
1155     THEN
1156 
1157       d_progress := 10;
1158       l_supply_action := 'Approve_PO_Supply';
1159 
1160     ELSIF (p_document_type = 'RELEASE')
1161     THEN
1162       d_progress := 20;
1163       IF (p_document_subtype = 'BLANKET')
1164       THEN
1165         d_progress := 30;
1166         l_supply_action := 'Approve_Blanket_Release_Supply';
1167       ELSE
1168         d_progress := 40;
1169         l_supply_action := 'Approve_Planned_Release_Supply';
1170       END IF;
1171 
1172     ELSIF (p_document_type = 'REQUISITION')
1173     THEN
1174 
1175       d_progress := 50;
1176       l_supply_action := 'Approve_Req_Supply';
1177 
1178     END IF;  -- document_type = 'PO'
1179 
1180   ELSIF ((p_action = PO_DOCUMENT_ACTION_PVT.g_doc_action_RETURN)
1181        AND (p_document_type = 'REQUISITION'))
1182   THEN
1183 
1184     d_progress := 60;
1185     l_supply_action := 'Remove_Return_Req_Supply';
1186 
1187   ELSE
1188 
1189     RAISE PO_CORE_S.g_invalid_call_exc;
1190 
1191   END IF;  -- p_action IN ...
1192 
1193   x_supply_action := l_supply_action;
1194   x_return_status := 'S';
1195 
1196   IF (PO_LOG.d_proc) THEN
1197     PO_LOG.proc_end(d_module, 'x_return_status', x_return_status);
1198     PO_LOG.proc_end(d_module, 'x_supply_action', x_supply_action);
1199     PO_LOG.proc_end(d_module);
1200   END IF;
1201 
1202 EXCEPTION
1203   WHEN OTHERS THEN
1204     x_return_status := 'U';
1205     PO_DOCUMENT_ACTION_PVT.error_msg_append(d_module, d_progress, SQLCODE, SQLERRM);
1206     IF (PO_LOG.d_exc) THEN
1207       PO_LOG.exc(d_module, d_progress, SQLCODE || SQLERRM);
1208       PO_LOG.proc_end(d_module, 'x_return_status', x_return_status);
1209       PO_LOG.proc_end(d_module);
1210     END IF;
1211 
1212     RETURN;
1213 END get_supply_action_name;
1214 
1215 
1216 END PO_DOCUMENT_ACTION_AUTH;