[Home] [Help]
PACKAGE BODY: APPS.IGI_EXP_APPROVAL_PKG
Source
1 PACKAGE BODY igi_exp_approval_pkg AS
2 -- $Header: igiexab.pls 120.15 2009/02/09 09:55:14 sharoy ship $
3
4
5
6
7 /* ============== WORKFLOW VARAIBLES =================
8 ## Variables for framing and coloring the Table.
9 ## copied FROM WF_NOTIFICATION package
10 ## /fnddev/fnd/11.5/patch/115/sql/wfntfb.pls
11 ##
12 */
13
14 table_width VARCHAR2(6) := '"100%"';
15 table_border VARCHAR2(3) := '"0"';
16 table_cellpadding VARCHAR2(3) := '"3"';
17 table_cellspacing VARCHAR2(3) := '"1"';
18 total_cellspacing VARCHAR2(3) := '"0"';
19 table_bgcolor VARCHAR2(7) := '"white"';
20 th_bgcolor VARCHAR2(9) := '"#cccc99"';
21 th_fontcolor VARCHAR2(9) := '"#336699"';
22 th_fontface VARCHAR2(80) := '"Arial, Helvetica, Geneva, sans-serif"';
23 th_fontsize VARCHAR2(2) := '2';
24 td_bgcolor VARCHAR2(9) := '"#f7f7e7"';
25 td_fontcolor VARCHAR2(7) := '"black"';
26 td_fontface VARCHAR2(80) := '"Arial, Helvetica, Geneva, sans-serif"';
27 td_fontsize varchar2(2) := '2';
28
29 /* ============== FND LOG VARIABLES ================== */
30 l_debug_level number := FND_LOG.G_CURRENT_RUNTIME_LEVEL ;
31 l_state_level number := FND_LOG.LEVEL_STATEMENT ;
32 l_proc_level number := FND_LOG.LEVEL_PROCEDURE ;
33 l_event_level number := FND_LOG.LEVEL_EVENT ;
34 l_excep_level number := FND_LOG.LEVEL_EXCEPTION ;
35 l_error_level number := FND_LOG.LEVEL_ERROR ;
36 l_unexp_level number := FND_LOG.LEVEL_UNEXPECTED ;
37
38 -- global variables for framing the table header.
39 l_table_head VARCHAR2(100);
40 l_line_head VARCHAR2(100);
41 l_desc_head VARCHAR2(100);
42
43 --
44 --
45 -- PRIVATE ROUTINES
46 --
47 --
48
49 /* =================== DEBUG_LOG_UNEXP_ERROR =================== */
50
51 Procedure Debug_log_unexp_error (P_module IN VARCHAR2,
52 P_error_type IN VARCHAR2)
53 IS
54
55 BEGIN
56
57 IF (l_unexp_level >= l_debug_level) THEN
58
59 IF (P_error_type = 'DEFAULT') THEN
60 FND_MESSAGE.SET_NAME('IGI','IGI_LOGGING_UNEXP_ERROR');
61 FND_MESSAGE.SET_TOKEN('CODE',sqlcode);
62 FND_MESSAGE.SET_TOKEN('MSG',sqlerrm);
63 FND_LOG.MESSAGE(l_unexp_level, 'igi.plsql.igiexab.igi_exp_approval_pkg.' || P_module ,TRUE);
64 ELSIF (P_error_type = 'USER') THEN
65 FND_LOG.MESSAGE(l_unexp_level, 'igi.plsql.igiexab.igi_exp_approval_pkg.' || P_module ,TRUE);
66 END IF;
67
68 END IF;
69
70 wf_core.context ('IGI_EXP_APPROVAL_PKG','igi.plsql.igiexab.igi_exp_approval_pkg.'|| P_module,
71 'Unexpected error occured. Please refer FND LOG for detailed ERROR message');
72
73 EXCEPTION
74 WHEN OTHERS THEN
75 wf_core.context ('IGI_EXP_APPROVAL_PKG','Debug_log_unexp_error', 'ERROR IN FND LOGGING');
76 RAISE;
77
78 END Debug_log_unexp_error;
79
80 /* =================== DEBUG_LOG_STRING =================== */
81
82 Procedure Debug_log_string (P_level IN NUMBER,
83 P_module IN VARCHAR2,
84 P_Message IN VARCHAR2)
85 IS
86
87 BEGIN
88
89 IF (P_level >= l_debug_level) THEN
90 FND_LOG.STRING(P_level, 'igi.plsql.igiexab.igi_exp_approval_pkg.' || P_module, P_message) ;
91 END IF;
92
93 EXCEPTION
94 WHEN OTHERS THEN
95 wf_core.context ('IGI_EXP_APPROVAL_PKG','Debug_log_string', 'ERROR IN FND LOGGING');
96 RAISE;
97
98 END Debug_log_string;
99
100 /* =================== FRAME_TABLE_HEADER =================== */
101
102 PROCEDURE Frame_table_header (p_html_tag OUT NOCOPY VARCHAR2)
103 IS
104
105 l_table_details VARCHAR2(4000);
106
107 BEGIN
108
109 -- =============== START DEBUG LOG ================
110 DEBUG_LOG_STRING (l_proc_level, 'Frame_table_header.Msg1',
111 ' ** START FRAME_TABLE_HEADER ** ');
112 -- =============== END DEBUG LOG ==================
113
114 -- Getting the table heads from messages
115 fnd_message.set_name ('IGI', 'IGI_EXP_TABLE_HEAD');
116 l_table_head := fnd_message.get;
117 fnd_message.set_name ('IGI', 'IGI_EXP_LINE');
118 l_line_head := fnd_message.get;
119 fnd_message.set_name ('IGI', 'IGI_EXP_DIA_LIST');
120 l_desc_head := fnd_message.get;
121
122 -- =============== START DEBUG LOG ================
123 DEBUG_LOG_STRING (l_proc_level, 'Frame_table_header.Msg2',
124 ' Getting table heading ' ||
125 ' l_table_head --> ' || l_table_head ||
126 ' l_line_head --> ' || l_line_head ||
127 ' l_desc_head --> ' || l_desc_head );
128 -- =============== END DEBUG LOG ==================
129
130 -- Framing the table headings..
131 l_table_details := '<br><font color='||th_fontcolor||'face='||
132 th_fontface||'><b>'|| l_table_head || '</b>';
133
134 l_table_details := l_table_details ||'<table bgcolor=' ||table_bgcolor
135 ||' width=' ||table_width
136 ||' border=' ||table_border
137 ||' cellpadding=' ||table_cellpadding
138 ||' cellspacing=' ||table_cellspacing||'>';
139
140 l_table_details := l_table_details || '<tr bgcolor='||th_bgcolor||'>';
141 l_table_details := l_table_details || '<td align="left"><font color='||th_fontcolor||' face='||
142 th_fontface||' size='||th_fontsize||'><b>' || l_line_head || '</b></td>';
143 l_table_details := l_table_details || '<td align="left"><font color='||th_fontcolor||' face='||
144 th_fontface||' size='||th_fontsize||'><b>' || l_desc_head || '</b></td>';
145 l_table_details := l_table_details || '</tr>';
146
147 -- =============== START DEBUG LOG ================
148 DEBUG_LOG_STRING (l_proc_level, 'Frame_table_header.Msg3',
149 ' Table heading -- l_table_details --> ' || l_table_details);
150 -- =============== END DEBUG LOG ==================
151
152 p_html_tag := l_table_details;
153
154 -- =============== START DEBUG LOG ================
155 DEBUG_LOG_STRING (l_proc_level, 'Frame_table_header.Msg4',
156 ' ** END FRAME_TABLE_HEADER ** ');
157 -- =============== END DEBUG LOG ==================
158
159 EXCEPTION
160 WHEN OTHERS THEN
161 p_html_tag := NULL;
162 -- =============== START DEBUG LOG ================
163 DEBUG_LOG_UNEXP_ERROR ('Frame_table_header.Unexp1','DEFAULT');
164 -- =============== END DEBUG LOG ==================
165 raise;
166
167 END Frame_table_header;
168
169 -- *************************************************************************
170 -- CREATE_DU_LIST
171 -- *************************************************************************
172
173 PROCEDURE Create_du_list (document_id IN VARCHAR2,
174 display_type IN VARCHAR2,
175 document IN OUT NOCOPY CLOB,
176 document_type IN OUT NOCOPY VARCHAR2)
177 IS
178
179 itemtype VARCHAR2(30);
180 itemkey VARCHAR2(60);
181 l_tu_id igi_exp_dus.tu_id%TYPE;
182 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
183
184 l_du_list VARCHAR2(28000);
185 l_du VARCHAR2(4000);
186
187 l_table_details VARCHAR2(4000);
188 l_substr NUMBER := 1;
189 l_instr NUMBER := 0;
190 l_line_num NUMBER := 0;
191
192 BEGIN
193
194
195 -- =============== START DEBUG LOG ================
196 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg1',
197 ' ** START CREATE_DU_LIST ** ');
198 -- =============== END DEBUG LOG ==================
199
200 itemtype := substr(document_id,1,instr(document_id,':')-1);
201 itemkey := substr(document_id,instr(document_id,':')+1);
202
203 -- =============== START DEBUG LOG ================
204 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg2',
205 ' itemtype --> ' || itemtype ||
206 ' itemkey --> ' || itemkey);
207 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg3',
208 ' Getting values from ADD_ATTRS' );
209 -- =============== END DEBUG LOG ==================
210
211 FOR J IN 1..7 LOOP
212 -- Get all the du attribute
213 l_du := wf_engine.GetItemAttrText ( itemtype => itemtype,
214 itemkey => itemkey,
215 aname => 'ADD_ATTR'||J);
216
217 -- =============== START DEBUG LOG ================
218 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg4',
219 ' Getting from ADD_ATTR'||J);
220 -- =============== END DEBUG LOG ==================
221
222 IF (l_du IS NULL) THEN
223 exit;
224 END IF;
225
226 l_du_list := l_du_list || l_du;
227
228 END LOOP;
229
230 -- =============== START DEBUG LOG ================
231 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg5',
232 ' Calling frame table header ');
233 -- =============== END DEBUG LOG ==================
234
235 Frame_table_header (l_table_details);
236
237 -- =============== START DEBUG LOG ================
238 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg6',
239 ' l_table_details --> ' || l_table_details);
240 -- =============== END DEBUG LOG ==================
241
242 -- adding to the clob
243 WF_NOTIFICATION.WriteToClob(Document,l_table_details);
244
245 -- Framing the DU list and adding it to the table.
246 LOOP
247
248 l_instr := instr(l_du_list, fnd_global.local_chr(10));
249
250 -- =============== START DEBUG LOG ================
251 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg7',
252 ' l_instr --> ' || l_instr);
253 -- =============== END DEBUG LOG ==================
254
255 l_du := substr ( l_du_list, l_substr, l_instr );
256
257 -- =============== START DEBUG LOG ================
258 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg8',
259 ' l_du --> ' || l_du);
260 -- =============== END DEBUG LOG ==================
261
262 -- putting details to HTML table.
263 l_line_num := l_line_num + 1;
264 l_table_details := '<tr>';
265 l_table_details := l_table_details || '<td bgcolor='||td_bgcolor||' align="left"><font color='||
266 td_fontcolor||' face='||td_fontface||' size='||td_fontsize||'>' || to_char(l_line_num) || '</td>';
267 l_table_details := l_table_details || '<td bgcolor='||td_bgcolor||' align="left"><font color='||
268 td_fontcolor||' face='||td_fontface||' size='||td_fontsize||'>' || l_du || '</td>';
269 l_table_details := l_table_details || '</tr>';
270
271 -- =============== START DEBUG LOG ================
272 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg9',
273 ' Table details -- l_table_details --> ' || l_table_details);
274 -- =============== END DEBUG LOG ==================
275
276 WF_NOTIFICATION.WriteToClob(Document, l_table_details);
277
278 l_du_list := substr (l_du_list, l_instr+1);
279
280 -- =============== START DEBUG LOG ================
281 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg10',
282 ' l_du_list --> '|| substr(l_du_list,1,3900));
283 -- =============== END DEBUG LOG ==================
284
285 IF (l_du_list IS NULL) THEN
286 -- =============== START DEBUG LOG ================
287 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg11',
288 ' l_du_list IS NULL -- exiting' );
289 -- =============== END DEBUG LOG ==================
290 exit;
291 END IF;
292
293 END LOOP;
294
295
296 -- closing the HTML table.
297 l_table_details := '</table><br>';
298 -- =============== START DEBUG LOG ================
299 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg12',
300 ' End of table -- l_table_details --> ' || l_table_details);
301 -- =============== END DEBUG LOG ==================
302
303 WF_NOTIFICATION.WriteToClob(Document,l_table_details);
304
305 -- =============== START DEBUG LOG ================
306 DEBUG_LOG_STRING (l_proc_level, 'Create_du_list.Msg13',
307 ' ** END CREATE_DU_LIST ** ');
308 -- =============== END DEBUG LOG ==================
309
310 EXCEPTION
311 WHEN OTHERS THEN
312 -- =============== START DEBUG LOG ================
313 DEBUG_LOG_UNEXP_ERROR ('Create_du_list.Unexp1','DEFAULT');
314 -- =============== END DEBUG LOG ==================
315 raise;
316
317 END Create_du_list;
318
319 /* =================== SET_TU_FORM_TO_QUERY =================== */
320
321 PROCEDURE set_tu_form_to_query (p_nid NUMBER) IS
322
323 l_value VARCHAR2(4000);
324 l_new_value VARCHAR2(4000);
325
326 BEGIN
327
328 -- This procedure is called from procedure set_curr_auth_to_responder
329 -- (a post notification function). This procedure will reset the value
330 -- of the TU_FORM attribute after a notification has been responded to or
331 -- timed out NOCOPY so that the TU form is called in query_only mode.
332
333 -- =============== START DEBUG LOG ================
334 DEBUG_LOG_STRING (l_proc_level, 'set_tu_form_to_query.Msg1',
335 ' ** BEGIN SET_TU_FORM_TO_QUERY ** ');
336 -- =============== END DEBUG LOG ==================
337
338 SELECT text_value
339 INTO l_value
340 FROM wf_notification_attributes
341 WHERE notification_id = p_nid
342 AND name = 'TU_FORM';
343
344 -- =============== START DEBUG LOG ================
345 DEBUG_LOG_STRING (l_proc_level, 'set_tu_form_to_query.Msg2',
346 ' l_value --> ' || l_value);
347 -- =============== END DEBUG LOG ==================
348
349 -- The value of parameter QUERY_ONLY should be set to 'YES'
350 -- instead of 'NO'
351 l_new_value := REPLACE(l_value,'NO','YES');
352
353 -- =============== START DEBUG LOG ================
354 DEBUG_LOG_STRING (l_proc_level, 'set_tu_form_to_query.Msg3',
355 ' l_new_value --> ' || l_new_value);
356 -- =============== END DEBUG LOG ==================
357
358
359 UPDATE wf_notification_attributes
360 SET text_value = l_new_value
361 WHERE notification_id = p_nid
362 AND name = 'TU_FORM';
363
364 -- =============== START DEBUG LOG ================
365 DEBUG_LOG_STRING (l_proc_level, 'set_tu_form_to_query.Msg4',
366 ' Updating wf_notification_attributes ');
367 DEBUG_LOG_STRING (l_proc_level, 'set_tu_form_to_query.Msg5',
368 ' ** END SET_TU_FORM_TO_QUERY ** ');
369 -- =============== END DEBUG LOG ==================
370
371 EXCEPTION
372 WHEN OTHERS THEN
373 -- =============== START DEBUG LOG ================
374 DEBUG_LOG_UNEXP_ERROR ('set_tu_form_to_query.Unexp1','DEFAULT');
375 -- =============== END DEBUG LOG ==================
376 RAISE;
377
378 END set_tu_form_to_query;
379
380 --
381 --
382 -- PUBLIC ROUTINES
383 --
384 --
385
386 -- *************************************************************************
387 -- SELECTOR
388 -- *************************************************************************
389
390
391 PROCEDURE Selector(itemtype IN VARCHAR2,
392 itemkey IN VARCHAR2,
393 actid IN NUMBER,
394 funcmode IN VARCHAR2,
395 resultout OUT NOCOPY VARCHAR2) IS
396
397 l_session_org_id NUMBER;
398 l_work_item_org_id NUMBER;
399 l_user_id NUMBER;
400 l_resp_id NUMBER;
401 l_appl_id NUMBER;
402
403 BEGIN
404
405 -- =============== START DEBUG LOG ================
406 DEBUG_LOG_STRING (l_proc_level, 'Selector.Msg1',
407 ' ** BEGIN SELECTOR ** ');
408 -- =============== END DEBUG LOG ==================
409 -- Bug 4063076 Start
410
411 IF funcmode = 'RUN'
412 THEN
413 -- Return process to run when workflow is invoked
414 resultout := 'EXP_APPROVAL_TOP';
415 ELSIF funcmode = 'TEST_CTX'
416 THEN
417 -- Code that compares current session context
418 -- with the work item context required to execute
419 -- the workflow
420 --fnd_profile.get (name=>'ORG_ID', val=> l_session_org_id);
421 l_session_org_id := mo_global.get_current_org_id(); -- Bug# 5905190 MOAC changes
422 l_work_item_org_id := wf_engine.GetItemAttrNumber
423 (itemtype,
424 itemkey,
425 'ORG_ID');
426 IF nvl(l_session_org_id,-99) = l_work_item_org_id
427 THEN
428 resultout := 'TRUE';
429 ELSE
430 -- This will cause workflow to call this funciton
431 -- in SET_CTX mode
432 resultout := 'FALSE';
433 END IF;
434
435 ELSIF funcmode = 'SET_CTX'
436 THEN
437 l_user_id := wf_engine.GetItemAttrNumber
438 (itemtype,
439 itemkey,
440 'USER_ID');
441 l_resp_id := wf_engine.GetItemAttrNumber
442 (itemtype,
443 itemkey,
444 'RESPONSIBILITY_ID');
445 l_appl_id := wf_engine.GetItemAttrNumber
446 (itemtype,
447 itemkey,
448 'RESP_APPL_ID');
449
450 /* Bug# 5905190 MOAC changes starts.
451 Get org_id from Item Attribute and set policy context with same value
452 */
453 l_work_item_org_id := wf_engine.GetItemAttrNumber
454 (itemtype,
455 itemkey,
456 'ORG_ID');
457
458 mo_global.set_policy_context('S',l_work_item_org_id);
459 /* Bug# 5905190 MOAC changes ends */
460
461 DEBUG_LOG_STRING (l_proc_level, 'Selector.Msg',
462 ' Setting apps context with userid, respid, applid as '
463 ||l_user_id ||' '|| l_resp_id ||' '|| l_appl_id );
464
465
466 FND_GLOBAL.apps_initialize(l_user_id,l_resp_id,l_appl_id);
467
468 resultout := 'COMPLETE';
469 ELSE
470 resultout := 'COMPLETE';
471 END IF;
472
473 -- Bug 4063076 End
474 -- =============== START DEBUG LOG ================
475 DEBUG_LOG_STRING (l_proc_level, 'Selector.Msg3',
476 ' result --> ' || resultout);
477 DEBUG_LOG_STRING (l_proc_level, 'Selector.Msg4',
478 ' ** END SELECTOR ** ');
479 -- =============== END DEBUG LOG ==================
480
481
482 EXCEPTION
483 WHEN OTHERS THEN
484 -- =============== START DEBUG LOG ================
485 DEBUG_LOG_UNEXP_ERROR ('Selector.Unexp1','DEFAULT');
486 -- =============== END DEBUG LOG ==================
487
488 Wf_Core.Context ('IGI_EXP_APPROVAL_PKG','Selector', itemtype, itemkey,
489 TO_CHAR(actid),funcmode);
490 RAISE;
491
492 END Selector;
493
494
495 -- *************************************************************************
496 -- START_APPROVAL_WORKFLOW
497 -- *************************************************************************
498
499
500 PROCEDURE start_approval_workflow (p_tu_id IN NUMBER
501 ,p_tu_order_number IN VARCHAR2
502 ,p_tu_transmitter_name IN VARCHAR2
503 ,p_tu_transmitter_id IN NUMBER) IS
504
505 l_itemtype VARCHAR2(10) := 'EXPAPPRV';
506 l_itemkey VARCHAR2(50) ;
507 l_approval_run_id NUMBER;
508 l_msg VARCHAR2(2000);
509 l_tu_legal_number VARCHAR2(250); ---- Changes for Bug 6640095 - FP Bug 6847238
510
511
512 BEGIN
513
514 -- =============== START DEBUG LOG ================
515 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg1.3',
516 ' ** BEGIN START_APPROVAL_WORKFLOW ** ');
517 -- =============== END DEBUG LOG ==================
518
519 -- Update the status of the TU to 'Transmitted'
520 UPDATE igi_exp_tus tus
521 SET tus.tu_status = 'TRA'
522 WHERE tus.tu_id = p_tu_id;
523
524 -- =============== START DEBUG LOG ================
525 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg2',
526 ' updating igi_exp_tus setting tu_status = TRA for tu_id ' || p_tu_id);
527 -- =============== END DEBUG LOG ==================
528
529 -- Update the status of all DUs in the TU to 'Transmitted'
530 UPDATE igi_exp_dus dus
531 SET dus.du_status = 'TRA'
532 WHERE dus.tu_id = p_tu_id;
533
534 -- =============== START DEBUG LOG ================
535 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg3',
536 ' updating igi_exp_dus setting du_status = TRA for tu_id ' || p_tu_id);
537 -- =============== END DEBUG LOG ==================
538
539 -- Get approval run id
540 SELECT igi_exp_tu_run_s1.nextval
541 INTO l_approval_run_id
542 FROM sys.dual;
543
544 -- =============== START DEBUG LOG ================
545 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg4',
546 ' l_apporval_run_id --> ' || l_approval_run_id);
547 -- =============== END DEBUG LOG ==================
548
549 -- Generate the item key
550 l_itemkey := to_char(p_tu_id)||'/'||to_char(l_approval_run_id);
551
552 -- =============== START DEBUG LOG ================
553 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg5',
554 ' l_itemkey --> ' || l_itemkey);
555 -- =============== END DEBUG LOG ==================
556
557 -- Kick Off Workflow Process
558 wf_engine.CreateProcess (itemtype => l_itemtype,
559 itemkey => l_itemkey,
560 process => 'EXP_APPROVAL_TOP');
561
562 -- =============== START DEBUG LOG ================
563 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg6',
564 ' Create process ');
565 -- =============== END DEBUG LOG ==================
566
567 -- Set Item User Key
568 wf_engine.SetItemUserKey( itemtype => l_itemtype,
569 itemkey => l_itemkey,
570 userkey => p_tu_order_number);
571
572 -- =============== START DEBUG LOG ================
573 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg7',
574 ' SetItemUserKey p_tu_order_number');
575 -- =============== END DEBUG LOG ==================
576
577 -- Set Process Owner
578 wf_engine.SetItemOwner( itemtype => l_itemtype,
579 itemkey => l_itemkey,
580 owner => p_tu_transmitter_name);
581
582 -- =============== START DEBUG LOG ================
583 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg8',
584 ' SetItemOwner p_tu_transmitter_name');
585 -- =============== END DEBUG LOG ==================
586
587 -- Set TU id
588 wf_engine.SetItemAttrNumber( itemtype => l_itemtype,
589 itemkey => l_itemkey,
590 aname => 'TU_ID',
591 avalue => p_tu_id);
592
593 -- =============== START DEBUG LOG ================
594 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg9',
595 ' SetItemAttrNumber TU_ID --> ' || p_tu_id);
596 -- =============== END DEBUG LOG ==================
597
598 -- Set TU Order Number
599 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
600 itemkey => l_itemkey,
601 aname => 'TU_ORDER_NUM',
602 avalue => p_tu_order_number);
603
604 -- =============== START DEBUG LOG ================
605 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg10',
606 ' SetItemAttrText TU_ORDER_NUM --> ' || p_tu_order_number);
607 -- =============== END DEBUG LOG ==================
608
609
610 /* wf_engine.SetItemAttrText ( itemtype => l_itemtype, ---- Changes for Bug 6640095 - FP Bug 6847238
611 itemkey => l_itemkey,
612 aname => 'TU_FULL_NUMBER',
613 avalue => p_tu_order_number);
614 */
615 -- Set TU Full Number
616
617 -- Bug 6640095 modifications starts here.
618 -- Introduced the following calculation for TU Full Number for bug 6640095.
619 -- If the tu_legal_number is not got generated, then it will take tu_order_number.
620
621 select tu_legal_number into l_tu_legal_number
622 from igi_exp_tus WHERE tu_id = p_tu_id;
623
624 IF (l_tu_legal_number is NULL) then
625
626 -- Set TU Full Number
627 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
628 itemkey => l_itemkey,
629 aname => 'TU_FULL_NUMBER',
630 avalue => p_tu_order_number);
631
632 ELSE
633
634 -- Set TU Full Number
635 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
636 itemkey => l_itemkey,
637 aname => 'TU_FULL_NUMBER',
638 avalue => l_tu_legal_number);
639
640 END IF;
641
642 -- Bug 6640095 modifications ends here. ---- Changes for Bug 6640095 - FP Bug 6847238
643
644
645 -- =============== START DEBUG LOG ================
646 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg11',
647 ' SetItemAttrText TU_FULL_NUMBER --> ' || p_tu_order_number);
648 -- =============== END DEBUG LOG ==================
649
650 -- Set TU Transmitter User Name
651 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
652 itemkey => l_itemkey,
653 aname => 'TRANSMITTER_FND_NAME',
654 avalue => p_tu_transmitter_name);
655
656 -- =============== START DEBUG LOG ================
657 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg12',
658 ' SetItemAttrText TRANSMITTER_FND_NAME --> ' || p_tu_transmitter_name);
659 -- =============== END DEBUG LOG ==================
660
661 -- Set TU Transmitter User Id
662 wf_engine.SetItemAttrNumber( itemtype => l_itemtype,
663 itemkey => l_itemkey,
664 aname => 'TRANSMITTER_FND_ID',
665 avalue => p_tu_transmitter_id);
666
667 -- =============== START DEBUG LOG ================
668 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg13',
669 ' SetItemAttrText TRANSMITTER_FND_ID --> ' || p_tu_transmitter_id);
670 -- =============== END DEBUG LOG ==================
671
672 -- Set current authorizer role
673 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
674 itemkey => l_itemkey,
675 aname => 'CURRENT_AUTHORIZER_ROLE',
676 avalue => p_tu_transmitter_name);
677
678 -- =============== START DEBUG LOG ================
679 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg14',
680 ' SetItemAttrText CURRENT_AUTHORIZER_ROLE --> ' || p_tu_transmitter_name);
681 -- =============== END DEBUG LOG ==================
682
683
684 -- Add Transmitter to Authorizer History List
685 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
686 itemkey => l_itemkey,
687 aname => 'AUTHORIZER_HISTORY_LIST',
688 avalue => p_tu_transmitter_name);
689
690 -- =============== START DEBUG LOG ================
691 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg15',
692 ' SetItemAttrText AUTHORIZER_HISTORY_LIST --> ' || p_tu_transmitter_name);
693 -- =============== END DEBUG LOG ==================
694
695 -- Set user id, responsibility id , org id and application id context values
696 -- Bug 4063076 , Start
697 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
698 itemkey => l_itemkey,
699 aname => 'ORG_ID',
700 avalue => mo_global.get_current_org_id());
701
702 -- =============== START DEBUG LOG ================
703
704 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg16',
705
706 ' SetItemAttrText ORG_ID --> ' || FND_PROFILE.VALUE('ORG_ID'));
707
708 -- =============== END DEBUG LOG ==================
709
710
711
712 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
713 itemkey => l_itemkey,
714 aname => 'USER_ID',
715 avalue => FND_PROFILE.VALUE('USER_ID'));
716
717 -- =============== START DEBUG LOG ================
718
719 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg17',
720
721 ' SetItemAttrText USER_ID --> ' || FND_PROFILE.VALUE('USER_ID'));
722
723 -- =============== END DEBUG LOG ==================
724
725
726 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
727 itemkey => l_itemkey,
728 aname => 'RESPONSIBILITY_ID',
729 avalue => FND_PROFILE.VALUE('RESP_ID'));
730
731
732 -- =============== START DEBUG LOG ================
733
734 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg18',
735
736 ' SetItemAttrText RESPONSIBILITY_ID --> ' || FND_PROFILE.VALUE('RESPONSIBILITY_ID'));
737
738 -- =============== END DEBUG LOG ==================
739
740 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
741 itemkey => l_itemkey,
742 aname => 'RESP_APPL_ID',
743 avalue => FND_PROFILE.VALUE('RESP_APPL_ID'));
744
745 -- =============== START DEBUG LOG ================
746
747 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg19',
748
749 ' SetItemAttrText RESP_APPL_ID --> ' || FND_PROFILE.VALUE('RESP_APPL_ID'));
750
751 -- =============== END DEBUG LOG ==================
752
753 -- Bug 4063076 , End
754
755 --Bug 5872277 Start
756 fnd_message.set_name ('IGI', 'IGI_EXP_APP_PROC_ERROR');
757
758 l_msg := fnd_message.get;
759
760 -- =============== START DEBUG LOG ================
761
762 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg20',
763
764 ' SetItemAttrText IGI_EXP_APP_PROC_ERROR --> ' || nvl(l_msg,' NULL '));
765
766 -- =============== END DEBUG LOG ==================
767
768 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
769 itemkey => l_itemkey,
770 aname => 'APP_PROC_ERROR',
771 avalue => l_msg);
772
773 -- =============== START DEBUG LOG ================
774
775 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg21',
776
777 ' SetItemAttrText APP_PROC_ERROR');
778
779 -- =============== END DEBUG LOG ==================
780
781 fnd_message.set_name ('IGI', 'IGI_EXP_DU_AUTH_REQ');
782 l_msg := fnd_message.get;
783 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
784 itemkey => l_itemkey,
785 aname => 'DU_AUTH_REQ',
786 avalue => l_msg);
787
788 fnd_message.set_name ('IGI', 'IGI_EXP_DU_HOLD');
789 l_msg := fnd_message.get;
790 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
791 itemkey => l_itemkey,
792 aname => 'DU_HOLD',
793 avalue => l_msg);
794
795 fnd_message.set_name ('IGI', 'IGI_EXP_DU_NO_APP_ACTION');
796 l_msg := fnd_message.get;
797 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
798 itemkey => l_itemkey,
799 aname => 'DU_NO_APP_ACTION',
800 avalue => l_msg);
801
802 fnd_message.set_name ('IGI', 'IGI_EXP_DU_PER_AUTH_ACTION');
803 l_msg := fnd_message.get;
804 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
805 itemkey => l_itemkey,
806 aname => 'DU_PER_AUTH_ACTION',
807 avalue => l_msg);
808
809 fnd_message.set_name ('IGI', 'IGI_EXP_LEGAL_NUM_ERROR');
810 l_msg := fnd_message.get;
811 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
812 itemkey => l_itemkey,
813 aname => 'LEGAL_NUM_ERROR',
814 avalue => l_msg);
815
816 fnd_message.set_name ('IGI', 'IGI_EXP_NTFY_DU_FAILED');
817 l_msg := fnd_message.get;
818 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
819 itemkey => l_itemkey,
820 aname => 'NTFY_DU_FAILED',
821 avalue => l_msg);
822
823 fnd_message.set_name ('IGI', 'IGI_EXP_NTFY_DU_REJECT');
824 l_msg := fnd_message.get;
825 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
826 itemkey => l_itemkey,
827 aname => 'NTFY_DU_REJECT',
828 avalue => l_msg);
829
830 fnd_message.set_name ('IGI', 'IGI_EXP_NTFY_LEGAL_DU_REJECT');
831 l_msg := fnd_message.get;
832 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
833 itemkey => l_itemkey,
834 aname => 'NTFY_LEGAL_DU_REJECT',
835 avalue => l_msg);
836
837 fnd_message.set_name ('IGI', 'IGI_EXP_NTFY_TU_SUCCESS');
838 l_msg := fnd_message.get;
839 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
840 itemkey => l_itemkey,
841 aname => 'NTFY_TU_SUCCESS',
842 avalue => l_msg);
843
844 fnd_message.set_name ('IGI', 'IGI_EXP_TU_ACTION_ASSIGNMENTS');
845 l_msg := fnd_message.get;
846 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
847 itemkey => l_itemkey,
848 aname => 'TU_ACTION_ASSIGNMENTS',
849 avalue => l_msg);
850
851 fnd_message.set_name ('IGI', 'IGI_EXP_TU_ACTION_ERROR');
852 l_msg := fnd_message.get;
853 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
854 itemkey => l_itemkey,
855 aname => 'TU_ACTION_ERROR',
856 avalue => l_msg);
857
858 fnd_message.set_name ('IGI', 'IGI_EXP_TU_AUTH_ACTION');
859 l_msg := fnd_message.get;
860 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
861 itemkey => l_itemkey,
862 aname => 'TU_AUTH_ACTION',
863 avalue => l_msg);
864
865 fnd_message.set_name ('IGI', 'IGI_EXP_TU_DU_AUTH_ACTION');
866 l_msg := fnd_message.get;
867 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
868 itemkey => l_itemkey,
869 aname => 'TU_DU_AUTH_ACTION',
870 avalue => l_msg);
871
872 fnd_message.set_name ('IGI', 'IGI_EXP_TU_DU_COMPLETE');
873 l_msg := fnd_message.get;
874 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
875 itemkey => l_itemkey,
876 aname => 'TU_DU_COMPLETE',
877 avalue => l_msg);
878
879 fnd_message.set_name ('IGI', 'IGI_EXP_TU_DU_HOLD');
880 l_msg := fnd_message.get;
881 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
882 itemkey => l_itemkey,
883 aname => 'TU_DU_HOLD',
884 avalue => l_msg);
885
886 fnd_message.set_name ('IGI', 'IGI_EXP_TU_DU_HOLD_REMOVE');
887 l_msg := fnd_message.get;
888 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
889 itemkey => l_itemkey,
890 aname => 'TU_DU_HOLD_REMOVE',
891 avalue => l_msg);
892
893 fnd_message.set_name ('IGI', 'IGI_EXP_TU_DU_NO_APP_ACTION');
894 l_msg := fnd_message.get;
895 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
896 itemkey => l_itemkey,
897 aname => 'TU_DU_NO_APP_ACTION',
898 avalue => l_msg);
899
900 fnd_message.set_name ('IGI', 'IGI_EXP_TU_DU_PER_AUTH_ACTION');
901 l_msg := fnd_message.get;
902 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
903 itemkey => l_itemkey,
904 aname => 'TU_DU_PER_AUTH_ACTION',
905 avalue => l_msg);
906
907 fnd_message.set_name ('IGI', 'IGI_EXP_TU_DU_REMAIN');
908 l_msg := fnd_message.get;
909 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
910 itemkey => l_itemkey,
911 aname => 'TU_DU_REMAIN',
912 avalue => l_msg);
913
914 fnd_message.set_name ('IGI', 'IGI_EXP_TU_DU_REMOVE');
915 l_msg := fnd_message.get;
916 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
917 itemkey => l_itemkey,
918 aname => 'TU_DU_REMOVE',
919 avalue => l_msg);
920
921 fnd_message.set_name ('IGI', 'IGI_EXP_TU_EMP_SETUP_ERROR');
922 l_msg := fnd_message.get;
923 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
924 itemkey => l_itemkey,
925 aname => 'TU_EMP_SETUP_ERROR',
926 avalue => l_msg);
927
928 fnd_message.set_name ('IGI', 'IGI_EXP_TU_LEGAL_NUM_ERROR');
929 l_msg := fnd_message.get;
930 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
931 itemkey => l_itemkey,
932 aname => 'TU_LEGAL_NUM_ERROR',
933 avalue => l_msg);
934
935 fnd_message.set_name ('IGI', 'IGI_EXP_TU_NO_PARENT');
936 l_msg := fnd_message.get;
937 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
938 itemkey => l_itemkey,
939 aname => 'TU_NO_PARENT',
940 avalue => l_msg);
941
942 fnd_message.set_name ('IGI', 'IGI_EXP_TU_NO_USER_ERROR');
943 l_msg := fnd_message.get;
944 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
945 itemkey => l_itemkey,
946 aname => 'TU_NO_USER_ERROR',
947 avalue => l_msg);
948
949 fnd_message.set_name ('IGI', 'IGI_EXP_TU_NOT_ASSG_POS_ERROR');
950 l_msg := fnd_message.get;
951 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
952 itemkey => l_itemkey,
953 aname => 'TU_NOT_ASSG_POS_ERROR',
954 avalue => l_msg);
955
956 fnd_message.set_name ('IGI', 'IGI_EXP_TU_NOT_SETUP_EMP_ERR');
957 l_msg := fnd_message.get;
958 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
959 itemkey => l_itemkey,
960 aname => 'TU_NOT_SETUP_EMP_ERROR',
961 avalue => l_msg);
962
963 fnd_message.set_name ('IGI', 'IGI_EXP_TU_PICK_AUTH');
964 l_msg := fnd_message.get;
965 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
966 itemkey => l_itemkey,
967 aname => 'TU_PICK_AUTH',
968 avalue => l_msg);
969
970 fnd_message.set_name ('IGI', 'IGI_EXP_TU_PICK_NEW_AUTH');
971 l_msg := fnd_message.get;
972 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
973 itemkey => l_itemkey,
974 aname => 'TU_PICK_NEW_AUTH',
975 avalue => l_msg);
976
977 fnd_message.set_name ('IGI', 'IGI_EXP_TU_PICK_NEW_AUTH_LIST');
978 l_msg := fnd_message.get;
979 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
980 itemkey => l_itemkey,
981 aname => 'TU_PICK_NEW_AUTH_LIST',
982 avalue => l_msg);
983
984 fnd_message.set_name ('IGI', 'IGI_EXP_TU_POS_ASSG_ERROR');
985 l_msg := fnd_message.get;
986 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
987 itemkey => l_itemkey,
988 aname => 'TU_POS_ASSG_ERROR',
989 avalue => l_msg);
990
991 fnd_message.set_name ('IGI', 'IGI_EXP_TU_REQ_AUTHORIZATION');
992 l_msg := fnd_message.get;
993 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
994 itemkey => l_itemkey,
995 aname => 'TU_REQ_AUTHORIZATION',
996 avalue => l_msg);
997
998 fnd_message.set_name ('IGI', 'IGI_EXP_TU_RET_ATTN');
999 l_msg := fnd_message.get;
1000 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
1001 itemkey => l_itemkey,
1002 aname => 'TU_RET_ATTN',
1003 avalue => l_msg);
1004
1005 fnd_message.set_name ('IGI', 'IGI_EXP_TU_VAL_HIER_POS_ERROR');
1006 l_msg := fnd_message.get;
1007 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
1008 itemkey => l_itemkey,
1009 aname => 'TU_VAL_HIER_POS_ERROR',
1010 avalue => l_msg);
1011
1012 fnd_message.set_name ('IGI', 'IGI_EXP_TU_VAL_HR_POS_PRF_ERR');
1013 l_msg := fnd_message.get;
1014 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
1015 itemkey => l_itemkey,
1016 aname => 'TU_VAL_HIER_POS_PROF_ERROR',
1017 avalue => l_msg);
1018
1019 fnd_message.set_name ('IGI', 'IGI_EXP_TU_VALIDATION_ERROR');
1020 l_msg := fnd_message.get;
1021 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
1022 itemkey => l_itemkey,
1023 aname => 'TU_VALIDATION_ERROR',
1024 avalue => l_msg);
1025
1026 fnd_message.set_name ('IGI', 'IGI_EXP_TU_VALIDATION_HR_ERR');
1027 l_msg := fnd_message.get;
1028 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
1029 itemkey => l_itemkey,
1030 aname => 'TU_VALIDATION_HIER_ERROR',
1031 avalue => l_msg);
1032
1033 --Bug 5872277 End
1034
1035 -- Start the workflow process
1036 wf_engine.StartProcess( itemtype => l_itemtype,
1037 itemkey => l_itemkey);
1038
1039 -- =============== START DEBUG LOG ================
1040 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg16',
1041 ' Start process ');
1042 DEBUG_LOG_STRING (l_proc_level, 'Start_approval_workflow.Msg17',
1043 ' ** END START_APPROVAL_WORKFLOW ** ');
1044 -- =============== END DEBUG LOG ==================
1045
1046 COMMIT;
1047
1048 EXCEPTION
1049 WHEN OTHERS THEN
1050 -- =============== START DEBUG LOG ================
1051 DEBUG_LOG_UNEXP_ERROR ('Start_approval_workflow.Unexp1','DEFAULT');
1052 -- =============== END DEBUG LOG ==================
1053
1054 wf_core.context('IGI_EXP_APPROVAL_PKG','start_approval_workflow'
1055 ,l_itemtype, l_itemkey);
1056 RAISE;
1057
1058 END start_approval_workflow;
1059
1060
1061
1062 -- *************************************************************************
1063 -- IS_TU_TRANS_EMPLOYEE
1064 -- *************************************************************************
1065
1066 PROCEDURE is_tu_trans_employee ( itemtype IN VARCHAR2,
1067 itemkey IN VARCHAR2,
1068 actid IN NUMBER,
1069 funcmode IN VARCHAR2,
1070 result OUT NOCOPY VARCHAR2) IS
1071
1072 l_transmitter_fnd_id NUMBER(15);
1073 l_transmitter_emp_id NUMBER(15);
1074 l_trans_fnd_name VARCHAR2(240);
1075 l_transmitter_emp_name VARCHAR2(240);
1076 l_display_name VARCHAR2(240);
1077 l_validation_error VARCHAR2(240);
1078
1079 BEGIN
1080
1081 -- =============== START DEBUG LOG ================
1082 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg1',
1083 ' ** BEGIN IS_TU_TRANS_EMPLOYEE ** ');
1084 -- =============== END DEBUG LOG ==================
1085
1086 IF (funcmode = 'RUN') THEN
1087
1088 -- Get the fnd user id of the TU transmitter
1089 l_transmitter_fnd_id
1090 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
1091 itemkey => itemkey,
1092 aname => 'TRANSMITTER_FND_ID');
1093
1094 -- =============== START DEBUG LOG ================
1095 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg2',
1096 ' GetItemAttrNumber TRANSMITTER_FND_ID --> ' || l_transmitter_fnd_id);
1097 -- =============== END DEBUG LOG ==================
1098
1099 -- Get the employee id of the transmitter
1100 SELECT employee_id
1101 INTO l_transmitter_emp_id
1102 FROM fnd_user
1103 WHERE user_id = l_transmitter_fnd_id;
1104
1105 -- =============== START DEBUG LOG ================
1106 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg3',
1107 ' Get the employee id of the transmitter - '
1108 || ' l_transmitter_emp_id --> ' || l_transmitter_emp_id);
1109 -- =============== END DEBUG LOG ==================
1110
1111 IF (l_transmitter_emp_id is null) THEN
1112
1113 -- TU Transmitter is not an employee, so set result to 'No'
1114 result := 'COMPLETE:N';
1115
1116 -- =============== START DEBUG LOG ================
1117 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg4',
1118 ' l_transmitter_emp_id is null - result --> ' || result);
1119 -- =============== END DEBUG LOG ==================
1120
1121
1122 ELSE -- TU Transmitter is an employee
1123
1124 -- Set the transmitter_emp_id attribute
1125 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1126 itemkey => itemkey,
1127 aname => 'TRANSMITTER_EMP_ID',
1128 avalue => l_transmitter_emp_id);
1129
1130 -- =============== START DEBUG LOG ================
1131 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg5',
1132 ' SetItemAttrNumber TRANSMITTER_EMP_ID --> '|| l_transmitter_emp_id);
1133 -- =============== END DEBUG LOG ==================
1134
1135 -- Get the employee name of the transmitter
1136 wf_directory.GetUserName(p_orig_system => 'PER',
1137 p_orig_system_id => l_transmitter_emp_id,
1138 p_name => l_transmitter_emp_name,
1139 p_display_name => l_display_name );
1140
1141 -- =============== START DEBUG LOG ================
1142 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg6',
1143 ' GetUserName --> l_transmitter_emp_name -> ' || l_transmitter_emp_name
1144 ||' l_display_name -> ' || l_display_name );
1145 -- =============== END DEBUG LOG ==================
1146
1147 -- Set the transmitter_emp_name attribute
1148 wf_engine.SetItemAttrText ( itemtype => itemtype,
1149 itemkey => itemkey,
1150 aname => 'TRANSMITTER_EMP_NAME',
1151 avalue => l_transmitter_emp_name);
1152
1153 -- Note: No need to set a display name attribute since workflow 2.6 automatically
1154 -- retrieves the display name for messages
1155
1156 -- =============== START DEBUG LOG ================
1157 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg7',
1158 ' SetItemAttrText TRANSMITTER_EMP_NAME --> ' || l_transmitter_emp_name);
1159 -- =============== END DEBUG LOG ==================
1160
1161 -- TU Transmitter is an employee, so set result to 'Yes'
1162 result := 'COMPLETE:Y';
1163
1164 -- =============== START DEBUG LOG ================
1165 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg8',
1166 ' result --> ' || result);
1167 -- =============== END DEBUG LOG ==================
1168
1169 END IF;
1170
1171 END IF;
1172
1173 IF (funcmode <> 'RUN') THEN
1174 result := 'COMPLETE';
1175 -- =============== START DEBUG LOG ================
1176 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg9',
1177 ' funcmode <> RUN - result --> ' || result);
1178 -- =============== END DEBUG LOG ==================
1179
1180 RETURN;
1181 END IF;
1182
1183 -- =============== START DEBUG LOG ================
1184 DEBUG_LOG_STRING (l_proc_level, 'Is_tu_trans_employee.Msg10',
1185 ' ** END IS_TU_TRANS_EMPLOYEE ** ');
1186 -- =============== END DEBUG LOG ==================
1187
1188 EXCEPTION
1189 WHEN OTHERS THEN
1190 -- =============== START DEBUG LOG ================
1191 DEBUG_LOG_UNEXP_ERROR ('Start_approval_workflow.Unexp1','DEFAULT');
1192 -- =============== END DEBUG LOG ==================
1193
1194 wf_core.context('IGI_EXP_APPROVAL_PKG','is_tu_trans_employee',itemtype,itemkey,
1195 to_char(actid),funcmode);
1196 RAISE;
1197 END is_tu_trans_employee;
1198
1199
1200
1201 -- *************************************************************************
1202 -- EMP_HAS_POSITION
1203 -- *************************************************************************
1204
1205 PROCEDURE emp_has_position ( itemtype IN VARCHAR2,
1206 itemkey IN VARCHAR2,
1207 actid IN NUMBER,
1208 funcmode IN VARCHAR2,
1209 result OUT NOCOPY VARCHAR2) IS
1210
1211 CURSOR c_get_position(p_emp_id per_employees_current_x.employee_id%TYPE)
1212 IS
1213 SELECT hap.position_id,
1214 hap.name,
1215 hap.business_group_id,
1216 hap.organization_id
1217 FROM hr_all_positions_f hap,
1218 per_all_assignments_f paa,
1219 per_employees_current_x pec
1220 WHERE pec.employee_id = p_emp_id
1221 AND NVL(pec.inactive_date,SYSDATE) >= SYSDATE
1222 AND pec.business_group_id = paa.business_group_id
1223 AND pec.assignment_id = paa.assignment_id
1224 AND pec.organization_id = paa.organization_id
1225 AND paa.assignment_type = 'E'
1226 AND paa.effective_start_date <= SYSDATE
1227 AND paa.effective_end_date >= SYSDATE
1228 AND paa.business_group_id = hap.business_group_id
1229 AND paa.position_id IS NOT NULL
1230 AND paa.position_id = hap.position_id
1231 AND paa.organization_id = hap.organization_id
1232 AND hap.date_effective <= SYSDATE
1233 AND NVL(hap.date_end, SYSDATE) >= SYSDATE
1234 AND NVL(UPPER(hap.status), 'VALID') NOT IN ('INVALID');
1235
1236 l_position_id hr_all_positions_f.position_id%TYPE;
1237 l_position_name hr_all_positions_f.name%TYPE;
1238 l_business_group_id hr_all_positions_f.business_group_id%TYPE;
1239 l_organization_id hr_all_positions_f.organization_id%TYPE;
1240 l_transmitter_emp_id per_employees_current_x.employee_id%TYPE;
1241
1242 BEGIN
1243
1244 -- =============== START DEBUG LOG ================
1245 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg1',
1246 ' ** BEGIN EMP_HAS_POSITION ** ');
1247 -- =============== END DEBUG LOG ==================
1248
1249 IF (funcmode = 'RUN') THEN
1250
1251 -- Get the employee id for the TU Transmitter
1252 l_transmitter_emp_id
1253 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
1254 itemkey => itemkey,
1255 aname => 'TRANSMITTER_EMP_ID');
1256
1257 -- =============== START DEBUG LOG ================
1258 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg2',
1259 ' GetItemAttrNumber TRANSMITTER_EMP_ID --> '|| l_transmitter_emp_id);
1260 -- =============== END DEBUG LOG ==================
1261
1262 OPEN c_get_position(l_transmitter_emp_id);
1263 FETCH c_get_position INTO l_position_id
1264 ,l_position_name
1265 ,l_business_group_id
1266 ,l_organization_id;
1267
1268 -- =============== START DEBUG LOG ================
1269 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg3',
1270 ' Getting position : l_position_id --> ' || l_position_id ||
1271 ' l_position_name --> ' || l_position_name ||
1272 ' l_business_group_id --> ' || l_business_group_id ||
1273 ' l_organization_id --> ' || l_organization_id);
1274 -- =============== END DEBUG LOG ==================
1275
1276 IF (c_get_position%NOTFOUND) THEN
1277 -- No rows returned so the employee is not assigned to a position
1278 -- TU Transmitter is an employee, but is not assigned to a position
1279 -- so set result to 'No'
1280 result := 'COMPLETE:N';
1281
1282 -- =============== START DEBUG LOG ================
1283 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg4',
1284 ' result --> ' || result);
1285 -- =============== END DEBUG LOG ==================
1286
1287 ELSE -- TU Transmitter is an employee, and has been assigned a position
1288
1289 -- Set the transmitter_position_id attribute
1290 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1291 itemkey => itemkey,
1292 aname => 'TRANSMITTER_POSITION_ID',
1293 avalue => l_position_id);
1294
1295 -- =============== START DEBUG LOG ================
1296 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg5',
1297 ' SetItemAttrNumber TRANSMITTER_POSITION_ID --> '|| l_position_id);
1298 -- =============== END DEBUG LOG ==================
1299
1300 -- Set the business_group_id attribute
1301 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1302 itemkey => itemkey,
1303 aname => 'BUSINESS_GROUP_ID',
1304 avalue => l_business_group_id);
1305
1306 -- =============== START DEBUG LOG ================
1307 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg6',
1308 ' SetItemAttrNumber BUSINESS_GROUP_ID --> ' ||l_business_group_id );
1309 -- =============== END DEBUG LOG ==================
1310
1311 -- Set the organization_id attribute
1312 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1313 itemkey => itemkey,
1314 aname => 'ORGANIZATION_ID',
1315 avalue => l_organization_id);
1316
1317 -- =============== START DEBUG LOG ================
1318 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg7',
1319 ' SetItemAttrNumber ORGANIZATION_ID --> ' || l_organization_id);
1320 -- =============== END DEBUG LOG ==================
1321
1322 -- Set the current_position_id attribute to the position id of the transmitter
1323 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1324 itemkey => itemkey,
1325 aname => 'CURRENT_POSITION_ID',
1326 avalue => l_position_id);
1327
1328 -- =============== START DEBUG LOG ================
1329 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg8',
1330 ' SetItemAttrNumber CURRENT_POSITION_ID --> '|| l_position_id);
1331 -- =============== END DEBUG LOG ==================
1332
1333 -- Set the current_position_name attribute to the position name of the transmitter
1334 wf_engine.SetItemAttrText ( itemtype => itemtype,
1335 itemkey => itemkey,
1336 aname => 'CURRENT_POSITION_NAME',
1337 avalue => l_position_name);
1338
1339 -- =============== START DEBUG LOG ================
1340 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg9',
1341 ' SetItemAttrText CURRENT_POSITION_NAME --> '||l_position_name );
1342 -- =============== END DEBUG LOG ==================
1343
1344 -- TU Transmitter is an employee, and is assigned to a position
1345 -- so set result to 'Yes'
1346 result := 'COMPLETE:Y';
1347
1348 -- =============== START DEBUG LOG ================
1349 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg10',
1350 ' result --> ' || result);
1351 -- =============== END DEBUG LOG ==================
1352
1353 END IF;
1354
1355 IF (c_get_position%ISOPEN) THEN
1356 close c_get_position;
1357 END IF;
1358
1359 END IF;
1360
1361 IF (funcmode <> 'RUN') THEN
1362 result := 'COMPLETE';
1363 -- =============== START DEBUG LOG ================
1364 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg11',
1365 ' funcmode <> RUN - result --> ' || result);
1366 -- =============== END DEBUG LOG ==================
1367
1368 return;
1369 END IF;
1370
1371 -- =============== START DEBUG LOG ================
1372 DEBUG_LOG_STRING (l_proc_level, 'Emp_has_position.Msg12',
1373 ' ** END EMP_HAS_POSITION ** ');
1374 -- =============== END DEBUG LOG ==================
1375
1376 EXCEPTION
1377 WHEN OTHERS THEN
1378 -- =============== START DEBUG LOG ================
1379 DEBUG_LOG_UNEXP_ERROR ('Emp_has_position.Unexp1','DEFAULT');
1380 -- =============== END DEBUG LOG ==================
1381
1382 wf_core.context('IGI_EXP_APPROVAL_PKG','emp_has_position',itemtype,itemkey,
1383 to_char(actid),funcmode);
1384 RAISE;
1385
1386 END emp_has_position;
1387
1388
1389
1390 -- *************************************************************************
1391 -- POSITION_IN_HIERARCHY
1392 -- *************************************************************************
1393
1394 PROCEDURE position_in_hierarchy( itemtype IN VARCHAR2,
1395 itemkey IN VARCHAR2,
1396 actid IN NUMBER,
1397 funcmode IN VARCHAR2,
1398 result OUT NOCOPY VARCHAR2) IS
1399
1400 l_tu_id igi_exp_tus.tu_id%TYPE;
1401 l_position_id per_all_positions.position_id%TYPE;
1402 l_apprv_profile_id igi_exp_tus.apprv_profile_id%TYPE;
1403 l_pos_hierarchy_id igi_exp_apprv_profiles.pos_hierarchy_id%TYPE;
1404 l_legal_num_pos_id igi_exp_apprv_profiles.legal_num_pos_id%TYPE;
1405 l_final_apprv_pos_id igi_exp_apprv_profiles.final_apprv_pos_id%TYPE;
1406 l_business_group_id hr_all_positions_f.business_group_id%TYPE;
1407 l_pos_structure_version_id per_pos_structure_versions.pos_structure_version_id%TYPE;
1408 l_pos_structure_element_id per_pos_structure_elements.pos_structure_element_id%TYPE;
1409
1410 --
1411 -- Find the current version of the position hierarchy
1412 --
1413 CURSOR c_get_pos_hier_ver(p_hierarchy_id per_pos_structure_versions.position_structure_id%TYPE,
1414 p_business_group_id hr_all_positions_f.business_group_id%TYPE)
1415 IS
1416 SELECT pos_structure_version_id
1417 FROM per_pos_structure_versions
1418 WHERE position_structure_id = p_hierarchy_id
1419 AND sysdate BETWEEN date_from AND NVL(date_to, sysdate)
1420 AND business_group_id = p_business_group_id
1421 AND version_number =
1422 (SELECT MAX(version_number)
1423 FROM per_pos_structure_versions
1424 WHERE position_structure_id = p_hierarchy_id
1425 AND sysdate BETWEEN date_from AND NVL(date_to,sysdate)
1426 AND business_group_id = p_business_group_id);
1427
1428 --
1429 -- Find out NOCOPY if the position exists as a subordinate position in the current
1430 -- version of the position hierarchy
1431 --
1432 CURSOR c_is_pos_subord(p_pos_structure_ver_id per_pos_structure_elements.pos_structure_version_id%TYPE
1433 ,p_business_group_id hr_all_positions_f.business_group_id%TYPE
1434 ,p_position_id per_all_positions.position_id%TYPE)
1435 IS
1436 SELECT pos_structure_element_id
1437 FROM per_pos_structure_elements
1438 WHERE pos_structure_version_id = p_pos_structure_ver_id
1439 AND business_group_id = p_business_group_id
1440 AND subordinate_position_id = p_position_id;
1441
1442 --
1443 -- Find out NOCOPY if the position exists as a parent position in the current
1444 -- version of the position hierarchy
1445 --
1446 CURSOR c_is_pos_parent(p_pos_structure_ver_id per_pos_structure_elements.pos_structure_version_id%TYPE
1447 ,p_business_group_id hr_all_positions_f.business_group_id%TYPE
1448 ,p_position_id per_all_positions.position_id%TYPE)
1449 IS
1450 SELECT pos_structure_element_id
1451 FROM per_pos_structure_elements
1452 WHERE pos_structure_version_id = p_pos_structure_ver_id
1453 AND business_group_id = p_business_group_id
1454 AND parent_position_id = p_position_id;
1455
1456 e_pos_hier_ver_not_found EXCEPTION;
1457
1458 BEGIN
1459
1460 -- =============== START DEBUG LOG ================
1461 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg1',
1462 ' ** BEGIN POSITION_IN_HIERARCHY ** ');
1463 -- =============== END DEBUG LOG ==================
1464
1465 IF (funcmode = 'RUN') THEN
1466
1467 -- =============== START DEBUG LOG ================
1468 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg2',
1469 ' funcmode = RUN ');
1470 -- =============== END DEBUG LOG ==================
1471
1472 -- Need to check that the transmitter's position exists in the position
1473 -- hierarchy attached to the approval profile chosen for the TU.
1474
1475 -- First get the TU id
1476 l_tu_id
1477 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
1478 itemkey => itemkey,
1479 aname => 'TU_ID');
1480
1481 -- =============== START DEBUG LOG ================
1482 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg3',
1483 ' GetItemAttrNumber TU_ID --> '|| l_tu_id);
1484 -- =============== END DEBUG LOG ==================
1485
1486 -- Fetch the position id of the transmitter
1487 l_position_id
1488 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
1489 itemkey => itemkey,
1490 aname => 'TRANSMITTER_POSITION_ID');
1491
1492 -- =============== START DEBUG LOG ================
1493 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg4',
1494 ' GetItemAttrNumber TRANSMITTER_POSITION_ID --> '|| l_position_id);
1495 -- =============== END DEBUG LOG ==================
1496
1497 -- Now get the approval profile id chosen for the TU.
1498 SELECT apprv_profile_id
1499 INTO l_apprv_profile_id
1500 FROM igi_exp_tus
1501 WHERE tu_id = l_tu_id;
1502
1503 -- =============== START DEBUG LOG ================
1504 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg5',
1505 ' l_apprv_profile_id --> ' || l_apprv_profile_id);
1506 -- =============== END DEBUG LOG ==================
1507
1508 -- Fetch the approval profile information
1509 -- i.e. the HR position hierarchy, the legal numbering position
1510 -- and the final approver position
1511 SELECT pos_hierarchy_id
1512 ,legal_num_pos_id
1513 ,final_apprv_pos_id
1514 INTO l_pos_hierarchy_id
1515 ,l_legal_num_pos_id
1516 ,l_final_apprv_pos_id
1517 FROM igi_exp_apprv_profiles
1518 WHERE apprv_profile_id = l_apprv_profile_id;
1519
1520 -- =============== START DEBUG LOG ================
1521 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg6',
1522 ' l_pos_hierarchy_id --> ' || l_pos_hierarchy_id
1523 ||' l_legal_num_pos_id --> ' || l_legal_num_pos_id
1524 ||' l_final_apprv_pos_id --> ' || l_final_apprv_pos_id);
1525 -- =============== END DEBUG LOG ==================
1526
1527 -- Set the corresponding workflow attributes with this information
1528
1529 -- Set the pos_structure_id attribute
1530 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1531 itemkey => itemkey,
1532 aname => 'POS_STRUCTURE_ID',
1533 avalue => l_pos_hierarchy_id);
1534
1535 -- =============== START DEBUG LOG ================
1536 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg7',
1537 ' SetItemAttrNumber POS_STRUCTURE_ID --> '|| l_pos_hierarchy_id);
1538 -- =============== END DEBUG LOG ==================
1539
1540 -- Set the legal_num_pos_id attribute
1541 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1542 itemkey => itemkey,
1543 aname => 'LEGAL_NUM_POS_ID',
1544 avalue => l_legal_num_pos_id);
1545
1546 -- =============== START DEBUG LOG ================
1547 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg8',
1548 ' SetItemAttrNumber LEGAL_NUM_POS_ID --> '|| l_legal_num_pos_id);
1549 -- =============== END DEBUG LOG ==================
1550
1551 -- Set the final_apprv_pos_id attribute
1552 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1553 itemkey => itemkey,
1554 aname => 'FINAL_APPRV_POS_ID',
1555 avalue => l_final_apprv_pos_id);
1556
1557 -- =============== START DEBUG LOG ================
1558 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg9',
1559 'SetItemAttrNumber FINAL_APPRV_POS_ID --> ' || l_final_apprv_pos_id );
1560 -- =============== END DEBUG LOG ==================
1561
1562 -- Now need to find the current version of the position hierarchy.
1563
1564 -- Get the business group id
1565 l_business_group_id
1566 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
1567 itemkey => itemkey,
1568 aname => 'BUSINESS_GROUP_ID');
1569
1570 -- =============== START DEBUG LOG ================
1571 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg10',
1572 ' GetItemAttrNumber BUSINESS_GROUP_ID --> ' ||l_business_group_id );
1573 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg11',
1574 ' calling c_get_pos_hier_ver with '
1575 ||' l_pos_hierarchy_id --> ' || l_pos_hierarchy_id
1576 ||' l_business_group_id --> ' || l_business_group_id);
1577 -- =============== END DEBUG LOG ==================
1578
1579 OPEN c_get_pos_hier_ver(l_pos_hierarchy_id
1580 ,l_business_group_id);
1581 FETCH c_get_pos_hier_ver INTO l_pos_structure_version_id;
1582
1583 -- =============== START DEBUG LOG ================
1584 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg12',
1585 ' l_pos_structure_version_id --> '|| l_pos_structure_version_id);
1586 -- =============== END DEBUG LOG ==================
1587
1588 IF (c_get_pos_hier_ver%NOTFOUND) THEN
1589
1590 -- =============== START DEBUG LOG ================
1591 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg13',
1592 ' c_get_pos_hier_ver%NOTFOUND raise e_pos_hier_ver_not_found ');
1593 -- =============== END DEBUG LOG ==================
1594 RAISE e_pos_hier_ver_not_found;
1595
1596 END IF;
1597
1598 CLOSE c_get_pos_hier_ver;
1599
1600 -- Set the pos_structure_version_id attribute
1601 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1602 itemkey => itemkey,
1603 aname => 'POS_STRUCTURE_VERSION_ID',
1604 avalue => l_pos_structure_version_id);
1605
1606
1607 -- =============== START DEBUG LOG ================
1608 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg14',
1609 ' SetItemAttrNumber POS_STRUCTURE_VERSION_ID --> ' ||l_pos_structure_version_id);
1610 -- =============== END DEBUG LOG ==================
1611
1612 -- Now need to find if the transmitter's position exists in the
1613 -- current version of the hierarchy
1614
1615 -- =============== START DEBUG LOG ================
1616 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg15',
1617 ' calling c_is_pos_subord cursor with '
1618 ||' l_pos_structure_version_id --> ' || l_pos_structure_version_id
1619 ||' l_business_group_id --> ' || l_business_group_id
1620 ||' l_position_id --> ' || l_position_id);
1621 -- =============== END DEBUG LOG ==================
1622
1623 -- Find out NOCOPY if the position is a subordinate position in the current version
1624 OPEN c_is_pos_subord(l_pos_structure_version_id
1625 ,l_business_group_id
1626 ,l_position_id);
1627 FETCH c_is_pos_subord INTO l_pos_structure_element_id;
1628
1629 -- =============== START DEBUG LOG ================
1630 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg16',
1631 ' l_pos_structure_element_id --> ' || l_pos_structure_element_id);
1632 -- =============== END DEBUG LOG ==================
1633
1634 IF (c_is_pos_subord%NOTFOUND) THEN
1635
1636 CLOSE c_is_pos_subord;
1637
1638 -- =============== START DEBUG LOG ================
1639 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg17',
1640 ' c_is_pos_subord%NOTFOUND - TRUE ');
1641 -- =============== END DEBUG LOG ==================
1642
1643 -- It is possible that the transmitter's position is the top position
1644 -- in the HR hierarchy, in which case it would not appear in the
1645 -- subordinate_position_id column.
1646 -- So check if the position appears in the parent_position_id column
1647 -- for the hierarchy
1648
1649 -- =============== START DEBUG LOG ================
1650 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg18',
1651 ' calling c_is_pos_parent cursor with ' ||
1652 ' l_pos_structure_version_id --> ' || l_pos_structure_version_id ||
1653 ' l_business_group_id --> ' || l_business_group_id ||
1654 ' l_position_id --> ' || l_position_id);
1655 -- =============== END DEBUG LOG ==================
1656
1657 OPEN c_is_pos_parent(l_pos_structure_version_id
1658 ,l_business_group_id
1659 ,l_position_id);
1660 FETCH c_is_pos_parent INTO l_pos_structure_element_id;
1661
1662 -- =============== START DEBUG LOG ================
1663 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg19',
1664 ' l_pos_structure_element_id --> ' || l_pos_structure_element_id);
1665 -- =============== END DEBUG LOG ==================
1666
1667 IF (c_is_pos_parent%NOTFOUND) THEN
1668 CLOSE c_is_pos_parent;
1669
1670 -- The position does not exist in the hierarchy.
1671 -- So set result to 'No' and exit
1672 --
1673 result := 'COMPLETE:N';
1674
1675 -- =============== START DEBUG LOG ================
1676 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg20',
1677 ' c_is_pos_parent%NOTFOUND - result --> ' || result);
1678 -- =============== END DEBUG LOG ==================
1679
1680 return;
1681 END IF;
1682 CLOSE c_is_pos_parent;
1683
1684 -- The position is the top position in the hierarchy
1685 -- so continue
1686
1687 ELSE
1688
1689 -- =============== START DEBUG LOG ================
1690 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg21',
1691 ' In the else part, CLOSE c_is_pos_subord ');
1692 -- =============== END DEBUG LOG ==================
1693
1694 CLOSE c_is_pos_subord;
1695
1696 END IF;
1697
1698 -- The position exists in the hierarchy.
1699 -- Set the pos_structure_element_id for reference purposes.
1700
1701 -- Set the pos_structure_element_id attribute
1702 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1703 itemkey => itemkey,
1704 aname => 'POS_STRUCTURE_ELEMENT_ID',
1705 avalue => l_pos_structure_element_id);
1706
1707 -- =============== START DEBUG LOG ================
1708 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg22',
1709 ' SetItemAttrNumber POS_STRUCTURE_ELEMENT_ID --> ' || l_pos_structure_element_id);
1710 -- =============== END DEBUG LOG ==================
1711
1712 -- Set result to 'Yes'
1713 result := 'COMPLETE:Y';
1714
1715 -- =============== START DEBUG LOG ================
1716 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg23',
1717 ' result --> '|| result);
1718 -- =============== END DEBUG LOG ==================
1719
1720 END IF;
1721
1722 IF (funcmode <> 'RUN') THEN
1723 result := 'COMPLETE';
1724 -- =============== START DEBUG LOG ================
1725 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg24',
1726 ' funcmode <> RUN - result --> '|| result);
1727 -- =============== END DEBUG LOG ==================
1728 return;
1729 END IF;
1730
1731 -- =============== START DEBUG LOG ================
1732 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg25',
1733 ' ** END POSITION_IN_HIERARCHY ** ');
1734 -- =============== END DEBUG LOG ==================
1735
1736 EXCEPTION
1737 WHEN e_pos_hier_ver_not_found THEN
1738 -- =============== START DEBUG LOG ================
1739 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg26',
1740 ' Inside Exception e_pos_hier_ver_not_found ');
1741 -- =============== END DEBUG LOG ==================
1742 wf_core.context('IGI_EXP_APPROVAL_PKG','position_in_hierarchy',itemtype,itemkey,
1743 to_char(actid),funcmode,'Position hierarchy version not found');
1744 IF (c_get_pos_hier_ver%ISOPEN) THEN
1745 CLOSE c_get_pos_hier_ver;
1746 END IF;
1747 raise;
1748
1749 WHEN OTHERS THEN
1750 -- =============== START DEBUG LOG ================
1751 DEBUG_LOG_UNEXP_ERROR ('Position_in_hierarchy.Unexp1','DEFAULT');
1752 -- =============== END DEBUG LOG ==================
1753 wf_core.context('IGI_EXP_APPROVAL_PKG','position_in_hierarchy',itemtype,itemkey,
1754 to_char(actid),funcmode);
1755 raise;
1756
1757 END position_in_hierarchy;
1758
1759
1760 -- *************************************************************************
1761 -- IS_POSITION_GT_FINAL_POS
1762 -- *************************************************************************
1763
1764 PROCEDURE is_position_gt_final_pos ( itemtype IN VARCHAR2,
1765 itemkey IN VARCHAR2,
1766 actid IN NUMBER,
1767 funcmode IN VARCHAR2,
1768 result OUT NOCOPY VARCHAR2) IS
1769
1770 CURSOR c_get_parent_position(p_position_id per_all_positions.position_id%TYPE
1771 ,p_pos_structure_version_id per_pos_structure_versions.pos_structure_version_id%TYPE
1772 ,p_business_group_id hr_all_positions_f.business_group_id%TYPE)
1773 IS
1774 SELECT parent_position_id
1775 FROM per_pos_structure_elements
1776 WHERE pos_structure_version_id = p_pos_structure_version_id
1777 AND business_group_id = p_business_group_id
1778 AND subordinate_position_id = p_position_id;
1779
1780 l_position_id per_all_positions.position_id%TYPE;
1781 l_transmitter_position_id per_all_positions.position_id%TYPE;
1782 l_parent_pos_id per_all_positions.position_id%TYPE;
1783 l_final_apprv_pos_id igi_exp_apprv_profiles.final_apprv_pos_id%TYPE;
1784 l_business_group_id hr_all_positions_f.business_group_id%TYPE;
1785 l_pos_structure_version_id per_pos_structure_versions.pos_structure_version_id%TYPE;
1786 l_final_apprv_found VARCHAR2(1) := 'N';
1787
1788 BEGIN
1789
1790 -- =============== START DEBUG LOG ================
1791 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg1',
1792 ' ** BEGIN IS_POSITION_GT_FINAL_POS ** ');
1793 -- =============== END DEBUG LOG ==================
1794
1795 IF (funcmode = 'RUN') THEN
1796
1797
1798 -- =============== START DEBUG LOG ================
1799 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg2',
1800 ' funcmode = RUN ');
1801 -- =============== END DEBUG LOG ==================
1802
1803 -- Want to find out NOCOPY if the TU transmitter's position is higher in the
1804 -- hierarchy than the final approver position set up for the approval
1805 -- profile. If this is the case, we should exit out NOCOPY of the approval workflow
1806 -- If the TU transmitter's position IS the final position
1807 -- it is ok to continue with the workflow approval.
1808
1809 -- Get the values of the attributes needed:
1810 -- Position structure version, transmitter's position, final approver position
1811 -- and business group.
1812
1813 l_pos_structure_version_id
1814 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
1815 itemkey => itemkey,
1816 aname => 'POS_STRUCTURE_VERSION_ID');
1817
1818 -- =============== START DEBUG LOG ================
1819 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg3',
1820 ' ** BEGIN IS_POSITION_GT_FINAL_POS ** ');
1821 -- =============== END DEBUG LOG ==================
1822
1823 l_business_group_id
1824 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
1825 itemkey => itemkey,
1826 aname => 'BUSINESS_GROUP_ID');
1827
1828 -- =============== START DEBUG LOG ================
1829 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg4',
1830 ' GetItemAttrNumber BUSINESS_GROUP_ID --> '|| l_business_group_id);
1831 -- =============== END DEBUG LOG ==================
1832
1833 l_transmitter_position_id
1834 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
1835 itemkey => itemkey,
1836 aname => 'TRANSMITTER_POSITION_ID');
1837
1838 -- =============== START DEBUG LOG ================
1839 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg5',
1840 ' GetItemAttrNumber TRANSMITTER_POSITION_ID --> ' || l_transmitter_position_id);
1841 -- =============== END DEBUG LOG ==================
1842
1843 l_final_apprv_pos_id
1844 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
1845 itemkey => itemkey,
1846 aname => 'FINAL_APPRV_POS_ID');
1847
1848 -- =============== START DEBUG LOG ================
1849 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg6',
1850 ' GetItemAttrNumber FINAL_APPRV_POS_ID --> ' || l_final_apprv_pos_id);
1851 -- =============== END DEBUG LOG ==================
1852
1853 -- Starting from the transmitter's position, loop through the hierarchy
1854 -- until either the final approver position (as defined in the EXP approval
1855 -- profile) is found or the top position in the hierarchy is reached.
1856
1857 -- Check if the transmitter's position IS the final approver position first
1858 IF (l_transmitter_position_id = l_final_apprv_pos_id) THEN
1859
1860 l_final_apprv_found := 'Y';
1861
1862 -- =============== START DEBUG LOG ================
1863 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg7',
1864 ' l_transmitter_position_id = l_final_apprv_pos_id ');
1865 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg8',
1866 ' l_final_apprv_found --> ' || l_final_apprv_found);
1867 -- =============== END DEBUG LOG ==================
1868
1869 ELSE
1870
1871 -- Set the initial value of position_id to the transmitter's position
1872 l_position_id := l_transmitter_position_id;
1873
1874 -- =============== START DEBUG LOG ================
1875 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg9',
1876 ' l_position_id --> ' || l_position_id);
1877 -- =============== END DEBUG LOG ==================
1878
1879 LOOP
1880
1881 -- =============== START DEBUG LOG ================
1882 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg10',
1883 ' Cursor c_get_parent_position with ' ||
1884 ' l_position_id --> ' || l_position_id ||
1885 ' l_pos_structure_version_id -> ' || l_pos_structure_version_id ||
1886 ' l_business_group_id --> ' || l_business_group_id);
1887 -- =============== END DEBUG LOG ==================
1888
1889 OPEN c_get_parent_position(l_position_id
1890 ,l_pos_structure_version_id
1891 ,l_business_group_id);
1892
1893 FETCH c_get_parent_position INTO l_parent_pos_id;
1894
1895 -- =============== START DEBUG LOG ================
1896 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg11',
1897 ' l_parent_pos_id --> ' || l_parent_pos_id);
1898 -- =============== END DEBUG LOG ==================
1899
1900 EXIT WHEN c_get_parent_position%NOTFOUND;
1901 CLOSE c_get_parent_position;
1902
1903 IF (l_parent_pos_id = l_final_apprv_pos_id) THEN
1904
1905 -- =============== START DEBUG LOG ================
1906 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg12',
1907 ' l_parent_pos_id = l_final_apprv_pos_id ');
1908 -- =============== END DEBUG LOG ==================
1909
1910 l_final_apprv_found := 'Y';
1911 -- =============== START DEBUG LOG ================
1912 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg13',
1913 ' l_final_apprv_found --> ' || l_final_apprv_found);
1914 -- =============== END DEBUG LOG ==================
1915
1916 EXIT;
1917
1918 ELSE -- parent position is not final approver position
1919
1920 -- set the new position to the parent position for next iteration in loop
1921 l_position_id := l_parent_pos_id;
1922
1923 -- =============== START DEBUG LOG ================
1924 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg14',
1925 ' l_position_id --> ' || l_position_id);
1926 -- =============== END DEBUG LOG ==================
1927
1928 END IF;
1929
1930 END LOOP;
1931
1932 IF (c_get_parent_position%ISOPEN) THEN
1933 CLOSE c_get_parent_position;
1934 END IF;
1935
1936 END IF; -- End check for transmitter's position = final approver position
1937
1938 IF (l_final_apprv_found = 'Y') THEN
1939
1940 -- The transmitter's position is NOT higher than the final approver position
1941 -- So set result to 'No'
1942 result := 'COMPLETE:N';
1943
1944 -- =============== START DEBUG LOG ================
1945 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg15',
1946 ' l_final_apprv_found = Y -- result --> ' || result);
1947 -- =============== END DEBUG LOG ==================
1948
1949 ELSE -- (l_final_apprv_found = ='N')
1950
1951 -- The transmitter's position IS higher than the final approver position
1952 -- So set result to 'Yes'
1953 result := 'COMPLETE:Y';
1954
1955 -- =============== START DEBUG LOG ================
1956 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg16',
1957 ' l_final_apprv_found != Y -- result --> ' || result);
1958 -- =============== END DEBUG LOG ==================
1959
1960 END IF;
1961
1962 END IF;
1963
1964 IF (funcmode <> 'RUN') THEN
1965 result := 'COMPLETE';
1966 -- =============== START DEBUG LOG ================
1967 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg17',
1968 ' funcmode <> RUN -- result --> ' || result);
1969 -- =============== END DEBUG LOG ==================
1970 return;
1971 END IF;
1972
1973 -- =============== START DEBUG LOG ================
1974 DEBUG_LOG_STRING (l_proc_level, 'Is_position_gt_final_pos.Msg18',
1975 ' ** END IS_POSITION_GT_FINAL_POS ** ');
1976 -- =============== END DEBUG LOG ==================
1977
1978 EXCEPTION
1979 WHEN OTHERS THEN
1980 -- =============== START DEBUG LOG ================
1981 DEBUG_LOG_UNEXP_ERROR ('Is_position_gt_final_pos.Unexp1','DEFAULT');
1982 -- =============== END DEBUG LOG ==================
1983 wf_core.context('IGI_EXP_APPROVAL_PKG','is_position_gt_final_pos',itemtype,itemkey,
1984 to_char(actid),funcmode);
1985 raise;
1986 END is_position_gt_final_pos;
1987
1988 -- *************************************************************************
1989 -- UPDATE_TU_STATUS_TO_AVL
1990 -- *************************************************************************
1991
1992 PROCEDURE update_tu_status_to_avl ( itemtype IN VARCHAR2,
1993 itemkey IN VARCHAR2,
1994 actid IN NUMBER,
1995 funcmode IN VARCHAR2,
1996 result OUT NOCOPY VARCHAR2) IS
1997
1998 l_tu_id NUMBER;
1999
2000 BEGIN
2001
2002 -- =============== START DEBUG LOG ================
2003 DEBUG_LOG_STRING (l_proc_level, 'Update_tu_status_to_avl.Msg1',
2004 ' ** BEGIN UPDATE_TU_STATUS_TO_AVL ** ');
2005 -- =============== END DEBUG LOG ==================
2006
2007 IF (funcmode = 'RUN') THEN
2008
2009 -- =============== START DEBUG LOG ================
2010 DEBUG_LOG_STRING (l_proc_level, 'Update_tu_status_to_avl.Msg2',
2011 ' funcmode = RUN ');
2012 -- =============== END DEBUG LOG ==================
2013
2014 -- The initial validation failed for the TU transmitter
2015 -- so set the status of the TU back to 'Available' before
2016 -- exiting from workflow so the TU can be modified
2017 -- (e.g. by changing the TU approval profile used) and
2018 -- transmitted again.
2019
2020 -- Get the tu id
2021 l_tu_id
2022 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2023 itemkey => itemkey,
2024 aname => 'TU_ID');
2025
2026 -- =============== START DEBUG LOG ================
2027 DEBUG_LOG_STRING (l_proc_level, 'Update_tu_status_to_avl.Msg3',
2028 ' GetItemAttrNumber TU_ID --> '|| l_tu_id);
2029 -- =============== END DEBUG LOG ==================
2030
2031 -- Update the status of the TU to 'AVL' for 'Available'
2032 UPDATE igi_exp_tus tus
2033 SET tus.tu_status = 'AVL'
2034 WHERE tus.tu_id = l_tu_id;
2035
2036 -- =============== START DEBUG LOG ================
2037 DEBUG_LOG_STRING (l_proc_level, 'Update_tu_status_to_avl.Msg4',
2038 ' UPDATE igi_exp_tus tu_status = AVL ');
2039 -- =============== END DEBUG LOG ==================
2040
2041 END IF;
2042
2043 IF (funcmode <> 'RUN') THEN
2044 result := 'COMPLETE';
2045 -- =============== START DEBUG LOG ================
2046 DEBUG_LOG_STRING (l_proc_level, 'Update_tu_status_to_avl.Msg5',
2047 ' funcmode = RUN -- result --> ' || result);
2048 -- =============== END DEBUG LOG ==================
2049 return;
2050 END IF;
2051
2052 -- =============== START DEBUG LOG ================
2053 DEBUG_LOG_STRING (l_proc_level, 'Update_tu_status_to_avl.Msg6',
2054 ' ** END UPDATE_TU_STATUS_TO_AVL ** ');
2055 -- =============== END DEBUG LOG ==================
2056
2057 EXCEPTION
2058 WHEN OTHERS THEN
2059 -- =============== START DEBUG LOG ================
2060 DEBUG_LOG_UNEXP_ERROR ('Update_tu_status_to_avl.Unexp1','DEFAULT');
2061 -- =============== END DEBUG LOG ==================
2062 wf_core.context('IGI_EXP_APPROVAL_PKG','update_tu_status_to_avl',itemtype,itemkey,
2063 to_char(actid),funcmode);
2064 raise;
2065 END update_tu_status_to_avl;
2066
2067
2068
2069 -- *************************************************************************
2070 -- UPDATE_DUS_TO_IN_A_TU
2071 -- *************************************************************************
2072
2073 PROCEDURE update_dus_to_in_a_tu ( itemtype IN VARCHAR2,
2074 itemkey IN VARCHAR2,
2075 actid IN NUMBER,
2076 funcmode IN VARCHAR2,
2077 result OUT NOCOPY VARCHAR2) IS
2078
2079 l_tu_id igi_exp_dus.tu_id%TYPE;
2080
2081 BEGIN
2082
2083 -- =============== START DEBUG LOG ================
2084 DEBUG_LOG_STRING (l_proc_level, 'Update_dus_to_in_a_tu.Msg1',
2085 ' ** BEGIN UPDATE_DUS_TO_IN_A_TU ** ');
2086 -- =============== END DEBUG LOG ==================
2087
2088 IF (funcmode = 'RUN') THEN
2089
2090 -- =============== START DEBUG LOG ================
2091 DEBUG_LOG_STRING (l_proc_level, 'Update_dus_to_in_a_tu.Msg2',
2092 ' funcmode = RUN ');
2093 -- =============== END DEBUG LOG ==================
2094
2095 -- The initial validation failed for the TU transmitter
2096 -- So the status of the TU was set back to 'Available'
2097 -- and the status of the DUs must be set back
2098 -- to 'In a Transmission Unit' before
2099 -- exiting from workflow so the TU can be modified
2100 -- (e.g. by changing the TU approval profile used) and
2101 -- transmitted again.
2102
2103 -- Get the tu id
2104 l_tu_id
2105 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2106 itemkey => itemkey,
2107 aname => 'TU_ID');
2108
2109 -- =============== START DEBUG LOG ================
2110 DEBUG_LOG_STRING (l_proc_level, 'Update_dus_to_in_a_tu.Msg3',
2111 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
2112 -- =============== END DEBUG LOG ==================
2113
2114 -- Update the status of the DUs in the TU
2115 -- to 'ITU' for 'In a Transmission Unit'
2116
2117 UPDATE igi_exp_dus dus
2118 SET dus.du_status = 'ITU'
2119 WHERE dus.tu_id = l_tu_id;
2120
2121 -- =============== START DEBUG LOG ================
2122 DEBUG_LOG_STRING (l_proc_level, 'Update_dus_to_in_a_tu.Msg4',
2123 ' UPDATE igi_exp_dus du_status = ITU ');
2124 -- =============== END DEBUG LOG ==================
2125
2126 END IF;
2127
2128 IF (funcmode <> 'RUN') THEN
2129 result := 'COMPLETE';
2130 -- =============== START DEBUG LOG ================
2131 DEBUG_LOG_STRING (l_proc_level, 'Update_dus_to_in_a_tu.Msg5',
2132 ' funcmode = RUN -- result --> ' || result);
2133 -- =============== END DEBUG LOG ==================
2134 return;
2135 END IF;
2136
2137 -- =============== START DEBUG LOG ================
2138 DEBUG_LOG_STRING (l_proc_level, 'Update_dus_to_in_a_tu.Msg6',
2139 ' ** END UPDATE_DUS_TO_IN_A_TU ** ');
2140 -- =============== END DEBUG LOG ==================
2141
2142 EXCEPTION
2143 WHEN OTHERS THEN
2144 -- =============== START DEBUG LOG ================
2145 DEBUG_LOG_UNEXP_ERROR ('Update_tu_status_to_avl.Unexp1','DEFAULT');
2146 -- =============== END DEBUG LOG ==================
2147 wf_core.context('IGI_EXP_APPROVAL_PKG','update_dus_to_in_a_tu',itemtype,itemkey,
2148 to_char(actid),funcmode);
2149 raise;
2150 END update_dus_to_in_a_tu;
2151
2152
2153 -- *************************************************************************
2154 -- BUILD_USER_LIST
2155 -- *************************************************************************
2156
2157 PROCEDURE build_user_list ( itemtype IN VARCHAR2,
2158 itemkey IN VARCHAR2,
2159 actid IN NUMBER,
2160 funcmode IN VARCHAR2,
2161 result OUT NOCOPY VARCHAR2) IS
2162
2163 l_user_count NUMBER:= 0;
2164 l_user_list VARCHAR2(1000);
2165 l_user_name fnd_user.user_name%TYPE;
2166 l_user_id fnd_user.user_id%TYPE;
2167 l_tu_id igi_exp_tus.tu_id%TYPE;
2168 l_current_position_id per_all_positions.position_id%TYPE;
2169 l_business_group_id hr_all_positions_f.business_group_id%TYPE;
2170 l_organization_id hr_all_positions_f.organization_id%TYPE;
2171
2172 CURSOR c_user_list(p_position_id hr_all_positions_f.position_id%TYPE
2173 ,p_business_group_id hr_all_positions_f.business_group_id%TYPE
2174 ,p_organization_id hr_all_positions_f.organization_id%TYPE)
2175 IS
2176 SELECT fu.user_name
2177 FROM hr_all_positions_f hap,
2178 per_all_assignments_f paa,
2179 per_employees_current_x pec,
2180 fnd_user fu
2181 WHERE fu.start_date <= SYSDATE
2182 AND NVL(fu.end_date,SYSDATE) >= SYSDATE
2183 AND fu.employee_id IS NOT NULL
2184 AND fu.employee_id = pec.employee_id
2185 AND NVL(pec.inactive_date,SYSDATE) >= SYSDATE
2186 AND pec.business_group_id = paa.business_group_id
2187 AND pec.assignment_id = paa.assignment_id
2188 AND pec.organization_id = paa.organization_id
2189 AND pec.business_group_id = p_business_group_id
2190 AND pec.organization_id = p_organization_id
2191 AND paa.assignment_type = 'E'
2192 AND paa.effective_start_date <= SYSDATE
2193 AND paa.effective_end_date >= SYSDATE
2194 AND paa.business_group_id = hap.business_group_id
2195 AND paa.position_id IS NOT NULL
2196 AND paa.position_id = hap.position_id
2197 AND paa.organization_id = hap.organization_id
2198 AND hap.date_effective <= SYSDATE
2199 AND NVL(hap.date_end, SYSDATE) >= SYSDATE
2200 AND NVL(UPPER(hap.status), 'VALID') NOT IN ('INVALID')
2201 AND hap.position_id = p_position_id;
2202
2203
2204
2205 BEGIN
2206
2207 -- =============== START DEBUG LOG ================
2208 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg1',
2209 ' ** BEGIN BUILD_USER_LIST ** ');
2210 -- =============== END DEBUG LOG ==================
2211
2212 IF (funcmode = 'RUN') THEN
2213
2214 -- =============== START DEBUG LOG ================
2215 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg2',
2216 ' funcmode = RUN ');
2217 -- =============== END DEBUG LOG ==================
2218
2219 -- Get the current position id
2220 l_current_position_id
2221 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2222 itemkey => itemkey,
2223 aname => 'CURRENT_POSITION_ID');
2224
2225 -- =============== START DEBUG LOG ================
2226 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg3',
2227 ' GetItemAttrNumber CURRENT_POSITION_ID --> ' || l_current_position_id);
2228 -- =============== END DEBUG LOG ==================
2229
2230 -- Get the business group id
2231 l_business_group_id
2232 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2233 itemkey => itemkey,
2234 aname => 'BUSINESS_GROUP_ID');
2235
2236 -- =============== START DEBUG LOG ================
2237 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg4',
2238 ' GetItemAttrNumber BUSINESS_GROUP_ID --> ' || l_business_group_id);
2239 -- =============== END DEBUG LOG ==================
2240
2241 -- Get the organization id
2242 l_organization_id
2243 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2244 itemkey => itemkey,
2245 aname => 'ORGANIZATION_ID');
2246
2247 -- =============== START DEBUG LOG ================
2248 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg5',
2249 ' GetItemAttrNumber ORGANIZATION_ID --> ' || l_organization_id );
2250 -- =============== END DEBUG LOG ==================
2251
2252 OPEN c_user_list(l_current_position_id
2253 ,l_business_group_id
2254 ,l_organization_id);
2255
2256 -- =============== START DEBUG LOG ================
2257 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg6',
2258 ' opening cursor c_user_list with '
2259 || ' l_current_position_id --> ' || l_current_position_id
2260 || ' l_business_group_id --> ' || l_business_group_id
2261 || ' l_organization_id --> ' || l_organization_id);
2262 -- =============== END DEBUG LOG ==================
2263
2264 -- For each user assigned to the current position, fetch the user name
2265 -- and add to user list
2266 LOOP
2267 FETCH c_user_list INTO l_user_name;
2268
2269 -- =============== START DEBUG LOG ================
2270 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg7',
2271 ' l_user_name --> ' || l_user_name);
2272 -- =============== END DEBUG LOG ==================
2273
2274 EXIT WHEN c_user_list%NOTFOUND;
2275 l_user_count := l_user_count + 1;
2276 l_user_list := l_user_list||fnd_global.local_chr(10)||l_user_name;
2277
2278 -- =============== START DEBUG LOG ================
2279 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg8',
2280 ' l_user_count --> ' || l_user_count);
2281 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg9',
2282 ' l_user_list --> ' || l_user_list);
2283 -- =============== END DEBUG LOG ==================
2284
2285 END LOOP;
2286 CLOSE c_user_list;
2287
2288 IF (l_user_count = 0) THEN
2289 result := 'COMPLETE:NO_USERS';
2290 -- =============== START DEBUG LOG ================
2291 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg10',
2292 ' l_user_count = 0 -- result --> ' || result);
2293 -- =============== END DEBUG LOG ==================
2294 return;
2295 ELSIF (l_user_count = 1) THEN
2296
2297 -- =============== START DEBUG LOG ================
2298 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg11',
2299 ' l_user_count = 1 ');
2300 -- =============== END DEBUG LOG ==================
2301
2302 -- Set the current_authoriser_role attribute to the user
2303 -- at the current position
2304 wf_engine.SetItemAttrText ( itemtype => itemtype,
2305 itemkey => itemkey,
2306 aname => 'CURRENT_AUTHORIZER_ROLE',
2307 avalue => l_user_name);
2308
2309
2310 -- =============== START DEBUG LOG ================
2311 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg12',
2312 ' SetItemAttrText CURRENT_AUTHORIZER_ROLE --> ' || l_user_name);
2313 -- =============== END DEBUG LOG ==================
2314
2315 -- Need to update the TU table with the next authorizer of the TU
2316 -- So firstly get the user_id of the current authorizer
2317 SELECT user_id
2318 INTO l_user_id
2319 FROM fnd_user
2320 WHERE user_name = l_user_name;
2321
2322
2323 -- =============== START DEBUG LOG ================
2324 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg13',
2325 ' l_user_id --> ' || l_user_id);
2326 -- =============== END DEBUG LOG ==================
2327
2328 -- Now get the TU id
2329 l_tu_id
2330 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2331 itemkey => itemkey,
2332 aname => 'TU_ID');
2333
2334
2335 -- =============== START DEBUG LOG ================
2336 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg14',
2337 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
2338 -- =============== END DEBUG LOG ==================
2339
2340 -- Update the TU table with the next authorizer
2341 UPDATE igi_exp_tus
2342 SET next_approver_user_id = l_user_id
2343 WHERE tu_id = l_tu_id;
2344
2345
2346 -- =============== START DEBUG LOG ================
2347 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg15',
2348 ' UPDATE igi_exp_tus set next_approver_user_id --> '|| l_user_id);
2349 -- =============== END DEBUG LOG ==================
2350
2351 result := 'COMPLETE:ONE_USER';
2352
2353
2354 -- =============== START DEBUG LOG ================
2355 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg16',
2356 ' result --> ' || result);
2357 -- =============== END DEBUG LOG ==================
2358
2359 return;
2360
2361 ELSE -- multiple users were found for the current position
2362
2363 -- Set the user_list attribute to the list of users found
2364 wf_engine.SetItemAttrText ( itemtype => itemtype,
2365 itemkey => itemkey,
2366 aname => 'USER_LIST',
2367 avalue => l_user_list);
2368
2369
2370 -- =============== START DEBUG LOG ================
2371 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg17',
2372 ' SetItemAttrText USER_LIST --> ' || l_user_list);
2373 -- =============== END DEBUG LOG ==================
2374
2375 -- Clear the picked authorizer attribute for the notification
2376 wf_engine.SetItemAttrText ( itemtype => itemtype,
2377 itemkey => itemkey,
2378 aname => 'PICKED_AUTHORIZER',
2379 avalue => null);
2380
2381
2382 -- =============== START DEBUG LOG ================
2383 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg18',
2384 ' SetItemAttrText PICKED_AUTHORIZER --> null ');
2385 -- =============== END DEBUG LOG ==================
2386
2387 result := 'COMPLETE:MULTIPLE_USERS';
2388
2389 -- =============== START DEBUG LOG ================
2390 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg19',
2391 ' result --> ' || result);
2392 -- =============== END DEBUG LOG ==================
2393
2394 return;
2395 END IF;
2396
2397 END IF;
2398
2399 IF (funcmode <> 'RUN') THEN
2400 result := 'COMPLETE';
2401 -- =============== START DEBUG LOG ================
2402 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg20',
2403 ' funcmode <> RUN -- result --> ' || result);
2404 -- =============== END DEBUG LOG ==================
2405 return;
2406 END IF;
2407
2408 -- =============== START DEBUG LOG ================
2409 DEBUG_LOG_STRING (l_proc_level, 'Build_user_list.Msg21',
2410 ' ** END BUILD_USER_LIST ** ');
2411 -- =============== END DEBUG LOG ==================
2412
2413 EXCEPTION
2414 WHEN OTHERS THEN
2415 -- =============== START DEBUG LOG ================
2416 DEBUG_LOG_UNEXP_ERROR ('Build_user_list.Unexp1','DEFAULT');
2417 -- =============== END DEBUG LOG ==================
2418 wf_core.context('IGI_EXP_APPROVAL_PKG','build_user_list',itemtype,itemkey,
2419 to_char(actid),funcmode);
2420 raise;
2421 END build_user_list;
2422
2423
2424
2425 -- *************************************************************************
2426 -- CHECK_USER_POSITION
2427 -- *************************************************************************
2428
2429 PROCEDURE check_user_position ( itemtype IN VARCHAR2,
2430 itemkey IN VARCHAR2,
2431 actid IN NUMBER,
2432 funcmode IN VARCHAR2,
2433 result OUT NOCOPY VARCHAR2) IS
2434
2435 l_nid NUMBER; -- notification id
2436 l_user_or_pos VARCHAR2(30);
2437 l_picked_authorizer VARCHAR2(240);
2438 l_current_position_id per_all_positions.position_id%TYPE;
2439 l_role_name VARCHAR2(240);
2440
2441 e_wrong_user EXCEPTION;
2442
2443
2444 BEGIN
2445
2446 -- =============== START DEBUG LOG ================
2447 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg1',
2448 ' ** BEGIN CHECK_USER_POSITION ** ');
2449 -- =============== END DEBUG LOG ==================
2450
2451 IF (funcmode = 'RUN') THEN
2452 -- Do not do anything when called in 'RUN' mode
2453 null;
2454 END IF;
2455
2456 IF (funcmode = 'RESPOND') THEN
2457
2458 -- =============== START DEBUG LOG ================
2459 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg2',
2460 ' funcmode = RESPOND ');
2461 -- =============== END DEBUG LOG ==================
2462
2463 l_nid := wf_engine.context_nid;
2464
2465 -- =============== START DEBUG LOG ================
2466 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg3',
2467 ' l_nid --> ' || l_nid);
2468 -- =============== END DEBUG LOG ==================
2469
2470 l_user_or_pos := wf_notification.GetAttrText(l_nid,'RESULT');
2471
2472 -- =============== START DEBUG LOG ================
2473 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg4',
2474 ' l_user_or_pos --> ' || l_user_or_pos);
2475 -- =============== END DEBUG LOG ==================
2476
2477 IF (l_user_or_pos = 'USER') THEN
2478
2479 -- =============== START DEBUG LOG ================
2480 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg5',
2481 ' l_user_or_pos = USER ');
2482 -- =============== END DEBUG LOG ==================
2483
2484 -- The notification responder chose to send approval request to chosen user
2485 l_picked_authorizer := wf_notification.GetAttrText(l_nid,'PICKED_AUTHORIZER');
2486
2487 -- =============== START DEBUG LOG ================
2488 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg6',
2489 ' GetAttrText PICKED_AUTHORIZER --> ' || l_picked_authorizer);
2490 -- =============== END DEBUG LOG ==================
2491
2492 -- Get the current position id
2493 l_current_position_id
2494 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2495 itemkey => itemkey,
2496 aname => 'CURRENT_POSITION_ID');
2497
2498 -- =============== START DEBUG LOG ================
2499 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg7',
2500 ' GetItemAttrNumber CURRENT_POSITION_ID --> ' ||l_current_position_id );
2501 -- =============== END DEBUG LOG ==================
2502
2503 -- Set the role name
2504 l_role_name := 'POS:'||to_char(l_current_position_id);
2505
2506 -- =============== START DEBUG LOG ================
2507 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg8',
2508 ' l_role_name --> ' || l_role_name);
2509 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg9',
2510 ' Calling wf_directory.IsPerformer with '
2511 ||' l_picked_authorizer --> ' || l_picked_authorizer
2512 ||' l_role_name --> ' || l_role_name);
2513 -- =============== END DEBUG LOG ==================
2514
2515 -- Check that the chosen authorizer is assigned to the current position
2516 IF (wf_directory.IsPerformer(l_picked_authorizer,l_role_name)) THEN
2517 result := 'COMPLETE:USER';
2518 -- =============== START DEBUG LOG ================
2519 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg10',
2520 ' wf_directory.IsPerformer --> TRUE - result -> ' || result);
2521 -- =============== END DEBUG LOG ==================
2522 return;
2523 ELSE
2524 -- =============== START DEBUG LOG ================
2525 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg11',
2526 ' wf_directory.IsPerformer --> FALSE - Raise e_wrong_user');
2527 -- =============== END DEBUG LOG ==================
2528 -- Chosen authorizer is not assigned to current position so raise error
2529 RAISE e_wrong_user;
2530 END IF;
2531
2532 ELSE
2533 result := 'COMPLETE:POS';
2534 -- =============== START DEBUG LOG ================
2535 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg12',
2536 ' result --> ' || result);
2537 -- =============== END DEBUG LOG ==================
2538 return;
2539 END IF;
2540
2541 END IF;
2542
2543 -- =============== START DEBUG LOG ================
2544 DEBUG_LOG_STRING (l_proc_level, 'Check_user_position.Msg13',
2545 ' ** END CHECK_USER_POSITION ** ');
2546 -- =============== END DEBUG LOG ==================
2547
2548 EXCEPTION
2549 WHEN e_wrong_user THEN
2550 fnd_message.set_name('IGI','IGI_EXP_INVALID_AUTHORIZER');
2551 -- =============== START DEBUG LOG ================
2552 DEBUG_LOG_UNEXP_ERROR ('Check_user_position.Unexp1','USER');
2553 -- =============== END DEBUG LOG ==================
2554 app_exception.raise_exception;
2555 WHEN OTHERS THEN
2556 -- =============== START DEBUG LOG ================
2557 DEBUG_LOG_UNEXP_ERROR ('Check_user_position.Unexp2','DEFAULT');
2558 -- =============== END DEBUG LOG ==================
2559 wf_core.context('IGI_EXP_APPROVAL_PKG','check_user_position',itemtype,itemkey,
2560 to_char(actid),funcmode);
2561 raise;
2562 END check_user_position;
2563
2564
2565 -- *************************************************************************
2566 -- SET_POS_AS_AUTH
2567 -- *************************************************************************
2568
2569 PROCEDURE set_pos_as_auth ( itemtype IN VARCHAR2,
2570 itemkey IN VARCHAR2,
2571 actid IN NUMBER,
2572 funcmode IN VARCHAR2,
2573 result OUT NOCOPY VARCHAR2) IS
2574
2575 l_current_position_id per_all_positions.position_id%TYPE;
2576 l_current_auth_role VARCHAR2(240);
2577 l_tu_id igi_exp_tus.tu_id%TYPE;
2578
2579 BEGIN
2580
2581 -- =============== START DEBUG LOG ================
2582 DEBUG_LOG_STRING (l_proc_level, 'Set_pos_as_auth.Msg1',
2583 ' ** START SET_POS_AS_AUTH ** ');
2584 -- =============== END DEBUG LOG ==================
2585
2586 IF (funcmode = 'RUN') THEN
2587
2588 -- Get the current position id
2589 l_current_position_id
2590 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2591 itemkey => itemkey,
2592 aname => 'CURRENT_POSITION_ID');
2593
2594 -- =============== START DEBUG LOG ================
2595 DEBUG_LOG_STRING (l_proc_level, 'Set_pos_as_auth.Msg1',
2596 ' GetItemAttrNumber CURRENT_POSITION_ID -->' || l_current_position_id);
2597 -- =============== END DEBUG LOG ==================
2598
2599 l_current_auth_role := 'POS:'||to_char(l_current_position_id);
2600
2601 -- =============== START DEBUG LOG ================
2602 DEBUG_LOG_STRING (l_proc_level, 'Set_pos_as_auth.Msg1',
2603 ' l_current_auth_role -->' || l_current_auth_role);
2604 -- =============== END DEBUG LOG ==================
2605
2606 -- Set the current_authorizer_role attribute to the position
2607 wf_engine.SetItemAttrText ( itemtype => itemtype,
2608 itemkey => itemkey,
2609 aname => 'CURRENT_AUTHORIZER_ROLE',
2610 avalue => l_current_auth_role);
2611
2612 -- =============== START DEBUG LOG ================
2613 DEBUG_LOG_STRING (l_proc_level, 'Set_pos_as_auth.Msg1',
2614 ' SetItemAttrText CURRENT_AUTHORIZER_ROLE -->' || l_current_auth_role);
2615 -- =============== END DEBUG LOG ==================
2616
2617 -- Since the next authorizer user is unknown (it is anyone at the
2618 -- next position) then the value of the column next_approver_user_id
2619 -- on the TU table should be set to null since nothing can be displayed
2620 -- there.
2621 -- First get the TU id
2622
2623 l_tu_id
2624 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2625 itemkey => itemkey,
2626 aname => 'TU_ID');
2627
2628 -- =============== START DEBUG LOG ================
2629 DEBUG_LOG_STRING (l_proc_level, 'Set_pos_as_auth.Msg1',
2630 ' GetItemAttrNumber TU_ID -->' || l_tu_id);
2631 -- =============== END DEBUG LOG ==================
2632
2633 -- Update the next approver column to null
2634 UPDATE igi_exp_tus
2635 SET next_approver_user_id = null
2636 WHERE tu_id = l_tu_id;
2637
2638 -- =============== START DEBUG LOG ================
2639 DEBUG_LOG_STRING (l_proc_level, 'Set_pos_as_auth.Msg1',
2640 ' Update igi_exp_tus for tu_id ' ||l_tu_id );
2641 -- =============== END DEBUG LOG ==================
2642
2643 END IF;
2644
2645 IF (funcmode <> 'RUN') THEN
2646 result := 'COMPLETE';
2647 -- =============== START DEBUG LOG ================
2648 DEBUG_LOG_STRING (l_proc_level, 'Set_pos_as_auth.Msg1',
2649 ' funcmode <> RUN -- result --> ' || result );
2650 -- =============== END DEBUG LOG ==================
2651 return;
2652 END IF;
2653
2654 -- =============== START DEBUG LOG ================
2655 DEBUG_LOG_STRING (l_proc_level, 'Set_pos_as_auth.Msg1',
2656 ' ** END SET_POS_AS_AUTH ** ');
2657 -- =============== END DEBUG LOG ==================
2658
2659 EXCEPTION
2660 WHEN OTHERS THEN
2661 wf_core.context('IGI_EXP_APPROVAL_PKG','set_pos_as_auth',itemtype,itemkey,
2662 to_char(actid),funcmode);
2663 -- =============== START DEBUG LOG ================
2664 DEBUG_LOG_UNEXP_ERROR ('Set_pos_as_auth.Unexp1','DEFAULT');
2665 -- =============== END DEBUG LOG ==================
2666 raise;
2667 END set_pos_as_auth;
2668
2669
2670 -- *************************************************************************
2671 -- SET_CHOSEN_USER_AS_AUTH
2672 -- *************************************************************************
2673
2674 PROCEDURE set_chosen_user_as_auth( itemtype IN VARCHAR2,
2675 itemkey IN VARCHAR2,
2676 actid IN NUMBER,
2677 funcmode IN VARCHAR2,
2678 result OUT NOCOPY VARCHAR2) IS
2679
2680 l_current_auth_role VARCHAR2(240);
2681 l_auth_id fnd_user.user_id%TYPE;
2682 l_tu_id igi_exp_tus.tu_id%TYPE;
2683
2684 BEGIN
2685
2686 -- =============== START DEBUG LOG ================
2687 DEBUG_LOG_STRING (l_proc_level, 'Set_chosen_user_as_auth.Msg1',
2688 ' ** START SET_CHOSEN_USER_AS_AUTH ** ');
2689 -- =============== END DEBUG LOG ==================
2690
2691 IF (funcmode = 'RUN') THEN
2692
2693 -- Get the picked authorizer role
2694 l_current_auth_role
2695 := wf_engine.GetItemAttrText ( itemtype => itemtype,
2696 itemkey => itemkey,
2697 aname => 'PICKED_AUTHORIZER');
2698
2699 -- =============== START DEBUG LOG ================
2700 DEBUG_LOG_STRING (l_proc_level, 'Set_chosen_user_as_auth.Msg2',
2701 ' GetItemAttrText PICKED_AUTHORIZER --> ' || l_current_auth_role);
2702 -- =============== END DEBUG LOG ==================
2703
2704 -- Need to update the TU table to show the next authorizer of the TU
2705 -- First get the TU id
2706 l_tu_id
2707 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2708 itemkey => itemkey,
2709 aname => 'TU_ID');
2710
2711 -- =============== START DEBUG LOG ================
2712 DEBUG_LOG_STRING (l_proc_level, 'Set_chosen_user_as_auth.Msg3',
2713 ' GetItemAttrNumbe TU_ID --> '|| l_tu_id);
2714 -- =============== END DEBUG LOG ==================
2715
2716 -- Get the user_id of the authorizer
2717 SELECT user_id
2718 INTO l_auth_id
2719 FROM fnd_user
2720 WHERE user_name = l_current_auth_role;
2721
2722 -- =============== START DEBUG LOG ================
2723 DEBUG_LOG_STRING (l_proc_level, 'Set_chosen_user_as_auth.Msg4',
2724 ' Get the user_id of the authorizer --> ' || l_auth_id);
2725 -- =============== END DEBUG LOG ==================
2726
2727 -- Update the TU table with the next authorizer id
2728 UPDATE igi_exp_tus
2729 SET next_approver_user_id = l_auth_id
2730 WHERE tu_id = l_tu_id;
2731
2732 -- =============== START DEBUG LOG ================
2733 DEBUG_LOG_STRING (l_proc_level, 'Set_chosen_user_as_auth.Msg5',
2734 ' UPDATE igi_exp_tus with ' || l_auth_id || ' for ' || l_tu_id);
2735 -- =============== END DEBUG LOG ==================
2736
2737 -- Set the current_authorizer_role attribute
2738 wf_engine.SetItemAttrText ( itemtype => itemtype,
2739 itemkey => itemkey,
2740 aname => 'CURRENT_AUTHORIZER_ROLE',
2741 avalue => l_current_auth_role);
2742
2743 -- =============== START DEBUG LOG ================
2744 DEBUG_LOG_STRING (l_proc_level, 'Set_chosen_user_as_auth.Msg6',
2745 ' SetItemAttrText CURRENT_AUTHORIZER_ROLE --> ' || l_current_auth_role);
2746 -- =============== END DEBUG LOG ==================
2747
2748 END IF;
2749
2750 IF (funcmode <> 'RUN') THEN
2751 result := 'COMPLETE';
2752 -- =============== START DEBUG LOG ================
2753 DEBUG_LOG_STRING (l_proc_level, 'Set_chosen_user_as_auth.Msg7',
2754 ' funcmode <> RUN - result --> ' || result);
2755 -- =============== END DEBUG LOG ==================
2756 return;
2757 END IF;
2758
2759 -- =============== START DEBUG LOG ================
2760 DEBUG_LOG_STRING (l_proc_level, 'Set_chosen_user_as_auth.Msg8',
2761 ' ** END SET_CHOSEN_USER_AS_AUTH ** ');
2762 -- =============== END DEBUG LOG ==================
2763
2764 EXCEPTION
2765 WHEN OTHERS THEN
2766 wf_core.context('IGI_EXP_APPROVAL_PKG','set_chosen_user_as_auth',itemtype,itemkey,
2767 to_char(actid),funcmode);
2768 -- =============== START DEBUG LOG ================
2769 DEBUG_LOG_UNEXP_ERROR ('Set_chosen_user_as_auth.Unexp1','DEFAULT');
2770 -- =============== END DEBUG LOG ==================
2771 raise;
2772 END set_chosen_user_as_auth;
2773
2774
2775
2776 -- *************************************************************************
2777 -- IS_AUTH_ALLOWED_RETURN
2778 -- *************************************************************************
2779
2780 PROCEDURE is_auth_allowed_return ( itemtype IN VARCHAR2,
2781 itemkey IN VARCHAR2,
2782 actid IN NUMBER,
2783 funcmode IN VARCHAR2,
2784 result OUT NOCOPY VARCHAR2) IS
2785
2786 CURSOR c_return_assign(p_position_id igi_exp_pos_actions.position_id%TYPE)
2787 IS
2788 SELECT return
2789 FROM igi_exp_pos_actions
2790 WHERE position_id = p_position_id;
2791
2792 l_authorizer_history_list VARCHAR2(1000);
2793 l_num NUMBER;
2794 l_current_position_id hr_all_positions_f.position_id%TYPE;
2795 l_return_allowed VARCHAR2(1);
2796
2797 BEGIN
2798
2799 -- =============== START DEBUG LOG ================
2800 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg1',
2801 ' ** START IS_AUTH_ALLOWED_RETURN ** ');
2802 -- =============== END DEBUG LOG ==================
2803
2804 IF (funcmode = 'RUN') THEN
2805
2806 -- First need to check if there is more than one authorizer on the
2807 -- authorizer history list. If there is only one authorizer in the
2808 -- list, it should not be possible to return the TU (as there is
2809 -- no authorizer to return it to).
2810
2811 -- Get the authorizer history list
2812 l_authorizer_history_list
2813 := wf_engine.GetItemAttrText ( itemtype => itemtype,
2814 itemkey => itemkey,
2815 aname => 'AUTHORIZER_HISTORY_LIST');
2816
2817 -- =============== START DEBUG LOG ================
2818 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg2',
2819 ' GetItemAttrText AUTHORIZER_HISTORY_LIST --> ' || l_authorizer_history_list);
2820 -- =============== END DEBUG LOG ==================
2821
2822 -- Check if there is more than one authorizer in list
2823 -- (i.e. check for any commas in list as commas are used as delimiters
2824 -- between authorizers)
2825 l_num := INSTR(l_authorizer_history_list,',');
2826
2827 -- =============== START DEBUG LOG ================
2828 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg3',
2829 ' l_num --> ' || l_num);
2830 -- =============== END DEBUG LOG ==================
2831
2832 IF (l_num = 0) THEN
2833
2834 -- There is only one authorizer in list (i.e. the current authorizer)
2835 -- so the current authorizer should not be allowed to return the TU
2836 -- Set the result to 'No' and exit
2837
2838 result := 'COMPLETE:N';
2839 -- =============== START DEBUG LOG ================
2840 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg4',
2841 ' l_num = 0 -- result --> ' || result);
2842 -- =============== END DEBUG LOG ==================
2843 return;
2844
2845 ELSE
2846 -- (l_num > 0) so there is more than one authorizer in list
2847 -- Now need to check if the current authorizer's position
2848 -- has the ability to return TUs. This is defined during EXP
2849 -- action assignment setup.
2850 -- Get the position id of the current authorizer
2851
2852 l_current_position_id
2853 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
2854 itemkey => itemkey,
2855 aname => 'CURRENT_POSITION_ID');
2856
2857 -- =============== START DEBUG LOG ================
2858 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg5',
2859 ' GetItemAttrNumber CURRENT_POSITION_ID --> ' || l_current_position_id);
2860 -- =============== END DEBUG LOG ==================
2861
2862 -- Check if this position has the ability to return TUs.
2863 OPEN c_return_assign(l_current_position_id);
2864 FETCH c_return_assign INTO l_return_allowed;
2865
2866 -- =============== START DEBUG LOG ================
2867 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg6',
2868 ' l_return_allowed --> ' || l_return_allowed);
2869 -- =============== END DEBUG LOG ==================
2870
2871 IF (c_return_assign%NOTFOUND) THEN
2872 CLOSE c_return_assign;
2873 -- Set the result to 'No Assignments' and exit
2874 result := 'COMPLETE:NO_ASSIGN';
2875 -- =============== START DEBUG LOG ================
2876 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg7',
2877 ' c_return_assign%NOTFOUND - TRUE - result --> ' || result);
2878 -- =============== END DEBUG LOG ==================
2879 return;
2880 END IF;
2881 CLOSE c_return_assign;
2882
2883 IF (l_return_allowed = 'Y') THEN
2884 -- Set the result to 'Yes' and exit
2885 result := 'COMPLETE:Y';
2886 -- =============== START DEBUG LOG ================
2887 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg8',
2888 ' l_return_allowed = Y -- result --> ' || result);
2889 -- =============== END DEBUG LOG ==================
2890 return;
2891 ELSE
2892 -- return not allowed for this position
2893 -- Set the result to 'No' and exit
2894 result := 'COMPLETE:N';
2895 -- =============== START DEBUG LOG ================
2896 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg9',
2897 ' l_return_allowed = N -- result --> ' || result);
2898 -- =============== END DEBUG LOG ==================
2899 return;
2900 END IF;
2901
2902 END IF;
2903
2904 END IF;
2905
2906 IF (funcmode <> 'RUN') THEN
2907 result := 'COMPLETE';
2908 -- =============== START DEBUG LOG ================
2909 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg10',
2910 ' funcmode <> RUN -- result --> ' || result);
2911 -- =============== END DEBUG LOG ==================
2912 return;
2913 END IF;
2914
2915 -- =============== START DEBUG LOG ================
2916 DEBUG_LOG_STRING (l_proc_level, 'Is_auth_allowed_return.Msg11',
2917 ' ** END IS_AUTH_ALLOWED_RETURN ** ');
2918 -- =============== END DEBUG LOG ==================
2919
2920 EXCEPTION
2921 WHEN OTHERS THEN
2922 wf_core.context('IGI_EXP_APPROVAL_PKG','is_auth_allowed_return',itemtype,itemkey,
2923 to_char(actid),funcmode);
2924 -- =============== START DEBUG LOG ================
2925 DEBUG_LOG_UNEXP_ERROR ('Is_auth_allowed_return.Unexp1','DEFAULT');
2926 -- =============== END DEBUG LOG ==================
2927 raise;
2928 END is_auth_allowed_return;
2929
2930 -- *************************************************************************
2931 -- SET_CURR_AUTH_TO_RESPONDER
2932 -- *************************************************************************
2933
2934 PROCEDURE set_curr_auth_to_responder ( itemtype IN VARCHAR2,
2935 itemkey IN VARCHAR2,
2936 actid IN NUMBER,
2937 funcmode IN VARCHAR2,
2938 result OUT NOCOPY VARCHAR2) IS
2939
2940 l_nid NUMBER; -- notification id
2941 l_num NUMBER;
2942 l_current_auth_role VARCHAR2(240);
2943
2944 BEGIN
2945
2946 -- =============== START DEBUG LOG ================
2947 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg1',
2948 ' ** START SET_CURR_AUTH_TO_RESPONDER ** ');
2949 -- =============== END DEBUG LOG ==================
2950
2951 IF (funcmode = 'RUN') THEN
2952 -- do nothing in run mode
2953 null;
2954 END IF;
2955
2956 IF (funcmode = 'RESPOND') THEN
2957
2958 -- This is run in respond mode for all notifications in the process
2959 -- 'TU Authorization Request Process' (TU_AUTH_REQUEST_PROCESS)
2960 -- If the current authorizer role is currently set as a position role
2961 -- we want to set it to the actual user who responded to the notification
2962 -- to ensure subsequent notifications are sent to the responder and not
2963 -- to all users at the position
2964
2965 -- =============== START DEBUG LOG ================
2966 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg2',
2967 ' funcmode = RESPOND ');
2968 -- =============== END DEBUG LOG ==================
2969
2970 l_nid := wf_engine.context_nid;
2971
2972 -- =============== START DEBUG LOG ================
2973 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg3',
2974 ' l_nid --> ' || l_nid);
2975 -- =============== END DEBUG LOG ==================
2976
2977 -- Get the current authoriser role item attribute
2978 l_current_auth_role
2979 := wf_engine.GetItemAttrText ( itemtype => itemtype,
2980 itemkey => itemkey,
2981 aname => 'CURRENT_AUTHORIZER_ROLE');
2982
2983 -- =============== START DEBUG LOG ================
2984 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg4',
2985 ' GetItemAttrText CURRENT_AUTHORIZER_ROLE --> ' || l_current_auth_role);
2986 -- =============== END DEBUG LOG ==================
2987
2988 -- Find out NOCOPY if the current authorizer role is set to a position
2989 l_num := INSTR(l_current_auth_role,'POS:');
2990
2991 -- =============== START DEBUG LOG ================
2992 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg5',
2993 ' l_num --> ' || l_num);
2994 -- =============== END DEBUG LOG ==================
2995
2996 IF (l_num = 0) THEN
2997
2998 -- The current authorizer role is not set as a position, so do nothing
2999 -- =============== START DEBUG LOG ================
3000 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg6',
3001 ' l_num = 0 ');
3002 -- =============== END DEBUG LOG ==================
3003 null;
3004
3005 ELSE
3006
3007 -- (l_num > 0)
3008 -- The current authorizer role is set as a position, so want to set it to
3009 -- the responder user instead.
3010
3011 -- Get the responder
3012 l_current_auth_role := wf_engine.context_text;
3013
3014 -- =============== START DEBUG LOG ================
3015 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg7',
3016 ' l_num > 0 -- l_current_auth_role --> ' || l_current_auth_role);
3017 -- =============== END DEBUG LOG ==================
3018
3019 -- Set the current authorizer role attribute to the responder
3020 wf_engine.SetItemAttrText ( itemtype => itemtype,
3021 itemkey => itemkey,
3022 aname => 'CURRENT_AUTHORIZER_ROLE',
3023 avalue => l_current_auth_role);
3024
3025 -- =============== START DEBUG LOG ================
3026 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg8',
3027 ' SetItemAttrText CURRENT_AUTHORIZER_ROLE --> ' || l_current_auth_role);
3028 -- =============== END DEBUG LOG ==================
3029
3030 END IF;
3031
3032 -- =============== START DEBUG LOG ================
3033 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg9',
3034 ' calling set_tu_form_to_query with l_nid --> ' || l_nid);
3035 -- =============== END DEBUG LOG ==================
3036
3037 -- OPSF(I) EXP Bug 2388078 S Brewer 17-JUN-2002 Start(2)
3038 -- Also need to call the procedure to set the TU form to query only mode
3039 -- for this notification
3040 set_tu_form_to_query(l_nid);
3041
3042 END IF;
3043
3044 IF (funcmode = 'TIMEOUT') THEN
3045
3046 -- =============== START DEBUG LOG ================
3047 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg10',
3048 ' funcmode = TIMEOUT -- calling set_tu_form_to_query with l_nid --> ' || l_nid);
3049 -- =============== END DEBUG LOG ==================
3050
3051 -- Need to call the procedure to set the TU form to query only mode
3052 -- for this notification
3053 set_tu_form_to_query(l_nid);
3054
3055 END IF;
3056 -- OPSF(I) EXP Bug 2388078 S Brewer 17-JUN-2002 End(2)
3057
3058 -- =============== START DEBUG LOG ================
3059 DEBUG_LOG_STRING (l_proc_level, 'Set_curr_auth_to_responder.Msg11',
3060 ' ** END SET_CURR_AUTH_TO_RESPONDER ** ');
3061 -- =============== END DEBUG LOG ==================
3062
3063 EXCEPTION
3064 WHEN OTHERS THEN
3065 wf_core.context('IGI_EXP_APPROVAL_PKG','set_curr_auth_to_responder',itemtype,itemkey,
3066 to_char(actid),funcmode);
3067 -- =============== START DEBUG LOG ================
3068 DEBUG_LOG_UNEXP_ERROR ('Is_auth_allowed_return.Unexp1','DEFAULT');
3069 -- =============== END DEBUG LOG ==================
3070 raise;
3071 END set_curr_auth_to_responder;
3072
3073
3074
3075 -- *************************************************************************
3076 -- ADD_AUTH_TO_HISTORY
3077 -- *************************************************************************
3078
3079 PROCEDURE add_auth_to_history ( itemtype IN VARCHAR2,
3080 itemkey IN VARCHAR2,
3081 actid IN NUMBER,
3082 funcmode IN VARCHAR2,
3083 result OUT NOCOPY VARCHAR2) IS
3084
3085 l_authorizer_history_list VARCHAR2(1000);
3086 l_current_auth_role VARCHAR2(240);
3087
3088 BEGIN
3089
3090 -- =============== START DEBUG LOG ================
3091 DEBUG_LOG_STRING (l_proc_level, 'Add_auth_to_history.Msg1',
3092 ' ** START ADD_AUTH_TO_HISTORY ** ');
3093 -- =============== END DEBUG LOG ==================
3094
3095 IF (funcmode = 'RUN') THEN
3096
3097 -- Want to add the current authorizer to the authorizer history
3098 -- list.
3099
3100 -- Get the current authorizer
3101 l_current_auth_role
3102 := wf_engine.GetItemAttrText ( itemtype => itemtype,
3103 itemkey => itemkey,
3104 aname => 'CURRENT_AUTHORIZER_ROLE');
3105
3106 -- =============== START DEBUG LOG ================
3107 DEBUG_LOG_STRING (l_proc_level, 'Add_auth_to_history.Msg2',
3108 ' GetItemAttrText CURRENT_AUTHORIZER_ROLE --> ' || l_current_auth_role);
3109 -- =============== END DEBUG LOG ==================
3110
3111 -- Get the authorizer history list
3112 l_authorizer_history_list
3113 := wf_engine.GetItemAttrText ( itemtype => itemtype,
3114 itemkey => itemkey,
3115 aname => 'AUTHORIZER_HISTORY_LIST');
3116
3117 -- =============== START DEBUG LOG ================
3118 DEBUG_LOG_STRING (l_proc_level, 'Add_auth_to_history.Msg3',
3119 ' GetItemAttrText AUTHORIZER_HISTORY_LIST --> ' || l_authorizer_history_list);
3120 -- =============== END DEBUG LOG ==================
3121
3122 -- Add the current authorizer to the authorizer history list
3123 l_authorizer_history_list :=
3124 l_authorizer_history_list||','||l_current_auth_role;
3125
3126 -- =============== START DEBUG LOG ================
3127 DEBUG_LOG_STRING (l_proc_level, 'Add_auth_to_history.Msg4',
3128 ' l_authorizer_history_list --> ' || l_authorizer_history_list);
3129 -- =============== END DEBUG LOG ==================
3130
3131 -- Set the authorizer_history_list attribute
3132 wf_engine.SetItemAttrText ( itemtype => itemtype,
3133 itemkey => itemkey,
3134 aname => 'AUTHORIZER_HISTORY_LIST',
3135 avalue => l_authorizer_history_list);
3136
3137 -- =============== START DEBUG LOG ================
3138 DEBUG_LOG_STRING (l_proc_level, 'Add_auth_to_history.Msg5',
3139 ' SetItemAttrText AUTHORIZER_HISTORY_LIST --> ' || l_authorizer_history_list);
3140 -- =============== END DEBUG LOG ==================
3141
3142 END IF;
3143
3144 IF (funcmode <> 'RUN') THEN
3145 result := 'COMPLETE';
3146 -- =============== START DEBUG LOG ================
3147 DEBUG_LOG_STRING (l_proc_level, 'Add_auth_to_history.Msg6',
3148 ' funcmode <> RUN -- result --> ' || result);
3149 -- =============== END DEBUG LOG ==================
3150 return;
3151 END IF;
3152
3153 -- =============== START DEBUG LOG ================
3154 DEBUG_LOG_STRING (l_proc_level, 'Add_auth_to_history.Msg7',
3155 ' ** END ADD_AUTH_TO_HISTORY ** ');
3156 -- =============== END DEBUG LOG ==================
3157
3158 EXCEPTION
3159 WHEN OTHERS THEN
3160 wf_core.context('IGI_EXP_APPROVAL_PKG','add_auth_to_history',itemtype,itemkey,
3161 to_char(actid),funcmode);
3162 -- =============== START DEBUG LOG ================
3163 DEBUG_LOG_UNEXP_ERROR ('Add_auth_to_history.Unexp1','DEFAULT');
3164 -- =============== END DEBUG LOG ==================
3165 raise;
3166
3167 END add_auth_to_history;
3168
3169
3170
3171 -- *************************************************************************
3172 -- SET_CURRENT_POSITION_TO_SUBORD
3173 -- *************************************************************************
3174
3175 PROCEDURE set_current_position_to_subord( itemtype IN VARCHAR2,
3176 itemkey IN VARCHAR2,
3177 actid IN NUMBER,
3178 funcmode IN VARCHAR2,
3179 result OUT NOCOPY VARCHAR2) IS
3180
3181 CURSOR c_get_subord_pos(p_position_id per_all_positions.position_id%TYPE
3182 ,p_pos_structure_version_id per_pos_structure_versions.pos_structure_version_id%TYPE
3183 ,p_business_group_id hr_all_positions_f.business_group_id%TYPE)
3184 IS
3185 SELECT subordinate_position_id
3186 FROM per_pos_structure_elements
3187 WHERE pos_structure_version_id = p_pos_structure_version_id
3188 AND business_group_id = p_business_group_id
3189 AND parent_position_id = p_position_id;
3190
3191 l_current_position_id hr_all_positions_f.position_id%TYPE;
3192 l_subord_position_id hr_all_positions_f.position_id%TYPE;
3193 l_subord_position_name hr_all_positions_f.name%TYPE;
3194 l_transmitter_position_id hr_all_positions_f.position_id%TYPE;
3195 l_business_group_id hr_all_positions_f.business_group_id%TYPE;
3196 l_pos_structure_version_id per_pos_structure_versions.pos_structure_version_id%TYPE;
3197 l_organization_id hr_all_positions_f.organization_id%TYPE;
3198
3199 e_no_subord_pos EXCEPTION;
3200
3201 BEGIN
3202
3203 -- =============== START DEBUG LOG ================
3204 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg1',
3205 ' ** START SET_CURRENT_POSITION_TO_SUBORD ** ');
3206 -- =============== END DEBUG LOG ==================
3207
3208 IF (funcmode = 'RUN') THEN
3209
3210 -- This procedure will set the current position id attribute
3211 -- to be the subordinate position of the current position.
3212 -- It is called when a TU is returned to the previous
3213 -- authorizer (in the subordinate position).
3214
3215 -- First check if the current position id is the same as the
3216 -- transmitter's position id. In which case, we should not
3217 -- set it to the subordinate position - it should never go
3218 -- below the TU transmitter's level
3219
3220 -- Get the position id of the TU transmitter
3221 l_transmitter_position_id
3222 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
3223 itemkey => itemkey,
3224 aname => 'TRANSMITTER_POSITION_ID');
3225
3226 -- =============== START DEBUG LOG ================
3227 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg2',
3228 ' GetItemAttrNumber TRANSMITTER_POSITION_ID --> ' || l_transmitter_position_id);
3229 -- =============== END DEBUG LOG ==================
3230
3231 -- Get the current position id
3232 l_current_position_id
3233 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
3234 itemkey => itemkey,
3235 aname => 'CURRENT_POSITION_ID');
3236
3237 -- =============== START DEBUG LOG ================
3238 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg3',
3239 ' GetItemAttrNumber CURRENT_POSITION_ID --> ' || l_current_position_id);
3240 -- =============== END DEBUG LOG ==================
3241
3242 IF (l_current_position_id = l_transmitter_position_id) THEN
3243 -- =============== START DEBUG LOG ================
3244 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg4',
3245 ' l_current_position_id = l_transmitter_position_id - return ');
3246 -- =============== END DEBUG LOG ==================
3247 -- Since this is the transmitter's position, do nothing
3248 return;
3249 END IF;
3250
3251 -- Get the values of the attributes needed:
3252 -- Position structure version and business group.
3253
3254 -- Get the position structure version id
3255 l_pos_structure_version_id
3256 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
3257 itemkey => itemkey,
3258 aname => 'POS_STRUCTURE_VERSION_ID');
3259
3260 -- =============== START DEBUG LOG ================
3261 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg5',
3262 ' GetItemAttrNumber POS_STRUCTURE_VERSION_ID --> ' || l_pos_structure_version_id);
3263 -- =============== END DEBUG LOG ==================
3264
3265 -- Get the business group
3266 l_business_group_id
3267 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
3268 itemkey => itemkey,
3269 aname => 'BUSINESS_GROUP_ID');
3270
3271 -- =============== START DEBUG LOG ================
3272 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg6',
3273 ' GetItemAttrNumber BUSINESS_GROUP_ID --> ' || l_business_group_id);
3274 -- =============== END DEBUG LOG ==================
3275
3276 -- Get the organization_id
3277 l_organization_id
3278 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
3279 itemkey => itemkey,
3280 aname => 'ORGANIZATION_ID');
3281
3282 -- =============== START DEBUG LOG ================
3283 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg7',
3284 ' GetItemAttrNumber ORGANIZATION_ID --> ' || l_organization_id);
3285 -- =============== END DEBUG LOG ==================
3286
3287 -- Get the subordinate position of the current position
3288 OPEN c_get_subord_pos(l_current_position_id
3289 ,l_pos_structure_version_id
3290 ,l_business_group_id);
3291 FETCH c_get_subord_pos INTO l_subord_position_id;
3292
3293 -- =============== START DEBUG LOG ================
3294 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg8',
3295 ' l_subord_position_id --> ' || l_subord_position_id);
3296 -- =============== END DEBUG LOG ==================
3297
3298 IF (c_get_subord_pos%NOTFOUND) THEN
3299 -- =============== START DEBUG LOG ================
3300 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg9',
3301 ' c_get_subord_pos%NOTFOUND = TRUE resie e_no_subord_pos ');
3302 -- =============== END DEBUG LOG ==================
3303 RAISE e_no_subord_pos;
3304 END IF;
3305 CLOSE c_get_subord_pos;
3306
3307 -- Get the name of the subordinate position
3308 SELECT name
3309 INTO l_subord_position_name
3310 FROM hr_all_positions_f
3311 WHERE position_id = l_subord_position_id
3312 AND business_group_id = l_business_group_id
3313 AND organization_id = l_organization_id;
3314
3315 -- =============== START DEBUG LOG ================
3316 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg10',
3317 ' l_subord_position_name --> ' || l_subord_position_name);
3318 -- =============== END DEBUG LOG ==================
3319
3320 -- Set the current position id attribute to the subordinate position
3321 wf_engine.SetItemAttrNumber( itemtype => itemtype,
3322 itemkey => itemkey,
3323 aname => 'CURRENT_POSITION_ID',
3324 avalue => l_subord_position_id);
3325
3326 -- =============== START DEBUG LOG ================
3327 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg11',
3328 ' SetItemAttrNumber CURRENT_POSITION_ID --> ' || l_subord_position_id);
3329 -- =============== END DEBUG LOG ==================
3330
3331 -- Set the current position name attribute to the subordinate position
3332 wf_engine.SetItemAttrText ( itemtype => itemtype,
3333 itemkey => itemkey,
3334 aname => 'CURRENT_POSITION_NAME',
3335 avalue => l_subord_position_name);
3336
3337 -- =============== START DEBUG LOG ================
3338 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg12',
3339 ' SetItemAttrText CURRENT_POSITION_NAME --> ' || l_subord_position_name);
3340 -- =============== END DEBUG LOG ==================
3341
3342 END IF;
3343
3344 IF (funcmode <> 'RUN') THEN
3345 result := 'COMPLETE';
3346 -- =============== START DEBUG LOG ================
3347 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg13',
3348 ' funcmode <> RUN -- result --> ' || result);
3349 -- =============== END DEBUG LOG ==================
3350 return;
3351 END IF;
3352
3353 -- =============== START DEBUG LOG ================
3354 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg14',
3355 ' ** END SET_CURRENT_POSITION_TO_SUBORD ** ');
3356 -- =============== END DEBUG LOG ==================
3357
3358 EXCEPTION
3359 WHEN e_no_subord_pos THEN
3360 wf_core.context('IGI_EXP_APPROVAL_PKG','set_current_position_to_subord',itemtype,itemkey,
3361 to_char(actid),funcmode,'Subordinate of current position not found in hierarchy');
3362 IF (c_get_subord_pos%ISOPEN) THEN
3363 CLOSE c_get_subord_pos;
3364 END IF;
3365 -- =============== START DEBUG LOG ================
3366 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg15',
3367 ' EXCEPTION e_no_subord_pos - No subordinate found. ');
3368 -- =============== END DEBUG LOG ==================
3369 raise;
3370
3371 WHEN OTHERS THEN
3372 wf_core.context('IGI_EXP_APPROVAL_PKG','set_current_position_to_subord',itemtype,itemkey,
3373 to_char(actid),funcmode);
3374 -- =============== START DEBUG LOG ================
3375 DEBUG_LOG_UNEXP_ERROR ('Set_current_position_to_subord.Unexp1','DEFAULT');
3376 -- =============== END DEBUG LOG ==================
3377 raise;
3378
3379 END set_current_position_to_subord;
3380
3381
3382
3383 -- *************************************************************************
3384 -- SET_CURRENT_AUTH_TO_PREV_AUTH
3385 -- *************************************************************************
3386
3387 PROCEDURE set_current_auth_to_prev_auth ( itemtype IN VARCHAR2,
3388 itemkey IN VARCHAR2,
3389 actid IN NUMBER,
3390 funcmode IN VARCHAR2,
3391 result OUT NOCOPY VARCHAR2) IS
3392
3393 l_returner_name VARCHAR2(240);
3394 l_authorizer_history_list VARCHAR2(1000);
3395 l_new_auth_history_list VARCHAR2(1000);
3396 l_num1 NUMBER;
3397 l_num2 NUMBER;
3398 l_prev_authorizer fnd_user.user_name%TYPE;
3399
3400 e_no_prev_auth EXCEPTION;
3401
3402 BEGIN
3403
3404 -- =============== START DEBUG LOG ================
3405 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg1',
3406 ' ** START SET_CURRENT_AUTH_TO_PREV_AUTH ** ');
3407 -- =============== END DEBUG LOG ==================
3408
3409 IF (funcmode = 'RUN') THEN
3410
3411 -- Firstly, we need to find the returner of the TU
3412 -- Get the current authoriser
3413 l_returner_name
3414 := wf_engine.GetItemAttrText ( itemtype => itemtype,
3415 itemkey => itemkey,
3416 aname => 'CURRENT_AUTHORIZER_ROLE');
3417
3418 -- =============== START DEBUG LOG ================
3419 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg2',
3420 ' GetItemAttrText CURRENT_AUTHORIZER_ROLE --> ' || l_returner_name);
3421 -- =============== END DEBUG LOG ==================
3422
3423 -- Set the returner_name attribute
3424 wf_engine.SetItemAttrText ( itemtype => itemtype,
3425 itemkey => itemkey,
3426 aname => 'RETURNER_NAME',
3427 avalue => l_returner_name);
3428
3429
3430 -- =============== START DEBUG LOG ================
3431 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg3',
3432 ' SetItemAttrText RETURNER_NAME --> ' || l_returner_name);
3433 -- =============== END DEBUG LOG ==================
3434
3435 -- Now we need to remove the current authorizer from the
3436 -- authorizer history list
3437
3438 -- Get the authorizer history list
3439 l_authorizer_history_list
3440 := wf_engine.GetItemAttrText ( itemtype => itemtype,
3441 itemkey => itemkey,
3442 aname => 'AUTHORIZER_HISTORY_LIST');
3443
3444 -- =============== START DEBUG LOG ================
3445 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg4',
3446 ' GetItemAttrText AUTHORIZER_HISTORY_LIST --> ' || l_authorizer_history_list);
3447 -- =============== END DEBUG LOG ==================
3448
3449 -- This will return the position of the last comma in the history list
3450 l_num1 := INSTR(l_authorizer_history_list,',',-1);
3451
3452 -- =============== START DEBUG LOG ================
3453 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg5',
3454 ' l_num1 -> ' || l_num1);
3455 -- =============== END DEBUG LOG ==================
3456
3457 IF (l_num1 = 0) THEN
3458 -- =============== START DEBUG LOG ================
3459 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg6',
3460 ' l_num1 = 0 -- RAISE e_no_prev_auth ');
3461 -- =============== END DEBUG LOG ==================
3462 -- There is only one user in the history list, so cannot continue
3463 RAISE e_no_prev_auth;
3464 END IF;
3465
3466 -- There is more than one authorizer in the history list, so delete
3467 -- the last authorizer by taking a substring of the original list
3468 -- up to the last comma (delimiter)
3469 l_new_auth_history_list := SUBSTR(l_authorizer_history_list,1,l_num1-1);
3470
3471 -- =============== START DEBUG LOG ================
3472 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg7',
3473 ' l_new_auth_history_list --> ' || l_new_auth_history_list);
3474 -- =============== END DEBUG LOG ==================
3475
3476 -- Set the authorizer_history_list attribute
3477 wf_engine.SetItemAttrText ( itemtype => itemtype,
3478 itemkey => itemkey,
3479 aname => 'AUTHORIZER_HISTORY_LIST',
3480 avalue => l_new_auth_history_list);
3481
3482 -- =============== START DEBUG LOG ================
3483 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg8',
3484 ' SetItemAttrText AUTHORIZER_HISTORY_LIST --> ' || l_new_auth_history_list);
3485 -- =============== END DEBUG LOG ==================
3486
3487 -- Now we need to find the previous authorizer (using the authorizer history
3488 -- list).
3489
3490 -- This will return the position of the last comma in the new history list
3491 l_num2 := INSTR(l_new_auth_history_list,',',-1);
3492
3493 -- =============== START DEBUG LOG ================
3494 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg9',
3495 ' l_num2 --> ' || l_num2);
3496 -- =============== END DEBUG LOG ==================
3497
3498 IF (l_num2 = 0) THEN
3499 -- There is only one authorizer left in new history list
3500 -- so set the previous authorizer attribute to that authorizer
3501 l_prev_authorizer := l_new_auth_history_list;
3502 -- =============== START DEBUG LOG ================
3503 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg10',
3504 ' l_num2 = 0 -- l_prev_authorizer --> ' || l_prev_authorizer);
3505 -- =============== END DEBUG LOG ==================
3506 ELSE
3507 -- There is more than one authorizer in the new history list, so
3508 -- get the previous authorizer by taking a substring of the new list
3509 -- up to the last comma (delimiter)
3510 l_prev_authorizer := SUBSTR(l_new_auth_history_list,l_num2+1);
3511 -- =============== START DEBUG LOG ================
3512 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg11',
3513 ' l_num2 != 0 -- l_prev_authorizer --> ' || l_prev_authorizer);
3514 -- =============== END DEBUG LOG ==================
3515 END IF;
3516
3517 -- Set the current_authorizer_role attribute to the previous authorizer
3518 wf_engine.SetItemAttrText ( itemtype => itemtype,
3519 itemkey => itemkey,
3520 aname => 'CURRENT_AUTHORIZER_ROLE',
3521 avalue => l_prev_authorizer);
3522
3523 -- =============== START DEBUG LOG ================
3524 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg12',
3525 ' SetItemAttrText CURRENT_AUTHORIZER_ROLE --> ' || l_prev_authorizer);
3526 -- =============== END DEBUG LOG ==================
3527
3528 END IF;
3529
3530 IF (funcmode <> 'RUN') THEN
3531 result := 'COMPLETE';
3532 -- =============== START DEBUG LOG ================
3533 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg13',
3534 ' funcmode <> RUN -- result --> ' || result);
3535 -- =============== END DEBUG LOG ==================
3536 return;
3537 END IF;
3538
3539 -- =============== START DEBUG LOG ================
3540 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg14',
3541 ' ** END SET_CURRENT_AUTH_TO_PREV_AUTH ** ');
3542 -- =============== END DEBUG LOG ==================
3543
3544 EXCEPTION
3545 WHEN e_no_prev_auth THEN
3546 wf_core.context('IGI_EXP_APPROVAL_PKG','set_current_auth_to_prev_auth',itemtype,itemkey,
3547 to_char(actid),funcmode,'No previous authorizer found in history list');
3548 -- =============== START DEBUG LOG ================
3549 DEBUG_LOG_STRING (l_proc_level, 'Set_current_auth_to_prev_auth.Msg15',
3550 ' EXCEPTION - e_no_prev_auth - No previous authorizer ');
3551 -- =============== END DEBUG LOG ==================
3552 raise;
3553
3554 WHEN OTHERS THEN
3555 wf_core.context('IGI_EXP_APPROVAL_PKG','set_current_auth_to_prev_auth',itemtype,itemkey,
3556 to_char(actid),funcmode);
3557 -- =============== START DEBUG LOG ================
3558 DEBUG_LOG_UNEXP_ERROR ('Set_current_auth_to_prev_auth.Unexp1','DEFAULT');
3559 -- =============== END DEBUG LOG ==================
3560 raise;
3561
3562 END set_current_auth_to_prev_auth;
3563
3564
3565 -- *************************************************************************
3566 -- RESET_DU_STATUSES
3567 -- *************************************************************************
3568
3569 PROCEDURE reset_du_statuses ( itemtype IN VARCHAR2,
3570 itemkey IN VARCHAR2,
3571 actid IN NUMBER,
3572 funcmode IN VARCHAR2,
3573 result OUT NOCOPY VARCHAR2) IS
3574
3575 l_tu_id igi_exp_tus.tu_id%TYPE;
3576
3577 BEGIN
3578
3579 -- =============== START DEBUG LOG ================
3580 DEBUG_LOG_STRING (l_proc_level, 'Reset_du_statuses.Msg1',
3581 ' ** START RESET_DU_STATUSES ** ');
3582 -- =============== END DEBUG LOG ==================
3583
3584 IF (funcmode = 'RUN') THEN
3585
3586 -- If the returner made any changes to the dialog unit statuses
3587 -- through the transmission unit form and then decided to return
3588 -- the TU, we need to reset the dialog unit statuses to their
3589 -- original state. If the dialog unit has been put on hold 'HLD'
3590 -- then the original state would be Approved.
3591 -- If the dialog unit has been rejected and there still exist
3592 -- transactions within it then the original state would be
3593 -- Approved.
3594 -- Also, if the returner made no changes to the dialog unit statuses:
3595 -- If the dialog unit has a status of 'Approved and Transmitted'
3596 -- then the original state would be Approved. (We need to change
3597 -- the dialog unit statuses back to approved for returned dialog
3598 -- units so that the authorizer who receives the returned TU
3599 -- does not have to update all the dialog units to approved again
3600 -- (They already approved the dialog units when they first received
3601 -- the approval request).
3602
3603 -- Get the TU id
3604 l_tu_id
3605 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
3606 itemkey => itemkey,
3607 aname => 'TU_ID');
3608
3609 -- =============== START DEBUG LOG ================
3610 DEBUG_LOG_STRING (l_proc_level, 'Reset_du_statuses.Msg2',
3611 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
3612 -- =============== END DEBUG LOG ==================
3613
3614 -- Change the status of the dialog units on hold
3615 UPDATE igi_exp_dus dus
3616 SET dus.du_status = 'APP'
3617 WHERE dus.du_status = 'HLD'
3618 AND dus.tu_id = l_tu_id;
3619
3620 -- =============== START DEBUG LOG ================
3621 DEBUG_LOG_STRING (l_proc_level, 'Reset_du_statuses.Msg3',
3622 ' UPDATE igi_exp_dus dus HLD to APP ' || SQL%ROWCOUNT);
3623 -- =============== END DEBUG LOG ==================
3624
3625 -- Change the status of dialog units which have been rejected
3626 -- but still contain transactions.
3627 UPDATE igi_exp_dus dus
3628 SET dus.du_status = 'APP'
3629 WHERE dus.du_status = 'REJ'
3630 AND dus.tu_id = l_tu_id
3631 AND EXISTS (SELECT 'AR'
3632 FROM igi_exp_ar_trans ar
3633 WHERE ar.du_id = dus.du_id
3634 UNION
3635 SELECT 'AP'
3636 FROM igi_exp_ap_trans ap
3637 WHERE ap.du_id = dus.du_id);
3638
3639 -- =============== START DEBUG LOG ================
3640 DEBUG_LOG_STRING (l_proc_level, 'Reset_du_statuses.Msg4',
3641 ' UPDATE igi_exp_dus status - REJ to APP' || SQL%ROWCOUNT);
3642 -- =============== END DEBUG LOG ==================
3643
3644 -- Change the status of the dialog units which are in status
3645 -- approved and transmitted
3646 UPDATE igi_exp_dus dus
3647 SET dus.du_status = 'APP'
3648 WHERE dus.du_status = 'ATR'
3649 AND dus.tu_id = l_tu_id;
3650
3651 -- =============== START DEBUG LOG ================
3652 DEBUG_LOG_STRING (l_proc_level, 'Reset_du_statuses.Msg5',
3653 ' UPDATE igi_exp_dus status -- ATR to APP ' || SQL%ROWCOUNT);
3654 -- =============== END DEBUG LOG ==================
3655
3656 END IF;
3657
3658 IF (funcmode <> 'RUN') THEN
3659 result := 'COMPLETE';
3660 -- =============== START DEBUG LOG ================
3661 DEBUG_LOG_STRING (l_proc_level, 'Reset_du_statuses.Msg6',
3662 ' funcmode <> RUN -- result --> ' || result);
3663 -- =============== END DEBUG LOG ==================
3664 return;
3665 END IF;
3666
3667 -- =============== START DEBUG LOG ================
3668 DEBUG_LOG_STRING (l_proc_level, 'Reset_du_statuses.Msg7',
3669 ' ** END RESET_DU_STATUSES ** ');
3670 -- =============== END DEBUG LOG ==================
3671
3672 EXCEPTION
3673 WHEN OTHERS THEN
3674 wf_core.context('IGI_EXP_APPROVAL_PKG','reset_du_statuses',itemtype,itemkey,
3675 to_char(actid),funcmode);
3676 -- =============== START DEBUG LOG ================
3677 DEBUG_LOG_UNEXP_ERROR ('Reset_du_statuses.Unexp1','DEFAULT');
3678 -- =============== END DEBUG LOG ==================
3679 raise;
3680
3681 END reset_du_statuses;
3682
3683
3684
3685 -- *************************************************************************
3686 -- CHECK_DUS_ACTIONED
3687 -- *************************************************************************
3688
3689 PROCEDURE check_dus_actioned ( itemtype IN VARCHAR2,
3690 itemkey IN VARCHAR2,
3691 actid IN NUMBER,
3692 funcmode IN VARCHAR2,
3693 result OUT NOCOPY VARCHAR2) IS
3694
3695 l_tu_id igi_exp_tus.tu_id%TYPE;
3696 l_no_of_dus NUMBER;
3697
3698 BEGIN
3699
3700 -- =============== START DEBUG LOG ================
3701 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_actioned.Msg1',
3702 ' ** START CHECK_DUS_ACTIONED ** ');
3703 -- =============== END DEBUG LOG ==================
3704
3705 IF (funcmode = 'RUN') THEN
3706
3707 -- Get the TU id
3708 l_tu_id
3709 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
3710 itemkey => itemkey,
3711 aname => 'TU_ID');
3712
3713 -- =============== START DEBUG LOG ================
3714 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_actioned.Msg2',
3715 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
3716 -- =============== END DEBUG LOG ==================
3717
3718 -- Check that all the DUs in the TU have been actioned
3719 -- i.e. that they have been set to a status of Approved(APP)
3720 -- Rejected (REJ) or On Hold (HLD)
3721 SELECT count(*)
3722 INTO l_no_of_dus
3723 FROM igi_exp_dus
3724 WHERE tu_id = l_tu_id
3725 AND du_status NOT IN ('APP','REJ','HLD');
3726
3727 -- =============== START DEBUG LOG ================
3728 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_actioned.Msg3',
3729 ' l_no_of_dus --> '|| l_no_of_dus);
3730 -- =============== END DEBUG LOG ==================
3731
3732 IF (l_no_of_dus <> 0) THEN
3733 -- At least one du has not been actioned
3734 -- Set the result to 'Yes'
3735 result := 'COMPLETE:Y';
3736 ELSE
3737 -- All the dus have been actioned
3738 -- Set the result to 'No'
3739 result := 'COMPLETE:N';
3740 END IF;
3741
3742 -- =============== START DEBUG LOG ================
3743 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_actioned.Msg4',
3744 ' result --> ' || result);
3745 -- =============== END DEBUG LOG ==================
3746
3747 END IF;
3748
3749 IF (funcmode <> 'RUN') THEN
3750 result := 'COMPLETE';
3751 -- =============== START DEBUG LOG ================
3752 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_actioned.Msg5',
3753 ' funcmode <> RUN -- result --> ' || result);
3754 -- =============== END DEBUG LOG ==================
3755 return;
3756 END IF;
3757
3758 -- =============== START DEBUG LOG ================
3759 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_actioned.Msg6',
3760 ' ** END CHECK_DUS_ACTIONED ** ');
3761 -- =============== END DEBUG LOG ==================
3762
3763 EXCEPTION
3764 WHEN OTHERS THEN
3765 wf_core.context('IGI_EXP_APPROVAL_PKG','check_dus_actioned',itemtype,itemkey,
3766 to_char(actid),funcmode);
3767 -- =============== START DEBUG LOG ================
3768 DEBUG_LOG_UNEXP_ERROR ('Check_dus_actioned.Unexp1','DEFAULT');
3769 -- =============== END DEBUG LOG ==================
3770 raise;
3771
3772 END check_dus_actioned;
3773
3774
3775 -- *************************************************************************
3776 -- SET_DUS_TO_ATR
3777 -- *************************************************************************
3778
3779 PROCEDURE set_dus_to_atr ( itemtype IN VARCHAR2,
3780 itemkey IN VARCHAR2,
3781 actid IN NUMBER,
3782 funcmode IN VARCHAR2,
3783 result OUT NOCOPY VARCHAR2) IS
3784
3785 l_tu_id igi_exp_tus.tu_id%TYPE;
3786
3787 BEGIN
3788
3789 -- =============== START DEBUG LOG ================
3790 DEBUG_LOG_STRING (l_proc_level, 'Set_dus_to_atr.Msg1',
3791 ' ** START SET_DUS_TO_ATR ** ');
3792 -- =============== END DEBUG LOG ==================
3793
3794 IF (funcmode = 'RUN') THEN
3795
3796 -- Need to set approved DUs to status 'Approved and Transmitted'
3797 -- Get the TU id
3798 l_tu_id
3799 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
3800 itemkey => itemkey,
3801 aname => 'TU_ID');
3802
3803 -- =============== START DEBUG LOG ================
3804 DEBUG_LOG_STRING (l_proc_level, 'Set_dus_to_atr.Msg2',
3805 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
3806 -- =============== END DEBUG LOG ==================
3807
3808 UPDATE igi_exp_dus
3809 SET du_status = 'ATR'
3810 WHERE du_status = 'APP'
3811 AND tu_id = l_tu_id;
3812
3813 -- =============== START DEBUG LOG ================
3814 DEBUG_LOG_STRING (l_proc_level, 'Set_dus_to_atr.Msg3',
3815 ' UPDATE igi_exp_dus APP - ATR');
3816 -- =============== END DEBUG LOG ==================
3817
3818 END IF;
3819
3820 IF (funcmode <> 'RUN') THEN
3821 result := 'COMPLETE';
3822 -- =============== START DEBUG LOG ================
3823 DEBUG_LOG_STRING (l_proc_level, 'Set_dus_to_atr.Msg4',
3824 ' funcmode <> RUN -- result --> ' || result);
3825 -- =============== END DEBUG LOG ==================
3826 return;
3827 END IF;
3828
3829 -- =============== START DEBUG LOG ================
3830 DEBUG_LOG_STRING (l_proc_level, 'Set_dus_to_atr.Msg5',
3831 ' ** END SET_DUS_TO_ATR ** ');
3832 -- =============== END DEBUG LOG ==================
3833
3834 EXCEPTION
3835 WHEN OTHERS THEN
3836 wf_core.context('IGI_EXP_APPROVAL_PKG','set_dus_to_atr',itemtype,itemkey,
3837 to_char(actid),funcmode);
3838 -- =============== START DEBUG LOG ================
3839 DEBUG_LOG_UNEXP_ERROR ('Set_dus_to_atr.Unexp1','DEFAULT');
3840 -- =============== END DEBUG LOG ==================
3841 raise;
3842 END set_dus_to_atr;
3843
3844 -- *************************************************************************
3845 -- LIST_ANY_DUS_ON_HOLD
3846 -- *************************************************************************
3847
3848 PROCEDURE list_any_dus_on_hold ( itemtype IN VARCHAR2,
3849 itemkey IN VARCHAR2,
3850 actid IN NUMBER,
3851 funcmode IN VARCHAR2,
3852 result OUT NOCOPY VARCHAR2)
3853 IS
3854
3855
3856 CURSOR c_du_hold_info(p_tu_id igi_exp_dus.tu_id%TYPE)
3857 IS
3858 SELECT du_order_number
3859 ,du_legal_number
3860 FROM igi_exp_dus
3861 WHERE tu_id = p_tu_id
3862 AND du_status = 'HLD';
3863
3864 l_tu_id igi_exp_dus.tu_id%TYPE;
3865 l_hold_count NUMBER;
3866 l_du_hold_list VARCHAR2(28000);
3867
3868 BEGIN
3869
3870 -- =============== START DEBUG LOG ================
3871 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg1',
3872 ' ** START LIST_ANY_DUS_ON_HOLD ** ');
3873 -- =============== END DEBUG LOG ==================
3874
3875 IF (funcmode = 'RUN') THEN
3876
3877 -- Get the TU id
3878 l_tu_id
3879 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
3880 itemkey => itemkey,
3881 aname => 'TU_ID');
3882
3883 -- =============== START DEBUG LOG ================
3884 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg2',
3885 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
3886 -- =============== END DEBUG LOG ==================
3887
3888 SELECT count(*)
3889 INTO l_hold_count
3890 FROM igi_exp_dus
3891 WHERE du_status = 'HLD'
3892 AND tu_id = l_tu_id;
3893
3894 -- =============== START DEBUG LOG ================
3895 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg3',
3896 ' l_hold_count --> ' || l_hold_count);
3897 -- =============== END DEBUG LOG ==================
3898
3899 IF (l_hold_count = 0) THEN
3900 -- No DUs have been put on hold
3901 -- Set result to 'No'
3902 result := 'COMPLETE:N';
3903 -- =============== START DEBUG LOG ================
3904 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg4',
3905 ' l_hold_count = 0 -- result --> ' || result);
3906 -- =============== END DEBUG LOG ==================
3907
3908 ELSE
3909 -- At least one DU has been put on hold
3910 -- Need to create a list of numbers of all DUs put on hold
3911 -- for including in the notification
3912
3913
3914 FOR I IN c_du_hold_info(l_tu_id)
3915 LOOP
3916
3917 IF (l_du_hold_list is NULL) THEN
3918 l_du_hold_list := I.du_order_number;
3919 ELSE
3920 l_du_hold_list := l_du_hold_list ||I.du_order_number;
3921 END IF;
3922
3923 -- =============== START DEBUG LOG ================
3924 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg5',
3925 ' du_order_number --> ' || I.du_order_number);
3926 -- =============== END DEBUG LOG ==================
3927
3928 IF (I.du_legal_number is not null) THEN
3929 l_du_hold_list := l_du_hold_list||' ('||I.du_legal_number||')';
3930 END IF;
3931
3932 -- =============== START DEBUG LOG ================
3933 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg6',
3934 ' I.du_legal_number --> ' || I.du_legal_number);
3935 -- =============== END DEBUG LOG ==================
3936
3937 l_du_hold_list := l_du_hold_list||fnd_global.local_chr(10);
3938
3939 IF LENGTH(l_du_hold_list) > 28000 THEN
3940 exit;
3941 END IF;
3942
3943 END LOOP;
3944
3945 -- Set the all_dus_list attribute
3946 wf_engine.SetItemAttrText ( itemtype => itemtype,
3947 itemkey => itemkey,
3948 aname => 'ADD_ATTR1',
3949 avalue => substr(l_du_hold_list, 1, 4000));
3950
3951 -- =============== START DEBUG LOG ================
3952 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg7',
3953 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_du_hold_list, 1, 4000));
3954 -- =============== END DEBUG LOG ==================
3955
3956 wf_engine.SetItemAttrText ( itemtype => itemtype,
3957 itemkey => itemkey,
3958 aname => 'ADD_ATTR2',
3959 avalue => substr(l_du_hold_list, 4001, 4000));
3960
3961 -- =============== START DEBUG LOG ================
3962 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg8',
3963 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_du_hold_list, 4001, 4000));
3964 -- =============== END DEBUG LOG ==================
3965
3966 wf_engine.SetItemAttrText ( itemtype => itemtype,
3967 itemkey => itemkey,
3968 aname => 'ADD_ATTR3',
3969 avalue => substr(l_du_hold_list, 8001, 4000));
3970
3971 -- =============== START DEBUG LOG ================
3972 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg9',
3973 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_hold_list, 8001, 4000));
3974 -- =============== END DEBUG LOG ==================
3975
3976 wf_engine.SetItemAttrText ( itemtype => itemtype,
3977 itemkey => itemkey,
3978 aname => 'ADD_ATTR4',
3979 avalue => substr(l_du_hold_list, 12001, 4000));
3980
3981 -- =============== START DEBUG LOG ================
3982 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg10',
3983 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_du_hold_list, 12001, 4000));
3984 -- =============== END DEBUG LOG ==================
3985
3986 wf_engine.SetItemAttrText ( itemtype => itemtype,
3987 itemkey => itemkey,
3988 aname => 'ADD_ATTR5',
3989 avalue => substr(l_du_hold_list, 16001, 4000));
3990
3991 -- =============== START DEBUG LOG ================
3992 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg11',
3993 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_du_hold_list, 16001, 4000));
3994 -- =============== END DEBUG LOG ==================
3995
3996 wf_engine.SetItemAttrText ( itemtype => itemtype,
3997 itemkey => itemkey,
3998 aname => 'ADD_ATTR6',
3999 avalue => substr(l_du_hold_list, 20001, 4000));
4000
4001 -- =============== START DEBUG LOG ================
4002 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg12',
4003 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_du_hold_list, 20001, 4000));
4004 -- =============== END DEBUG LOG ==================
4005
4006 wf_engine.SetItemAttrText ( itemtype => itemtype,
4007 itemkey => itemkey,
4008 aname => 'ADD_ATTR7',
4009 avalue => substr(l_du_hold_list, 24001, 4000));
4010
4011
4012 -- =============== START DEBUG LOG ================
4013 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg13',
4014 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_du_hold_list, 24001, 4000));
4015 -- =============== END DEBUG LOG ==================
4016
4017 -- Set the all_dus_list attribute
4018 wf_engine.SetItemAttrText ( itemtype => itemtype,
4019 itemkey => itemkey,
4020 aname => 'ALL_DUS_LIST',
4021 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
4022
4023 -- =============== START DEBUG LOG ================
4024 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg14',
4025 ' SetItemAttrText ALL_DUS_LIST --> ' ||
4026 ' plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
4027 -- =============== END DEBUG LOG ==================
4028
4029
4030 -- Set the result to 'Yes'
4031 result := 'COMPLETE:Y';
4032
4033 -- =============== START DEBUG LOG ================
4034 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg15',
4035 ' result --> ' || result);
4036 -- =============== END DEBUG LOG ==================
4037
4038 END IF;
4039
4040 END IF;
4041
4042 IF (funcmode <> 'RUN') THEN
4043 result := 'COMPLETE';
4044 -- =============== START DEBUG LOG ================
4045 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg16',
4046 ' funcmode <> RUN -- result --> ' || result);
4047 -- =============== END DEBUG LOG ==================
4048 return;
4049 END IF;
4050
4051 -- =============== START DEBUG LOG ================
4052 DEBUG_LOG_STRING (l_proc_level, 'List_any_dus_on_hold.Msg17',
4053 ' ** END LIST_ANY_DUS_ON_HOLD ** ');
4054 -- =============== END DEBUG LOG ==================
4055
4056 EXCEPTION
4057 WHEN OTHERS THEN
4058 wf_core.context('IGI_EXP_APPROVAL_PKG','list_any_dus_on_hold',itemtype,itemkey,
4059 to_char(actid),funcmode);
4060 -- =============== START DEBUG LOG ================
4061 DEBUG_LOG_UNEXP_ERROR ('List_any_dus_on_hold.Unexp1','DEFAULT');
4062 -- =============== END DEBUG LOG ==================
4063 raise;
4064
4065 END list_any_dus_on_hold;
4066
4067
4068 -- *************************************************************************
4069 -- GET_NEXT_DU_ON_HOLD
4070 -- *************************************************************************
4071
4072 PROCEDURE get_next_du_on_hold ( itemtype IN VARCHAR2,
4073 itemkey IN VARCHAR2,
4074 actid IN NUMBER,
4075 funcmode IN VARCHAR2,
4076 result OUT NOCOPY VARCHAR2) IS
4077
4078 CURSOR c_next_du_hld(p_tu_id igi_exp_dus.tu_id%TYPE)
4079 IS
4080 SELECT du_id
4081 ,du_by_user_id
4082 FROM igi_exp_dus
4083 WHERE tu_id = p_tu_id
4084 AND du_status = 'HLD'
4085 AND rownum = 1;
4086
4087 CURSOR c_du_info(p_tu_id igi_exp_dus.tu_id%TYPE
4088 ,p_du_preparer_id igi_exp_dus.du_by_user_id%TYPE)
4089 IS
4090 SELECT du_order_number
4091 ,du_legal_number
4092 FROM igi_exp_dus
4093 WHERE tu_id = p_tu_id
4094 AND du_status = 'HLD'
4095 AND du_by_user_id = p_du_preparer_id;
4096
4097 l_tu_id igi_exp_dus.tu_id%TYPE;
4098 l_du_id igi_exp_dus.du_id%TYPE;
4099 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
4100 l_du_prep_name fnd_user.user_name%TYPE;
4101 l_du_by_prep_list VARCHAR2(28000);
4102
4103 BEGIN
4104
4105 -- =============== START DEBUG LOG ================
4106 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg1',
4107 ' ** START GET_NEXT_DU_ON_HOLD ** ');
4108 -- =============== END DEBUG LOG ==================
4109
4110 IF (funcmode = 'RUN') THEN
4111
4112 -- Get the TU id
4113 l_tu_id
4114 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
4115 itemkey => itemkey,
4116 aname => 'TU_ID');
4117
4118 -- =============== START DEBUG LOG ================
4119 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg2',
4120 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
4121 -- =============== END DEBUG LOG ==================
4122
4123 OPEN c_next_du_hld(l_tu_id);
4124 FETCH c_next_du_hld INTO l_du_id,l_du_prep_id;
4125
4126 -- =============== START DEBUG LOG ================
4127 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg3',
4128 ' l_du_id --> ' || l_du_id ||
4129 ' l_du_prep_id --> ' || l_du_prep_id );
4130 -- =============== END DEBUG LOG ==================
4131
4132 IF c_next_du_hld%NOTFOUND THEN
4133 result := 'COMPLETE:NO_DUS_IN_LIST';
4134 -- =============== START DEBUG LOG ================
4135 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg4',
4136 ' c_next_du_hld%NOTFOUND -- result --> ' || result );
4137 -- =============== END DEBUG LOG ==================
4138
4139 ELSE
4140
4141 -- The next DU has been fetched
4142 -- Set the temp_du_preparer_id attribute
4143 wf_engine.SetItemAttrNumber( itemtype => itemtype,
4144 itemkey => itemkey,
4145 aname => 'TEMP_DU_PREPARER_ID',
4146 avalue => l_du_prep_id);
4147
4148 -- =============== START DEBUG LOG ================
4149 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg5',
4150 ' SetItemAttrNumber TEMP_DU_PREPARER_ID --> ' || l_du_prep_id);
4151 -- =============== END DEBUG LOG ==================
4152
4153 -- Get the name of the preparer to send the notification to
4154 SELECT user_name
4155 INTO l_du_prep_name
4156 FROM fnd_user
4157 WHERE user_id = l_du_prep_id;
4158
4159 -- =============== START DEBUG LOG ================
4160 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg6',
4161 ' l_du_prep_name --> ' || l_du_prep_name);
4162 -- =============== END DEBUG LOG ==================
4163
4164 -- Set the temp_du_preparer_name attribute
4165 wf_engine.SetItemAttrText ( itemtype => itemtype,
4166 itemkey => itemkey,
4167 aname => 'TEMP_DU_PREPARER_NAME',
4168 avalue => l_du_prep_name);
4169
4170 -- =============== START DEBUG LOG ================
4171 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg7',
4172 ' SetItemAttrText TEMP_DU_PREPARER_NAME --> ' || l_du_prep_name );
4173 -- =============== END DEBUG LOG ==================
4174
4175 -- Find all 'On Hold' DUs prepared by this user and create list
4176 -- to use in notification
4177
4178 FOR I IN c_du_info(l_tu_id,l_du_prep_id)
4179 LOOP
4180
4181 IF (l_du_by_prep_list is NULL) THEN
4182 l_du_by_prep_list := I.du_order_number;
4183 ELSE
4184 l_du_by_prep_list := l_du_by_prep_list ||I.du_order_number;
4185 END IF;
4186
4187 -- =============== START DEBUG LOG ================
4188 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg8',
4189 ' I.du_order_number --> ' || I.du_order_number);
4190 -- =============== END DEBUG LOG ==================
4191
4192 IF (I.du_legal_number is not null) THEN
4193 l_du_by_prep_list := l_du_by_prep_list||' ('||I.du_legal_number||')';
4194 END IF;
4195
4196 -- =============== START DEBUG LOG ================
4197 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg9',
4198 ' I.du_legal_number --> ' || I.du_legal_number);
4199 -- =============== END DEBUG LOG ==================
4200
4201 l_du_by_prep_list := l_du_by_prep_list||fnd_global.local_chr(10);
4202
4203 IF LENGTH(l_du_by_prep_list) > 28000 THEN
4204 exit;
4205 END IF;
4206
4207 END LOOP;
4208
4209 -- Set the all_dus_list attribute
4210 wf_engine.SetItemAttrText ( itemtype => itemtype,
4211 itemkey => itemkey,
4212 aname => 'ADD_ATTR1',
4213 avalue => substr(l_du_by_prep_list, 1, 4000));
4214
4215 -- =============== START DEBUG LOG ================
4216 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg10',
4217 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_du_by_prep_list, 1, 4000));
4218 -- =============== END DEBUG LOG ==================
4219
4220 wf_engine.SetItemAttrText ( itemtype => itemtype,
4221 itemkey => itemkey,
4222 aname => 'ADD_ATTR2',
4223 avalue => substr(l_du_by_prep_list, 4001, 4000));
4224
4225 -- =============== START DEBUG LOG ================
4226 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg11',
4227 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_du_by_prep_list, 4001, 4000));
4228 -- =============== END DEBUG LOG ==================
4229
4230 wf_engine.SetItemAttrText ( itemtype => itemtype,
4231 itemkey => itemkey,
4232 aname => 'ADD_ATTR3',
4233 avalue => substr(l_du_by_prep_list, 8001, 4000));
4234
4235 -- =============== START DEBUG LOG ================
4236 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg12',
4237 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_by_prep_list, 8001, 4000));
4238 -- =============== END DEBUG LOG ==================
4239
4240 wf_engine.SetItemAttrText ( itemtype => itemtype,
4241 itemkey => itemkey,
4242 aname => 'ADD_ATTR4',
4243 avalue => substr(l_du_by_prep_list, 12001, 4000));
4244
4245 -- =============== START DEBUG LOG ================
4246 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg13',
4247 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_du_by_prep_list, 12001, 4000));
4248 -- =============== END DEBUG LOG ==================
4249
4250 wf_engine.SetItemAttrText ( itemtype => itemtype,
4251 itemkey => itemkey,
4252 aname => 'ADD_ATTR5',
4253 avalue => substr(l_du_by_prep_list, 16001, 4000));
4254
4255 -- =============== START DEBUG LOG ================
4256 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg14',
4257 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_du_by_prep_list, 16001, 4000));
4258 -- =============== END DEBUG LOG ==================
4259
4260 wf_engine.SetItemAttrText ( itemtype => itemtype,
4261 itemkey => itemkey,
4262 aname => 'ADD_ATTR6',
4263 avalue => substr(l_du_by_prep_list, 20001, 4000));
4264
4265 -- =============== START DEBUG LOG ================
4266 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg15',
4267 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_du_by_prep_list, 20001, 4000));
4268 -- =============== END DEBUG LOG ==================
4269
4270 wf_engine.SetItemAttrText ( itemtype => itemtype,
4271 itemkey => itemkey,
4272 aname => 'ADD_ATTR7',
4273 avalue => substr(l_du_by_prep_list, 24001, 4000));
4274
4275
4276 -- =============== START DEBUG LOG ================
4277 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg16',
4278 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_du_by_prep_list, 24001, 4000));
4279 -- =============== END DEBUG LOG ==================
4280
4281 -- Set the temp_du_by_prep_list attribute
4282 wf_engine.SetItemAttrText ( itemtype => itemtype,
4283 itemkey => itemkey,
4284 aname => 'TEMP_DU_BY_PREP_LIST',
4285 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
4286
4287 -- =============== START DEBUG LOG ================
4288 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg17',
4289 ' SetItemAttrText TEMP_DU_BY_PREP_LIST --> ' ||
4290 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
4291 -- =============== END DEBUG LOG ==================
4292
4293 -- Set the result to 'Next DU Fetched'
4294 result := 'COMPLETE:NEXT_DU_FETCHED';
4295
4296 -- =============== START DEBUG LOG ================
4297 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg18',
4298 ' result --> ' || result);
4299 -- =============== END DEBUG LOG ==================
4300
4301 END IF;
4302
4303 IF (c_next_du_hld%ISOPEN) THEN
4304 CLOSE c_next_du_hld;
4305 END IF;
4306
4307 END IF;
4308
4309 IF (funcmode <> 'RUN') THEN
4310 result := 'COMPLETE';
4311 -- =============== START DEBUG LOG ================
4312 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg19',
4313 'funcmode <> RUN -- result --> ' || result);
4314 -- =============== END DEBUG LOG ==================
4315 return;
4316 END IF;
4317
4318 -- =============== START DEBUG LOG ================
4319 DEBUG_LOG_STRING (l_proc_level, 'Get_next_du_on_hold.Msg20',
4320 ' ** END GET_NEXT_DU_ON_HOLD ** ');
4321 -- =============== END DEBUG LOG ==================
4322
4323 EXCEPTION
4324 WHEN OTHERS THEN
4325 wf_core.context('IGI_EXP_APPROVAL_PKG','get_next_du_on_hold',itemtype,itemkey,
4326 to_char(actid),funcmode);
4327 -- =============== START DEBUG LOG ================
4328 DEBUG_LOG_UNEXP_ERROR ('Get_next_du_on_hold.Unexp1','DEFAULT');
4329 -- =============== END DEBUG LOG ==================
4330 raise;
4331
4332 END get_next_du_on_hold;
4333
4334
4335 -- *************************************************************************
4336 -- REMOVE_DUS_ON_HOLD
4337 -- *************************************************************************
4338
4339 PROCEDURE remove_dus_on_hold ( itemtype IN VARCHAR2,
4340 itemkey IN VARCHAR2,
4341 actid IN NUMBER,
4342 funcmode IN VARCHAR2,
4343 result OUT NOCOPY VARCHAR2) IS
4344
4345 l_tu_id igi_exp_dus.tu_id%TYPE;
4346 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
4347 l_du_amount igi_exp_dus.du_amount%TYPE;
4348
4349 BEGIN
4350
4351 -- =============== START DEBUG LOG ================
4352 DEBUG_LOG_STRING (l_proc_level, 'Remove_dus_on_hold.Msg1',
4353 ' ** START REMOVE_DUS_ON_HOLD ** ');
4354 -- =============== END DEBUG LOG ==================
4355
4356 IF (funcmode = 'RUN') THEN
4357
4358 -- Get the TU id
4359 l_tu_id
4360 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
4361 itemkey => itemkey,
4362 aname => 'TU_ID');
4363
4364 -- =============== START DEBUG LOG ================
4365 DEBUG_LOG_STRING (l_proc_level, 'Remove_dus_on_hold.Msg2',
4366 ' GetItemAttrNumber TU_ID --> '|| l_tu_id);
4367 -- =============== END DEBUG LOG ==================
4368
4369 -- Get the DU Preparer id
4370 l_du_prep_id
4371 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
4372 itemkey => itemkey,
4373 aname => 'TEMP_DU_PREPARER_ID');
4374
4375 -- =============== START DEBUG LOG ================
4376 DEBUG_LOG_STRING (l_proc_level, 'Remove_dus_on_hold.Msg3',
4377 ' GetItemAttrNumber TEMP_DU_PREPARER_ID --> ' || l_du_prep_id);
4378 -- =============== END DEBUG LOG ==================
4379
4380 -- Before releasing DUs from this TU, want to update the TU amount
4381 -- i.e. New TU amount = TU amount - released DU amount
4382 -- Find the total amount of all DUs about to be released
4383 SELECT sum(du_amount)
4384 INTO l_du_amount
4385 FROM igi_exp_dus
4386 WHERE tu_id = l_tu_id
4387 AND du_by_user_id = l_du_prep_id
4388 AND du_status = 'HLD';
4389
4390 -- =============== START DEBUG LOG ================
4391 DEBUG_LOG_STRING (l_proc_level, 'Remove_dus_on_hold.Msg4',
4392 ' l_du_amount --> ' || l_du_amount);
4393 -- =============== END DEBUG LOG ==================
4394
4395 -- Now update the TU amount
4396 UPDATE igi_exp_tus
4397 SET tu_amount = tu_amount - l_du_amount
4398 WHERE tu_id = l_tu_id;
4399
4400 -- =============== START DEBUG LOG ================
4401 DEBUG_LOG_STRING (l_proc_level, 'Remove_dus_on_hold.Msg5',
4402 ' UPDATE igi_exp_tus tu-amount ' || SQL%ROWCOUNT);
4403 -- =============== END DEBUG LOG ==================
4404
4405 -- Want to release all DUs in this TU with status 'On Hold' which
4406 -- have been prepared by this user.
4407
4408 UPDATE igi_exp_dus
4409 SET tu_id = null
4410 WHERE tu_id = l_tu_id
4411 AND du_by_user_id = l_du_prep_id
4412 AND du_status = 'HLD';
4413
4414 -- =============== START DEBUG LOG ================
4415 DEBUG_LOG_STRING (l_proc_level, 'Remove_dus_on_hold.Msg6',
4416 ' UPDATE igi_exp_dus tu_id to NULL --> ' || SQL%ROWCOUNT);
4417 -- =============== END DEBUG LOG ==================
4418
4419 END IF;
4420
4421 IF (funcmode <> 'RUN') THEN
4422 result := 'COMPLETE';
4423 -- =============== START DEBUG LOG ================
4424 DEBUG_LOG_STRING (l_proc_level, 'Remove_dus_on_hold.Msg7',
4425 ' funcmode <> RUN -- result --> ' || result);
4426 -- =============== END DEBUG LOG ==================
4427 return;
4428 END IF;
4429
4430 -- =============== START DEBUG LOG ================
4431 DEBUG_LOG_STRING (l_proc_level, 'Remove_dus_on_hold.Msg8',
4432 ' ** START REMOVE_DUS_ON_HOLD ** ');
4433 -- =============== END DEBUG LOG ==================
4434
4435 EXCEPTION
4436 WHEN OTHERS THEN
4437 wf_core.context('IGI_EXP_APPROVAL_PKG','remove_dus_on_hold',itemtype,itemkey,
4438 to_char(actid),funcmode);
4439 -- =============== START DEBUG LOG ================
4440 DEBUG_LOG_UNEXP_ERROR ('Remove_dus_on_hold.Unexp1','DEFAULT');
4441 -- =============== END DEBUG LOG ==================
4442 raise;
4443
4444 END remove_dus_on_hold;
4445
4446
4447 -- OPSF(I) EXP Bug 2415293 S Brewer 11-JUL-2002 Start(1)
4448 -- Modified the select statements in the following procedure to make them simpler
4449 -- Only check for rejected DUs - do not need to check if the DUs contain transactions
4450 -- This procedure can then be used in the 'Process Rejected Legal DUs' workflow
4451 -- process too.
4452 -- To see previous version of this procedure, look at previous file versions
4453
4454 -- *************************************************************************
4455 -- LIST_ANY_REJECTED_DUS
4456 -- *************************************************************************
4457
4458 PROCEDURE list_any_rejected_dus( itemtype IN VARCHAR2,
4459 itemkey IN VARCHAR2,
4460 actid IN NUMBER,
4461 funcmode IN VARCHAR2,
4462 result OUT NOCOPY VARCHAR2) IS
4463
4464 CURSOR c_du_rej_info(p_tu_id igi_exp_dus.tu_id%TYPE)
4465 IS
4466 SELECT du_order_number
4467 ,du_legal_number
4468 FROM igi_exp_dus du
4469 WHERE tu_id = p_tu_id
4470 AND du_status = 'REJ';
4471
4472 l_tu_id igi_exp_dus.tu_id%TYPE;
4473 l_rej_count NUMBER;
4474 l_du_rej_list VARCHAR2(28000);
4475
4476
4477 BEGIN
4478
4479 -- =============== START DEBUG LOG ================
4480 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg1',
4481 ' ** START LIST_ANY_REJECTED_DUS ** ');
4482 -- =============== END DEBUG LOG ==================
4483
4484 IF (funcmode = 'RUN') THEN
4485
4486 -- Get the TU id
4487 l_tu_id
4488 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
4489 itemkey => itemkey,
4490 aname => 'TU_ID');
4491
4492 -- =============== START DEBUG LOG ================
4493 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg2',
4494 ' l_tu_id --> ' || l_tu_id);
4495 -- =============== END DEBUG LOG ==================
4496
4497 -- Find out NOCOPY if there are any DUs which have been rejected
4498 -- (i.e. if the status of the DU is 'Rejected' )
4499 SELECT count(*)
4500 INTO l_rej_count
4501 FROM igi_exp_dus du
4502 WHERE tu_id = l_tu_id
4503 AND du_status = 'REJ';
4504
4505 -- =============== START DEBUG LOG ================
4506 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg3',
4507 ' l_rej_count --> ' || l_rej_count);
4508 -- =============== END DEBUG LOG ==================
4509
4510 IF (l_rej_count = 0) THEN
4511 -- There are no DUs in the TU which have been rejected
4512 -- Set the result to 'No'
4513 result := 'COMPLETE:N';
4514
4515 -- =============== START DEBUG LOG ================
4516 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg4',
4517 ' l_rej_count --> ' || l_rej_count);
4518 -- =============== END DEBUG LOG ==================
4519
4520 ELSE
4521
4522 -- There is at least one DU in the TU which has been rejected
4523 -- Need to create a list of numbers of all rejected DUs
4524 -- for including in the notification
4525 FOR I IN c_du_rej_info(l_tu_id)
4526 LOOP
4527
4528 IF (l_du_rej_list is NULL) THEN
4529 l_du_rej_list := I.du_order_number;
4530 ELSE
4531 l_du_rej_list := l_du_rej_list||I.du_order_number;
4532 END IF;
4533
4534 -- =============== START DEBUG LOG ================
4535 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg5',
4536 ' I.du_order_number --> ' || I.du_order_number);
4537 -- =============== END DEBUG LOG ==================
4538
4539 IF (I.du_legal_number is not null) THEN
4540 l_du_rej_list := l_du_rej_list||' ('||I.du_legal_number||')';
4541 END IF;
4542
4543 -- =============== START DEBUG LOG ================
4544 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg6',
4545 ' I.du_legal_number --> ' || I.du_legal_number);
4546 -- =============== END DEBUG LOG ==================
4547
4548 l_du_rej_list := l_du_rej_list||fnd_global.local_chr(10);
4549
4550 IF LENGTH(l_du_rej_list) > 28000 THEN
4551 exit;
4552 END IF;
4553
4554 END LOOP;
4555
4556 -- Set the all_dus_list attribute
4557 wf_engine.SetItemAttrText ( itemtype => itemtype,
4558 itemkey => itemkey,
4559 aname => 'ADD_ATTR1',
4560 avalue => substr(l_du_rej_list, 1, 4000));
4561
4562 -- =============== START DEBUG LOG ================
4563 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg7',
4564 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_du_rej_list, 1, 4000));
4565 -- =============== END DEBUG LOG ==================
4566
4567 wf_engine.SetItemAttrText ( itemtype => itemtype,
4568 itemkey => itemkey,
4569 aname => 'ADD_ATTR2',
4570 avalue => substr(l_du_rej_list, 4001, 4000));
4571
4572 -- =============== START DEBUG LOG ================
4573 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg8',
4574 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_du_rej_list, 4001, 4000));
4575 -- =============== END DEBUG LOG ==================
4576
4577 wf_engine.SetItemAttrText ( itemtype => itemtype,
4578 itemkey => itemkey,
4579 aname => 'ADD_ATTR3',
4580 avalue => substr(l_du_rej_list, 8001, 4000));
4581
4582 -- =============== START DEBUG LOG ================
4583 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg9',
4584 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_rej_list, 8001, 4000));
4585 -- =============== END DEBUG LOG ==================
4586
4587 wf_engine.SetItemAttrText ( itemtype => itemtype,
4588 itemkey => itemkey,
4589 aname => 'ADD_ATTR4',
4590 avalue => substr(l_du_rej_list, 12001, 4000));
4591
4592 -- =============== START DEBUG LOG ================
4593 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg10',
4594 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_du_rej_list, 12001, 4000));
4595 -- =============== END DEBUG LOG ==================
4596
4597 wf_engine.SetItemAttrText ( itemtype => itemtype,
4598 itemkey => itemkey,
4599 aname => 'ADD_ATTR5',
4600 avalue => substr(l_du_rej_list, 16001, 4000));
4601
4602 -- =============== START DEBUG LOG ================
4603 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg11',
4604 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_du_rej_list, 16001, 4000));
4605 -- =============== END DEBUG LOG ==================
4606
4607 wf_engine.SetItemAttrText ( itemtype => itemtype,
4608 itemkey => itemkey,
4609 aname => 'ADD_ATTR6',
4610 avalue => substr(l_du_rej_list, 20001, 4000));
4611
4612 -- =============== START DEBUG LOG ================
4613 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg12',
4614 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_du_rej_list, 20001, 4000));
4615 -- =============== END DEBUG LOG ==================
4616
4617 wf_engine.SetItemAttrText ( itemtype => itemtype,
4618 itemkey => itemkey,
4619 aname => 'ADD_ATTR7',
4620 avalue => substr(l_du_rej_list, 24001, 4000));
4621
4622 -- =============== START DEBUG LOG ================
4623 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg13',
4624 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_du_rej_list, 24001, 4000));
4625 -- =============== END DEBUG LOG ==================
4626
4627 -- Set the temp_du_by_prep_list attribute
4628 wf_engine.SetItemAttrText ( itemtype => itemtype,
4629 itemkey => itemkey,
4630 aname => 'ALL_DUS_LIST',
4631 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
4632
4633 -- =============== START DEBUG LOG ================
4634 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg14',
4635 ' SetItemAttrText ALL_DUS_LIST --> ' ||
4636 ' plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
4637 -- =============== END DEBUG LOG ==================
4638
4639 -- Set the result to 'Yes'
4640 result := 'COMPLETE:Y';
4641
4642 -- =============== START DEBUG LOG ================
4643 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg15',
4644 ' result --> ' || result);
4645 -- =============== END DEBUG LOG ==================
4646
4647 END IF;
4648
4649 END IF;
4650
4651 IF (funcmode <> 'RUN') THEN
4652 result := 'COMPLETE';
4653 -- =============== START DEBUG LOG ================
4654 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg16',
4655 ' funcmode <> RUN -- result --> ' || result );
4656 -- =============== END DEBUG LOG ==================
4657 return;
4658 END IF;
4659
4660 -- =============== START DEBUG LOG ================
4661 DEBUG_LOG_STRING (l_proc_level, 'List_any_rejected_dus.Msg17',
4662 ' ** END LIST_ANY_REJECTED_DUS ** ');
4663 -- =============== END DEBUG LOG ==================
4664
4665 EXCEPTION
4666 WHEN OTHERS THEN
4667 wf_core.context('IGI_EXP_APPROVAL_PKG','list_any_rejected_dus',itemtype,itemkey,
4668 to_char(actid),funcmode);
4669 -- =============== START DEBUG LOG ================
4670 DEBUG_LOG_UNEXP_ERROR ('List_any_rejected_dus.Unexp1','DEFAULT');
4671 -- =============== END DEBUG LOG ==================
4672 raise;
4673
4674 END list_any_rejected_dus;
4675
4676
4677 -- OPSF(I) EXP Bug 2415293 S Brewer 11-JUL-2002 Start(2)
4678 -- Modified the select statements in the following procedure to make them simpler
4679 -- Only check for rejected DUs - do not need to check if the DUs contain transactions
4680 -- To see previous version of this procedure, look at previous file versions
4681
4682 -- *************************************************************************
4683 -- GET_NEXT_REJECTED_DU
4684 -- *************************************************************************
4685
4686 PROCEDURE get_next_rejected_du ( itemtype IN VARCHAR2,
4687 itemkey IN VARCHAR2,
4688 actid IN NUMBER,
4689 funcmode IN VARCHAR2,
4690 result OUT NOCOPY VARCHAR2) IS
4691
4692 CURSOR c_next_du_rej(p_tu_id igi_exp_dus.tu_id%TYPE)
4693 IS
4694 SELECT du_id
4695 ,du_by_user_id
4696 FROM igi_exp_dus du
4697 WHERE tu_id = p_tu_id
4698 AND du_status = 'REJ'
4699 AND EXISTS (SELECT 'AR'
4700 FROM igi_exp_ar_trans ar
4701 WHERE ar.du_id = du.du_id
4702 UNION
4703 SELECT 'AP'
4704 FROM igi_exp_ap_trans ap
4705 WHERE ap.du_id = du.du_id)
4706 AND rownum = 1;
4707
4708 CURSOR c_rej_du_info(p_tu_id igi_exp_dus.tu_id%TYPE
4709 ,p_du_preparer_id igi_exp_dus.du_by_user_id%TYPE)
4710 IS
4711 SELECT du_order_number
4712 ,du_legal_number
4713 FROM igi_exp_dus du
4714 WHERE tu_id = p_tu_id
4715 AND du_status = 'REJ'
4716 AND du_by_user_id = p_du_preparer_id;
4717
4718 l_tu_id igi_exp_dus.tu_id%TYPE;
4719 l_du_id igi_exp_dus.du_id%TYPE;
4720 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
4721 l_du_prep_name fnd_user.user_name%TYPE;
4722 l_no NUMBER := 0 ;
4723 l_du_rej_list VARCHAR2(28000);
4724
4725 BEGIN
4726
4727 -- =============== START DEBUG LOG ================
4728 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg1',
4729 ' ** START GET_NEXT_REJECTED_DU ** ');
4730 -- =============== END DEBUG LOG ==================
4731
4732 IF (funcmode = 'RUN') THEN
4733
4734 -- Get the TU id
4735 l_tu_id
4736 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
4737 itemkey => itemkey,
4738 aname => 'TU_ID');
4739
4740 -- =============== START DEBUG LOG ================
4741 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg2',
4742 'GetItemAttrNumber TU_ID --> ' || l_tu_id );
4743 -- =============== END DEBUG LOG ==================
4744
4745 -- Get the next rejected DU in this TU
4746 OPEN c_next_du_rej(l_tu_id);
4747 FETCH c_next_du_rej INTO l_du_id, l_du_prep_id;
4748
4749 -- =============== START DEBUG LOG ================
4750 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg3',
4751 ' l_du_id --> ' || l_du_id || ' l_du_prep_id --> ' || l_du_prep_id);
4752 -- =============== END DEBUG LOG ==================
4753
4754 IF (c_next_du_rej%NOTFOUND) THEN
4755 -- There are no more rejected DUs to deal with
4756 -- Set result to 'No More DUs'
4757 result := 'COMPLETE:NO_DUS_IN_LIST';
4758
4759 -- =============== START DEBUG LOG ================
4760 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg4',
4761 ' result --> ' || result);
4762 -- =============== END DEBUG LOG ==================
4763
4764 ELSE
4765
4766 -- The next rejected DU has been fetched
4767 -- Set the temp_du_preparer_id attribute
4768 wf_engine.SetItemAttrNumber( itemtype => itemtype,
4769 itemkey => itemkey,
4770 aname => 'TEMP_DU_PREPARER_ID',
4771 avalue => l_du_prep_id);
4772
4773 -- =============== START DEBUG LOG ================
4774 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg5',
4775 ' SetItemAttrNumber TEMP_DU_PREPARER_ID --> ' || l_du_prep_id);
4776 -- =============== END DEBUG LOG ==================
4777
4778 -- Get the name of the preparer to send the notification to
4779 SELECT user_name
4780 INTO l_du_prep_name
4781 FROM fnd_user
4782 WHERE user_id = l_du_prep_id;
4783
4784 -- =============== START DEBUG LOG ================
4785 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg6',
4786 ' l_du_prep_name --> ' || l_du_prep_name);
4787 -- =============== END DEBUG LOG ==================
4788
4789 -- Set the temp_du_preparer_name attribute
4790 wf_engine.SetItemAttrText ( itemtype => itemtype,
4791 itemkey => itemkey,
4792 aname => 'TEMP_DU_PREPARER_NAME',
4793 avalue => l_du_prep_name);
4794
4795 -- =============== START DEBUG LOG ================
4796 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg7',
4797 ' SetItemAttrText TEMP_DU_PREPARER_NAME --> ' || l_du_prep_name);
4798 -- =============== END DEBUG LOG ==================
4799
4800 FOR I IN c_rej_du_info(l_tu_id,l_du_prep_id)
4801 LOOP
4802
4803 IF (l_du_rej_list is NULL) THEN
4804 l_du_rej_list := I.du_order_number;
4805 ELSE
4806 l_du_rej_list := l_du_rej_list ||I.du_order_number;
4807 END IF;
4808
4809 -- =============== START DEBUG LOG ================
4810 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg8',
4811 ' I.du_order_number --> ' || I.du_order_number);
4812 -- =============== END DEBUG LOG ==================
4813
4814 IF (I.du_legal_number is not null) THEN
4815 l_du_rej_list := l_du_rej_list||' ('||I.du_legal_number||')';
4816 END IF;
4817
4818 -- =============== START DEBUG LOG ================
4819 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg9',
4820 ' I.du_legal_number --> ' || I.du_legal_number);
4821 -- =============== END DEBUG LOG ==================
4822
4823 l_du_rej_list := l_du_rej_list||fnd_global.local_chr(10);
4824
4825 IF LENGTH(l_du_rej_list) > 28000 THEN
4826 exit;
4827 END IF;
4828
4829 END LOOP;
4830
4831 -- Set the all_dus_list attribute
4832 wf_engine.SetItemAttrText ( itemtype => itemtype,
4833 itemkey => itemkey,
4834 aname => 'ADD_ATTR1',
4835 avalue => substr(l_du_rej_list, 1, 4000));
4836
4837 -- =============== START DEBUG LOG ================
4838 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg10',
4839 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_du_rej_list, 1, 4000));
4840 -- =============== END DEBUG LOG ==================
4841
4842 wf_engine.SetItemAttrText ( itemtype => itemtype,
4843 itemkey => itemkey,
4844 aname => 'ADD_ATTR2',
4845 avalue => substr(l_du_rej_list, 4001, 4000));
4846
4847 -- =============== START DEBUG LOG ================
4848 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg11',
4849 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_du_rej_list, 4001, 4000));
4850 -- =============== END DEBUG LOG ==================
4851
4852 wf_engine.SetItemAttrText ( itemtype => itemtype,
4853 itemkey => itemkey,
4854 aname => 'ADD_ATTR3',
4855 avalue => substr(l_du_rej_list, 8001, 4000));
4856
4857 -- =============== START DEBUG LOG ================
4858 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg12',
4859 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_rej_list, 8001, 4000));
4860 -- =============== END DEBUG LOG ==================
4861
4862 wf_engine.SetItemAttrText ( itemtype => itemtype,
4863 itemkey => itemkey,
4864 aname => 'ADD_ATTR4',
4865 avalue => substr(l_du_rej_list, 12001, 4000));
4866
4867 -- =============== START DEBUG LOG ================
4868 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg13',
4869 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_du_rej_list, 12001, 4000));
4870 -- =============== END DEBUG LOG ==================
4871
4872 wf_engine.SetItemAttrText ( itemtype => itemtype,
4873 itemkey => itemkey,
4874 aname => 'ADD_ATTR5',
4875 avalue => substr(l_du_rej_list, 16001, 4000));
4876
4877 -- =============== START DEBUG LOG ================
4878 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg14',
4879 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_du_rej_list, 16001, 4000));
4880 -- =============== END DEBUG LOG ==================
4881
4882 wf_engine.SetItemAttrText ( itemtype => itemtype,
4883 itemkey => itemkey,
4884 aname => 'ADD_ATTR6',
4885 avalue => substr(l_du_rej_list, 20001, 4000));
4886
4887 -- =============== START DEBUG LOG ================
4888 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg15',
4889 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_du_rej_list, 20001, 4000));
4890 -- =============== END DEBUG LOG ==================
4891
4892 wf_engine.SetItemAttrText ( itemtype => itemtype,
4893 itemkey => itemkey,
4894 aname => 'ADD_ATTR7',
4895 avalue => substr(l_du_rej_list, 24001, 4000));
4896
4897
4898 -- =============== START DEBUG LOG ================
4899 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg16',
4900 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_du_rej_list, 24001, 4000));
4901 -- =============== END DEBUG LOG ==================
4902
4903 wf_engine.SetItemAttrText ( itemtype => itemtype,
4904 itemkey => itemkey,
4905 aname => 'TEMP_DU_BY_PREP_LIST',
4906 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
4907
4908 -- =============== START DEBUG LOG ================
4909 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg17',
4910 ' SetItemAttrText ALL_DUS_LIST --> ' ||
4911 ' plsqlclob:igi_exp_approval_pkg.Cerate_du_list/'||itemtype||':'||itemkey);
4912 -- =============== END DEBUG LOG ==================
4913
4914 -- Set the result to 'Next DU Fetched'
4915 result := 'COMPLETE:NEXT_DU_FETCHED';
4916
4917 -- =============== START DEBUG LOG ================
4918 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg18',
4919 ' result --> ' || result);
4920 -- =============== END DEBUG LOG ==================
4921
4922 END IF;
4923
4924 IF (c_next_du_rej%ISOPEN) THEN
4925 CLOSE c_next_du_rej;
4926 END IF;
4927
4928 END IF;
4929
4930 IF (funcmode <> 'RUN') THEN
4931 result := 'COMPLETE';
4932 -- =============== START DEBUG LOG ================
4933 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg19',
4934 ' funcmode <> RUN -- result --> ' || result);
4935 -- =============== END DEBUG LOG ==================
4936 return;
4937 END IF;
4938
4939 -- =============== START DEBUG LOG ================
4940 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg20',
4941 ' ** END GET_NEXT_REJECTED_DU ** ');
4942 -- =============== END DEBUG LOG ==================
4943
4944 EXCEPTION
4945 WHEN OTHERS THEN
4946 wf_core.context('IGI_EXP_APPROVAL_PKG','get_next_rejected_du',itemtype,itemkey,
4947 to_char(actid),funcmode);
4948 -- =============== START DEBUG LOG ================
4949 DEBUG_LOG_UNEXP_ERROR ('Get_next_rejected_du.Unexp1','DEFAULT');
4950 -- =============== END DEBUG LOG ==================
4951 raise;
4952
4953 END get_next_rejected_du;
4954 -- OPSF(I) EXP Bug 2415293 S Brewer 11-JUL-2002 End(2)
4955
4956
4957
4958 -- *************************************************************************
4959 -- REM_TRX_FROM_REJ_DUS
4960 -- *************************************************************************
4961
4962 PROCEDURE rem_trx_from_rej_dus ( itemtype IN VARCHAR2,
4963 itemkey IN VARCHAR2,
4964 actid IN NUMBER,
4965 funcmode IN VARCHAR2,
4966 result OUT NOCOPY VARCHAR2) IS
4967
4968 CURSOR c_rej_dus(p_tu_id igi_exp_dus.tu_id%TYPE
4969 ,p_du_preparer_id igi_exp_dus.du_by_user_id%TYPE)
4970 IS
4971 SELECT du_id
4972 FROM igi_exp_dus du
4973 WHERE tu_id = p_tu_id
4974 AND du_status = 'REJ'
4975 AND du_by_user_id = p_du_preparer_id
4976 AND EXISTS (SELECT 'AR'
4977 FROM igi_exp_ar_trans ar
4978 WHERE ar.du_id = du.du_id
4979 UNION
4980 SELECT 'AP'
4981 FROM igi_exp_ap_trans ap
4982 WHERE ap.du_id = du.du_id);
4983
4984 l_tu_id igi_exp_dus.tu_id%TYPE;
4985 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
4986 l_du_id igi_exp_dus.du_id%TYPE;
4987 l_du_amount igi_exp_dus.du_amount%TYPE;
4988
4989 BEGIN
4990
4991 -- =============== START DEBUG LOG ================
4992 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg1',
4993 ' ** START REM_TRX_FROM_REJ_DUS ** ');
4994 -- =============== END DEBUG LOG ==================
4995
4996 IF (funcmode = 'RUN') THEN
4997
4998 -- Want to remove all transactions contained within rejected
4999 -- dialog units
5000
5001 -- Get the TU id
5002 l_tu_id
5003 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5004 itemkey => itemkey,
5005 aname => 'TU_ID');
5006
5007 -- =============== START DEBUG LOG ================
5008 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg2',
5009 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
5010 -- =============== END DEBUG LOG ==================
5011
5012 -- Get the DU preparer id
5013 l_du_prep_id
5014 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5015 itemkey => itemkey,
5016 aname => 'TEMP_DU_PREPARER_ID');
5017
5018 -- =============== START DEBUG LOG ================
5019 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg3',
5020 ' GetItemAttrNumber TEMP_DU_PREPARER_ID --> '|| l_du_prep_id);
5021 -- =============== END DEBUG LOG ==================
5022
5023 FOR I IN c_rej_dus(l_tu_id,l_du_prep_id)
5024 LOOP
5025
5026 DELETE FROM igi_exp_ar_trans
5027 WHERE du_id = I.du_id;
5028
5029 -- =============== START DEBUG LOG ================
5030 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg4',
5031 'DELETE FROM igi_exp_ar_trans --> ' || SQL%ROWCOUNT);
5032 -- =============== END DEBUG LOG ==================
5033
5034 DELETE FROM igi_exp_ap_trans
5035 WHERE du_id = I.du_id;
5036
5037 -- =============== START DEBUG LOG ================
5038 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg5',
5039 ' DELETE FROM igi_exp_ap_trans --> ' || SQL%ROWCOUNT);
5040 -- =============== END DEBUG LOG ==================
5041
5042 END LOOP;
5043
5044 -- OPSF(I) EXP Bug 2415293 S Brewer 18-JUL-2002 Start(2)
5045 -- Now that the transactions have been removed from the DUs
5046 -- need to update the DU amounts to 0. But before doing
5047 -- this, update the TU amount
5048 -- i.e. New TU amount = TU amount - DU amount
5049
5050 -- First find the total DU amount
5051 SELECT sum(du_amount)
5052 INTO l_du_amount
5053 FROM igi_exp_dus
5054 WHERE tu_id = l_tu_id
5055 AND du_by_user_id = l_du_prep_id
5056 AND du_status = 'REJ';
5057
5058 -- =============== START DEBUG LOG ================
5059 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg6',
5060 ' l_du_amount --> ' || l_du_amount);
5061 -- =============== END DEBUG LOG ==================
5062
5063 -- Update the TU amount
5064 UPDATE igi_exp_tus
5065 SET tu_amount = tu_amount - l_du_amount
5066 WHERE tu_id = l_tu_id;
5067
5068 -- =============== START DEBUG LOG ================
5069 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg7',
5070 ' UPDATE igi_exp_tus --> ' || SQL%ROWCOUNT);
5071 -- =============== END DEBUG LOG ==================
5072
5073 -- Now update the DU amount to 0
5074 UPDATE igi_exp_dus
5075 SET du_amount = 0
5076 WHERE tu_id = l_tu_id
5077 AND du_by_user_id = l_du_prep_id
5078 AND du_status = 'REJ';
5079
5080 -- OPSF(I) EXP Bug 2415293 S Brewer 18-JUL-2002 End(2)
5081
5082 -- =============== START DEBUG LOG ================
5083 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg8',
5084 ' UPDATE igi_exp_dus du_amount = 0 --> ' || SQL%ROWCOUNT);
5085 -- =============== END DEBUG LOG ==================
5086
5087 END IF;
5088
5089 IF (funcmode <> 'RUN') THEN
5090 result := 'COMPLETE';
5091 -- =============== START DEBUG LOG ================
5092 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg9',
5093 ' funcmode <> RUN -- result --> ' || result);
5094 -- =============== END DEBUG LOG ==================
5095 return;
5096 END IF;
5097
5098 -- =============== START DEBUG LOG ================
5099 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg10',
5100 ' ** END REM_TRX_FROM_REJ_DUS ** ');
5101 -- =============== END DEBUG LOG ==================
5102
5103 EXCEPTION
5104 WHEN OTHERS THEN
5105 wf_core.context('IGI_EXP_APPROVAL_PKG','rem_trx_from_rej_dus',itemtype,itemkey,
5106 to_char(actid),funcmode);
5107 -- =============== START DEBUG LOG ================
5108 DEBUG_LOG_UNEXP_ERROR ('Rem_trx_from_rej_dus.Unexp1','DEFAULT');
5109 -- =============== END DEBUG LOG ==================
5110 raise;
5111
5112 END rem_trx_from_rej_dus;
5113
5114
5115 -- *************************************************************************
5116 -- IS_LEGAL_NUM_REQ
5117 -- *************************************************************************
5118
5119 PROCEDURE is_legal_num_req ( itemtype IN VARCHAR2,
5120 itemkey IN VARCHAR2,
5121 actid IN NUMBER,
5122 funcmode IN VARCHAR2,
5123 result OUT NOCOPY VARCHAR2) IS
5124
5125 l_legal_num_pos_id igi_exp_apprv_profiles.legal_num_pos_id%TYPE;
5126 l_current_pos_id per_all_positions.position_id%TYPE;
5127
5128 BEGIN
5129
5130 -- =============== START DEBUG LOG ================
5131 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg1',
5132 ' ** START IS_LEGAL_NUM_REQ ** ');
5133 -- =============== END DEBUG LOG ==================
5134
5135 IF (funcmode = 'RUN') THEN
5136
5137 -- Get the legal numbering position id
5138 l_legal_num_pos_id
5139 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5140 itemkey => itemkey,
5141 aname => 'LEGAL_NUM_POS_ID');
5142
5143 -- =============== START DEBUG LOG ================
5144 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg2',
5145 'GetItemAttrNumber LEGAL_NUM_POS_ID --> ' || l_legal_num_pos_id);
5146 -- =============== END DEBUG LOG ==================
5147
5148 -- If the current position is the legal numbering position
5149 -- the we need to generate legal numbers for the TU and DUs
5150 -- Get the current position id
5151 l_current_pos_id
5152 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5153 itemkey => itemkey,
5154 aname => 'CURRENT_POSITION_ID');
5155
5156 -- =============== START DEBUG LOG ================
5157 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg3',
5158 ' GetItemAttrNumber CURRENT_POSITION_ID --> ' || l_current_pos_id);
5159 -- =============== END DEBUG LOG ==================
5160
5161 IF (l_current_pos_id = l_legal_num_pos_id) THEN
5162 -- Set the result to 'Yes'
5163 result := 'COMPLETE:Y';
5164 -- =============== START DEBUG LOG ================
5165 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg4',
5166 ' l_current_pos_id = l_legal_num_pos_id -- result --> ' || result);
5167 -- =============== END DEBUG LOG ==================
5168
5169 ELSE
5170 -- Set the result to 'No'
5171 result := 'COMPLETE:N';
5172 -- =============== START DEBUG LOG ================
5173 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg5',
5174 ' result --> ' || result);
5175 -- =============== END DEBUG LOG ==================
5176 END IF;
5177
5178 END IF;
5179
5180 IF (funcmode <> 'RUN') THEN
5181 result := 'COMPLETE';
5182 -- =============== START DEBUG LOG ================
5183 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg6',
5184 ' funcmode <> RUN -- result --> '|| result );
5185 -- =============== END DEBUG LOG ==================
5186 return;
5187 END IF;
5188
5189 -- =============== START DEBUG LOG ================
5190 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg7',
5191 ' ** END IS_LEGAL_NUM_REQ ** ');
5192 -- =============== END DEBUG LOG ==================
5193
5194 EXCEPTION
5195 WHEN OTHERS THEN
5196 wf_core.context('IGI_EXP_APPROVAL_PKG','is_legal_num_req',itemtype,itemkey,
5197 to_char(actid),funcmode);
5198 -- =============== START DEBUG LOG ================
5199 DEBUG_LOG_UNEXP_ERROR ('Is_legal_num_req.Unexp1','DEFAULT');
5200 -- =============== END DEBUG LOG ==================
5201 raise;
5202
5203 END is_legal_num_req;
5204
5205
5206 -- *************************************************************************
5207 -- APPLY_TU_LEGAL_NUM
5208 -- *************************************************************************
5209
5210 PROCEDURE apply_tu_legal_num ( itemtype IN VARCHAR2,
5211 itemkey IN VARCHAR2,
5212 actid IN NUMBER,
5213 funcmode IN VARCHAR2,
5214 result OUT NOCOPY VARCHAR2) IS
5215
5216 l_tu_id igi_exp_dus.tu_id%TYPE;
5217 l_tu_type_header_id igi_exp_tus.tu_type_header_id%TYPE;
5218 l_tu_fiscal_year igi_exp_tus.tu_fiscal_year%TYPE;
5219 l_tu_legal_number igi_exp_tus.tu_legal_number%TYPE;
5220 l_tu_full_number VARCHAR2(240);
5221 l_error_message VARCHAR2(250);
5222
5223 BEGIN
5224
5225 -- =============== START DEBUG LOG ================
5226 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg1',
5227 ' ** START APPLY_TU_LEGAL_NUM ** ');
5228 -- =============== END DEBUG LOG ==================
5229
5230 IF (funcmode = 'RUN') THEN
5231
5232 -- Get the TU id
5233 l_tu_id
5234 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5235 itemkey => itemkey,
5236 aname => 'TU_ID');
5237
5238 -- =============== START DEBUG LOG ================
5239 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg2',
5240 ' GetItemAttrNumber TU_ID --> ' || l_tu_id );
5241 -- =============== END DEBUG LOG ==================
5242
5243 -- Get the TU type and the fiscal year of the TU
5244 SELECT tu_type_header_id
5245 ,tu_fiscal_year
5246 INTO l_tu_type_header_id
5247 ,l_tu_fiscal_year
5248 FROM igi_exp_tus
5249 WHERE tu_id = l_tu_id;
5250
5251 -- =============== START DEBUG LOG ================
5252 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg3',
5253 ' l_tu_type_header_id --> ' || l_tu_type_header_id ||
5254 ' l_tu_fiscal_year --> ' || l_tu_fiscal_year);
5255 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg4',
5256 ' Calling igi_exp_utils.generate_number ');
5257 -- =============== END DEBUG LOG ==================
5258
5259 -- Get the legal number for the TU
5260 igi_exp_utils.generate_number('TU' -- pi_number_type
5261 ,'L' -- pi_number_class
5262 ,l_tu_type_header_id -- pi_du_tu_type_id
5263 ,l_tu_fiscal_year -- pi_fiscal_year
5264 ,l_tu_legal_number -- po_du_tu_number
5265 ,l_error_message); -- po_error_message
5266
5267 -- =============== START DEBUG LOG ================
5268 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg5',
5269 ' l_tu_legal_number --> ' || l_tu_legal_number);
5270 -- =============== END DEBUG LOG ==================
5271
5272 IF (l_tu_legal_number is null) THEN
5273 -- An error occurred generating the TU legal number
5274 -- Set the error message attribute to be used in the
5275 -- notification sent to the system administrator
5276
5277 -- Set the error_message attribute
5278 wf_engine.SetItemAttrText ( itemtype => itemtype,
5279 itemkey => itemkey,
5280 aname => 'ERROR_MESSAGE',
5281 avalue => l_error_message);
5282
5283 -- =============== START DEBUG LOG ================
5284 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg6',
5285 ' SetItemAttrText ERROR_MESSAGE --> ' || l_error_message);
5286 -- =============== END DEBUG LOG ==================
5287
5288 -- Exit with result 'Failure
5289 result := 'COMPLETE:FAILURE';
5290
5291 -- =============== START DEBUG LOG ================
5292 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg7',
5293 ' result --> ' || result);
5294 -- =============== END DEBUG LOG ==================
5295
5296 return;
5297
5298 ELSE
5299
5300 -- TU Legal number was generated successfully
5301 -- Apply the legal number to the TU
5302 UPDATE igi_exp_tus
5303 SET tu_legal_number = l_tu_legal_number
5304 WHERE tu_id = l_tu_id;
5305
5306
5307 -- =============== START DEBUG LOG ================
5308 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg8',
5309 'UPDATE igi_exp_tus - ' || SQL%ROWCOUNT);
5310 -- =============== END DEBUG LOG ==================
5311
5312 -- OPSF(I) EXP Bug 2567802 26-Sep-2002 S Brewer Start(2)
5313 -- Set the TU Full Number attribute to include the legal number
5314 l_tu_full_number
5315 := wf_engine.GetItemAttrText ( itemtype => itemtype,
5316 itemkey => itemkey,
5317 aname => 'TU_FULL_NUMBER');
5318
5319 -- =============== START DEBUG LOG ================
5320 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg9',
5321 ' GetItemAttrText TU_FULL_NUMBER --> ' || l_tu_full_number);
5322 -- =============== END DEBUG LOG ==================
5323
5324 l_tu_full_number := l_tu_full_number||' ('||l_tu_legal_number||')';
5325
5326 -- =============== START DEBUG LOG ================
5327 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg10',
5328 ' l_tu_full_number --> ' || l_tu_full_number);
5329 -- =============== END DEBUG LOG ==================
5330
5331 wf_engine.SetItemAttrText ( itemtype => itemtype,
5332 itemkey => itemkey,
5333 aname => 'TU_FULL_NUMBER',
5334 avalue => l_tu_legal_number);
5335
5336 -- OPSF(I) EXP Bug 2567802 26-Sep-2002 S Brewer End(2)
5337
5338 -- =============== START DEBUG LOG ================
5339 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg11',
5340 ' SetItemAttrText TU_FULL_NUMBER --> ' || l_tu_legal_number);
5341 -- =============== END DEBUG LOG ==================
5342
5343 -- Set the result to Success
5344 result := 'COMPLETE:SUCCESS';
5345
5346 -- =============== START DEBUG LOG ================
5347 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg12',
5348 ' result --> ' || result);
5349 -- =============== END DEBUG LOG ==================
5350
5351 END IF;
5352
5353 END IF;
5354
5355 IF (funcmode <> 'RUN') THEN
5356 result := 'COMPLETE';
5357 -- =============== START DEBUG LOG ================
5358 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg13',
5359 ' funcmode <> RUN -- result --> ' || result);
5360 -- =============== END DEBUG LOG ==================
5361 return;
5362 END IF;
5363
5364 -- =============== START DEBUG LOG ================
5365 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg14',
5366 ' ** END APPLY_TU_LEGAL_NUM ** ');
5367 -- =============== END DEBUG LOG ==================
5368
5369 EXCEPTION
5370 WHEN OTHERS THEN
5371 wf_core.context('IGI_EXP_APPROVAL_PKG','apply_tu_legal_num',itemtype,itemkey,
5372 to_char(actid),funcmode);
5373 -- =============== START DEBUG LOG ================
5374 DEBUG_LOG_UNEXP_ERROR ('Apply_tu_legal_num.Unexp1','DEFAULT');
5375 -- =============== END DEBUG LOG ==================
5376 raise;
5377
5378 END apply_tu_legal_num;
5379
5380
5381
5382 -- *************************************************************************
5383 -- APPLY_DU_LEGAL_NUM
5384 -- *************************************************************************
5385
5386 PROCEDURE apply_du_legal_num ( itemtype IN VARCHAR2,
5387 itemkey IN VARCHAR2,
5388 actid IN NUMBER,
5389 funcmode IN VARCHAR2,
5390 result OUT NOCOPY VARCHAR2) IS
5391
5392 CURSOR c_get_du(p_tu_id igi_exp_dus.tu_id%TYPE)
5393 IS
5394 SELECT du_id
5395 ,du_type_header_id
5396 ,du_fiscal_year
5397 ,du_order_number
5398 FROM igi_exp_dus
5399 WHERE tu_id = p_tu_id
5400 AND du_status = 'ATR';
5401
5402 l_tu_id igi_exp_dus.tu_id%TYPE;
5403 l_du_id igi_exp_dus.du_id%TYPE;
5404 l_du_type_header_id igi_exp_dus.du_type_header_id%TYPE;
5405 l_du_fiscal_year igi_exp_dus.du_fiscal_year%TYPE;
5406 l_du_order_number igi_exp_dus.du_order_number%TYPE;
5407 l_du_legal_number igi_exp_dus.du_legal_number%TYPE;
5408 l_error_message VARCHAR2(250);
5409 l_du_failed VARCHAR2(1):='N';
5410
5411 BEGIN
5412
5413 -- =============== START DEBUG LOG ================
5414 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg1',
5415 ' ** START APPLY_DU_LEGAL_NUM ** ');
5416 -- =============== END DEBUG LOG ==================
5417
5418 IF (funcmode = 'RUN') THEN
5419
5420 -- Get the tu id
5421 l_tu_id
5422 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5423 itemkey => itemkey,
5424 aname => 'TU_ID');
5425
5426 -- =============== START DEBUG LOG ================
5427 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg2',
5428 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
5429 -- =============== END DEBUG LOG ==================
5430
5431 savepoint legal_num_save;
5432
5433 -- =============== START DEBUG LOG ================
5434 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg3',
5435 ' set savepoint legal_num_save ');
5436 -- =============== END DEBUG LOG ==================
5437
5438 OPEN c_get_du(l_tu_id);
5439 LOOP
5440
5441 FETCH c_get_du INTO l_du_id
5442 , l_du_type_header_id
5443 , l_du_fiscal_year
5444 , l_du_order_number;
5445
5446 -- =============== START DEBUG LOG ================
5447 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg4',
5448 ' l_du_id --> ' || l_du_id ||
5449 ' l_du_type_header_id --> ' || l_du_type_header_id ||
5450 ' l_du_fiscal_year --> ' || l_du_fiscal_year ||
5451 ' l_du_order_number --> ' || l_du_order_number);
5452 -- =============== END DEBUG LOG ==================
5453
5454 EXIT WHEN c_get_du%NOTFOUND;
5455
5456 -- =============== START DEBUG LOG ================
5457 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg5',
5458 ' calling igi_exp_utils.generate_number ');
5459 -- =============== END DEBUG LOG ==================
5460
5461 -- Get the legal number for the DU
5462 igi_exp_utils.generate_number('DU' -- pi_number_type
5463 ,'L' -- pi_number_class
5464 ,l_du_type_header_id -- pi_du_tu_type_id
5465 ,l_du_fiscal_year -- pi_fiscal_year
5466 ,l_du_legal_number -- po_du_tu_number
5467 ,l_error_message); -- po_error_message
5468
5469 -- =============== START DEBUG LOG ================
5470 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg6',
5471 ' l_du_legal_number --> ' || l_du_legal_number);
5472 -- =============== END DEBUG LOG ==================
5473
5474 IF (l_du_legal_number is null) THEN
5475 -- An error occurred generating the DU legal number
5476 -- Set the error message attribute to be used in the
5477 -- notification sent to the system administrator
5478
5479 -- Set the error_message attribute
5480 wf_engine.SetItemAttrText ( itemtype => itemtype,
5481 itemkey => itemkey,
5482 aname => 'ERROR_MESSAGE',
5483 avalue => l_error_message);
5484
5485 -- =============== START DEBUG LOG ================
5486 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg7',
5487 ' SetItemAttrText ERROR_MESSAGE --> ' || l_error_message);
5488 -- =============== END DEBUG LOG ==================
5489
5490 -- Set the legal_num_failed_du attribute
5491 wf_engine.SetItemAttrText ( itemtype => itemtype,
5492 itemkey => itemkey,
5493 aname => 'LEGAL_NUM_FAILED_DU',
5494 avalue => l_du_order_number);
5495
5496 -- =============== START DEBUG LOG ================
5497 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg8',
5498 ' SetItemAttrText LEGAL_NUM_FAILED_DU --> ' || l_du_order_number);
5499 -- =============== END DEBUG LOG ==================
5500
5501 -- rollback any legal numbering which did work
5502 rollback to legal_num_save;
5503
5504 -- =============== START DEBUG LOG ================
5505 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg9',
5506 ' rollback to legal_num_save ');
5507 -- =============== END DEBUG LOG ==================
5508
5509 -- set result to 'Failure'
5510 result := 'COMPLETE:FAILURE';
5511
5512 -- =============== START DEBUG LOG ================
5513 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg10',
5514 ' result --> ' || result );
5515 -- =============== END DEBUG LOG ==================
5516
5517 -- set l_du_failed to 'Y'
5518 l_du_failed := 'Y';
5519
5520 -- =============== START DEBUG LOG ================
5521 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg11',
5522 ' l_du_failed --> ' || l_du_failed);
5523 -- =============== END DEBUG LOG ==================
5524
5525 -- exit loop
5526 EXIT;
5527
5528 ELSE
5529
5530 -- DU Legal number was generated successfully
5531 -- Apply the legal number to the DU
5532 UPDATE igi_exp_dus
5533 SET du_legal_number = l_du_legal_number
5534 WHERE du_id = l_du_id;
5535
5536 -- =============== START DEBUG LOG ================
5537 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg12',
5538 ' UPDATE igi_exp_dus --> ' || SQL%ROWCOUNT);
5539 -- =============== END DEBUG LOG ==================
5540
5541 END IF;
5542 END LOOP;
5543
5544 IF (c_get_du%ISOPEN) THEN
5545 CLOSE c_get_du;
5546 END IF;
5547
5548 IF (l_du_failed = 'Y') THEN
5549 -- set result to 'Failure'
5550 result := 'COMPLETE:FAILURE';
5551 ELSE
5552 -- set result to 'Success'
5553 result := 'COMPLETE:SUCCESS';
5554 END IF;
5555
5556 -- =============== START DEBUG LOG ================
5557 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg13',
5558 ' result --> ' || result);
5559 -- =============== END DEBUG LOG ==================
5560
5561 END IF;
5562
5563 IF (funcmode <> 'RUN') THEN
5564 result := 'COMPLETE';
5565 -- =============== START DEBUG LOG ================
5566 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg14',
5567 ' ** START APPLY_DU_LEGAL_NUM ** ');
5568 -- =============== END DEBUG LOG ==================
5569 return;
5570 END IF;
5571
5572 -- =============== START DEBUG LOG ================
5573 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg15',
5574 ' ** END APPLY_DU_LEGAL_NUM ** ');
5575 -- =============== END DEBUG LOG ==================
5576
5577 EXCEPTION
5578 WHEN OTHERS THEN
5579 wf_core.context('IGI_EXP_APPROVAL_PKG','apply_du_legal_num',itemtype,itemkey,
5580 to_char(actid),funcmode);
5581 -- =============== START DEBUG LOG ================
5582 DEBUG_LOG_UNEXP_ERROR ('Apply_du_legal_num.Unexp1','DEFAULT');
5583 -- =============== END DEBUG LOG ==================
5584 raise;
5585
5586 END apply_du_legal_num;
5587
5588
5589
5590 -- *************************************************************************
5591 -- SET_TU_STATUS
5592 -- *************************************************************************
5593
5594 PROCEDURE set_tu_status ( itemtype IN VARCHAR2,
5595 itemkey IN VARCHAR2,
5596 actid IN NUMBER,
5597 funcmode IN VARCHAR2,
5598 result OUT NOCOPY VARCHAR2) IS
5599
5600 l_tu_id igi_exp_dus.tu_id%TYPE;
5601 l_tu_status igi_exp_tus.tu_status%TYPE;
5602 l_atr_du_count NUMBER;
5603
5604 -- Bug 4051910
5605 -- Check if the TU has a status
5606 CURSOR C_stat(p_tu_id number)
5607 IS
5608 SELECT tu_status
5609 FROM igi_exp_tus
5610 WHERE tu_id = p_tu_id;
5611
5612
5613
5614 BEGIN
5615
5616 -- =============== START DEBUG LOG ================
5617 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg1',
5618 ' ** START SET_TU_STATUS ** ');
5619 -- =============== END DEBUG LOG ==================
5620
5621 IF (funcmode = 'RUN') THEN
5622
5623 -- Get the TU id
5624 l_tu_id
5625 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5626 itemkey => itemkey,
5627 aname => 'TU_ID');
5628
5629 -- =============== START DEBUG LOG ================
5630 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg2',
5631 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
5632 -- =============== END DEBUG LOG ==================
5633
5634 -- Bug 4051910
5635 OPEN c_stat(l_tu_id);
5636 FETCH c_stat INTO l_tu_status;
5637 CLOSE c_stat;
5638
5639 -- =============== START DEBUG LOG ================
5640 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg3',
5641 ' l_tu_status --> ' || l_tu_status);
5642 -- =============== END DEBUG LOG ==================
5643
5644 IF (l_tu_status = 'TRA') THEN
5645
5646 UPDATE igi_exp_tus
5647 SET tu_status = 'ATR'
5648 WHERE tu_id = l_tu_id;
5649 -- =============== START DEBUG LOG ================
5650 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg4',
5651 ' UPDATE igi_exp_tus --> ' || SQL%ROWCOUNT);
5652 -- =============== END DEBUG LOG ==================
5653
5654 END IF;
5655
5656 -- Find how many DUs in the TU are approved
5657 SELECT count(*)
5658 INTO l_atr_du_count
5659 FROM igi_exp_dus
5660 WHERE tu_id = l_tu_id
5661 AND du_status = 'ATR';
5662
5663 -- =============== START DEBUG LOG ================
5664 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg5',
5665 ' l_atr_du_count --> ' || l_atr_du_count);
5666 -- =============== END DEBUG LOG ==================
5667
5668 IF (l_atr_du_count = 0) THEN
5669 -- This TU contains no approved DUs
5670 -- Set the result to 'TU Empty'
5671 result := 'COMPLETE:TU_EMPTY';
5672 -- =============== START DEBUG LOG ================
5673 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg6',
5674 ' l_atr_du_count = 0 -- result --> ' || result);
5675 -- =============== END DEBUG LOG ==================
5676 ELSE
5677 -- This TU contains at least one approved DU
5678 -- Set the result to 'TU Not Empty'
5679 result := 'COMPLETE:TU_NOT_EMPTY';
5680 -- =============== START DEBUG LOG ================
5681 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg7',
5682 ' result --> ' || result);
5683 -- =============== END DEBUG LOG ==================
5684 END IF;
5685 END IF;
5686
5687 IF (funcmode <> 'RUN') THEN
5688 result := 'COMPLETE';
5689 -- =============== START DEBUG LOG ================
5690 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg8',
5691 ' funcmode <> RUN -- result --> ' || result);
5692 -- =============== END DEBUG LOG ==================
5693 return;
5694 END IF;
5695
5696 -- =============== START DEBUG LOG ================
5697 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg9',
5698 ' ** END SET_TU_STATUS ** ');
5699 -- =============== END DEBUG LOG ==================
5700
5701 EXCEPTION
5702 WHEN OTHERS THEN
5703 wf_core.context('IGI_EXP_APPROVAL_PKG','set_tu_status',itemtype,itemkey,
5704 to_char(actid),funcmode);
5705 -- =============== START DEBUG LOG ================
5706 DEBUG_LOG_UNEXP_ERROR ('Set_tu_status.Unexp1','DEFAULT');
5707 -- =============== END DEBUG LOG ==================
5708 raise;
5709
5710 END set_tu_status;
5711
5712
5713 -- *************************************************************************
5714 -- GET_PARENT_POSITION
5715 -- *************************************************************************
5716
5717 PROCEDURE get_parent_position ( itemtype IN VARCHAR2,
5718 itemkey IN VARCHAR2,
5719 actid IN NUMBER,
5720 funcmode IN VARCHAR2,
5721 result OUT NOCOPY VARCHAR2) IS
5722
5723 CURSOR c_get_parent_position(p_position_id per_all_positions.position_id%TYPE
5724 ,p_pos_structure_version_id per_pos_structure_versions.pos_structure_version_id%TYPE
5725 ,p_business_group_id hr_all_positions_f.business_group_id%TYPE)
5726 IS
5727 SELECT parent_position_id
5728 FROM per_pos_structure_elements
5729 WHERE pos_structure_version_id = p_pos_structure_version_id
5730 AND business_group_id = p_business_group_id
5731 AND subordinate_position_id = p_position_id;
5732
5733 l_position_id per_all_positions.position_id%TYPE;
5734 l_parent_pos_id per_all_positions.position_id%TYPE;
5735 l_parent_pos_name per_all_positions.name%TYPE;
5736 l_final_apprv_pos_id igi_exp_apprv_profiles.final_apprv_pos_id%TYPE;
5737 l_business_group_id hr_all_positions_f.business_group_id%TYPE;
5738 l_pos_structure_version_id per_pos_structure_versions.pos_structure_version_id%TYPE;
5739
5740 BEGIN
5741
5742 -- =============== START DEBUG LOG ================
5743 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg1',
5744 ' ** START GET_PARENT_POSITION ** ');
5745 -- =============== END DEBUG LOG ==================
5746
5747 IF (funcmode = 'RUN') THEN
5748
5749 -- Get the current position id
5750 l_position_id
5751 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5752 itemkey => itemkey,
5753 aname => 'CURRENT_POSITION_ID');
5754
5755 -- =============== START DEBUG LOG ================
5756 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg2',
5757 ' GetItemAttrNumber CURRENT_POSITION_ID --> ' || l_position_id);
5758 -- =============== END DEBUG LOG ==================
5759
5760 -- Get the final approver position id
5761 l_final_apprv_pos_id
5762 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5763 itemkey => itemkey,
5764 aname => 'FINAL_APPRV_POS_ID');
5765
5766 -- =============== START DEBUG LOG ================
5767 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg3',
5768 ' GetItemAttrNumber FINAL_APPRV_POS_ID --> ' || l_final_apprv_pos_id);
5769 -- =============== END DEBUG LOG ==================
5770
5771 -- If the current position is the final approver position then
5772 -- this position has no parent position
5773 IF (l_position_id = l_final_apprv_pos_id) THEN
5774 -- set the result to 'No Parent' and exit
5775 result := 'COMPLETE:NO_PARENT';
5776 -- =============== START DEBUG LOG ================
5777 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg4',
5778 ' l_position_id = l_final_apprv_pos_id -- result --> ' || result);
5779 -- =============== END DEBUG LOG ==================
5780 return;
5781 END IF;
5782
5783 -- Now need to check if there is a parent position in the HR hierarchy
5784 -- Get the position structure version id
5785 l_pos_structure_version_id
5786 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5787 itemkey => itemkey,
5788 aname => 'POS_STRUCTURE_VERSION_ID');
5789
5790 -- =============== START DEBUG LOG ================
5791 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg5',
5792 ' GetItemAttrNumber POS_STRUCTURE_VERSION_ID --> ' ||l_pos_structure_version_id);
5793 -- =============== END DEBUG LOG ==================
5794
5795 -- Get the business group id
5796 l_business_group_id
5797 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5798 itemkey => itemkey,
5799 aname => 'BUSINESS_GROUP_ID');
5800
5801 -- =============== START DEBUG LOG ================
5802 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg6',
5803 ' GetItemAttrNumber BUSINESS_GROUP_ID --> ' || l_business_group_id);
5804 -- =============== END DEBUG LOG ==================
5805
5806 OPEN c_get_parent_position(l_position_id
5807 ,l_pos_structure_version_id
5808 ,l_business_group_id);
5809 FETCH c_get_parent_position INTO l_parent_pos_id;
5810
5811 -- =============== START DEBUG LOG ================
5812 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg7',
5813 ' l_position_id --> ' || l_position_id ||
5814 ' l_pos_structure_version_id --> ' || l_pos_structure_version_id ||
5815 ' l_business_group_id --> ' || l_business_group_id);
5816 -- =============== END DEBUG LOG ==================
5817
5818 IF c_get_parent_position%NOTFOUND THEN
5819 -- The current position does not have a parent in the HR hierarchy
5820 -- Set result to No Parent and exit
5821 result := 'COMPLETE:NO_PARENT';
5822 -- =============== START DEBUG LOG ================
5823 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg8',
5824 ' c_get_parent_position%NOTFOUND --> TRUE -- result --> ' || result);
5825 -- =============== END DEBUG LOG ==================
5826 return;
5827 ELSE
5828 -- The current position has a parent
5829 -- Set the workflow attribute current_position_id to the parent position
5830 wf_engine.SetItemAttrNumber( itemtype => itemtype,
5831 itemkey => itemkey,
5832 aname => 'CURRENT_POSITION_ID',
5833 avalue => l_parent_pos_id);
5834
5835 -- =============== START DEBUG LOG ================
5836 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg9',
5837 ' SetItemAttrNumber CURRENT_POSITION_ID --> ' || l_parent_pos_id);
5838 -- =============== END DEBUG LOG ==================
5839
5840 -- Get the position name
5841 SELECT name
5842 INTO l_parent_pos_name
5843 FROM hr_all_positions_f
5844 WHERE position_id = l_parent_pos_id;
5845
5846 -- =============== START DEBUG LOG ================
5847 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg10',
5848 ' l_parent_pos_name --> ' || l_parent_pos_name);
5849 -- =============== END DEBUG LOG ==================
5850
5851 -- Set the workflow attribute current_position_name to the parent position
5852 wf_engine.SetItemAttrText ( itemtype => itemtype,
5853 itemkey => itemkey,
5854 aname => 'CURRENT_POSITION_NAME',
5855 avalue => l_parent_pos_name);
5856
5857 -- =============== START DEBUG LOG ================
5858 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg11',
5859 ' SetItemAttrText CURRENT_POSITION_NAME --> ' || l_parent_pos_name);
5860 -- =============== END DEBUG LOG ==================
5861
5862 -- Set the result to Has a parent
5863 result := 'COMPLETE:HAS_PARENT';
5864
5865 -- =============== START DEBUG LOG ================
5866 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg12',
5867 ' result --> ' || result);
5868 -- =============== END DEBUG LOG ==================
5869
5870 return;
5871
5872 END IF;
5873
5874 END IF;
5875
5876 IF (funcmode <> 'RUN') THEN
5877 result := 'COMPLETE';
5878 -- =============== START DEBUG LOG ================
5879 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg13',
5880 ' funcmode <> RUN -- result --> ' || result);
5881 -- =============== END DEBUG LOG ==================
5882 return;
5883 END IF;
5884
5885 -- =============== START DEBUG LOG ================
5886 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg14',
5887 ' ** END GET_PARENT_POSITION ** ');
5888 -- =============== END DEBUG LOG ==================
5889
5890 EXCEPTION
5891 WHEN OTHERS THEN
5892 wf_core.context('IGI_EXP_APPROVAL_PKG','get_parent_position',itemtype,itemkey,
5893 to_char(actid),funcmode);
5894 -- =============== START DEBUG LOG ================
5895 DEBUG_LOG_UNEXP_ERROR ('Get_parent_position.Unexp1','DEFAULT');
5896 -- =============== END DEBUG LOG ==================
5897 raise;
5898
5899 END get_parent_position;
5900
5901
5902
5903 -- *************************************************************************
5904 -- GET_NEXT_INCOMPLETE_DU
5905 -- *************************************************************************
5906
5907 PROCEDURE get_next_incomplete_du( itemtype IN VARCHAR2,
5908 itemkey IN VARCHAR2,
5909 actid IN NUMBER,
5910 funcmode IN VARCHAR2,
5911 result OUT NOCOPY VARCHAR2) IS
5912
5913 l_tu_id igi_exp_dus.tu_id%TYPE;
5914 l_du_prep_name fnd_user.user_name%TYPE;
5915 l_du_id igi_exp_dus.du_id%TYPE;
5916
5917 BEGIN
5918
5919 -- =============== START DEBUG LOG ================
5920 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5921 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5922 -- =============== END DEBUG LOG ==================
5923
5924 IF (funcmode = 'RUN') THEN
5925
5926 -- Get the TU id
5927 l_tu_id
5928 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5929 itemkey => itemkey,
5930 aname => 'TU_ID');
5931
5932 -- =============== START DEBUG LOG ================
5933 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5934 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5935 -- =============== END DEBUG LOG ==================
5936
5937 -- Get the next DU which has been approved and needs completing
5938 SELECT du.du_id
5939 ,fnd.user_name
5940 INTO l_du_id
5941 ,l_du_prep_name
5942 FROM igi_exp_dus du
5943 ,fnd_user fnd
5944 WHERE du.tu_id = l_tu_id
5945 AND du.du_status = 'ATR'
5946 AND du.du_by_user_id = fnd.user_id
5947 AND rownum = 1;
5948
5949 -- =============== START DEBUG LOG ================
5950 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5951 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5952 -- =============== END DEBUG LOG ==================
5953
5954 -- Set the du_id_for_completion attribute
5955 wf_engine.SetItemAttrNumber( itemtype => itemtype,
5956 itemkey => itemkey,
5957 aname => 'DU_ID_FOR_COMPLETION',
5958 avalue => l_du_id);
5959
5960 -- =============== START DEBUG LOG ================
5961 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5962 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5963 -- =============== END DEBUG LOG ==================
5964
5965 -- Set the du_prep_name_for_com attribute
5966 wf_engine.SetItemAttrText ( itemtype => itemtype,
5967 itemkey => itemkey,
5968 aname => 'DU_PREP_NAME_FOR_COM',
5969 avalue => l_du_prep_name);
5970
5971 -- =============== START DEBUG LOG ================
5972 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5973 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5974 -- =============== END DEBUG LOG ==================
5975
5976 END IF;
5977
5978 IF (funcmode <> 'RUN') THEN
5979 result := 'COMPLETE';
5980 -- =============== START DEBUG LOG ================
5981 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5982 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5983 -- =============== END DEBUG LOG ==================
5984 return;
5985 END IF;
5986
5987 -- =============== START DEBUG LOG ================
5988 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5989 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5990 -- =============== END DEBUG LOG ==================
5991
5992 EXCEPTION
5993 WHEN OTHERS THEN
5994 wf_core.context('IGI_EXP_APPROVAL_PKG','get_next_incomplete_du',itemtype,itemkey,
5995 to_char(actid),funcmode);
5996 -- =============== START DEBUG LOG ================
5997 DEBUG_LOG_UNEXP_ERROR ('Get_next_incomplete_du.Unexp1','DEFAULT');
5998 -- =============== END DEBUG LOG ==================
5999 raise;
6000 END get_next_incomplete_du;
6001
6002 -- *************************************************************************
6003 -- PROCESS_TRANSACTIONS
6004 -- *************************************************************************
6005
6006 PROCEDURE process_transactions ( itemtype IN VARCHAR2,
6007 itemkey IN VARCHAR2,
6008 actid IN NUMBER,
6009 funcmode IN VARCHAR2,
6010 result OUT NOCOPY VARCHAR2) IS
6011
6012 l_du_id igi_exp_dus.du_id%TYPE;
6013 l_app_id igi_exp_du_type_headers.application_id%TYPE;
6014 l_order_number igi_exp_dus.du_order_number%TYPE;
6015 l_legal_number igi_exp_dus.du_legal_number%TYPE;
6016 l_failed_du VARCHAR2(510);
6017 l_failed_trx VARCHAR2(50);
6018 l_gl_date DATE := sysdate;
6019 l_error_message VARCHAR2(4000);
6020 l_trx_failed_err_mess VARCHAR2(4000);
6021 l_trx_id NUMBER;
6022
6023 BEGIN
6024
6025 -- =============== START DEBUG LOG ================
6026 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg1',
6027 ' ** START PROCESS_TRANSACTIONS ** ');
6028 -- =============== END DEBUG LOG ==================
6029
6030 IF (funcmode = 'RUN') THEN
6031
6032 -- Get the DU id
6033 l_du_id
6034 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6035 itemkey => itemkey,
6036 aname => 'DU_ID_FOR_COMPLETION');
6037
6038 -- =============== START DEBUG LOG ================
6039 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg2',
6040 ' GetItemAttrNumber DU_ID_FOR_COMPLETION --> ' || l_du_id);
6041 -- =============== END DEBUG LOG ==================
6042
6043 -- Get the application id for the du
6044 SELECT du_type.application_id
6045 INTO l_app_id
6046 FROM igi_exp_du_type_headers_all du_type
6047 ,igi_exp_dus du
6048 WHERE du.du_id = l_du_id
6049 AND du.du_type_header_id = du_type.du_type_header_id;
6050
6051 -- =============== START DEBUG LOG ================
6052 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg3',
6053 ' l_app_id --> ' || l_app_id);
6054 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg4',
6055 ' Calling igi_exp_utils.complete_du ');
6056 -- =============== END DEBUG LOG ==================
6057
6058 -- Call the utility to complete (or approve) transactions
6059 igi_exp_utils.complete_du(l_du_id -- p_du_id
6060 ,l_app_id -- p_app_id
6061 ,l_gl_date -- p_gl_date
6062 ,l_error_message -- p_error_message
6063 ,l_trx_id); -- p_trx_id
6064
6065 -- =============== START DEBUG LOG ================
6066 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg5',
6067 ' l_error_message --> ' || l_error_message);
6068 -- =============== END DEBUG LOG ==================
6069
6070 IF (l_error_message <> 'Success') THEN
6071
6072 SELECT du_order_number, du_legal_number
6073 INTO l_order_number, l_legal_number
6074 FROM igi_exp_dus
6075 WHERE du_id = l_du_id;
6076
6077 -- =============== START DEBUG LOG ================
6078 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg6',
6079 ' l_order_number --> ' || l_order_number ||
6080 ' l_legal_number --> ' || l_legal_number);
6081 -- =============== END DEBUG LOG ==================
6082
6083 l_failed_du := l_order_number;
6084
6085 -- =============== START DEBUG LOG ================
6086 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg7',
6087 ' l_failed_du --> ' || l_failed_du);
6088 -- =============== END DEBUG LOG ==================
6089
6090 IF (l_legal_number is not null) THEN
6091 l_failed_du := l_failed_du||' ('||l_legal_number||')';
6092 END IF;
6093
6094 -- =============== START DEBUG LOG ================
6095 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg8',
6096 ' After if -- l_failed_du --> ' || l_failed_du);
6097 -- =============== END DEBUG LOG ==================
6098
6099 IF (l_trx_id is not null) THEN
6100 -- If the process failed for a particular transaction then
6101 -- Find the transaction name of the failed transaction
6102 IF (l_app_id = 200) THEN
6103
6104 -- =============== START DEBUG LOG ================
6105 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg9',
6106 ' l_trx_id is not null AND l_app_id = 200 ');
6107 -- =============== END DEBUG LOG ==================
6108
6109 SELECT invoice_num
6110 INTO l_failed_trx
6111 FROM ap_invoices
6112 WHERE invoice_id = l_trx_id;
6113
6114 -- =============== START DEBUG LOG ================
6115 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg10',
6116 ' l_failed_trx --> ' || l_failed_trx);
6117 -- =============== END DEBUG LOG ==================
6118
6119 ELSIF (l_app_id = 222) THEN
6120
6121 -- =============== START DEBUG LOG ================
6122 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg11',
6123 ' l_trx_id is not null AND l_app_id = 222 ');
6124 -- =============== END DEBUG LOG ==================
6125
6126 SELECT trx_number
6127 INTO l_failed_trx
6128 FROM ra_customer_trx
6129 WHERE customer_trx_id = l_trx_id;
6130
6131 -- =============== START DEBUG LOG ================
6132 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg12',
6133 ' l_failed_trx --> ' || l_failed_trx);
6134 -- =============== END DEBUG LOG ==================
6135
6136 END IF;
6137 END IF;
6138
6139
6140 -- Set the failed_du attribute
6141 wf_engine.SetItemAttrText ( itemtype => itemtype,
6142 itemkey => itemkey,
6143 aname => 'FAILED_DU',
6144 avalue => l_failed_du);
6145
6146 -- =============== START DEBUG LOG ================
6147 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg13',
6148 ' SetItemAttrText FAILED_DU --> ' || l_failed_du);
6149 -- =============== END DEBUG LOG ==================
6150
6151 -- Set the failed_trx attribute
6152 wf_engine.SetItemAttrText ( itemtype => itemtype,
6153 itemkey => itemkey,
6154 aname => 'FAILED_TRX',
6155 avalue => l_failed_trx);
6156
6157 -- =============== START DEBUG LOG ================
6158 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg14',
6159 ' SetItemAttrText FAILED_TRX --> ' || l_failed_trx);
6160 -- =============== END DEBUG LOG ==================
6161
6162 -- Want the trx_failed_error_message to be a list of du_ids which
6163 -- failed along with the error message for each du
6164 -- Therefore, get the current item attribute trx_failed_error_message
6165 -- and append this DU_ID and error message to it.
6166
6167 -- Get the current error message
6168 l_trx_failed_err_mess
6169 := wf_engine.GetItemAttrText ( itemtype => itemtype,
6170 itemkey => itemkey,
6171 aname => 'TRX_FAILED_ERROR_MESSAGE');
6172
6173 -- =============== START DEBUG LOG ================
6174 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg15',
6175 ' GetItemAttrText TRX_FAILED_ERROR_MESSAGE --> ' || l_trx_failed_err_mess);
6176 -- =============== END DEBUG LOG ==================
6177
6178
6179 -- Append this DU and error message to it
6180 l_trx_failed_err_mess := l_trx_failed_err_mess||', '||to_char(l_du_id)||l_error_message;
6181
6182 -- =============== START DEBUG LOG ================
6183 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg16',
6184 ' l_trx_failed_err_mess --> ' || l_trx_failed_err_mess);
6185 -- =============== END DEBUG LOG ==================
6186
6187 -- Set the trx_failed_error_message attribute
6188 wf_engine.SetItemAttrText ( itemtype => itemtype,
6189 itemkey => itemkey,
6190 aname => 'TRX_FAILED_ERROR_MESSAGE',
6191 avalue => l_trx_failed_err_mess);
6192
6193 -- =============== START DEBUG LOG ================
6194 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg17',
6195 ' SetItemAttrText TRX_FAILED_ERROR_MESSAGE --> ' || l_trx_failed_err_mess);
6196 -- =============== END DEBUG LOG ==================
6197
6198 -- Set the result to 'Failure'
6199 result := 'COMPLETE:FAILURE';
6200
6201 ELSE
6202 result := 'COMPLETE:SUCCESS';
6203
6204 END IF;
6205
6206 -- =============== START DEBUG LOG ================
6207 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg18',
6208 ' result --> ' || result);
6209 -- =============== END DEBUG LOG ==================
6210
6211 END IF;
6212
6213 IF (funcmode <> 'RUN') THEN
6214 result := 'COMPLETE';
6215 -- =============== START DEBUG LOG ================
6216 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg19',
6217 ' funcmode <> RUN -- result --> ' || result);
6218 -- =============== END DEBUG LOG ==================
6219 return;
6220 END IF;
6221
6222 -- =============== START DEBUG LOG ================
6223 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg20',
6224 ' ** END PROCESS_TRANSACTIONS ** ');
6225 -- =============== END DEBUG LOG ==================
6226
6227 EXCEPTION
6228 WHEN OTHERS THEN
6229 wf_core.context('IGI_EXP_APPROVAL_PKG','process_transactions',itemtype,itemkey,
6230 to_char(actid),funcmode);
6231 -- =============== START DEBUG LOG ================
6232 DEBUG_LOG_UNEXP_ERROR ('Process_transactions.Unexp1','DEFAULT');
6233 -- =============== END DEBUG LOG ==================
6234 raise;
6235
6236 END process_transactions;
6237
6238
6239 -- *************************************************************************
6240 -- SET_DU_TO_COMPLETE
6241 -- *************************************************************************
6242
6243 PROCEDURE set_du_to_complete ( itemtype IN VARCHAR2,
6244 itemkey IN VARCHAR2,
6245 actid IN NUMBER,
6246 funcmode IN VARCHAR2,
6247 result OUT NOCOPY VARCHAR2) IS
6248
6249 l_du_id igi_exp_dus.du_id%TYPE;
6250
6251 BEGIN
6252
6253 -- =============== START DEBUG LOG ================
6254 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6255 ' ** START SET_DU_TO_COMPLETE ** ');
6256 -- =============== END DEBUG LOG ==================
6257
6258 IF (funcmode = 'RUN') THEN
6259
6260 -- Get the DU id
6261 l_du_id
6262 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6263 itemkey => itemkey,
6264 aname => 'DU_ID_FOR_COMPLETION');
6265
6266 -- =============== START DEBUG LOG ================
6267 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6268 ' GetItemAttrNumber DU_ID_FOR_COMPLETION --> '|| l_du_id);
6269 -- =============== END DEBUG LOG ==================
6270
6271 UPDATE igi_exp_dus
6272 SET du_status = 'COM'
6273 WHERE du_id = l_du_id;
6274
6275 -- =============== START DEBUG LOG ================
6276 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6277 ' UPDATE igi_exp_dus status - COM --> ' || SQL%ROWCOUNT);
6278 -- =============== END DEBUG LOG ==================
6279
6280 END IF;
6281
6282 IF (funcmode <> 'RUN') THEN
6283 result := 'COMPLETE';
6284 -- =============== START DEBUG LOG ================
6285 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6286 ' funcmode <> RUN -- result --> ' || result);
6287 -- =============== END DEBUG LOG ==================
6288 return;
6289 END IF;
6290
6291 -- =============== START DEBUG LOG ================
6292 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6293 ' ** END SET_DU_TO_COMPLETE ** ');
6294 -- =============== END DEBUG LOG ==================
6295
6296 EXCEPTION
6297 WHEN OTHERS THEN
6298 wf_core.context('IGI_EXP_APPROVAL_PKG','set_du_to_complete',itemtype,itemkey,
6299 to_char(actid),funcmode);
6300 -- =============== START DEBUG LOG ================
6301 DEBUG_LOG_UNEXP_ERROR ('Set_du_to_complete.Unexp1','DEFAULT');
6302 -- =============== END DEBUG LOG ==================
6303 raise;
6304
6305 END set_du_to_complete;
6306
6307
6308
6309 -- *************************************************************************
6310 -- PUT_FAILED_DU_ON_HOLD
6311 -- *************************************************************************
6312
6313 PROCEDURE put_failed_du_on_hold( itemtype IN VARCHAR2,
6314 itemkey IN VARCHAR2,
6315 actid IN NUMBER,
6316 funcmode IN VARCHAR2,
6317 result OUT NOCOPY VARCHAR2) IS
6318
6319 l_du_id igi_exp_dus.du_id%TYPE;
6320
6321 BEGIN
6322
6323 -- =============== START DEBUG LOG ================
6324 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg1',
6325 ' ** START PUT_FAILED_DU_ON_HOLD ** ');
6326 -- =============== END DEBUG LOG ==================
6327
6328 IF (funcmode = 'RUN') THEN
6329
6330 -- Get the DU id
6331 l_du_id
6332 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6333 itemkey => itemkey,
6334 aname => 'DU_ID_FOR_COMPLETION');
6335
6336 -- =============== START DEBUG LOG ================
6337 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg2',
6338 ' GetItemAttrNumber DU_ID_FOR_COMPLETION --> ' || l_du_id);
6339 -- =============== END DEBUG LOG ==================
6340
6341 UPDATE igi_exp_dus
6342 SET du_status = 'HLD'
6343 WHERE du_id = l_du_id;
6344
6345 -- =============== START DEBUG LOG ================
6346 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg3',
6347 ' UPDATE igi_exp_dus du_status = HLD --> ' || SQL%ROWCOUNT);
6348 -- =============== END DEBUG LOG ==================
6349
6350 END IF;
6351
6352 IF (funcmode <> 'RUN') THEN
6353 result := 'COMPLETE';
6354 -- =============== START DEBUG LOG ================
6355 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg4',
6356 ' funcmode <> RUN -- result --> ' || result);
6357 -- =============== END DEBUG LOG ==================
6358 return;
6359 END IF;
6360
6361 -- =============== START DEBUG LOG ================
6362 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg5',
6363 ' ** END PUT_FAILED_DU_ON_HOLD ** ');
6364 -- =============== END DEBUG LOG ==================
6365
6366 EXCEPTION
6367 WHEN OTHERS THEN
6368 wf_core.context('IGI_EXP_APPROVAL_PKG','put_failed_du_on_hold',itemtype,itemkey,
6369 to_char(actid),funcmode);
6370 -- =============== START DEBUG LOG ================
6371 DEBUG_LOG_UNEXP_ERROR ('Put_failed_du_on_hold.Unexp1','DEFAULT');
6372 -- =============== END DEBUG LOG ==================
6373 raise;
6374
6375 END put_failed_du_on_hold;
6376
6377
6378 -- *************************************************************************
6379 -- CHECK_DUS_COMPLETED
6380 -- *************************************************************************
6381
6382 PROCEDURE check_dus_completed ( itemtype IN VARCHAR2,
6383 itemkey IN VARCHAR2,
6384 actid IN NUMBER,
6385 funcmode IN VARCHAR2,
6386 result OUT NOCOPY VARCHAR2) IS
6387
6388 l_tu_id igi_exp_dus.tu_id%TYPE;
6389 l_incom_count NUMBER;
6390
6391 BEGIN
6392
6393 -- =============== START DEBUG LOG ================
6394 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg1',
6395 ' ** START CHECK_DUS_COMPLETED ** ');
6396 -- =============== END DEBUG LOG ==================
6397
6398 IF (funcmode = 'RUN') THEN
6399
6400 -- Get the TU id
6401 l_tu_id
6402 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6403 itemkey => itemkey,
6404 aname => 'TU_ID');
6405
6406 -- =============== START DEBUG LOG ================
6407 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg2',
6408 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6409 -- =============== END DEBUG LOG ==================
6410
6411 SELECT count(*)
6412 INTO l_incom_count
6413 FROM igi_exp_dus
6414 WHERE tu_id = l_tu_id
6415 AND du_status = 'ATR';
6416
6417 -- =============== START DEBUG LOG ================
6418 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg3',
6419 ' l_incom_count --> ' || l_incom_count);
6420 -- =============== END DEBUG LOG ==================
6421
6422
6423 IF (l_incom_count = 0) THEN
6424 -- There are no more DUs left waiting completion
6425 -- Set the result to 'No'
6426 result := 'COMPLETE:N';
6427 ELSE
6428 -- There is at least one DU waiting completion
6429 -- Set the result to 'Yes'
6430 result := 'COMPLETE:Y';
6431 END IF;
6432
6433 -- =============== START DEBUG LOG ================
6434 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg4',
6435 ' result --> ' || result);
6436 -- =============== END DEBUG LOG ==================
6437
6438 END IF;
6439
6440 IF (funcmode <> 'RUN') THEN
6441 result := 'COMPLETE';
6442 -- =============== START DEBUG LOG ================
6443 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg5',
6444 ' funcmode <> RUN -- result --> ' || result);
6445 -- =============== END DEBUG LOG ==================
6446 return;
6447 END IF;
6448
6449 -- =============== START DEBUG LOG ================
6450 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg6',
6451 ' ** END CHECK_DUS_COMPLETED ** ');
6452 -- =============== END DEBUG LOG ==================
6453
6454 EXCEPTION
6455 WHEN OTHERS THEN
6456 wf_core.context('IGI_EXP_APPROVAL_PKG','check_dus_completed',itemtype,itemkey,
6457 to_char(actid),funcmode);
6458 -- =============== START DEBUG LOG ================
6459 DEBUG_LOG_UNEXP_ERROR ('Check_dus_completed.Unexp1','DEFAULT');
6460 -- =============== END DEBUG LOG ==================
6461 raise;
6462 END check_dus_completed;
6463
6464
6465
6466 -- *************************************************************************
6467 -- ANY_DUS_WITH_TRX_FAIL
6468 -- *************************************************************************
6469
6470 PROCEDURE any_dus_with_trx_fail( itemtype IN VARCHAR2,
6471 itemkey IN VARCHAR2,
6472 actid IN NUMBER,
6473 funcmode IN VARCHAR2,
6474 result OUT NOCOPY VARCHAR2) IS
6475
6476
6477 l_tu_id igi_exp_dus.tu_id%TYPE;
6478 l_failed_du_count NUMBER;
6479 l_du_hold_list VARCHAR2(28000);
6480
6481 CURSOR c_du_hold_info(p_tu_id igi_exp_dus.tu_id%TYPE)
6482 IS
6483 SELECT du_order_number
6484 ,du_legal_number
6485 FROM igi_exp_dus
6486 WHERE tu_id = p_tu_id
6487 AND du_status = 'HLD';
6488
6489 BEGIN
6490
6491 -- =============== START DEBUG LOG ================
6492 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg1',
6493 ' ** START ANY_DUS_WITH_TRX_FAIL ** ');
6494 -- =============== END DEBUG LOG ==================
6495
6496 IF (funcmode = 'RUN') THEN
6497
6498 -- Get the TU id
6499 l_tu_id
6500 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6501 itemkey => itemkey,
6502 aname => 'TU_ID');
6503
6504 -- =============== START DEBUG LOG ================
6505 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg2',
6506 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6507 -- =============== END DEBUG LOG ==================
6508
6509 SELECT count(*)
6510 INTO l_failed_du_count
6511 FROM igi_exp_dus
6512 WHERE tu_id = l_tu_id
6513 AND du_status = 'HLD';
6514
6515 -- =============== START DEBUG LOG ================
6516 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg3',
6517 ' l_failed_du_count --> ' || l_failed_du_count);
6518 -- =============== END DEBUG LOG ==================
6519
6520 IF (l_failed_du_count = 0) THEN
6521 -- No DUs were put on hold due to transaction failure
6522 -- Set the result to 'No'
6523 result := 'COMPLETE:N';
6524
6525 -- =============== START DEBUG LOG ================
6526 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg4',
6527 ' result --> ' || result);
6528 -- =============== END DEBUG LOG ==================
6529
6530 ELSE
6531
6532 FOR I IN c_du_hold_info(l_tu_id)
6533 LOOP
6534
6535 IF (l_du_hold_list is NULL) THEN
6536 l_du_hold_list := I.du_order_number;
6537 ELSE
6538 l_du_hold_list := l_du_hold_list ||I.du_order_number;
6539 END IF;
6540
6541 -- =============== START DEBUG LOG ================
6542 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg5',
6543 ' du_order_number --> ' || I.du_order_number);
6544 -- =============== END DEBUG LOG ==================
6545
6546 IF (I.du_legal_number is not null) THEN
6547 l_du_hold_list := l_du_hold_list||' ('||I.du_legal_number||')';
6548 END IF;
6549
6550 -- =============== START DEBUG LOG ================
6551 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg6',
6552 ' I.du_legal_number --> ' || I.du_legal_number);
6553 -- =============== END DEBUG LOG ==================
6554
6555 l_du_hold_list := l_du_hold_list||fnd_global.local_chr(10);
6556
6557 IF LENGTH(l_du_hold_list) > 28000 THEN
6558 exit;
6559 END IF;
6560
6561 END LOOP;
6562
6563 -- Set the all_dus_list attribute
6564 wf_engine.SetItemAttrText ( itemtype => itemtype,
6565 itemkey => itemkey,
6566 aname => 'ADD_ATTR1',
6567 avalue => substr(l_du_hold_list, 1, 4000));
6568
6569 -- =============== START DEBUG LOG ================
6570 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg7',
6571 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_du_hold_list, 1, 4000));
6572 -- =============== END DEBUG LOG ==================
6573
6574 wf_engine.SetItemAttrText ( itemtype => itemtype,
6575 itemkey => itemkey,
6576 aname => 'ADD_ATTR2',
6577 avalue => substr(l_du_hold_list, 4001, 4000));
6578
6579 -- =============== START DEBUG LOG ================
6580 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg8',
6581 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_du_hold_list, 4001, 4000));
6582 -- =============== END DEBUG LOG ==================
6583
6584 wf_engine.SetItemAttrText ( itemtype => itemtype,
6585 itemkey => itemkey,
6586 aname => 'ADD_ATTR3',
6587 avalue => substr(l_du_hold_list, 8001, 4000));
6588
6589 -- =============== START DEBUG LOG ================
6590 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg9',
6591 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_hold_list, 8001, 4000));
6592 -- =============== END DEBUG LOG ==================
6593
6594 wf_engine.SetItemAttrText ( itemtype => itemtype,
6595 itemkey => itemkey,
6596 aname => 'ADD_ATTR4',
6597 avalue => substr(l_du_hold_list, 12001, 4000));
6598
6599 -- =============== START DEBUG LOG ================
6600 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg10',
6601 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_du_hold_list, 12001, 4000));
6602 -- =============== END DEBUG LOG ==================
6603
6604 wf_engine.SetItemAttrText ( itemtype => itemtype,
6605 itemkey => itemkey,
6606 aname => 'ADD_ATTR5',
6607 avalue => substr(l_du_hold_list, 16001, 4000));
6608
6609 -- =============== START DEBUG LOG ================
6610 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg11',
6611 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_du_hold_list, 16001, 4000));
6612 -- =============== END DEBUG LOG ==================
6613
6614 wf_engine.SetItemAttrText ( itemtype => itemtype,
6615 itemkey => itemkey,
6616 aname => 'ADD_ATTR6',
6617 avalue => substr(l_du_hold_list, 20001, 4000));
6618
6619 -- =============== START DEBUG LOG ================
6620 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg12',
6621 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_du_hold_list, 20001, 4000));
6622 -- =============== END DEBUG LOG ==================
6623
6624 wf_engine.SetItemAttrText ( itemtype => itemtype,
6625 itemkey => itemkey,
6626 aname => 'ADD_ATTR7',
6627 avalue => substr(l_du_hold_list, 24001, 4000));
6628
6629 -- =============== START DEBUG LOG ================
6630 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg13',
6631 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_du_hold_list, 24001, 4000));
6632 -- =============== END DEBUG LOG ==================
6633
6634 wf_engine.SetItemAttrText ( itemtype => itemtype,
6635 itemkey => itemkey,
6636 aname => 'ALL_DUS_LIST',
6637 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
6638
6639
6640 -- =============== START DEBUG LOG ================
6641 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg14',
6642 ' SetItemAttrText ALL_DUS_LIST --> ' ||
6643 ' plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
6644 -- =============== END DEBUG LOG ==================
6645
6646 -- Set the result to 'Yes'
6647 result := 'COMPLETE:Y';
6648
6649 -- =============== START DEBUG LOG ================
6650 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg15',
6651 ' result --> ' || result);
6652 -- =============== END DEBUG LOG ==================
6653
6654 END IF;
6655
6656 END IF;
6657
6658 IF (funcmode <> 'RUN') THEN
6659 result := 'COMPLETE';
6660 -- =============== START DEBUG LOG ================
6661 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg16',
6662 ' funcmode <> RUN -- result --> ' || result);
6663 -- =============== END DEBUG LOG ==================
6664 return;
6665 END IF;
6666
6667 -- =============== START DEBUG LOG ================
6668 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg17',
6669 ' ** END ANY_DUS_WITH_TRX_FAIL ** ');
6670 -- =============== END DEBUG LOG ==================
6671
6672 EXCEPTION
6673 WHEN OTHERS THEN
6674 wf_core.context('IGI_EXP_APPROVAL_PKG','any_dus_with_trx_fail',itemtype,itemkey,
6675 to_char(actid),funcmode);
6676 -- =============== START DEBUG LOG ================
6677 DEBUG_LOG_UNEXP_ERROR ('Any_dus_with_trx_fail.Unexp1','DEFAULT');
6678 -- =============== END DEBUG LOG ==================
6679 raise;
6680
6681 END any_dus_with_trx_fail;
6682
6683
6684
6685 -- *************************************************************************
6686 -- REMOVE_ALL_ON_HOLD_DUS
6687 -- *************************************************************************
6688
6689 PROCEDURE remove_all_on_hold_dus( itemtype IN VARCHAR2,
6690 itemkey IN VARCHAR2,
6691 actid IN NUMBER,
6692 funcmode IN VARCHAR2,
6693 result OUT NOCOPY VARCHAR2) IS
6694
6695 l_tu_id igi_exp_dus.tu_id%TYPE;
6696 l_du_amount igi_exp_dus.du_amount%TYPE;
6697
6698 BEGIN
6699
6700 -- =============== START DEBUG LOG ================
6701 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg1',
6702 ' ** START REMOVE_ALL_ON_HOLD_DUS ** ');
6703 -- =============== END DEBUG LOG ==================
6704
6705 IF (funcmode = 'RUN') THEN
6706
6707 -- Get the TU id
6708 l_tu_id
6709 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6710 itemkey => itemkey,
6711 aname => 'TU_ID');
6712
6713 -- =============== START DEBUG LOG ================
6714 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg2',
6715 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6716 -- =============== END DEBUG LOG ==================
6717
6718 -- OPSF(I) EXP Bug 2415293 S Brewer 18-JUL-2002 Start(3)
6719 -- Before removing the DUs which were put on hold, we need
6720 -- to update the TU amount to reflect the DUs were removed
6721 -- So, find the total DU amount for the DUs to be removed
6722 -- and update the TU amount
6723 -- i.e. New TU amount = TU amount - DU amount
6724
6725 -- Find the total DU amount
6726 SELECT sum(du_amount)
6727 INTO l_du_amount
6728 FROM igi_exp_dus
6729 WHERE tu_id = l_tu_id
6730 AND du_status = 'HLD';
6731
6732 -- =============== START DEBUG LOG ================
6733 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg3',
6734 ' l_du_amount --> ' || l_du_amount);
6735 -- =============== END DEBUG LOG ==================
6736
6737 -- Now update the TU amount
6738 UPDATE igi_exp_tus
6739 SET tu_amount = tu_amount - l_du_amount
6740 WHERE tu_id = l_tu_id;
6741
6742 -- =============== START DEBUG LOG ================
6743 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg4',
6744 ' UPDATE igi_exp_tus -> ' || SQL%ROWCOUNT);
6745 -- =============== END DEBUG LOG ==================
6746
6747
6748 -- OPSF(I) EXP Bug 2415293 S Brewer 18-JUL-2002 End(3)
6749
6750 -- Remove the DUs which were put on hold (due to transaction
6751 -- completion failure) from the TU
6752 UPDATE igi_exp_dus
6753 SET tu_id = null
6754 WHERE tu_id = l_tu_id
6755 AND du_status = 'HLD';
6756
6757 -- =============== START DEBUG LOG ================
6758 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg5',
6759 ' UPDATE igi_exp_dus status = HLD --> ' || SQL%ROWCOUNT);
6760 -- =============== END DEBUG LOG ==================
6761
6762 END IF;
6763
6764 IF (funcmode <> 'RUN') THEN
6765 result := 'COMPLETE';
6766 -- =============== START DEBUG LOG ================
6767 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg6',
6768 ' funcmode <> RUN -- result --> ' || result);
6769 -- =============== END DEBUG LOG ==================
6770 return;
6771 END IF;
6772
6773 -- =============== START DEBUG LOG ================
6774 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg7',
6775 ' ** END REMOVE_ALL_ON_HOLD_DUS ** ');
6776 -- =============== END DEBUG LOG ==================
6777
6778 EXCEPTION
6779 WHEN OTHERS THEN
6780 wf_core.context('IGI_EXP_APPROVAL_PKG','remove_all_on_hold_dus',itemtype,itemkey,
6781 to_char(actid),funcmode);
6782 -- =============== START DEBUG LOG ================
6783 DEBUG_LOG_UNEXP_ERROR ('Remove_all_on_hold_dus.Unexp1','DEFAULT');
6784 -- =============== END DEBUG LOG ==================
6785 raise;
6786
6787 END remove_all_on_hold_dus;
6788
6789
6790
6791 -- *************************************************************************
6792 -- CHECK_FOR_COMPLETE_DUS
6793 -- *************************************************************************
6794
6795 PROCEDURE check_for_complete_dus( itemtype IN VARCHAR2,
6796 itemkey IN VARCHAR2,
6797 actid IN NUMBER,
6798 funcmode IN VARCHAR2,
6799 result OUT NOCOPY VARCHAR2) IS
6800
6801 l_tu_id igi_exp_dus.tu_id%TYPE;
6802 l_com_du_count NUMBER;
6803
6804 BEGIN
6805
6806 -- =============== START DEBUG LOG ================
6807 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg1',
6808 ' ** START CHECK_FOR_COMPLETE_DUS ** ');
6809 -- =============== END DEBUG LOG ==================
6810
6811 IF (funcmode = 'RUN') THEN
6812
6813 -- Get the TU id
6814 l_tu_id
6815 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6816 itemkey => itemkey,
6817 aname => 'TU_ID');
6818
6819 -- =============== START DEBUG LOG ================
6820 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg2',
6821 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6822 -- =============== END DEBUG LOG ==================
6823
6824 SELECT count(*)
6825 INTO l_com_du_count
6826 FROM igi_exp_dus
6827 WHERE tu_id = l_tu_id
6828 AND du_status = 'COM';
6829
6830 -- =============== START DEBUG LOG ================
6831 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg3',
6832 ' l_com_du_count --> ' || l_com_du_count);
6833 -- =============== END DEBUG LOG ==================
6834
6835 IF (l_com_du_count = 0) THEN
6836 -- There are no completed DUs in this TU
6837 -- Set result to 'No'
6838 result := 'COMPLETE:N';
6839 ELSE
6840 -- There is at least one completed DU in this TU
6841 -- Set result to 'Yes'
6842 result := 'COMPLETE:Y';
6843 END IF;
6844
6845 -- =============== START DEBUG LOG ================
6846 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg4',
6847 ' result --> ' || result);
6848 -- =============== END DEBUG LOG ==================
6849 END IF;
6850
6851 IF (funcmode <> 'RUN') THEN
6852 result := 'COMPLETE';
6853 -- =============== START DEBUG LOG ================
6854 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg5',
6855 'funcmode <> RUN -- result --> ' || result);
6856 -- =============== END DEBUG LOG ==================
6857 return;
6858 END IF;
6859
6860 -- =============== START DEBUG LOG ================
6861 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg6',
6862 ' ** END CHECK_FOR_COMPLETE_DUS ** ');
6863 -- =============== END DEBUG LOG ==================
6864
6865 EXCEPTION
6866 WHEN OTHERS THEN
6867 wf_core.context('IGI_EXP_APPROVAL_PKG','check_for_complete_dus',itemtype,itemkey,
6868 to_char(actid),funcmode);
6869 -- =============== START DEBUG LOG ================
6870 DEBUG_LOG_UNEXP_ERROR ('Check_for_complete_dus.Unexp1','DEFAULT');
6871 -- =============== END DEBUG LOG ==================
6872 raise;
6873 END check_for_complete_dus;
6874
6875
6876
6877 -- *************************************************************************
6878 -- BUILD_PREP_LIST_OF_COM_DUS
6879 -- *************************************************************************
6880
6881 PROCEDURE build_prep_list_of_com_dus( itemtype IN VARCHAR2,
6882 itemkey IN VARCHAR2,
6883 actid IN NUMBER,
6884 funcmode IN VARCHAR2,
6885 result OUT NOCOPY VARCHAR2) IS
6886
6887 CURSOR c_prep_list(p_tu_id igi_exp_dus.tu_id%TYPE)
6888 IS
6889 SELECT distinct du_by_user_id
6890 FROM igi_exp_dus
6891 WHERE tu_id = p_tu_id
6892 AND du_status = 'COM';
6893
6894 l_tu_id igi_exp_dus.tu_id%TYPE;
6895 l_user_id igi_exp_dus.du_by_user_id%TYPE;
6896 l_user_list VARCHAR2(1000);
6897
6898
6899 BEGIN
6900
6901 -- =============== START DEBUG LOG ================
6902 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg1',
6903 ' ** START BUILD_PREP_LIST_OF_COM_DUS ** ');
6904 -- =============== END DEBUG LOG ==================
6905
6906 IF (funcmode = 'RUN') THEN
6907
6908 -- Get the TU id
6909 l_tu_id
6910 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6911 itemkey => itemkey,
6912 aname => 'TU_ID');
6913
6914 -- =============== START DEBUG LOG ================
6915 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg2',
6916 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6917 -- =============== END DEBUG LOG ==================
6918
6919 OPEN c_prep_list(l_tu_id);
6920 LOOP
6921 FETCH c_prep_list INTO l_user_id;
6922 EXIT WHEN c_prep_list%NOTFOUND;
6923 l_user_list := l_user_list||','||l_user_id;
6924 -- =============== START DEBUG LOG ================
6925 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg3',
6926 ' l_user_list --> ' || l_user_list);
6927 -- =============== END DEBUG LOG ==================
6928 END LOOP;
6929 CLOSE c_prep_list;
6930
6931 -- Set the all_dus_list attribute
6932 wf_engine.SetItemAttrText ( itemtype => itemtype,
6933 itemkey => itemkey,
6934 aname => 'COM_DU_PREP_LIST',
6935 avalue => l_user_list);
6936
6937 -- =============== START DEBUG LOG ================
6938 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg4',
6939 ' SetItemAttrText COM_DU_PREP_LIST --> ' || l_user_list);
6940 -- =============== END DEBUG LOG ==================
6941
6942 END IF;
6943
6944 IF (funcmode <> 'RUN') THEN
6945 result := 'COMPLETE';
6946 -- =============== START DEBUG LOG ================
6947 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg5',
6948 ' funcmode <> RUN -- result --> ' || result);
6949 -- =============== END DEBUG LOG ==================
6950 return;
6951 END IF;
6952
6953 -- =============== START DEBUG LOG ================
6954 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg6',
6955 ' ** END BUILD_PREP_LIST_OF_COM_DUS ** ');
6956 -- =============== END DEBUG LOG ==================
6957
6958 EXCEPTION
6959 WHEN OTHERS THEN
6960 wf_core.context('IGI_EXP_APPROVAL_PKG','build_prep_list_of_com_dus',itemtype,itemkey,
6961 to_char(actid),funcmode);
6962 -- =============== START DEBUG LOG ================
6963 DEBUG_LOG_UNEXP_ERROR ('Build_prep_list_of_com_dus.Unexp1','DEFAULT');
6964 -- =============== END DEBUG LOG ==================
6965 raise;
6966
6967 END build_prep_list_of_com_dus;
6968
6969 -- *************************************************************************
6970 -- GET_NEXT_PREP
6971 -- *************************************************************************
6972
6973 PROCEDURE get_next_prep ( itemtype IN VARCHAR2,
6974 itemkey IN VARCHAR2,
6975 actid IN NUMBER,
6976 funcmode IN VARCHAR2,
6977 result OUT NOCOPY VARCHAR2) IS
6978
6979 l_num NUMBER;
6980 l_prep_list VARCHAR2(1000);
6981 l_next_prep NUMBER;
6982 l_next_prep_name fnd_user.user_name%TYPE;
6983 l_tu_id igi_exp_dus.tu_id%TYPE;
6984
6985 l_com_du_list VARCHAR2(28000);
6986
6987 CURSOR c_com_dus(p_tu_id igi_exp_dus.tu_id%TYPE
6988 ,p_du_by_user_id igi_exp_dus.du_by_user_id%TYPE)
6989 IS
6990 SELECT du_order_number
6991 ,du_legal_number
6992 FROM igi_exp_dus
6993 WHERE tu_id = p_tu_id
6994 AND du_status = 'COM'
6995 AND du_by_user_id = p_du_by_user_id;
6996
6997
6998 BEGIN
6999
7000 -- =============== START DEBUG LOG ================
7001 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg1',
7002 ' ** START GET_NEXT_PREP ** ');
7003 -- =============== END DEBUG LOG ==================
7004
7005 IF (funcmode = 'RUN') THEN
7006
7007 -- Get the list of preparers of completed DUS
7008 l_prep_list
7009 := wf_engine.GetItemAttrText ( itemtype => itemtype,
7010 itemkey => itemkey,
7011 aname => 'COM_DU_PREP_LIST');
7012
7013 -- =============== START DEBUG LOG ================
7014 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg2',
7015 ' GetItemAttrText COM_DU_PREP_LIST --> ' || l_prep_list);
7016 -- =============== END DEBUG LOG ==================
7017
7018 IF (l_prep_list is null) THEN
7019 -- There are no more preparers in the list
7020 -- Set result to 'No More Preparers In List'
7021 result := 'COMPLETE:NO_PREPS_IN_LIST';
7022 -- =============== START DEBUG LOG ================
7023 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg3',
7024 ' l_prep_list is null -- result --> ' || result);
7025 -- =============== END DEBUG LOG ==================
7026 return;
7027 END IF;
7028
7029 l_num := INSTR(l_prep_list,',',-1);
7030
7031 -- =============== START DEBUG LOG ================
7032 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg4',
7033 ' l_num --> ' || l_num);
7034 -- =============== END DEBUG LOG ==================
7035
7036 IF (l_num = 0) THEN
7037 -- There is only one preparer left in list
7038 l_next_prep := l_prep_list;
7039 ELSE
7040 -- There is more than one preparer in list
7041 l_next_prep := SUBSTR(l_prep_list,l_num + 1);
7042 END IF;
7043
7044 -- =============== START DEBUG LOG ================
7045 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg5',
7046 ' l_next_prep --> ' || l_next_prep);
7047 -- =============== END DEBUG LOG ==================
7048
7049 -- Set the temp_du_preparer_id attribute
7050 wf_engine.SetItemAttrNumber( itemtype => itemtype,
7051 itemkey => itemkey,
7052 aname => 'TEMP_DU_PREPARER_ID',
7053 avalue => l_next_prep);
7054
7055 -- =============== START DEBUG LOG ================
7056 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg6',
7057 ' SetItemAttrNumber TEMP_DU_PREPARER_ID --> '||l_next_prep);
7058 -- =============== END DEBUG LOG ==================
7059
7060 SELECT user_name
7061 INTO l_next_prep_name
7062 FROM fnd_user
7063 WHERE user_id = l_next_prep;
7064
7065 -- =============== START DEBUG LOG ================
7066 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg7',
7067 ' l_next_prep_name --> ' || l_next_prep_name);
7068 -- =============== END DEBUG LOG ==================
7069
7070 -- Set the temp_du_preparer attribute
7071 wf_engine.SetItemAttrText ( itemtype => itemtype,
7072 itemkey => itemkey,
7073 aname => 'TEMP_DU_PREPARER_NAME',
7074 avalue => l_next_prep_name);
7075
7076 -- =============== START DEBUG LOG ================
7077 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg8',
7078 ' SetItemAttrText TEMP_DU_PREPARER_NAME --> ' || l_next_prep_name);
7079 -- =============== END DEBUG LOG ==================
7080
7081 -- Get the TU id
7082 l_tu_id
7083 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7084 itemkey => itemkey,
7085 aname => 'TU_ID');
7086
7087
7088 FOR I IN c_com_dus(l_tu_id, l_next_prep)
7089 LOOP
7090
7091 IF (l_com_du_list is NULL) THEN
7092 l_com_du_list := I.du_order_number;
7093 ELSE
7094 l_com_du_list := l_com_du_list ||I.du_order_number;
7095 END IF;
7096
7097 -- =============== START DEBUG LOG ================
7098 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg9',
7099 ' du_order_number --> ' || I.du_order_number);
7100 -- =============== END DEBUG LOG ==================
7101
7102 IF (I.du_legal_number is not null) THEN
7103 l_com_du_list := l_com_du_list||' ('||I.du_legal_number||')';
7104 END IF;
7105
7106 -- =============== START DEBUG LOG ================
7107 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg10',
7108 ' I.du_legal_number --> ' || I.du_legal_number);
7109 -- =============== END DEBUG LOG ==================
7110
7111 l_com_du_list := l_com_du_list||fnd_global.local_chr(10);
7112
7113 IF LENGTH(l_com_du_list) > 28000 THEN
7114 exit;
7115 END IF;
7116
7117 END LOOP;
7118
7119
7120 -- Set the all_dus_list attribute
7121 wf_engine.SetItemAttrText ( itemtype => itemtype,
7122 itemkey => itemkey,
7123 aname => 'ADD_ATTR1',
7124 avalue => substr(l_com_du_list, 1, 4000));
7125
7126 -- =============== START DEBUG LOG ================
7127 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg11',
7128 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_com_du_list, 1, 4000));
7129 -- =============== END DEBUG LOG ==================
7130
7131 wf_engine.SetItemAttrText ( itemtype => itemtype,
7132 itemkey => itemkey,
7133 aname => 'ADD_ATTR2',
7134 avalue => substr(l_com_du_list, 4001, 4000));
7135
7136 -- =============== START DEBUG LOG ================
7137 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg12',
7138 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_com_du_list, 4001, 4000));
7139 -- =============== END DEBUG LOG ==================
7140
7141 wf_engine.SetItemAttrText ( itemtype => itemtype,
7142 itemkey => itemkey,
7143 aname => 'ADD_ATTR3',
7144 avalue => substr(l_com_du_list, 8001, 4000));
7145
7146 -- =============== START DEBUG LOG ================
7147 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg13',
7148 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_com_du_list, 8001, 4000));
7149 -- =============== END DEBUG LOG ==================
7150
7151 wf_engine.SetItemAttrText ( itemtype => itemtype,
7152 itemkey => itemkey,
7153 aname => 'ADD_ATTR4',
7154 avalue => substr(l_com_du_list, 12001, 4000));
7155
7156 -- =============== START DEBUG LOG ================
7157 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg14',
7158 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_com_du_list, 12001, 4000));
7159 -- =============== END DEBUG LOG ==================
7160
7161 wf_engine.SetItemAttrText ( itemtype => itemtype,
7162 itemkey => itemkey,
7163 aname => 'ADD_ATTR5',
7164 avalue => substr(l_com_du_list, 16001, 4000));
7165
7166 -- =============== START DEBUG LOG ================
7167 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg15',
7168 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_com_du_list, 16001, 4000));
7169 -- =============== END DEBUG LOG ==================
7170
7171 wf_engine.SetItemAttrText ( itemtype => itemtype,
7172 itemkey => itemkey,
7173 aname => 'ADD_ATTR6',
7174 avalue => substr(l_com_du_list, 20001, 4000));
7175
7176 -- =============== START DEBUG LOG ================
7177 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg16',
7178 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_com_du_list, 20001, 4000));
7179 -- =============== END DEBUG LOG ==================
7180
7181 wf_engine.SetItemAttrText ( itemtype => itemtype,
7182 itemkey => itemkey,
7183 aname => 'ADD_ATTR7',
7184 avalue => substr(l_com_du_list, 24001, 4000));
7185
7186
7187 -- =============== START DEBUG LOG ================
7188 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg17',
7189 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_com_du_list, 24001, 4000));
7190 -- =============== END DEBUG LOG ==================
7191
7192 wf_engine.SetItemAttrText(itemtype => itemtype,
7193 itemkey => itemkey,
7194 aname => 'TEMP_DU_BY_PREP_LIST',
7195 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
7196
7197 -- =============== START DEBUG LOG ================
7198 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg18',
7199 ' SetItemAttrText TEMP_DU_BY_PREP_LIST --> ' ||
7200 ' plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
7201 -- =============== END DEBUG LOG ==================
7202
7203 -- Set the result to 'Next Preparer Fetched'
7204 result := 'COMPLETE:NEXT_PREP_FETCHED';
7205
7206 -- =============== START DEBUG LOG ================
7207 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg19',
7208 ' result --> ' || result);
7209 -- =============== END DEBUG LOG ==================
7210
7211 END IF;
7212
7213 IF (funcmode <> 'RUN') THEN
7214 result := 'COMPLETE';
7215 -- =============== START DEBUG LOG ================
7216 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg20',
7217 ' funcmode <> RUN -- result --> ' || result);
7218 -- =============== END DEBUG LOG ==================
7219 return;
7220 END IF;
7221
7222 -- =============== START DEBUG LOG ================
7223 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg21',
7224 ' ** END GET_NEXT_PREP ** ');
7225 -- =============== END DEBUG LOG ==================
7226
7227 EXCEPTION
7228 WHEN OTHERS THEN
7229 wf_core.context('IGI_EXP_APPROVAL_PKG','get_next_prep',itemtype,itemkey,
7230 to_char(actid),funcmode);
7231 -- =============== START DEBUG LOG ================
7232 DEBUG_LOG_UNEXP_ERROR ('Get_next_prep.Unexp1','DEFAULT');
7233 -- =============== END DEBUG LOG ==================
7234 raise;
7235
7236 END get_next_prep;
7237
7238
7239
7240 -- *************************************************************************
7241 -- REMOVE_PREP_FROM_LIST
7242 -- *************************************************************************
7243
7244 PROCEDURE remove_prep_from_list( itemtype IN VARCHAR2,
7245 itemkey IN VARCHAR2,
7246 actid IN NUMBER,
7247 funcmode IN VARCHAR2,
7248 result OUT NOCOPY VARCHAR2) IS
7249
7250 l_num NUMBER;
7251 l_prep_list VARCHAR2(1000);
7252 l_new_prep_list VARCHAR2(1000);
7253
7254 BEGIN
7255
7256 -- =============== START DEBUG LOG ================
7257 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg1',
7258 ' ** START REMOVE_PREP_FROM_LIST ** ');
7259 -- =============== END DEBUG LOG ==================
7260
7261 IF (funcmode = 'RUN') THEN
7262
7263 -- Get the list of preparers of completed dus
7264 l_prep_list
7265 := wf_engine.GetItemAttrText ( itemtype => itemtype,
7266 itemkey => itemkey,
7267 aname => 'COM_DU_PREP_LIST');
7268
7269 -- =============== START DEBUG LOG ================
7270 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg2',
7271 ' GetItemAttrText COM_DU_PREP_LIST --> ' || l_prep_list);
7272 -- =============== END DEBUG LOG ==================
7273
7274 -- This will remove the last preparer id from the list
7275 l_num := INSTR(l_prep_list,',',-1);
7276 l_new_prep_list := SUBSTR(l_prep_list,1,l_num-1);
7277
7278 -- =============== START DEBUG LOG ================
7279 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg3',
7280 ' l_num --> ' || l_num || ' l_new_prep_list --> ' || l_new_prep_list);
7281 -- =============== END DEBUG LOG ==================
7282
7283 -- Set the com_du_prep_list attribute to the new list
7284 wf_engine.SetItemAttrText ( itemtype => itemtype,
7285 itemkey => itemkey,
7286 aname => 'COM_DU_PREP_LIST',
7287 avalue => l_new_prep_list);
7288
7289 -- =============== START DEBUG LOG ================
7290 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg4',
7291 ' SetItemAttrText COM_DU_PREP_LIST --> ' || l_new_prep_list);
7292 -- =============== END DEBUG LOG ==================
7293
7294 END IF;
7295
7296 IF (funcmode <> 'RUN') THEN
7297 result := 'COMPLETE';
7298 -- =============== START DEBUG LOG ================
7299 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg5',
7300 ' funcmode <> RUN -- result --> ' || result);
7301 -- =============== END DEBUG LOG ==================
7302 return;
7303 END IF;
7304
7305 -- =============== START DEBUG LOG ================
7306 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg6',
7307 ' ** END REMOVE_PREP_FROM_LIST ** ');
7308 -- =============== END DEBUG LOG ==================
7309
7310 EXCEPTION
7311 WHEN OTHERS THEN
7312 wf_core.context('IGI_EXP_APPROVAL_PKG','remove_prep_from_list',itemtype,itemkey,
7313 to_char(actid),funcmode);
7314 -- =============== START DEBUG LOG ================
7315 DEBUG_LOG_UNEXP_ERROR ('Remove_prep_from_list.Unexp1','DEFAULT');
7316 -- =============== END DEBUG LOG ==================
7317 raise;
7318 END remove_prep_from_list;
7319
7320
7321
7322 -- *************************************************************************
7323 -- SET_TU_TO_COMPLETE
7324 -- *************************************************************************
7325
7326 PROCEDURE set_tu_to_complete ( itemtype IN VARCHAR2,
7327 itemkey IN VARCHAR2,
7328 actid IN NUMBER,
7329 funcmode IN VARCHAR2,
7330 result OUT NOCOPY VARCHAR2) IS
7331
7332 l_tu_id igi_exp_dus.tu_id%TYPE;
7333
7334 BEGIN
7335
7336 -- =============== START DEBUG LOG ================
7337 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg1',
7338 ' ** START SET_TU_TO_COMPLETE ** ');
7339 -- =============== END DEBUG LOG ==================
7340
7341 IF (funcmode = 'RUN') THEN
7342
7343 -- Get the TU id
7344 l_tu_id
7345 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7346 itemkey => itemkey,
7347 aname => 'TU_ID');
7348
7349 -- =============== START DEBUG LOG ================
7350 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg2',
7351 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
7352 -- =============== END DEBUG LOG ==================
7353
7354 UPDATE igi_exp_tus
7355 SET tu_status = 'COM'
7356 WHERE tu_id = l_tu_id;
7357
7358 -- =============== START DEBUG LOG ================
7359 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg3',
7360 ' UPDATE igi_exp_tus --> ' || SQL%ROWCOUNT);
7361 -- =============== END DEBUG LOG ==================
7362
7363 END IF;
7364
7365 IF (funcmode <> 'RUN') THEN
7366 result := 'COMPLETE';
7367 -- =============== START DEBUG LOG ================
7368 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg4',
7369 ' funcmode <> RUN -- result --> ' || result);
7370 -- =============== END DEBUG LOG ==================
7371 return;
7372 END IF;
7373
7374 -- =============== START DEBUG LOG ================
7375 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg5',
7376 ' ** END SET_TU_TO_COMPLETE ** ');
7377 -- =============== END DEBUG LOG ==================
7378
7379 EXCEPTION
7380 WHEN OTHERS THEN
7381 wf_core.context('IGI_EXP_APPROVAL_PKG','set_tu_to_complete',itemtype,itemkey,
7382 to_char(actid),funcmode);
7383 -- =============== START DEBUG LOG ================
7384 DEBUG_LOG_UNEXP_ERROR ('set_tu_to_complete.Unexp1','DEFAULT');
7385 -- =============== END DEBUG LOG ==================
7386 raise;
7387
7388 END set_tu_to_complete;
7389
7390
7391
7392 -- OPSF(I) EXP Bug 2415293 S Brewer 11-JUL-2002 Start(3)
7393 -- Added new procedures does_tu_have_legal_num and
7394 -- remove_rej_dus_from_tu and get_next_rejected_legal_du
7395
7396 -- *************************************************************************
7397 -- DOES_TU_HAVE_LEGAL_NUM
7398 -- *************************************************************************
7399
7400 PROCEDURE does_tu_have_legal_num( itemtype IN VARCHAR2,
7401 itemkey IN VARCHAR2,
7402 actid IN NUMBER,
7403 funcmode IN VARCHAR2,
7404 result OUT NOCOPY VARCHAR2) IS
7405
7406 l_tu_id igi_exp_dus.tu_id%TYPE;
7407 l_tu_legal_number igi_exp_tus.tu_legal_number%TYPE;
7408 -- Check if the TU has a legal number
7409 -- Bug 4051910
7410 CURSOR c_leg_num(c_tu_id number) is
7411 SELECT tu_legal_number
7412 FROM igi_exp_tus
7413 WHERE tu_id = c_tu_id;
7414
7415
7416
7417
7418 BEGIN
7419
7420 -- =============== START DEBUG LOG ================
7421 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg1',
7422 ' ** START DOES_TU_HAVE_LEGAL_NUM ** ');
7423 -- =============== END DEBUG LOG ==================
7424
7425 IF (funcmode = 'RUN') THEN
7426
7427 -- Get the TU id
7428 l_tu_id
7429 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7430 itemkey => itemkey,
7431 aname => 'TU_ID');
7432
7433 -- =============== START DEBUG LOG ================
7434 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg2',
7435 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
7436 -- =============== END DEBUG LOG ==================
7437
7438 -- Bug 4051910
7439 OPEN c_leg_num(l_tu_id);
7440 FETCH c_leg_num INTO l_tu_legal_number;
7441 CLOSE c_leg_num;
7442
7443
7444 -- =============== START DEBUG LOG ================
7445 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg3',
7446 ' l_tu_legal_number --> ' || l_tu_legal_number);
7447 -- =============== END DEBUG LOG ==================
7448
7449 IF (l_tu_legal_number is null) THEN
7450 -- The TU has not been assigned a legal number
7451 -- Set the result to 'No'
7452 result := 'COMPLETE:N';
7453 ELSE
7454 -- The TU has been assigned a legal number
7455 -- Set the result to 'Yes'
7456 result := 'COMPLETE:Y';
7457 END IF;
7458
7459 -- =============== START DEBUG LOG ================
7460 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg4',
7461 ' result --> ' || result);
7462 -- =============== END DEBUG LOG ==================
7463
7464 END IF;
7465
7466 IF (funcmode <> 'RUN') THEN
7467 result := 'COMPLETE';
7468 -- =============== START DEBUG LOG ================
7469 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg5',
7470 ' funcmode <> RUN -- result --> ' || result);
7471 -- =============== END DEBUG LOG ==================
7472 return;
7473 END IF;
7474
7475 -- =============== START DEBUG LOG ================
7476 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg6',
7477 ' ** END DOES_TU_HAVE_LEGAL_NUM ** ');
7478 -- =============== END DEBUG LOG ==================
7479
7480 EXCEPTION
7481 WHEN OTHERS THEN
7482 wf_core.context('IGI_EXP_APPROVAL_PKG','does_tu_have_legal_num',itemtype,itemkey,
7483 to_char(actid),funcmode);
7484 -- =============== START DEBUG LOG ================
7485 DEBUG_LOG_UNEXP_ERROR ('Does_tu_have_legal_num.Unexp1','DEFAULT');
7486 -- =============== END DEBUG LOG ==================
7487 raise;
7488 END does_tu_have_legal_num;
7489
7490
7491
7492 -- *************************************************************************
7493 -- REMOVE_REJ_DUS_FROM_TU
7494 -- *************************************************************************
7495
7496 PROCEDURE remove_rej_dus_from_tu( itemtype IN VARCHAR2,
7497 itemkey IN VARCHAR2,
7498 actid IN NUMBER,
7499 funcmode IN VARCHAR2,
7500 result OUT NOCOPY VARCHAR2) IS
7501
7502 l_tu_id igi_exp_dus.tu_id%TYPE;
7503 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
7504
7505 BEGIN
7506
7507 -- =============== START DEBUG LOG ================
7508 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg1',
7509 ' ** START REMOVE_REJ_DUS_FROM_TU ** ');
7510 -- =============== END DEBUG LOG ==================
7511
7512 IF (funcmode = 'RUN') THEN
7513
7514 -- Get the TU id
7515 l_tu_id
7516 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7517 itemkey => itemkey,
7518 aname => 'TU_ID');
7519
7520 -- =============== START DEBUG LOG ================
7521 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg2',
7522 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
7523 -- =============== END DEBUG LOG ==================
7524
7525 -- Get the DU preparer id
7526 l_du_prep_id
7527 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7528 itemkey => itemkey,
7529 aname => 'TEMP_DU_PREPARER_ID');
7530
7531
7532 -- =============== START DEBUG LOG ================
7533 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg3',
7534 ' GetItemAttrNumber TEMP_DU_PREPARER_ID --> ' || l_du_prep_id );
7535 -- =============== END DEBUG LOG ==================
7536
7537 -- Remove the rejected DUs (prepared by user l_du_prep_id) from the
7538 -- TU
7539
7540 -- FP Bug 7711356 (not updating the tu_id as null for rejected DU's)
7541 /*UPDATE igi_exp_dus
7542 SET tu_id = null
7543 WHERE tu_id = l_tu_id
7544 AND du_by_user_id = l_du_prep_id
7545 AND du_status = 'REJ';*/
7546
7547 -- =============== START DEBUG LOG ================
7548 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg4',
7549 ' UPDATE igi_exp_dus du_status = REJ --> ' || SQL%ROWCOUNT);
7550 -- =============== END DEBUG LOG ==================
7551
7552 END IF;
7553
7554 IF (funcmode <> 'RUN') THEN
7555 result := 'COMPLETE';
7556 -- =============== START DEBUG LOG ================
7557 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg5',
7558 ' funcmode <> RUN -- result --> ' || result);
7559 -- =============== END DEBUG LOG ==================
7560 return;
7561 END IF;
7562
7563 -- =============== START DEBUG LOG ================
7564 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg6',
7565 ' ** START REMOVE_REJ_DUS_FROM_TU ** ');
7566 -- =============== END DEBUG LOG ==================
7567
7568 EXCEPTION
7569 WHEN OTHERS THEN
7570 wf_core.context('IGI_EXP_APPROVAL_PKG','remove_rej_dus_from_tu',itemtype,itemkey,
7571 to_char(actid),funcmode);
7572 -- =============== START DEBUG LOG ================
7573 DEBUG_LOG_UNEXP_ERROR ('Remove_rej_dus_from_tu.Unexp1','DEFAULT');
7574 -- =============== END DEBUG LOG ==================
7575 raise;
7576 END remove_rej_dus_from_tu;
7577
7578
7579 -- *************************************************************************
7580 -- GET_NEXT_REJECTED_LEGAL_DU
7581 -- *************************************************************************
7582
7583 PROCEDURE get_next_rejected_legal_du( itemtype IN VARCHAR2,
7584 itemkey IN VARCHAR2,
7585 actid IN NUMBER,
7586 funcmode IN VARCHAR2,
7587 result OUT NOCOPY VARCHAR2) IS
7588
7589 CURSOR c_next_du_rej(p_tu_id igi_exp_dus.tu_id%TYPE)
7590 IS
7591 SELECT du_id
7592 ,du_by_user_id
7593 FROM igi_exp_dus du
7594 WHERE tu_id = p_tu_id
7595 AND du_status = 'REJ'
7596 AND EXISTS (SELECT 'AR'
7597 FROM igi_exp_ar_trans ar
7598 WHERE ar.du_id = du.du_id
7599 UNION
7600 SELECT 'AP'
7601 FROM igi_exp_ap_trans ap
7602 WHERE ap.du_id = du.du_id)
7603 AND rownum = 1;
7604
7605
7606 CURSOR c_rej_du_info(p_tu_id igi_exp_dus.tu_id%TYPE
7607 ,p_du_preparer_id igi_exp_dus.du_by_user_id%TYPE)
7608 IS
7609 SELECT du_order_number
7610 ,du_legal_number
7611 FROM igi_exp_dus du
7612 WHERE tu_id = p_tu_id
7613 AND du_status = 'REJ'
7614 AND du_by_user_id = p_du_preparer_id;
7615
7616
7617 l_tu_id igi_exp_dus.tu_id%TYPE;
7618 l_du_id igi_exp_dus.du_id%TYPE;
7619 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
7620 l_du_prep_name fnd_user.user_name%TYPE;
7621
7622 l_du_rej_list VARCHAR2(28000);
7623
7624
7625 BEGIN
7626
7627 -- =============== START DEBUG LOG ================
7628 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg1',
7629 ' ** START GET_NEXT_REJECTED_LEGAL_DU ** ');
7630 -- =============== END DEBUG LOG ==================
7631
7632 IF (funcmode = 'RUN') THEN
7633
7634 -- Get the TU id
7635 l_tu_id
7636 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7637 itemkey => itemkey,
7638 aname => 'TU_ID');
7639
7640 -- =============== START DEBUG LOG ================
7641 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg2',
7642 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
7643 -- =============== END DEBUG LOG ==================
7644
7645 -- Get the next rejected legal DU in this TU
7646 OPEN c_next_du_rej(l_tu_id);
7647 FETCH c_next_du_rej INTO l_du_id, l_du_prep_id;
7648
7649 -- =============== START DEBUG LOG ================
7650 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg3',
7651 ' l_du_id --> ' || l_du_id || ' l_du_prep_id --> ' || l_du_prep_id);
7652 -- =============== END DEBUG LOG ==================
7653
7654 IF (c_next_du_rej%NOTFOUND) THEN
7655 -- There are no more rejected DUs to deal with
7656 -- Set result to 'No More DUs'
7657 result := 'COMPLETE:NO_DUS_IN_LIST';
7658
7659 -- =============== START DEBUG LOG ================
7660 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg4',
7661 ' c_next_du_rej%NOTFOUND -- result --> ' || result);
7662 -- =============== END DEBUG LOG ==================
7663
7664 ELSE
7665 -- The next rejected DU has been fetched
7666 -- Set the temp_du_preparer_id attribute
7667 wf_engine.SetItemAttrNumber( itemtype => itemtype,
7668 itemkey => itemkey,
7669 aname => 'TEMP_DU_PREPARER_ID',
7670 avalue => l_du_prep_id);
7671
7672 -- =============== START DEBUG LOG ================
7673 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg5',
7674 ' SetItemAttrNumber TEMP_DU_PREPARER_ID --> ' || l_du_prep_id);
7675 -- =============== END DEBUG LOG ==================
7676
7677 -- Get the name of the preparer to send the notification to
7678 SELECT user_name
7679 INTO l_du_prep_name
7680 FROM fnd_user
7681 WHERE user_id = l_du_prep_id;
7682
7683 -- =============== START DEBUG LOG ================
7684 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg6',
7685 ' l_du_prep_name --> ' || l_du_prep_name);
7686 -- =============== END DEBUG LOG ==================
7687
7688 -- Set the temp_du_preparer_name attribute
7689 wf_engine.SetItemAttrText ( itemtype => itemtype,
7690 itemkey => itemkey,
7691 aname => 'TEMP_DU_PREPARER_NAME',
7692 avalue => l_du_prep_name);
7693
7694 -- =============== START DEBUG LOG ================
7695 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg7',
7696 ' SetItemAttrText TEMP_DU_PREPARER_NAME --> ' || l_du_prep_name);
7697 -- =============== END DEBUG LOG ==================
7698
7699 FOR I IN c_rej_du_info(l_tu_id,l_du_prep_id)
7700 LOOP
7701
7702 IF (l_du_rej_list is NULL) THEN
7703 l_du_rej_list := I.du_order_number;
7704 ELSE
7705 l_du_rej_list := l_du_rej_list ||I.du_order_number;
7706 END IF;
7707
7708 -- =============== START DEBUG LOG ================
7709 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg8',
7710 ' du_order_number --> ' || I.du_order_number);
7711 -- =============== END DEBUG LOG ==================
7712
7713 IF (I.du_legal_number is not null) THEN
7714 l_du_rej_list := l_du_rej_list||' ('||I.du_legal_number||')';
7715 END IF;
7716
7717 -- =============== START DEBUG LOG ================
7718 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg9',
7719 ' I.du_legal_number --> ' || I.du_legal_number);
7720 -- =============== END DEBUG LOG ==================
7721
7722 l_du_rej_list := l_du_rej_list||fnd_global.local_chr(10);
7723
7724 IF LENGTH(l_du_rej_list) > 28000 THEN
7725 exit;
7726 END IF;
7727
7728 END LOOP;
7729
7730 -- Set the all_dus_list attribute
7731 wf_engine.SetItemAttrText ( itemtype => itemtype,
7732 itemkey => itemkey,
7733 aname => 'ADD_ATTR1',
7734 avalue => substr(l_du_rej_list, 1, 4000));
7735
7736 -- =============== START DEBUG LOG ================
7737 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg10',
7738 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_du_rej_list, 1, 4000));
7739 -- =============== END DEBUG LOG ==================
7740
7741 wf_engine.SetItemAttrText ( itemtype => itemtype,
7742 itemkey => itemkey,
7743 aname => 'ADD_ATTR2',
7744 avalue => substr(l_du_rej_list, 4001, 4000));
7745
7746 -- =============== START DEBUG LOG ================
7747 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg11',
7748 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_du_rej_list, 4001, 4000));
7749 -- =============== END DEBUG LOG ==================
7750
7751 wf_engine.SetItemAttrText ( itemtype => itemtype,
7752 itemkey => itemkey,
7753 aname => 'ADD_ATTR3',
7754 avalue => substr(l_du_rej_list, 8001, 4000));
7755
7756 -- =============== START DEBUG LOG ================
7757 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg12',
7758 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_rej_list, 8001, 4000));
7759 -- =============== END DEBUG LOG ==================
7760
7761 wf_engine.SetItemAttrText ( itemtype => itemtype,
7762 itemkey => itemkey,
7763 aname => 'ADD_ATTR4',
7764 avalue => substr(l_du_rej_list, 12001, 4000));
7765
7766 -- =============== START DEBUG LOG ================
7767 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg13',
7768 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_du_rej_list, 12001, 4000));
7769 -- =============== END DEBUG LOG ==================
7770
7771 wf_engine.SetItemAttrText ( itemtype => itemtype,
7772 itemkey => itemkey,
7773 aname => 'ADD_ATTR5',
7774 avalue => substr(l_du_rej_list, 16001, 4000));
7775
7776 -- =============== START DEBUG LOG ================
7777 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg14',
7778 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_du_rej_list, 16001, 4000));
7779 -- =============== END DEBUG LOG ==================
7780
7781 wf_engine.SetItemAttrText ( itemtype => itemtype,
7782 itemkey => itemkey,
7783 aname => 'ADD_ATTR6',
7784 avalue => substr(l_du_rej_list, 20001, 4000));
7785
7786 -- =============== START DEBUG LOG ================
7787 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg15',
7788 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_du_rej_list, 20001, 4000));
7789 -- =============== END DEBUG LOG ==================
7790
7791 wf_engine.SetItemAttrText ( itemtype => itemtype,
7792 itemkey => itemkey,
7793 aname => 'ADD_ATTR7',
7794 avalue => substr(l_du_rej_list, 24001, 4000));
7795
7796
7797 -- =============== START DEBUG LOG ================
7798 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg16',
7799 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_du_rej_list, 24001, 4000));
7800 -- =============== END DEBUG LOG ==================
7801
7802 -- Set the temp_du_by_prep_list attribute
7803 wf_engine.SetItemAttrText ( itemtype => itemtype,
7804 itemkey => itemkey,
7805 aname => 'TEMP_DU_BY_PREP_LIST',
7806 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
7807
7808
7809 -- =============== START DEBUG LOG ================
7810 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg17',
7811 ' SetItemAttrText TEMP_DU_BY_PREP_LIST --> ' ||
7812 ' plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
7813 -- =============== END DEBUG LOG ==================
7814
7815 -- Set the result to 'Next DU Fetched'
7816 result := 'COMPLETE:NEXT_DU_FETCHED';
7817
7818 -- =============== START DEBUG LOG ================
7819 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg18',
7820 ' result --> '||result);
7821 -- =============== END DEBUG LOG ==================
7822
7823 END IF;
7824
7825 IF (c_next_du_rej%ISOPEN) THEN
7826 CLOSE c_next_du_rej;
7827 END IF;
7828
7829 END IF;
7830
7831 IF (funcmode <> 'RUN') THEN
7832 result := 'COMPLETE';
7833 -- =============== START DEBUG LOG ================
7834 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg19',
7835 ' funcmode <> RUN -- result --> '|| result);
7836 -- =============== END DEBUG LOG ==================
7837 return;
7838 END IF;
7839
7840 -- =============== START DEBUG LOG ================
7841 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg20',
7842 ' ** END GET_NEXT_REJECTED_LEGAL_DU ** ');
7843 -- =============== END DEBUG LOG ==================
7844
7845 EXCEPTION
7846 WHEN OTHERS THEN
7847 wf_core.context('IGI_EXP_APPROVAL_PKG','get_next_rejected_legal_du',itemtype,itemkey,
7848 to_char(actid),funcmode);
7849 -- =============== START DEBUG LOG ================
7850 DEBUG_LOG_UNEXP_ERROR ('Get_next_rejected_legal_du.Unexp1','DEFAULT');
7851 -- =============== END DEBUG LOG ==================
7852 raise;
7853
7854 END get_next_rejected_legal_du;
7855 -- OPSF(I) EXP Bug 2415293 S Brewer 11-JUL-2002 End(3)
7856
7857
7858 -- OPSF(I) EXP Bug 2379693 S Brewer 16-JUL-2002 Start(1)
7859 -- Added new procedure is_transmitter_final_apprv
7860
7861 -- *************************************************************************
7862 -- IS_TRANSMITTER_FINAL_APPRV
7863 -- *************************************************************************
7864
7865 PROCEDURE is_transmitter_final_apprv( itemtype IN VARCHAR2,
7866 itemkey IN VARCHAR2,
7867 actid IN NUMBER,
7868 funcmode IN VARCHAR2,
7869 result OUT NOCOPY VARCHAR2) IS
7870
7871 l_transmitter_position_id per_all_positions.position_id%TYPE;
7872 l_final_apprv_pos_id igi_exp_apprv_profiles.final_apprv_pos_id%TYPE;
7873
7874 BEGIN
7875
7876 -- =============== START DEBUG LOG ================
7877 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg1',
7878 ' ** START IS_TRANSMITTER_FINAL_APPRV ** ');
7879 -- =============== END DEBUG LOG ==================
7880
7881 IF (funcmode = 'RUN') THEN
7882
7883 -- Get the transmitter position id
7884 l_transmitter_position_id
7885 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7886 itemkey => itemkey,
7887 aname => 'TRANSMITTER_POSITION_ID');
7888
7889 -- =============== START DEBUG LOG ================
7890 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg2',
7891 ' GetItemAttrNumber TRANSMITTER_POSITION_ID --> '||l_transmitter_position_id);
7892 -- =============== END DEBUG LOG ==================
7893
7894 -- Get the final approver position id
7895 l_final_apprv_pos_id
7896 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7897 itemkey => itemkey,
7898 aname => 'FINAL_APPRV_POS_ID');
7899
7900 -- =============== START DEBUG LOG ================
7901 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg3',
7902 ' GetItemAttrNumber FINAL_APPRV_POS_ID --> '||l_final_apprv_pos_id );
7903 -- =============== END DEBUG LOG ==================
7904
7905 -- Check if the transmitter position is the same as the final position
7906 IF (l_transmitter_position_id = l_final_apprv_pos_id) THEN
7907 -- The transmitter has the final approval position
7908 -- Set the result to 'Yes'
7909 result := 'COMPLETE:Y';
7910 ELSE
7911 -- The transmitter is not at the final approval position
7912 -- Set the result to 'No'
7913 result := 'COMPLETE:N';
7914 END IF;
7915
7916 -- =============== START DEBUG LOG ================
7917 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg4',
7918 ' result --> '|| result);
7919 -- =============== END DEBUG LOG ==================
7920
7921 END IF;
7922
7923 IF (funcmode <> 'RUN') THEN
7924 result := 'COMPLETE';
7925 -- =============== START DEBUG LOG ================
7926 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg5',
7927 ' funcmode <> RUN -- result --> ' || result);
7928 -- =============== END DEBUG LOG ==================
7929 return;
7930 END IF;
7931
7932 -- =============== START DEBUG LOG ================
7933 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg6',
7934 ' ** END IS_TRANSMITTER_FINAL_APPRV ** ');
7935 -- =============== END DEBUG LOG ==================
7936
7937 EXCEPTION
7938 WHEN OTHERS THEN
7939 wf_core.context('IGI_EXP_APPROVAL_PKG','is_transmitter_final_apprv',itemtype,itemkey,
7940 to_char(actid),funcmode);
7941 -- =============== START DEBUG LOG ================
7942 DEBUG_LOG_UNEXP_ERROR ('Is_transmitter_final_apprv.Unexp1','DEFAULT');
7943 -- =============== END DEBUG LOG ==================
7944 raise;
7945
7946 END is_transmitter_final_apprv;
7947 -- OPSF(I) EXP Bug 2379693 S Brewer 16-JUL-2002 End(1)
7948
7949 END igi_exp_approval_pkg;