[Home] [Help]
PACKAGE BODY: APPS.IGI_EXP_APPROVAL_PKG
Source
1 PACKAGE BODY igi_exp_approval_pkg AS
2 -- $Header: igiexab.pls 120.13.12010000.2 2008/08/04 13:01:27 sasukuma 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
333 -- =============== START DEBUG LOG ================
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
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');
460
457
458 mo_global.set_policy_context('S',l_work_item_org_id);
459 /* Bug# 5905190 MOAC changes ends */
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
581
578 wf_engine.SetItemOwner( itemtype => l_itemtype,
579 itemkey => l_itemkey,
580 owner => p_tu_transmitter_name);
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,
690 -- =============== START DEBUG LOG ================
687 aname => 'AUTHORIZER_HISTORY_LIST',
688 avalue => p_tu_transmitter_name);
689
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',
810 l_msg := fnd_message.get;
807 avalue => l_msg);
808
809 fnd_message.set_name ('IGI', 'IGI_EXP_LEGAL_NUM_ERROR');
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');
918 aname => 'TU_DU_REMOVE',
915 l_msg := fnd_message.get;
916 wf_engine.SetItemAttrText ( itemtype => l_itemtype,
917 itemkey => l_itemkey,
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,
1025
1022 itemkey => l_itemkey,
1023 aname => 'TU_VALIDATION_ERROR',
1024 avalue => l_msg);
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',
1140
1137 p_orig_system_id => l_transmitter_emp_id,
1138 p_name => l_transmitter_emp_name,
1139 p_display_name => l_display_name );
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 ** ');
1250
1247 -- =============== END DEBUG LOG ==================
1248
1249 IF (funcmode = 'RUN') THEN
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
1385
1382 wf_core.context('IGI_EXP_APPROVAL_PKG','emp_has_position',itemtype,itemkey,
1383 to_char(actid),funcmode);
1384 RAISE;
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,
1493 DEBUG_LOG_STRING (l_proc_level, 'Position_in_hierarchy.Msg4',
1490 aname => 'TRANSMITTER_POSITION_ID');
1491
1492 -- =============== START DEBUG LOG ================
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 ================
1594 RAISE e_pos_hier_ver_not_found;
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 ==================
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.
1702 wf_engine.SetItemAttrNumber( itemtype => itemtype,
1699 -- Set the pos_structure_element_id for reference purposes.
1700
1701 -- Set the pos_structure_element_id attribute
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
1809 -- Get the values of the attributes needed:
1806 -- If the TU transmitter's position IS the final position
1807 -- it is ok to continue with the workflow approval.
1808
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',
1910 l_final_apprv_found := 'Y';
1907 ' l_parent_pos_id = l_final_apprv_pos_id ');
1908 -- =============== END DEBUG LOG ==================
1909
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,
2027 DEBUG_LOG_STRING (l_proc_level, 'Update_tu_status_to_avl.Msg3',
2024 aname => 'TU_ID');
2025
2026 -- =============== START DEBUG LOG ================
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
2147 wf_core.context('IGI_EXP_APPROVAL_PKG','update_dus_to_in_a_tu',itemtype,itemkey,
2144 -- =============== START DEBUG LOG ================
2145 DEBUG_LOG_UNEXP_ERROR ('Update_tu_status_to_avl.Unexp1','DEFAULT');
2146 -- =============== END DEBUG LOG ==================
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 );
2253 ,l_business_group_id
2250 -- =============== END DEBUG LOG ==================
2251
2252 OPEN c_user_list(l_current_position_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
2366 aname => 'USER_LIST',
2363 -- Set the user_list attribute to the list of users found
2364 wf_engine.SetItemAttrText ( itemtype => itemtype,
2365 itemkey => itemkey,
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 ');
2485 l_picked_authorizer := wf_notification.GetAttrText(l_nid,'PICKED_AUTHORIZER');
2482 -- =============== END DEBUG LOG ==================
2483
2484 -- The notification responder chose to send approval request to chosen user
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
2591 itemkey => itemkey,
2588 -- Get the current position id
2589 l_current_position_id
2590 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
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 ================
2703
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 ==================
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
2816
2813 := wf_engine.GetItemAttrText ( itemtype => itemtype,
2814 itemkey => itemkey,
2815 aname => 'AUTHORIZER_HISTORY_LIST');
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
2925 DEBUG_LOG_UNEXP_ERROR ('Is_auth_allowed_return.Unexp1','DEFAULT');
2922 wf_core.context('IGI_EXP_APPROVAL_PKG','is_auth_allowed_return',itemtype,itemkey,
2923 to_char(actid),funcmode);
2924 -- =============== START DEBUG LOG ================
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
3035 -- =============== END DEBUG LOG ==================
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);
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
3148 ' funcmode <> RUN -- result --> ' || result);
3145 result := 'COMPLETE';
3146 -- =============== START DEBUG LOG ================
3147 DEBUG_LOG_STRING (l_proc_level, 'Add_auth_to_history.Msg6',
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
3254 -- Get the position structure version id
3251 -- Get the values of the attributes needed:
3252 -- Position structure version and business group.
3253
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
3356 -- =============== END DEBUG LOG ==================
3353 -- =============== START DEBUG LOG ================
3354 DEBUG_LOG_STRING (l_proc_level, 'Set_current_position_to_subord.Msg14',
3355 ' ** END SET_CURRENT_POSITION_TO_SUBORD ** ');
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 ');
3464 END IF;
3461 -- =============== END DEBUG LOG ==================
3462 -- There is only one user in the history list, so cannot continue
3463 RAISE e_no_prev_auth;
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 ==================
3563
3560 raise;
3561
3562 END set_current_auth_to_prev_auth;
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,
3678 -- =============== END DEBUG LOG ==================
3675 to_char(actid),funcmode);
3676 -- =============== START DEBUG LOG ================
3677 DEBUG_LOG_UNEXP_ERROR ('Reset_du_statuses.Unexp1','DEFAULT');
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,
3803 -- =============== START DEBUG LOG ================
3800 itemkey => itemkey,
3801 aname => 'TU_ID');
3802
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 ================
3927
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 ==================
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,
4023 -- =============== START DEBUG LOG ================
4020 aname => 'ALL_DUS_LIST',
4021 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
4022
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
4145 aname => 'TEMP_DU_PREPARER_ID',
4142 -- Set the temp_du_preparer_id attribute
4143 wf_engine.SetItemAttrNumber( itemtype => itemtype,
4144 itemkey => itemkey,
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
4248 -- =============== END DEBUG LOG ==================
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));
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',
4356 IF (funcmode = 'RUN') THEN
4353 ' ** START REMOVE_DUS_ON_HOLD ** ');
4354 -- =============== END DEBUG LOG ==================
4355
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';
4474 l_du_rej_list VARCHAR2(28000);
4471
4472 l_tu_id igi_exp_dus.tu_id%TYPE;
4473 l_rej_count NUMBER;
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',
4587 wf_engine.SetItemAttrText ( itemtype => itemtype,
4584 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_rej_list, 8001, 4000));
4585 -- =============== END DEBUG LOG ==================
4586
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
4689 funcmode IN VARCHAR2,
4686 PROCEDURE get_next_rejected_du ( itemtype IN VARCHAR2,
4687 itemkey IN VARCHAR2,
4688 actid IN NUMBER,
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 rownum = 1;
4700
4701 CURSOR c_rej_du_info(p_tu_id igi_exp_dus.tu_id%TYPE
4702 ,p_du_preparer_id igi_exp_dus.du_by_user_id%TYPE)
4703 IS
4704 SELECT du_order_number
4705 ,du_legal_number
4706 FROM igi_exp_dus du
4707 WHERE tu_id = p_tu_id
4708 AND du_status = 'REJ'
4709 AND du_by_user_id = p_du_preparer_id;
4710
4711 l_tu_id igi_exp_dus.tu_id%TYPE;
4712 l_du_id igi_exp_dus.du_id%TYPE;
4713 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
4714 l_du_prep_name fnd_user.user_name%TYPE;
4715 l_no NUMBER := 0 ;
4716 l_du_rej_list VARCHAR2(28000);
4717
4718 BEGIN
4719
4720 -- =============== START DEBUG LOG ================
4721 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg1',
4722 ' ** START GET_NEXT_REJECTED_DU ** ');
4723 -- =============== END DEBUG LOG ==================
4724
4725 IF (funcmode = 'RUN') THEN
4726
4727 -- Get the TU id
4728 l_tu_id
4729 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
4730 itemkey => itemkey,
4731 aname => 'TU_ID');
4732
4733 -- =============== START DEBUG LOG ================
4734 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg2',
4735 'GetItemAttrNumber TU_ID --> ' || l_tu_id );
4736 -- =============== END DEBUG LOG ==================
4737
4738 -- Get the next rejected DU in this TU
4739 OPEN c_next_du_rej(l_tu_id);
4740 FETCH c_next_du_rej INTO l_du_id, l_du_prep_id;
4741
4742 -- =============== START DEBUG LOG ================
4743 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg3',
4744 ' l_du_id --> ' || l_du_id || ' l_du_prep_id --> ' || l_du_prep_id);
4745 -- =============== END DEBUG LOG ==================
4746
4747 IF (c_next_du_rej%NOTFOUND) THEN
4748 -- There are no more rejected DUs to deal with
4749 -- Set result to 'No More DUs'
4750 result := 'COMPLETE:NO_DUS_IN_LIST';
4751
4752 -- =============== START DEBUG LOG ================
4753 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg4',
4754 ' result --> ' || result);
4755 -- =============== END DEBUG LOG ==================
4756
4757 ELSE
4758
4759 -- The next rejected DU has been fetched
4760 -- Set the temp_du_preparer_id attribute
4761 wf_engine.SetItemAttrNumber( itemtype => itemtype,
4762 itemkey => itemkey,
4763 aname => 'TEMP_DU_PREPARER_ID',
4764 avalue => l_du_prep_id);
4765
4766 -- =============== START DEBUG LOG ================
4767 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg5',
4768 ' SetItemAttrNumber TEMP_DU_PREPARER_ID --> ' || l_du_prep_id);
4769 -- =============== END DEBUG LOG ==================
4770
4771 -- Get the name of the preparer to send the notification to
4772 SELECT user_name
4773 INTO l_du_prep_name
4774 FROM fnd_user
4775 WHERE user_id = l_du_prep_id;
4776
4777 -- =============== START DEBUG LOG ================
4778 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg6',
4779 ' l_du_prep_name --> ' || l_du_prep_name);
4780 -- =============== END DEBUG LOG ==================
4781
4782 -- Set the temp_du_preparer_name attribute
4783 wf_engine.SetItemAttrText ( itemtype => itemtype,
4784 itemkey => itemkey,
4785 aname => 'TEMP_DU_PREPARER_NAME',
4786 avalue => l_du_prep_name);
4787
4788 -- =============== START DEBUG LOG ================
4789 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg7',
4790 ' SetItemAttrText TEMP_DU_PREPARER_NAME --> ' || l_du_prep_name);
4791 -- =============== END DEBUG LOG ==================
4792
4793 FOR I IN c_rej_du_info(l_tu_id,l_du_prep_id)
4794 LOOP
4795
4796 IF (l_du_rej_list is NULL) THEN
4797 l_du_rej_list := I.du_order_number;
4798 ELSE
4799 l_du_rej_list := l_du_rej_list ||I.du_order_number;
4800 END IF;
4801
4802 -- =============== START DEBUG LOG ================
4806
4803 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg8',
4804 ' I.du_order_number --> ' || I.du_order_number);
4805 -- =============== END DEBUG LOG ==================
4807 IF (I.du_legal_number is not null) THEN
4808 l_du_rej_list := l_du_rej_list||' ('||I.du_legal_number||')';
4809 END IF;
4810
4811 -- =============== START DEBUG LOG ================
4812 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg9',
4813 ' I.du_legal_number --> ' || I.du_legal_number);
4814 -- =============== END DEBUG LOG ==================
4815
4816 l_du_rej_list := l_du_rej_list||fnd_global.local_chr(10);
4817
4818 IF LENGTH(l_du_rej_list) > 28000 THEN
4819 exit;
4820 END IF;
4821
4822 END LOOP;
4823
4824 -- Set the all_dus_list attribute
4825 wf_engine.SetItemAttrText ( itemtype => itemtype,
4826 itemkey => itemkey,
4827 aname => 'ADD_ATTR1',
4828 avalue => substr(l_du_rej_list, 1, 4000));
4829
4830 -- =============== START DEBUG LOG ================
4831 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg10',
4832 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_du_rej_list, 1, 4000));
4833 -- =============== END DEBUG LOG ==================
4834
4835 wf_engine.SetItemAttrText ( itemtype => itemtype,
4836 itemkey => itemkey,
4837 aname => 'ADD_ATTR2',
4838 avalue => substr(l_du_rej_list, 4001, 4000));
4839
4840 -- =============== START DEBUG LOG ================
4841 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg11',
4842 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_du_rej_list, 4001, 4000));
4843 -- =============== END DEBUG LOG ==================
4844
4845 wf_engine.SetItemAttrText ( itemtype => itemtype,
4846 itemkey => itemkey,
4847 aname => 'ADD_ATTR3',
4848 avalue => substr(l_du_rej_list, 8001, 4000));
4849
4850 -- =============== START DEBUG LOG ================
4851 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg12',
4852 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_rej_list, 8001, 4000));
4853 -- =============== END DEBUG LOG ==================
4854
4855 wf_engine.SetItemAttrText ( itemtype => itemtype,
4856 itemkey => itemkey,
4857 aname => 'ADD_ATTR4',
4858 avalue => substr(l_du_rej_list, 12001, 4000));
4859
4860 -- =============== START DEBUG LOG ================
4861 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg13',
4862 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_du_rej_list, 12001, 4000));
4863 -- =============== END DEBUG LOG ==================
4864
4865 wf_engine.SetItemAttrText ( itemtype => itemtype,
4866 itemkey => itemkey,
4867 aname => 'ADD_ATTR5',
4868 avalue => substr(l_du_rej_list, 16001, 4000));
4869
4870 -- =============== START DEBUG LOG ================
4871 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg14',
4872 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_du_rej_list, 16001, 4000));
4873 -- =============== END DEBUG LOG ==================
4874
4875 wf_engine.SetItemAttrText ( itemtype => itemtype,
4876 itemkey => itemkey,
4877 aname => 'ADD_ATTR6',
4878 avalue => substr(l_du_rej_list, 20001, 4000));
4879
4880 -- =============== START DEBUG LOG ================
4881 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg15',
4882 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_du_rej_list, 20001, 4000));
4883 -- =============== END DEBUG LOG ==================
4884
4885 wf_engine.SetItemAttrText ( itemtype => itemtype,
4886 itemkey => itemkey,
4887 aname => 'ADD_ATTR7',
4888 avalue => substr(l_du_rej_list, 24001, 4000));
4889
4890
4891 -- =============== START DEBUG LOG ================
4892 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg16',
4893 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_du_rej_list, 24001, 4000));
4894 -- =============== END DEBUG LOG ==================
4895
4896 wf_engine.SetItemAttrText ( itemtype => itemtype,
4897 itemkey => itemkey,
4898 aname => 'TEMP_DU_BY_PREP_LIST',
4902 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg17',
4899 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
4900
4901 -- =============== START DEBUG LOG ================
4903 ' SetItemAttrText ALL_DUS_LIST --> ' ||
4904 ' plsqlclob:igi_exp_approval_pkg.Cerate_du_list/'||itemtype||':'||itemkey);
4905 -- =============== END DEBUG LOG ==================
4906
4907 -- Set the result to 'Next DU Fetched'
4908 result := 'COMPLETE:NEXT_DU_FETCHED';
4909
4910 -- =============== START DEBUG LOG ================
4911 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg18',
4912 ' result --> ' || result);
4913 -- =============== END DEBUG LOG ==================
4914
4915 END IF;
4916
4917 IF (c_next_du_rej%ISOPEN) THEN
4918 CLOSE c_next_du_rej;
4919 END IF;
4920
4921 END IF;
4922
4923 IF (funcmode <> 'RUN') THEN
4924 result := 'COMPLETE';
4925 -- =============== START DEBUG LOG ================
4926 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg19',
4927 ' funcmode <> RUN -- result --> ' || result);
4928 -- =============== END DEBUG LOG ==================
4929 return;
4930 END IF;
4931
4932 -- =============== START DEBUG LOG ================
4933 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_du.Msg20',
4934 ' ** END GET_NEXT_REJECTED_DU ** ');
4935 -- =============== END DEBUG LOG ==================
4936
4937 EXCEPTION
4938 WHEN OTHERS THEN
4939 wf_core.context('IGI_EXP_APPROVAL_PKG','get_next_rejected_du',itemtype,itemkey,
4940 to_char(actid),funcmode);
4941 -- =============== START DEBUG LOG ================
4942 DEBUG_LOG_UNEXP_ERROR ('Get_next_rejected_du.Unexp1','DEFAULT');
4943 -- =============== END DEBUG LOG ==================
4944 raise;
4945
4946 END get_next_rejected_du;
4947 -- OPSF(I) EXP Bug 2415293 S Brewer 11-JUL-2002 End(2)
4948
4949
4950
4951 -- *************************************************************************
4952 -- REM_TRX_FROM_REJ_DUS
4953 -- *************************************************************************
4954
4955 PROCEDURE rem_trx_from_rej_dus ( itemtype IN VARCHAR2,
4956 itemkey IN VARCHAR2,
4957 actid IN NUMBER,
4958 funcmode IN VARCHAR2,
4959 result OUT NOCOPY VARCHAR2) IS
4960
4961 CURSOR c_rej_dus(p_tu_id igi_exp_dus.tu_id%TYPE
4962 ,p_du_preparer_id igi_exp_dus.du_by_user_id%TYPE)
4963 IS
4964 SELECT du_id
4965 FROM igi_exp_dus du
4966 WHERE tu_id = p_tu_id
4967 AND du_status = 'REJ'
4968 AND du_by_user_id = p_du_preparer_id
4969 AND EXISTS (SELECT 'AR'
4970 FROM igi_exp_ar_trans ar
4971 WHERE ar.du_id = du.du_id
4972 UNION
4973 SELECT 'AP'
4974 FROM igi_exp_ap_trans ap
4975 WHERE ap.du_id = du.du_id);
4976
4977 l_tu_id igi_exp_dus.tu_id%TYPE;
4978 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
4979 l_du_id igi_exp_dus.du_id%TYPE;
4980 l_du_amount igi_exp_dus.du_amount%TYPE;
4981
4982 BEGIN
4983
4984 -- =============== START DEBUG LOG ================
4985 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg1',
4986 ' ** START REM_TRX_FROM_REJ_DUS ** ');
4987 -- =============== END DEBUG LOG ==================
4988
4989 IF (funcmode = 'RUN') THEN
4990
4991 -- Want to remove all transactions contained within rejected
4992 -- dialog units
4993
4994 -- Get the TU id
4995 l_tu_id
4996 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
4997 itemkey => itemkey,
4998 aname => 'TU_ID');
4999
5000 -- =============== START DEBUG LOG ================
5001 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg2',
5002 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
5003 -- =============== END DEBUG LOG ==================
5004
5005 -- Get the DU preparer id
5006 l_du_prep_id
5007 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5008 itemkey => itemkey,
5009 aname => 'TEMP_DU_PREPARER_ID');
5010
5011 -- =============== START DEBUG LOG ================
5012 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg3',
5013 ' GetItemAttrNumber TEMP_DU_PREPARER_ID --> '|| l_du_prep_id);
5014 -- =============== END DEBUG LOG ==================
5015
5016 FOR I IN c_rej_dus(l_tu_id,l_du_prep_id)
5017 LOOP
5018
5019 DELETE FROM igi_exp_ar_trans
5023 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg4',
5020 WHERE du_id = I.du_id;
5021
5022 -- =============== START DEBUG LOG ================
5024 'DELETE FROM igi_exp_ar_trans --> ' || SQL%ROWCOUNT);
5025 -- =============== END DEBUG LOG ==================
5026
5027 DELETE FROM igi_exp_ap_trans
5028 WHERE du_id = I.du_id;
5029
5030 -- =============== START DEBUG LOG ================
5031 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg5',
5032 ' DELETE FROM igi_exp_ap_trans --> ' || SQL%ROWCOUNT);
5033 -- =============== END DEBUG LOG ==================
5034
5035 END LOOP;
5036
5037 -- OPSF(I) EXP Bug 2415293 S Brewer 18-JUL-2002 Start(2)
5038 -- Now that the transactions have been removed from the DUs
5039 -- need to update the DU amounts to 0. But before doing
5040 -- this, update the TU amount
5041 -- i.e. New TU amount = TU amount - DU amount
5042
5043 -- First find the total DU amount
5044 SELECT sum(du_amount)
5045 INTO l_du_amount
5046 FROM igi_exp_dus
5047 WHERE tu_id = l_tu_id
5048 AND du_by_user_id = l_du_prep_id
5049 AND du_status = 'REJ';
5050
5051 -- =============== START DEBUG LOG ================
5052 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg6',
5053 ' l_du_amount --> ' || l_du_amount);
5054 -- =============== END DEBUG LOG ==================
5055
5056 -- Update the TU amount
5057 UPDATE igi_exp_tus
5058 SET tu_amount = tu_amount - l_du_amount
5059 WHERE tu_id = l_tu_id;
5060
5061 -- =============== START DEBUG LOG ================
5062 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg7',
5063 ' UPDATE igi_exp_tus --> ' || SQL%ROWCOUNT);
5064 -- =============== END DEBUG LOG ==================
5065
5066 -- Now update the DU amount to 0
5067 UPDATE igi_exp_dus
5068 SET du_amount = 0
5069 WHERE tu_id = l_tu_id
5070 AND du_by_user_id = l_du_prep_id
5071 AND du_status = 'REJ';
5072
5073 -- OPSF(I) EXP Bug 2415293 S Brewer 18-JUL-2002 End(2)
5074
5075 -- =============== START DEBUG LOG ================
5076 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg8',
5077 ' UPDATE igi_exp_dus du_amount = 0 --> ' || SQL%ROWCOUNT);
5078 -- =============== END DEBUG LOG ==================
5079
5080 END IF;
5081
5082 IF (funcmode <> 'RUN') THEN
5083 result := 'COMPLETE';
5084 -- =============== START DEBUG LOG ================
5085 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg9',
5086 ' funcmode <> RUN -- result --> ' || result);
5087 -- =============== END DEBUG LOG ==================
5088 return;
5089 END IF;
5090
5091 -- =============== START DEBUG LOG ================
5092 DEBUG_LOG_STRING (l_proc_level, 'Rem_trx_from_rej_dus.Msg10',
5093 ' ** END REM_TRX_FROM_REJ_DUS ** ');
5094 -- =============== END DEBUG LOG ==================
5095
5096 EXCEPTION
5097 WHEN OTHERS THEN
5098 wf_core.context('IGI_EXP_APPROVAL_PKG','rem_trx_from_rej_dus',itemtype,itemkey,
5099 to_char(actid),funcmode);
5100 -- =============== START DEBUG LOG ================
5101 DEBUG_LOG_UNEXP_ERROR ('Rem_trx_from_rej_dus.Unexp1','DEFAULT');
5102 -- =============== END DEBUG LOG ==================
5103 raise;
5104
5105 END rem_trx_from_rej_dus;
5106
5107
5108 -- *************************************************************************
5109 -- IS_LEGAL_NUM_REQ
5110 -- *************************************************************************
5111
5112 PROCEDURE is_legal_num_req ( itemtype IN VARCHAR2,
5113 itemkey IN VARCHAR2,
5114 actid IN NUMBER,
5115 funcmode IN VARCHAR2,
5116 result OUT NOCOPY VARCHAR2) IS
5117
5118 l_legal_num_pos_id igi_exp_apprv_profiles.legal_num_pos_id%TYPE;
5119 l_current_pos_id per_all_positions.position_id%TYPE;
5120
5121 BEGIN
5122
5123 -- =============== START DEBUG LOG ================
5124 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg1',
5125 ' ** START IS_LEGAL_NUM_REQ ** ');
5126 -- =============== END DEBUG LOG ==================
5127
5128 IF (funcmode = 'RUN') THEN
5129
5130 -- Get the legal numbering position id
5131 l_legal_num_pos_id
5132 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5133 itemkey => itemkey,
5134 aname => 'LEGAL_NUM_POS_ID');
5135
5136 -- =============== START DEBUG LOG ================
5137 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg2',
5138 'GetItemAttrNumber LEGAL_NUM_POS_ID --> ' || l_legal_num_pos_id);
5142 -- the we need to generate legal numbers for the TU and DUs
5139 -- =============== END DEBUG LOG ==================
5140
5141 -- If the current position is the legal numbering position
5143 -- Get the current position id
5144 l_current_pos_id
5145 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5146 itemkey => itemkey,
5147 aname => 'CURRENT_POSITION_ID');
5148
5149 -- =============== START DEBUG LOG ================
5150 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg3',
5151 ' GetItemAttrNumber CURRENT_POSITION_ID --> ' || l_current_pos_id);
5152 -- =============== END DEBUG LOG ==================
5153
5154 IF (l_current_pos_id = l_legal_num_pos_id) THEN
5155 -- Set the result to 'Yes'
5156 result := 'COMPLETE:Y';
5157 -- =============== START DEBUG LOG ================
5158 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg4',
5159 ' l_current_pos_id = l_legal_num_pos_id -- result --> ' || result);
5160 -- =============== END DEBUG LOG ==================
5161
5162 ELSE
5163 -- Set the result to 'No'
5164 result := 'COMPLETE:N';
5165 -- =============== START DEBUG LOG ================
5166 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg5',
5167 ' result --> ' || result);
5168 -- =============== END DEBUG LOG ==================
5169 END IF;
5170
5171 END IF;
5172
5173 IF (funcmode <> 'RUN') THEN
5174 result := 'COMPLETE';
5175 -- =============== START DEBUG LOG ================
5176 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg6',
5177 ' funcmode <> RUN -- result --> '|| result );
5178 -- =============== END DEBUG LOG ==================
5179 return;
5180 END IF;
5181
5182 -- =============== START DEBUG LOG ================
5183 DEBUG_LOG_STRING (l_proc_level, 'Is_legal_num_req.Msg7',
5184 ' ** END IS_LEGAL_NUM_REQ ** ');
5185 -- =============== END DEBUG LOG ==================
5186
5187 EXCEPTION
5188 WHEN OTHERS THEN
5189 wf_core.context('IGI_EXP_APPROVAL_PKG','is_legal_num_req',itemtype,itemkey,
5190 to_char(actid),funcmode);
5191 -- =============== START DEBUG LOG ================
5192 DEBUG_LOG_UNEXP_ERROR ('Is_legal_num_req.Unexp1','DEFAULT');
5193 -- =============== END DEBUG LOG ==================
5194 raise;
5195
5196 END is_legal_num_req;
5197
5198
5199 -- *************************************************************************
5200 -- APPLY_TU_LEGAL_NUM
5201 -- *************************************************************************
5202
5203 PROCEDURE apply_tu_legal_num ( itemtype IN VARCHAR2,
5204 itemkey IN VARCHAR2,
5205 actid IN NUMBER,
5206 funcmode IN VARCHAR2,
5207 result OUT NOCOPY VARCHAR2) IS
5208
5209 l_tu_id igi_exp_dus.tu_id%TYPE;
5210 l_tu_type_header_id igi_exp_tus.tu_type_header_id%TYPE;
5211 l_tu_fiscal_year igi_exp_tus.tu_fiscal_year%TYPE;
5212 l_tu_legal_number igi_exp_tus.tu_legal_number%TYPE;
5213 l_tu_full_number VARCHAR2(240);
5214 l_error_message VARCHAR2(250);
5215
5216 BEGIN
5217
5218 -- =============== START DEBUG LOG ================
5219 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg1',
5220 ' ** START APPLY_TU_LEGAL_NUM ** ');
5221 -- =============== END DEBUG LOG ==================
5222
5223 IF (funcmode = 'RUN') THEN
5224
5225 -- Get the TU id
5226 l_tu_id
5227 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5228 itemkey => itemkey,
5229 aname => 'TU_ID');
5230
5231 -- =============== START DEBUG LOG ================
5232 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg2',
5233 ' GetItemAttrNumber TU_ID --> ' || l_tu_id );
5234 -- =============== END DEBUG LOG ==================
5235
5236 -- Get the TU type and the fiscal year of the TU
5237 SELECT tu_type_header_id
5238 ,tu_fiscal_year
5239 INTO l_tu_type_header_id
5240 ,l_tu_fiscal_year
5241 FROM igi_exp_tus
5242 WHERE tu_id = l_tu_id;
5243
5244 -- =============== START DEBUG LOG ================
5245 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg3',
5246 ' l_tu_type_header_id --> ' || l_tu_type_header_id ||
5247 ' l_tu_fiscal_year --> ' || l_tu_fiscal_year);
5248 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg4',
5249 ' Calling igi_exp_utils.generate_number ');
5250 -- =============== END DEBUG LOG ==================
5251
5252 -- Get the legal number for the TU
5256 ,l_tu_fiscal_year -- pi_fiscal_year
5253 igi_exp_utils.generate_number('TU' -- pi_number_type
5254 ,'L' -- pi_number_class
5255 ,l_tu_type_header_id -- pi_du_tu_type_id
5257 ,l_tu_legal_number -- po_du_tu_number
5258 ,l_error_message); -- po_error_message
5259
5260 -- =============== START DEBUG LOG ================
5261 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg5',
5262 ' l_tu_legal_number --> ' || l_tu_legal_number);
5263 -- =============== END DEBUG LOG ==================
5264
5265 IF (l_tu_legal_number is null) THEN
5266 -- An error occurred generating the TU legal number
5267 -- Set the error message attribute to be used in the
5268 -- notification sent to the system administrator
5269
5270 -- Set the error_message attribute
5271 wf_engine.SetItemAttrText ( itemtype => itemtype,
5272 itemkey => itemkey,
5273 aname => 'ERROR_MESSAGE',
5274 avalue => l_error_message);
5275
5276 -- =============== START DEBUG LOG ================
5277 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg6',
5278 ' SetItemAttrText ERROR_MESSAGE --> ' || l_error_message);
5279 -- =============== END DEBUG LOG ==================
5280
5281 -- Exit with result 'Failure
5282 result := 'COMPLETE:FAILURE';
5283
5284 -- =============== START DEBUG LOG ================
5285 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg7',
5286 ' result --> ' || result);
5287 -- =============== END DEBUG LOG ==================
5288
5289 return;
5290
5291 ELSE
5292
5293 -- TU Legal number was generated successfully
5294 -- Apply the legal number to the TU
5295 UPDATE igi_exp_tus
5296 SET tu_legal_number = l_tu_legal_number
5297 WHERE tu_id = l_tu_id;
5298
5299
5300 -- =============== START DEBUG LOG ================
5301 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg8',
5302 'UPDATE igi_exp_tus - ' || SQL%ROWCOUNT);
5303 -- =============== END DEBUG LOG ==================
5304
5305 -- OPSF(I) EXP Bug 2567802 26-Sep-2002 S Brewer Start(2)
5306 -- Set the TU Full Number attribute to include the legal number
5307 l_tu_full_number
5308 := wf_engine.GetItemAttrText ( itemtype => itemtype,
5309 itemkey => itemkey,
5310 aname => 'TU_FULL_NUMBER');
5311
5312 -- =============== START DEBUG LOG ================
5313 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg9',
5314 ' GetItemAttrText TU_FULL_NUMBER --> ' || l_tu_full_number);
5315 -- =============== END DEBUG LOG ==================
5316
5317 l_tu_full_number := l_tu_full_number||' ('||l_tu_legal_number||')';
5318
5319 -- =============== START DEBUG LOG ================
5320 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg10',
5321 ' l_tu_full_number --> ' || l_tu_full_number);
5322 -- =============== END DEBUG LOG ==================
5323
5324 wf_engine.SetItemAttrText ( itemtype => itemtype,
5325 itemkey => itemkey,
5326 aname => 'TU_FULL_NUMBER',
5327 avalue => l_tu_legal_number);
5328
5329 -- OPSF(I) EXP Bug 2567802 26-Sep-2002 S Brewer End(2)
5330
5331 -- =============== START DEBUG LOG ================
5332 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg11',
5333 ' SetItemAttrText TU_FULL_NUMBER --> ' || l_tu_legal_number);
5334 -- =============== END DEBUG LOG ==================
5335
5336 -- Set the result to Success
5337 result := 'COMPLETE:SUCCESS';
5338
5339 -- =============== START DEBUG LOG ================
5340 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg12',
5341 ' result --> ' || result);
5342 -- =============== END DEBUG LOG ==================
5343
5344 END IF;
5345
5346 END IF;
5347
5348 IF (funcmode <> 'RUN') THEN
5349 result := 'COMPLETE';
5350 -- =============== START DEBUG LOG ================
5351 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg13',
5352 ' funcmode <> RUN -- result --> ' || result);
5353 -- =============== END DEBUG LOG ==================
5354 return;
5355 END IF;
5356
5357 -- =============== START DEBUG LOG ================
5358 DEBUG_LOG_STRING (l_proc_level, 'Apply_tu_legal_num.Msg14',
5359 ' ** END APPLY_TU_LEGAL_NUM ** ');
5360 -- =============== END DEBUG LOG ==================
5361
5362 EXCEPTION
5366 -- =============== START DEBUG LOG ================
5363 WHEN OTHERS THEN
5364 wf_core.context('IGI_EXP_APPROVAL_PKG','apply_tu_legal_num',itemtype,itemkey,
5365 to_char(actid),funcmode);
5367 DEBUG_LOG_UNEXP_ERROR ('Apply_tu_legal_num.Unexp1','DEFAULT');
5368 -- =============== END DEBUG LOG ==================
5369 raise;
5370
5371 END apply_tu_legal_num;
5372
5373
5374
5375 -- *************************************************************************
5376 -- APPLY_DU_LEGAL_NUM
5377 -- *************************************************************************
5378
5379 PROCEDURE apply_du_legal_num ( itemtype IN VARCHAR2,
5380 itemkey IN VARCHAR2,
5381 actid IN NUMBER,
5382 funcmode IN VARCHAR2,
5383 result OUT NOCOPY VARCHAR2) IS
5384
5385 CURSOR c_get_du(p_tu_id igi_exp_dus.tu_id%TYPE)
5386 IS
5387 SELECT du_id
5388 ,du_type_header_id
5389 ,du_fiscal_year
5390 ,du_order_number
5391 FROM igi_exp_dus
5392 WHERE tu_id = p_tu_id
5393 AND du_status = 'ATR';
5394
5395 l_tu_id igi_exp_dus.tu_id%TYPE;
5396 l_du_id igi_exp_dus.du_id%TYPE;
5397 l_du_type_header_id igi_exp_dus.du_type_header_id%TYPE;
5398 l_du_fiscal_year igi_exp_dus.du_fiscal_year%TYPE;
5399 l_du_order_number igi_exp_dus.du_order_number%TYPE;
5400 l_du_legal_number igi_exp_dus.du_legal_number%TYPE;
5401 l_error_message VARCHAR2(250);
5402 l_du_failed VARCHAR2(1):='N';
5403
5404 BEGIN
5405
5406 -- =============== START DEBUG LOG ================
5407 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg1',
5408 ' ** START APPLY_DU_LEGAL_NUM ** ');
5409 -- =============== END DEBUG LOG ==================
5410
5411 IF (funcmode = 'RUN') THEN
5412
5413 -- Get the tu id
5414 l_tu_id
5415 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5416 itemkey => itemkey,
5417 aname => 'TU_ID');
5418
5419 -- =============== START DEBUG LOG ================
5420 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg2',
5421 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
5422 -- =============== END DEBUG LOG ==================
5423
5424 savepoint legal_num_save;
5425
5426 -- =============== START DEBUG LOG ================
5427 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg3',
5428 ' set savepoint legal_num_save ');
5429 -- =============== END DEBUG LOG ==================
5430
5431 OPEN c_get_du(l_tu_id);
5432 LOOP
5433
5434 FETCH c_get_du INTO l_du_id
5435 , l_du_type_header_id
5436 , l_du_fiscal_year
5437 , l_du_order_number;
5438
5439 -- =============== START DEBUG LOG ================
5440 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg4',
5441 ' l_du_id --> ' || l_du_id ||
5442 ' l_du_type_header_id --> ' || l_du_type_header_id ||
5443 ' l_du_fiscal_year --> ' || l_du_fiscal_year ||
5444 ' l_du_order_number --> ' || l_du_order_number);
5445 -- =============== END DEBUG LOG ==================
5446
5447 EXIT WHEN c_get_du%NOTFOUND;
5448
5449 -- =============== START DEBUG LOG ================
5450 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg5',
5451 ' calling igi_exp_utils.generate_number ');
5452 -- =============== END DEBUG LOG ==================
5453
5454 -- Get the legal number for the DU
5455 igi_exp_utils.generate_number('DU' -- pi_number_type
5456 ,'L' -- pi_number_class
5457 ,l_du_type_header_id -- pi_du_tu_type_id
5458 ,l_du_fiscal_year -- pi_fiscal_year
5459 ,l_du_legal_number -- po_du_tu_number
5460 ,l_error_message); -- po_error_message
5461
5462 -- =============== START DEBUG LOG ================
5463 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg6',
5464 ' l_du_legal_number --> ' || l_du_legal_number);
5465 -- =============== END DEBUG LOG ==================
5466
5467 IF (l_du_legal_number is null) THEN
5468 -- An error occurred generating the DU legal number
5469 -- Set the error message attribute to be used in the
5470 -- notification sent to the system administrator
5471
5472 -- Set the error_message attribute
5473 wf_engine.SetItemAttrText ( itemtype => itemtype,
5474 itemkey => itemkey,
5475 aname => 'ERROR_MESSAGE',
5479 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg7',
5476 avalue => l_error_message);
5477
5478 -- =============== START DEBUG LOG ================
5480 ' SetItemAttrText ERROR_MESSAGE --> ' || l_error_message);
5481 -- =============== END DEBUG LOG ==================
5482
5483 -- Set the legal_num_failed_du attribute
5484 wf_engine.SetItemAttrText ( itemtype => itemtype,
5485 itemkey => itemkey,
5486 aname => 'LEGAL_NUM_FAILED_DU',
5487 avalue => l_du_order_number);
5488
5489 -- =============== START DEBUG LOG ================
5490 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg8',
5491 ' SetItemAttrText LEGAL_NUM_FAILED_DU --> ' || l_du_order_number);
5492 -- =============== END DEBUG LOG ==================
5493
5494 -- rollback any legal numbering which did work
5495 rollback to legal_num_save;
5496
5497 -- =============== START DEBUG LOG ================
5498 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg9',
5499 ' rollback to legal_num_save ');
5500 -- =============== END DEBUG LOG ==================
5501
5502 -- set result to 'Failure'
5503 result := 'COMPLETE:FAILURE';
5504
5505 -- =============== START DEBUG LOG ================
5506 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg10',
5507 ' result --> ' || result );
5508 -- =============== END DEBUG LOG ==================
5509
5510 -- set l_du_failed to 'Y'
5511 l_du_failed := 'Y';
5512
5513 -- =============== START DEBUG LOG ================
5514 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg11',
5515 ' l_du_failed --> ' || l_du_failed);
5516 -- =============== END DEBUG LOG ==================
5517
5518 -- exit loop
5519 EXIT;
5520
5521 ELSE
5522
5523 -- DU Legal number was generated successfully
5524 -- Apply the legal number to the DU
5525 UPDATE igi_exp_dus
5526 SET du_legal_number = l_du_legal_number
5527 WHERE du_id = l_du_id;
5528
5529 -- =============== START DEBUG LOG ================
5530 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg12',
5531 ' UPDATE igi_exp_dus --> ' || SQL%ROWCOUNT);
5532 -- =============== END DEBUG LOG ==================
5533
5534 END IF;
5535 END LOOP;
5536
5537 IF (c_get_du%ISOPEN) THEN
5538 CLOSE c_get_du;
5539 END IF;
5540
5541 IF (l_du_failed = 'Y') THEN
5542 -- set result to 'Failure'
5543 result := 'COMPLETE:FAILURE';
5544 ELSE
5545 -- set result to 'Success'
5546 result := 'COMPLETE:SUCCESS';
5547 END IF;
5548
5549 -- =============== START DEBUG LOG ================
5550 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg13',
5551 ' result --> ' || result);
5552 -- =============== END DEBUG LOG ==================
5553
5554 END IF;
5555
5556 IF (funcmode <> 'RUN') THEN
5557 result := 'COMPLETE';
5558 -- =============== START DEBUG LOG ================
5559 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg14',
5560 ' ** START APPLY_DU_LEGAL_NUM ** ');
5561 -- =============== END DEBUG LOG ==================
5562 return;
5563 END IF;
5564
5565 -- =============== START DEBUG LOG ================
5566 DEBUG_LOG_STRING (l_proc_level, 'Apply_du_legal_num.Msg15',
5567 ' ** END APPLY_DU_LEGAL_NUM ** ');
5568 -- =============== END DEBUG LOG ==================
5569
5570 EXCEPTION
5571 WHEN OTHERS THEN
5572 wf_core.context('IGI_EXP_APPROVAL_PKG','apply_du_legal_num',itemtype,itemkey,
5573 to_char(actid),funcmode);
5574 -- =============== START DEBUG LOG ================
5575 DEBUG_LOG_UNEXP_ERROR ('Apply_du_legal_num.Unexp1','DEFAULT');
5576 -- =============== END DEBUG LOG ==================
5577 raise;
5578
5579 END apply_du_legal_num;
5580
5581
5582
5583 -- *************************************************************************
5584 -- SET_TU_STATUS
5585 -- *************************************************************************
5586
5587 PROCEDURE set_tu_status ( itemtype IN VARCHAR2,
5588 itemkey IN VARCHAR2,
5589 actid IN NUMBER,
5590 funcmode IN VARCHAR2,
5591 result OUT NOCOPY VARCHAR2) IS
5592
5593 l_tu_id igi_exp_dus.tu_id%TYPE;
5594 l_tu_status igi_exp_tus.tu_status%TYPE;
5598 -- Check if the TU has a status
5595 l_atr_du_count NUMBER;
5596
5597 -- Bug 4051910
5599 CURSOR C_stat(p_tu_id number)
5600 IS
5601 SELECT tu_status
5602 FROM igi_exp_tus
5603 WHERE tu_id = p_tu_id;
5604
5605
5606
5607 BEGIN
5608
5609 -- =============== START DEBUG LOG ================
5610 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg1',
5611 ' ** START SET_TU_STATUS ** ');
5612 -- =============== END DEBUG LOG ==================
5613
5614 IF (funcmode = 'RUN') THEN
5615
5616 -- Get the TU id
5617 l_tu_id
5618 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5619 itemkey => itemkey,
5620 aname => 'TU_ID');
5621
5622 -- =============== START DEBUG LOG ================
5623 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg2',
5624 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
5625 -- =============== END DEBUG LOG ==================
5626
5627 -- Bug 4051910
5628 OPEN c_stat(l_tu_id);
5629 FETCH c_stat INTO l_tu_status;
5630 CLOSE c_stat;
5631
5632 -- =============== START DEBUG LOG ================
5633 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg3',
5634 ' l_tu_status --> ' || l_tu_status);
5635 -- =============== END DEBUG LOG ==================
5636
5637 IF (l_tu_status = 'TRA') THEN
5638
5639 UPDATE igi_exp_tus
5640 SET tu_status = 'ATR'
5641 WHERE tu_id = l_tu_id;
5642 -- =============== START DEBUG LOG ================
5643 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg4',
5644 ' UPDATE igi_exp_tus --> ' || SQL%ROWCOUNT);
5645 -- =============== END DEBUG LOG ==================
5646
5647 END IF;
5648
5649 -- Find how many DUs in the TU are approved
5650 SELECT count(*)
5651 INTO l_atr_du_count
5652 FROM igi_exp_dus
5653 WHERE tu_id = l_tu_id
5654 AND du_status = 'ATR';
5655
5656 -- =============== START DEBUG LOG ================
5657 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg5',
5658 ' l_atr_du_count --> ' || l_atr_du_count);
5659 -- =============== END DEBUG LOG ==================
5660
5661 IF (l_atr_du_count = 0) THEN
5662 -- This TU contains no approved DUs
5663 -- Set the result to 'TU Empty'
5664 result := 'COMPLETE:TU_EMPTY';
5665 -- =============== START DEBUG LOG ================
5666 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg6',
5667 ' l_atr_du_count = 0 -- result --> ' || result);
5668 -- =============== END DEBUG LOG ==================
5669 ELSE
5670 -- This TU contains at least one approved DU
5671 -- Set the result to 'TU Not Empty'
5672 result := 'COMPLETE:TU_NOT_EMPTY';
5673 -- =============== START DEBUG LOG ================
5674 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg7',
5675 ' result --> ' || result);
5676 -- =============== END DEBUG LOG ==================
5677 END IF;
5678 END IF;
5679
5680 IF (funcmode <> 'RUN') THEN
5681 result := 'COMPLETE';
5682 -- =============== START DEBUG LOG ================
5683 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg8',
5684 ' funcmode <> RUN -- result --> ' || result);
5685 -- =============== END DEBUG LOG ==================
5686 return;
5687 END IF;
5688
5689 -- =============== START DEBUG LOG ================
5690 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_status.Msg9',
5691 ' ** END SET_TU_STATUS ** ');
5692 -- =============== END DEBUG LOG ==================
5693
5694 EXCEPTION
5695 WHEN OTHERS THEN
5696 wf_core.context('IGI_EXP_APPROVAL_PKG','set_tu_status',itemtype,itemkey,
5697 to_char(actid),funcmode);
5698 -- =============== START DEBUG LOG ================
5699 DEBUG_LOG_UNEXP_ERROR ('Set_tu_status.Unexp1','DEFAULT');
5700 -- =============== END DEBUG LOG ==================
5701 raise;
5702
5703 END set_tu_status;
5704
5705
5706 -- *************************************************************************
5707 -- GET_PARENT_POSITION
5708 -- *************************************************************************
5709
5710 PROCEDURE get_parent_position ( itemtype IN VARCHAR2,
5711 itemkey IN VARCHAR2,
5712 actid IN NUMBER,
5713 funcmode IN VARCHAR2,
5714 result OUT NOCOPY VARCHAR2) IS
5715
5716 CURSOR c_get_parent_position(p_position_id per_all_positions.position_id%TYPE
5717 ,p_pos_structure_version_id per_pos_structure_versions.pos_structure_version_id%TYPE
5721 FROM per_pos_structure_elements
5718 ,p_business_group_id hr_all_positions_f.business_group_id%TYPE)
5719 IS
5720 SELECT parent_position_id
5722 WHERE pos_structure_version_id = p_pos_structure_version_id
5723 AND business_group_id = p_business_group_id
5724 AND subordinate_position_id = p_position_id;
5725
5726 l_position_id per_all_positions.position_id%TYPE;
5727 l_parent_pos_id per_all_positions.position_id%TYPE;
5728 l_parent_pos_name per_all_positions.name%TYPE;
5729 l_final_apprv_pos_id igi_exp_apprv_profiles.final_apprv_pos_id%TYPE;
5730 l_business_group_id hr_all_positions_f.business_group_id%TYPE;
5731 l_pos_structure_version_id per_pos_structure_versions.pos_structure_version_id%TYPE;
5732
5733 BEGIN
5734
5735 -- =============== START DEBUG LOG ================
5736 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg1',
5737 ' ** START GET_PARENT_POSITION ** ');
5738 -- =============== END DEBUG LOG ==================
5739
5740 IF (funcmode = 'RUN') THEN
5741
5742 -- Get the current position id
5743 l_position_id
5744 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5745 itemkey => itemkey,
5746 aname => 'CURRENT_POSITION_ID');
5747
5748 -- =============== START DEBUG LOG ================
5749 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg2',
5750 ' GetItemAttrNumber CURRENT_POSITION_ID --> ' || l_position_id);
5751 -- =============== END DEBUG LOG ==================
5752
5753 -- Get the final approver position id
5754 l_final_apprv_pos_id
5755 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5756 itemkey => itemkey,
5757 aname => 'FINAL_APPRV_POS_ID');
5758
5759 -- =============== START DEBUG LOG ================
5760 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg3',
5761 ' GetItemAttrNumber FINAL_APPRV_POS_ID --> ' || l_final_apprv_pos_id);
5762 -- =============== END DEBUG LOG ==================
5763
5764 -- If the current position is the final approver position then
5765 -- this position has no parent position
5766 IF (l_position_id = l_final_apprv_pos_id) THEN
5767 -- set the result to 'No Parent' and exit
5768 result := 'COMPLETE:NO_PARENT';
5769 -- =============== START DEBUG LOG ================
5770 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg4',
5771 ' l_position_id = l_final_apprv_pos_id -- result --> ' || result);
5772 -- =============== END DEBUG LOG ==================
5773 return;
5774 END IF;
5775
5776 -- Now need to check if there is a parent position in the HR hierarchy
5777 -- Get the position structure version id
5778 l_pos_structure_version_id
5779 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5780 itemkey => itemkey,
5781 aname => 'POS_STRUCTURE_VERSION_ID');
5782
5783 -- =============== START DEBUG LOG ================
5784 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg5',
5785 ' GetItemAttrNumber POS_STRUCTURE_VERSION_ID --> ' ||l_pos_structure_version_id);
5786 -- =============== END DEBUG LOG ==================
5787
5788 -- Get the business group id
5789 l_business_group_id
5790 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5791 itemkey => itemkey,
5792 aname => 'BUSINESS_GROUP_ID');
5793
5794 -- =============== START DEBUG LOG ================
5795 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg6',
5796 ' GetItemAttrNumber BUSINESS_GROUP_ID --> ' || l_business_group_id);
5797 -- =============== END DEBUG LOG ==================
5798
5799 OPEN c_get_parent_position(l_position_id
5800 ,l_pos_structure_version_id
5801 ,l_business_group_id);
5802 FETCH c_get_parent_position INTO l_parent_pos_id;
5803
5804 -- =============== START DEBUG LOG ================
5805 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg7',
5806 ' l_position_id --> ' || l_position_id ||
5807 ' l_pos_structure_version_id --> ' || l_pos_structure_version_id ||
5808 ' l_business_group_id --> ' || l_business_group_id);
5809 -- =============== END DEBUG LOG ==================
5810
5811 IF c_get_parent_position%NOTFOUND THEN
5812 -- The current position does not have a parent in the HR hierarchy
5813 -- Set result to No Parent and exit
5814 result := 'COMPLETE:NO_PARENT';
5815 -- =============== START DEBUG LOG ================
5816 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg8',
5817 ' c_get_parent_position%NOTFOUND --> TRUE -- result --> ' || result);
5821 -- The current position has a parent
5818 -- =============== END DEBUG LOG ==================
5819 return;
5820 ELSE
5822 -- Set the workflow attribute current_position_id to the parent position
5823 wf_engine.SetItemAttrNumber( itemtype => itemtype,
5824 itemkey => itemkey,
5825 aname => 'CURRENT_POSITION_ID',
5826 avalue => l_parent_pos_id);
5827
5828 -- =============== START DEBUG LOG ================
5829 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg9',
5830 ' SetItemAttrNumber CURRENT_POSITION_ID --> ' || l_parent_pos_id);
5831 -- =============== END DEBUG LOG ==================
5832
5833 -- Get the position name
5834 SELECT name
5835 INTO l_parent_pos_name
5836 FROM hr_all_positions_f
5837 WHERE position_id = l_parent_pos_id;
5838
5839 -- =============== START DEBUG LOG ================
5840 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg10',
5841 ' l_parent_pos_name --> ' || l_parent_pos_name);
5842 -- =============== END DEBUG LOG ==================
5843
5844 -- Set the workflow attribute current_position_name to the parent position
5845 wf_engine.SetItemAttrText ( itemtype => itemtype,
5846 itemkey => itemkey,
5847 aname => 'CURRENT_POSITION_NAME',
5848 avalue => l_parent_pos_name);
5849
5850 -- =============== START DEBUG LOG ================
5851 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg11',
5852 ' SetItemAttrText CURRENT_POSITION_NAME --> ' || l_parent_pos_name);
5853 -- =============== END DEBUG LOG ==================
5854
5855 -- Set the result to Has a parent
5856 result := 'COMPLETE:HAS_PARENT';
5857
5858 -- =============== START DEBUG LOG ================
5859 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg12',
5860 ' result --> ' || result);
5861 -- =============== END DEBUG LOG ==================
5862
5863 return;
5864
5865 END IF;
5866
5867 END IF;
5868
5869 IF (funcmode <> 'RUN') THEN
5870 result := 'COMPLETE';
5871 -- =============== START DEBUG LOG ================
5872 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg13',
5873 ' funcmode <> RUN -- result --> ' || result);
5874 -- =============== END DEBUG LOG ==================
5875 return;
5876 END IF;
5877
5878 -- =============== START DEBUG LOG ================
5879 DEBUG_LOG_STRING (l_proc_level, 'Get_parent_position.Msg14',
5880 ' ** END GET_PARENT_POSITION ** ');
5881 -- =============== END DEBUG LOG ==================
5882
5883 EXCEPTION
5884 WHEN OTHERS THEN
5885 wf_core.context('IGI_EXP_APPROVAL_PKG','get_parent_position',itemtype,itemkey,
5886 to_char(actid),funcmode);
5887 -- =============== START DEBUG LOG ================
5888 DEBUG_LOG_UNEXP_ERROR ('Get_parent_position.Unexp1','DEFAULT');
5889 -- =============== END DEBUG LOG ==================
5890 raise;
5891
5892 END get_parent_position;
5893
5894
5895
5896 -- *************************************************************************
5897 -- GET_NEXT_INCOMPLETE_DU
5898 -- *************************************************************************
5899
5900 PROCEDURE get_next_incomplete_du( itemtype IN VARCHAR2,
5901 itemkey IN VARCHAR2,
5902 actid IN NUMBER,
5903 funcmode IN VARCHAR2,
5904 result OUT NOCOPY VARCHAR2) IS
5905
5906 l_tu_id igi_exp_dus.tu_id%TYPE;
5907 l_du_prep_name fnd_user.user_name%TYPE;
5908 l_du_id igi_exp_dus.du_id%TYPE;
5909
5910 BEGIN
5911
5912 -- =============== START DEBUG LOG ================
5913 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5914 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5915 -- =============== END DEBUG LOG ==================
5916
5917 IF (funcmode = 'RUN') THEN
5918
5919 -- Get the TU id
5920 l_tu_id
5921 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
5922 itemkey => itemkey,
5923 aname => 'TU_ID');
5924
5925 -- =============== START DEBUG LOG ================
5926 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5927 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5928 -- =============== END DEBUG LOG ==================
5929
5930 -- Get the next DU which has been approved and needs completing
5931 SELECT du.du_id
5932 ,fnd.user_name
5933 INTO l_du_id
5934 ,l_du_prep_name
5938 AND du.du_status = 'ATR'
5935 FROM igi_exp_dus du
5936 ,fnd_user fnd
5937 WHERE du.tu_id = l_tu_id
5939 AND du.du_by_user_id = fnd.user_id
5940 AND rownum = 1;
5941
5942 -- =============== START DEBUG LOG ================
5943 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5944 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5945 -- =============== END DEBUG LOG ==================
5946
5947 -- Set the du_id_for_completion attribute
5948 wf_engine.SetItemAttrNumber( itemtype => itemtype,
5949 itemkey => itemkey,
5950 aname => 'DU_ID_FOR_COMPLETION',
5951 avalue => l_du_id);
5952
5953 -- =============== START DEBUG LOG ================
5954 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5955 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5956 -- =============== END DEBUG LOG ==================
5957
5958 -- Set the du_prep_name_for_com attribute
5959 wf_engine.SetItemAttrText ( itemtype => itemtype,
5960 itemkey => itemkey,
5961 aname => 'DU_PREP_NAME_FOR_COM',
5962 avalue => l_du_prep_name);
5963
5964 -- =============== START DEBUG LOG ================
5965 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5966 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5967 -- =============== END DEBUG LOG ==================
5968
5969 END IF;
5970
5971 IF (funcmode <> 'RUN') THEN
5972 result := 'COMPLETE';
5973 -- =============== START DEBUG LOG ================
5974 DEBUG_LOG_STRING (l_proc_level, 'Get_next_incomplete_du.Msg1',
5975 ' ** START GET_NEXT_INCOMPLETE_DU ** ');
5976 -- =============== END DEBUG LOG ==================
5977 return;
5978 END IF;
5979
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
5985 EXCEPTION
5986 WHEN OTHERS THEN
5987 wf_core.context('IGI_EXP_APPROVAL_PKG','get_next_incomplete_du',itemtype,itemkey,
5988 to_char(actid),funcmode);
5989 -- =============== START DEBUG LOG ================
5990 DEBUG_LOG_UNEXP_ERROR ('Get_next_incomplete_du.Unexp1','DEFAULT');
5991 -- =============== END DEBUG LOG ==================
5992 raise;
5993 END get_next_incomplete_du;
5994
5995 -- *************************************************************************
5996 -- PROCESS_TRANSACTIONS
5997 -- *************************************************************************
5998
5999 PROCEDURE process_transactions ( itemtype IN VARCHAR2,
6000 itemkey IN VARCHAR2,
6001 actid IN NUMBER,
6002 funcmode IN VARCHAR2,
6003 result OUT NOCOPY VARCHAR2) IS
6004
6005 l_du_id igi_exp_dus.du_id%TYPE;
6006 l_app_id igi_exp_du_type_headers.application_id%TYPE;
6007 l_order_number igi_exp_dus.du_order_number%TYPE;
6008 l_legal_number igi_exp_dus.du_legal_number%TYPE;
6009 l_failed_du VARCHAR2(510);
6010 l_failed_trx VARCHAR2(50);
6011 l_gl_date DATE := sysdate;
6012 l_error_message VARCHAR2(4000);
6013 l_trx_failed_err_mess VARCHAR2(4000);
6014 l_trx_id NUMBER;
6015
6016 BEGIN
6017
6018 -- =============== START DEBUG LOG ================
6019 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg1',
6020 ' ** START PROCESS_TRANSACTIONS ** ');
6021 -- =============== END DEBUG LOG ==================
6022
6023 IF (funcmode = 'RUN') THEN
6024
6025 -- Get the DU id
6026 l_du_id
6027 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6028 itemkey => itemkey,
6029 aname => 'DU_ID_FOR_COMPLETION');
6030
6031 -- =============== START DEBUG LOG ================
6032 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg2',
6033 ' GetItemAttrNumber DU_ID_FOR_COMPLETION --> ' || l_du_id);
6034 -- =============== END DEBUG LOG ==================
6035
6036 -- Get the application id for the du
6037 SELECT du_type.application_id
6038 INTO l_app_id
6039 FROM igi_exp_du_type_headers_all du_type
6040 ,igi_exp_dus du
6041 WHERE du.du_id = l_du_id
6042 AND du.du_type_header_id = du_type.du_type_header_id;
6043
6044 -- =============== START DEBUG LOG ================
6045 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg3',
6046 ' l_app_id --> ' || l_app_id);
6047 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg4',
6051 -- Call the utility to complete (or approve) transactions
6048 ' Calling igi_exp_utils.complete_du ');
6049 -- =============== END DEBUG LOG ==================
6050
6052 igi_exp_utils.complete_du(l_du_id -- p_du_id
6053 ,l_app_id -- p_app_id
6054 ,l_gl_date -- p_gl_date
6055 ,l_error_message -- p_error_message
6056 ,l_trx_id); -- p_trx_id
6057
6058 -- =============== START DEBUG LOG ================
6059 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg5',
6060 ' l_error_message --> ' || l_error_message);
6061 -- =============== END DEBUG LOG ==================
6062
6063 IF (l_error_message <> 'Success') THEN
6064
6065 SELECT du_order_number, du_legal_number
6066 INTO l_order_number, l_legal_number
6067 FROM igi_exp_dus
6068 WHERE du_id = l_du_id;
6069
6070 -- =============== START DEBUG LOG ================
6071 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg6',
6072 ' l_order_number --> ' || l_order_number ||
6073 ' l_legal_number --> ' || l_legal_number);
6074 -- =============== END DEBUG LOG ==================
6075
6076 l_failed_du := l_order_number;
6077
6078 -- =============== START DEBUG LOG ================
6079 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg7',
6080 ' l_failed_du --> ' || l_failed_du);
6081 -- =============== END DEBUG LOG ==================
6082
6083 IF (l_legal_number is not null) THEN
6084 l_failed_du := l_failed_du||' ('||l_legal_number||')';
6085 END IF;
6086
6087 -- =============== START DEBUG LOG ================
6088 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg8',
6089 ' After if -- l_failed_du --> ' || l_failed_du);
6090 -- =============== END DEBUG LOG ==================
6091
6092 IF (l_trx_id is not null) THEN
6093 -- If the process failed for a particular transaction then
6094 -- Find the transaction name of the failed transaction
6095 IF (l_app_id = 200) THEN
6096
6097 -- =============== START DEBUG LOG ================
6098 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg9',
6099 ' l_trx_id is not null AND l_app_id = 200 ');
6100 -- =============== END DEBUG LOG ==================
6101
6102 SELECT invoice_num
6103 INTO l_failed_trx
6104 FROM ap_invoices
6105 WHERE invoice_id = l_trx_id;
6106
6107 -- =============== START DEBUG LOG ================
6108 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg10',
6109 ' l_failed_trx --> ' || l_failed_trx);
6110 -- =============== END DEBUG LOG ==================
6111
6112 ELSIF (l_app_id = 222) THEN
6113
6114 -- =============== START DEBUG LOG ================
6115 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg11',
6116 ' l_trx_id is not null AND l_app_id = 222 ');
6117 -- =============== END DEBUG LOG ==================
6118
6119 SELECT trx_number
6120 INTO l_failed_trx
6121 FROM ra_customer_trx
6122 WHERE customer_trx_id = l_trx_id;
6123
6124 -- =============== START DEBUG LOG ================
6125 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg12',
6126 ' l_failed_trx --> ' || l_failed_trx);
6127 -- =============== END DEBUG LOG ==================
6128
6129 END IF;
6130 END IF;
6131
6132
6133 -- Set the failed_du attribute
6134 wf_engine.SetItemAttrText ( itemtype => itemtype,
6135 itemkey => itemkey,
6136 aname => 'FAILED_DU',
6137 avalue => l_failed_du);
6138
6139 -- =============== START DEBUG LOG ================
6140 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg13',
6141 ' SetItemAttrText FAILED_DU --> ' || l_failed_du);
6142 -- =============== END DEBUG LOG ==================
6143
6144 -- Set the failed_trx attribute
6145 wf_engine.SetItemAttrText ( itemtype => itemtype,
6146 itemkey => itemkey,
6147 aname => 'FAILED_TRX',
6148 avalue => l_failed_trx);
6149
6150 -- =============== START DEBUG LOG ================
6151 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg14',
6152 ' SetItemAttrText FAILED_TRX --> ' || l_failed_trx);
6153 -- =============== END DEBUG LOG ==================
6154
6158 -- and append this DU_ID and error message to it.
6155 -- Want the trx_failed_error_message to be a list of du_ids which
6156 -- failed along with the error message for each du
6157 -- Therefore, get the current item attribute trx_failed_error_message
6159
6160 -- Get the current error message
6161 l_trx_failed_err_mess
6162 := wf_engine.GetItemAttrText ( itemtype => itemtype,
6163 itemkey => itemkey,
6164 aname => 'TRX_FAILED_ERROR_MESSAGE');
6165
6166 -- =============== START DEBUG LOG ================
6167 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg15',
6168 ' GetItemAttrText TRX_FAILED_ERROR_MESSAGE --> ' || l_trx_failed_err_mess);
6169 -- =============== END DEBUG LOG ==================
6170
6171
6172 -- Append this DU and error message to it
6173 l_trx_failed_err_mess := l_trx_failed_err_mess||', '||to_char(l_du_id)||l_error_message;
6174
6175 -- =============== START DEBUG LOG ================
6176 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg16',
6177 ' l_trx_failed_err_mess --> ' || l_trx_failed_err_mess);
6178 -- =============== END DEBUG LOG ==================
6179
6180 -- Set the trx_failed_error_message attribute
6181 wf_engine.SetItemAttrText ( itemtype => itemtype,
6182 itemkey => itemkey,
6183 aname => 'TRX_FAILED_ERROR_MESSAGE',
6184 avalue => l_trx_failed_err_mess);
6185
6186 -- =============== START DEBUG LOG ================
6187 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg17',
6188 ' SetItemAttrText TRX_FAILED_ERROR_MESSAGE --> ' || l_trx_failed_err_mess);
6189 -- =============== END DEBUG LOG ==================
6190
6191 -- Set the result to 'Failure'
6192 result := 'COMPLETE:FAILURE';
6193
6194 ELSE
6195 result := 'COMPLETE:SUCCESS';
6196
6197 END IF;
6198
6199 -- =============== START DEBUG LOG ================
6200 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg18',
6201 ' result --> ' || result);
6202 -- =============== END DEBUG LOG ==================
6203
6204 END IF;
6205
6206 IF (funcmode <> 'RUN') THEN
6207 result := 'COMPLETE';
6208 -- =============== START DEBUG LOG ================
6209 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg19',
6210 ' funcmode <> RUN -- result --> ' || result);
6211 -- =============== END DEBUG LOG ==================
6212 return;
6213 END IF;
6214
6215 -- =============== START DEBUG LOG ================
6216 DEBUG_LOG_STRING (l_proc_level, 'Process_transactions.Msg20',
6217 ' ** END PROCESS_TRANSACTIONS ** ');
6218 -- =============== END DEBUG LOG ==================
6219
6220 EXCEPTION
6221 WHEN OTHERS THEN
6222 wf_core.context('IGI_EXP_APPROVAL_PKG','process_transactions',itemtype,itemkey,
6223 to_char(actid),funcmode);
6224 -- =============== START DEBUG LOG ================
6225 DEBUG_LOG_UNEXP_ERROR ('Process_transactions.Unexp1','DEFAULT');
6226 -- =============== END DEBUG LOG ==================
6227 raise;
6228
6229 END process_transactions;
6230
6231
6232 -- *************************************************************************
6233 -- SET_DU_TO_COMPLETE
6234 -- *************************************************************************
6235
6236 PROCEDURE set_du_to_complete ( itemtype IN VARCHAR2,
6237 itemkey IN VARCHAR2,
6238 actid IN NUMBER,
6239 funcmode IN VARCHAR2,
6240 result OUT NOCOPY VARCHAR2) IS
6241
6242 l_du_id igi_exp_dus.du_id%TYPE;
6243
6244 BEGIN
6245
6246 -- =============== START DEBUG LOG ================
6247 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6248 ' ** START SET_DU_TO_COMPLETE ** ');
6249 -- =============== END DEBUG LOG ==================
6250
6251 IF (funcmode = 'RUN') THEN
6252
6253 -- Get the DU id
6254 l_du_id
6255 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6256 itemkey => itemkey,
6257 aname => 'DU_ID_FOR_COMPLETION');
6258
6259 -- =============== START DEBUG LOG ================
6260 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6261 ' GetItemAttrNumber DU_ID_FOR_COMPLETION --> '|| l_du_id);
6262 -- =============== END DEBUG LOG ==================
6263
6264 UPDATE igi_exp_dus
6265 SET du_status = 'COM'
6266 WHERE du_id = l_du_id;
6267
6268 -- =============== START DEBUG LOG ================
6269 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6273 END IF;
6270 ' UPDATE igi_exp_dus status - COM --> ' || SQL%ROWCOUNT);
6271 -- =============== END DEBUG LOG ==================
6272
6274
6275 IF (funcmode <> 'RUN') THEN
6276 result := 'COMPLETE';
6277 -- =============== START DEBUG LOG ================
6278 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6279 ' funcmode <> RUN -- result --> ' || result);
6280 -- =============== END DEBUG LOG ==================
6281 return;
6282 END IF;
6283
6284 -- =============== START DEBUG LOG ================
6285 DEBUG_LOG_STRING (l_proc_level, 'Set_du_to_complete.Msg1',
6286 ' ** END SET_DU_TO_COMPLETE ** ');
6287 -- =============== END DEBUG LOG ==================
6288
6289 EXCEPTION
6290 WHEN OTHERS THEN
6291 wf_core.context('IGI_EXP_APPROVAL_PKG','set_du_to_complete',itemtype,itemkey,
6292 to_char(actid),funcmode);
6293 -- =============== START DEBUG LOG ================
6294 DEBUG_LOG_UNEXP_ERROR ('Set_du_to_complete.Unexp1','DEFAULT');
6295 -- =============== END DEBUG LOG ==================
6296 raise;
6297
6298 END set_du_to_complete;
6299
6300
6301
6302 -- *************************************************************************
6303 -- PUT_FAILED_DU_ON_HOLD
6304 -- *************************************************************************
6305
6306 PROCEDURE put_failed_du_on_hold( itemtype IN VARCHAR2,
6307 itemkey IN VARCHAR2,
6308 actid IN NUMBER,
6309 funcmode IN VARCHAR2,
6310 result OUT NOCOPY VARCHAR2) IS
6311
6312 l_du_id igi_exp_dus.du_id%TYPE;
6313
6314 BEGIN
6315
6316 -- =============== START DEBUG LOG ================
6317 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg1',
6318 ' ** START PUT_FAILED_DU_ON_HOLD ** ');
6319 -- =============== END DEBUG LOG ==================
6320
6321 IF (funcmode = 'RUN') THEN
6322
6323 -- Get the DU id
6324 l_du_id
6325 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6326 itemkey => itemkey,
6327 aname => 'DU_ID_FOR_COMPLETION');
6328
6329 -- =============== START DEBUG LOG ================
6330 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg2',
6331 ' GetItemAttrNumber DU_ID_FOR_COMPLETION --> ' || l_du_id);
6332 -- =============== END DEBUG LOG ==================
6333
6334 UPDATE igi_exp_dus
6335 SET du_status = 'HLD'
6336 WHERE du_id = l_du_id;
6337
6338 -- =============== START DEBUG LOG ================
6339 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg3',
6340 ' UPDATE igi_exp_dus du_status = HLD --> ' || SQL%ROWCOUNT);
6341 -- =============== END DEBUG LOG ==================
6342
6343 END IF;
6344
6345 IF (funcmode <> 'RUN') THEN
6346 result := 'COMPLETE';
6347 -- =============== START DEBUG LOG ================
6348 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg4',
6349 ' funcmode <> RUN -- result --> ' || result);
6350 -- =============== END DEBUG LOG ==================
6351 return;
6352 END IF;
6353
6354 -- =============== START DEBUG LOG ================
6355 DEBUG_LOG_STRING (l_proc_level, 'Put_failed_du_on_hold.Msg5',
6356 ' ** END PUT_FAILED_DU_ON_HOLD ** ');
6357 -- =============== END DEBUG LOG ==================
6358
6359 EXCEPTION
6360 WHEN OTHERS THEN
6361 wf_core.context('IGI_EXP_APPROVAL_PKG','put_failed_du_on_hold',itemtype,itemkey,
6362 to_char(actid),funcmode);
6363 -- =============== START DEBUG LOG ================
6364 DEBUG_LOG_UNEXP_ERROR ('Put_failed_du_on_hold.Unexp1','DEFAULT');
6365 -- =============== END DEBUG LOG ==================
6366 raise;
6367
6368 END put_failed_du_on_hold;
6369
6370
6371 -- *************************************************************************
6372 -- CHECK_DUS_COMPLETED
6373 -- *************************************************************************
6374
6375 PROCEDURE check_dus_completed ( itemtype IN VARCHAR2,
6376 itemkey IN VARCHAR2,
6377 actid IN NUMBER,
6378 funcmode IN VARCHAR2,
6379 result OUT NOCOPY VARCHAR2) IS
6380
6381 l_tu_id igi_exp_dus.tu_id%TYPE;
6382 l_incom_count NUMBER;
6383
6384 BEGIN
6385
6386 -- =============== START DEBUG LOG ================
6387 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg1',
6388 ' ** START CHECK_DUS_COMPLETED ** ');
6389 -- =============== END DEBUG LOG ==================
6390
6391 IF (funcmode = 'RUN') THEN
6392
6393 -- Get the TU id
6394 l_tu_id
6398
6395 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6396 itemkey => itemkey,
6397 aname => 'TU_ID');
6399 -- =============== START DEBUG LOG ================
6400 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg2',
6401 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6402 -- =============== END DEBUG LOG ==================
6403
6404 SELECT count(*)
6405 INTO l_incom_count
6406 FROM igi_exp_dus
6407 WHERE tu_id = l_tu_id
6408 AND du_status = 'ATR';
6409
6410 -- =============== START DEBUG LOG ================
6411 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg3',
6412 ' l_incom_count --> ' || l_incom_count);
6413 -- =============== END DEBUG LOG ==================
6414
6415
6416 IF (l_incom_count = 0) THEN
6417 -- There are no more DUs left waiting completion
6418 -- Set the result to 'No'
6419 result := 'COMPLETE:N';
6420 ELSE
6421 -- There is at least one DU waiting completion
6422 -- Set the result to 'Yes'
6423 result := 'COMPLETE:Y';
6424 END IF;
6425
6426 -- =============== START DEBUG LOG ================
6427 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg4',
6428 ' result --> ' || result);
6429 -- =============== END DEBUG LOG ==================
6430
6431 END IF;
6432
6433 IF (funcmode <> 'RUN') THEN
6434 result := 'COMPLETE';
6435 -- =============== START DEBUG LOG ================
6436 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg5',
6437 ' funcmode <> RUN -- result --> ' || result);
6438 -- =============== END DEBUG LOG ==================
6439 return;
6440 END IF;
6441
6442 -- =============== START DEBUG LOG ================
6443 DEBUG_LOG_STRING (l_proc_level, 'Check_dus_completed.Msg6',
6444 ' ** END CHECK_DUS_COMPLETED ** ');
6445 -- =============== END DEBUG LOG ==================
6446
6447 EXCEPTION
6448 WHEN OTHERS THEN
6449 wf_core.context('IGI_EXP_APPROVAL_PKG','check_dus_completed',itemtype,itemkey,
6450 to_char(actid),funcmode);
6451 -- =============== START DEBUG LOG ================
6452 DEBUG_LOG_UNEXP_ERROR ('Check_dus_completed.Unexp1','DEFAULT');
6453 -- =============== END DEBUG LOG ==================
6454 raise;
6455 END check_dus_completed;
6456
6457
6458
6459 -- *************************************************************************
6460 -- ANY_DUS_WITH_TRX_FAIL
6461 -- *************************************************************************
6462
6463 PROCEDURE any_dus_with_trx_fail( itemtype IN VARCHAR2,
6464 itemkey IN VARCHAR2,
6465 actid IN NUMBER,
6466 funcmode IN VARCHAR2,
6467 result OUT NOCOPY VARCHAR2) IS
6468
6469
6470 l_tu_id igi_exp_dus.tu_id%TYPE;
6471 l_failed_du_count NUMBER;
6472 l_du_hold_list VARCHAR2(28000);
6473
6474 CURSOR c_du_hold_info(p_tu_id igi_exp_dus.tu_id%TYPE)
6475 IS
6476 SELECT du_order_number
6477 ,du_legal_number
6478 FROM igi_exp_dus
6479 WHERE tu_id = p_tu_id
6480 AND du_status = 'HLD';
6481
6482 BEGIN
6483
6484 -- =============== START DEBUG LOG ================
6485 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg1',
6486 ' ** START ANY_DUS_WITH_TRX_FAIL ** ');
6487 -- =============== END DEBUG LOG ==================
6488
6489 IF (funcmode = 'RUN') THEN
6490
6491 -- Get the TU id
6492 l_tu_id
6493 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6494 itemkey => itemkey,
6495 aname => 'TU_ID');
6496
6497 -- =============== START DEBUG LOG ================
6498 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg2',
6499 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6500 -- =============== END DEBUG LOG ==================
6501
6502 SELECT count(*)
6503 INTO l_failed_du_count
6504 FROM igi_exp_dus
6505 WHERE tu_id = l_tu_id
6506 AND du_status = 'HLD';
6507
6508 -- =============== START DEBUG LOG ================
6509 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg3',
6510 ' l_failed_du_count --> ' || l_failed_du_count);
6511 -- =============== END DEBUG LOG ==================
6512
6513 IF (l_failed_du_count = 0) THEN
6514 -- No DUs were put on hold due to transaction failure
6515 -- Set the result to 'No'
6516 result := 'COMPLETE:N';
6517
6518 -- =============== START DEBUG LOG ================
6522
6519 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg4',
6520 ' result --> ' || result);
6521 -- =============== END DEBUG LOG ==================
6523 ELSE
6524
6525 FOR I IN c_du_hold_info(l_tu_id)
6526 LOOP
6527
6528 IF (l_du_hold_list is NULL) THEN
6529 l_du_hold_list := I.du_order_number;
6530 ELSE
6531 l_du_hold_list := l_du_hold_list ||I.du_order_number;
6532 END IF;
6533
6534 -- =============== START DEBUG LOG ================
6535 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg5',
6536 ' du_order_number --> ' || I.du_order_number);
6537 -- =============== END DEBUG LOG ==================
6538
6539 IF (I.du_legal_number is not null) THEN
6540 l_du_hold_list := l_du_hold_list||' ('||I.du_legal_number||')';
6541 END IF;
6542
6543 -- =============== START DEBUG LOG ================
6544 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg6',
6545 ' I.du_legal_number --> ' || I.du_legal_number);
6546 -- =============== END DEBUG LOG ==================
6547
6548 l_du_hold_list := l_du_hold_list||fnd_global.local_chr(10);
6549
6550 IF LENGTH(l_du_hold_list) > 28000 THEN
6551 exit;
6552 END IF;
6553
6554 END LOOP;
6555
6556 -- Set the all_dus_list attribute
6557 wf_engine.SetItemAttrText ( itemtype => itemtype,
6558 itemkey => itemkey,
6559 aname => 'ADD_ATTR1',
6560 avalue => substr(l_du_hold_list, 1, 4000));
6561
6562 -- =============== START DEBUG LOG ================
6563 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg7',
6564 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_du_hold_list, 1, 4000));
6565 -- =============== END DEBUG LOG ==================
6566
6567 wf_engine.SetItemAttrText ( itemtype => itemtype,
6568 itemkey => itemkey,
6569 aname => 'ADD_ATTR2',
6570 avalue => substr(l_du_hold_list, 4001, 4000));
6571
6572 -- =============== START DEBUG LOG ================
6573 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg8',
6574 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_du_hold_list, 4001, 4000));
6575 -- =============== END DEBUG LOG ==================
6576
6577 wf_engine.SetItemAttrText ( itemtype => itemtype,
6578 itemkey => itemkey,
6579 aname => 'ADD_ATTR3',
6580 avalue => substr(l_du_hold_list, 8001, 4000));
6581
6582 -- =============== START DEBUG LOG ================
6583 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg9',
6584 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_hold_list, 8001, 4000));
6585 -- =============== END DEBUG LOG ==================
6586
6587 wf_engine.SetItemAttrText ( itemtype => itemtype,
6588 itemkey => itemkey,
6589 aname => 'ADD_ATTR4',
6590 avalue => substr(l_du_hold_list, 12001, 4000));
6591
6592 -- =============== START DEBUG LOG ================
6593 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg10',
6594 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_du_hold_list, 12001, 4000));
6595 -- =============== END DEBUG LOG ==================
6596
6597 wf_engine.SetItemAttrText ( itemtype => itemtype,
6598 itemkey => itemkey,
6599 aname => 'ADD_ATTR5',
6600 avalue => substr(l_du_hold_list, 16001, 4000));
6601
6602 -- =============== START DEBUG LOG ================
6603 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg11',
6604 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_du_hold_list, 16001, 4000));
6605 -- =============== END DEBUG LOG ==================
6606
6607 wf_engine.SetItemAttrText ( itemtype => itemtype,
6608 itemkey => itemkey,
6609 aname => 'ADD_ATTR6',
6610 avalue => substr(l_du_hold_list, 20001, 4000));
6611
6612 -- =============== START DEBUG LOG ================
6613 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg12',
6614 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_du_hold_list, 20001, 4000));
6615 -- =============== END DEBUG LOG ==================
6616
6617 wf_engine.SetItemAttrText ( itemtype => itemtype,
6618 itemkey => itemkey,
6619 aname => 'ADD_ATTR7',
6623 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg13',
6620 avalue => substr(l_du_hold_list, 24001, 4000));
6621
6622 -- =============== START DEBUG LOG ================
6624 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_du_hold_list, 24001, 4000));
6625 -- =============== END DEBUG LOG ==================
6626
6627 wf_engine.SetItemAttrText ( itemtype => itemtype,
6628 itemkey => itemkey,
6629 aname => 'ALL_DUS_LIST',
6630 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
6631
6632
6633 -- =============== START DEBUG LOG ================
6634 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg14',
6635 ' SetItemAttrText ALL_DUS_LIST --> ' ||
6636 ' plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
6637 -- =============== END DEBUG LOG ==================
6638
6639 -- Set the result to 'Yes'
6640 result := 'COMPLETE:Y';
6641
6642 -- =============== START DEBUG LOG ================
6643 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg15',
6644 ' result --> ' || result);
6645 -- =============== END DEBUG LOG ==================
6646
6647 END IF;
6648
6649 END IF;
6650
6651 IF (funcmode <> 'RUN') THEN
6652 result := 'COMPLETE';
6653 -- =============== START DEBUG LOG ================
6654 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg16',
6655 ' funcmode <> RUN -- result --> ' || result);
6656 -- =============== END DEBUG LOG ==================
6657 return;
6658 END IF;
6659
6660 -- =============== START DEBUG LOG ================
6661 DEBUG_LOG_STRING (l_proc_level, 'Any_dus_with_trx_fail.Msg17',
6662 ' ** END ANY_DUS_WITH_TRX_FAIL ** ');
6663 -- =============== END DEBUG LOG ==================
6664
6665 EXCEPTION
6666 WHEN OTHERS THEN
6667 wf_core.context('IGI_EXP_APPROVAL_PKG','any_dus_with_trx_fail',itemtype,itemkey,
6668 to_char(actid),funcmode);
6669 -- =============== START DEBUG LOG ================
6670 DEBUG_LOG_UNEXP_ERROR ('Any_dus_with_trx_fail.Unexp1','DEFAULT');
6671 -- =============== END DEBUG LOG ==================
6672 raise;
6673
6674 END any_dus_with_trx_fail;
6675
6676
6677
6678 -- *************************************************************************
6679 -- REMOVE_ALL_ON_HOLD_DUS
6680 -- *************************************************************************
6681
6682 PROCEDURE remove_all_on_hold_dus( itemtype IN VARCHAR2,
6683 itemkey IN VARCHAR2,
6684 actid IN NUMBER,
6685 funcmode IN VARCHAR2,
6686 result OUT NOCOPY VARCHAR2) IS
6687
6688 l_tu_id igi_exp_dus.tu_id%TYPE;
6689 l_du_amount igi_exp_dus.du_amount%TYPE;
6690
6691 BEGIN
6692
6693 -- =============== START DEBUG LOG ================
6694 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg1',
6695 ' ** START REMOVE_ALL_ON_HOLD_DUS ** ');
6696 -- =============== END DEBUG LOG ==================
6697
6698 IF (funcmode = 'RUN') THEN
6699
6700 -- Get the TU id
6701 l_tu_id
6702 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6703 itemkey => itemkey,
6704 aname => 'TU_ID');
6705
6706 -- =============== START DEBUG LOG ================
6707 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg2',
6708 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6709 -- =============== END DEBUG LOG ==================
6710
6711 -- OPSF(I) EXP Bug 2415293 S Brewer 18-JUL-2002 Start(3)
6712 -- Before removing the DUs which were put on hold, we need
6713 -- to update the TU amount to reflect the DUs were removed
6714 -- So, find the total DU amount for the DUs to be removed
6715 -- and update the TU amount
6716 -- i.e. New TU amount = TU amount - DU amount
6717
6718 -- Find the total DU amount
6719 SELECT sum(du_amount)
6720 INTO l_du_amount
6721 FROM igi_exp_dus
6722 WHERE tu_id = l_tu_id
6723 AND du_status = 'HLD';
6724
6725 -- =============== START DEBUG LOG ================
6726 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg3',
6727 ' l_du_amount --> ' || l_du_amount);
6728 -- =============== END DEBUG LOG ==================
6729
6730 -- Now update the TU amount
6731 UPDATE igi_exp_tus
6732 SET tu_amount = tu_amount - l_du_amount
6733 WHERE tu_id = l_tu_id;
6734
6735 -- =============== START DEBUG LOG ================
6736 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg4',
6740
6737 ' UPDATE igi_exp_tus -> ' || SQL%ROWCOUNT);
6738 -- =============== END DEBUG LOG ==================
6739
6741 -- OPSF(I) EXP Bug 2415293 S Brewer 18-JUL-2002 End(3)
6742
6743 -- Remove the DUs which were put on hold (due to transaction
6744 -- completion failure) from the TU
6745 UPDATE igi_exp_dus
6746 SET tu_id = null
6747 WHERE tu_id = l_tu_id
6748 AND du_status = 'HLD';
6749
6750 -- =============== START DEBUG LOG ================
6751 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg5',
6752 ' UPDATE igi_exp_dus status = HLD --> ' || SQL%ROWCOUNT);
6753 -- =============== END DEBUG LOG ==================
6754
6755 END IF;
6756
6757 IF (funcmode <> 'RUN') THEN
6758 result := 'COMPLETE';
6759 -- =============== START DEBUG LOG ================
6760 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg6',
6761 ' funcmode <> RUN -- result --> ' || result);
6762 -- =============== END DEBUG LOG ==================
6763 return;
6764 END IF;
6765
6766 -- =============== START DEBUG LOG ================
6767 DEBUG_LOG_STRING (l_proc_level, 'Remove_all_on_hold_dus.Msg7',
6768 ' ** END REMOVE_ALL_ON_HOLD_DUS ** ');
6769 -- =============== END DEBUG LOG ==================
6770
6771 EXCEPTION
6772 WHEN OTHERS THEN
6773 wf_core.context('IGI_EXP_APPROVAL_PKG','remove_all_on_hold_dus',itemtype,itemkey,
6774 to_char(actid),funcmode);
6775 -- =============== START DEBUG LOG ================
6776 DEBUG_LOG_UNEXP_ERROR ('Remove_all_on_hold_dus.Unexp1','DEFAULT');
6777 -- =============== END DEBUG LOG ==================
6778 raise;
6779
6780 END remove_all_on_hold_dus;
6781
6782
6783
6784 -- *************************************************************************
6785 -- CHECK_FOR_COMPLETE_DUS
6786 -- *************************************************************************
6787
6788 PROCEDURE check_for_complete_dus( itemtype IN VARCHAR2,
6789 itemkey IN VARCHAR2,
6790 actid IN NUMBER,
6791 funcmode IN VARCHAR2,
6792 result OUT NOCOPY VARCHAR2) IS
6793
6794 l_tu_id igi_exp_dus.tu_id%TYPE;
6795 l_com_du_count NUMBER;
6796
6797 BEGIN
6798
6799 -- =============== START DEBUG LOG ================
6800 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg1',
6801 ' ** START CHECK_FOR_COMPLETE_DUS ** ');
6802 -- =============== END DEBUG LOG ==================
6803
6804 IF (funcmode = 'RUN') THEN
6805
6806 -- Get the TU id
6807 l_tu_id
6808 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6809 itemkey => itemkey,
6810 aname => 'TU_ID');
6811
6812 -- =============== START DEBUG LOG ================
6813 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg2',
6814 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6815 -- =============== END DEBUG LOG ==================
6816
6817 SELECT count(*)
6818 INTO l_com_du_count
6819 FROM igi_exp_dus
6820 WHERE tu_id = l_tu_id
6821 AND du_status = 'COM';
6822
6823 -- =============== START DEBUG LOG ================
6824 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg3',
6825 ' l_com_du_count --> ' || l_com_du_count);
6826 -- =============== END DEBUG LOG ==================
6827
6828 IF (l_com_du_count = 0) THEN
6829 -- There are no completed DUs in this TU
6830 -- Set result to 'No'
6831 result := 'COMPLETE:N';
6832 ELSE
6833 -- There is at least one completed DU in this TU
6834 -- Set result to 'Yes'
6835 result := 'COMPLETE:Y';
6836 END IF;
6837
6838 -- =============== START DEBUG LOG ================
6839 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg4',
6840 ' result --> ' || result);
6841 -- =============== END DEBUG LOG ==================
6842 END IF;
6843
6844 IF (funcmode <> 'RUN') THEN
6845 result := 'COMPLETE';
6846 -- =============== START DEBUG LOG ================
6847 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg5',
6848 'funcmode <> RUN -- result --> ' || result);
6849 -- =============== END DEBUG LOG ==================
6850 return;
6851 END IF;
6852
6853 -- =============== START DEBUG LOG ================
6854 DEBUG_LOG_STRING (l_proc_level, 'Check_for_complete_dus.Msg6',
6855 ' ** END CHECK_FOR_COMPLETE_DUS ** ');
6856 -- =============== END DEBUG LOG ==================
6857
6858 EXCEPTION
6859 WHEN OTHERS THEN
6863 DEBUG_LOG_UNEXP_ERROR ('Check_for_complete_dus.Unexp1','DEFAULT');
6860 wf_core.context('IGI_EXP_APPROVAL_PKG','check_for_complete_dus',itemtype,itemkey,
6861 to_char(actid),funcmode);
6862 -- =============== START DEBUG LOG ================
6864 -- =============== END DEBUG LOG ==================
6865 raise;
6866 END check_for_complete_dus;
6867
6868
6869
6870 -- *************************************************************************
6871 -- BUILD_PREP_LIST_OF_COM_DUS
6872 -- *************************************************************************
6873
6874 PROCEDURE build_prep_list_of_com_dus( itemtype IN VARCHAR2,
6875 itemkey IN VARCHAR2,
6876 actid IN NUMBER,
6877 funcmode IN VARCHAR2,
6878 result OUT NOCOPY VARCHAR2) IS
6879
6880 CURSOR c_prep_list(p_tu_id igi_exp_dus.tu_id%TYPE)
6881 IS
6882 SELECT distinct du_by_user_id
6883 FROM igi_exp_dus
6884 WHERE tu_id = p_tu_id
6885 AND du_status = 'COM';
6886
6887 l_tu_id igi_exp_dus.tu_id%TYPE;
6888 l_user_id igi_exp_dus.du_by_user_id%TYPE;
6889 l_user_list VARCHAR2(1000);
6890
6891
6892 BEGIN
6893
6894 -- =============== START DEBUG LOG ================
6895 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg1',
6896 ' ** START BUILD_PREP_LIST_OF_COM_DUS ** ');
6897 -- =============== END DEBUG LOG ==================
6898
6899 IF (funcmode = 'RUN') THEN
6900
6901 -- Get the TU id
6902 l_tu_id
6903 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
6904 itemkey => itemkey,
6905 aname => 'TU_ID');
6906
6907 -- =============== START DEBUG LOG ================
6908 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg2',
6909 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
6910 -- =============== END DEBUG LOG ==================
6911
6912 OPEN c_prep_list(l_tu_id);
6913 LOOP
6914 FETCH c_prep_list INTO l_user_id;
6915 EXIT WHEN c_prep_list%NOTFOUND;
6916 l_user_list := l_user_list||','||l_user_id;
6917 -- =============== START DEBUG LOG ================
6918 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg3',
6919 ' l_user_list --> ' || l_user_list);
6920 -- =============== END DEBUG LOG ==================
6921 END LOOP;
6922 CLOSE c_prep_list;
6923
6924 -- Set the all_dus_list attribute
6925 wf_engine.SetItemAttrText ( itemtype => itemtype,
6926 itemkey => itemkey,
6927 aname => 'COM_DU_PREP_LIST',
6928 avalue => l_user_list);
6929
6930 -- =============== START DEBUG LOG ================
6931 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg4',
6932 ' SetItemAttrText COM_DU_PREP_LIST --> ' || l_user_list);
6933 -- =============== END DEBUG LOG ==================
6934
6935 END IF;
6936
6937 IF (funcmode <> 'RUN') THEN
6938 result := 'COMPLETE';
6939 -- =============== START DEBUG LOG ================
6940 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg5',
6941 ' funcmode <> RUN -- result --> ' || result);
6942 -- =============== END DEBUG LOG ==================
6943 return;
6944 END IF;
6945
6946 -- =============== START DEBUG LOG ================
6947 DEBUG_LOG_STRING (l_proc_level, 'Build_prep_list_of_com_dus.Msg6',
6948 ' ** END BUILD_PREP_LIST_OF_COM_DUS ** ');
6949 -- =============== END DEBUG LOG ==================
6950
6951 EXCEPTION
6952 WHEN OTHERS THEN
6953 wf_core.context('IGI_EXP_APPROVAL_PKG','build_prep_list_of_com_dus',itemtype,itemkey,
6954 to_char(actid),funcmode);
6955 -- =============== START DEBUG LOG ================
6956 DEBUG_LOG_UNEXP_ERROR ('Build_prep_list_of_com_dus.Unexp1','DEFAULT');
6957 -- =============== END DEBUG LOG ==================
6958 raise;
6959
6960 END build_prep_list_of_com_dus;
6961
6962 -- *************************************************************************
6963 -- GET_NEXT_PREP
6964 -- *************************************************************************
6965
6966 PROCEDURE get_next_prep ( itemtype IN VARCHAR2,
6967 itemkey IN VARCHAR2,
6968 actid IN NUMBER,
6969 funcmode IN VARCHAR2,
6970 result OUT NOCOPY VARCHAR2) IS
6971
6972 l_num NUMBER;
6973 l_prep_list VARCHAR2(1000);
6974 l_next_prep NUMBER;
6975 l_next_prep_name fnd_user.user_name%TYPE;
6976 l_tu_id igi_exp_dus.tu_id%TYPE;
6977
6978 l_com_du_list VARCHAR2(28000);
6979
6983 SELECT du_order_number
6980 CURSOR c_com_dus(p_tu_id igi_exp_dus.tu_id%TYPE
6981 ,p_du_by_user_id igi_exp_dus.du_by_user_id%TYPE)
6982 IS
6984 ,du_legal_number
6985 FROM igi_exp_dus
6986 WHERE tu_id = p_tu_id
6987 AND du_status = 'COM'
6988 AND du_by_user_id = p_du_by_user_id;
6989
6990
6991 BEGIN
6992
6993 -- =============== START DEBUG LOG ================
6994 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg1',
6995 ' ** START GET_NEXT_PREP ** ');
6996 -- =============== END DEBUG LOG ==================
6997
6998 IF (funcmode = 'RUN') THEN
6999
7000 -- Get the list of preparers of completed DUS
7001 l_prep_list
7002 := wf_engine.GetItemAttrText ( itemtype => itemtype,
7003 itemkey => itemkey,
7004 aname => 'COM_DU_PREP_LIST');
7005
7006 -- =============== START DEBUG LOG ================
7007 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg2',
7008 ' GetItemAttrText COM_DU_PREP_LIST --> ' || l_prep_list);
7009 -- =============== END DEBUG LOG ==================
7010
7011 IF (l_prep_list is null) THEN
7012 -- There are no more preparers in the list
7013 -- Set result to 'No More Preparers In List'
7014 result := 'COMPLETE:NO_PREPS_IN_LIST';
7015 -- =============== START DEBUG LOG ================
7016 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg3',
7017 ' l_prep_list is null -- result --> ' || result);
7018 -- =============== END DEBUG LOG ==================
7019 return;
7020 END IF;
7021
7022 l_num := INSTR(l_prep_list,',',-1);
7023
7024 -- =============== START DEBUG LOG ================
7025 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg4',
7026 ' l_num --> ' || l_num);
7027 -- =============== END DEBUG LOG ==================
7028
7029 IF (l_num = 0) THEN
7030 -- There is only one preparer left in list
7031 l_next_prep := l_prep_list;
7032 ELSE
7033 -- There is more than one preparer in list
7034 l_next_prep := SUBSTR(l_prep_list,l_num + 1);
7035 END IF;
7036
7037 -- =============== START DEBUG LOG ================
7038 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg5',
7039 ' l_next_prep --> ' || l_next_prep);
7040 -- =============== END DEBUG LOG ==================
7041
7042 -- Set the temp_du_preparer_id attribute
7043 wf_engine.SetItemAttrNumber( itemtype => itemtype,
7044 itemkey => itemkey,
7045 aname => 'TEMP_DU_PREPARER_ID',
7046 avalue => l_next_prep);
7047
7048 -- =============== START DEBUG LOG ================
7049 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg6',
7050 ' SetItemAttrNumber TEMP_DU_PREPARER_ID --> '||l_next_prep);
7051 -- =============== END DEBUG LOG ==================
7052
7053 SELECT user_name
7054 INTO l_next_prep_name
7055 FROM fnd_user
7056 WHERE user_id = l_next_prep;
7057
7058 -- =============== START DEBUG LOG ================
7059 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg7',
7060 ' l_next_prep_name --> ' || l_next_prep_name);
7061 -- =============== END DEBUG LOG ==================
7062
7063 -- Set the temp_du_preparer attribute
7064 wf_engine.SetItemAttrText ( itemtype => itemtype,
7065 itemkey => itemkey,
7066 aname => 'TEMP_DU_PREPARER_NAME',
7067 avalue => l_next_prep_name);
7068
7069 -- =============== START DEBUG LOG ================
7070 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg8',
7071 ' SetItemAttrText TEMP_DU_PREPARER_NAME --> ' || l_next_prep_name);
7072 -- =============== END DEBUG LOG ==================
7073
7074 -- Get the TU id
7075 l_tu_id
7076 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7077 itemkey => itemkey,
7078 aname => 'TU_ID');
7079
7080
7081 FOR I IN c_com_dus(l_tu_id, l_next_prep)
7082 LOOP
7083
7084 IF (l_com_du_list is NULL) THEN
7085 l_com_du_list := I.du_order_number;
7086 ELSE
7087 l_com_du_list := l_com_du_list ||I.du_order_number;
7088 END IF;
7089
7090 -- =============== START DEBUG LOG ================
7091 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg9',
7092 ' du_order_number --> ' || I.du_order_number);
7093 -- =============== END DEBUG LOG ==================
7094
7095 IF (I.du_legal_number is not null) THEN
7099 -- =============== START DEBUG LOG ================
7096 l_com_du_list := l_com_du_list||' ('||I.du_legal_number||')';
7097 END IF;
7098
7100 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg10',
7101 ' I.du_legal_number --> ' || I.du_legal_number);
7102 -- =============== END DEBUG LOG ==================
7103
7104 l_com_du_list := l_com_du_list||fnd_global.local_chr(10);
7105
7106 IF LENGTH(l_com_du_list) > 28000 THEN
7107 exit;
7108 END IF;
7109
7110 END LOOP;
7111
7112
7113 -- Set the all_dus_list attribute
7114 wf_engine.SetItemAttrText ( itemtype => itemtype,
7115 itemkey => itemkey,
7116 aname => 'ADD_ATTR1',
7117 avalue => substr(l_com_du_list, 1, 4000));
7118
7119 -- =============== START DEBUG LOG ================
7120 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg11',
7121 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_com_du_list, 1, 4000));
7122 -- =============== END DEBUG LOG ==================
7123
7124 wf_engine.SetItemAttrText ( itemtype => itemtype,
7125 itemkey => itemkey,
7126 aname => 'ADD_ATTR2',
7127 avalue => substr(l_com_du_list, 4001, 4000));
7128
7129 -- =============== START DEBUG LOG ================
7130 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg12',
7131 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_com_du_list, 4001, 4000));
7132 -- =============== END DEBUG LOG ==================
7133
7134 wf_engine.SetItemAttrText ( itemtype => itemtype,
7135 itemkey => itemkey,
7136 aname => 'ADD_ATTR3',
7137 avalue => substr(l_com_du_list, 8001, 4000));
7138
7139 -- =============== START DEBUG LOG ================
7140 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg13',
7141 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_com_du_list, 8001, 4000));
7142 -- =============== END DEBUG LOG ==================
7143
7144 wf_engine.SetItemAttrText ( itemtype => itemtype,
7145 itemkey => itemkey,
7146 aname => 'ADD_ATTR4',
7147 avalue => substr(l_com_du_list, 12001, 4000));
7148
7149 -- =============== START DEBUG LOG ================
7150 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg14',
7151 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_com_du_list, 12001, 4000));
7152 -- =============== END DEBUG LOG ==================
7153
7154 wf_engine.SetItemAttrText ( itemtype => itemtype,
7155 itemkey => itemkey,
7156 aname => 'ADD_ATTR5',
7157 avalue => substr(l_com_du_list, 16001, 4000));
7158
7159 -- =============== START DEBUG LOG ================
7160 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg15',
7161 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_com_du_list, 16001, 4000));
7162 -- =============== END DEBUG LOG ==================
7163
7164 wf_engine.SetItemAttrText ( itemtype => itemtype,
7165 itemkey => itemkey,
7166 aname => 'ADD_ATTR6',
7167 avalue => substr(l_com_du_list, 20001, 4000));
7168
7169 -- =============== START DEBUG LOG ================
7170 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg16',
7171 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_com_du_list, 20001, 4000));
7172 -- =============== END DEBUG LOG ==================
7173
7174 wf_engine.SetItemAttrText ( itemtype => itemtype,
7175 itemkey => itemkey,
7176 aname => 'ADD_ATTR7',
7177 avalue => substr(l_com_du_list, 24001, 4000));
7178
7179
7180 -- =============== START DEBUG LOG ================
7181 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg17',
7182 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_com_du_list, 24001, 4000));
7183 -- =============== END DEBUG LOG ==================
7184
7185 wf_engine.SetItemAttrText(itemtype => itemtype,
7186 itemkey => itemkey,
7187 aname => 'TEMP_DU_BY_PREP_LIST',
7188 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
7189
7190 -- =============== START DEBUG LOG ================
7191 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg18',
7192 ' SetItemAttrText TEMP_DU_BY_PREP_LIST --> ' ||
7196 -- Set the result to 'Next Preparer Fetched'
7193 ' plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
7194 -- =============== END DEBUG LOG ==================
7195
7197 result := 'COMPLETE:NEXT_PREP_FETCHED';
7198
7199 -- =============== START DEBUG LOG ================
7200 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg19',
7201 ' result --> ' || result);
7202 -- =============== END DEBUG LOG ==================
7203
7204 END IF;
7205
7206 IF (funcmode <> 'RUN') THEN
7207 result := 'COMPLETE';
7208 -- =============== START DEBUG LOG ================
7209 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg20',
7210 ' funcmode <> RUN -- result --> ' || result);
7211 -- =============== END DEBUG LOG ==================
7212 return;
7213 END IF;
7214
7215 -- =============== START DEBUG LOG ================
7216 DEBUG_LOG_STRING (l_proc_level, 'Get_next_prep.Msg21',
7217 ' ** END GET_NEXT_PREP ** ');
7218 -- =============== END DEBUG LOG ==================
7219
7220 EXCEPTION
7221 WHEN OTHERS THEN
7222 wf_core.context('IGI_EXP_APPROVAL_PKG','get_next_prep',itemtype,itemkey,
7223 to_char(actid),funcmode);
7224 -- =============== START DEBUG LOG ================
7225 DEBUG_LOG_UNEXP_ERROR ('Get_next_prep.Unexp1','DEFAULT');
7226 -- =============== END DEBUG LOG ==================
7227 raise;
7228
7229 END get_next_prep;
7230
7231
7232
7233 -- *************************************************************************
7234 -- REMOVE_PREP_FROM_LIST
7235 -- *************************************************************************
7236
7237 PROCEDURE remove_prep_from_list( itemtype IN VARCHAR2,
7238 itemkey IN VARCHAR2,
7239 actid IN NUMBER,
7240 funcmode IN VARCHAR2,
7241 result OUT NOCOPY VARCHAR2) IS
7242
7243 l_num NUMBER;
7244 l_prep_list VARCHAR2(1000);
7245 l_new_prep_list VARCHAR2(1000);
7246
7247 BEGIN
7248
7249 -- =============== START DEBUG LOG ================
7250 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg1',
7251 ' ** START REMOVE_PREP_FROM_LIST ** ');
7252 -- =============== END DEBUG LOG ==================
7253
7254 IF (funcmode = 'RUN') THEN
7255
7256 -- Get the list of preparers of completed dus
7257 l_prep_list
7258 := wf_engine.GetItemAttrText ( itemtype => itemtype,
7259 itemkey => itemkey,
7260 aname => 'COM_DU_PREP_LIST');
7261
7262 -- =============== START DEBUG LOG ================
7263 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg2',
7264 ' GetItemAttrText COM_DU_PREP_LIST --> ' || l_prep_list);
7265 -- =============== END DEBUG LOG ==================
7266
7267 -- This will remove the last preparer id from the list
7268 l_num := INSTR(l_prep_list,',',-1);
7269 l_new_prep_list := SUBSTR(l_prep_list,1,l_num-1);
7270
7271 -- =============== START DEBUG LOG ================
7272 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg3',
7273 ' l_num --> ' || l_num || ' l_new_prep_list --> ' || l_new_prep_list);
7274 -- =============== END DEBUG LOG ==================
7275
7276 -- Set the com_du_prep_list attribute to the new list
7277 wf_engine.SetItemAttrText ( itemtype => itemtype,
7278 itemkey => itemkey,
7279 aname => 'COM_DU_PREP_LIST',
7280 avalue => l_new_prep_list);
7281
7282 -- =============== START DEBUG LOG ================
7283 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg4',
7284 ' SetItemAttrText COM_DU_PREP_LIST --> ' || l_new_prep_list);
7285 -- =============== END DEBUG LOG ==================
7286
7287 END IF;
7288
7289 IF (funcmode <> 'RUN') THEN
7290 result := 'COMPLETE';
7291 -- =============== START DEBUG LOG ================
7292 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg5',
7293 ' funcmode <> RUN -- result --> ' || result);
7294 -- =============== END DEBUG LOG ==================
7295 return;
7296 END IF;
7297
7298 -- =============== START DEBUG LOG ================
7299 DEBUG_LOG_STRING (l_proc_level, 'Remove_prep_from_list.Msg6',
7300 ' ** END REMOVE_PREP_FROM_LIST ** ');
7301 -- =============== END DEBUG LOG ==================
7302
7303 EXCEPTION
7304 WHEN OTHERS THEN
7305 wf_core.context('IGI_EXP_APPROVAL_PKG','remove_prep_from_list',itemtype,itemkey,
7306 to_char(actid),funcmode);
7307 -- =============== START DEBUG LOG ================
7308 DEBUG_LOG_UNEXP_ERROR ('Remove_prep_from_list.Unexp1','DEFAULT');
7309 -- =============== END DEBUG LOG ==================
7310 raise;
7311 END remove_prep_from_list;
7312
7313
7317 -- *************************************************************************
7314
7315 -- *************************************************************************
7316 -- SET_TU_TO_COMPLETE
7318
7319 PROCEDURE set_tu_to_complete ( itemtype IN VARCHAR2,
7320 itemkey IN VARCHAR2,
7321 actid IN NUMBER,
7322 funcmode IN VARCHAR2,
7323 result OUT NOCOPY VARCHAR2) IS
7324
7325 l_tu_id igi_exp_dus.tu_id%TYPE;
7326
7327 BEGIN
7328
7329 -- =============== START DEBUG LOG ================
7330 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg1',
7331 ' ** START SET_TU_TO_COMPLETE ** ');
7332 -- =============== END DEBUG LOG ==================
7333
7334 IF (funcmode = 'RUN') THEN
7335
7336 -- Get the TU id
7337 l_tu_id
7338 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7339 itemkey => itemkey,
7340 aname => 'TU_ID');
7341
7342 -- =============== START DEBUG LOG ================
7343 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg2',
7344 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
7345 -- =============== END DEBUG LOG ==================
7346
7347 UPDATE igi_exp_tus
7348 SET tu_status = 'COM'
7349 WHERE tu_id = l_tu_id;
7350
7351 -- =============== START DEBUG LOG ================
7352 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg3',
7353 ' UPDATE igi_exp_tus --> ' || SQL%ROWCOUNT);
7354 -- =============== END DEBUG LOG ==================
7355
7356 END IF;
7357
7358 IF (funcmode <> 'RUN') THEN
7359 result := 'COMPLETE';
7360 -- =============== START DEBUG LOG ================
7361 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg4',
7362 ' funcmode <> RUN -- result --> ' || result);
7363 -- =============== END DEBUG LOG ==================
7364 return;
7365 END IF;
7366
7367 -- =============== START DEBUG LOG ================
7368 DEBUG_LOG_STRING (l_proc_level, 'Set_tu_to_complete.Msg5',
7369 ' ** END SET_TU_TO_COMPLETE ** ');
7370 -- =============== END DEBUG LOG ==================
7371
7372 EXCEPTION
7373 WHEN OTHERS THEN
7374 wf_core.context('IGI_EXP_APPROVAL_PKG','set_tu_to_complete',itemtype,itemkey,
7375 to_char(actid),funcmode);
7376 -- =============== START DEBUG LOG ================
7377 DEBUG_LOG_UNEXP_ERROR ('set_tu_to_complete.Unexp1','DEFAULT');
7378 -- =============== END DEBUG LOG ==================
7379 raise;
7380
7381 END set_tu_to_complete;
7382
7383
7384
7385 -- OPSF(I) EXP Bug 2415293 S Brewer 11-JUL-2002 Start(3)
7386 -- Added new procedures does_tu_have_legal_num and
7387 -- remove_rej_dus_from_tu and get_next_rejected_legal_du
7388
7389 -- *************************************************************************
7390 -- DOES_TU_HAVE_LEGAL_NUM
7391 -- *************************************************************************
7392
7393 PROCEDURE does_tu_have_legal_num( itemtype IN VARCHAR2,
7394 itemkey IN VARCHAR2,
7395 actid IN NUMBER,
7396 funcmode IN VARCHAR2,
7397 result OUT NOCOPY VARCHAR2) IS
7398
7399 l_tu_id igi_exp_dus.tu_id%TYPE;
7400 l_tu_legal_number igi_exp_tus.tu_legal_number%TYPE;
7401 -- Check if the TU has a legal number
7402 -- Bug 4051910
7403 CURSOR c_leg_num(c_tu_id number) is
7404 SELECT tu_legal_number
7405 FROM igi_exp_tus
7406 WHERE tu_id = c_tu_id;
7407
7408
7409
7410
7411 BEGIN
7412
7413 -- =============== START DEBUG LOG ================
7414 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg1',
7415 ' ** START DOES_TU_HAVE_LEGAL_NUM ** ');
7416 -- =============== END DEBUG LOG ==================
7417
7418 IF (funcmode = 'RUN') THEN
7419
7420 -- Get the TU id
7421 l_tu_id
7422 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7423 itemkey => itemkey,
7424 aname => 'TU_ID');
7425
7426 -- =============== START DEBUG LOG ================
7427 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg2',
7428 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
7429 -- =============== END DEBUG LOG ==================
7430
7431 -- Bug 4051910
7432 OPEN c_leg_num(l_tu_id);
7433 FETCH c_leg_num INTO l_tu_legal_number;
7434 CLOSE c_leg_num;
7435
7436
7437 -- =============== START DEBUG LOG ================
7438 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg3',
7439 ' l_tu_legal_number --> ' || l_tu_legal_number);
7440 -- =============== END DEBUG LOG ==================
7441
7442 IF (l_tu_legal_number is null) THEN
7443 -- The TU has not been assigned a legal number
7444 -- Set the result to 'No'
7445 result := 'COMPLETE:N';
7446 ELSE
7447 -- The TU has been assigned a legal number
7448 -- Set the result to 'Yes'
7452 -- =============== START DEBUG LOG ================
7449 result := 'COMPLETE:Y';
7450 END IF;
7451
7453 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg4',
7454 ' result --> ' || result);
7455 -- =============== END DEBUG LOG ==================
7456
7457 END IF;
7458
7459 IF (funcmode <> 'RUN') THEN
7460 result := 'COMPLETE';
7461 -- =============== START DEBUG LOG ================
7462 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg5',
7463 ' funcmode <> RUN -- result --> ' || result);
7464 -- =============== END DEBUG LOG ==================
7465 return;
7466 END IF;
7467
7468 -- =============== START DEBUG LOG ================
7469 DEBUG_LOG_STRING (l_proc_level, 'Does_tu_have_legal_num.Msg6',
7470 ' ** END DOES_TU_HAVE_LEGAL_NUM ** ');
7471 -- =============== END DEBUG LOG ==================
7472
7473 EXCEPTION
7474 WHEN OTHERS THEN
7475 wf_core.context('IGI_EXP_APPROVAL_PKG','does_tu_have_legal_num',itemtype,itemkey,
7476 to_char(actid),funcmode);
7477 -- =============== START DEBUG LOG ================
7478 DEBUG_LOG_UNEXP_ERROR ('Does_tu_have_legal_num.Unexp1','DEFAULT');
7479 -- =============== END DEBUG LOG ==================
7480 raise;
7481 END does_tu_have_legal_num;
7482
7483
7484
7485 -- *************************************************************************
7486 -- REMOVE_REJ_DUS_FROM_TU
7487 -- *************************************************************************
7488
7489 PROCEDURE remove_rej_dus_from_tu( itemtype IN VARCHAR2,
7490 itemkey IN VARCHAR2,
7491 actid IN NUMBER,
7492 funcmode IN VARCHAR2,
7493 result OUT NOCOPY VARCHAR2) IS
7494
7495 l_tu_id igi_exp_dus.tu_id%TYPE;
7496 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
7497
7498 BEGIN
7499
7500 -- =============== START DEBUG LOG ================
7501 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg1',
7502 ' ** START REMOVE_REJ_DUS_FROM_TU ** ');
7503 -- =============== END DEBUG LOG ==================
7504
7505 IF (funcmode = 'RUN') THEN
7506
7507 -- Get the TU id
7508 l_tu_id
7509 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7510 itemkey => itemkey,
7511 aname => 'TU_ID');
7512
7513 -- =============== START DEBUG LOG ================
7514 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg2',
7515 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
7516 -- =============== END DEBUG LOG ==================
7517
7518 -- Get the DU preparer id
7519 l_du_prep_id
7520 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7521 itemkey => itemkey,
7522 aname => 'TEMP_DU_PREPARER_ID');
7523
7524
7525 -- =============== START DEBUG LOG ================
7526 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg3',
7527 ' GetItemAttrNumber TEMP_DU_PREPARER_ID --> ' || l_du_prep_id );
7528 -- =============== END DEBUG LOG ==================
7529
7530 -- Remove the rejected DUs (prepared by user l_du_prep_id) from the
7531 -- TU
7532 UPDATE igi_exp_dus
7533 SET tu_id = null
7534 WHERE tu_id = l_tu_id
7535 AND du_by_user_id = l_du_prep_id
7536 AND du_status = 'REJ';
7537
7538 -- =============== START DEBUG LOG ================
7539 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg4',
7540 ' UPDATE igi_exp_dus du_status = REJ --> ' || SQL%ROWCOUNT);
7541 -- =============== END DEBUG LOG ==================
7542
7543 END IF;
7544
7545 IF (funcmode <> 'RUN') THEN
7546 result := 'COMPLETE';
7547 -- =============== START DEBUG LOG ================
7548 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg5',
7549 ' funcmode <> RUN -- result --> ' || result);
7550 -- =============== END DEBUG LOG ==================
7551 return;
7552 END IF;
7553
7554 -- =============== START DEBUG LOG ================
7555 DEBUG_LOG_STRING (l_proc_level, 'Remove_rej_dus_from_tu.Msg6',
7556 ' ** START REMOVE_REJ_DUS_FROM_TU ** ');
7557 -- =============== END DEBUG LOG ==================
7558
7559 EXCEPTION
7560 WHEN OTHERS THEN
7561 wf_core.context('IGI_EXP_APPROVAL_PKG','remove_rej_dus_from_tu',itemtype,itemkey,
7562 to_char(actid),funcmode);
7563 -- =============== START DEBUG LOG ================
7564 DEBUG_LOG_UNEXP_ERROR ('Remove_rej_dus_from_tu.Unexp1','DEFAULT');
7565 -- =============== END DEBUG LOG ==================
7566 raise;
7567 END remove_rej_dus_from_tu;
7568
7569
7570 -- *************************************************************************
7571 -- GET_NEXT_REJECTED_LEGAL_DU
7572 -- *************************************************************************
7573
7574 PROCEDURE get_next_rejected_legal_du( itemtype IN VARCHAR2,
7575 itemkey IN VARCHAR2,
7576 actid IN NUMBER,
7580 CURSOR c_next_du_rej(p_tu_id igi_exp_dus.tu_id%TYPE)
7577 funcmode IN VARCHAR2,
7578 result OUT NOCOPY VARCHAR2) IS
7579
7581 IS
7582 SELECT du_id
7583 ,du_by_user_id
7584 FROM igi_exp_dus du
7585 WHERE tu_id = p_tu_id
7586 AND du_status = 'REJ'
7587 AND EXISTS (SELECT 'AR'
7588 FROM igi_exp_ar_trans ar
7589 WHERE ar.du_id = du.du_id
7590 UNION
7591 SELECT 'AP'
7592 FROM igi_exp_ap_trans ap
7593 WHERE ap.du_id = du.du_id)
7594 AND rownum = 1;
7595
7596
7597 CURSOR c_rej_du_info(p_tu_id igi_exp_dus.tu_id%TYPE
7598 ,p_du_preparer_id igi_exp_dus.du_by_user_id%TYPE)
7599 IS
7600 SELECT du_order_number
7601 ,du_legal_number
7602 FROM igi_exp_dus du
7603 WHERE tu_id = p_tu_id
7604 AND du_status = 'REJ'
7605 AND du_by_user_id = p_du_preparer_id
7606 AND EXISTS (SELECT 'AR'
7607 FROM igi_exp_ar_trans ar
7608 WHERE ar.du_id = du.du_id
7609 UNION
7610 SELECT 'AP'
7611 FROM igi_exp_ap_trans ap
7612 WHERE ap.du_id = du.du_id);
7613
7614 l_tu_id igi_exp_dus.tu_id%TYPE;
7615 l_du_id igi_exp_dus.du_id%TYPE;
7616 l_du_prep_id igi_exp_dus.du_by_user_id%TYPE;
7617 l_du_prep_name fnd_user.user_name%TYPE;
7618
7619 l_du_rej_list VARCHAR2(28000);
7620
7621
7622 BEGIN
7623
7624 -- =============== START DEBUG LOG ================
7625 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg1',
7626 ' ** START GET_NEXT_REJECTED_LEGAL_DU ** ');
7627 -- =============== END DEBUG LOG ==================
7628
7629 IF (funcmode = 'RUN') THEN
7630
7631 -- Get the TU id
7632 l_tu_id
7633 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7634 itemkey => itemkey,
7635 aname => 'TU_ID');
7636
7637 -- =============== START DEBUG LOG ================
7638 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg2',
7639 ' GetItemAttrNumber TU_ID --> ' || l_tu_id);
7640 -- =============== END DEBUG LOG ==================
7641
7642 -- Get the next rejected legal DU in this TU
7643 OPEN c_next_du_rej(l_tu_id);
7644 FETCH c_next_du_rej INTO l_du_id, l_du_prep_id;
7645
7646 -- =============== START DEBUG LOG ================
7647 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg3',
7648 ' l_du_id --> ' || l_du_id || ' l_du_prep_id --> ' || l_du_prep_id);
7649 -- =============== END DEBUG LOG ==================
7650
7651 IF (c_next_du_rej%NOTFOUND) THEN
7652 -- There are no more rejected DUs to deal with
7653 -- Set result to 'No More DUs'
7654 result := 'COMPLETE:NO_DUS_IN_LIST';
7655
7656 -- =============== START DEBUG LOG ================
7657 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg4',
7658 ' c_next_du_rej%NOTFOUND -- result --> ' || result);
7659 -- =============== END DEBUG LOG ==================
7660
7661 ELSE
7662 -- The next rejected DU has been fetched
7663 -- Set the temp_du_preparer_id attribute
7664 wf_engine.SetItemAttrNumber( itemtype => itemtype,
7665 itemkey => itemkey,
7666 aname => 'TEMP_DU_PREPARER_ID',
7667 avalue => l_du_prep_id);
7668
7669 -- =============== START DEBUG LOG ================
7670 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg5',
7671 ' SetItemAttrNumber TEMP_DU_PREPARER_ID --> ' || l_du_prep_id);
7672 -- =============== END DEBUG LOG ==================
7673
7674 -- Get the name of the preparer to send the notification to
7675 SELECT user_name
7676 INTO l_du_prep_name
7677 FROM fnd_user
7678 WHERE user_id = l_du_prep_id;
7679
7680 -- =============== START DEBUG LOG ================
7681 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg6',
7682 ' l_du_prep_name --> ' || l_du_prep_name);
7683 -- =============== END DEBUG LOG ==================
7684
7685 -- Set the temp_du_preparer_name attribute
7686 wf_engine.SetItemAttrText ( itemtype => itemtype,
7687 itemkey => itemkey,
7688 aname => 'TEMP_DU_PREPARER_NAME',
7689 avalue => l_du_prep_name);
7690
7691 -- =============== START DEBUG LOG ================
7692 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg7',
7693 ' SetItemAttrText TEMP_DU_PREPARER_NAME --> ' || l_du_prep_name);
7694 -- =============== END DEBUG LOG ==================
7695
7696 FOR I IN c_rej_du_info(l_tu_id,l_du_prep_id)
7697 LOOP
7698
7699 IF (l_du_rej_list is NULL) THEN
7700 l_du_rej_list := I.du_order_number;
7701 ELSE
7705 -- =============== START DEBUG LOG ================
7702 l_du_rej_list := l_du_rej_list ||I.du_order_number;
7703 END IF;
7704
7706 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg8',
7707 ' du_order_number --> ' || I.du_order_number);
7708 -- =============== END DEBUG LOG ==================
7709
7710 IF (I.du_legal_number is not null) THEN
7711 l_du_rej_list := l_du_rej_list||' ('||I.du_legal_number||')';
7712 END IF;
7713
7714 -- =============== START DEBUG LOG ================
7715 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg9',
7716 ' I.du_legal_number --> ' || I.du_legal_number);
7717 -- =============== END DEBUG LOG ==================
7718
7719 l_du_rej_list := l_du_rej_list||fnd_global.local_chr(10);
7720
7721 IF LENGTH(l_du_rej_list) > 28000 THEN
7722 exit;
7723 END IF;
7724
7725 END LOOP;
7726
7727 -- Set the all_dus_list attribute
7728 wf_engine.SetItemAttrText ( itemtype => itemtype,
7729 itemkey => itemkey,
7730 aname => 'ADD_ATTR1',
7731 avalue => substr(l_du_rej_list, 1, 4000));
7732
7733 -- =============== START DEBUG LOG ================
7734 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg10',
7735 ' SetItemAttrText ADD_ATTR1 --> ' || substr(l_du_rej_list, 1, 4000));
7736 -- =============== END DEBUG LOG ==================
7737
7738 wf_engine.SetItemAttrText ( itemtype => itemtype,
7739 itemkey => itemkey,
7740 aname => 'ADD_ATTR2',
7741 avalue => substr(l_du_rej_list, 4001, 4000));
7742
7743 -- =============== START DEBUG LOG ================
7744 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg11',
7745 ' SetItemAttrText ADD_ATTR2 --> ' || substr(l_du_rej_list, 4001, 4000));
7746 -- =============== END DEBUG LOG ==================
7747
7748 wf_engine.SetItemAttrText ( itemtype => itemtype,
7749 itemkey => itemkey,
7750 aname => 'ADD_ATTR3',
7751 avalue => substr(l_du_rej_list, 8001, 4000));
7752
7753 -- =============== START DEBUG LOG ================
7754 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg12',
7755 ' SetItemAttrText ADD_ATTR3 --> ' || substr(l_du_rej_list, 8001, 4000));
7756 -- =============== END DEBUG LOG ==================
7757
7758 wf_engine.SetItemAttrText ( itemtype => itemtype,
7759 itemkey => itemkey,
7760 aname => 'ADD_ATTR4',
7761 avalue => substr(l_du_rej_list, 12001, 4000));
7762
7763 -- =============== START DEBUG LOG ================
7764 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg13',
7765 ' SetItemAttrText ADD_ATTR4 --> ' || substr(l_du_rej_list, 12001, 4000));
7766 -- =============== END DEBUG LOG ==================
7767
7768 wf_engine.SetItemAttrText ( itemtype => itemtype,
7769 itemkey => itemkey,
7770 aname => 'ADD_ATTR5',
7771 avalue => substr(l_du_rej_list, 16001, 4000));
7772
7773 -- =============== START DEBUG LOG ================
7774 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg14',
7775 ' SetItemAttrText ADD_ATTR5 --> ' || substr(l_du_rej_list, 16001, 4000));
7776 -- =============== END DEBUG LOG ==================
7777
7778 wf_engine.SetItemAttrText ( itemtype => itemtype,
7779 itemkey => itemkey,
7780 aname => 'ADD_ATTR6',
7781 avalue => substr(l_du_rej_list, 20001, 4000));
7782
7783 -- =============== START DEBUG LOG ================
7784 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg15',
7785 ' SetItemAttrText ADD_ATTR6 --> ' || substr(l_du_rej_list, 20001, 4000));
7786 -- =============== END DEBUG LOG ==================
7787
7788 wf_engine.SetItemAttrText ( itemtype => itemtype,
7789 itemkey => itemkey,
7790 aname => 'ADD_ATTR7',
7791 avalue => substr(l_du_rej_list, 24001, 4000));
7792
7793
7794 -- =============== START DEBUG LOG ================
7795 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg16',
7796 ' SetItemAttrText ADD_ATTR7 --> ' || substr(l_du_rej_list, 24001, 4000));
7797 -- =============== END DEBUG LOG ==================
7798
7799 -- Set the temp_du_by_prep_list attribute
7800 wf_engine.SetItemAttrText ( itemtype => itemtype,
7801 itemkey => itemkey,
7802 aname => 'TEMP_DU_BY_PREP_LIST',
7803 avalue => 'plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
7804
7805
7809 ' plsqlclob:igi_exp_approval_pkg.Create_du_list/'||itemtype||':'||itemkey);
7806 -- =============== START DEBUG LOG ================
7807 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg17',
7808 ' SetItemAttrText TEMP_DU_BY_PREP_LIST --> ' ||
7810 -- =============== END DEBUG LOG ==================
7811
7812 -- Set the result to 'Next DU Fetched'
7813 result := 'COMPLETE:NEXT_DU_FETCHED';
7814
7815 -- =============== START DEBUG LOG ================
7816 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg18',
7817 ' result --> '||result);
7818 -- =============== END DEBUG LOG ==================
7819
7820 END IF;
7821
7822 IF (c_next_du_rej%ISOPEN) THEN
7823 CLOSE c_next_du_rej;
7824 END IF;
7825
7826 END IF;
7827
7828 IF (funcmode <> 'RUN') THEN
7829 result := 'COMPLETE';
7830 -- =============== START DEBUG LOG ================
7831 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg19',
7832 ' funcmode <> RUN -- result --> '|| result);
7833 -- =============== END DEBUG LOG ==================
7834 return;
7835 END IF;
7836
7837 -- =============== START DEBUG LOG ================
7838 DEBUG_LOG_STRING (l_proc_level, 'Get_next_rejected_legal_du.Msg20',
7839 ' ** END GET_NEXT_REJECTED_LEGAL_DU ** ');
7840 -- =============== END DEBUG LOG ==================
7841
7842 EXCEPTION
7843 WHEN OTHERS THEN
7844 wf_core.context('IGI_EXP_APPROVAL_PKG','get_next_rejected_legal_du',itemtype,itemkey,
7845 to_char(actid),funcmode);
7846 -- =============== START DEBUG LOG ================
7847 DEBUG_LOG_UNEXP_ERROR ('Get_next_rejected_legal_du.Unexp1','DEFAULT');
7848 -- =============== END DEBUG LOG ==================
7849 raise;
7850
7851 END get_next_rejected_legal_du;
7852 -- OPSF(I) EXP Bug 2415293 S Brewer 11-JUL-2002 End(3)
7853
7854
7855 -- OPSF(I) EXP Bug 2379693 S Brewer 16-JUL-2002 Start(1)
7856 -- Added new procedure is_transmitter_final_apprv
7857
7858 -- *************************************************************************
7859 -- IS_TRANSMITTER_FINAL_APPRV
7860 -- *************************************************************************
7861
7862 PROCEDURE is_transmitter_final_apprv( itemtype IN VARCHAR2,
7863 itemkey IN VARCHAR2,
7864 actid IN NUMBER,
7865 funcmode IN VARCHAR2,
7866 result OUT NOCOPY VARCHAR2) IS
7867
7868 l_transmitter_position_id per_all_positions.position_id%TYPE;
7869 l_final_apprv_pos_id igi_exp_apprv_profiles.final_apprv_pos_id%TYPE;
7870
7871 BEGIN
7872
7873 -- =============== START DEBUG LOG ================
7874 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg1',
7875 ' ** START IS_TRANSMITTER_FINAL_APPRV ** ');
7876 -- =============== END DEBUG LOG ==================
7877
7878 IF (funcmode = 'RUN') THEN
7879
7880 -- Get the transmitter position id
7881 l_transmitter_position_id
7882 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7883 itemkey => itemkey,
7884 aname => 'TRANSMITTER_POSITION_ID');
7885
7886 -- =============== START DEBUG LOG ================
7887 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg2',
7888 ' GetItemAttrNumber TRANSMITTER_POSITION_ID --> '||l_transmitter_position_id);
7889 -- =============== END DEBUG LOG ==================
7890
7891 -- Get the final approver position id
7892 l_final_apprv_pos_id
7893 := wf_engine.GetItemAttrNumber( itemtype => itemtype,
7894 itemkey => itemkey,
7895 aname => 'FINAL_APPRV_POS_ID');
7896
7897 -- =============== START DEBUG LOG ================
7898 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg3',
7899 ' GetItemAttrNumber FINAL_APPRV_POS_ID --> '||l_final_apprv_pos_id );
7900 -- =============== END DEBUG LOG ==================
7901
7902 -- Check if the transmitter position is the same as the final position
7903 IF (l_transmitter_position_id = l_final_apprv_pos_id) THEN
7904 -- The transmitter has the final approval position
7905 -- Set the result to 'Yes'
7906 result := 'COMPLETE:Y';
7907 ELSE
7908 -- The transmitter is not at the final approval position
7909 -- Set the result to 'No'
7910 result := 'COMPLETE:N';
7911 END IF;
7912
7913 -- =============== START DEBUG LOG ================
7914 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg4',
7915 ' result --> '|| result);
7916 -- =============== END DEBUG LOG ==================
7917
7918 END IF;
7919
7920 IF (funcmode <> 'RUN') THEN
7921 result := 'COMPLETE';
7922 -- =============== START DEBUG LOG ================
7923 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg5',
7924 ' funcmode <> RUN -- result --> ' || result);
7925 -- =============== END DEBUG LOG ==================
7926 return;
7927 END IF;
7928
7932 -- =============== END DEBUG LOG ==================
7929 -- =============== START DEBUG LOG ================
7930 DEBUG_LOG_STRING (l_proc_level, 'Is_transmitter_final_apprv.Msg6',
7931 ' ** END IS_TRANSMITTER_FINAL_APPRV ** ');
7933
7934 EXCEPTION
7935 WHEN OTHERS THEN
7936 wf_core.context('IGI_EXP_APPROVAL_PKG','is_transmitter_final_apprv',itemtype,itemkey,
7937 to_char(actid),funcmode);
7938 -- =============== START DEBUG LOG ================
7939 DEBUG_LOG_UNEXP_ERROR ('Is_transmitter_final_apprv.Unexp1','DEFAULT');
7940 -- =============== END DEBUG LOG ==================
7941 raise;
7942
7943 END is_transmitter_final_apprv;
7944 -- OPSF(I) EXP Bug 2379693 S Brewer 16-JUL-2002 End(1)
7945
7946 END igi_exp_approval_pkg;