DBA Data[Home] [Help]

PACKAGE BODY: APPS.FII_COM_CC_DIM_MAPS_PKG

Source


1 PACKAGE BODY FII_COM_CC_DIM_MAPS_PKG  AS
2 /* $Header: FIICCMPB.pls 120.1 2005/10/30 05:05:42 appldev noship $ */
3 
4         G_UNASSIGNED_ID        NUMBER(15);
5 	G_CO_MAP_SEG	       VARCHAR2(30);
6 	G_CC_MAP_SEG	       VARCHAR2(30);
7         g_phase                VARCHAR2(120);
8         g_schema_name          VARCHAR2(120)   := 'FII';
9         g_retcode              VARCHAR2(20)    := NULL;
10         g_debug_mode           VARCHAR2(1)
11                      := NVL(FND_PROFILE.value('FII_DEBUG_MODE'), 'N');
12 
13 -- *******************************************************************
14 -- Initialize (Get the unassigned ID and the segments to which
15 -- Company and Cost Center Dimension is attached)
16 
17    PROCEDURE Initialize  IS
18 
19          l_dir        VARCHAR2(160);
20 	 l_vset_id	NUMBER(15);
21 	 l_ret_code	NUMBER;
22 
23    BEGIN
24 
25      ------------------------------
26      -- Do the set up for log file
27      ------------------------------
28      l_dir := fnd_profile.value('BIS_DEBUG_LOG_DIRECTORY');
29 
30      ------------------------------------------------------
31      -- Set default directory in case if the profile option
32      -- BIS_DEBUG_LOG_DIRECTORY is not set up
33      ------------------------------------------------------
34      if l_dir is NULL then
35        l_dir := FII_UTIL.get_utl_file_dir;
36      end if;
37 
38      ----------------------------------------------------------------
39      -- FII_UTIL.initialize will get profile options FII_DEBUG_MODE
40      -- and BIS_DEBUG_LOG_DIRECTORY and set up the directory where
41      -- the log files and output files are written to
42      ----------------------------------------------------------------
43      FII_UTIL.initialize('FII_COM_CC_DIM_MAPS_PKG.log',
44                          'FII_COM_CC_DIM_MAPS_PKG.out',l_dir,'FII_COM_CC_DIM_MAPS_PKG');
45 
46 
47      -- Obtain FII schema name
48      g_schema_name := FII_UTIL.get_schema_name ('FII');
49 
50      -- Obtain user ID, login ID and initialize package variables
51      FII_USER_ID 	:= FND_GLOBAL.USER_ID;
52      FII_LOGIN_ID	:= FND_GLOBAL.LOGIN_ID;
53 
54      -- If any of the above values is not set, error out
55      IF (FII_User_Id is NULL OR FII_Login_Id is NULL) THEN
56        FII_UTIL.Write_Log ('>>> Failed Intialization');
57        RAISE COMCCDIM_fatal_err;
58      END IF;
59 
60      -- Determine if process will be run in debug mode
61      IF (NVL(G_Debug_Mode, 'N') <> 'N') THEN
62        FIIDIM_Debug := TRUE;
63        FII_UTIL.Write_Log (' Debug On');
64      ELSE
65        FIIDIM_Debug := FALSE;
66        FII_UTIL.Write_Log (' Debug Off');
67      END IF;
68 
69      -- Turn trace on if process is run in debug mode
70      IF (FIIDIM_Debug) THEN
71        -- Program running in debug mode, turning trace on
72        EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE TRUE';
73        FII_UTIL.Write_Log ('Initialize: Set Trace On');
74      END IF;
75 
76      IF (FIIDIM_Debug) THEN
77        FII_UTIL.Write_Log ('Initialize: Now start processing '|| 'Company Cost Center Mapping');
78      End If;
79 
80      -- --------------------------------------------------------
81      -- Find the unassigned ID for company and cost center
82      -- --------------------------------------------------------
83           g_phase := 'Find the shipped FII value set id and the unassigned value id';
84           -- This is to be replaced by a call to the api in FII_GL_EXTRACTION_UTIL package
85           FII_GL_EXTRACTION_UTIL.get_unassigned_id(G_UNASSIGNED_ID, l_vset_id, l_ret_code);
86           IF(l_ret_code = -1) THEN
87            RAISE COMCCDIM_fatal_err;
88           END IF;
89      -- ---------------------------------------------------------------------------
90      -- Get the segment to which the dimension is mapped for company and cost center
91      -- ----------------------------------------------------------------------------
92 
93              g_phase := 'Find the segments to which Company and Cost Center are mapped' ;
94 
95              BEGIN
96 		SELECT BALANCING_OR_COST_CENTER
97 		INTO G_CO_MAP_SEG
98 		FROM FII_FINANCIAL_DIMENSIONS
99 		WHERE DIMENSION_SHORT_NAME = 'FII_COMPANIES';
100 
101 		EXCEPTION
102                   WHEN NO_DATA_FOUND THEN
103 		  FII_UTIL.Write_Log ('Set up for Company not done');
104                   G_CO_MAP_SEG  := NULL;
105               END;
106 
107              BEGIN
108 		SELECT BALANCING_OR_COST_CENTER
109 		INTO G_CC_MAP_SEG
110 		FROM FII_FINANCIAL_DIMENSIONS
111 		WHERE DIMENSION_SHORT_NAME = 'HRI_CL_ORGCC';
112 
113 		EXCEPTION
114                   WHEN NO_DATA_FOUND THEN
115 		  FII_UTIL.Write_Log ('Set up for Cost Center not done');
116                   G_CC_MAP_SEG  := NULL;
117               END;
118 
119      IF (FIIDIM_Debug) THEN
120        FII_UTIL.Write_Log ('COST CENTER is Mapped to segment : '|| G_CC_MAP_SEG );
121        FII_UTIL.Write_Log ('COMPANY is Mapped to segment : '|| G_CO_MAP_SEG);
122      END IF;
123 
124 
125 
126    Exception
127 
128      When COMCCDIM_fatal_err then
129        FII_UTIL.Write_Log ('FII_COM_CC_DIM_MAPS_PKG.Initialize : '|| 'User defined error');
130         FII_UTIL.Write_Log ('G_PHASE : ' || g_phase);
131        FND_CONCURRENT.Af_Rollback;
132        FII_MESSAGE.Func_Fail(func_name => 'FII_COM_CC_DIM_MAPS_PKG.Initialize');
133        raise;
134 
135      When others then
136         FII_UTIL.Write_Log ('Unexpected error when calling Initialize...');
137         FII_UTIL.Write_Log ( 'G_PHASE: ' || g_phase);
138 	FII_UTIL.Write_Log ('Error Message: '|| substr(sqlerrm,1,180));
139         RAISE;
140 
141    END Initialize;
142 
143    -- *******************************************************************
144    -- Populate_com_cc_Maps (Populate the Global temporary table )
145    -- Insert G_UNASSIGNED_ID as the parent if the company/ cost center
146    -- id is not present in the dimension
147 
148    PROCEDURE Populate_com_cc_Maps IS
149 	BEGIN
150 		IF (FIIDIM_Debug) THEN
151  		 FII_MESSAGE.Func_Ent(func_name => 'FII_COM_CC_DIM_MAPS_PKG.Populate_com_cc_Maps');
152                 END IF;
153 
154 		-- Insert records in the com cc mappings GI table
155 		g_phase := 'Insert into FII_COM_CC_DIM_MAP_GT';
156 
157 		------------------------------------------------------------------------------
158 		-- There is a possibility of having Company_id and cost_center_id
159 		-- in FII_GL_CCID_DIMENSIONS which might not be present in the
160 		-- corresponding Dimension hierarchy (it might now be mapped)
161 		-- To populate those id's also in FII_COM_CC_DIM_MAPS_GT
162 		-- outer join is used.
163 		-- Also since both Company and Cost Center Dimension can be mapped
164 		-- to either Balancing / Cost Center Segment so we need to identify
165 		-- that the dimension is mapped to which segment. If the Dimension
166 		-- mapped to Balancing Segment then the Company_id from FII_GL_CCID_DIMENSIONS
167 		-- or FII_BUDGET_BASE should be mapped to the dimension table
168 		-- and if the dimension is mapped to Cost Center Segment then
169 		-- Cost_Center_id From FII_GL_CCID_DIMENSIONS and FII_BUDGET_BASE
170 		-- should be mapped to the dimension table. Decode is used for this purpose
171 		--------------------------------------------------------------------------------
172 
173 		INSERT INTO FII_COM_CC_DIM_MAPS_GT (PARENT_COMPANY_DIM_ID,
174                                    CHILD_COMPANY_ID,
175                                    PARENT_COST_CENTER_DIM_ID,
176                                    CHILD_COST_CENTER_ID)
177 	         SELECT
178 	                h1.parent_company_id,
179                         g.company_id,
180                         h2.parent_cc_id,
181                         g.cost_center_id
182                  FROM
183 	             (select distinct COMPANY_ID, COST_CENTER_ID
184                       from FII_GL_CCID_DIMENSIONS
185                       UNION
186                       select distinct COMPANY_ID, COST_CENTER_ID
187                       from FII_BUDGET_BASE
188 		      )g,
189 
190                       (SELECT fh.parent_COMPANY_id, fh.child_COMPANY_id
191                        FROM FII_FULL_COMPANY_HIERS fh
192                        WHERE fh.parent_company_id IN
193                           (SELECT ph.parent_COMPANY_id
194                            FROM FII_COMPANY_HIERARCHIES ph
195                            WHERE ph.is_leaf_flag = 'Y')) h1,
196                      (SELECT fh.parent_cc_id, fh.child_cc_id
197                       FROM FII_FULL_COST_CTR_HIERS fh
198                       WHERE fh.parent_cc_id IN
199                         (SELECT ph.parent_cc_id
200                          FROM FII_COST_CTR_HIERARCHIES ph
201                          WHERE ph.is_leaf_flag = 'Y')) h2
202                 WHERE DECODE(G_CO_MAP_SEG,
203                              'BALANCING', g.COMPANY_ID,
204                              'COST CENTER', g.cost_center_id, G_UNASSIGNED_ID) =
205                                     h1.child_company_id
206                 AND DECODE(G_CC_MAP_SEG,
207                            'BALANCING', g.COMPANY_ID,
208                            'COST CENTER', g.cost_center_id, G_UNASSIGNED_ID) =
209                                          h2.child_cc_id ;
210 		-- Removed outer join as we dont want unassigned as a parent
211 	     IF (FIIDIM_Debug) THEN
212 		FII_UTIL.Write_Log('Inserted ' || SQL%ROWCOUNT || ' rows from FII_COM_CC_DIM_MAP_GT');
213 		FII_MESSAGE.Func_Succ(func_name => 'FII_COM_CC_DIM_MAPS_PKG.Populate_com_cc_Maps');
214 	     END IF;
215 
216         Exception
217 
218         When others then
219          FII_UTIL.Write_Log ('Unexpected error when calling Populate_com_cc_Maps...');
220          FII_UTIL.Write_Log ( 'G_PHASE: ' || g_phase);
221 	 FII_UTIL.Write_Log ('Error Message: '|| substr(sqlerrm,1,180));
222          RAISE;
223 
224    END Populate_com_cc_Maps;
225 
226 
227 -- **************************************************************************
228 -- This is the main procedure of COMPANY COST CENTER Mapping Table population
229 -- program (initial populate).
230 
231    PROCEDURE Init_Load (errbuf		OUT NOCOPY VARCHAR2,
232 	 	        retcode		OUT NOCOPY VARCHAR2) IS
233     ret_val             BOOLEAN := FALSE;
234 
235   BEGIN
236 
237      IF (FIIDIM_Debug) THEN
238       FII_MESSAGE.Func_Ent(func_name => 'FII_COM_CC_DIM_MAPS_PKG.Init_Load');
239      END IF;
240 
241      --First do the initialization
242      g_phase := 'Calling intialize procedure';
243 
244       Initialize;
245 
246      -- Populate the com cc dim maps GT.
247      g_phase := 'Populate FII_COM_CC_DIM_MAPS_GT';
248 
249      Populate_com_cc_Maps;
250      -- Populate by selecting from the mappings table
251 
252      -- Now all the mappings are populated in the GT table.
253      -- Copy data from GT table to Mappings table
254      g_phase := 'Copy from FII_COM_CC_DIM_MAP_GT to FII_COM_CC_DIM_MAPS';
255 
256      FII_UTIL.truncate_table ('FII_COM_CC_DIM_MAPS', 'FII', g_retcode);
257 
258       Insert into /*+ APPEND */ FII_COM_CC_DIM_MAPS (
259          PARENT_COMPANY_DIM_ID,
260          CHILD_COMPANY_ID,
261          PARENT_COST_CENTER_DIM_ID,
262          CHILD_COST_CENTER_ID,
263          creation_date,
264          created_by,
265          last_update_date,
266          last_updated_by,
267          last_update_login)
268        SELECT
269             PARENT_COMPANY_DIM_ID,
270             CHILD_COMPANY_ID,
271             PARENT_COST_CENTER_DIM_ID,
272             CHILD_COST_CENTER_ID,
273 	    SYSDATE,
274             FII_USER_ID,
275 	    SYSDATE,
276 	    FII_USER_ID,
277 	    FII_LOGIN_ID
278         FROM FII_COM_CC_DIM_MAPS_GT;
279 
280 	IF (FIIDIM_Debug) THEN
281 		FII_UTIL.Write_Log('Inserted ' || SQL%ROWCOUNT || ' rows from FII_COM_CC_DIM_MAPS');
282 	END IF;
283 
284 
285      FND_CONCURRENT.Af_Commit;
286 
287      --Call FND_STATS to collect statistics after populating the tables.
288      -- This will be in RSG data.
289       g_phase := 'gather_table_stats for FII_COM_CC_DIM_MAPS';
290 
291        FND_STATS.gather_table_stats
292             (ownname	=> g_schema_name,
293              tabname	=> 'FII_COM_CC_DIM_MAPS');
294 
295       g_phase := 'gather_table_stats for MLOG$_FII_COM_CC_DIM_MAPS';
296 
297        FND_STATS.gather_table_stats
298          (ownname	=> g_schema_name,
299          tabname	=> 'MLOG$_FII_COM_CC_DIM_MAPS');
300 
301      --=====================================================================
302 
303      IF (FIIDIM_Debug) THEN
304       FII_MESSAGE.Func_Succ(func_name => 'FII_COM_CC_DIM_MAPS_PKG.Init_Load');
305      END IF;
306 
307     -- Exception handling
308 
309   EXCEPTION
310 
311     WHEN COMCCDIM_fatal_err THEN
312 
313       FII_UTIL.Write_Log ('FII_COM_CC_DIM_MAPS_PKG.Init_Load: '||
314                         'User defined error');
315       FND_CONCURRENT.Af_Rollback;
316       FII_MESSAGE.Func_Fail(func_name	=> 'FII_COM_CC_DIM_MAPS_PKG.Init_Load');
317       retcode := sqlcode;
318       ret_val := FND_CONCURRENT.Set_Completion_Status
319 		(status	 => 'ERROR', message => substr(sqlerrm,1,180));
320 
321     WHEN OTHERS THEN
322       FII_UTIL.Write_Log ('Init_Load -> phase: '|| g_phase);
323       FII_UTIL.Write_Log (
324           'Other error in FII_CC_MAINTAIN_PKG.Init_Load: ' || substr(sqlerrm,1,180));
325       FND_CONCURRENT.Af_Rollback;
326       FII_MESSAGE.Func_Fail(func_name	=> 'FII_COM_CC_DIM_MAPS_PKG.Init_Load');
327       retcode := sqlcode;
328       ret_val := FND_CONCURRENT.Set_Completion_Status
329 		(status	 => 'ERROR', message => substr(sqlerrm,1,180));
330 
331    END Init_Load;
332 
333 
334 -- **************************************************************************
335 -- This is the main procedure of COMPANY COST CENTER Mapping Table population
336 -- program (incremental update).
337 
338    PROCEDURE Incre_Update (errbuf		OUT NOCOPY VARCHAR2,
339 	 	           retcode		OUT NOCOPY VARCHAR2) IS
340 
341       ret_val             BOOLEAN := FALSE;
342       ret_code		 VARCHAR2(2):=0;
343    BEGIN
344 
345      IF (FIIDIM_Debug) THEN
346       FII_MESSAGE.Func_Ent(func_name => 'FII_COM_CC_DIM_MAPS_PKG.Incre_Update');
347      END IF;
348 
349      --First do the initialization
350      g_phase := 'Calling intialize procedure';
351 
352       Initialize;
353 
354      -- Populate the com cc dim maps GT table.
355      g_phase := 'Populate FII_COM_CC_DIM_MAPS_GT';
356 
357      Populate_com_cc_Maps;
358 
359      -- -----------------------------------------------------
360      -- Incremental maintainence of FII_COM_CC_DIM_MAPS
361      -- This is done in 2 statements
362      -- One Delete statement and one Insert statement
363      -- Do a diff with the mappings table with the GT table
364      -- ------------------------------------------------------
365 
366 	-- Do a diff with the mappings table
367 	   DELETE FROM FII_COM_CC_DIM_MAPS
368 	   WHERE
369 		(PARENT_COMPANY_DIM_ID,
370 	         CHILD_COMPANY_ID,
371 	         PARENT_COST_CENTER_DIM_ID,
372 	         CHILD_COST_CENTER_ID)IN
373 	   (SELECT PARENT_COMPANY_DIM_ID,
374                    CHILD_COMPANY_ID,
375                    PARENT_COST_CENTER_DIM_ID,
376                    CHILD_COST_CENTER_ID
377   	   FROM FII_COM_CC_DIM_MAPS
378 	   MINUS
379 	   SELECT PARENT_COMPANY_DIM_ID,
380                   CHILD_COMPANY_ID,
381                   PARENT_COST_CENTER_DIM_ID,
382                   CHILD_COST_CENTER_ID
383 	   FROM FII_COM_CC_DIM_MAPS_GT);
384 
385 
386         IF (FIIDIM_Debug) THEN
387 		FII_UTIL.Write_Log('Deleted ' || SQL%ROWCOUNT || ' rows from FII_COM_CC_DIM_MAPS');
388 	END IF;
389 
390 
391 	Insert into FII_COM_CC_DIM_MAPS (
392 	         PARENT_COMPANY_DIM_ID,
393 		 CHILD_COMPANY_ID,
394 		 PARENT_COST_CENTER_DIM_ID,
395 		 CHILD_COST_CENTER_ID,
396 		 creation_date,
397 		 created_by,
398 		 last_update_date,
399 		 last_updated_by,
400 		 last_update_login)
401        (SELECT
402             PARENT_COMPANY_DIM_ID,
403             CHILD_COMPANY_ID,
404             PARENT_COST_CENTER_DIM_ID,
405             CHILD_COST_CENTER_ID,
406 	    SYSDATE,
407       	    FII_USER_ID,
408 	    SYSDATE,
409 	    FII_USER_ID,
410 	    FII_LOGIN_ID
411         FROM FII_COM_CC_DIM_MAPS_GT
412         MINUS
413         SELECT
414             PARENT_COMPANY_DIM_ID,
415             CHILD_COMPANY_ID,
416             PARENT_COST_CENTER_DIM_ID,
417             CHILD_COST_CENTER_ID,
418 	    SYSDATE,
419 	    FII_USER_ID,
420 	    SYSDATE,
421 	    FII_USER_ID,
422 	    FII_LOGIN_ID
423        FROM FII_COM_CC_DIM_MAPS);
424 
425        IF (FIIDIM_Debug) THEN
426 		FII_UTIL.Write_Log('Inserted ' || SQL%ROWCOUNT || ' rows into FII_COM_CC_DIM_MAPS');
427 	END IF;
428 
429        FND_CONCURRENT.Af_Commit;
430 
431      -- Call FND_STATS to collect statistics after populating the tables.
432      -- This will be in RSG data.
433       g_phase := 'gather_table_stats for FII_COM_CC_DIM_MAPS';
434 
435        FND_STATS.gather_table_stats
436             (ownname	=> g_schema_name,
437              tabname	=> 'FII_COM_CC_DIM_MAPS');
438 
439         -- Bug 4200473. Not to analyze MLOG in incremental run.
440 	-- As per performance teams suggestions.
441        --g_phase := 'gather_table_stats for MLOG$_FII_COM_CC_DIM_MAPS';
442 
443        --FND_STATS.gather_table_stats
444          --(ownname	=> g_schema_name,
445          --tabname	=> 'MLOG$_FII_COM_CC_DIM_MAPS');
446 
447        IF (FIIDIM_Debug) THEN
448         FII_MESSAGE.Func_Succ(func_name => 'FII_COM_CC_DIM_MAPS_PKG.Incre_Update');
449        END IF;
450 
451    -- Exception handling
452 
453    EXCEPTION
454      WHEN COMCCDIM_fatal_err THEN
455        FII_UTIL.Write_Log ('FII_COM_CC_DIM_MAPS_PKG.Incre_Update'||
456                          'User defined error');
457 
458        FND_CONCURRENT.Af_Rollback;
459        FII_MESSAGE.Func_Fail(func_name	=> 'FII_COM_CC_DIM_MAPS_PKG.Incre_Update');
460        retcode := sqlcode;
461        ret_val := FND_CONCURRENT.Set_Completion_Status
462 	        	(status	 => 'ERROR', message => substr(sqlerrm,1,180));
463 
464      WHEN OTHERS THEN
465        FII_UTIL.Write_Log ('Incre_Update -> phase: '|| g_phase);
466        FII_UTIL.Write_Log (
467           'Other error in FII_COM_CC_DIM_MAPS_PKG.Incre_Update: ' || substr(sqlerrm,1,180));
468 
469 
470        FND_CONCURRENT.Af_Rollback;
471        FII_MESSAGE.Func_Fail(func_name	=> 'FII_COM_CC_DIM_MAPS_PKG.Incre_Update');
472        retcode := sqlcode;
473        ret_val := FND_CONCURRENT.Set_Completion_Status
474 	        	(status	 => 'ERROR', message => substr(sqlerrm,1,180));
475 
476    END Incre_Update;
477 
478 END FII_COM_CC_DIM_MAPS_PKG ;