DBA Data[Home] [Help]

PACKAGE BODY: APPS.FII_BUDGET_INTERFACE_PKG

Source


1 PACKAGE BODY FII_BUDGET_INTERFACE_PKG AS
2 /* $Header: FIIBUINB.pls 120.10 2005/06/02 19:25:48 ilavenil noship $ */
3 
4   -- Purpose
5   --   	This is the routine called by Web ADI for uploading records
6   --    into FII_BUDGET_INTERFACE
7   -- History
8   --   	07-22-02	 S Kung	        Created
9   -- Arguments
10   --    All columns in the FII_BUDGET_INTERFACE table
11   -- Example
12   --    FII_BUDGET_INTERFACE.Web_Adi_Upload;
13   -- Notes
14   --
15  FUNCTION Web_Adi_Upload
16 		( X_RowID		    IN	VARCHAR2 DEFAULT NULL,
17 		  X_Plan_Type		IN	VARCHAR2,
18 		  X_Version_Date    IN VARCHAR2 DEFAULT NULL,
19 		  X_Time_Period		IN	VARCHAR2 DEFAULT NULL,
20 		  X_Date		    IN	DATE DEFAULT NULL,
21 		  X_Company         IN  VARCHAR2 DEFAULT NULL,
22           X_Cost_Center     IN  VARCHAR2 DEFAULT NULL,
23 		  X_CCC		    	IN	NUMBER DEFAULT NULL,
24 		  X_LOB		    	IN	VARCHAR2 DEFAULT NULL,
25 		  X_Acct	    	IN	VARCHAR2 DEFAULT NULL,
26 		  X_Fin_Item		IN	VARCHAR2 DEFAULT NULL,
27 		  X_Product		    IN	NUMBER DEFAULT NULL,
28 		  X_User_Defined_Dim IN VARCHAR2 DEFAULT NULL,
29 		  X_Prim_Amt		IN	NUMBER,
30  		  X_Rate	    	IN	NUMBER DEFAULT NULL,
31 		  X_Sec_Amt	    	IN	NUMBER DEFAULT NULL,
32 		  X_Ledger          IN  NUMBER DEFAULT NULL
33           ) return VARCHAR2  IS
34 
35       invalid_company EXCEPTION;
36       invalid_cost_center EXCEPTION;
37       invalid_account     EXCEPTION;
38       invalid_user_defined EXCEPTION;
39       invalid_sys_profile   EXCEPTION;
40       l_sec_amt NUMBER;
41       l_company NUMBER;
42       l_cost_center NUMBEr;
43       l_account NUMBER;
44       l_user_defined_dim NUMBER;
45       l_err_msg VARCHAR2(150);
46 BEGIN
47 
48 --check for system profile FII_BUDGET_SOURCE = WEBADI
49 IF (fnd_profile.value('FII_BUDGET_SOURCE') = 'WEBADI') THEN
50   -- If RowID is null, THEN new record to be inserted, else update.
51   IF (X_RowID is NULL) THEN
52     --if rate is a non zero value, THEN we compute secondary currency amount and overwrite the user
53     --entered secondary currency amount.
54     IF nvl(X_Rate,0) <> 0 THEN
55        l_sec_amt := X_Prim_Amt * X_Rate;
56     ELSE
57        l_sec_amt := X_Sec_Amt;
58     END IF;
59 
60        BEGIN
61          SELECT  c.flex_value_id
62          INTO l_company
63          FROM FND_ID_FLEX_SEGMENTS a, FND_SEGMENT_ATTRIBUTE_VALUES b, fnd_flex_values c,
64          fnd_flex_values_tl d
65          WHERE a.ID_FLEX_CODE = 'GL#'
66          AND   a.APPLICATION_ID = 101
67          AND   a.ID_FLEX_NUM in (select chart_of_accounts_id from
68                                   gl_ledgers_public_v where
69                                   ledger_id = X_Ledger)
70          AND   a.application_id = b.application_id
71          AND   a.id_flex_code   = b.id_flex_code
72          AND   a.id_flex_num    = b.id_flex_num
73          AND   a.application_column_name = b.application_column_name
74          AND   b.attribute_value = 'Y'
75          AND   b.segment_attribute_type = ('GL_BALANCING')
76          AND   a.flex_value_set_id = c.flex_value_set_id
77          AND   c.flex_value_id  = d.flex_value_id
78          AND   d.language = userenv('LANG')
79          AND   c.summary_flag = 'N'
80          AND   c.flex_value = X_Company;
81        EXCEPTION
82          WHEN others THEN
83          RAISE invalid_company;
84        END;
85 
86        BEGIN
87          SELECT  c.flex_value_id
88          INTO l_cost_center
89          FROM FND_ID_FLEX_SEGMENTS a, FND_SEGMENT_ATTRIBUTE_VALUES b, fnd_flex_values c,
90          fnd_flex_values_tl d
91          WHERE a.ID_FLEX_CODE = 'GL#'
92          AND   a.APPLICATION_ID = 101
93          AND   a.ID_FLEX_NUM in (select chart_of_accounts_id from
94                                  gl_ledgers_public_v  where
95                                  ledger_id = X_Ledger)
96          AND   a.application_id = b.application_id
97          AND   a.id_flex_code   = b.id_flex_code
98          AND   a.id_flex_num    = b.id_flex_num
99          AND   a.application_column_name = b.application_column_name
100          AND   b.attribute_value = 'Y'
101          AND   b.segment_attribute_type = ('FA_COST_CTR')
102          AND   a.flex_value_set_id = c.flex_value_set_id
103          AND   c.flex_value_id  = d.flex_value_id
104          AND   d.language = userenv('LANG')
105          AND   c.summary_flag = 'N'
106          AND   c.flex_value = X_Cost_Center;
107        EXCEPTION
108          WHEN others THEN
109          RAISE invalid_cost_center;
110        END;
111 
112        BEGIN
113          SELECT  c.flex_value_id
114          INTO l_account
115          FROM FND_ID_FLEX_SEGMENTS a, FND_SEGMENT_ATTRIBUTE_VALUES b, fnd_flex_values c,
116          fnd_flex_values_tl d
117          WHERE a.ID_FLEX_CODE = 'GL#'
118          AND   a.APPLICATION_ID = 101
119          AND   a.ID_FLEX_NUM in (select chart_of_accounts_id from
120                                  gl_ledgers_public_v where
121                                  ledger_id = X_Ledger)
122          AND   a.application_id = b.application_id
123          AND   a.id_flex_code   = b.id_flex_code
124          AND   a.id_flex_num    = b.id_flex_num
125          AND   a.application_column_name = b.application_column_name
126          AND   b.attribute_value = 'Y'
127          AND   b.segment_attribute_type = ('GL_ACCOUNT')
128          AND   a.flex_value_set_id = c.flex_value_set_id
129          AND   c.flex_value_id  = d.flex_value_id
130          AND   d.language = userenv('LANG')
131          AND   c.flex_value = X_Fin_Item;
132        EXCEPTION
133          WHEN others THEN
134          RAISE invalid_account;
135        END;
136 
137        IF X_User_Defined_Dim is not null THEN
138          BEGIN
139             SELECT  f.flex_value_id
140             INTO l_user_defined_dim
141             FROM fnd_flex_values f, fnd_flex_values_tl t, fii_financial_dimensions ffd
142             WHERE flex_value_set_id in
143                (SELECT MASTER_VALUE_SET_ID id FROM fii_financial_dimensions
144                  WHERE dimension_short_name = 'FII_USER_DEFINED_1'
145                  UNION
146                  SELECT map.flex_value_set_id1 id
147                  FROM fii_dim_mapping_rules  map, fii_slg_assignments   sts, fii_source_ledger_groups slg,
148                 gl_ledgers_public_v sob
149                  WHERE map.dimension_short_name   = 'FII_USER_DEFINED_1'
150                  AND map.chart_of_accounts_id   = sts.chart_of_accounts_id
151                  AND sts.source_ledger_group_id = slg.source_ledger_group_id
152                  AND slg.usage_code = 'DBI'
153                  AND sts.ledger_id = sob.ledger_id
154                  AND sob.ledger_id = X_Ledger)
155             AND f.flex_value_id = t.flex_value_id
156             AND t.language = userenv('LANG')
157             AND ffd.dimension_short_name = 'FII_USER_DEFINED_1'
158             AND ffd.dbi_enabled_flag = 'Y'
159             AND f.flex_value = X_User_Defined_Dim;
160          EXCEPTION
161            WHEN others THEN
162            RAISE invalid_user_defined;
163          END;
164        END IF;
165 
166        INSERT INTO FII_BUDGET_INTERFACE
167        (plan_type_code, prim_amount_g, report_time_period, report_date, version_date, sec_amount_g, conversion_rate,
168        fin_item, fin_category_id, prod_category_id,  company, company_id,
169        cost_center, cost_center_id, user_dim1, user_dim1_id, ledger_id)
170        VALUES
171        (X_Plan_Type, X_Prim_Amt, X_Time_Period, X_Date, to_date(X_Version_Date, 'DD-MM-YYYY'), l_sec_amt, X_Rate,
172         X_Fin_Item, l_account, X_Product, X_Company, l_Company,
173         X_Cost_Center, l_Cost_Center, X_User_Defined_Dim, l_User_Defined_Dim, X_Ledger);
174   ELSE
175         UPDATE FII_BUDGET_INTERFACE
176         SET
177 	    plan_type_code		= X_Plan_Type,
178     	prim_amount_g		= X_Prim_Amt,
179 	    report_time_period	= X_Time_Period,
180     	report_date		= X_Date,
181         fin_item            = X_Fin_Item,
182     	fin_category_id		= l_account,
183 	    prod_category_id	= X_Product,
184     	conversion_rate		= X_Rate,
185 	    sec_amount_g		= l_sec_amt,
186 	    company             = X_Company,
187     	company_id          = l_Company,
188     	cost_center         = X_Cost_Center,
189 	    cost_center_id      = l_Cost_Center,
190     	version_date        = to_date(X_Version_Date, 'DD-MM-YYYY'),
191     	User_Dim1           = X_User_Defined_Dim,
192 	    user_dim1_id = l_User_Defined_Dim,
193     	ledger_id    = X_Ledger,
194         status_code = null
195         WHERE
196 	    rowid = chartorowid(X_RowID);
197 
198 	--once user fixes the errored record and re-uploads, THEN it is essential that
199 	--all other residing VALIDATED records are to be set as status_code = null.
200 	--thus upload into base table program will process all of the records existing in
201 	--interface table and not just the error-fixed record.
202 	    UPDATE FII_BUDGET_INTERFACE
203 	    SET status_code = NULL;
204 
205   END IF;
206 ELSE
207   RAISE invalid_sys_profile;
208 END IF;
209 return null;
210 
211 EXCEPTION
212   WHEN invalid_company THEN
213   l_err_msg := fnd_message.get_string('FII','FII_EA_INVALID_COMPANY');
214   return l_err_msg;
215 
216   WHEN invalid_cost_center THEN
217   l_err_msg := fnd_message.get_string('FII','FII_EA_INVALID_COST_CENTER');
218   return l_err_msg;
219 
220   WHEN invalid_account THEN
221   l_err_msg := fnd_message.get_string('FII','FII_EA_INVALID_ACCOUNT');
222   return l_err_msg;
223 
224   WHEN invalid_user_defined THEN
225   l_err_msg := fnd_message.get_string('FII','FII_EA_INVALID_USR_DEFINED_DIM');
226   return l_err_msg;
227 
228   WHEN invalid_sys_profile THEN
229   l_err_msg := fnd_message.get_string('FII','FII_EA_INVALID_SYS_PROFILE');
230   return l_err_msg;
231 
232   WHEN OTHERS THEN
233   l_err_msg := fnd_message.get_string('FII', 'FII_EA_VALIDATOR_ERR');
234   return l_err_msg;
235 END Web_Adi_Upload;
236 
237 END FII_BUDGET_INTERFACE_PKG;
238