DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_MERGE_LOC_CHECK_PKG

Source


1 PACKAGE BODY ZX_MERGE_LOC_CHECK_PKG AS
2 /* $Header: zxcmergegnrchkb.pls 120.3.12010000.2 2008/10/20 18:19:08 tsen ship $ */
3 
4   G_CURRENT_RUNTIME_LEVEL      NUMBER;
5   G_LEVEL_UNEXPECTED           CONSTANT NUMBER       := FND_LOG.LEVEL_UNEXPECTED;
6   G_LEVEL_ERROR                CONSTANT NUMBER       := FND_LOG.LEVEL_ERROR;
7   G_LEVEL_EXCEPTION            CONSTANT NUMBER       := FND_LOG.LEVEL_EXCEPTION;
8   G_LEVEL_EVENT                CONSTANT NUMBER       := FND_LOG.LEVEL_EVENT;
9   G_LEVEL_PROCEDURE            CONSTANT NUMBER       := FND_LOG.LEVEL_PROCEDURE;
10   G_LEVEL_STATEMENT            CONSTANT NUMBER       := FND_LOG.LEVEL_STATEMENT;
11   G_MODULE_NAME                CONSTANT VARCHAR2(30) := 'ZX.ZX_MERGE_LOC_CHECK_PKG';
12   l_log_msg   FND_LOG_MESSAGES.MESSAGE_TEXT%TYPE;
13   l_procedure_name CONSTANT VARCHAR2(30) := 'CHECK_GNR';
14 
15 PROCEDURE CHECK_GNR(p_from_location_id IN  NUMBER,
16                     p_to_location_id   IN  NUMBER,
17                     p_init_msg_list    IN  VARCHAR2,
18                     x_merge_yn         OUT NOCOPY VARCHAR2,
19                     x_return_status    OUT NOCOPY VARCHAR2,
20                     x_msg_count        OUT NOCOPY NUMBER,
21                     x_msg_data         OUT NOCOPY VARCHAR2) AS
22 TYPE number_tbl_type IS TABLE OF NUMBER;
23 TYPE varchar2_tbl_type IS TABLE OF VARCHAR2(30);
24 l_from_geography_id_tbl number_tbl_type;
25 l_from_geography_type_tbl varchar2_tbl_type;
26 l_to_geography_id_tbl number_tbl_type;
27 l_to_geography_type_tbl varchar2_tbl_type;
28 l_from_country_code VARCHAR2(30);
29 l_to_country_code VARCHAR2(30);
30 l_from_tax_usage_exists VARCHAR2(6);
31 l_to_tax_usage_exists VARCHAR2(6);
32 l_from_geography_id_count NUMBER;
33 l_to_geography_id_count NUMBER;
34 BEGIN
35   x_return_status := FND_API.G_RET_STS_SUCCESS;
36   x_merge_yn := 'N';
37   BEGIN
38     SELECT 'TRUE'
39     INTO l_from_tax_usage_exists
40     FROM hz_geo_struct_map map, hz_locations loc, hz_address_usages usage
41     WHERE map.country_code = loc.country
42     AND  map.loc_tbl_name = 'HZ_LOCATIONS'
43     AND  nvl(map.address_style,'1') = nvl(loc.address_style,'1')
44     AND  map.map_id = usage.map_id
45     AND  usage.usage_code = 'TAX'
46     AND  loc.location_id = p_from_location_id;
47   EXCEPTION WHEN NO_DATA_FOUND THEN
48     l_from_tax_usage_exists := 'FALSE';
49   END;
50 
51   BEGIN
52     SELECT 'TRUE'
53     INTO l_to_tax_usage_exists
54     FROM hz_geo_struct_map map, hz_locations loc, hz_address_usages usage
55     WHERE map.country_code = loc.country
56     AND  map.loc_tbl_name = 'HZ_LOCATIONS'
57     AND  nvl(map.address_style,'1') = nvl(loc.address_style,'1')
58     AND  map.map_id = usage.map_id
59     AND  usage.usage_code = 'TAX'
60     AND  loc.location_id = p_to_location_id;
61   EXCEPTION WHEN NO_DATA_FOUND THEN
62     l_to_tax_usage_exists := 'FALSE';
63   END;
64 
65   IF l_from_tax_usage_exists = 'TRUE' and l_to_tax_usage_exists = 'TRUE' THEN
66     SELECT gnr.geography_id, gnr.geography_type
67     BULK COLLECT INTO l_from_geography_id_tbl, l_from_geography_type_tbl
68     FROM hz_geo_name_references gnr,
69          hz_geo_name_reference_log log,
70          hz_geo_struct_map map,
71          hz_locations loc,
72          hz_address_usages usage,
73          hz_address_usage_dtls dtl
74     WHERE gnr.location_id = p_from_location_id
75     AND   gnr.location_id = log.location_id
76     AND   log.map_status = 'S'
77     AND   log.usage_code = 'TAX'
78     AND   loc.location_id = gnr.location_id
79     AND   map.country_code = loc.country
80     AND   map.loc_tbl_name = 'HZ_LOCATIONS'
81     AND   nvl(map.address_style,'1') = nvl(loc.address_style,'1')
82     AND   map.map_id = usage.map_id
83     AND   usage.usage_code = 'TAX'
84     AND   dtl.usage_id = usage.usage_id
85     AND   dtl.geography_type = gnr.geography_type
86     ORDER BY gnr.geography_id;
87 
88     SELECT gnr.geography_id, gnr.geography_type
89     BULK COLLECT INTO l_to_geography_id_tbl, l_to_geography_type_tbl
90     FROM hz_geo_name_references gnr,
91          hz_geo_name_reference_log log,
92          hz_geo_struct_map map,
93          hz_locations loc,
94          hz_address_usages usage,
95          hz_address_usage_dtls dtl
96     WHERE gnr.location_id = p_to_location_id
97     AND  gnr.location_id = log.location_id
98     AND  log.map_status = 'S'
99     AND log.usage_code = 'TAX'
100     AND   loc.location_id = gnr.location_id
101     AND   map.country_code = loc.country
102     AND   map.loc_tbl_name = 'HZ_LOCATIONS'
103     AND   nvl(map.address_style,'1') = nvl(loc.address_style,'1')
104     AND   map.map_id = usage.map_id
105     AND   usage.usage_code = 'TAX'
106     AND   dtl.usage_id = usage.usage_id
107     AND   dtl.geography_type = gnr.geography_type
108     ORDER BY gnr.geography_id;
109 
110     l_from_geography_id_count := l_from_geography_id_tbl.count;
111     l_to_geography_id_count := l_to_geography_id_tbl.count;
112 
113 
114     IF l_from_geography_id_count = 0 OR l_to_geography_id_count = 0 THEN
115       x_merge_yn := 'N';
116       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
117         l_log_msg := 'B: Tax Usage exists for from and to locations but no GNR has been created';
118         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, l_log_msg);
119       END IF;
120       return;
121     END IF;
122     IF l_from_geography_id_count <> l_to_geography_id_count THEN
123       x_merge_yn := 'N';
124       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
125         l_log_msg := 'B: Tax Usage exists for from and to locations but GNR rows are different';
126         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, l_log_msg);
127       END IF;
128     ELSE
129       FOR i IN l_from_geography_id_tbl.first..l_from_geography_id_tbl.last LOOP
130         IF l_from_geography_id_tbl(i) = l_to_geography_id_tbl(i) THEN
131           x_merge_yn := 'Y';
132         ELSE
133           x_merge_yn := 'N';
134           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
135             l_log_msg := 'B: Tax Usage exists for from and to locations and GNR rows are not identical';
136             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, l_log_msg);
137           END IF;
138           EXIT;
139         END IF ;
140       END LOOP;
141       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
142          l_log_msg := 'B: After Loop Tax Usage for from and to locations and GNR rows are identical';
143          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, l_log_msg);
144       END IF;
145 
146     END IF;
147 
148   ELSIF l_from_tax_usage_exists = 'FALSE' and l_to_tax_usage_exists = 'FALSE' THEN
149     SELECT country
150     INTO l_from_country_code
151     FROM hz_locations loc
152     WHERE loc.location_id = p_from_location_id;
153 
154     SELECT country
155     INTO l_to_country_code
156     FROM hz_locations loc
157     WHERE loc.location_id = p_to_location_id;
158 
159     IF l_from_country_code <> l_to_country_code THEN
160       x_merge_yn := 'N';
161       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
162         l_log_msg := 'B: Tax Usage does not exist for from and to locations and country codes are different';
163         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, l_log_msg);
164       END IF;
165     ELSE
166       x_merge_yn := 'Y';
167       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
168         l_log_msg := 'B: Tax Usage does not exist for from and to locations and country codes are identical';
169         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, l_log_msg);
170       END IF;
171     END IF;
172 
173   ELSIF l_from_tax_usage_exists = 'TRUE' and l_to_tax_usage_exists = 'FALSE' THEN
174     x_merge_yn := 'N';
175     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
176       l_log_msg := 'B: Tax Usage exists for from location but not for to location';
177       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, l_log_msg);
178     END IF;
179 
180   ELSIF l_from_tax_usage_exists = 'FALSE' and l_to_tax_usage_exists = 'TRUE' THEN
181     x_merge_yn := 'N';
182     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
183       l_log_msg := 'B: Tax Usage does not exist for from location but exists for to location';
184       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, l_log_msg);
185     END IF;
186   END IF;
187 EXCEPTION WHEN OTHERS THEN
188      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
189      FND_MESSAGE.Set_Name ('ZX','ZX_GENERIC_MESSAGE');
190      FND_MESSAGE.Set_Token('GENERIC_TEXT', SQLERRM);
191      FND_MSG_PUB.ADD;
192      FND_MSG_PUB.Count_And_Get(
193                                 p_encoded => FND_API.G_FALSE,
194                                 p_count        => x_msg_count,
195                                 p_data        => x_msg_data);
196 
197      -- Logging Infra: Statement level
198      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
199        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME || l_procedure_name, 'E: EXC: OTHERS: '||SQLCODE||': '||SQLERRM);
200      END IF;
201 
202 
203 END;
204 
205 END;