DBA Data[Home] [Help]

PACKAGE BODY: APPS.FV_YE_CARRYFORWARD

Source


1 PACKAGE BODY Fv_Ye_Carryforward AS
2 --$Header: FVXYECFB.pls 120.23.12020000.4 2013/02/13 14:57:33 snama ship $
3       --  ======================================================================
4     --                  Variable Naming Conventions
5     --  ======================================================================
6     --  1. Input/Output Parameter global variables
7     --     have the format                                   "vp_<Variable Name>"
8     --  2. Other Global Variables have the format            "vg_<Variable_Name>"
9     --  3. Procedure Level local variables have
10     --     the format                                        "vl_<Variable_Name>"
11     --  4. PL/SQL Table variables have                       "vt_<Variable_Name>"
12     --  5. User Defined Exceptions have                      "e_<Exception_Name>"
13     --  6. Variable Cursors have                             "vc_<Variable_Name>"
14     --  ======================================================================
15     --                          Parameter Global Variable Declarations
16     --  ======================================================================
17     vp_errbuf           VARCHAR2(1000)                          ;
18     vp_retcode          NUMBER := 0                             ;
19     vp_sob_id           Gl_Sets_Of_Books.set_of_books_id%TYPE  ;
20     vp_carryfor_fyr     Gl_Periods.period_year%TYPE             ;
21     --  ======================================================================
22     --                           Other Global Variable Declarations
23     --  ======================================================================
24     vg_coa_id           Gl_Sets_Of_Books.chart_of_accounts_id%TYPE;
25     vg_bal_seg_value    varchar2(30);
26     vg_period_set_name  Gl_Sets_Of_Books.period_set_name%TYPE;
27     vg_currency         Gl_Sets_Of_Books.currency_code%TYPE;
28     vg_closing_period   Gl_Period_Statuses.period_name%TYPE;
29     vg_carryfor_period  Gl_Period_Statuses.period_name%TYPE;
30     vg_start_date       Gl_Period_Statuses.start_date%TYPE;
31     vg_closing_fyr      Gl_Periods.period_year%TYPE;
32     vg_jrnl_group_id    NUMBER;
33     vg_interface_run_id NUMBER;
34     vg_bal_seg_val_opt_code VARCHAR2(1);
35     vg_acct_seg_name varchar2(250);
36     TYPE t_numbertable IS TABLE OF NUMBER
37   INDEX BY BINARY_INTEGER;
38     TYPE t_reference IS TABLE OF VARCHAR2(250)
39   INDEX BY BINARY_INTEGER;
40     vt_dr_balances   t_numbertable;
41     vt_cr_balances   t_numbertable;
42     vt_ccids          t_numbertable;
43     vt_reference       t_reference;
44     e_error    EXCEPTION;
45 
46     vg_public_law_attribute    fv_system_parameters.factsii_pub_law_code_attribute%TYPE;
47     vg_advance_type_attribute  fv_system_parameters.factsii_advance_type_attribute%TYPE;
48     vg_trf_dept_id_attribute   fv_system_parameters.factsii_tr_dept_id_attribute%TYPE;
49     vg_trf_main_acct_attribute fv_system_parameters.factsii_tr_main_acct_attribute%TYPE;
50 
51     vg_facts_attributes_setup  BOOLEAN ;
52     g_module_name VARCHAR2(100);
53     c_gl_line_cur      INTEGER;
54 
55 -- ------------------------------------------------------------------
56 --                      Procedure Main
57 -- ------------------------------------------------------------------
58 -- Main procedure that is called from the Carry Forward budgetary
59 -- account balances concurrent request. This procedure calls all the
60 -- subsequent procedures in the Carry forward process.
61 -- ------------------------------------------------------------------
62 PROCEDURE Main( errbuf                  OUT NOCOPY VARCHAR2,
63                 retcode                 OUT NOCOPY NUMBER,
64                 sob                      NUMBER,
65                 carryfor_fyr                NUMBER) IS
66      l_module_name         VARCHAR2(200) ;
67      l_bc_count            NUMBER;
68 BEGIN
69 l_module_name         :=  g_module_name || 'main ';
70  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
71  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'STARTING THE CARRY FORWARD BUDGETARY ACCOUNT ' ||
72     'Balances Process.....');
73          END IF;
74    -- Assign initial values
75    vp_retcode := 0;
76    vp_errbuf  := NULL;
77    -- Load the parameter global variables
78    vp_sob_id            := sob;
79    vp_carryfor_fyr      := carryfor_fyr;
80  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
81  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'THE PARAMETERS PASSED TO THE CARRY FORWARD PROCESS ARE: '||
82                 'Set of books id = '||TO_CHAR(vp_sob_id)||
86        SELECT count(*)
83     ',Carry Forward Fiscal Year = '||TO_CHAR(vp_carryfor_fyr));
84        END IF;
85 
87          INTO l_bc_count
88          FROM gl_period_statuses
89          WHERE application_id = 101
90            AND ledger_id = vp_sob_id
91            AND period_year = vp_carryfor_fyr
92            AND NVL(track_bc_ytd_flag, 'N') = 'Y';
93 
94        IF (l_bc_count > 0) THEN
95          FV_UTILITY.LOG_MESG (FND_LOG.LEVEL_ERROR, l_module_name, 'Carry forward process is not allowed for this year.');
96          vp_retcode := -1;
97          retcode := vp_retcode;
98          RETURN;
99        END IF;
100     -- Get the Coa and Currency Code
101  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
102  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'GETTING THE CHART OF ACCOUNTS AND CURRENCY CODE');
103  END IF;
104    Get_Required_Parameters;
105    IF (vp_retcode = 0) THEN
106       -- Get the Closing Fyr,Last Period for the Closing Fyr and
107       -- First Period for the Carry Forward Fyr
108  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
109  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'GETTING THE CLOSING FYR, LAST PERIOD '||
110                                 'of the Closing Fiscal Year and '||
111         'First Period of the Carry Forward Fiscal Year');
112             END IF;
113       Get_Period_Details;
114    END IF;
115    IF (vp_retcode = 0) THEN
116       -- Clean up gl_interface table,if any records exist in the interface
117       -- from the previous run of the process.
118       Cleanup_Gl_Interface;
119    END IF;
120    IF (vp_retcode = 0) THEN
121       -- Check if the Carry Forward process has been run earlier
122       -- for the same period.
123  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
124  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'CHECKING IF THE CARRYFORWARD PROCESS HAS BEEN '||
125     'run earlier for the same period.');
126  END IF;
127 
128       Check_Carryforward_Process;
129    END IF;
130    IF vp_retcode <> 0 THEN
131         -- Check for errors
132         errbuf := vp_errbuf;
133         retcode := vp_retcode;
134         ROLLBACK;
135    ELSE
136         COMMIT;
137         retcode := 0;
138         errbuf  := '** Carry Forward Budgetary Account Balances Process '||
139       'completed successfully **';
140    END IF;
141  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
142  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'ENDING THE CARRY FORWARD BUGETARY ACCOUNT BALANCES '||
143       'Process ......');
144              END IF;
145 EXCEPTION
146    WHEN OTHERS THEN
147         ROLLBACK;
148         errbuf := '** Carry Forward Budgetary Account Balances Process Failed ** '
149         ||SQLERRM;
150 
151         retcode := 2;
152         IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
153            FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name
154                                                            ,errbuf);
155         END IF;
156 END Main;
157 -- ------------------------------------------------------------------
158 --                      Procedure Get_Required_Parameters
159 -- ------------------------------------------------------------------
160 -- Get_Required_Parameters procedure is called from Main procedure.
161 -- It gets the coa and the currency code.
162 -- ------------------------------------------------------------------
163 PROCEDURE Get_Required_Parameters IS
164     l_module_name         VARCHAR2(200) ;
165     l_err_code            BOOLEAN;
166 BEGIN
167  l_module_name        :=  g_module_name || 'Get_Required_Parameters ';
168    -- Get the Coa and Currency code
169    BEGIN
170         SELECT currency_code ,
171                CHART_OF_ACCOUNTS_ID,
172                BAL_SEG_VALUE_OPTION_CODE
173         INTO vg_currency ,
174              vg_coa_id  ,
175              vg_bal_seg_val_opt_code
176         FROM gl_ledgers_public_v
177         WHERE ledger_id = vp_sob_id;
178         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
179    FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   CHART OF ACCOUNTS ID = '||TO_CHAR(VG_COA_ID));
180      END IF;
181 
182         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
183    FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   CURRENCY CODE = '||VG_CURRENCY);
184         END IF;
185    EXCEPTION
186         WHEN NO_DATA_FOUND THEN
187             vp_errbuf := 'Error in Get_Required_Parameters:'||
188                         ' Currency Code or Chart of Account is not defined';
189             vp_retcode := 1;
190             RETURN;
191    END;
192 
193 FV_UTILITY.get_segment_col_names(                       vg_coa_id,
194                                                          vg_acct_seg_name,                                                                 Vg_bal_seg_value ,
195                                                          l_err_code,
196                                                          vp_errbuf) ;
197 
198 
199    BEGIN
200         SELECT factsii_pub_law_code_attribute,
201          factsii_advance_type_attribute, factsii_tr_dept_id_attribute,
202          factsii_tr_main_acct_attribute
203         INTO   vg_public_law_attribute,
204                vg_advance_type_attribute, vg_trf_dept_id_attribute,
205                vg_trf_main_acct_attribute
206         FROM   Fv_System_Parameters;
207 
208         -- Set the global variable to false if public law code and other parameters
209         -- are not setup in the define system parameters form.
213             vg_trf_main_acct_attribute IS NULL)
210         IF (vg_public_law_attribute IS NULL OR
211             vg_advance_type_attribute IS NULL OR
212             vg_trf_dept_id_attribute IS NULL OR
214           THEN
215             vg_facts_attributes_setup := FALSE;
216          ELSE
217             vg_facts_attributes_setup := TRUE;
218         END IF;
219 
220    EXCEPTION
221         WHEN OTHERS THEN
222             vp_errbuf := 'Error in Get_Required_Parameters:'||
223                   ' While determining the FACTS I Journal Attribute.';
224             vp_retcode := 2;
225    END;
226 
227 EXCEPTION
228      WHEN OTHERS THEN
229             vp_retcode := 2 ;
230             vp_errbuf  := SQLERRM ||' -- Error in Get_Required_Parameters procedure.';
231            IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
232               FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name
233                                                            ,vp_errbuf );
234            END IF;
235             RETURN ;
236 END Get_Required_Parameters;
237 -- ------------------------------------------------------------------
238 --                      Procedure Get_Period_Details
239 -- ------------------------------------------------------------------
240 -- Get_Period_Details procedure is called from Main procedure.
241 -- It gets the closing_fyr,last_period of the closing fyr,first period
242 -- of the carry forward fyr.
243 -- ------------------------------------------------------------------
244 PROCEDURE Get_Period_Details IS
245    l_module_name         VARCHAR2(200) ;
246    vl_adj_flag    Gl_Period_Statuses.adjustment_period_flag%TYPE;
247    vl_closing_status  Gl_Period_Statuses.closing_status%TYPE;
248 BEGIN
249 l_module_name    :=  g_module_name ||
250                                        'Get_Period_Details ';
251    -- Get the Closing Fyr
252    vg_closing_fyr := vp_carryfor_fyr - 1;
253  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
254  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   CLOSING FISCAL YEAR IS = '||TO_CHAR(VG_CLOSING_FYR));
255  END IF;
256    -- Get the Last Period of the Closing Fyr
257    BEGIN
258         SELECT period_name
259         INTO vg_closing_period
260         FROM Gl_Period_Statuses
261         WHERE ledger_id = vp_sob_id
262         AND application_id = 101
263         AND period_year = vg_closing_fyr
264         AND period_num = (SELECT MAX(period_num)
265                           FROM gl_period_statuses
266                           WHERE ledger_id = vp_sob_id
267                           AND application_id = 101
268                           AND period_year = vg_closing_fyr);
269  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
270  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   LAST PERIOD OF THE CLOSING FISCAL YEAR = '
271                                 ||vg_closing_period);
272     END IF;
273    EXCEPTION
274         WHEN NO_DATA_FOUND THEN
275             vp_retcode := 1;
276             vp_errbuf  := 'Error in Get_Period_Details: '||
277                         'Last period is not defined for the Closing Fiscal Year.';
278             RETURN;
279         WHEN OTHERS THEN
280             vp_retcode := 2 ;
281             vp_errbuf  := SQLERRM||' -- Error in Get_Period_Details procedure,'||
282                         'while getting the last period of closing fiscal year.' ;
283             RETURN ;
284    END;
285    -- Get the First Period of the Carry Forward Fyr
286    BEGIN
287         SELECT period_name, adjustment_period_flag,
288     closing_status,start_date
289         INTO vg_carryfor_period,vl_adj_flag,
290     vl_closing_status, vg_start_date
291         FROM Gl_Period_Statuses
292         WHERE ledger_id = vp_sob_id
293         AND application_id = 101
294         AND period_year = vp_carryfor_fyr
295         AND period_num = (SELECT MIN(period_num)
296                           FROM gl_period_statuses
297                           WHERE ledger_id = vp_sob_id
298                           AND application_id = 101
299                           AND period_year = vp_carryfor_fyr);
300  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
301  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   FIRST PERIOD OF THE CARRY FORWARD FISCAL YEAR = '
302                             ||vg_carryfor_period||', adjustment period flag = '
303           ||vl_adj_flag||', and closing status = '
304           ||vl_closing_status);
305     END IF;
306    EXCEPTION
307         WHEN NO_DATA_FOUND THEN
308             vp_retcode := 1;
309             vp_errbuf  := 'Error in Get_Period_Details: '||
310                  'First period is not defined for the Carry Forward Fiscal Year.';
311             RETURN;
312         WHEN OTHERS THEN
313             vp_retcode := 2 ;
314             vp_errbuf  := SQLERRM||' -- Error in Get_Period_Details procedure,'||
315                  'while getting the first period of carry forward fiscal year.' ;
316             RETURN ;
317    END;
318    IF (vl_adj_flag = 'N') THEN
319   vp_retcode := 2;
320   vp_errbuf  := 'The first period of the Carry Forward Fiscal Year is '||
321     ' not specified as an adjusting period.';
322   RETURN;
323    END IF;
324    IF (vl_closing_status <> 'O') THEN
325   vp_retcode := 2;
326   vp_errbuf  := 'The first period of the Carry Forward Fiscal Year is '||
327     'not an open period.';
328   RETURN;
329    END IF;
330    BEGIN
331   SELECT period_set_name
332   INTO vg_period_set_name
333   FROM Gl_Sets_Of_Books
334   WHERE set_of_books_id = vp_sob_id;
335  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
339         WHEN OTHERS THEN
336  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   PERIOD SET NAME = '||VG_PERIOD_SET_NAME);
337  END IF;
338    EXCEPTION
340             vp_retcode := 2 ;
341             vp_errbuf  := SQLERRM||' -- Error in Get_Period_Details procedure,'||
342                         'while getting the period set name.' ;
343             IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
344               FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name
345                                                            ,vp_errbuf );
346             END IF;
347             RETURN ;
348    END;
349 
350 
351 EXCEPTION
352      WHEN OTHERS THEN
353             vp_retcode := 2 ;
354             vp_errbuf  := SQLERRM ||' -- Error in Get_Period_Details procedure.';
355             IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
356               FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name
357                                                            ,vp_errbuf );
358             END IF;
359             RETURN ;
360 END Get_Period_Details;
361 -- ------------------------------------------------------------------
362 --                      Procedure Check_Carryforward_Process
363 -- ------------------------------------------------------------------
364 -- Check_Carryforward_Process procedure is called from Main procedure.
365 -- It checks whether the carryforward process has been run earlier for
366 -- the same period. If it has been run, then it checks to see if the
367 -- journal entries have been reversed or not.
368 -- ------------------------------------------------------------------
369 PROCEDURE Check_Carryforward_Process IS
370    vl_cnt     NUMBER;
371    vl_header_id    Gl_Je_Headers.je_header_id%TYPE;
372    vl_accrrev_status    Gl_Je_Headers.accrual_rev_status%TYPE;
373    vl_rev_header_id    Gl_Je_Headers.accrual_rev_je_header_id%TYPE;
374    vl_rev_status    Gl_Je_Headers.status%TYPE;
375    vl_status      Gl_Je_Headers.status%TYPE;
376    CURSOR get_count_cur IS
377   SELECT COUNT(*)
378   FROM Gl_Je_Headers
379   WHERE ledger_id = vp_sob_id
380   AND je_source = 'Year End Close'
381   AND je_category = 'Federal Carry Forward'
382   AND period_name = vg_carryfor_period;
383    CURSOR get_hdrs_cur IS
384   SELECT je_header_id,accrual_rev_status,
385     accrual_rev_je_header_id,status
386   FROM Gl_Je_Headers
387   WHERE ledger_id = vp_sob_id
388   AND je_source = 'Year End Close'
389   AND je_category = 'Federal Carry Forward'
390   AND period_name = vg_carryfor_period;
391    CURSOR get_revstat_cur IS
392   SELECT status
393   FROM Gl_Je_Headers
394   WHERE ledger_id = vp_sob_id
395   AND je_header_id = vl_rev_header_id;
396      l_module_name         VARCHAR2(200);
397 BEGIN
398  l_module_name         :=  g_module_name ||
399                                          'Check_Carryforward_Process ';
400    -- Check to see if there are any records existing in the headers table
401    -- for the same period.
402    OPEN get_count_cur;
403    FETCH get_count_cur INTO vl_cnt;
404    CLOSE get_count_cur;
405  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
406  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   THE NUMBER OF RECORDS EXISTING IN GL ARE '
407       ||TO_CHAR(vl_cnt));
408              END IF;
409    IF (vl_cnt > 0) THEN
410   FOR vc_hdrs IN get_hdrs_cur LOOP
411      vl_header_id := vc_hdrs.je_header_id;
412      vl_accrrev_status := vc_hdrs.accrual_rev_status;
413      vl_rev_header_id := vc_hdrs.accrual_rev_je_header_id;
414      vl_status := vc_hdrs.status;
415      IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
416  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   IN THE LOOP FOR GETTING HEADERS, '||
417       'processing the following:');
418      END IF;
419      IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
420  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   JE_HEADER_ID: '||TO_CHAR(VL_HEADER_ID) ||
421       ', accrual_rev_status: '||vl_accrrev_status||
422       ', accrual_rev_je_header_id: '||TO_CHAR(vl_rev_header_id));
423      END IF;
424            IF (vc_hdrs.accrual_rev_status IS NULL) THEN
425           IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
426  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   ACCRUAL REV STATUS IS NULL, I.E. <> R');
427           END IF;
428     IF (vc_hdrs.accrual_rev_je_header_id IS NULL) THEN
429              IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
430  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   ACCRUAL REV JE HEADER ID IS NULL');
431              END IF;
432        vp_retcode := 1;
433        IF (vc_hdrs.status = 'P') THEN
434           vp_errbuf  := 'Carry Forward journal entries exist in GL:'||
435         'Please reverse and post those entries and '||
436         'then re-run the Carry Forward process.';
437        ELSE
438           vp_errbuf  := 'Carry Forward journal entries exist in GL:'||
439         'Please delete the unposted journal entries and '||
440         'then re-run the Carry Forward process.';
441        END IF;
442        RETURN;
443     END IF;
444      ELSE
445           IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
446  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   ACCRUAL REV STATUS = R');
447           END IF;
448     OPEN get_revstat_cur;
449     FETCH get_revstat_cur INTO vl_rev_status;
450     CLOSE get_revstat_cur;
451           IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
452  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   THE STATUS OF THE REVERSED JE IS = '||
453         vl_rev_status);
454           END IF;
455     IF (vl_rev_status <> 'P') THEN
459        vp_retcode := 1;
456              IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
457  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   STATUS <> POSTED');
458              END IF;
460        vp_errbuf  := 'Reverse Carry Forward journal entries exist '||
461         'in GL, which are not posted.'||
462         'Please post those entries and re-run the '||
463         'Carry Forward process.';
464        RETURN;
465     END IF;
466      END IF;
467   END LOOP;
468    END IF;
469    -- Get Balances and ccid's
470  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
471  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   CALLING GET_BALANCES PROCEDURE');
472  END IF;
473    Get_Balances;
474    IF (vp_retcode <> 0) THEN
475        RAISE e_error;
476    END IF;
477 EXCEPTION
478      WHEN e_error THEN
479             RETURN;
480      WHEN OTHERS THEN
481             vp_retcode := 2 ;
482             vp_errbuf  := SQLERRM||' -- Error in Get_Carryforward_process procedure.';
483             IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
484               FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name
485                                                            ,vp_errbuf );
486             END IF;
487             RETURN ;
488 END Check_Carryforward_Process;
489 -- ------------------------------------------------------------------
490 --                      Procedure Get_Balances
491 -- ------------------------------------------------------------------
492 -- Get_Balances procedure is called from Check_Carryforward_Process
493 -- procedure.It gets the balances and ccids for all the budgetary
494 -- accounts for the last period of the closing fyr.
495 -- ------------------------------------------------------------------
496 PROCEDURE Get_Balances IS
497    vl_rec_found_flag   VARCHAR2(1) ;
498    l_module_name       VARCHAR2(200);
499 
500  -- Dynamic Sql variables
501    l_insert_stmt     VARCHAR2(2000);
502    vl_attribute_cols    VARCHAR2(1024);
503    vl_group_by_clause    VARCHAR2(1024);
504    l_user_id       NUMBER(15) ;
505    l_select_stmt        VARCHAR2(6000);
506    vl_exec_cur       INTEGER ;
507 BEGIN
508     vl_rec_found_flag  := 'N';
509     l_user_id :=  fnd_global.user_id ;
510    l_module_name         :=  g_module_name || 'Get_Balances ';
511    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
512  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'      IN GET_BALANCES PROCEDURE');
513    END IF;
514 
515    -- Setup Gl Interface
516    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
517  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'      CALLING SETUP_GL_INTERFACE PROCEDURE');
518    END IF;
519    Setup_Gl_Interface;
520    IF (vp_retcode <> 0) THEN
521        RAISE e_error;
522    END IF;
523 
524     IF vg_public_law_attribute IS NOT NULL THEN
525        vl_attribute_cols := vl_attribute_cols||', NVL(b.public_law_code, l.'||vg_public_law_attribute||') ';
526     ELSE
527       vl_attribute_cols := vl_attribute_cols||', NULL';
528     END IF;
529 
530    IF vg_advance_type_attribute IS NOT NULL THEN
531        vl_attribute_cols := vl_attribute_cols||', NVL(b.advance_type, l.'||vg_advance_type_attribute||') ';
532    ELSE
533        vl_attribute_cols := vl_attribute_cols||', NULL';
534    END IF;
535 
536    IF vg_trf_dept_id_attribute IS NOT NULL THEN
537        vl_attribute_cols := vl_attribute_cols||', NVL(b.dept_id, l.'||vg_trf_dept_id_attribute||') ';
538    ELSE
539        vl_attribute_cols := vl_attribute_cols||', NULL';
540    END IF;
541 
542    IF vg_trf_main_acct_attribute IS NOT NULL THEN
543        vl_attribute_cols  := vl_attribute_cols||', NVL(b.main_account, l.'|| vg_trf_main_acct_attribute ||') ';
544    ELSE
545       vl_attribute_cols := vl_attribute_cols||', NULL';
546    END IF;
547 
548   IF (vl_attribute_cols IS NOT NULL) THEN
549       vl_group_by_clause := ' GROUP BY  gcc.code_combination_id ,' ||SUBSTR(vl_attribute_cols, 2);
550   END IF;
551 
552  BEGIN
553     c_gl_line_cur := DBMS_SQL.OPEN_CURSOR  ;
554   EXCEPTION
555     WHEN OTHERS THEN
556       vp_retcode := 2;
557       vp_errbuf  := SQLERRM|| ' Open cursor error in Populate_Gl_Interface procedure.';
558       FV_UTILITY.LOG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name,vp_errbuf);
559       RAISE e_error;
560   END ;
561 
562 -- Constructing the insert into Gl interface from the select of the query
563  BEGIN
564  l_insert_stmt :=  ' INSERT INTO Gl_Interface(status,
565                 ledger_id    ,
566                 accounting_date    ,
567                 currency_code      ,
568                 date_created    ,
569                 created_by      ,
570                 actual_flag      ,
571                 user_je_category_name,
572                 user_je_source_name ,
573                 entered_dr      ,
574                 entered_cr      ,
575                 group_id      ,
576                 period_name      ,
577                 chart_of_accounts_id,
578                 code_combination_id ,
579                 reference21      ,
580                 attribute' || NVL(SUBSTR(vg_public_law_attribute   , 10),17) || ' ,
581                 attribute' || NVL(SUBSTR(vg_advance_type_attribute , 10),18) || ' ,
582                 attribute' || NVL(SUBSTR(vg_trf_dept_id_attribute  , 10),19) || ' ,
586               ' SELECT
583                 attribute' || NVL(SUBSTR(vg_trf_main_acct_attribute, 10),20) || '  ) ';
584 
585  l_select_stmt :=
587               ''NEW''  , '
588               || vp_sob_id  || ' , '''
589               || vg_start_date  || ''' , '''
590               || vg_currency
591               || ''' ,  SYSDATE , ' ||
592                l_user_id || ' ,
593                ''A''  ,
594                ''Federal Carry Forward'' ,
595                ''Year End Close'' , '
596               || ' SUM(ROUND(NVL(xdl.unrounded_accounted_dr,0),2)) debit,
597               SUM(ROUND(NVL(xdl.unrounded_accounted_cr,0),2)) credit  , '
598               || vg_jrnl_group_id || ' , '''
599               ||  vg_carryfor_period || ''' , '
600               ||  vg_coa_id
601               || ' ,   gcc.code_combination_id  , '
602               || '  MAX(xdl.SOURCE_DISTRIBUTION_ID_NUM_1) reference_1 '
603               || vl_attribute_cols || '
604                       FROM  fv_be_trx_dtls B, xla_ae_lines xl ,
605                xla_distribution_links xdl,   gl_je_lines l,
606                gl_je_headers h , gl_code_combinations gcc,
607                gl_import_references gir
608               WHERE l.code_combination_id = gcc.code_combination_id
609               AND l.je_header_id = h.je_header_id
610 
611 
612 
613        AND FV_YE_CARRYFORWARD.Check_bal_seg_value(GCC.'||VG_BAL_SEG_VALUE||',
614                                                 :sob_id,
615                                 :bal_seg_val_opt_code) = '||''''||'Y'||''''||
616     '   AND  xl.code_combination_id = l.code_combination_id
617       AND  gir.je_header_id = h.je_header_id
618       AND  gir.je_batch_id = h.je_batch_id
619       AND  gir.je_line_num = l.je_line_num
620       AND  xl.ae_header_id = xdl.ae_header_id
621       AND  xl.ae_line_num = xdl.ae_line_num
622       AND  xl.gl_sl_link_id = gir.gl_sl_link_id
623       AND  xl.currency_code = h.currency_code
624       AND  NVL(h.je_from_sla_flag, ''N'')  =  ''Y''
625       AND  EXISTS (SELECT 1
626                                       FROM   gl_periods
627                                       WHERE  period_year = :closing_fyr
628                                       AND    period_set_name = :period_set_name
629                                       AND    period_name = l.period_name)
630                                                    AND  nvl(xdl.SOURCE_DISTRIBUTION_ID_NUM_1,-99)=b.transaction_id(+)
631              AND b.set_of_books_id (+) = :sob_id
632               AND l.status = ''P''
633               AND h.actual_flag = ''A''
634              AND h.ledger_id = :sob_id
635               --AND h.currency_code = :vg_currency --bug 5570564
636                AND h.currency_code <> ''STAT''
637               AND  gcc.summary_flag = '||''''||'N'||''''||
638               ' AND gcc.template_id IS NULL
639                AND gcc.chart_of_accounts_id = :c_coa
640                    AND gcc.account_type IN ('||''''||'C'||''''||','||
641                    ''''||'D'||''''||')'||  vl_group_by_clause  ||
642         ' UNION
643  SELECT
644               ''NEW''  , '
645               || vp_sob_id  || ' , '''
646               || vg_start_date  || ''' , '''
647               || vg_currency
648               || ''' ,  SYSDATE , ' ||
649                l_user_id || ' ,
650                ''A''  ,
651                ''Federal Carry Forward'' ,
652                ''Year End Close'' , '
653               || ' SUM(NVL(l.accounted_dr,0)) debit,
654               SUM(NVL(l.accounted_cr,0)) credit  , '
655               || vg_jrnl_group_id || ' , '''
656               ||  vg_carryfor_period || ''' , '
657               ||  vg_coa_id
658               || ' ,   gcc.code_combination_id  , '
659               || '  MAX(fv_ye_carryforward.convert_to_num(l.reference_1)) '
660               || vl_attribute_cols || '
661                       FROM  gl_je_lines l , fv_be_trx_dtls b, gl_je_headers h , gl_code_combinations gcc
662               WHERE l.code_combination_id = gcc.code_combination_id
663                AND FV_YE_CARRYFORWARD.Check_bal_seg_value(GCC.'|| VG_BAL_SEG_VALUE||', :sob_id,:bal_seg_val_opt_code ) = '||''''||'Y'||''''||
664     '          AND l.je_header_id = h.je_header_id
665               AND  NVL(h.je_from_sla_flag, ''N'') IN (''N'',''U'')
666               AND  EXISTS (SELECT 1
667                                          FROM   gl_periods
668                                       WHERE  period_year = :closing_fyr
669                                       AND    period_set_name = :period_set_name
670                                       AND    period_name = l.period_name)
671               AND  nvl(Fv_Ye_Carryforward.Convert_To_Num(l.reference_1),-99)=b.transaction_id(+)
672 AND l.ledger_id = b.set_of_books_id(+)
673 AND l.status = ''P''
674               AND h.actual_flag = ''A''
675               AND h.ledger_id = :sob_id
676               -- AND h.currency_code = :vg_currency --bug 5570564
677               AND h.currency_code <> ''STAT''
678               AND  gcc.summary_flag = '||''''||'N'||''''||
679               ' AND gcc.template_id IS NULL
680                AND gcc.chart_of_accounts_id = :c_coa
681                    AND gcc.account_type IN ('||''''||'C'||''''||','||
682                    ''''||'D'||''''||')'||  vl_group_by_clause ;
683 
684 
685 
686 
687         l_select_stmt :=   l_insert_stmt  || '( ' ||  l_select_stmt || ')';
688 
689         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
690         FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,l_select_stmt);
691        END IF;
692        dbms_sql.parse(c_gl_line_cur, l_select_stmt, DBMS_SQL.V7) ;
693        --dbms_sql.bind_variable(c_gl_line_cur,':vg_currency', vg_currency); -- 5570564
694          dbms_sql.bind_variable(c_gl_line_cur,':c_coa', vg_coa_id);
695       dbms_sql.bind_variable(c_gl_line_cur,':sob_id', vp_sob_id);
696       dbms_sql.bind_variable(c_gl_line_cur,':closing_fyr', vg_closing_fyr);
697       dbms_sql.bind_variable(c_gl_line_cur,':period_set_name', vg_period_set_name);
698       dbms_sql.bind_variable(c_gl_line_cur,':bal_seg_val_opt_code', vg_bal_seg_val_opt_code);
699 
700       vl_exec_cur := dbms_sql.EXECUTE(c_gl_line_cur);
701 
702      fnd_file.put_line(FND_FILE.LOG,'No of Records inserted into GL_interface :' || to_char(vl_exec_cur));
703   EXCEPTION
704     WHEN OTHERS THEN
705       vp_retcode := 2;
706       vp_errbuf  := SQLERRM|| ' Parse cursor error in Get_Balances procedure.';
707       FV_UTILITY.LOG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name,vp_errbuf);
708       RAISE e_error;
709   END ;
710 
711     IF dbms_sql.is_open(c_gl_line_cur) THEN
712       dbms_sql.close_cursor(c_gl_line_cur);
713     END IF;
714    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
715      FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'      SUBMITTING JOURNAL IMPORT.');
716    END IF;
717    Submit_Journal_Import;
718    IF (vp_retcode <> 0) THEN
719        RAISE e_error;
720    END IF;
721 
722 EXCEPTION
723      WHEN e_error THEN
724             IF dbms_sql.is_open(c_gl_line_cur) THEN
725               dbms_sql.close_cursor(c_gl_line_cur);
726           END IF;
727             RETURN;
728      WHEN OTHERS THEN
729             IF dbms_sql.is_open(c_gl_line_cur) THEN
730               dbms_sql.close_cursor(c_gl_line_cur);
731           END IF;
732             vp_retcode := 2 ;
733             vp_errbuf  := l_select_stmt || SQLERRM||' -- Error in Get_Balances procedure.';
734             RETURN ;
735 END Get_Balances;
736 
737 
738 -- ------------------------------------------------------------------
739 --                      Procedure Setup_Gl_Interface
740 -- ------------------------------------------------------------------
741 -- Setup_Gl_Interface procedure is called from Get_Balances procedure.
742 -- This proc inserts records in the gl_interface table, getting the ccids
743 -- and balances from the pl/sql tables and then runs journal import program.
744 -- ------------------------------------------------------------------
745 PROCEDURE Setup_Gl_Interface IS
746    vl_req_id       NUMBER;
747    vl_call_status  BOOLEAN;
748    vl_rphase       VARCHAR2(30);
749    vl_rstatus      VARCHAR2(30);
750    vl_dphase       VARCHAR2(30);
751    vl_dstatus      VARCHAR2(30);
752    vl_message      VARCHAR2(240);
753    vl_cnt      NUMBER;
754     l_module_name         VARCHAR2(200);
755 BEGIN
756      l_module_name          :=  g_module_name ||
757                                         'Setup_Gl_Interface ';
758  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
759  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'         IN SETUP_GL_INTERFACE PROCEDURE....');
760  END IF;
761    -- Get the interface_run_id
762    vg_interface_run_id := Gl_Interface_Control_Pkg.Get_Unique_Run_Id;
763    -- Get the journal group_id
764    SELECT Gl_Interface_Control_S.NEXTVAL
765    INTO vg_jrnl_group_id
766    FROM DUAL;
767    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
768  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'         INTERFACE RUN ID: '
769     ||TO_CHAR(vg_interface_run_id));
770    END IF;
771    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
772  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'         JOURNAL GROUP ID: '
773     ||TO_CHAR(vg_jrnl_group_id));
774    END IF;
775    --Insert a control record in gl_interface_control for gl_import to work
776    INSERT INTO Gl_Interface_Control
777         (je_source_name,
778         status,
779         interface_run_id,
780         group_id,
781         set_of_books_id)
782    VALUES ('Year End Close',
783         'S',
784         vg_interface_run_id,
785         vg_jrnl_group_id,
786         vp_sob_id);
787 EXCEPTION
788    WHEN OTHERS THEN
789         vp_retcode := 2;
790         vp_errbuf  := SQLERRM || '--Error in Setup_Gl_Interface procedure.';
791         IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
792            FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name
793                                                            ,vp_errbuf);
794         END IF;
795         RETURN;
796 END Setup_Gl_Interface;
797 
798 -- --------------------------------
799 -- Procedure Submit_Journal_Import
800 -- -------------------------------
801 PROCEDURE Submit_Journal_Import IS
802   vl_req_id       NUMBER;
803    vl_call_status  BOOLEAN;
804    vl_rphase       VARCHAR2(30);
805    vl_rstatus      VARCHAR2(30);
806    vl_dphase       VARCHAR2(30);
807    vl_dstatus      VARCHAR2(30);
808    vl_message      VARCHAR2(240);
812    l_module_name :=  g_module_name || 'Submit_Journal_Import ';
809    l_module_name  VARCHAR2(200);
810 
811 BEGIN
813    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
814  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'         AFTER INSERTING INTO GL_INTERFACE....');
815    END IF;
816    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
817  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'         CALLING THE JOURNAL IMPORT PROGRAM....');
818    END IF;
819    -- Submit a Concurrent request to invoke journal import
820    vl_req_id := FND_REQUEST.SUBMIT_REQUEST('SQLGL',
821                                     'GLLEZL',
822                                      '',
823                                      '',
824                                      FALSE,
825                                      TO_CHAR(vg_interface_run_id),
826                                      TO_CHAR(vp_sob_id),
827                                      'N', '', '', 'N', 'W');
828    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
829  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'         THE REQUEST_ID IS '||VL_REQ_ID);
830    END IF;
831    -- if concurrent request submission failed then abort process
832    IF (vl_req_id = 0) THEN
833         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
834  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'         JOURNAL IMPORT REQUEST NOT SUBMITTED.');
835         END IF;
836         vp_errbuf := 'Cannot submit journal import program';
837         vp_retcode := 1;
838         ROLLBACK;
839         RETURN;
840    ELSE
841         IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
842  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'         JOURNAL IMPORT REQUEST SUBMITTED '||
843                         'successfully.');
844         END IF;
845         COMMIT;
846    END IF;
847 
848    -- Check status of completed concurrent program
849    -- and if complete exit
850    vl_call_status := Fnd_Concurrent.Wait_For_Request(
851                 vl_req_id, 20, 0, vl_rphase, vl_rstatus,
852                 vl_dphase, vl_dstatus, vl_message);
853    IF (vl_call_status = FALSE) THEN
854         vp_errbuf := 'Cannot wait for the status of journal import';
855         vp_retcode := 1;
856    END IF;
857 EXCEPTION
858    WHEN OTHERS THEN
859         vp_retcode := 2;
860         vp_errbuf  := SQLERRM || '--Error in Submit_Journal_Import procedure.';
861         IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
862               FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name
863                                                          ,vp_errbuf);
864         END IF;
865         RETURN;
866 END Submit_Journal_Import;
867 
868 -- ------------------------------------------------------------------
869 --                      Procedure Cleanup_Gl_Interface
870 -- ------------------------------------------------------------------
871 -- Cleanup_Gl_Interface procedure is called from Main
872 -- procedure. This cleans up the gl_interface table.
873 -- ------------------------------------------------------------------
874 PROCEDURE Cleanup_Gl_Interface IS
875  l_module_name   VARCHAR2(200) ;
876 BEGIN
877   l_module_name   :=  g_module_name ||  'Cleanup_Gl_Interface';
878  IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
879  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT, l_module_name,'   IN THE CLEANUP_GL_INTERFACE PROCEDURE....');
880  END IF;
881    -- Delete from Gl_Interface table
882    DELETE FROM Gl_Interface
883    WHERE user_je_source_name = 'Year End Close'
884    AND user_je_category_name = 'Federal Carry Forward'
885    AND ledger_id = vp_sob_id;
886 EXCEPTION
887    WHEN OTHERS THEN
888         vp_retcode := 2;
889         vp_errbuf  := SQLERRM || '-- Error in Cleanup_Gl_Interface procedure.';
890         IF (FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL ) THEN
891               FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_UNEXPECTED, l_module_name
892                                                            ,vp_errbuf);
893         END IF;
894         RETURN;
895 END Cleanup_Gl_Interface;
896 -- + --------------------------------------------------------------------- +
897 -- + Function to convert a cloumn value to Number                +
898 -- + This function returns Number if it a number else NULL            +
899 -- + --------------------------------------------------------------------- +
900 FUNCTION Convert_To_Num ( p_instr VARCHAR2) RETURN NUMBER
901 IS
902  l_outnum number;
903 BEGIN
904 IF (p_instr IS NULL) THEN
905   RETURN NULL;
906 END IF;
907  l_outnum := p_instr;
908  return l_outnum;
909 EXCEPTION
910 WHEN OTHERS THEN
911  l_outnum:=0;
912  return l_outnum;
913 END Convert_To_Num;
914 
915 -- ------------------------------------------------------------------
916 --              Function Check_bal_seg_value
917 -- ------------------------------------------------------------------
918 --  BSV's are not always assigned to ledgers. Therefore we should not
919 --  enforce BSV assignemnt if there is no BSV flex value set
920 --  is assigned to a ledger.
921 --  IF bal_seg_value_option_code column value in GL_LEDGER table is
922 --  'A' that means all BSV's are valid. If the column is 'I',
923 --  then some BSV's are valid.
924 --  ------------------------------------------------------------------
925 FUNCTION Check_bal_seg_value(Vp_fund_value  VARCHAR2 ,
926                                 Vp_sob_id NUMBER,
927                                 Vp_bal_seg_val_opt_code VARCHAR)
928 RETURN  VARCHAR       IS
929 
930    l_module_name         VARCHAR2(200)  ;
931    vl_valid_fund     VARCHAR2(1);
932 BEGIN
933 l_module_name    :=  g_module_name ||  'Check_bal_seg_value  ';
934 vl_valid_fund      := 'N';
935 
936 IF Vp_bal_seg_val_opt_code <> 'I'  THEN
937   RETURN 'Y';
938 END IF;
939 
940    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
941  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT,
942       l_module_name,
943       '   IN CHECK_BAL_SEG_VALUE PROCEDURE '||
944         'with the following Parameters passed to the process:');
945    END IF;
946    IF ( FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
947  FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_STATEMENT,
948        l_module_name,
949       '   FUND VALUE= '||VP_FUND_VALUE);
950    END IF;
951 
952 BEGIN
953       SELECT  'Y'
954       INTO    vl_valid_fund
955       FROM    gl_ledger_segment_values glsv
956       WHERE   glsv.ledger_id = vp_sob_id
957        AND     glsv.segment_type_code (+) = 'B'
958       AND     NVL(glsv.status_code (+), 'X') <> 'I'
959       AND     NVL(glsv.start_date (+),TO_DATE('1950/01/01','YYYY/MM/DD'))
960                <= NVL(sysdate,TO_DATE('9999/12/31','YYYY/MM/DD'))
961       AND     NVL(glsv.end_date (+),TO_DATE('9999/12/31','YYYY/MM/DD'))
962                >= NVL(sysdate, TO_DATE('1950/01/01','YYYY/MM/DD'))
963       AND     glsv.segment_value   = Vp_fund_value;
964 
965 EXCEPTION
966    WHEN NO_DATA_FOUND THEN
967        vl_valid_fund := 'N' ;
968 END ;
969        RETURN vl_valid_fund ;
970 
971 EXCEPTION
972       WHEN OTHERS THEN
973         vp_retcode := 2 ;
974         vp_errbuf  := SQLERRM  ||
975     ' -- Error in Check Check_bal_seg_value procedure.' ;
976         IF ( FND_LOG.LEVEL_UNEXPECTED >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
977            FV_UTILITY.DEBUG_MESG(FND_LOG.LEVEL_UNEXPECTED,
978        l_module_name,
979                          'When Others Exception ' || vp_errbuf );
980         END IF;
981         RETURN 'N';
982 END Check_bal_seg_value;
983 
984 BEGIN
985   g_module_name := 'fv.plsql.Fv_Ye_Carryforward.';
986 END Fv_Ye_Carryforward;