DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_GNR_MAP10000

Source


1 PACKAGE BODY HZ_GNR_MAP10000 AS
2 
3 /*=======================================================================+
4  |  Copyright (c) 2002 Oracle Corporation Redwood Shores, California, USA|
5  |                          All rights reserved.                         |
6  +=======================================================================+
7  | NAME HZ_GNR_MAP10000
8  |
9  | DESCRIPTION
10  |   This package body is generated by TCA for geoName referencing. 
11  |
12  | HISTORY
13  |  11/06/2008 03:21:24      Generated.
14  |
15  *=======================================================================*/
16  
17   --------------------------------------
18    -- declaration of private global varibles
19    --------------------------------------
20  
21    g_debug_count        NUMBER := 0;
22    g_country_geo_id     NUMBER;
23    G_MAP_REC            HZ_GNR_UTIL_PKG.MAP_REC_TYPE;
24    G_MAP_DTLS_TBL       HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
25    G_USAGE_TBL          HZ_GNR_UTIL_PKG.USAGE_TBL_TYPE;
26    G_USAGE_DTLS_TBL     HZ_GNR_UTIL_PKG.USAGE_DTLS_TBL_TYPE;
27    G_MDU_TBL10000       HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
28    G_MDU_TBL10006       HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
29  
30    --------------------------------------
31    -- declaration of private procedures and functions
32    --------------------------------------
33  
34    --------------------------------------
35    -- private procedures and functions
36    --------------------------------------
37  
38   FUNCTION get_usage_API(
39     P_USAGE_CODE               VARCHAR2) RETURN VARCHAR2 IS
40   i number;
41   l_API_Name varchar2(30);
42  
43    BEGIN
44      i := 0;
45      IF G_USAGE_TBL.COUNT > 0 THEN
46        i := G_USAGE_TBL.FIRST;
47        LOOP
48          IF G_USAGE_TBL(i).USAGE_CODE = P_USAGE_CODE THEN
49            IF G_USAGE_TBL(i).USAGE_CODE = 'GEOGRAPHY' THEN
50              l_API_Name := 'validateGeo';
51            ELSIF G_USAGE_TBL(i).USAGE_CODE = 'TAX' THEN
52              l_API_Name := 'validateTax';
53            ELSE
54              l_API_Name := 'validate'||G_USAGE_TBL(i).USAGE_ID;
55            END IF;
56          END IF;
57          EXIT WHEN i = G_USAGE_TBL.LAST;
58          i := G_USAGE_TBL.NEXT(i);
59        END LOOP;
60      END IF;
61  
62      RETURN l_API_Name;
63  
64   END get_usage_API;
65  
66  
67   PROCEDURE validateForMap(
68     p_loc_components_rec        IN HZ_GNR_UTIL_PKG.LOC_COMPONENTS_REC_TYPE,
69     x_map_dtls_tbl              IN OUT NOCOPY HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE,
70     X_CAUSE                     OUT NOCOPY VARCHAR2,
71     X_STATUS                    OUT NOCOPY VARCHAR2) IS
72  
73  
74     TYPE getGeo IS REF CURSOR;
75     c_getGeo                getGeo;
76     c_getGeo1               getGeo;
77  
78     l_multiple_parent_flag  VARCHAR2(1);
79     l_sql                   VARCHAR2(9000);
80     l_status                VARCHAR2(1);
81     l_geography_type        VARCHAR2(30);
82     l_geography_id          NUMBER;
83     L_MAP_DTLS_TBL          HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
84  
85     l_module_prefix CONSTANT VARCHAR2(30) := 'HZ:ARHGNRGB:HZ_GNR_MAP10000';
86     l_module        CONSTANT VARCHAR2(30) := 'ADDRESS_VALIDATION';
87     l_debug_prefix           VARCHAR2(30);
88  
89     l_value1              VARCHAR2(360);
90     l_type1               VARCHAR2(30);
91     l_value2              VARCHAR2(360);
92     l_type2               VARCHAR2(30);
93     l_value3              VARCHAR2(360);
94     l_type3               VARCHAR2(30);
95     l_value4              VARCHAR2(360);
96     l_type4               VARCHAR2(30);
97     l_value5              VARCHAR2(360);
98     l_type5               VARCHAR2(30);
99  
100   BEGIN 
101  
102     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
103       hz_utility_v2pub.debug 
104            (p_message      => 'Begin of Validate for Map',
105             p_prefix        => l_debug_prefix,
106             p_msg_level     => fnd_log.level_procedure,
107             p_module_prefix => l_module_prefix,
108             p_module        => l_module
109            );
110     END IF; 
111  
112     --hk_debugl('Validate for Map Start');
113     -- defaulting the sucess status
114     x_status := FND_API.g_ret_sts_success;
115  
116     L_MAP_DTLS_TBL       := X_MAP_DTLS_TBL;
117     --hk_debugl('The Map table passed in with loc comp values');
118     --hk_debugt(L_MAP_DTLS_TBL);
119  
120     IF L_MAP_DTLS_TBL.COUNT = 1 THEN
121       -- This means country is the only required mapped column for validation.
122       -- and country is already populated in the L_MAP_DTLS_TBL in the initialization section of this package.
123       x_status := FND_API.g_ret_sts_success;
124       RETURN;
125     END IF;
126  
127     IF HZ_GNR_UTIL_PKG.getLocCompCount(L_MAP_DTLS_TBL) = 0 THEN
128       --hk_debugl('HZ_GNR_UTIL_PKG.getLocCompCount = 0');
129  
130        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
131          hz_utility_v2pub.debug 
132               (p_message      => ' HZ_GNR_UTIL_PKG.getLocCompCount = 0 ',
133                p_prefix        => l_debug_prefix,
134                p_msg_level     => fnd_log.level_statement,
135                p_module_prefix => l_module_prefix,
136                p_module        => l_module
137               );
138        END IF; 
139  
140       --No other location component value other than country is passed. 
141       --Following call will try to derive missing lower level compoents  
142       IF HZ_GNR_UTIL_PKG.fix_child(L_MAP_DTLS_TBL) = FALSE THEN
143         x_cause  := 'MISSING_CHILD';
144  
145              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
146                hz_utility_v2pub.debug 
147                     (p_message      => ' x_cause : '||x_cause,
148                      p_prefix        => l_debug_prefix,
149                      p_msg_level     => fnd_log.level_statement,
150                      p_module_prefix => l_module_prefix,
151                      p_module        => l_module
152                     );
153              END IF; 
154  
155         x_status := FND_API.G_RET_STS_ERROR;
156         X_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
157         RETURN;
158       ELSE
159  
160              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
161                hz_utility_v2pub.debug 
162                     (p_message      => ' Derived the missing lower level compoents ',
163                      p_prefix        => l_debug_prefix,
164                      p_msg_level     => fnd_log.level_statement,
165                      p_module_prefix => l_module_prefix,
166                      p_module        => l_module
167                     );
168              END IF; 
169  
170         x_status := FND_API.G_RET_STS_SUCCESS;
171         X_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
172         RETURN;
173       END IF;
174     END IF;
175  
176     l_value2 := NVL(L_MAP_DTLS_TBL(2).LOC_COMPVAL,'X') ;
177     IF l_value2 = 'X' THEN
178       l_type2 := 'X';
179     ELSE
180       l_type2 := L_MAP_DTLS_TBL(2).GEOGRAPHY_TYPE;
181       -- store the geography_type of the lowest address component that has a value passed in
182       l_geography_type := l_type2;
183     END IF;
184  
185     l_value3 := NVL(L_MAP_DTLS_TBL(3).LOC_COMPVAL,'X') ;
186     IF l_value3 = 'X' THEN
187       l_type3 := 'X';
188     ELSE
189       l_type3 := L_MAP_DTLS_TBL(3).GEOGRAPHY_TYPE;
190       -- store the geography_type of the lowest address component that has a value passed in
191       l_geography_type := l_type3;
192     END IF;
193  
194     l_value4 := NVL(L_MAP_DTLS_TBL(4).LOC_COMPVAL,'X') ;
195     IF l_value4 = 'X' THEN
196       l_type4 := 'X';
197     ELSE
198       l_type4 := L_MAP_DTLS_TBL(4).GEOGRAPHY_TYPE;
199       -- store the geography_type of the lowest address component that has a value passed in
200       l_geography_type := l_type4;
201     END IF;
202  
203     l_value5 := NVL(L_MAP_DTLS_TBL(5).LOC_COMPVAL,'X') ;
204     IF l_value5 = 'X' THEN
205       l_type5 := 'X';
206     ELSE
207       l_type5 := L_MAP_DTLS_TBL(5).GEOGRAPHY_TYPE;
208       -- store the geography_type of the lowest address component that has a value passed in
209       l_geography_type := l_type5;
210     END IF;
211  
212  
213      l_sql := HZ_GNR_UTIL_PKG.getQuery(L_MAP_DTLS_TBL,L_MAP_DTLS_TBL,x_status);
214     --hk_debugl('The SQL query');
215     --hk_debugl(l_sql);
216  
217      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
218        hz_utility_v2pub.debug 
219             (p_message      => ' The SQL query : '||l_sql,
220              p_prefix        => l_debug_prefix,
221              p_msg_level     => fnd_log.level_statement,
222              p_module_prefix => l_module_prefix,
223              p_module        => l_module
224             );
225      END IF; 
226  
227      OPEN  c_getGeo FOR l_sql USING G_MAP_REC.COUNTRY_CODE,g_country_geo_id
228            ,l_type2,l_value2,l_type3,l_value3,l_type4,l_value4,l_type5,l_value5,l_geography_type;
229      --hk_debugl('Before the first fetch');
230  
231      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
232        hz_utility_v2pub.debug 
233             (p_message      => ' Before the first fetch',
234              p_prefix        => l_debug_prefix,
235              p_msg_level     => fnd_log.level_statement,
236              p_module_prefix => l_module_prefix,
237              p_module        => l_module
238             );
239      END IF; 
240  
241      --hk_debugt(L_MAP_DTLS_TBL);
242      FETCH c_getGeo INTO l_geography_id,l_multiple_parent_flag,L_MAP_DTLS_TBL(1).GEOGRAPHY_ID
243            ,L_MAP_DTLS_TBL(2).GEOGRAPHY_ID,L_MAP_DTLS_TBL(3).GEOGRAPHY_ID,L_MAP_DTLS_TBL(4).GEOGRAPHY_ID,L_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
244      IF c_getGeo%NOTFOUND THEN  
245  
246        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
247          hz_utility_v2pub.debug 
248               (p_message      => ' NOT FOUND of the first fetch',
249                p_prefix        => l_debug_prefix,
250                p_msg_level     => fnd_log.level_statement,
251                p_module_prefix => l_module_prefix,
252                p_module        => l_module
253               );
254        END IF; 
255  
256        --hk_debugl('NOT FOUND of the first fetch');
257        --hk_debugt(L_MAP_DTLS_TBL);
258        x_cause  := 'NO_MATCH';
259        HZ_GNR_UTIL_PKG.fix_no_match(L_MAP_DTLS_TBL,x_status);
260        --hk_debugl('Map_loc table after Fix');
261        --hk_debugt(L_MAP_DTLS_TBL);
262        x_status := FND_API.G_RET_STS_ERROR;
263      ELSE 
264        --Fetching once more to see where there are multiple records
265  
266        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
267          hz_utility_v2pub.debug 
268               (p_message      => ' Fetching once more to see where there are multiple records ',
269                p_prefix        => l_debug_prefix,
270                p_msg_level     => fnd_log.level_statement,
271                p_module_prefix => l_module_prefix,
272                p_module        => l_module
273               );
274        END IF; 
275  
276        FETCH c_getGeo INTO l_geography_id,l_multiple_parent_flag,L_MAP_DTLS_TBL(1).GEOGRAPHY_ID
277            ,L_MAP_DTLS_TBL(2).GEOGRAPHY_ID,L_MAP_DTLS_TBL(3).GEOGRAPHY_ID,L_MAP_DTLS_TBL(4).GEOGRAPHY_ID,L_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
278        IF c_getGeo%FOUND THEN -- not able to identify a unique record
279  
280          -- Get the query again with identifier type as NAME if multiple match found
281          -- If it returns a record, we are able to derive a unique record for identifier type as NAME
282          l_sql := HZ_GNR_UTIL_PKG.getQueryforMultiMatch(L_MAP_DTLS_TBL,L_MAP_DTLS_TBL,x_status);
283          OPEN  c_getGeo1 FOR l_sql USING G_MAP_REC.COUNTRY_CODE,g_country_geo_id
284                ,l_type2,l_value2,l_type3,l_value3,l_type4,l_value4,l_type5,l_value5,l_geography_type;
285  
286          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
287            hz_utility_v2pub.debug 
288                 (p_message      => 'Before the fetch of the query with identifier type as NAME after multiple match found',
289                  p_prefix        => l_debug_prefix,
290                  p_msg_level     => fnd_log.level_statement,
291                  p_module_prefix => l_module_prefix,
292                  p_module        => l_module
293                 );
294          END IF; 
295  
296          --hk_debugt(L_MAP_DTLS_TBL);
297          FETCH c_getGeo1 INTO l_geography_id,l_multiple_parent_flag,L_MAP_DTLS_TBL(1).GEOGRAPHY_ID
298                ,L_MAP_DTLS_TBL(2).GEOGRAPHY_ID,L_MAP_DTLS_TBL(3).GEOGRAPHY_ID,L_MAP_DTLS_TBL(4).GEOGRAPHY_ID,L_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
299          IF c_getGeo1%FOUND THEN  
300            -- check if there is another row with same STANDARD_NAME, in that case it is error case 
301            FETCH c_getGeo1 INTO l_geography_id,l_multiple_parent_flag,L_MAP_DTLS_TBL(1).GEOGRAPHY_ID 
302                 ,L_MAP_DTLS_TBL(2).GEOGRAPHY_ID,L_MAP_DTLS_TBL(3).GEOGRAPHY_ID,L_MAP_DTLS_TBL(4).GEOGRAPHY_ID,L_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
303            IF c_getGeo1%NOTFOUND THEN  -- success (only 1 rec with same primary name exists)
304  
305              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
306                 hz_utility_v2pub.debug 
307                     (p_message       => 'MAP-Able to found a unique record or a record with multiple parent flag = Y with identifier type as NAME',
308                      p_prefix        => l_debug_prefix,
309                      p_msg_level     => fnd_log.level_statement,
310                      p_module_prefix => l_module_prefix,
311                      p_module        => l_module
312                     );
313              END IF; 
314  
315            ELSE -- Not able to find a unique record with identifier type as NAME 
316  
317                IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
318 	                 hz_utility_v2pub.debug 
319 	                      (p_message      => 'MAP-Not able to find a record with with identifier type as NAME. '|| 
320 	                                         ' More than 1 rec exists with same STANDARD NAME', 
321 	                       p_prefix        => l_debug_prefix, 
322 	                       p_msg_level     => fnd_log.level_statement, 
323 	                       p_module_prefix => l_module_prefix, 
324 	                       p_module        => l_module 
325 	                      ); 
326 	               END IF; 
327  
328 	               x_cause  := 'MULTIPLE_MATCH'; 
329 	               x_status := FND_API.G_RET_STS_ERROR; 
330 	               RETURN; 
331 	          END IF; 
332  
333          ELSE -- Not able to found a unique record with identifier type as NAME
334            x_cause  := 'MULTIPLE_MATCH';
335  
336            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
337              hz_utility_v2pub.debug 
338                   (p_message      => ' Not able to find a record with with identifier type as NAME. x_cause : '||x_cause,
339                    p_prefix        => l_debug_prefix,
340                    p_msg_level     => fnd_log.level_statement,
341                    p_module_prefix => l_module_prefix,
342                    p_module        => l_module
343                   );
344            END IF; 
345  
346            x_status := FND_API.G_RET_STS_ERROR;
347            RETURN;
348          END IF; 
349        CLOSE c_getGeo1;
350  
351        ELSE -- a unique record or a record with multiple parent flag = Y is found
352  
353          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
354            hz_utility_v2pub.debug 
355                 (p_message       => ' A unique record or a record with multiple parent flag = Y is found ',
356                  p_prefix        => l_debug_prefix,
357                  p_msg_level     => fnd_log.level_statement,
358                  p_module_prefix => l_module_prefix,
359                  p_module        => l_module
360                 );
361          END IF; 
362  
363        END IF;
364  
365        IF l_multiple_parent_flag = 'Y' THEN
369  
366          IF HZ_GNR_UTIL_PKG.fix_multiparent(l_geography_id,L_MAP_DTLS_TBL) = TRUE THEN
367            NULL; -- a unique record is found
368          ELSE --  Multiple parent case not able to find a unique record 
370            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
371              hz_utility_v2pub.debug 
372                   (p_message      => ' Multiple parent case not able to find a unique record',
373                    p_prefix        => l_debug_prefix,
374                    p_msg_level     => fnd_log.level_statement,
375                    p_module_prefix => l_module_prefix,
376                    p_module        => l_module
377                   );
378            END IF; 
379  
380            x_cause  := 'MULTIPLE_PARENT';
381            X_MAP_DTLS_TBL := L_MAP_DTLS_TBL;
382            x_status := FND_API.G_RET_STS_ERROR;
383  
384            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
385              hz_utility_v2pub.debug 
386                   (p_message      => ' x_cause : '||x_cause,
387                    p_prefix        => l_debug_prefix,
388                    p_msg_level     => fnd_log.level_statement,
389                    p_module_prefix => l_module_prefix,
390                    p_module        => l_module
391                   );
392            END IF; 
393  
394            RETURN;
395          END IF;
396  
397        ELSE -- a unique record is found
398  
399            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
400              hz_utility_v2pub.debug 
401                   (p_message      => 'A unique record is found ',
402                    p_prefix        => l_debug_prefix,
403                    p_msg_level     => fnd_log.level_statement,
404                    p_module_prefix => l_module_prefix,
405                    p_module        => l_module
406                   );
407            END IF; 
408  
409        END IF;
410  
411      END IF;
412  
413      CLOSE c_getGeo;
414  
415  
416      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
417        hz_utility_v2pub.debug 
418             (p_message      => ' Calling fix_child. This call will try to derive missing lower level compoents.',
419              p_prefix        => l_debug_prefix,
420              p_msg_level     => fnd_log.level_statement,
421              p_module_prefix => l_module_prefix,
422              p_module        => l_module
423             );
424      END IF; 
425  
426      --Following call will try to derive missing lower level compoents  
427      IF HZ_GNR_UTIL_PKG.fix_child(L_MAP_DTLS_TBL) = FALSE THEN
428        x_cause  := 'MISSING_CHILD';
429  
430              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
431                hz_utility_v2pub.debug 
432                     (p_message      => ' x_cause : '||x_cause,
433                      p_prefix        => l_debug_prefix,
434                      p_msg_level     => fnd_log.level_statement,
435                      p_module_prefix => l_module_prefix,
436                      p_module        => l_module
437                     );
438              END IF; 
439  
440        x_status             := FND_API.G_RET_STS_ERROR;
441        X_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
442        RETURN;
443      END IF;
444  
445      X_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
446  
447     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
448       hz_utility_v2pub.debug 
449            (p_message      => 'End of Validate for Map',
450             p_prefix        => l_debug_prefix,
451             p_msg_level     => fnd_log.level_procedure,
452             p_module_prefix => l_module_prefix,
453             p_module        => l_module
454            );
455     END IF; 
456  
457  
458   END validateForMap;
459  
460   PROCEDURE validateGeo(
461     P_LOCATION_ID               IN NUMBER,
462     P_COUNTRY                   IN VARCHAR2,
463     P_STATE                     IN VARCHAR2,
464     P_PROVINCE                  IN VARCHAR2,
465     P_COUNTY                    IN VARCHAR2,
466     P_CITY                      IN VARCHAR2,
467     P_POSTAL_CODE               IN VARCHAR2,
468     P_POSTAL_PLUS4_CODE         IN VARCHAR2,
469     P_ATTRIBUTE1                IN VARCHAR2,
470     P_ATTRIBUTE2                IN VARCHAR2,
471     P_ATTRIBUTE3                IN VARCHAR2,
472     P_ATTRIBUTE4                IN VARCHAR2,
473     P_ATTRIBUTE5                IN VARCHAR2,
474     P_ATTRIBUTE6                IN VARCHAR2,
475     P_ATTRIBUTE7                IN VARCHAR2,
476     P_ATTRIBUTE8                IN VARCHAR2,
477     P_ATTRIBUTE9                IN VARCHAR2,
478     P_ATTRIBUTE10               IN VARCHAR2,
479     P_LOCK_FLAG                 IN VARCHAR2,
480     X_CALL_MAP                  IN OUT NOCOPY VARCHAR2,
481     P_CALLED_FROM               IN VARCHAR2,
482     P_ADDR_VAL_LEVEL            IN VARCHAR2,
483     X_ADDR_WARN_MSG             OUT NOCOPY VARCHAR2,
484     X_ADDR_VAL_STATUS           OUT NOCOPY VARCHAR2,
485     X_STATUS                    OUT NOCOPY VARCHAR2) IS
486  
487     l_loc_components_rec HZ_GNR_UTIL_PKG.LOC_COMPONENTS_REC_TYPE;
488  
489     TYPE getGeo IS REF CURSOR;
490     c_getGeo                getGeo;
491     c_getGeo1               getGeo;
492  
493     l_multiple_parent_flag  VARCHAR2(1);
497     l_usage_id              NUMBER;
494     l_sql                   VARCHAR2(9000);
495     l_cause                 VARCHAR2(30);
496     l_usage_code            VARCHAR2(30);
498     l_status                VARCHAR2(1);
499     l_get_addr_val          VARCHAR2(1);
500     l_geography_type        VARCHAR2(30);
501     l_geography_id          NUMBER;
502     L_MDU_TBL               HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
503     LL_MAP_DTLS_TBL         HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
504     L_MAP_DTLS_TBL          HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
505  
506     l_module_prefix CONSTANT VARCHAR2(30) := 'HZ:ARHGNRGB:HZ_GNR_MAP10000';
507     l_module        CONSTANT VARCHAR2(30) := 'ADDRESS_VALIDATION';
508     l_debug_prefix           VARCHAR2(30) := p_location_id;
509  
510     l_value1              VARCHAR2(360);
511     l_type1               VARCHAR2(30);
512     l_value2              VARCHAR2(360);
513     l_type2               VARCHAR2(30);
514     l_value3              VARCHAR2(360);
515     l_type3               VARCHAR2(30);
516     l_value4              VARCHAR2(360);
517     l_type4               VARCHAR2(30);
518  
519   BEGIN 
520  
521     -- defaulting the sucess status
522     x_status := FND_API.g_ret_sts_success;
523    --hk_debugl('Processing Location record with location_id :- '||nvl(to_char(p_location_id),'NULL_LOCATION_ID'));
524     l_loc_components_rec.COUNTRY                 := P_COUNTRY;
525     l_loc_components_rec.STATE                   := P_STATE;
526     l_loc_components_rec.PROVINCE                := P_PROVINCE;
527     l_loc_components_rec.COUNTY                  := P_COUNTY;
528     l_loc_components_rec.CITY                    := P_CITY;
529     l_loc_components_rec.POSTAL_CODE             := P_POSTAL_CODE;
530     l_loc_components_rec.POSTAL_PLUS4_CODE       := P_POSTAL_PLUS4_CODE;
531     l_loc_components_rec.ATTRIBUTE1              := P_ATTRIBUTE1;
532     l_loc_components_rec.ATTRIBUTE2              := P_ATTRIBUTE2;
533     l_loc_components_rec.ATTRIBUTE3              := P_ATTRIBUTE3;
534     l_loc_components_rec.ATTRIBUTE4              := P_ATTRIBUTE4;
535     l_loc_components_rec.ATTRIBUTE5              := P_ATTRIBUTE5;
536     l_loc_components_rec.ATTRIBUTE6              := P_ATTRIBUTE6;
537     l_loc_components_rec.ATTRIBUTE7              := P_ATTRIBUTE7;
538     l_loc_components_rec.ATTRIBUTE8              := P_ATTRIBUTE8;
539     l_loc_components_rec.ATTRIBUTE9              := P_ATTRIBUTE9;
540     l_loc_components_rec.ATTRIBUTE10             := P_ATTRIBUTE10;
541  
542     L_USAGE_ID           := 10000;
543     L_USAGE_CODE         := 'GEOGRAPHY';
544     L_MDU_TBL            := G_MDU_TBL10000;
545     L_MAP_DTLS_TBL       := G_MAP_DTLS_TBL;
546     l_get_addr_val       := 'N';
547  
548     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
549       hz_utility_v2pub.debug 
550            (p_message       => 'Begin of validation for '||L_USAGE_CODE,
551             p_prefix        => l_debug_prefix,
552             p_msg_level     => fnd_log.level_procedure,
553             p_module_prefix => l_module_prefix,
554             p_module        => l_module
555            );
556     END IF; 
557  
558     IF P_LOCATION_ID IS NOT NULL AND P_CALLED_FROM <> 'GNR' THEN
559       --hk_debugl('Before check_GNR_For_Usage');
560       IF HZ_GNR_UTIL_PKG.check_GNR_For_Usage(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
561                                              L_USAGE_CODE,L_MDU_TBL,x_status) = TRUE THEN
562         --hk_debugl('After check_GNR_For_Usage  with status :- '||x_status);
563  
564     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
565       hz_utility_v2pub.debug 
566            (p_message      => 'There is already a procedded success record in GNR log table.',
567             p_prefix        => l_debug_prefix,
568             p_msg_level     => fnd_log.level_statement,
569             p_module_prefix => l_module_prefix,
570             p_module        => l_module
571            );
572     END IF; 
573  
574         x_status := FND_API.g_ret_sts_success;
575         X_ADDR_VAL_STATUS := x_status;
576         RETURN;
577       END IF;
578     END IF;
579  
580     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
581       hz_utility_v2pub.debug 
582            (p_message      => 'Not able to find an existing success record in GNR log table.',
583             p_prefix        => l_debug_prefix,
584             p_msg_level     => fnd_log.level_statement,
585             p_module_prefix => l_module_prefix,
586             p_module        => l_module
587            );
588     END IF; 
589  
590     -- After the following call L_MAP_DTLS_TBL will have the components value populated.
591     HZ_GNR_UTIL_PKG.getLocCompValues(G_MAP_REC.LOC_TBL_NAME,L_LOC_COMPONENTS_REC,L_MAP_DTLS_TBL,x_status);
592  
593     -- Below code will overwrite the LOC_COMPVAL for COUNTRY to COUNTRY_CODE
594     -- This change is to update COUNTRY column in locations table with COUNTRY_CODE 
595     -- even if the table has Country name in this column and the validation is success 
596     L_MAP_DTLS_TBL(1).LOC_COMPVAL := G_MAP_REC.COUNTRY_CODE;
597  
598     -- After the following call L_MDU_TBL will have the components value populated.
599     HZ_GNR_UTIL_PKG.getLocCompValues(G_MAP_REC.LOC_TBL_NAME,L_LOC_COMPONENTS_REC,L_MDU_TBL,x_status);
600  
601     --hk_debugl(' value of X_CALL_MAP : '||X_CALL_MAP);
602     IF X_CALL_MAP = 'Y' THEN
603       LL_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
604  
608             p_prefix        => l_debug_prefix,
605       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
606         hz_utility_v2pub.debug 
607            (p_message      => 'Before calling validate for Map ',
609             p_msg_level     => fnd_log.level_statement,
610             p_module_prefix => l_module_prefix,
611             p_module        => l_module
612            );
613       END IF; 
614  
615       validateForMap(L_LOC_COMPONENTS_REC,LL_MAP_DTLS_TBL,l_cause,x_status);
616       --hk_debugl('Back from Validate for Map  with status :- '||x_status||'.. and case :'||l_cause);
617  
618       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
619         hz_utility_v2pub.debug 
620            (p_message      => 'Back from Validate for Map with status : .'||x_status||'.. and case :'||l_cause,
621             p_prefix        => l_debug_prefix,
622             p_msg_level     => fnd_log.level_statement,
623             p_module_prefix => l_module_prefix,
624             p_module        => l_module
625            );
626       END IF; 
627  
628       -- This usage level check is required upfront because usage level validation will ignore 
629       -- some of the passed in parameters for the complete mapping and may result in wrong status 
630       IF (x_status = FND_API.g_ret_sts_error) THEN 
631  
632         -- hk_debugl('Trying to check if usage level validation is success even with map validation as error..'); 
633         -- hk_debugl('TABLE that is returned by Validate For Map'); 
634         -- hk_debugt(LL_MAP_DTLS_TBL); 
635         -- hk_debugl('Usage Map Table With loc comp values'); 
636         -- hk_debugt(L_MDU_TBL); 
637  
638         IF HZ_GNR_UTIL_PKG.get_usage_val_status(LL_MAP_DTLS_TBL,L_MDU_TBL) = FND_API.G_RET_STS_SUCCESS THEN 
639           -- hk_debugl('COMPLETE mapping is error but is sufficient for passed usage. So setting X_STATUS to success'); 
640           x_status := FND_API.g_ret_sts_success; 
641  
642           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
643              hz_utility_v2pub.debug 
644                  (p_message      => 'COMPLETE mapping is error but is sufficient for passed usage. So setting X_STATUS to success',
645                   p_prefix        => l_debug_prefix,
646                   p_msg_level     => fnd_log.level_statement,
647                   p_module_prefix => l_module_prefix,
648                   p_module        => l_module
649                  );
650           END IF; 
651  
652         END IF; 
653       END IF; 
654       -------End of status check for usage level ----------+ 
655  
656       IF x_status = FND_API.g_ret_sts_success THEN
657         --hk_debugt(LL_MAP_DTLS_TBL); ----- Code to display the output.
658         -- Set the address validation status to success since x_statusis success 
659         X_ADDR_VAL_STATUS := x_status;
660         IF P_LOCATION_ID IS NOT NULL THEN
661  
662           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
663             hz_utility_v2pub.debug 
664                  (p_message      => ' Location id is not null. Call fill_values, create_gnr and Return back.',
665                   p_prefix        => l_debug_prefix,
666                   p_msg_level     => fnd_log.level_statement,
667                   p_module_prefix => l_module_prefix,
668                   p_module        => l_module
669                  );
670           END IF; 
671  
672           HZ_GNR_UTIL_PKG.fill_values(LL_MAP_DTLS_TBL);
673           HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
674                                      L_USAGE_CODE,'S',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
675         END IF;
676  
677         X_CALL_MAP := 'N';
678         RETURN;
679  
680       ELSE 
681  
682         IF P_LOCATION_ID IS NOT NULL THEN
683           --hk_debugl('Table that is returned by Validate For Map');
684           --hk_debugt(LL_MAP_DTLS_TBL);
685           --hk_debugl('Usage Map Table With loc comp values');
686           --hk_debugt(L_MDU_TBL);
687           IF HZ_GNR_UTIL_PKG.do_usage_val(l_cause,L_MAP_DTLS_TBL,L_MDU_TBL,LL_MAP_DTLS_TBL,l_status) = FALSE THEN
688  
689             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
690               hz_utility_v2pub.debug 
691                  (p_message      => ' No usage level validation is required. Call create_gnr with the map status',
692                   p_prefix        => l_debug_prefix,
693                   p_msg_level     => fnd_log.level_statement,
694                   p_module_prefix => l_module_prefix,
695                   p_module        => l_module
696                  );
697             END IF; 
698  
699             -- This means no usage level validation is required
700             IF HZ_GNR_UTIL_PKG.get_usage_val_status(LL_MAP_DTLS_TBL,L_MDU_TBL) = FND_API.G_RET_STS_ERROR THEN
701  
702               HZ_GNR_UTIL_PKG.fill_values(LL_MAP_DTLS_TBL);
703               -- This below call is to derive the address validation status and set the message 
704               X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(LL_MAP_DTLS_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,'E',x_status);
705               --hk_debugl('Calling create_gnr With Map_status "E"');
706  
707               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
708                 hz_utility_v2pub.debug 
709                      (p_message      => ' Calling create_gnr with map status E.',
710                       p_prefix        => l_debug_prefix,
714                      );
711                       p_msg_level     => fnd_log.level_statement,
712                       p_module_prefix => l_module_prefix,
713                       p_module        => l_module
715               END IF; 
716  
717               HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
718                                        L_USAGE_CODE,'E',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
719               --hk_debugl('Status after create_gnr : '||l_status);
720             ELSE 
721  
722               HZ_GNR_UTIL_PKG.fill_values(LL_MAP_DTLS_TBL);
723               -- This below call is to derive the address validation status and set the message 
724               X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(LL_MAP_DTLS_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,'S',x_status);
725               --hk_debugl('Calling create_gnr With Map_status "S"');
726  
727               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
728                 hz_utility_v2pub.debug 
729                      (p_message      => ' Calling create_gnr with map status S.',
730                       p_prefix        => l_debug_prefix,
731                       p_msg_level     => fnd_log.level_statement,
732                       p_module_prefix => l_module_prefix,
733                       p_module        => l_module
734                      );
735               END IF; 
736  
737               HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
738                                        L_USAGE_CODE,'S',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
739               --hk_debugl('Status after create_gnr : '||l_status);
740               x_status := FND_API.g_ret_sts_success;
741             END IF;
742  
743             X_CALL_MAP := 'N';
744             RETURN;
745  
746           ELSE 
747             NULL; -- do_usage_val has concluded that usage level validation has to go through.
748           END IF;
749         END IF;
750       END IF;
751  
752       l_get_addr_val := 'Y';
753       X_CALL_MAP := 'N';
754  
755     END IF;
756  
757     IF L_MDU_TBL.COUNT = 1 THEN
758  
759       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
760         hz_utility_v2pub.debug 
761              (p_message      => ' This means country is the only required mapped column for validation. Call create_gnr with map status S',
762               p_prefix        => l_debug_prefix,
763               p_msg_level     => fnd_log.level_statement,
764               p_module_prefix => l_module_prefix,
765               p_module        => l_module
766              );
767       END IF; 
768  
769       -- This means country is the only required mapped column for validation.
770       -- and country is already populated in the L_MDU_TBL in the initialization section of this package.
771       --hk_debugt(L_MDU_TBL); ----- Code to display the output.
772       --hk_debugl('Calling create_gnr With Map_status "S"');
773       -- This below call is to derive the address validation status and set the message 
774       X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(L_MDU_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,'S',x_status);
775  
776       IF P_LOCATION_ID IS NOT NULL THEN
777           HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
778                                      L_USAGE_CODE,'S',L_LOC_COMPONENTS_REC,p_lock_flag,L_MDU_TBL,l_status);
779       END IF;
780  
781       x_status := FND_API.g_ret_sts_success;
782       RETURN;
783     END IF;
784     --hk_debugl('L_MDU_TBL has count count more than 1');
785  
786     l_value2 := NVL(L_MDU_TBL(2).LOC_COMPVAL,'X') ;
787     IF l_value2 = 'X' THEN
788       l_type2 := 'X';
789     ELSE
790       l_type2 := L_MDU_TBL(2).GEOGRAPHY_TYPE;
791       -- store the geography_type of the lowest address component that has a value passed in
792       l_geography_type := l_type2;
793     END IF;
794  
795     l_value3 := NVL(L_MDU_TBL(3).LOC_COMPVAL,'X') ;
796     IF l_value3 = 'X' THEN
797       l_type3 := 'X';
798     ELSE
799       l_type3 := L_MDU_TBL(3).GEOGRAPHY_TYPE;
800       -- store the geography_type of the lowest address component that has a value passed in
801       l_geography_type := l_type3;
802     END IF;
803  
804     l_value4 := NVL(L_MDU_TBL(4).LOC_COMPVAL,'X') ;
805     IF l_value4 = 'X' THEN
806       l_type4 := 'X';
807     ELSE
808       l_type4 := L_MDU_TBL(4).GEOGRAPHY_TYPE;
809       -- store the geography_type of the lowest address component that has a value passed in
810       l_geography_type := l_type4;
811     END IF;
812  
813  
814      LL_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
815      l_sql := HZ_GNR_UTIL_PKG.getQuery(L_MAP_DTLS_TBL,L_MDU_TBL,x_status);
816      --hk_debugl('The SQL query');
817      --hk_debugl(l_sql);
818  
819      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
820        hz_utility_v2pub.debug 
821             (p_message      => ' The SQL query : '||l_sql,
822              p_prefix        => l_debug_prefix,
823              p_msg_level     => fnd_log.level_statement,
824              p_module_prefix => l_module_prefix,
825              p_module        => l_module
826             );
827      END IF; 
828  
829      OPEN  c_getGeo FOR l_sql USING G_MAP_REC.COUNTRY_CODE,g_country_geo_id
833      IF c_getGeo%NOTFOUND THEN 
830            ,l_type2,l_value2,l_type3,l_value3,l_type4,l_value4,l_geography_type;
831      FETCH c_getGeo INTO l_geography_id,l_multiple_parent_flag,LL_MAP_DTLS_TBL(1).GEOGRAPHY_ID
832            ,LL_MAP_DTLS_TBL(2).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(3).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(4).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
834        --hk_debugl('No Match found for the usage level search');
835  
836        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
837          hz_utility_v2pub.debug 
838               (p_message      => ' No Match found for the usage level search ',
839                p_prefix        => l_debug_prefix,
840                p_msg_level     => fnd_log.level_statement,
841                p_module_prefix => l_module_prefix,
842                p_module        => l_module
843               );
844        END IF; 
845  
846        HZ_GNR_UTIL_PKG.fix_no_match(LL_MAP_DTLS_TBL,x_status);
847        x_status := FND_API.G_RET_STS_ERROR;
848      ELSE 
849        --Fetching once more to see where there are multiple records
850  
851        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
852          hz_utility_v2pub.debug 
853               (p_message      => ' Fetching once more to see where there are multiple records ',
854                p_prefix        => l_debug_prefix,
855                p_msg_level     => fnd_log.level_statement,
856                p_module_prefix => l_module_prefix,
857                p_module        => l_module
858               );
859        END IF; 
860  
861        FETCH c_getGeo INTO l_geography_id,l_multiple_parent_flag,LL_MAP_DTLS_TBL(1).GEOGRAPHY_ID
862            ,LL_MAP_DTLS_TBL(2).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(3).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(4).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
863        IF c_getGeo%FOUND THEN -- not able to identify a unique record
864  
865          -- Get the query again with identifier type as NAME if multiple match found
866          -- If it returns a record, we are able to derive a unique record for identifier type as NAME
867          l_sql := HZ_GNR_UTIL_PKG.getQueryforMultiMatch(L_MAP_DTLS_TBL,L_MDU_TBL,x_status);
868          OPEN  c_getGeo1 FOR l_sql USING G_MAP_REC.COUNTRY_CODE,g_country_geo_id
869                ,l_type2,l_value2,l_type3,l_value3,l_type4,l_value4,l_geography_type;
870  
871          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
872            hz_utility_v2pub.debug 
873                 (p_message      => 'Before the fetch of the query with identifier type as NAME after multiple match found',
874                  p_prefix        => l_debug_prefix,
875                  p_msg_level     => fnd_log.level_statement,
876                  p_module_prefix => l_module_prefix,
877                  p_module        => l_module
878                 );
879          END IF; 
880  
881      --hk_debugt(LL_MAP_DTLS_TBL);
882          FETCH c_getGeo1 INTO l_geography_id,l_multiple_parent_flag,LL_MAP_DTLS_TBL(1).GEOGRAPHY_ID
883                ,LL_MAP_DTLS_TBL(2).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(3).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(4).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
884          IF c_getGeo1%FOUND THEN  
885            -- check if there is another row with same STANDARD_NAME, in that case it is error case 
886            FETCH c_getGeo1 INTO l_geography_id,l_multiple_parent_flag,L_MAP_DTLS_TBL(1).GEOGRAPHY_ID 
887                 ,LL_MAP_DTLS_TBL(2).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(3).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(4).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
888            IF c_getGeo1%NOTFOUND THEN  -- success (only 1 rec with same primary name exists)
889  
890              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
891                 hz_utility_v2pub.debug 
892                     (p_message       => 'GEO-Able to find a unique record or a record with multiple parent flag = Y with identifier type as NAME',
893                      p_prefix        => l_debug_prefix,
894                      p_msg_level     => fnd_log.level_statement,
895                      p_module_prefix => l_module_prefix,
896                      p_module        => l_module
897                     );
898              END IF; 
899  
900            ELSE -- Not able to find a unique record with identifier type as NAME 
901  
902                IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
903 	                 hz_utility_v2pub.debug 
904 	                      (p_message      => 'GEO-Not able to find a record with with identifier type as NAME. '|| 
905 	                                         ' More than 1 rec exists with same STANDARD NAME', 
906 	                       p_prefix        => l_debug_prefix, 
907 	                       p_msg_level     => fnd_log.level_statement, 
908 	                       p_module_prefix => l_module_prefix, 
909 	                       p_module        => l_module 
910 	                      ); 
911 	               END IF; 
912  
913                LL_MAP_DTLS_TBL       := L_MAP_DTLS_TBL; 
914                HZ_GNR_UTIL_PKG.fix_no_match(LL_MAP_DTLS_TBL,x_status); 
915                x_status := FND_API.G_RET_STS_ERROR; 
916 	          END IF; 
917  
918          ELSE -- Not able to found a unique record with identifier type as NAME
919  
920            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
921              hz_utility_v2pub.debug 
922                   (p_message      => ' Not able to find a record with with identifier type as NAME. ',
923                    p_prefix        => l_debug_prefix,
924                    p_msg_level     => fnd_log.level_statement,
928            END IF; 
925                    p_module_prefix => l_module_prefix,
926                    p_module        => l_module
927                   );
929  
930            LL_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
931            x_status := FND_API.G_RET_STS_ERROR;
932          END IF; 
933          CLOSE c_getGeo1;
934  
935        ELSE -- a unique record or a record with multiple parent flag = Y is found
936  
937          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
938            hz_utility_v2pub.debug 
939                 (p_message      => ' A unique record or a record with multiple parent flag = Y is found ',
940                  p_prefix        => l_debug_prefix,
941                  p_msg_level     => fnd_log.level_statement,
942                  p_module_prefix => l_module_prefix,
943                  p_module        => l_module
944                 );
945          END IF; 
946  
947        END IF;
948  
949        IF l_multiple_parent_flag = 'Y'  AND x_status <> FND_API.G_RET_STS_ERROR THEN
950          IF HZ_GNR_UTIL_PKG.fix_multiparent(l_geography_id,LL_MAP_DTLS_TBL) = TRUE THEN
951            NULL;
952          ELSE --  Multiple parent case not able to find a unique record 
953  
954            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
955              hz_utility_v2pub.debug 
956                   (p_message      => ' Multiple parent case not able to find a unique record',
957                    p_prefix        => l_debug_prefix,
958                    p_msg_level     => fnd_log.level_statement,
959                    p_module_prefix => l_module_prefix,
960                    p_module        => l_module
961                   );
962            END IF; 
963  
964            x_status := FND_API.G_RET_STS_ERROR;
965          END IF;
966  
967        ELSE -- a unique record is found
968  
969            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
970              hz_utility_v2pub.debug 
971                   (p_message      => ' A unique record is found ',
972                    p_prefix        => l_debug_prefix,
973                    p_msg_level     => fnd_log.level_statement,
974                    p_module_prefix => l_module_prefix,
975                    p_module        => l_module
976                   );
977            END IF; 
978  
979        END IF;
980      END IF;
981      CLOSE c_getGeo;
982  
983       --hk_debugl('Return STatus after first fetch : '||x_status);
984      --Following call will try to derive missing lower level compoents  
985  
986        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
987          hz_utility_v2pub.debug 
988               (p_message      => ' Return Status after first fetch : '||x_status,
989                p_prefix        => l_debug_prefix,
990                p_msg_level     => fnd_log.level_statement,
991                p_module_prefix => l_module_prefix,
992                p_module        => l_module
993               );
994        END IF; 
995  
996        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
997          hz_utility_v2pub.debug 
998               (p_message      => ' Calling fix_child. This call will try to derive missing lower level compoents.',
999                p_prefix        => l_debug_prefix,
1000                p_msg_level     => fnd_log.level_statement,
1001                p_module_prefix => l_module_prefix,
1002                p_module        => l_module
1003               );
1004        END IF; 
1005  
1006      IF HZ_GNR_UTIL_PKG.fix_child(LL_MAP_DTLS_TBL) = FALSE THEN
1007        x_status := HZ_GNR_UTIL_PKG.get_usage_val_status(LL_MAP_DTLS_TBL,L_MDU_TBL);
1008      END IF;
1009  
1010        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1011          hz_utility_v2pub.debug 
1012               (p_message      => ' Return status after fix_child '||x_status,
1013                p_prefix        => l_debug_prefix,
1014                p_msg_level     => fnd_log.level_statement,
1015                p_module_prefix => l_module_prefix,
1016                p_module        => l_module
1017               );
1018        END IF; 
1019  
1020       --hk_debugl('LL_MAP_DTLS_TBL before fill_values');
1021       --hk_debugt(LL_MAP_DTLS_TBL);
1022      HZ_GNR_UTIL_PKG.fill_values(LL_MAP_DTLS_TBL);
1023       --hk_debugl('LL_MAP_DTLS_TBL after fill_values');
1024       --hk_debugt(LL_MAP_DTLS_TBL);
1025  
1026     IF x_status = FND_API.g_ret_sts_success THEN
1027       -- We need to call the getAddrValStatus only once. All other cases we are looking into x_call_map 
1028       -- In some case the below code will execute with the x_call_map as N  
1029       IF l_get_addr_val = 'Y' THEN
1030          -- This below call is to derive the address validation status and set the message 
1031          X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(LL_MAP_DTLS_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,x_status,x_status);
1032       END IF;
1033  
1034       IF P_LOCATION_ID IS NOT NULL THEN
1035  
1036               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1037                 hz_utility_v2pub.debug 
1038                      (p_message      => ' Calling create_gnr with map status S.',
1039                       p_prefix        => l_debug_prefix,
1040                       p_msg_level     => fnd_log.level_statement,
1041                       p_module_prefix => l_module_prefix,
1042                       p_module        => l_module
1046         HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
1043                      );
1044               END IF; 
1045  
1047                                    L_USAGE_CODE,'S',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
1048       --hk_debugl('Prceossed GNR With Status : S and returned with Status : '||l_status);
1049       END IF;
1050     ELSE 
1051       -- We need to call the getAddrValStatus only once. All other cases we are looking into x_call_map 
1052       -- In some case the below code will execute with the x_call_map as N  
1053       IF l_get_addr_val = 'Y' THEN
1054          -- This below call is to derive the address validation status and set the message 
1055          X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(LL_MAP_DTLS_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,x_status,x_status);
1056       END IF;
1057  
1058       IF P_LOCATION_ID IS NOT NULL THEN
1059  
1060               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1061                 hz_utility_v2pub.debug 
1062                      (p_message      => ' Calling create_gnr with map status E.',
1063                       p_prefix        => l_debug_prefix,
1064                       p_msg_level     => fnd_log.level_statement,
1065                       p_module_prefix => l_module_prefix,
1066                       p_module        => l_module
1067                      );
1068               END IF; 
1069  
1070         HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
1071                                      L_USAGE_CODE,'E',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
1072         --hk_debugl('Prceossed GNR With Status : E and returned with Status : '||l_status);
1073       END IF;
1074     END IF;
1075  
1076     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1077       hz_utility_v2pub.debug 
1078            (p_message      => 'End of validation for '||L_USAGE_CODE,
1079             p_prefix        => l_debug_prefix,
1080             p_msg_level     => fnd_log.level_procedure,
1081             p_module_prefix => l_module_prefix,
1082             p_module        => l_module
1083            );
1084     END IF; 
1085  
1086             --hk_debugt(LL_MAP_DTLS_TBL); ----- Code to display the output.
1087  
1088   END validateGeo;
1089  
1090   PROCEDURE validateTax(
1091     P_LOCATION_ID               IN NUMBER,
1092     P_COUNTRY                   IN VARCHAR2,
1093     P_STATE                     IN VARCHAR2,
1094     P_PROVINCE                  IN VARCHAR2,
1095     P_COUNTY                    IN VARCHAR2,
1096     P_CITY                      IN VARCHAR2,
1097     P_POSTAL_CODE               IN VARCHAR2,
1098     P_POSTAL_PLUS4_CODE         IN VARCHAR2,
1099     P_ATTRIBUTE1                IN VARCHAR2,
1100     P_ATTRIBUTE2                IN VARCHAR2,
1101     P_ATTRIBUTE3                IN VARCHAR2,
1102     P_ATTRIBUTE4                IN VARCHAR2,
1103     P_ATTRIBUTE5                IN VARCHAR2,
1104     P_ATTRIBUTE6                IN VARCHAR2,
1105     P_ATTRIBUTE7                IN VARCHAR2,
1106     P_ATTRIBUTE8                IN VARCHAR2,
1107     P_ATTRIBUTE9                IN VARCHAR2,
1108     P_ATTRIBUTE10               IN VARCHAR2,
1109     P_LOCK_FLAG                 IN VARCHAR2,
1110     X_CALL_MAP                  IN OUT NOCOPY VARCHAR2,
1111     P_CALLED_FROM               IN VARCHAR2,
1112     P_ADDR_VAL_LEVEL            IN VARCHAR2,
1113     X_ADDR_WARN_MSG             OUT NOCOPY VARCHAR2,
1114     X_ADDR_VAL_STATUS           OUT NOCOPY VARCHAR2,
1115     X_STATUS                    OUT NOCOPY VARCHAR2) IS
1116  
1117     l_loc_components_rec HZ_GNR_UTIL_PKG.LOC_COMPONENTS_REC_TYPE;
1118  
1119     TYPE getGeo IS REF CURSOR;
1120     c_getGeo                getGeo;
1121     c_getGeo1               getGeo;
1122  
1123     l_multiple_parent_flag  VARCHAR2(1);
1124     l_sql                   VARCHAR2(9000);
1125     l_cause                 VARCHAR2(30);
1126     l_usage_code            VARCHAR2(30);
1127     l_usage_id              NUMBER;
1128     l_status                VARCHAR2(1);
1129     l_get_addr_val          VARCHAR2(1);
1130     l_geography_type        VARCHAR2(30);
1131     l_geography_id          NUMBER;
1132     L_MDU_TBL               HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
1133     LL_MAP_DTLS_TBL         HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
1134     L_MAP_DTLS_TBL          HZ_GNR_UTIL_PKG.MAPLOC_REC_TBL_TYPE;
1135  
1136     l_module_prefix CONSTANT VARCHAR2(30) := 'HZ:ARHGNRGB:HZ_GNR_MAP10000';
1137     l_module        CONSTANT VARCHAR2(30) := 'ADDRESS_VALIDATION';
1138     l_debug_prefix           VARCHAR2(30) := p_location_id;
1139  
1140     l_value1              VARCHAR2(360);
1141     l_type1               VARCHAR2(30);
1142     l_value2              VARCHAR2(360);
1143     l_type2               VARCHAR2(30);
1144     l_value3              VARCHAR2(360);
1145     l_type3               VARCHAR2(30);
1146     l_value4              VARCHAR2(360);
1147     l_type4               VARCHAR2(30);
1148  
1149   BEGIN 
1150  
1151     -- defaulting the sucess status
1152     x_status := FND_API.g_ret_sts_success;
1153    --hk_debugl('Processing Location record with location_id :- '||nvl(to_char(p_location_id),'NULL_LOCATION_ID'));
1154     l_loc_components_rec.COUNTRY                 := P_COUNTRY;
1155     l_loc_components_rec.STATE                   := P_STATE;
1156     l_loc_components_rec.PROVINCE                := P_PROVINCE;
1157     l_loc_components_rec.COUNTY                  := P_COUNTY;
1158     l_loc_components_rec.CITY                    := P_CITY;
1162     l_loc_components_rec.ATTRIBUTE2              := P_ATTRIBUTE2;
1159     l_loc_components_rec.POSTAL_CODE             := P_POSTAL_CODE;
1160     l_loc_components_rec.POSTAL_PLUS4_CODE       := P_POSTAL_PLUS4_CODE;
1161     l_loc_components_rec.ATTRIBUTE1              := P_ATTRIBUTE1;
1163     l_loc_components_rec.ATTRIBUTE3              := P_ATTRIBUTE3;
1164     l_loc_components_rec.ATTRIBUTE4              := P_ATTRIBUTE4;
1165     l_loc_components_rec.ATTRIBUTE5              := P_ATTRIBUTE5;
1166     l_loc_components_rec.ATTRIBUTE6              := P_ATTRIBUTE6;
1167     l_loc_components_rec.ATTRIBUTE7              := P_ATTRIBUTE7;
1168     l_loc_components_rec.ATTRIBUTE8              := P_ATTRIBUTE8;
1169     l_loc_components_rec.ATTRIBUTE9              := P_ATTRIBUTE9;
1170     l_loc_components_rec.ATTRIBUTE10             := P_ATTRIBUTE10;
1171  
1172     L_USAGE_ID           := 10006;
1173     L_USAGE_CODE         := 'TAX';
1174     L_MDU_TBL            := G_MDU_TBL10006;
1175     L_MAP_DTLS_TBL       := G_MAP_DTLS_TBL;
1176     l_get_addr_val       := 'N';
1177  
1178     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1179       hz_utility_v2pub.debug 
1180            (p_message       => 'Begin of validation for '||L_USAGE_CODE,
1181             p_prefix        => l_debug_prefix,
1182             p_msg_level     => fnd_log.level_procedure,
1183             p_module_prefix => l_module_prefix,
1184             p_module        => l_module
1185            );
1186     END IF; 
1187  
1188     IF P_LOCATION_ID IS NOT NULL AND P_CALLED_FROM <> 'GNR' THEN
1189       --hk_debugl('Before check_GNR_For_Usage');
1190       IF HZ_GNR_UTIL_PKG.check_GNR_For_Usage(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
1191                                              L_USAGE_CODE,L_MDU_TBL,x_status) = TRUE THEN
1192         --hk_debugl('After check_GNR_For_Usage  with status :- '||x_status);
1193  
1194     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1195       hz_utility_v2pub.debug 
1196            (p_message      => 'There is already a procedded success record in GNR log table.',
1197             p_prefix        => l_debug_prefix,
1198             p_msg_level     => fnd_log.level_statement,
1199             p_module_prefix => l_module_prefix,
1200             p_module        => l_module
1201            );
1202     END IF; 
1203  
1204         x_status := FND_API.g_ret_sts_success;
1205         X_ADDR_VAL_STATUS := x_status;
1206         RETURN;
1207       END IF;
1208     END IF;
1209  
1210     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1211       hz_utility_v2pub.debug 
1212            (p_message      => 'Not able to find an existing success record in GNR log table.',
1213             p_prefix        => l_debug_prefix,
1214             p_msg_level     => fnd_log.level_statement,
1215             p_module_prefix => l_module_prefix,
1216             p_module        => l_module
1217            );
1218     END IF; 
1219  
1220     -- After the following call L_MAP_DTLS_TBL will have the components value populated.
1221     HZ_GNR_UTIL_PKG.getLocCompValues(G_MAP_REC.LOC_TBL_NAME,L_LOC_COMPONENTS_REC,L_MAP_DTLS_TBL,x_status);
1222  
1223     -- Below code will overwrite the LOC_COMPVAL for COUNTRY to COUNTRY_CODE
1224     -- This change is to update COUNTRY column in locations table with COUNTRY_CODE 
1225     -- even if the table has Country name in this column and the validation is success 
1226     L_MAP_DTLS_TBL(1).LOC_COMPVAL := G_MAP_REC.COUNTRY_CODE;
1227  
1228     -- After the following call L_MDU_TBL will have the components value populated.
1229     HZ_GNR_UTIL_PKG.getLocCompValues(G_MAP_REC.LOC_TBL_NAME,L_LOC_COMPONENTS_REC,L_MDU_TBL,x_status);
1230  
1231     --hk_debugl(' value of X_CALL_MAP : '||X_CALL_MAP);
1232     IF X_CALL_MAP = 'Y' THEN
1233       LL_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
1234  
1235       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1236         hz_utility_v2pub.debug 
1237            (p_message      => 'Before calling validate for Map ',
1238             p_prefix        => l_debug_prefix,
1239             p_msg_level     => fnd_log.level_statement,
1240             p_module_prefix => l_module_prefix,
1241             p_module        => l_module
1242            );
1243       END IF; 
1244  
1245       validateForMap(L_LOC_COMPONENTS_REC,LL_MAP_DTLS_TBL,l_cause,x_status);
1246       --hk_debugl('Back from Validate for Map  with status :- '||x_status||'.. and case :'||l_cause);
1247  
1248       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1249         hz_utility_v2pub.debug 
1250            (p_message      => 'Back from Validate for Map with status : .'||x_status||'.. and case :'||l_cause,
1251             p_prefix        => l_debug_prefix,
1252             p_msg_level     => fnd_log.level_statement,
1253             p_module_prefix => l_module_prefix,
1254             p_module        => l_module
1255            );
1256       END IF; 
1257  
1258       -- This usage level check is required upfront because usage level validation will ignore 
1259       -- some of the passed in parameters for the complete mapping and may result in wrong status 
1260       IF (x_status = FND_API.g_ret_sts_error) THEN 
1261  
1262         -- hk_debugl('Trying to check if usage level validation is success even with map validation as error..'); 
1263         -- hk_debugl('TABLE that is returned by Validate For Map'); 
1264         -- hk_debugt(LL_MAP_DTLS_TBL); 
1265         -- hk_debugl('Usage Map Table With loc comp values'); 
1266         -- hk_debugt(L_MDU_TBL); 
1267  
1271  
1268         IF HZ_GNR_UTIL_PKG.get_usage_val_status(LL_MAP_DTLS_TBL,L_MDU_TBL) = FND_API.G_RET_STS_SUCCESS THEN 
1269           -- hk_debugl('COMPLETE mapping is error but is sufficient for passed usage. So setting X_STATUS to success'); 
1270           x_status := FND_API.g_ret_sts_success; 
1272           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1273              hz_utility_v2pub.debug 
1274                  (p_message      => 'COMPLETE mapping is error but is sufficient for passed usage. So setting X_STATUS to success',
1275                   p_prefix        => l_debug_prefix,
1276                   p_msg_level     => fnd_log.level_statement,
1277                   p_module_prefix => l_module_prefix,
1278                   p_module        => l_module
1279                  );
1280           END IF; 
1281  
1282         END IF; 
1283       END IF; 
1284       -------End of status check for usage level ----------+ 
1285  
1286       IF x_status = FND_API.g_ret_sts_success THEN
1287         --hk_debugt(LL_MAP_DTLS_TBL); ----- Code to display the output.
1288         -- Set the address validation status to success since x_statusis success 
1289         X_ADDR_VAL_STATUS := x_status;
1290         IF P_LOCATION_ID IS NOT NULL THEN
1291  
1292           IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1293             hz_utility_v2pub.debug 
1294                  (p_message      => ' Location id is not null. Call fill_values, create_gnr and Return back.',
1295                   p_prefix        => l_debug_prefix,
1296                   p_msg_level     => fnd_log.level_statement,
1297                   p_module_prefix => l_module_prefix,
1298                   p_module        => l_module
1299                  );
1300           END IF; 
1301  
1302           HZ_GNR_UTIL_PKG.fill_values(LL_MAP_DTLS_TBL);
1303           HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
1304                                      L_USAGE_CODE,'S',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
1305         END IF;
1306  
1307         X_CALL_MAP := 'N';
1308         RETURN;
1309  
1310       ELSE 
1311  
1312         IF P_LOCATION_ID IS NOT NULL THEN
1313           --hk_debugl('Table that is returned by Validate For Map');
1314           --hk_debugt(LL_MAP_DTLS_TBL);
1315           --hk_debugl('Usage Map Table With loc comp values');
1316           --hk_debugt(L_MDU_TBL);
1317           IF HZ_GNR_UTIL_PKG.do_usage_val(l_cause,L_MAP_DTLS_TBL,L_MDU_TBL,LL_MAP_DTLS_TBL,l_status) = FALSE THEN
1318  
1319             IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1320               hz_utility_v2pub.debug 
1321                  (p_message      => ' No usage level validation is required. Call create_gnr with the map status',
1322                   p_prefix        => l_debug_prefix,
1323                   p_msg_level     => fnd_log.level_statement,
1324                   p_module_prefix => l_module_prefix,
1325                   p_module        => l_module
1326                  );
1327             END IF; 
1328  
1329             -- This means no usage level validation is required
1330             IF HZ_GNR_UTIL_PKG.get_usage_val_status(LL_MAP_DTLS_TBL,L_MDU_TBL) = FND_API.G_RET_STS_ERROR THEN
1331  
1332               HZ_GNR_UTIL_PKG.fill_values(LL_MAP_DTLS_TBL);
1333               -- This below call is to derive the address validation status and set the message 
1334               X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(LL_MAP_DTLS_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,'E',x_status);
1335               --hk_debugl('Calling create_gnr With Map_status "E"');
1336  
1337               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1338                 hz_utility_v2pub.debug 
1339                      (p_message      => ' Calling create_gnr with map status E.',
1340                       p_prefix        => l_debug_prefix,
1341                       p_msg_level     => fnd_log.level_statement,
1342                       p_module_prefix => l_module_prefix,
1343                       p_module        => l_module
1344                      );
1345               END IF; 
1346  
1347               HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
1348                                        L_USAGE_CODE,'E',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
1349               --hk_debugl('Status after create_gnr : '||l_status);
1350             ELSE 
1351  
1352               HZ_GNR_UTIL_PKG.fill_values(LL_MAP_DTLS_TBL);
1353               -- This below call is to derive the address validation status and set the message 
1354               X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(LL_MAP_DTLS_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,'S',x_status);
1355               --hk_debugl('Calling create_gnr With Map_status "S"');
1356  
1357               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1358                 hz_utility_v2pub.debug 
1359                      (p_message      => ' Calling create_gnr with map status S.',
1360                       p_prefix        => l_debug_prefix,
1361                       p_msg_level     => fnd_log.level_statement,
1362                       p_module_prefix => l_module_prefix,
1363                       p_module        => l_module
1364                      );
1365               END IF; 
1366  
1367               HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
1368                                        L_USAGE_CODE,'S',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
1372  
1369               --hk_debugl('Status after create_gnr : '||l_status);
1370               x_status := FND_API.g_ret_sts_success;
1371             END IF;
1373             X_CALL_MAP := 'N';
1374             RETURN;
1375  
1376           ELSE 
1377             NULL; -- do_usage_val has concluded that usage level validation has to go through.
1378           END IF;
1379         END IF;
1380       END IF;
1381  
1382       l_get_addr_val := 'Y';
1383       X_CALL_MAP := 'N';
1384  
1385     END IF;
1386  
1387     IF L_MDU_TBL.COUNT = 1 THEN
1388  
1389       IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1390         hz_utility_v2pub.debug 
1391              (p_message      => ' This means country is the only required mapped column for validation. Call create_gnr with map status S',
1392               p_prefix        => l_debug_prefix,
1393               p_msg_level     => fnd_log.level_statement,
1394               p_module_prefix => l_module_prefix,
1395               p_module        => l_module
1396              );
1397       END IF; 
1398  
1399       -- This means country is the only required mapped column for validation.
1400       -- and country is already populated in the L_MDU_TBL in the initialization section of this package.
1401       --hk_debugt(L_MDU_TBL); ----- Code to display the output.
1402       --hk_debugl('Calling create_gnr With Map_status "S"');
1403       -- This below call is to derive the address validation status and set the message 
1404       X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(L_MDU_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,'S',x_status);
1405  
1406       IF P_LOCATION_ID IS NOT NULL THEN
1407           HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
1408                                      L_USAGE_CODE,'S',L_LOC_COMPONENTS_REC,p_lock_flag,L_MDU_TBL,l_status);
1409       END IF;
1410  
1411       x_status := FND_API.g_ret_sts_success;
1412       RETURN;
1413     END IF;
1414     --hk_debugl('L_MDU_TBL has count count more than 1');
1415  
1416     l_value2 := NVL(L_MDU_TBL(2).LOC_COMPVAL,'X') ;
1417     IF l_value2 = 'X' THEN
1418       l_type2 := 'X';
1419     ELSE
1420       l_type2 := L_MDU_TBL(2).GEOGRAPHY_TYPE;
1421       -- store the geography_type of the lowest address component that has a value passed in
1422       l_geography_type := l_type2;
1423     END IF;
1424  
1425     l_value3 := NVL(L_MDU_TBL(3).LOC_COMPVAL,'X') ;
1426     IF l_value3 = 'X' THEN
1427       l_type3 := 'X';
1428     ELSE
1429       l_type3 := L_MDU_TBL(3).GEOGRAPHY_TYPE;
1430       -- store the geography_type of the lowest address component that has a value passed in
1431       l_geography_type := l_type3;
1432     END IF;
1433  
1434     l_value4 := NVL(L_MDU_TBL(4).LOC_COMPVAL,'X') ;
1435     IF l_value4 = 'X' THEN
1436       l_type4 := 'X';
1437     ELSE
1438       l_type4 := L_MDU_TBL(4).GEOGRAPHY_TYPE;
1439       -- store the geography_type of the lowest address component that has a value passed in
1440       l_geography_type := l_type4;
1441     END IF;
1442  
1443  
1444      LL_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
1445      l_sql := HZ_GNR_UTIL_PKG.getQuery(L_MAP_DTLS_TBL,L_MDU_TBL,x_status);
1446      --hk_debugl('The SQL query');
1447      --hk_debugl(l_sql);
1448  
1449      IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1450        hz_utility_v2pub.debug 
1451             (p_message      => ' The SQL query : '||l_sql,
1452              p_prefix        => l_debug_prefix,
1453              p_msg_level     => fnd_log.level_statement,
1454              p_module_prefix => l_module_prefix,
1455              p_module        => l_module
1456             );
1457      END IF; 
1458  
1459      OPEN  c_getGeo FOR l_sql USING G_MAP_REC.COUNTRY_CODE,g_country_geo_id
1460            ,l_type2,l_value2,l_type3,l_value3,l_type4,l_value4,l_geography_type;
1461      FETCH c_getGeo INTO l_geography_id,l_multiple_parent_flag,LL_MAP_DTLS_TBL(1).GEOGRAPHY_ID
1462            ,LL_MAP_DTLS_TBL(2).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(3).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(4).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
1463      IF c_getGeo%NOTFOUND THEN 
1464        --hk_debugl('No Match found for the usage level search');
1465  
1466        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1467          hz_utility_v2pub.debug 
1468               (p_message      => ' No Match found for the usage level search ',
1469                p_prefix        => l_debug_prefix,
1470                p_msg_level     => fnd_log.level_statement,
1471                p_module_prefix => l_module_prefix,
1472                p_module        => l_module
1473               );
1474        END IF; 
1475  
1476        HZ_GNR_UTIL_PKG.fix_no_match(LL_MAP_DTLS_TBL,x_status);
1477        x_status := FND_API.G_RET_STS_ERROR;
1478      ELSE 
1479        --Fetching once more to see where there are multiple records
1480  
1481        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1482          hz_utility_v2pub.debug 
1483               (p_message      => ' Fetching once more to see where there are multiple records ',
1484                p_prefix        => l_debug_prefix,
1485                p_msg_level     => fnd_log.level_statement,
1486                p_module_prefix => l_module_prefix,
1487                p_module        => l_module
1488               );
1489        END IF; 
1490  
1494  
1491        FETCH c_getGeo INTO l_geography_id,l_multiple_parent_flag,LL_MAP_DTLS_TBL(1).GEOGRAPHY_ID
1492            ,LL_MAP_DTLS_TBL(2).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(3).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(4).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
1493        IF c_getGeo%FOUND THEN -- not able to identify a unique record
1495          -- Get the query again with identifier type as NAME if multiple match found
1496          -- If it returns a record, we are able to derive a unique record for identifier type as NAME
1497          l_sql := HZ_GNR_UTIL_PKG.getQueryforMultiMatch(L_MAP_DTLS_TBL,L_MDU_TBL,x_status);
1498          OPEN  c_getGeo1 FOR l_sql USING G_MAP_REC.COUNTRY_CODE,g_country_geo_id
1499                ,l_type2,l_value2,l_type3,l_value3,l_type4,l_value4,l_geography_type;
1500  
1501          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1502            hz_utility_v2pub.debug 
1503                 (p_message      => 'Before the fetch of the query with identifier type as NAME after multiple match found',
1504                  p_prefix        => l_debug_prefix,
1505                  p_msg_level     => fnd_log.level_statement,
1506                  p_module_prefix => l_module_prefix,
1507                  p_module        => l_module
1508                 );
1509          END IF; 
1510  
1511      --hk_debugt(LL_MAP_DTLS_TBL);
1512          FETCH c_getGeo1 INTO l_geography_id,l_multiple_parent_flag,LL_MAP_DTLS_TBL(1).GEOGRAPHY_ID
1513                ,LL_MAP_DTLS_TBL(2).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(3).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(4).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
1514          IF c_getGeo1%FOUND THEN  
1515            -- check if there is another row with same STANDARD_NAME, in that case it is error case 
1516            FETCH c_getGeo1 INTO l_geography_id,l_multiple_parent_flag,L_MAP_DTLS_TBL(1).GEOGRAPHY_ID 
1517                 ,LL_MAP_DTLS_TBL(2).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(3).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(4).GEOGRAPHY_ID,LL_MAP_DTLS_TBL(5).GEOGRAPHY_ID;
1518            IF c_getGeo1%NOTFOUND THEN  -- success (only 1 rec with same primary name exists)
1519  
1520              IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1521                 hz_utility_v2pub.debug 
1522                     (p_message       => 'GEO-Able to find a unique record or a record with multiple parent flag = Y with identifier type as NAME',
1523                      p_prefix        => l_debug_prefix,
1524                      p_msg_level     => fnd_log.level_statement,
1525                      p_module_prefix => l_module_prefix,
1526                      p_module        => l_module
1527                     );
1528              END IF; 
1529  
1530            ELSE -- Not able to find a unique record with identifier type as NAME 
1531  
1532                IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1533 	                 hz_utility_v2pub.debug 
1534 	                      (p_message      => 'GEO-Not able to find a record with with identifier type as NAME. '|| 
1535 	                                         ' More than 1 rec exists with same STANDARD NAME', 
1536 	                       p_prefix        => l_debug_prefix, 
1537 	                       p_msg_level     => fnd_log.level_statement, 
1538 	                       p_module_prefix => l_module_prefix, 
1539 	                       p_module        => l_module 
1540 	                      ); 
1541 	               END IF; 
1542  
1543                LL_MAP_DTLS_TBL       := L_MAP_DTLS_TBL; 
1544                HZ_GNR_UTIL_PKG.fix_no_match(LL_MAP_DTLS_TBL,x_status); 
1545                x_status := FND_API.G_RET_STS_ERROR; 
1546 	          END IF; 
1547  
1548          ELSE -- Not able to found a unique record with identifier type as NAME
1549  
1550            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1551              hz_utility_v2pub.debug 
1552                   (p_message      => ' Not able to find a record with with identifier type as NAME. ',
1553                    p_prefix        => l_debug_prefix,
1554                    p_msg_level     => fnd_log.level_statement,
1555                    p_module_prefix => l_module_prefix,
1556                    p_module        => l_module
1557                   );
1558            END IF; 
1559  
1560            LL_MAP_DTLS_TBL       := L_MAP_DTLS_TBL;
1561            x_status := FND_API.G_RET_STS_ERROR;
1562          END IF; 
1563          CLOSE c_getGeo1;
1564  
1565        ELSE -- a unique record or a record with multiple parent flag = Y is found
1566  
1567          IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1568            hz_utility_v2pub.debug 
1569                 (p_message      => ' A unique record or a record with multiple parent flag = Y is found ',
1570                  p_prefix        => l_debug_prefix,
1571                  p_msg_level     => fnd_log.level_statement,
1572                  p_module_prefix => l_module_prefix,
1573                  p_module        => l_module
1574                 );
1575          END IF; 
1576  
1577        END IF;
1578  
1579        IF l_multiple_parent_flag = 'Y'  AND x_status <> FND_API.G_RET_STS_ERROR THEN
1580          IF HZ_GNR_UTIL_PKG.fix_multiparent(l_geography_id,LL_MAP_DTLS_TBL) = TRUE THEN
1581            NULL;
1582          ELSE --  Multiple parent case not able to find a unique record 
1583  
1584            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1585              hz_utility_v2pub.debug 
1586                   (p_message      => ' Multiple parent case not able to find a unique record',
1587                    p_prefix        => l_debug_prefix,
1588                    p_msg_level     => fnd_log.level_statement,
1592            END IF; 
1589                    p_module_prefix => l_module_prefix,
1590                    p_module        => l_module
1591                   );
1593  
1594            x_status := FND_API.G_RET_STS_ERROR;
1595          END IF;
1596  
1597        ELSE -- a unique record is found
1598  
1599            IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1600              hz_utility_v2pub.debug 
1601                   (p_message      => ' A unique record is found ',
1602                    p_prefix        => l_debug_prefix,
1603                    p_msg_level     => fnd_log.level_statement,
1604                    p_module_prefix => l_module_prefix,
1605                    p_module        => l_module
1606                   );
1607            END IF; 
1608  
1609        END IF;
1610      END IF;
1611      CLOSE c_getGeo;
1612  
1613       --hk_debugl('Return STatus after first fetch : '||x_status);
1614      --Following call will try to derive missing lower level compoents  
1615  
1616        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1617          hz_utility_v2pub.debug 
1618               (p_message      => ' Return Status after first fetch : '||x_status,
1619                p_prefix        => l_debug_prefix,
1620                p_msg_level     => fnd_log.level_statement,
1621                p_module_prefix => l_module_prefix,
1622                p_module        => l_module
1623               );
1624        END IF; 
1625  
1626        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1627          hz_utility_v2pub.debug 
1628               (p_message      => ' Calling fix_child. This call will try to derive missing lower level compoents.',
1629                p_prefix        => l_debug_prefix,
1630                p_msg_level     => fnd_log.level_statement,
1631                p_module_prefix => l_module_prefix,
1632                p_module        => l_module
1633               );
1634        END IF; 
1635  
1636      IF HZ_GNR_UTIL_PKG.fix_child(LL_MAP_DTLS_TBL) = FALSE THEN
1637        x_status := HZ_GNR_UTIL_PKG.get_usage_val_status(LL_MAP_DTLS_TBL,L_MDU_TBL);
1638      END IF;
1639  
1640        IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1641          hz_utility_v2pub.debug 
1642               (p_message      => ' Return status after fix_child '||x_status,
1643                p_prefix        => l_debug_prefix,
1644                p_msg_level     => fnd_log.level_statement,
1645                p_module_prefix => l_module_prefix,
1646                p_module        => l_module
1647               );
1648        END IF; 
1649  
1650       --hk_debugl('LL_MAP_DTLS_TBL before fill_values');
1651       --hk_debugt(LL_MAP_DTLS_TBL);
1652      HZ_GNR_UTIL_PKG.fill_values(LL_MAP_DTLS_TBL);
1653       --hk_debugl('LL_MAP_DTLS_TBL after fill_values');
1654       --hk_debugt(LL_MAP_DTLS_TBL);
1655  
1656     IF x_status = FND_API.g_ret_sts_success THEN
1657       -- We need to call the getAddrValStatus only once. All other cases we are looking into x_call_map 
1658       -- In some case the below code will execute with the x_call_map as N  
1659       IF l_get_addr_val = 'Y' THEN
1660          -- This below call is to derive the address validation status and set the message 
1661          X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(LL_MAP_DTLS_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,x_status,x_status);
1662       END IF;
1663  
1664       IF P_LOCATION_ID IS NOT NULL THEN
1665  
1666               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1667                 hz_utility_v2pub.debug 
1668                      (p_message      => ' Calling create_gnr with map status S.',
1669                       p_prefix        => l_debug_prefix,
1670                       p_msg_level     => fnd_log.level_statement,
1671                       p_module_prefix => l_module_prefix,
1672                       p_module        => l_module
1673                      );
1674               END IF; 
1675  
1676         HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
1677                                    L_USAGE_CODE,'S',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
1678       --hk_debugl('Prceossed GNR With Status : S and returned with Status : '||l_status);
1679       END IF;
1680     ELSE 
1681       -- We need to call the getAddrValStatus only once. All other cases we are looking into x_call_map 
1682       -- In some case the below code will execute with the x_call_map as N  
1683       IF l_get_addr_val = 'Y' THEN
1684          -- This below call is to derive the address validation status and set the message 
1685          X_ADDR_VAL_STATUS := HZ_GNR_UTIL_PKG.getAddrValStatus(LL_MAP_DTLS_TBL,L_MDU_TBL,P_CALLED_FROM,P_ADDR_VAL_LEVEL,x_addr_warn_msg,x_status,x_status);
1686       END IF;
1687  
1688       IF P_LOCATION_ID IS NOT NULL THEN
1689  
1690               IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1691                 hz_utility_v2pub.debug 
1692                      (p_message      => ' Calling create_gnr with map status E.',
1693                       p_prefix        => l_debug_prefix,
1694                       p_msg_level     => fnd_log.level_statement,
1695                       p_module_prefix => l_module_prefix,
1696                       p_module        => l_module
1697                      );
1698               END IF; 
1699  
1700         HZ_GNR_UTIL_PKG.create_gnr(P_LOCATION_ID,G_MAP_REC.LOC_TBL_NAME,
1701                                      L_USAGE_CODE,'E',L_LOC_COMPONENTS_REC,p_lock_flag,LL_MAP_DTLS_TBL,l_status);
1702         --hk_debugl('Prceossed GNR With Status : E and returned with Status : '||l_status);
1703       END IF;
1704     END IF;
1705  
1706     IF (fnd_log.level_statement >= fnd_log.g_current_runtime_level) THEN 
1707       hz_utility_v2pub.debug 
1708            (p_message      => 'End of validation for '||L_USAGE_CODE,
1709             p_prefix        => l_debug_prefix,
1710             p_msg_level     => fnd_log.level_procedure,
1711             p_module_prefix => l_module_prefix,
1712             p_module        => l_module
1713            );
1714     END IF; 
1715  
1716             --hk_debugt(LL_MAP_DTLS_TBL); ----- Code to display the output.
1717  
1718   END validateTax;
1719  
1720 BEGIN 
1721   G_COUNTRY_GEO_ID                    := 1;
1722   G_MAP_REC.MAP_ID                    := 10000;
1723   G_MAP_REC.COUNTRY_CODE              := 'US';
1724   G_MAP_REC.LOC_TBL_NAME              := 'HZ_LOCATIONS';
1725   G_MAP_REC.ADDRESS_STYLE             := 'NULL';
1726  
1727   G_MAP_DTLS_TBL(1).LOC_SEQ_NUM       := 1;
1728   G_MAP_DTLS_TBL(1).LOC_COMPONENT     := 'COUNTRY';
1729   G_MAP_DTLS_TBL(1).GEOGRAPHY_TYPE    := 'COUNTRY';
1730   G_MAP_DTLS_TBL(1).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT1';
1731   G_MAP_DTLS_TBL(1).GEOGRAPHY_ID    := 1;
1732   G_MAP_DTLS_TBL(2).LOC_SEQ_NUM       := 2;
1733   G_MAP_DTLS_TBL(2).LOC_COMPONENT     := 'STATE';
1734   G_MAP_DTLS_TBL(2).GEOGRAPHY_TYPE    := 'STATE';
1735   G_MAP_DTLS_TBL(2).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT2';
1736   G_MAP_DTLS_TBL(3).LOC_SEQ_NUM       := 3;
1737   G_MAP_DTLS_TBL(3).LOC_COMPONENT     := 'COUNTY';
1738   G_MAP_DTLS_TBL(3).GEOGRAPHY_TYPE    := 'COUNTY';
1739   G_MAP_DTLS_TBL(3).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT3';
1740   G_MAP_DTLS_TBL(4).LOC_SEQ_NUM       := 4;
1741   G_MAP_DTLS_TBL(4).LOC_COMPONENT     := 'CITY';
1742   G_MAP_DTLS_TBL(4).GEOGRAPHY_TYPE    := 'CITY';
1743   G_MAP_DTLS_TBL(4).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT4';
1744   G_MAP_DTLS_TBL(5).LOC_SEQ_NUM       := 5;
1745   G_MAP_DTLS_TBL(5).LOC_COMPONENT     := 'POSTAL_CODE';
1746   G_MAP_DTLS_TBL(5).GEOGRAPHY_TYPE    := 'POSTAL_CODE';
1747   G_MAP_DTLS_TBL(5).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT5';
1748  
1749   G_USAGE_TBL(1).USAGE_ID             := 10000;
1750   G_USAGE_TBL(1).MAP_ID               := 10000;
1751   G_USAGE_TBL(1).USAGE_CODE           := 'GEOGRAPHY';
1752   G_USAGE_DTLS_TBL(1).USAGE_ID        := 10000;
1753   G_USAGE_DTLS_TBL(1).GEOGRAPHY_TYPE  := 'CITY';
1754   G_USAGE_DTLS_TBL(2).USAGE_ID        := 10000;
1755   G_USAGE_DTLS_TBL(2).GEOGRAPHY_TYPE  := 'COUNTRY';
1756   G_USAGE_DTLS_TBL(3).USAGE_ID        := 10000;
1757   G_USAGE_DTLS_TBL(3).GEOGRAPHY_TYPE  := 'COUNTY';
1758   G_USAGE_DTLS_TBL(4).USAGE_ID        := 10000;
1759   G_USAGE_DTLS_TBL(4).GEOGRAPHY_TYPE  := 'STATE';
1760   G_MDU_TBL10000(1).LOC_SEQ_NUM       := 1;
1761   G_MDU_TBL10000(1).LOC_COMPONENT     := 'COUNTRY';
1762   G_MDU_TBL10000(1).GEOGRAPHY_TYPE    := 'COUNTRY';
1763   G_MDU_TBL10000(1).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT1';
1764   G_MDU_TBL10000(1).GEOGRAPHY_ID      := 1;
1765   G_MDU_TBL10000(2).LOC_SEQ_NUM       := 2;
1766   G_MDU_TBL10000(2).LOC_COMPONENT     := 'STATE';
1767   G_MDU_TBL10000(2).GEOGRAPHY_TYPE    := 'STATE';
1768   G_MDU_TBL10000(2).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT2';
1769   G_MDU_TBL10000(3).LOC_SEQ_NUM       := 3;
1770   G_MDU_TBL10000(3).LOC_COMPONENT     := 'COUNTY';
1771   G_MDU_TBL10000(3).GEOGRAPHY_TYPE    := 'COUNTY';
1772   G_MDU_TBL10000(3).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT3';
1773   G_MDU_TBL10000(4).LOC_SEQ_NUM       := 4;
1774   G_MDU_TBL10000(4).LOC_COMPONENT     := 'CITY';
1775   G_MDU_TBL10000(4).GEOGRAPHY_TYPE    := 'CITY';
1776   G_MDU_TBL10000(4).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT4';
1777  
1778   G_USAGE_TBL(2).USAGE_ID             := 10006;
1779   G_USAGE_TBL(2).MAP_ID               := 10000;
1780   G_USAGE_TBL(2).USAGE_CODE           := 'TAX';
1781   G_USAGE_DTLS_TBL(5).USAGE_ID        := 10006;
1782   G_USAGE_DTLS_TBL(5).GEOGRAPHY_TYPE  := 'CITY';
1783   G_USAGE_DTLS_TBL(6).USAGE_ID        := 10006;
1784   G_USAGE_DTLS_TBL(6).GEOGRAPHY_TYPE  := 'COUNTRY';
1785   G_USAGE_DTLS_TBL(7).USAGE_ID        := 10006;
1786   G_USAGE_DTLS_TBL(7).GEOGRAPHY_TYPE  := 'COUNTY';
1787   G_USAGE_DTLS_TBL(8).USAGE_ID        := 10006;
1788   G_USAGE_DTLS_TBL(8).GEOGRAPHY_TYPE  := 'STATE';
1789   G_MDU_TBL10006(1).LOC_SEQ_NUM       := 1;
1790   G_MDU_TBL10006(1).LOC_COMPONENT     := 'COUNTRY';
1791   G_MDU_TBL10006(1).GEOGRAPHY_TYPE    := 'COUNTRY';
1792   G_MDU_TBL10006(1).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT1';
1793   G_MDU_TBL10006(1).GEOGRAPHY_ID      := 1;
1794   G_MDU_TBL10006(2).LOC_SEQ_NUM       := 2;
1795   G_MDU_TBL10006(2).LOC_COMPONENT     := 'STATE';
1796   G_MDU_TBL10006(2).GEOGRAPHY_TYPE    := 'STATE';
1797   G_MDU_TBL10006(2).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT2';
1798   G_MDU_TBL10006(3).LOC_SEQ_NUM       := 3;
1799   G_MDU_TBL10006(3).LOC_COMPONENT     := 'COUNTY';
1800   G_MDU_TBL10006(3).GEOGRAPHY_TYPE    := 'COUNTY';
1801   G_MDU_TBL10006(3).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT3';
1802   G_MDU_TBL10006(4).LOC_SEQ_NUM       := 4;
1803   G_MDU_TBL10006(4).LOC_COMPONENT     := 'CITY';
1804   G_MDU_TBL10006(4).GEOGRAPHY_TYPE    := 'CITY';
1805   G_MDU_TBL10006(4).GEO_ELEMENT_COL   := 'GEOGRAPHY_ELEMENT4';
1806  
1807 END HZ_GNR_MAP10000;