DBA Data[Home] [Help]

PACKAGE BODY: APPS.GCS_ADJ_APPROVAL_WF_PKG

Source


1 PACKAGE BODY GCS_ADJ_APPROVAL_WF_PKG AS
2 /* $Header: gcsameintgb.pls 120.0 2007/11/21 18:09:37 hakumar ship $ */
3 --------------------------------------------------------------
4 --                    Global Variables                      --
5 --------------------------------------------------------------
6 G_CURRENT_RUNTIME_LEVEL CONSTANT NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
7 G_LEVEL_STATEMENT       CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
8 G_MODULE_NAME           CONSTANT VARCHAR2(100) := 'GCS_INTG_APPROVALS_PKG.';
9 G_LEVEL_PROCEDURE       CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
10 
11 
12 --------------------------------------------------------------------------------
13 -- PRIVATE CONSTANTS
14 --------------------------------------------------------------------------------
15 
16 G_PKG_NAME              constant varchar2(30) := 'GCS_INTG_APPROVALS_PKG';
17 
18 -- Item Type Constants
19 G_FCHAPPR               constant varchar2(30) := 'GCSADJ';
20 G_FCH_APPROVAL_PROCESS  constant varchar2(30) := 'MASTER';
21 G_FCH_APPLICATION_ID    constant number       := 266;
22 
23 -- Workflow Directory Services Constants
24 G_PER                   constant varchar2(30) := 'PER';
25 G_FND_USR               constant varchar2(30) := 'FND_USR';
26 
27 -- Types and constants representing all notification response values
28 G_APPROVE               constant varchar2(30) := 'APPROVED';
29 G_REJECT                constant varchar2(30) := 'REJECTED';
30 G_NO_RESPONSE           constant varchar2(30) := 'NO_RESPONSE';
31 G_SUCCESS               constant varchar2(30) := 'SUCCESS';
32 G_FAILURE               constant varchar2(30) := 'FAILURE';
33 
34 -- Types and constants representing yes/no values
35 G_YES                   constant varchar2(1)  := 'Y';
36 G_NO                    constant varchar2(1)  := 'N';
37 
38 -- Types and constants representing boolean values
39 G_TRUE                  constant varchar2(30) := 'TRUE';
40 G_FALSE                 constant varchar2(30) := 'FALSE';
41 
42 -- Workflow
43 t_item_type             WF_ITEMS.item_type%TYPE;
44 t_item_key              WF_ITEMS.item_key%TYPE;
45 
46 -- Oracle Applications
47 t_org_id                number;
48 t_user_id               FND_USER.user_id%TYPE;
49 t_user_name             FND_USER.user_name%TYPE;
50 t_responsibility_id     FND_RESPONSIBILITY.responsibility_id%TYPE;
51 t_application_id        FND_APPLICATION.application_id%TYPE;
52 
53 -- Oracle Approval Management (AME)
54   t_approval_status       varchar2(50);
55   g_next_approvers        ame_util.approversTable2;
56   g_next_approver         ame_util.approverRecord2;
57 
58 -- Workflow Directory Services
59 t_id                    number;
60 t_name                  varchar2(30);
61 t_display_name          varchar2(80);
62 t_orig_system           varchar2(30);
63 
64 -- API Error Messages
65 t_msg_count             number;
66 t_msg_data              varchar2(2000);
67 
68 --------------------------------------------------------------------------------
69 -- PRIVATE SPECIFICATIONS
70 --------------------------------------------------------------------------------
71 
72 PROCEDURE BuildErrorMsg (
73    p_api_name            in          varchar2
74   ,p_item_type          in          varchar2
75   ,p_item_key           in          varchar2
76   ,p_act_id             in          number);
77 
78 
79 --------------------------------------------------------------------------------
80 -- PUBLIC BODIES
81 --------------------------------------------------------------------------------
82 PROCEDURE Fch_Check_Approvals (p_item_type IN VARCHAR2,
83                                p_item_key      IN  varchar2,
84                                p_act_id        IN NUMBER,
85                                p_funcmode      IN VARCHAR2,
86                                x_result_out    out nocopy  varchar2) IS
87 
88    l_api_name              constant varchar2(200) := 'fch_check_approvals';
89    l_debug_info            VARCHAR2(2000);
90    l_calling_sequence      VARCHAR2(2000);
91 
92   l_entry_id gcs_entry_headers.entry_id%type;
93 
94   l_user_name               t_user_name%TYPE;
95   l_submitter_orig_system   t_orig_system%TYPE;
96   l_submitter_id            t_id%TYPE;
97   l_submitter_name          t_name%TYPE;
98   l_submitter_display_name  t_display_name%TYPE;
99 
100   l_request_id	   NUMBER(15);
101    l_entity_id 			gcs_entry_headers.entity_id%type;
102 BEGIN
103 
104    l_entry_id := WF_ENGINE.GetItemAttrNumber(p_item_type,
105                              p_item_key,
106                              'FCH_ENTRY_ID');
107 
108    l_entity_id := WF_ENGINE.GetItemAttrNumber(p_item_type,
109                              p_item_key,
110                              'FCH_ENTITY_ID');
111 
112    l_calling_sequence := l_api_name;
113    WF_ENGINE.SetItemAttrText(p_item_type, p_item_key, 'CALLING_SEQUENCE', l_calling_sequence);
114 
115    -- Set all the Submitter information on the Item Attributes
116     l_user_name := WF_ENGINE.GetItemAttrText(p_item_type, p_item_key, 'USER_NAME');
117 
118    l_debug_info := 'Before Calling get Role Info ' || p_item_key ;
119    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
120           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
121                          l_api_name,l_debug_info);
122    END IF;
123 
124     WF_DIRECTORY.GetRoleOrigSysInfo(
125       l_user_name,
126       l_submitter_orig_system,
127       l_submitter_id);
128 
129     WF_DIRECTORY.GetRoleName(
130       l_submitter_orig_system
131       ,l_submitter_id
132       ,l_submitter_name
133       ,l_submitter_display_name);
134 
135     WF_ENGINE.SetItemAttrText(
136       p_item_type, p_item_key, 'FCH_SUBMITTED_BY', l_submitter_id);
137 
138     WF_ENGINE.SetItemAttrText(
139       p_item_type, p_item_key, 'FCH_SUBMITTER_NAME', l_submitter_name);
140 
141     WF_ENGINE.SetItemOwner(
142       p_item_type, p_item_key, l_submitter_name);
143 
144 
145     -- Set the Approval information on the Item Attributes
146     WF_ENGINE.SetItemAttrDate(
147       p_item_type, p_item_key, 'REQUEST_DATE', trunc(sysdate));
148 
149   l_debug_info := 'Before calling Update GCS Entry Headers, item_key: ' || p_item_key || 'Submitter Name '|| l_submitter_name;
150 
151    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
152           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
153                          l_api_name,l_debug_info);
154    END IF;
155 
156  --- By default adjustment is approved, and later if there are
157  -- approvers on the list then gets changed to IN_PROGRESS
158 
159    UPDATE GCS_ENTRY_HEADERS
160    SET    approval_status_code = 'IN_PROGRESS'
161    WHERE  entry_id = p_item_key;
162 
163    -- Create PDF file to be attached to Notification
164    l_request_id :=     fnd_request.submit_request(
165                                        application     => 'GCS',
166                                        program         => 'FCH_PDF_GEN',
167                                        sub_request     => FALSE,
168                                        argument1       => l_entry_id,
169                                        argument2       => 'NA',
170                                        argument3       => null);
171 
172   l_debug_info := 'Generate PDF request ID ' || to_char(l_request_id) ;
173 
174    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
175           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
176                          l_api_name,l_debug_info);
177    END IF;
178 
179 
180     x_result_out := WF_ENGINE.eng_completed || ':' || G_YES;
181 
182   EXCEPTION
183 
184   when FND_API.G_EXC_ERROR or FND_API.G_EXC_UNEXPECTED_ERROR then
185     BuildErrorMsg(l_api_name, p_item_type, p_item_key, p_act_id);
186     raise;
187 
188   when others then
189     FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
190     BuildErrorMsg(l_api_name, p_item_type, p_item_key, p_act_id);
191     raise;
192 
193 end Fch_Check_approvals;
194 
195 
196 PROCEDURE create_gcsadj_process(p_entry_id IN NUMBER
197                                ,p_user_id IN NUMBER
198 							   ,p_user_name IN VARCHAR2
199 							   ,p_orig_entry_id IN NUMBER
200                                ,p_ledger_id IN NUMBER
201                                ,p_cal_period_name IN VARCHAR2
202                                ,p_conversion_type IN VARCHAR2
203 							   ,p_writeback_flag IN VARCHAR2
204                                ,p_wfitemkey OUT NOCOPY VARCHAR2) IS
205 /*-----------------------------------------------------------------------+
206  | Cursor Declarations                                                   |
207  +-----------------------------------------------------------------------*/
208 
209  CURSOR csr_gcs_entry_details IS
210  SELECT ENTRY_ID
211  ,      ENTRY_NAME
212  ,      HIERARCHY_ID
213  ,      ENTITY_ID
214  ,      CURRENCY_CODE
215  ,      BALANCE_TYPE_CODE
216  ,      START_CAL_PERIOD_ID
217  ,      END_CAL_PERIOD_ID
218  ,      DESCRIPTION
219  ,      ENTRY_TYPE_CODE
220  ,      CATEGORY_CODE
221  ,      CREATED_BY
222  ,      WORKFLOW_KEY
223  FROM GCS_ENTRY_HEADERS
224  WHERE ENTRY_ID = p_entry_id;
225 
226  l_entry_id 			gcs_entry_headers.entry_id%type;
227  l_entry_name 			gcs_entry_headers.entry_name%type;
228  l_hierarchy_id 		gcs_entry_headers.hierarchy_id%type;
229  l_entity_id 			gcs_entry_headers.entity_id%type;
230  l_currency_code 		gcs_entry_headers.currency_code%type;
231  l_balance_type_code 	gcs_entry_headers.balance_type_code%type;
232  l_start_cal_period_id 	gcs_entry_headers.start_cal_period_id%type;
233  l_end_cal_period_id 	gcs_entry_headers.end_cal_period_id%type;
234  l_description  		gcs_entry_headers.description%type;
235  l_entry_type_code 		gcs_entry_headers.entry_type_code%type;
236  l_category_code 		gcs_entry_headers.category_code%type;
237  l_submitted_by 		gcs_entry_headers.created_by%type;
238  l_itemkey 				VARCHAR2(80);
239 
240  l_entity_name      fem_entities_tl.entity_name%type;
241  l_hierarchy_name   gcs_hierarchies_tl.hierarchy_name%type;
242  l_period_name      fem_cal_periods_tl.cal_period_name%type;
243 
244   Cursor c_entity_details IS
245   Select Entity_name
246   From fem_entities_tl
247   where entity_id = l_entity_id
248   and  language = userenv('LANG');
249 
250  Cursor c_hierarchy_details IS
251   Select hierarchy_name
252   From gcs_hierarchies_tl
253   Where hierarchy_id = l_hierarchy_id
254   and language = userenv('LANG');
255 
256  Cursor c_period_details IS
257   Select fctl.cal_period_name
258   From  fem_cal_periods_tl fctl
259   Where fctl.cal_period_id = l_start_cal_period_id
260   and    fctl.language = USERENV('LANG');
261 
262 
263  l_api_name      CONSTANT VARCHAR2(200) := 'create_gcsadj_process';
264  l_debug_info    VARCHAR2(2000);
265  l_calling_sequence      VARCHAR2(2000);
266  l_num NUMBER;
267 
268  l_message_text  Varchar2(1000);
269 
270 BEGIN
271    l_debug_info := 'Start Adjustment Approval Workflow Process';
272    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
273           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
274                          l_api_name,l_debug_info);
275    END IF;
276 
277 
278    l_debug_info := 'Before ame_api2.clearAllApprovals';
279    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
280           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
281                          l_api_name,l_debug_info);
282    END IF;
283 
284    ame_api2.clearAllApprovals( applicationidin => G_FCH_APPLICATION_ID,
285                                transactiontypein => 'GCS_ADJUSTMENT',
286                                transactionidin => to_char(p_entry_id));
287 
288 
289 
290    l_debug_info := 'Getting Attibutes values';
291    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
292           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
293                          l_api_name,l_debug_info);
294    END IF;
295 
296 
297    OPEN csr_gcs_entry_details;
298    FETCH csr_gcs_entry_details INTO
299    l_entry_id ,
300    l_entry_name ,
301    l_hierarchy_id ,
302    l_entity_id ,
303    l_currency_code ,
304    l_balance_type_code ,
305    l_start_cal_period_id ,
306    l_end_cal_period_id ,
307    l_description  ,
308    l_entry_type_code ,
309    l_category_code ,
310    l_submitted_by ,
311    l_itemkey;
312    CLOSE csr_gcs_entry_details;
313 
314 
315    Open c_entity_details;
316    Fetch c_entity_details into l_entity_name;
317    Close c_entity_details;
318 
319    Open c_hierarchy_details;
320    Fetch c_hierarchy_details into l_hierarchy_name;
321    Close c_hierarchy_details;
322 
323    Open  c_period_details;
324    Fetch c_period_details into l_period_name;
325    Close c_period_details;
326 
327 
328 
329    IF l_itemkey is not Null THEN
330    --
331    -- Abort previous workflow process
332    Begin
333       wf_engine.AbortProcess('GCSADJ', l_itemkey, 'MASTER', null);
334 
335      l_debug_info := 'Previous WF Process aborted';
336      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
337            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
338                          l_api_name,l_debug_info);
339      END IF;
340 
341 
342      EXCEPTION
343      WHEN OTHERS THEN
344      l_debug_info := 'Previous WF Process aborted error';
345      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
346             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
347                          l_api_name,l_debug_info);
348      END IF;
349 
350    End;
351 
352 	-- delete previous pdf.
353     delete fnd_attached_documents
354     where pk1_value = to_char(l_entry_id);
355 
356      l_debug_info := ' Deleted Doc :'|| to_char(l_entry_id) || '.pdf';
357      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
358             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
359                          l_api_name,l_debug_info);
360      END IF;
361 
362 
363    END IF;
364 
365    -- Setting the Workflow Item Key
366    l_itemkey := to_char(p_entry_id) || to_char(sysdate, 'ddss');
367 
368 
369    l_debug_info := 'Calling WF_ENGINE.createProcess(GCSADJ, ' || l_itemkey || ', MASTER);';
370    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
371           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
372                          l_api_name,l_debug_info);
373    END IF;
374 
375 
376    wf_engine.createProcess('GCSADJ', l_itemkey, 'MASTER');
377 
378    l_debug_info := 'Before Update of Adjustments to Initiated';
379    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
380           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
381                          l_api_name,l_debug_info);
382    END IF;
383 
384    UPDATE GCS_ENTRY_HEADERS
385    SET    approval_status_code = 'IN_PROGRESS' ,
386           WORKFLOW_KEY = l_itemkey
387    WHERE  entry_id = p_entry_id;
388 
389 
390    l_debug_info := 'Before setting item attributes' ;
391    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
392           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
393                          l_api_name,l_debug_info);
394    END IF;
395 
396    l_calling_sequence := l_api_name;
397    WF_ENGINE.SetItemAttrText('GCSADJ', l_itemkey, 'CALLING_SEQUENCE', l_calling_sequence);
398 
399    WF_ENGINE.SetItemAttrNumber('GCSADJ',
400                         l_itemkey,
401                         'MASTERKEY',
402                         p_entry_id);
403    WF_ENGINE.SetItemAttrNumber('GCSADJ',
404                         l_itemkey,
405                         'FCH_ENTRY_ID',
406                         l_entry_id);
407    WF_ENGINE.SetItemAttrText('GCSADJ',
408                         l_itemkey,
409                         'FCH_ENTRY_NAME',
410                         l_entry_name);
411 
412    WF_ENGINE.SetItemAttrText('GCSADJ',
413                         l_itemkey,
414                         'FCH_ENTRY_DESCRIPTION',
415                         l_description);
416 
417    WF_ENGINE.SetItemAttrNumber('GCSADJ',
418                         l_itemkey,
419                         'FCH_HIERARCHY_ID',
420                         l_hierarchy_id);
421    WF_ENGINE.SetItemAttrNumber('GCSADJ',
422                         l_itemkey,
423                         'FCH_ENTITY_ID',
424                         l_entity_id);
425    WF_ENGINE.SetItemAttrText('GCSADJ',
426                         l_itemkey,
427                         'FCH_CURRENCY_CODE',
428                         l_currency_code);
429    WF_ENGINE.SetItemAttrText('GCSADJ',
430                         l_itemkey,
431                         'FCH_BALANCE_TYPE',
432                         l_balance_type_code);
433    WF_ENGINE.SetItemAttrNumber('GCSADJ',
434                         l_itemkey,
435                         'FCH_START_PERIOD',
436                         l_start_cal_period_id);
437    WF_ENGINE.SetItemAttrNumber('GCSADJ',
438                         l_itemkey,
439                         'FCH_END_PERIOD',
440                         l_end_cal_period_id);
441 
442    WF_ENGINE.SetItemAttrText('GCSADJ',
443                         l_itemkey,
444                         'FCH_CATEGORY_CODE',
445                         l_category_code);
446 
447    WF_ENGINE.SetItemAttrNumber('GCSADJ',
448                         l_itemkey,
449                         'USER_ID',
450                         p_user_id);
451 
452    WF_ENGINE.SetItemAttrText('GCSADJ',
453                         l_itemkey,
454                         'USER_NAME',
455                         p_user_name);
456 
457 	WF_ENGINE.SetItemAttrText('GCSADJ',
458                         l_itemkey,
459                         'FCH_ENTITY_NAME',
460                         l_entity_name);
461 
462 	WF_ENGINE.SetItemAttrText('GCSADJ',
463                         l_itemkey,
464                         'FCH_HIERARCHY_NAME',
465                         l_hierarchy_name);
466 
467 	WF_ENGINE.SetItemAttrText('GCSADJ',
468                         l_itemkey,
469                         'FCH_PERIOD_NAME',
470                         l_period_name);
471 
472 	WF_ENGINE.SetItemAttrText('GCSADJ',
473                         l_itemkey,
474                         'WRITEBACK_FLAG',
475                         p_writeback_flag);
476 
477    	WF_ENGINE.SetItemAttrText('GCSADJ',
478                         l_itemkey,
479                         'CAL_PERIOD_NAME',
480                         p_cal_period_name);
481 
482 	WF_ENGINE.SetItemAttrText('GCSADJ',
483                         l_itemkey,
484                         'CONVERSION_TYPE',
485                         p_conversion_type);
486 
487    WF_ENGINE.SetItemAttrNumber('GCSADJ',
488                         l_itemkey,
489                         'ORIG_ENTRY_ID',
490                         p_orig_entry_id);
491 
492    WF_ENGINE.SetItemAttrNumber('GCSADJ',
493                         l_itemkey,
494                         'LEDGER_ID',
495                         p_ledger_id);
496 
497 
498 
499    l_message_text:= 'An adjustment has been submitted for the hierarchy ' || L_HIERARCHY_NAME || ' , and the entity ' || L_ENTITY_NAME || ' on '||  L_PERIOD_NAME ||' that requires your approval';
500 
501 	WF_ENGINE.SetItemAttrText('GCSADJ',
502                         l_itemkey,
503                         'MESSAGE_TEXT',
504                         l_message_text);
505 
506    l_debug_info := 'Before Calling WF_ENGINE.startProcess(GCSADJ,'
507                    || l_itemkey || ');';
508    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
509           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
510                          l_api_name,l_debug_info);
511    END IF;
512 
513    WF_ENGINE.startProcess('GCSADJ', l_itemkey);
514 
515    COMMIT;
516 
517    l_debug_info := 'After Calling WF_ENGINE.startProcess' ;
518    p_wfitemkey := l_itemkey;
519    l_debug_info := 'End';
520 
521    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
522           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
523                          l_api_name,l_debug_info);
524    END IF;
525 
526   EXCEPTION
527 
528   WHEN OTHERS THEN
529     IF (SQLCODE <> -20001) THEN
530       FND_MESSAGE.SET_NAME('SQLAP','AP_DEBUG');
531       FND_MESSAGE.SET_TOKEN('ERROR',SQLERRM);
532       FND_MESSAGE.SET_TOKEN('CALLING_SEQUENCE', l_calling_sequence);
533       FND_MESSAGE.SET_TOKEN('DEBUG_INFO', l_debug_info);
534     END IF;
535     APP_EXCEPTION.RAISE_EXCEPTION;
536 
537 END create_gcsadj_process;
538 
539 --
540 -- PROCEDURE
541 --   GetNextApprover
542 --
543 -- DESCRIPTION
544 --   Gets the next approver for the approval request.
545 --
546 -- IN
547 --   p_item_type    - The workflow item type (FEMAPPR)
548 --   p_item_key     - The workflow request id (FEM_WF_REQUEST_ID_SEQ)
549 --   p_act_id       - The function activity
550 --   p_func_mode    - Run/Cancel/Timeout
551 --
552 -- OUT
553 --   x_result_out   - Indicates completion of workflow activity and it's result
554 --
555 -- USED BY ACTIVITIES
556 --   FEMAPPR     FEM_GET_NEXT_APPROVER
557 --
558 --------------------------------------------------------------------------------
559 PROCEDURE Get_Next_Approver (
560            p_item_type IN VARCHAR2,
561            p_item_key IN VARCHAR2,
562            p_act_id   IN NUMBER,
563            p_funcmode IN VARCHAR2,
564            x_result_out          out nocopy  varchar2) IS
565 
566   l_entry_id                NUMBER(15);
567   l_application_id          t_application_id%TYPE;
568   l_approver_id             t_id%TYPE;
569   l_approver_user_id        t_id%TYPE;
570   l_approver_name           t_name%TYPE;
571   l_approver_display_name   t_display_name%TYPE;
572   l_approver_orig_system    t_orig_system%TYPE;
573 
574   l_role_name               t_name%TYPE;
575   l_role_display_name       t_display_name%TYPE;
576 
577   l_next_approver_rec       AME_UTIL.approverRecord;
578 
579   l_next_approvers        ame_util.approversTable2;
580   l_next_approver         ame_util.approverRecord2;
581   l_complete              VARCHAR2(50);
582   l_valid_approver        BOOLEAN;
583 
584    l_api_name      CONSTANT VARCHAR2(200) := 'get_next_approver';
585    l_debug_info    VARCHAR2(2000);
586    l_calling_sequence      VARCHAR2(2000);
587 
588     l_wf_region             VARCHAR2(200);
589     l_attachment            VARCHAR2(200);
590 
591 BEGIN
592 
593     -- Initialize API message list
594      FND_MSG_PUB.Initialize;
595 
596    l_application_id := G_FCH_APPLICATION_ID;
597 
598    l_debug_info := 'Calling Get Next Approvers ' || p_item_key ;
599    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
600           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
601                          l_api_name,l_debug_info);
602    END IF;
603 
604    l_entry_id := WF_ENGINE.GetItemAttrNumber(p_item_type,
605                              p_item_key,
606                              'FCH_ENTRY_ID');
607 
608 
609     AME_API2.GetNextApprovers4(
610 	   applicationIdIn    => l_application_id,
611        transactionTypeIn => 'GCS_ADJUSTMENT',
612        transactionIdIn   => to_char(l_entry_id),
613        flagApproversAsNotifiedIn => ame_util.booleanFalse,
614        approvalProcessCompleteYNOut => l_complete,
615        nextApproversOut => l_next_approvers );
616 
617    l_debug_info := 'Approval Process Status ' || l_complete;
618    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
619           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
620    END IF;
621 
622   -- IF l_complete = ame_util.booleanFalse THEN	  -- there is a status of complete no approvers
623 
624     IF l_next_approvers.count < 1 THEN
625        -- No more approvers
626      l_debug_info := 'No more approvers ' || p_item_key ;
627      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
628           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
629                          l_api_name,l_debug_info);
630      END IF;
631 
632      x_result_out := WF_ENGINE.eng_completed || ':' || G_NO;
633 
634    ELSE
635      l_debug_info := 'New Approver ';
636      IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
637 	   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME|| l_api_name,l_debug_info);
638      END IF;
639 
640      l_next_approver := l_next_approvers(1);
641 	 g_next_approver := l_next_approver;
642 	 l_valid_approver :=AME_API2.validateApprover(l_next_approver);
643 
644 	 IF l_valid_approver = FALSE Then
645 	   l_debug_info := 'Invalid approver, does not have wf role';
646   	   IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
647          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME|| l_api_name,l_debug_info);
648 	   END IF;
649 
650 	 end if;
651 
652     if (l_next_approver.approval_status = AME_UTIL.exceptionStatus) then
653 	 l_debug_info := 'Next approver exception error';
654 
655 	 IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
656       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME|| l_api_name,l_debug_info);
657 	 END IF;
658 
659     end if;
660 
661 	l_approver_id:=l_next_approver.ORIG_SYSTEM_ID;
662 	l_approver_orig_system:= l_next_approver.ORIG_SYSTEM;
663 
664     -- Setting all approver attributes
665 	        WF_DIRECTORY.GetRoleName(l_next_approver.ORIG_SYSTEM
666 	       ,l_next_approver.ORIG_SYSTEM_ID
667 		   ,l_role_name,l_role_display_name);
668 
669            WF_DIRECTORY.GetUserName(l_next_approver.ORIG_SYSTEM,
670                            l_next_approver.ORIG_SYSTEM_ID,
671                            l_approver_name,
672                            l_approver_display_name);
673 
674 
675    l_debug_info := 'Approver found, item: ' || p_item_key || 'Role: ' || l_role_name || ' ID:' || to_char(l_approver_id)  ||
676                    ' Name: ' || l_approver_name;
677 
678    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
679           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
680    END IF;
681 
682      WF_ENGINE.SetItemAttrNumber(
683       p_item_type, p_item_key, 'APPROVER_ID', l_approver_id);
684 
685      WF_ENGINE.SetItemAttrText(
686       p_item_type, p_item_key, 'APPROVER', l_approver_name);
687 
688 
689 --    WF_ENGINE.SetItemAttrNumber(
690 --      p_item_type, p_item_key, G_APPROVER_USER_ID, l_approver_user_id);
691 
692 --    WF_ENGINE.SetItemAttrText(
693 --      p_item_type, p_item_key, G_APPROVER_DISPLAY_NAME, l_approver_display_name);
694 
695      WF_ENGINE.SetItemAttrText(
696       p_item_type, p_item_key, 'ROLE_NAME', l_role_name);
697 
698     WF_ENGINE.SetItemAttrText(
699       p_item_type, p_item_key, 'ORIG_SYSTEM', l_approver_orig_system);
700 
701 	  -- set the workflow history region
702 	l_debug_info:='setting history region attribute information';
703    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
704          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
705                          l_api_name,l_debug_info);
706    END IF;
707 
708   l_wf_region := 'JSP:/OA_HTML/OA.jsp?page=/oracle/apps/per/ame/transactionhistory/webui/TransactionHistoryRN' || '&' || 'AMETxnID='|| TO_CHAR(l_entry_id) || '&' || 'AMETxnType=GCS_ADJUSTMENT'|| '&' || 'AMEFndAppID=266';
709 
710 	l_debug_info:='setting attachment attribute information';
711    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
712          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
713                          l_api_name,l_debug_info);
714    END IF;
715 
716      l_attachment := 'FND:entity=GCS_ENTRY_HEADERS'||'&'||'pk1name=ENTRY_ID'||'&'||'pk1value='||l_entry_id;
717 
718       WF_ENGINE.SetItemAttrText(p_item_type, p_item_key, 'WFREGION', l_wf_region);
719 	  WF_ENGINE.SetItemAttrText(p_item_type, p_item_key, '#ATTACHMENTS', l_attachment);
720 
721      x_result_out := WF_ENGINE.eng_completed || ':' || G_YES;
722 
723    END IF;
724    --ELSE
725      -- Process Complete
726 --     l_debug_info := 'Process Complete' || p_item_key ;
727      -- IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
728        --   FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
729 --                         l_api_name,l_debug_info);
730 --     END IF;
731 --        x_result_out := WF_ENGINE.eng_completed || ':' || G_NO;
732 --  END IF;
733 
734  EXCEPTION
735 
736   when FND_API.G_EXC_ERROR or FND_API.G_EXC_UNEXPECTED_ERROR then
737     BuildErrorMsg(l_api_name, p_item_type, p_item_key, p_act_id);
738     raise;
739 
740   when others then
741     FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
742     BuildErrorMsg(l_api_name, p_item_type, p_item_key, p_act_id);
743     raise;
744 
745 END Get_Next_Approver;
746 
747 PROCEDURE process_approval(p_item_type IN VARCHAR2,
748                         p_item_key IN VARCHAR2,
749                         p_actid   IN NUMBER,
750                         p_funcmode IN VARCHAR2,
751                         x_result_out  OUT NOCOPY VARCHAR2 ) IS
752    l_entry_id      NUMBER(15);
753    l_comments      VARCHAR2(240);
754    l_status        VARCHAR2(50);
755    l_user_id       NUMBER(15);
756    l_api_name      CONSTANT VARCHAR2(200) := 'process_approval';
757    l_debug_info    VARCHAR2(2000);
758    l_approver_name VARCHAR2(150);
759    l_approver_id   NUMBER;
760    l_approver_orig_system    t_orig_system%TYPE;
761    l_role_name     VARCHAR2(150);
762    l_calling_sequence      VARCHAR2(2000);
763 
764 BEGIN
765 
766    l_debug_info := 'Start Process Approval';
767    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
768           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
769                          l_api_name,l_debug_info);
770    END IF;
771 
772    l_calling_sequence := l_api_name;
773    WF_ENGINE.SetItemAttrText(p_item_type, p_item_key, 'CALLING_SEQUENCE', l_calling_sequence);
774 
775    l_entry_id := WF_ENGINE.GetItemAttrNumber(p_item_type,
776                              p_item_key,
777                              'FCH_ENTRY_ID');
778 
779    l_comments := WF_ENGINE.GetItemAttrText(p_item_type,
780                              p_item_key,
781                              'WF_NOTE');
782 
783    l_approver_name := WF_ENGINE.GetItemAttrText(p_item_type,
784                              p_item_key,
785                              'APPROVER');
786 
787    l_approver_id := WF_ENGINE.GETITEMATTRNumber(p_item_type,
788                              p_item_key,
789                              'APPROVER_ID');
790 
791    l_role_name := WF_ENGINE.GetItemAttrText(p_item_type,
792                              p_item_key,
793                              'ROLE_NAME');
794 
795    l_approver_orig_system:= WF_ENGINE.GETITEMATTRText(p_item_type,
796                              p_item_key,
797                              'ORIG_SYSTEM');
798 
799    l_user_id := nvl(to_number(fnd_profile.value('USER_ID')),-1);
800 
801    l_debug_info := 'Before calling AME Update Status, entry : ' || l_entry_id || ', Status' || AME_UTIL.approvedStatus || ' role name: '|| l_role_name || 'Approver id: ' || l_approver_id ;
802 
803    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
804           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
805    END IF;
806 
807    l_debug_info := 'AME relevant info, itemclass: ' ||ame_util.headerItemClassName ||',item id ' || l_entry_id ;
808 
809    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
810           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
811    END IF;
812 
813    g_next_approver.orig_system:= l_approver_orig_system;
814    g_next_approver.orig_system_id:=l_approver_id;
815    g_next_approver.name := l_role_name;
816 
817    g_next_approver.approval_status:=AME_UTIL.approvedStatus;
818    g_next_approver.item_class:=ame_util.headerItemClassName;
819    g_next_approver.item_id:=to_char(l_entry_id);
820 
821 
822    AME_API2.updateApprovalStatus(applicationIdIn => G_FCH_APPLICATION_ID,
823 			 transactionTypeIn   => 'GCS_ADJUSTMENT',
824 			 transactionIdIn     => to_char(l_entry_id),
825              approverIn          => g_next_approver);
826 
827 /*
828    AME_API2.updateApprovalStatus2(applicationIdIn => G_FCH_APPLICATION_ID,
829 			 transactionTypeIn   => 'GCS_ADJUSTMENT',
830 			 transactionIdIn     => to_char(l_entry_id),
831              approvalStatusIn    => AME_UTIL.approvedStatus,
832              approverNameIn      => l_role_name,
833              itemClassIn         => ame_util.headerItemClassName,
834              itemIdIn            => to_char(l_entry_id));
835 */
836    l_debug_info := 'Updated Approval status in AME records';
837    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
838           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME|| l_api_name,l_debug_info);
839    END IF;
840 
841   WF_ENGINE.SetItemAttrText('GCSADJ',
842                             p_item_key,
843                             'WF_NOTE',
844                             null);
845 
846    l_debug_info := 'End';
847    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
848           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME|| l_api_name,l_debug_info);
849    END IF;
850    x_result_out := wf_engine.eng_completed||':'|| AME_UTIL.approvedStatus;
851 
852  EXCEPTION
853  WHEN OTHERS
854    THEN
855         WF_CORE.CONTEXT('GCSADJ','process_approval',p_item_type,
856                         p_item_key, to_char(p_actid), p_funcmode);
857         RAISE;
858 END process_approval;
859 
860 
861 PROCEDURE process_rejected(p_item_type IN VARCHAR2,
862                         p_item_key IN VARCHAR2,
863                         p_actid   IN NUMBER,
864                         p_funcmode IN VARCHAR2,
865                         x_result_out  OUT NOCOPY VARCHAR2 ) IS
866    l_entry_id      NUMBER(15);
867    l_comments      VARCHAR2(240);
868    l_status        VARCHAR2(50);
869    l_user_id       NUMBER(15);
870    l_api_name      CONSTANT VARCHAR2(200) := 'process_rejected';
871    l_debug_info    VARCHAR2(2000);
872    l_approver_name VARCHAR2(150);
873    l_approver_id   NUMBER;
874    l_approver_orig_system    t_orig_system%TYPE;
875    l_role_name     VARCHAR2(150);
876    l_calling_sequence      VARCHAR2(2000);
877 
878 BEGIN
879 
880    l_debug_info := 'Start Process Rejected';
881    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
882           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
883                          l_api_name,l_debug_info);
884    END IF;
885 
886    l_calling_sequence := l_api_name;
887    WF_ENGINE.SetItemAttrText(p_item_type, p_item_key, 'CALLING_SEQUENCE', l_calling_sequence);
888 
889    l_entry_id := WF_ENGINE.GetItemAttrNumber(p_item_type,
890                              p_item_key,
891                              'FCH_ENTRY_ID');
892 
893    l_comments := WF_ENGINE.GetItemAttrText(p_item_type,
894                              p_item_key,
895                              'WF_NOTE');
896 
897    l_approver_name := WF_ENGINE.GetItemAttrText(p_item_type,
898                              p_item_key,
899                              'APPROVER');
900 
901    l_approver_id := WF_ENGINE.GETITEMATTRNumber(p_item_type,
902                              p_item_key,
903                              'APPROVER_ID');
904 
905    l_role_name := WF_ENGINE.GetItemAttrText(p_item_type,
906                              p_item_key,
907                              'ROLE_NAME');
908 
909    l_approver_orig_system:= WF_ENGINE.GETITEMATTRText(p_item_type,
910                              p_item_key,
911                              'ORIG_SYSTEM');
912 
913    l_debug_info := 'Before calling AME Update Status, entry : ' || l_entry_id || ', Status' || AME_UTIL.approvedStatus || ' role name '|| l_role_name || 'Approver id ' || l_approver_id ;
914 
915    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
916           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
917    END IF;
918 
919    l_debug_info := 'AME relevant info, itemclass: ' ||ame_util.headerItemClassName ||',item id ' || l_entry_id ;
920 
921    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
922           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
923    END IF;
924 
925    g_next_approver.orig_system:= l_approver_orig_system;
926    g_next_approver.orig_system_id:=l_approver_id;
927    g_next_approver.name := l_role_name;
928 
929    g_next_approver.approval_status:=AME_UTIL.rejectStatus;
930    g_next_approver.item_class:=ame_util.headerItemClassName;
931    g_next_approver.item_id:=to_char(l_entry_id);
932 
933 
934    AME_API2.updateApprovalStatus(applicationIdIn => G_FCH_APPLICATION_ID,
935 			 transactionTypeIn   => 'GCS_ADJUSTMENT',
936 			 transactionIdIn     => to_char(l_entry_id),
937              approverIn          => g_next_approver);
938 
939    /*
940    AME_API2.updateApprovalStatus2(applicationIdIn => G_FCH_APPLICATION_ID,
941 			 transactionIdIn     => to_char(l_entry_id),
942              approvalStatusIn    => AME_UTIL.rejectStatus,
943              approverNameIn      => l_role_name,
944              transactionTypeIn   =>  'GCS_ADJUSTMENT',
945              itemClassIn         => ame_util.headerItemClassName,
946              itemIdIn            => to_char(l_entry_id));
947    */
948 
949    l_debug_info := 'Updated Approval status ';
950    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
951           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME|| l_api_name,l_debug_info);
952    END IF;
953 
954   WF_ENGINE.SetItemAttrText('GCSADJ',
955                             p_item_key,
956                             'WF_NOTE',
957                             null);
958 
959    l_debug_info := 'End';
960    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
961           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME|| l_api_name,l_debug_info);
962    END IF;
963    x_result_out := wf_engine.eng_completed||':'||AME_UTIL.approvedStatus;
964 
965  EXCEPTION
966  WHEN OTHERS
967    THEN
968         WF_CORE.CONTEXT('GCSADJ','process_rejected',p_item_type,
969                         p_item_key, to_char(p_actid), p_funcmode);
970         RAISE;
971 END process_rejected;
972 
973 PROCEDURE update_adjustment(p_item_type IN VARCHAR2,
974                         p_item_key IN VARCHAR2,
975                         p_actid   IN NUMBER,
976                         p_funcmode IN VARCHAR2,
977                         x_result_out  OUT NOCOPY VARCHAR2 ) IS
978    l_entry_id      NUMBER(15);
979    l_comments      VARCHAR2(240);
980    l_status        VARCHAR2(50);
981    l_user_id       NUMBER(15);
982    l_api_name      CONSTANT VARCHAR2(200) := 'update_adjustment';
983    l_debug_info    VARCHAR2(2000);
984    l_approver_name VARCHAR2(150);
985    l_approver_id   NUMBER;
986    l_role_name     VARCHAR2(150);
987    l_calling_sequence      VARCHAR2(2000);
988    l_prev_calling_sequence      VARCHAR2(2000);
989 
990    l_event_name         VARCHAR2 (100) := 'oracle.apps.gcs.transaction.adjustment.update';
991    l_event_key          VARCHAR2 (100) := NULL;
992    l_parameter_list     wf_parameter_list_t;
993    l_request_id         NUMBER(15);
994    l_orig_entry_id      NUMBER (15);
995    l_writeback          VARCHAR2(30);
996    l_ledger_id          NUMBER(15);
997    l_cal_period_name    VARCHAR2(80);
998    l_conversion_type    VARCHAR2(80);
999 
1000 
1001 BEGIN
1002 
1003    l_debug_info := 'Start Update Adjustment';
1004    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1005           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
1006                          l_api_name,l_debug_info);
1007    END IF;
1008 
1009    l_prev_calling_sequence := WF_ENGINE.GetItemAttrText(p_item_type, p_item_key, 'CALLING_SEQUENCE');
1010 
1011    l_debug_info := l_prev_calling_sequence;
1012    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1013           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||
1014                          l_api_name,l_debug_info);
1015    END IF;
1016 
1017    l_calling_sequence := l_api_name;
1018    WF_ENGINE.SetItemAttrText(p_item_type, p_item_key, 'CALLING_SEQUENCE', l_calling_sequence);
1019 
1020    l_entry_id := WF_ENGINE.GetItemAttrNumber(p_item_type,
1021                              p_item_key,
1022                              'FCH_ENTRY_ID');
1023 
1024    l_comments := WF_ENGINE.GetItemAttrText(p_item_type,
1025                              p_item_key,
1026                              'WF_NOTE');
1027 
1028    l_approver_name := WF_ENGINE.GetItemAttrText(p_item_type,
1029                              p_item_key,
1030                              'APPROVER');
1031 
1032    l_approver_id := WF_ENGINE.GETITEMATTRNumber(p_item_type,
1033                              p_item_key,
1034                             'APPROVER_ID');
1035 
1036    l_role_name := WF_ENGINE.GetItemAttrText(p_item_type,
1037                              p_item_key,
1038                              'ROLE_NAME');
1039 
1040    l_debug_info := 'Before Updating GCS Entries, entry : ' || l_entry_id || ' calling sequence '|| l_prev_calling_sequence;
1041    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1042           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1043    END IF;
1044 
1045 
1046    if l_prev_calling_sequence = 'process_approval'  then
1047       l_status := G_APPROVE;
1048 
1049    elsif l_prev_calling_sequence = 'process_rejected' then
1050       l_status := G_REJECT;
1051    elsif l_prev_calling_sequence = 'fch_check_approvals'  then
1052     -- No rules found
1053 	    l_status := G_APPROVE;
1054    else
1055         l_status :='ERROR';
1056    end if;
1057 
1058    UPDATE GCS_ENTRY_HEADERS
1059    SET    approval_status_code = l_status
1060    WHERE  entry_id = l_entry_id;
1061 
1062    COMMIT;
1063 
1064    l_debug_info := 'Updated GCS Entries with status : ' || nvl(l_status,'NULL');
1065 
1066    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1067           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME|| l_api_name,l_debug_info);
1068    END IF;
1069 
1070 
1071    IF (l_prev_calling_sequence = 'process_approval'  OR l_prev_calling_sequence = 'fch_check_approvals' ) THEN
1072 
1073       l_debug_info := 'Preparing Consolidation Impact Event: ' || l_event_name;
1074       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1075             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1076       END IF;
1077 
1078 	 l_orig_entry_id := WF_ENGINE.GetItemAttrNumber(p_item_type,
1079                                                     p_item_key,
1080                                                     'ORIG_ENTRY_ID');
1081 
1082 
1083       wf_event.addparametertolist (p_name               => 'ENTRY_ID',
1084                                    p_value              => l_entry_id,
1085                                    p_parameterlist      => l_parameter_list
1086                                   );
1087      --Bugfix 6470903: Set l_orig_entry_id to NULL if it is the same as l_entry_id
1088       IF (l_orig_entry_id = l_entry_id) THEN
1089         l_orig_entry_id := NULL;
1090       END IF;
1091 
1092       wf_event.addparametertolist (p_name               => 'ORIG_ENTRY_ID',
1093                                    p_value              => l_orig_entry_id,
1094                                    p_parameterlist      => l_parameter_list
1095                                   );
1096 
1097       wf_event.RAISE (p_event_name      => l_event_name,
1098                       p_event_key       => l_event_key,
1099                       p_parameters      => l_parameter_list);
1100 
1101       l_debug_info := ' Event Raised';
1102 
1103       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1104             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1105       END IF;
1106 
1107      l_writeback := WF_ENGINE.GetItemAttrText(p_item_type,
1108                                               p_item_key,
1109                                               'WRITEBACK_FLAG');
1110 
1111      -- Call write back only once is approved
1112 	 If l_writeback='Y' Then
1113 
1114        l_ledger_id := WF_ENGINE.GetItemAttrNumber(p_item_type,
1115                              p_item_key,
1116                              'LEDGER_ID');
1117 
1118        l_cal_period_name := WF_ENGINE.GetItemAttrText(p_item_type,
1119                              p_item_key,
1120                              'CAL_PERIOD_NAME');
1121 
1122 
1123        l_conversion_type := WF_ENGINE.GetItemAttrText(p_item_type,
1124                              p_item_key,
1125                              'CONVERSION_TYPE');
1126 
1127 
1128        l_request_id :=   fnd_request.submit_request(
1129                                         application     => 'GCS',
1130                                         program         => 'FCH_ENTRY_WRITEBACK',
1131                                         sub_request     => FALSE,
1132                                         argument1       => l_entry_id,
1133                                         argument2       => l_entry_id,
1134                                         argument3       => l_ledger_id,
1135                                         argument4       => l_cal_period_name,
1136                                         argument5       => l_conversion_type );
1137 
1138         l_debug_info := ' Submitted Writeback request ID : ' || l_request_id;
1139          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1140              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,l_debug_info);
1141          END IF;
1142 
1143 	 end if;
1144    end if;
1145 
1146 
1147    x_result_out := wf_engine.eng_completed||':'||'COMPLETED';
1148 
1149  EXCEPTION
1150  WHEN OTHERS
1151    THEN
1152         WF_CORE.CONTEXT('GCSADJ','process_rejected',p_item_type,
1153                         p_item_key, to_char(p_actid), p_funcmode);
1154         RAISE;
1155 END update_adjustment;
1156 
1157 --
1158 -- PROCEDURE
1159 --   BuildErrorMsg
1160 --
1161 -- DESCRIPTION
1162 --   Builds the Workflow Error Message by checking if there are any errors
1163 --   in the FND_MSG_PUB message stack.
1164 --
1165 -- IN
1166 --   p_api_name             - The PL/SQL Procedure or Function name.
1167 --   p_item_type            - The workflow item type (FEMAPPR)
1168 --   p_item_key             - The workflow request id (FEM_WF_REQUEST_ID_SEQ)
1169 --   p_act_id               - The function activity
1170 --
1171 --------------------------------------------------------------------------------
1172 PROCEDURE BuildErrorMsg (
1173   p_api_name            in          varchar2
1174   ,p_item_type          in          varchar2
1175   ,p_item_key           in          varchar2
1176   ,p_act_id             in          number
1177 )
1178 --------------------------------------------------------------------------------
1179 IS
1180 
1181   l_msg_count       t_msg_count%TYPE;
1182   l_msg_data        t_msg_data%TYPE;
1183 
1184 BEGIN
1185 
1186   FND_MSG_PUB.Count_And_Get(
1187     p_count   => l_msg_count
1188     ,p_data   => l_msg_data
1189   );
1190 
1191   if (l_msg_count > 1) then
1192 
1193     l_msg_data := FND_MSG_PUB.Get(FND_MSG_PUB.G_FIRST);
1194 
1195   end if;
1196 
1197   WF_CORE.Context(
1198     G_PKG_NAME
1199     ,p_api_name
1200     ,p_item_type
1201     ,p_item_key
1202     ,to_char(p_act_id)
1203     ,l_msg_data
1204   );
1205 
1206 END BuildErrorMsg;
1207 
1208 END GCS_ADJ_APPROVAL_WF_PKG;