DBA Data[Home] [Help]

PACKAGE BODY: APPS.JL_BR_SPED_PUB

Source


1 PACKAGE BODY JL_BR_SPED_PUB AS
2 /* $Header: jlspedpb.pls 120.3 2010/10/05 13:05:05 abuissa noship $ */
3 
4 --  Global Constant variable for holding Package Name
5 
6     G_PKG_NAME	CONSTANT    VARCHAR2(20):=  'JL_BR_SPED_PUB';
7 
8 -- Declare VARRAY
9 
10   TYPE token_array IS TABLE OF VARCHAR2(25) INDEX BY binary_integer;
11   TYPE value_for_token IS TABLE OF VARCHAR2(25) INDEX BY binary_integer;
12 
13 
14 -- Function REPLACE_TOKEN for replacing tokens with actual value
15 
16 FUNCTION REPLACE_TOKEN(
17   msg IN VARCHAR2,
18   tokens IN token_array,
19   tokenValues IN value_for_token) RETURN VARCHAR2 IS
20 
21   message VARCHAR2(1000);
22 
23   BEGIN
24     message := msg;
25     FOR iNtex IN tokens.FIRST .. tokens.LAST LOOP
26     message := replace(message,tokens(iNtex),tokenValues(iNtex));
27     END LOOP;
28 
29   RETURN message;
30 
31 END REPLACE_TOKEN;
32 
33 -- UPDATE_ATTRIBUTES Procedure - To update the attributes
34 
35 PROCEDURE UPDATE_ATTRIBUTES (
36   P_API_VERSION	              IN	    NUMBER      DEFAULT 1.0,
37   P_COMMIT	              IN	    VARCHAR2    DEFAULT FND_API.G_FALSE,
38   P_CUSTOMER_TRX_ID           IN	    NUMBER,
39   P_ELECT_INV_WEB_ADDRESS     IN	    VARCHAR2,
40   P_ELECT_INV_STATUS          IN	    VARCHAR2,
41   P_ELECT_INV_ACCESS_KEY      IN            VARCHAR2,
42   P_ELECT_INV_PROTOCOL        IN	    VARCHAR2,
43   X_RETURN_STATUS             OUT   NOCOPY  VARCHAR2,
44   X_MSG_DATA                  OUT   NOCOPY  VARCHAR2)
45 
46   IS
47   PRAGMA AUTONOMOUS_TRANSACTION;  --bug 10171220
48 
49   -- Declaration part
50 
51     CURSOR C_EXT IS
52       SELECT COUNT(*) as cnt FROM JL_BR_CUSTOMER_TRX_EXTS
53       WHERE CUSTOMER_TRX_ID = P_CUSTOMER_TRX_ID;
54 
55     CURSOR C_TRX IS
56       SELECT 'Yes' as isExist
57       FROM JL_BR_CUSTOMER_TRX_EXTS
58       WHERE CUSTOMER_TRX_ID = P_CUSTOMER_TRX_ID
59       AND ELECTRONIC_INV_STATUS IN ('2','7');
60 
61     CURSOR C_CUST_TRX_EXIST IS
62       SELECT 'Yes' as isExist FROM RA_CUSTOMER_TRX_ALL
63       WHERE CUSTOMER_TRX_ID = P_CUSTOMER_TRX_ID;
64 
65     CURSOR C_VALID_EI_STATUS IS
66       SELECT 'Yes' as isExist FROM FND_LOOKUPS
67       WHERE LOOKUP_TYPE = 'JLBR_EI_STATUS'
68       AND LOOKUP_CODE = P_ELECT_INV_STATUS;
69 
70   l_count                     NUMBER;
71   isExist                     VARCHAR2(5)  := 'No';
72   l_api_name                  VARCHAR2(30) := 'UPDATES_ATTRIBUTES';
73   l_api_version               NUMBER       := 1.0;
74   inv_status_final            EXCEPTION;
75   invalid_cust_trx_id         EXCEPTION;
76   invalid_ei_status           EXCEPTION;
77   incompatible_apiversion     EXCEPTION;
78   invalid_commit_param        EXCEPTION;
79   invalid_apiversion          EXCEPTION;
80 
81   tok_arr  token_array;
82   val_for_token  value_for_token;
83 
84   BEGIN
85 
86    X_RETURN_STATUS   :=  FND_API.G_RET_STS_SUCCESS;
87 
88     -- Standard call to check for call compatibility
89 
90     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, P_API_VERSION, l_api_name, G_PKG_NAME) THEN
91                  tok_arr(1) := '&'||'CURR_VER_NUM';
92                  tok_arr(2) := '&'||'API_NAME';
93                  tok_arr(3) := '&'||'PKG_NAME';
94                  tok_arr(4) := '&'||'CALLER_VER_NUM';
95                  val_for_token(1) := l_api_version;
96                  val_for_token(2) := l_api_name;
97                  val_for_token(3) := G_PKG_NAME;
98                  val_for_token(4) := P_API_VERSION;
99           IF TRUNC(l_api_version) > TRUNC(P_API_VERSION) THEN
100                  RAISE incompatible_apiversion;
101           ELSE
102                  RAISE invalid_apiversion;
103           END IF;
104     END IF;
105 
106 
107     FOR cust_trx_exist_rec IN C_CUST_TRX_EXIST  LOOP
108         isExist := cust_trx_exist_rec.isExist;
109     END LOOP;
110 
111     /* If Valid customer Trx ID is passed */
112     IF  isExist = 'Yes' THEN
113 
114           isExist := 'No'; -- Reinitializing the var
115 
116           FOR ei_status_rec IN C_VALID_EI_STATUS LOOP
117               isExist := ei_status_rec.isExist;
118           END LOOP;
119 
120           /* If Valid Electronic Invoice Staus is passed */
121           IF isExist = 'Yes' THEN
122                   FOR ext_rec IN C_EXT  LOOP
123                       l_count := ext_rec.cnt;
124                   END LOOP;
125 
126                   IF l_count = 0 THEN
127                       -- Create an entry in JL_BR_CUSTOMER_TRX_EXTS table
128                       INSERT INTO JL_BR_CUSTOMER_TRX_EXTS(
129                                 CUSTOMER_TRX_ID,
130                                 ELECTRONIC_INV_WEB_ADDRESS,
131                                 ELECTRONIC_INV_STATUS,
132                                 ELECTRONIC_INV_ACCESS_KEY,
133                                 ELECTRONIC_INV_PROTOCOL,
134                                 LAST_UPDATE_DATE,
135                                 LAST_UPDATED_BY,
136                                 LAST_UPDATE_LOGIN,
137                                 CREATED_BY,
138                                 CREATION_DATE)
139                       VALUES (
140                                 P_CUSTOMER_TRX_ID,
141                                 P_ELECT_INV_WEB_ADDRESS,
142                                 P_ELECT_INV_STATUS,
143                                 P_ELECT_INV_ACCESS_KEY,
144                                 P_ELECT_INV_PROTOCOL,
145                                 SYSDATE,
146                                 -1,
147                                 -1,
148                                 -1,
149                                 SYSDATE);
150                   ELSE
151 
152                       -- Bug 8780811
153                       If p_elect_inv_status <> '4' Then
154                          FOR trx_rec IN  C_TRX LOOP
155                             RAISE inv_status_final;
156                          END LOOP;
157                       End If;
158                       -- Bug 8780811
159 
160                       UPDATE JL_BR_CUSTOMER_TRX_EXTS
161                       SET ELECTRONIC_INV_WEB_ADDRESS = P_ELECT_INV_WEB_ADDRESS,
162                           ELECTRONIC_INV_STATUS = P_ELECT_INV_STATUS,
163                           ELECTRONIC_INV_ACCESS_KEY = P_ELECT_INV_ACCESS_KEY,
164                           ELECTRONIC_INV_PROTOCOL = P_ELECT_INV_PROTOCOL,
165                           LAST_UPDATE_DATE = SYSDATE,
166                           LAST_UPDATED_BY = -1,
167                           LAST_UPDATE_LOGIN = -1
168                       WHERE CUSTOMER_TRX_ID = P_CUSTOMER_TRX_ID;
169 
170                   END IF;
171 
172                   IF P_ELECT_INV_STATUS IN ('2','7') THEN
173                         UPDATE AR_PAYMENT_SCHEDULES_ALL
174                         SET SELECTED_FOR_RECEIPT_BATCH_ID = NULL
175                         WHERE CUSTOMER_TRX_ID = P_CUSTOMER_TRX_ID;
176                   END IF;
177 
178 
179                   BEGIN
180                       IF FND_API.TO_BOOLEAN(P_COMMIT) THEN
181                           COMMIT;
182                       ELSE
183                           ROLLBACK;
184                       END IF;
185                   EXCEPTION
186                       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
187                       RAISE invalid_commit_param;
188                   END;
189 
190 
191           ELSE   /* If Invalid Electronic Invoice Status is passed */
192                tok_arr(1) := '&'||'INV_STATUS';
193                val_for_token(1) := P_ELECT_INV_STATUS;
194               RAISE invalid_ei_status;
195           END IF;
196     ELSE     /* If Invalid customer Trx ID is passed */
197            tok_arr(1) := '&'||'TRX_ID';
198            val_for_token(1) := P_CUSTOMER_TRX_ID;
199            RAISE invalid_cust_trx_id;
200     END IF;
201 
202 EXCEPTION
203 
204     WHEN invalid_apiversion  THEN
205       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
206       X_MSG_DATA := FND_MESSAGE.GET_STRING('FND','FND_AS_INVALID_VER_NUM',NULL);
207       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
208 
209     WHEN incompatible_apiversion  THEN
210       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
211       X_MSG_DATA := FND_MESSAGE.GET_STRING('FND','FND_AS_INCOMPATIBLE_API_CALL',NULL);
212       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
213 
214     WHEN invalid_cust_trx_id THEN
215       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
216       X_MSG_DATA := FND_MESSAGE.GET_STRING('JL','JL_BR_INVALID_CUST_TRX_ID',NULL);
217       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
218 
219     WHEN invalid_ei_status THEN
220       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
221       X_MSG_DATA := FND_MESSAGE.GET_STRING('JL','JL_BR_INVALID_EI_STATUS',NULL);
222       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
223 
224     WHEN inv_status_final THEN
225       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
226       X_MSG_DATA := FND_MESSAGE.GET_STRING('JL','JL_BR_EI_FINALIZED',NULL);
227 
228     WHEN invalid_commit_param THEN
229       ROLLBACK;
230       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
231       X_MSG_DATA := FND_MESSAGE.GET_STRING('JL','JL_BR_API_COMMIT',NULL);
232 
233     WHEN OTHERS THEN
234       ROLLBACK;
235       tok_arr(1) := 'ERRMSG';
236       val_for_token(1) := SQLERRM;
237       X_RETURN_STATUS   :=  FND_API.G_RET_STS_UNEXP_ERROR;
238       X_MSG_DATA :=  FND_MESSAGE.GET_STRING('JL','JL_BR_API_ERROR',NULL);
239       X_MSG_DATA :=  REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
240 
241 END UPDATE_ATTRIBUTES;
242 
243 -- INSERT_LOG Procedure - To insert the log
244 
245 PROCEDURE INSERT_LOG (
246   P_API_VERSION	              IN	    NUMBER    DEFAULT 1.0,
247   P_COMMIT	              IN	    VARCHAR2  DEFAULT FND_API.G_FALSE,
248   P_CUSTOMER_TRX_ID           IN	    NUMBER,
249   P_OCCURRENCE_DATE           IN	    DATE,
250   P_ELECT_INV_STATUS          IN	    VARCHAR2,
251   P_MESSAGE_TEXT              IN            VARCHAR2,
252   X_RETURN_STATUS             OUT   NOCOPY  VARCHAR2,
253   X_MSG_DATA                  OUT   NOCOPY  VARCHAR2)
254 
255   IS
256   PRAGMA AUTONOMOUS_TRANSACTION;  --bug 10171220
257 
258   -- Declaration part
259 
260   CURSOR C_INV_STATUS IS
261     SELECT ELECTRONIC_INV_STATUS
262     FROM JL_BR_CUSTOMER_TRX_EXTS
263     WHERE CUSTOMER_TRX_ID = P_CUSTOMER_TRX_ID;
264 
265   CURSOR C_CUST_TRX_EXIST IS
266     SELECT 'Yes' as isExist FROM RA_CUSTOMER_TRX_ALL
267     WHERE CUSTOMER_TRX_ID = P_CUSTOMER_TRX_ID;
268 
269   CURSOR C_VALID_EI_STATUS IS
270     SELECT 'Yes' as isExist FROM FND_LOOKUPS
271     WHERE LOOKUP_TYPE = 'JLBR_EI_STATUS'
272     AND LOOKUP_CODE = P_ELECT_INV_STATUS;
273 
274   l_api_name          VARCHAR2(30)  := 'INSERT_LOG';
275   l_api_version       NUMBER        := 1.0;
276   isExist             VARCHAR2(5)      :='No';
277   inv_status_differs  EXCEPTION;
278   invalid_cust_trx_id EXCEPTION;
279   invalid_ei_status   EXCEPTION;
280   incompatible_apiversion     EXCEPTION;
281   invalid_commit_param        EXCEPTION;
282   invalid_apiversion          EXCEPTION;
283 
284   tok_arr  token_array;
285   val_for_token  value_for_token;
286 
287   BEGIN
288 
289   X_RETURN_STATUS   :=  FND_API.G_RET_STS_SUCCESS;
290 
291     -- Standard call to check for call compatibility
292 
293     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, P_API_VERSION, l_api_name, G_PKG_NAME) THEN
294                  tok_arr(1) := '&'||'CURR_VER_NUM';
295                  tok_arr(2) := '&'||'API_NAME';
296                  tok_arr(3) := '&'||'PKG_NAME';
297                  tok_arr(4) := '&'||'CALLER_VER_NUM';
298                  val_for_token(1) := l_api_version;
299                  val_for_token(2) := l_api_name;
300                  val_for_token(3) := G_PKG_NAME;
301                  val_for_token(4) := P_API_VERSION;
302           IF TRUNC(l_api_version) > TRUNC(P_API_VERSION) THEN
303                  RAISE incompatible_apiversion;
304           ELSE
305                  RAISE invalid_apiversion;
306           END IF;
307     END IF;
308 
309 
310   FOR cust_trx_exist_rec IN C_CUST_TRX_EXIST  LOOP
311       isExist := cust_trx_exist_rec.isExist;
312   END LOOP;
313 
314   /* If Valid customer Trx ID is passed */
315   IF  isExist = 'Yes' THEN
316 
317         isExist := 'No'; -- Reinitializing the var
318 
319         FOR ei_status_rec IN C_VALID_EI_STATUS  LOOP
320             isExist := ei_status_rec.isExist;
321         END LOOP;
322 
323         /* If Valid Electronic Invoice Staus is passed */
324         IF isExist = 'Yes' THEN
325 
326             FOR inv_status_rec IN C_INV_STATUS LOOP
327                 IF inv_status_rec.ELECTRONIC_INV_STATUS <>  P_ELECT_INV_STATUS THEN
328                     RAISE inv_status_differs;
329                 END IF;
330             END LOOP;
331 
332 
333             -- Create an entry in JL_BR_EILOG table
334             INSERT INTO JL_BR_EILOG (
335                     OCCURRENCE_ID,
336                     OCCURRENCE_DATE,
337                     CUSTOMER_TRX_ID,
338                     ELECTRONIC_INV_STATUS,
339                     MESSAGE_TXT,
340                     LAST_UPDATE_DATE,
341                     LAST_UPDATED_BY,
342                     LAST_UPDATE_LOGIN,
343                     CREATION_DATE,
344                     CREATED_BY)
345             VALUES
346                     (JL_BR_EILOG_S.NEXTVAL,
347                     P_OCCURRENCE_DATE,
348                     P_CUSTOMER_TRX_ID,
349                     P_ELECT_INV_STATUS,
350                     P_MESSAGE_TEXT,
351                     SYSDATE,
352                     -1,
353                     -1,
354                     SYSDATE,
355                     -1);
356 
357             BEGIN
358                 IF FND_API.TO_BOOLEAN(P_COMMIT) THEN
359                     COMMIT;
360                 ELSE
361                     ROLLBACK;
362                 END IF;
363             EXCEPTION
364                 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
365                 RAISE invalid_commit_param;
366             END;
367 
368       ELSE   /* If Invalid Electronic Invoice Status is passed */
369           tok_arr(1) := '&'||'INV_STATUS';
370           val_for_token(1) := P_ELECT_INV_STATUS;
371           RAISE invalid_ei_status;
372       END IF;
373   ELSE     /* If Invalid customer Trx ID is passed */
374          tok_arr(1) := '&'||'TRX_ID';
375          val_for_token(1) := P_CUSTOMER_TRX_ID;
376          RAISE invalid_cust_trx_id;
377   END IF;
378 
379 
380 EXCEPTION
381 
382     WHEN invalid_apiversion  THEN
383       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
384       X_MSG_DATA := FND_MESSAGE.GET_STRING('FND','FND_AS_INVALID_VER_NUM',NULL);
385       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
386 
387     WHEN incompatible_apiversion  THEN
388       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
389       X_MSG_DATA := FND_MESSAGE.GET_STRING('FND','FND_AS_INCOMPATIBLE_API_CALL',NULL);
390       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
391 
392     WHEN invalid_cust_trx_id THEN
393       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
394       X_MSG_DATA := FND_MESSAGE.GET_STRING('JL','JL_BR_INVALID_CUST_TRX_ID',NULL);
395       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
396 
397     WHEN invalid_ei_status THEN
398       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
399       X_MSG_DATA := FND_MESSAGE.GET_STRING('JL','JL_BR_INVALID_EI_STATUS',NULL);
400       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
401 
402     WHEN inv_status_differs THEN
403       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
404       X_MSG_DATA := FND_MESSAGE.GET_STRING('JL','JL_BR_INV_STATUS_DIFFERS',NULL);
405 
406     WHEN invalid_commit_param THEN
407       ROLLBACK;
408       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
409       X_MSG_DATA := FND_MESSAGE.GET_STRING('JL','JL_BR_API_COMMIT',NULL);
410 
411     WHEN OTHERS THEN
412       ROLLBACK;
413       tok_arr(0) := 'ERRMSG';
414       val_for_token(0) := SQLERRM;
415       X_RETURN_STATUS   :=  FND_API.G_RET_STS_UNEXP_ERROR;
416       X_MSG_DATA :=  FND_MESSAGE.GET_STRING('JL','JL_BR_API_ERROR',NULL);
417       X_MSG_DATA :=  REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
418 
419 END INSERT_LOG;
420 
421 
422 -- GET_IBGE_CODES Procedure - To retrieve IBGE code for a given Location
423 
424 PROCEDURE GET_IBGE_CODES (
425   P_API_VERSION	              IN	    NUMBER    DEFAULT 1.0,
426   P_LOCATION_ID               IN	    NUMBER      ,
427   X_STATE_CODE                OUT   NOCOPY  VARCHAR2,
428   X_CITY_CODE                 OUT   NOCOPY  VARCHAR2,
429   X_CENTRAL_BANK_CODE         OUT   NOCOPY  VARCHAR2,
430   X_RETURN_STATUS             OUT   NOCOPY  VARCHAR2,
431   X_MSG_DATA                  OUT   NOCOPY  VARCHAR2)
432 
433   IS
434 
435   -- Declaration part
436 
437 	  CURSOR get_state_code IS
438 		SELECT
439 		      identifier_value state
440 		FROM
441 		      hz_geography_identifiers geo_ident,
442 		      hz_geo_name_references geo_ref,
443 		      hz_locations loc
444 		WHERE
445 		      loc.location_id = P_LOCATION_ID
446 			  and loc.location_id = geo_ref.location_id
447 			  and geo_ref.geography_type = 'STATE'
448 			  and geo_ident.identifier_subtype = 'IBGE'
449 			  and geo_ident.geography_id = geo_ref.geography_id
450 			  and geo_ident.geography_type = 'STATE';
451 
452 
453 	CURSOR get_city_code IS
454 		SELECT
455 			  identifier_value city
456 		FROM
457 			  hz_geography_identifiers geo_ident,
458 			  hz_geo_name_references geo_ref,
459 			  hz_locations loc
460 		WHERE
461 			  loc.location_id = P_LOCATION_ID
462 			  and loc.location_id = geo_ref.location_id
463 			  and geo_ref.geography_type = 'CITY'
464 			  and geo_ident.identifier_subtype = 'IBGE'
465 			  and geo_ident.geography_id = geo_ref.geography_id
466 			  and geo_ident.geography_type = 'CITY';
467 
468 	CURSOR get_bank_code IS
469 		  SELECT meaning
470 		  FROM FND_LOOKUPS
471 		  WHERE lookup_type = 'JLBR_CBANK_COUNTRY_CODES'
472 						 and lookup_code = (SELECT country
473 						 FROM hz_locations
474 						 WHERE location_id = P_LOCATION_ID);
475 
476     CURSOR c_valid_location IS
477 		  SELECT
478 				'Yes' as isexist
479 		  FROM 	HZ_LOCATIONS
480 		  WHERE
481 				location_id = P_LOCATION_ID;
482 
483 
484   l_api_name          VARCHAR2(30)  := 'GET_IBGE_CODES';
485   l_api_version       NUMBER        := 1.0;
486   isExist             VARCHAR2(5)   := 'No';
487   invalid_loc_id      EXCEPTION;
488   incompatible_apiversion     EXCEPTION;
489   invalid_apiversion          EXCEPTION;
490   l_state_col varchar2(30);
491   l_city_col varchar2(30);
492 
493   tok_arr  token_array;
494   val_for_token  value_for_token;
495 
496   BEGIN
497 
498   X_RETURN_STATUS   :=  FND_API.G_RET_STS_SUCCESS;
499 
500     -- Standard call to check for call compatibility
501 
502     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, P_API_VERSION, l_api_name, G_PKG_NAME) THEN
503                  tok_arr(1) := '&'||'CURR_VER_NUM';
504                  tok_arr(2) := '&'||'API_NAME';
505                  tok_arr(3) := '&'||'PKG_NAME';
506                  tok_arr(4) := '&'||'CALLER_VER_NUM';
507                  val_for_token(1) := l_api_version;
508                  val_for_token(2) := l_api_name;
509                  val_for_token(3) := G_PKG_NAME;
510                  val_for_token(4) := P_API_VERSION;
511           IF TRUNC(l_api_version) > TRUNC(P_API_VERSION) THEN
512                  RAISE incompatible_apiversion;
513           ELSE
514                  RAISE invalid_apiversion;
515           END IF;
516     END IF;
517 
518 
519     FOR location_rec IN c_valid_location LOOP
520         isExist := location_rec.isExist;
521     END LOOP;
522 
523     /* If Valid Location ID is passed */
524     IF isExist = 'Yes' THEN
525 
526         -- get state code
527 	    FOR c_state_code_rec IN get_state_code LOOP
528 	        X_STATE_CODE := c_state_code_rec.state;
529 	    END LOOP;
530 
531         -- get city code
532 
533 	    FOR c_city_code_rec IN get_city_code LOOP
534 		    X_CITY_CODE := c_city_code_rec.city;
535 	    END LOOP;
536 
537 	    -- get bank code
538 	    FOR c_bank_code_rec IN get_bank_code LOOP
539 		    X_CENTRAL_BANK_CODE := c_bank_code_rec.meaning;
540 	    END LOOP;
541 
542     ELSE
543       tok_arr(1) := '&'||'LOC_ID';
544       val_for_token(1) := P_LOCATION_ID;
545       RAISE invalid_loc_id;
546     END IF;
547 
548 EXCEPTION
549 
550     WHEN invalid_apiversion  THEN
551       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
552       X_MSG_DATA := FND_MESSAGE.GET_STRING('FND','FND_AS_INVALID_VER_NUM',NULL);
553       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
554 
555     WHEN incompatible_apiversion  THEN
556       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
557       X_MSG_DATA := FND_MESSAGE.GET_STRING('FND','FND_AS_INCOMPATIBLE_API_CALL',NULL);
558       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
559 
560     WHEN invalid_loc_id THEN
561       X_RETURN_STATUS   :=  FND_API.G_RET_STS_ERROR;
562       X_MSG_DATA := FND_MESSAGE.GET_STRING('JL','JL_BR_INVALID_LOC_ID',NULL);
563       X_MSG_DATA := REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
564 
565     WHEN OTHERS THEN
566       ROLLBACK;
567       tok_arr(1) := 'ERRMSG';
568       val_for_token(1) := SQLERRM;
569       X_RETURN_STATUS   :=  FND_API.G_RET_STS_UNEXP_ERROR;
570       X_MSG_DATA :=  FND_MESSAGE.GET_STRING('JL','JL_BR_API_ERROR',NULL);
571       X_MSG_DATA :=  REPLACE_TOKEN(X_MSG_DATA,tok_arr,val_for_token);
572 
573 END GET_IBGE_CODES;
574 
575 END JL_BR_SPED_PUB;