[Home] [Help]
PACKAGE BODY: APPS.FTE_PARCEL_LOADER
Source
1 PACKAGE BODY FTE_PARCEL_LOADER AS
2 /* $Header: FTEPCLDB.pls 120.2 2005/08/25 06:18:35 pkaliyam noship $ */
3 -----------------------------------------------------------------------------
4 -- --
5 -- NAME: FTE_PARCEL_LOADER --
6 -- TYPE: PACKAGE BODY --
7 -- DESCRIPTION: Contains Parcel Loader functions for Bulk Loader --
8 -- --
9 -- PROCEDURES and FUNCTIONS: --
10 -- PROCEDURE GET_POSTAL_PART --
11 -- OBSOLETE_PREVIOUS_DATA --
12 -- CREATE_DEST_ZONES_LANES --
13 -- PROCESS_DATA --
14 -- PROCESS_RATING_ZONE_CHART --
15 -- PROCESS_RATING_SETUP --
16 -- PROCESS_ORIGIN --
17 -- PROCESS_DESTINATION --
18 -----------------------------------------------------------------------------
19
20 G_PKG_NAME CONSTANT VARCHAR2(50) := 'FTE_PARCEL_LOADER';
21
22 g_chart_info STRINGARRAY; -- rating zone chart info STRINGARRAY
23 g_origin_zone FTE_BULKLOAD_PKG.data_values_tbl; -- origin zone info STRINGARRAY
24 g_dest_zones FTE_BULKLOAD_PKG.block_data_tbl; -- table of STRINGARRAY of destination zone info
25 g_last_service_type VARCHAR2(200) := NULL;
26
27 -- table of STRINGARRAY with first item on string array being the service level,
28 -- if null, then that STRINGARRAY follows the last STRINGARRAY with first item not null.
29 g_setup_info FTE_BULKLOAD_PKG.array_tbl;
30 g_dest_indexes FTE_BULKLOAD_PKG.array_tbl;
31 g_dest_id NUMBER := 1;
32
33 -- table of STRINGARRAY with first item being destination name and the rest being the values
34 -- of a row of service columns in destination block
35 g_dest_info FTE_BULKLOAD_PKG.array_tbl;
36 g_service_columns STRINGARRAY := STRINGARRAY(); -- STRINGARRAY of the column names of the service columns in destination block
37
38 g_postal_from VARCHAR2(100);
39 g_postal_to VARCHAR2(100);
40
41 ----------------------------------------------------------------------------
42 -- PROCEDURE GET_POSTAL_PART
43 --
44 -- Purpose: parse the postal code into from and to
45 --
46 -- IN parameters:
47 -- 1. p_postal: postal code in format of (*-*, *..*, *)
48 --
49 -- OUT parameters:
50 -- 1. x_status: status of the processing, -1 means no error
51 -- 2. x_error_msg: error message if any.
52 ----------------------------------------------------------------------------
53 PROCEDURE GET_POSTAL_PART(p_postal IN VARCHAR2) IS
54 BEGIN
55 g_postal_from := '';
56 g_postal_to := '';
57
58 IF (INSTR(p_postal, '-') > 0) THEN -- separator -
59 g_postal_from := SUBSTR(p_postal, 1, INSTR(p_postal, '-')-1);
60 g_postal_to := SUBSTR(p_postal, INSTR(p_postal, '-')+1, LENGTH(p_postal));
61 ELSIF (INSTR(p_postal, '.') > 0) THEN -- separator ..
62 g_postal_from := SUBSTR(p_postal, 1, INSTR(p_postal, '-')-1);
63 g_postal_to := SUBSTR(p_postal, INSTR(p_postal, '-')+2, LENGTH(p_postal));
64 ELSE
65 g_postal_from := p_postal;
66 g_postal_to := p_postal;
67 END IF;
68
69 g_postal_from := TRIM(' ' FROM g_postal_from);
70 g_postal_to := TRIM(' ' FROM g_postal_to);
71 END GET_POSTAL_PART;
72
73 ----------------------------------------------------------------------------
74 -- PROCEDURE OBSOLETE_PREVIOUS_DATA
75 --
76 -- Purpose: remove or enddate old data if zone name exist
77 --
78 -- IN parameters:
79 -- 1. p_zone_name: zone name to be matched
80 --
81 -- OUT parameters:
82 -- 1. x_status: status of the processing, -1 means no error
83 -- 2. x_error_msg: error message if any.
84 --
85 -- FTE_LANES - Change Expiry_Date to new Effective_Date -1
86 -- FTE_PRC_PARAMETERS - No change
87 -- WSH_REGIONS - No change
88 -- WSH_REGIONS_TL - Change Zone Name
89 -- WSH_ZONE_REGIONS - No change
90 ----------------------------------------------------------------------------
91 PROCEDURE OBSOLETE_PREVIOUS_DATA(p_zone_name IN VARCHAR2,
92 x_status OUT NOCOPY NUMBER,
93 x_error_msg OUT NOCOPY VARCHAR2) IS
94 l_start_date VARCHAR2(100) := g_chart_info(8);
95 l_expiry_date DATE;
96 l_action VARCHAR2(20);
97
98 l_module_name CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.OBSOLETE_PREVIOUS_DATA';
99 BEGIN
100 FTE_UTIL_PKG.ENTER_DEBUG(l_module_name);
101
102 x_status := -1;
103
104 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
105 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, 'Zone Name', p_zone_name);
106 END IF;
107
108 IF (l_start_date IS NULL) THEN
109 l_expiry_date := SYSDATE - 1;
110 ELSE
111 BEGIN
112 l_expiry_date := TO_DATE(l_start_date, FTE_BULKLOAD_PKG.G_DATE_FORMAT3) - 1;
113 EXCEPTION
114 WHEN OTHERS THEN
115 BEGIN
116 l_expiry_date := TO_DATE(l_expiry_date,'MM/DD/YYYY') - 1;
117 l_expiry_date := TO_CHAR(l_expiry_date);
118 EXCEPTION
119 WHEN OTHERS THEN
120 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_INCORRECT_DATE',
121 p_tokens => STRINGARRAY('DATE'),
122 p_values => STRINGARRAY(l_expiry_date));
123
124 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
125 p_msg => x_error_msg,
126 p_category => 'D',
127 p_line_number => 0);
128 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
129 x_status := 1;
130 RETURN;
131 END;
132 END;
133
134 END IF;
135
136 BEGIN
137 -- check if there are previously loaded parcel lanes
138 SELECT 'UPDATE'
139 INTO l_action
140 FROM fte_lanes
141 WHERE lane_number like p_zone_name||'%'
142 AND editable_flag = 'N'
143 AND rownum = 1;
144 EXCEPTION
145 WHEN NO_DATA_FOUND THEN
146 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
147 RETURN;
148 END;
149
150 -- if there are previoiusly loaded parcel lanes,
151 -- check whether they need to be deleted or not
152
153 BEGIN
154 SELECT 'DELETE'
155 INTO l_action
156 FROM fte_lanes
157 WHERE lane_number like p_zone_name||'%'
158 AND editable_flag = 'N'
159 AND nvl(effective_date, SYSDATE) > l_expiry_date
160 AND rownum = 1;
161
162 EXCEPTION
163 WHEN NO_DATA_FOUND THEN
164
165 -- Update the Expiry_Date of the previously loaded lanes
166 -- to the previous date of the effective date of new lanes
167
168 -- Update EXPIRY_DATE of the previously loaded Parcel Lanes
169 UPDATE fte_lanes
170 SET expiry_date = l_expiry_date,
171 lane_number = lane_id||'-PARCEL',
172 last_update_date = SYSDATE
173 WHERE lane_number like p_zone_name||'%'
174 AND editable_flag = 'N';
175
176 -- Update Zone Name of the previously loaded Zones
177 UPDATE wsh_regions_tl t
178 SET t.zone = t.region_id||'-PARCEL'
179 WHERE t.zone like p_zone_name||'%'
180 AND t.region_id IN (SELECT region_id FROM wsh_regions
181 WHERE region_id=t.region_id AND region_type=11);
182
183 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
184 END;
185
186 -- mark the lanes to be deleted
187 -- and reuse the zone
188 BEGIN
189 UPDATE fte_lanes
190 SET editable_flag = 'D',
191 lane_number = lane_id||'-PARCEL',
192 last_update_date = SYSDATE
193 WHERE lane_number like p_zone_name||'%'
194 AND editable_flag = 'N';
195
196 -- Delete all the entries for the Zones from WSH_ZONE_REGIONS
197 DELETE wsh_zone_regions
198 WHERE parent_region_id in (SELECT region_id FROM wsh_regions_v
199 WHERE zone like p_zone_name||'%' AND region_type = 11);
200
201 END;
202
203 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
204 EXCEPTION
205 WHEN OTHERS THEN
206 x_error_msg := sqlerrm;
207 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
208 p_msg => x_error_msg,
209 p_category => 'O');
210 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
211 x_status := 1;
212 END OBSOLETE_PREVIOUS_DATA;
213
214 ----------------------------------------------------------------------------
215 -- PROCEDURE PROCESS_ZONES_AND_LANES
216 --
217 -- Purpose: make the zones and lanes
218 --
219 -- OUT parameters:
220 -- 1. x_status: status of the processing, -1 means no error
221 -- 2. x_error_msg: error message if any.
222 --
223 ----------------------------------------------------------------------------
224 PROCEDURE PROCESS_ZONES_AND_LANES(x_status OUT NOCOPY NUMBER,
225 x_error_msg OUT NOCOPY VARCHAR2) IS
226
227 l_dest_values STRINGARRAY;
228 l_basis VARCHAR2(10) := 'WEIGHT';
229 l_lane_table FTE_BULKLOAD_PKG.block_data_tbl;
230 l_rate_table FTE_BULKLOAD_PKG.block_data_tbl;
231 l_lane_data FTE_BULKLOAD_PKG.data_values_tbl;
232 l_service_data FTE_BULKLOAD_PKG.data_values_tbl;
233 l_rate_data FTE_BULKLOAD_PKG.data_values_tbl;
234 l_setup_data FTE_BULKLOAD_PKG.data_values_tbl;
235 l_lane_header FTE_BULKLOAD_PKG.block_header_tbl;
236 l_rate_header FTE_BULKLOAD_PKG.block_header_tbl;
237 l_zone_header FTE_BULKLOAD_PKG.block_header_tbl;
238 l_index NUMBER;
239
240 l_module_name CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.PROCESS_ZONES_AND_LANES';
241 BEGIN
242 FTE_UTIL_PKG.ENTER_DEBUG(l_module_name);
243
244 x_status := -1;
245
246 FOR i IN 1..FTE_VALIDATION_PKG.SERVICE.COUNT LOOP
247 l_lane_data(FTE_VALIDATION_PKG.SERVICE(i)) := null;
248 l_service_data(FTE_VALIDATION_PKG.SERVICE(i)) := null;
249 l_rate_data(FTE_VALIDATION_PKG.SERVICE(i)) := null;
250 l_lane_header(FTE_VALIDATION_PKG.SERVICE(i)) := i;
251 END LOOP;
252
253 FOR i IN 1..FTE_VALIDATION_PKG.SERVICE_RATING_SETUP.COUNT LOOP
254 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(i)) := null;
255 l_rate_header(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(i)) := i;
256 END LOOP;
257
258 FOR i IN 1..FTE_VALIDATION_PKG.ZONE.COUNT LOOP
259 l_zone_header(FTE_VALIDATION_PKG.ZONE(i)) := i;
260 END LOOP;
261
262 g_dest_zones(g_dest_zones.COUNT+1) := g_origin_zone;
263
264 FTE_REGION_ZONE_LOADER.PROCESS_ZONE(p_block_header => l_zone_header,
265 p_block_data => g_dest_zones,
266 p_line_number => NULL,
267 p_region_type => '11',
268 x_status => x_status,
269 x_error_msg => x_error_msg);
270
271 IF (x_status <> -1) THEN
272 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
273 RETURN;
274 END IF;
275
276 FOR i IN 1..g_dest_info.COUNT LOOP
277 l_dest_values := g_dest_info(i);
278
279 FOR j IN 1..g_service_columns.COUNT LOOP
280
281 IF (l_dest_values(j+1) IS NOT NULL) THEN
282 -- BASIS is always WEIGHT
283 -- Except when the Service Type is for Letter
284
285 IF (INSTR(UPPER(g_service_columns(j)), 'LETTER') > 0) THEN
286 l_basis := 'CONTAINER';
287 END IF;
288
289 l_lane_data(FTE_VALIDATION_PKG.SERVICE(2)) := 'SERVICE';
290 l_lane_data(FTE_VALIDATION_PKG.SERVICE(1)) := 'ADD';
291 l_lane_data(FTE_VALIDATION_PKG.SERVICE(4)) := l_dest_values(1)||'-'||g_dest_id;
292 l_lane_data(FTE_VALIDATION_PKG.SERVICE(11)) := g_origin_zone(FTE_VALIDATION_PKG.ZONE(2));
293 l_lane_data(FTE_VALIDATION_PKG.SERVICE(17)) := l_dest_values(1);
294 l_lane_data(FTE_VALIDATION_PKG.SERVICE(5)) := g_chart_info(2);
295 l_lane_data(FTE_VALIDATION_PKG.SERVICE(21)) := l_basis;
296 l_lane_data(FTE_VALIDATION_PKG.SERVICE(23)) := g_chart_info(6);
297 l_lane_data(FTE_VALIDATION_PKG.SERVICE(3)) := g_chart_info(4);
298 l_lane_data('EDITABLE_FLAG') := 'N';
299 l_lane_data(FTE_VALIDATION_PKG.SERVICE(32)) := g_chart_info(8);
300 l_lane_data(FTE_VALIDATION_PKG.SERVICE(33)) := g_chart_info(9);
301
302 g_dest_id := g_dest_id + 1;
303
304 l_service_data(FTE_VALIDATION_PKG.SERVICE(2)) := 'SERVICE_LEVEL';
305 l_service_data(FTE_VALIDATION_PKG.SERVICE(1)) := 'ADD';
306 l_service_data(FTE_VALIDATION_PKG.SERVICE(19)) := g_service_columns(j);
307
308 l_rate_data(FTE_VALIDATION_PKG.SERVICE(2)) := 'RATE_CHART';
309 l_rate_data(FTE_VALIDATION_PKG.SERVICE(1)) := 'ADD';
310 l_rate_data(FTE_VALIDATION_PKG.SERVICE(22)) := g_chart_info(5) || l_dest_values(j+1);
311
312 l_lane_table(l_lane_table.COUNT+1) := l_lane_data;
313 l_lane_table(l_lane_table.COUNT+1) := l_service_data;
314 l_lane_table(l_lane_table.COUNT+1) := l_rate_data;
315
316 FOR k IN 1..g_setup_info.COUNT LOOP
317
318 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
319 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, 'service', g_setup_info(k)(1));
320 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, 'service columns', g_service_columns(j));
321 END IF;
322
323 IF (g_setup_info(k)(1) IS NOT NULL AND g_setup_info(k)(1) = g_service_columns(j)) THEN
324
325 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(1)) := 'SYNC';
326 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(2)) := g_chart_info(4);
327 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(3)) := l_lane_data(FTE_VALIDATION_PKG.SERVICE(4));
328 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(4)) := g_setup_info(k)(2);
329 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(5)) := g_setup_info(k)(3);
330 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(6)) := g_setup_info(k)(4);
331 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(7)) := g_setup_info(k)(5);
332 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(8)) := g_setup_info(k)(6);
333 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(9)) := g_setup_info(k)(7);
334 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(10)) := g_setup_info(k)(8);
335
336 l_rate_table(l_rate_table.COUNT+1) := l_setup_data;
337
338 l_index := k + 1;
339
340 -- looping through the table after the service is found and before the next service
341 WHILE (l_index <= g_setup_info.COUNT AND g_setup_info(l_index)(1) IS NULL) LOOP
342 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(1)) := 'SYNC';
343 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(2)) := g_chart_info(4);
344 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(3)) := l_lane_data(FTE_VALIDATION_PKG.SERVICE(4));
345 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(4)) := g_setup_info(l_index)(2);
346 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(5)) := g_setup_info(l_index)(3);
347 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(6)) := g_setup_info(l_index)(4);
348 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(7)) := g_setup_info(l_index)(5);
349 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(8)) := g_setup_info(l_index)(6);
350 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(9)) := g_setup_info(l_index)(7);
351 l_setup_data(FTE_VALIDATION_PKG.SERVICE_RATING_SETUP(10)) := g_setup_info(l_index)(8);
352
353 l_rate_table(l_rate_table.COUNT+1) := l_setup_data;
354 l_index := l_index + 1;
355 END LOOP;
356 END IF;
357 END LOOP;
358 END IF;
359 END LOOP;
360 END LOOP;
361
362 FTE_LANE_LOADER.PROCESS_SERVICE(p_block_header => l_lane_header,
363 p_block_data => l_lane_table,
364 p_line_number => NULL,
365 x_status => x_status,
366 x_error_msg => x_error_msg);
367
368 IF (x_status <> -1) THEN
369 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
370 RETURN;
371 END IF;
372
373 FTE_LANE_LOADER.PROCESS_SERVICE_RATING_SETUP(p_block_header => l_rate_header,
374 p_block_data => l_rate_table,
375 p_line_number => NULL,
376 x_status => x_status,
377 x_error_msg => x_error_msg);
378
379 IF (x_status <> -1) THEN
380 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
381 RETURN;
382 END IF;
383
384 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
385 EXCEPTION
386 WHEN OTHERS THEN
387 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
388 p_msg => sqlerrm,
389 p_category => 'O');
390 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
391 x_status := 1;
392 END PROCESS_ZONES_AND_LANES;
393
394 ----------------------------------------------------------------------------
395 -- PROCEDURE PROCESS_DATA
396 --
397 -- Purpose: Call appropriate process function according to the type.
398 --
399 -- IN parameters:
400 -- 1. p_type: type of the block (Rating zone chart, rating setup, orign, destination)
401 -- 2. p_table: pl/sql table of STRINGARRAY containing the block information
402 -- 3. p_line_number: line number for the beginning of the block
403 --
404 -- OUT parameters:
405 -- 1. x_status: status of the processing, -1 means no error
406 -- 2. x_error_msg: error message if any.
407 ----------------------------------------------------------------------------
408 PROCEDURE PROCESS_DATA (p_type IN VARCHAR2,
409 p_block_header IN FTE_BULKLOAD_PKG.block_header_tbl,
410 p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
411 p_line_number IN NUMBER,
412 x_status OUT NOCOPY NUMBER,
413 x_error_msg OUT NOCOPY VARCHAR2) IS
414 l_module_name CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.PROCESS_DATA';
415 BEGIN
416 FTE_UTIL_PKG.ENTER_DEBUG(l_module_name);
417
418 x_status := -1;
419
420 IF (p_type = 'RATING_ZONE_CHART') THEN
421 PROCESS_RATING_ZONE_CHART(p_block_header => p_block_header,
422 p_block_data => p_block_data,
423 p_line_number => p_line_number,
424 x_status => x_status,
425 x_error_msg => x_error_msg);
426 ELSIF (p_type = 'RATING_SETUP') THEN
427 PROCESS_RATING_SETUP(p_block_header => p_block_header,
428 p_block_data => p_block_data,
429 p_line_number => p_line_number,
430 x_status => x_status,
431 x_error_msg => x_error_msg);
432 ELSIF (p_type = 'ORIGIN') THEN
433 PROCESS_ORIGIN(p_block_header => p_block_header,
434 p_block_data => p_block_data,
435 p_line_number => p_line_number,
436 x_status => x_status,
437 x_error_msg => x_error_msg);
438 ELSE
439 PROCESS_DESTINATION(p_block_data => p_block_data,
440 p_line_number => p_line_number,
441 x_status => x_status,
442 x_error_msg => x_error_msg);
443 END IF;
444 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
445 EXCEPTION
446 WHEN OTHERS THEN
447 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
448 p_msg => sqlerrm,
449 p_category => 'O',
450 p_line_number => p_line_number);
451 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
452 x_status := 1;
453 END PROCESS_DATA;
454
455 ----------------------------------------------------------------------------
456 -- PROCEDURE PROCESS_RATING_ZONE_CHART
457 --
458 -- Purpose: process the lines in p_table for rating zone chart
459 --
460 -- IN parameters:
461 -- 1. p_table: pl/sql table of STRINGARRAY containing the block information
462 -- 2. p_line_number: line number for the beginning of the block
463 --
464 -- OUT parameters:
465 -- 1. x_status: status of the processing, -1 means no error
466 -- 2. x_error_msg: error message if any.
467 ----------------------------------------------------------------------------
468
469 PROCEDURE PROCESS_RATING_ZONE_CHART(p_block_header IN FTE_BULKLOAD_PKG.block_header_tbl,
470 p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
471 p_line_number IN NUMBER,
472 x_status OUT NOCOPY NUMBER,
473 x_error_msg OUT NOCOPY VARCHAR2) IS
474
475 l_values FTE_BULKLOAD_PKG.data_values_tbl;
476 l_module_name CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.PROCESS_RATING_ZONE_CHART';
477 BEGIN
478 FTE_UTIL_PKG.ENTER_DEBUG(l_module_name);
479
480 x_status := -1;
481
482 --verify the column name
483 FTE_VALIDATION_PKG.VALIDATE_COLUMNS(p_keys => p_block_header,
484 p_type => 'RATING_ZONE_CHART',
485 p_line_number => p_line_number+1,
486 x_status => x_status,
487 x_error_msg => x_error_msg);
488 IF (x_status <> -1) THEN
489 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
490 RETURN;
491 END IF;
492
493 --now the body of the block
494 FOR i IN p_block_data.FIRST..p_block_data.LAST LOOP
495 l_values := p_block_data(i);
496
497 FTE_VALIDATION_PKG.VALIDATE_RATING_ZONE_CHART(p_values => l_values,
498 p_line_number => p_line_number+i+1,
499 p_chart_info => g_chart_info,
500 x_status => x_status,
501 x_error_msg => x_error_msg);
502
503 IF (x_status <> -1) THEN
504 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
505 RETURN;
506 END IF;
507
508 END LOOP;
509 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
510 EXCEPTION
511 WHEN OTHERS THEN
512 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
513 p_msg => sqlerrm,
514 p_category => 'O',
515 p_line_number => p_line_number);
516 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
517 x_status := 1;
518 END PROCESS_RATING_ZONE_CHART;
519
520 ----------------------------------------------------------------------------
521 -- PROCEDURE PROCESS_RATING_SETUP
522 --
523 -- Purpose: process the lines in p_table for rating setup
524 --
525 -- IN parameters:
526 -- 1. p_table: pl/sql table of STRINGARRAY containing the block information
527 -- 2. p_line_number: line number for the beginning of the block
528 --
529 -- OUT parameters:
530 -- 1. x_status: status of the processing, -1 means no error
531 -- 2. x_error_msg: error message if any.
532 ----------------------------------------------------------------------------
533
534 PROCEDURE PROCESS_RATING_SETUP(p_block_header IN FTE_BULKLOAD_PKG.block_header_tbl,
535 p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
536 p_line_number IN NUMBER,
537 x_status OUT NOCOPY NUMBER,
538 x_error_msg OUT NOCOPY VARCHAR2) IS
539
540 l_values FTE_BULKLOAD_PKG.data_values_tbl;
541 l_module_name CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.PROCESS_RATING_SETUP';
542 BEGIN
543 FTE_UTIL_PKG.ENTER_DEBUG(l_module_name);
544
545 x_status := -1;
546
547 --verify the column name
548 FTE_VALIDATION_PKG.VALIDATE_COLUMNS(p_keys => p_block_header,
549 p_type => 'RATING_SETUP',
550 p_line_number => p_line_number+1,
551 x_status => x_status,
552 x_error_msg => x_error_msg);
553 IF (x_status <> -1) THEN
554 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
555 RETURN;
556 END IF;
557
558 --now the body of the block
559 FOR i IN p_block_data.FIRST..p_block_data.LAST LOOP
560 l_values := p_block_data(i);
561
562 FTE_VALIDATION_PKG.VALIDATE_RATING_SETUP(p_values => l_values,
563 p_line_number => p_line_number+i+1,
564 p_setup_info => g_setup_info,
565 p_last_service_type => g_last_service_type,
566 x_status => x_status,
567 x_error_msg => x_error_msg);
568 IF (x_status <> -1) THEN
569 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
570 RETURN;
571 END IF;
572
573 END LOOP;
574 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
575 EXCEPTION
576 WHEN OTHERS THEN
577 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
578 p_msg => sqlerrm,
579 p_category => 'O',
580 p_line_number => p_line_number);
581 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
582 x_status := 1;
583 END PROCESS_RATING_SETUP;
584
585 ----------------------------------------------------------------------------
586 -- PROCEDURE PROCESS_ORIGIN
587 --
588 -- Purpose: process the lines in p_table for origin
589 --
590 -- IN parameters:
591 -- 1. p_table: pl/sql table of STRINGARRAY containing the block information
592 -- 2. p_line_number: line number for the beginning of the block
593 --
594 -- OUT parameters:
595 -- 1. x_status: status of the processing, -1 means no error
596 -- 2. x_error_msg: error message if any.
597 ----------------------------------------------------------------------------
598
599 PROCEDURE PROCESS_ORIGIN(p_block_header IN FTE_BULKLOAD_PKG.block_header_tbl,
600 p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
601 p_line_number IN NUMBER,
602 x_status OUT NOCOPY NUMBER,
603 x_error_msg OUT NOCOPY VARCHAR2) IS
604
605 l_origin_postal VARCHAR2(200);
606 l_origin_country VARCHAR2(200);
607 l_origin_state VARCHAR2(200);
608 l_origin_city VARCHAR2(200);
609 l_origin_postal_from VARCHAR2(100);
610 l_origin_postal_to VARCHAR2(100);
611 l_values FTE_BULKLOAD_PKG.data_values_tbl;
612 l_origin STRINGARRAY;
613
614 l_module_name CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.PROCESS_ORIGIN';
615 BEGIN
616 FTE_UTIL_PKG.ENTER_DEBUG(l_module_name);
617
618 x_status := -1;
619
620 --verify the column name
621 FTE_VALIDATION_PKG.VALIDATE_COLUMNS(p_keys => p_block_header,
622 p_type => 'ORIGIN',
623 p_line_number => p_line_number+1,
624 x_status => x_status,
625 x_error_msg => x_error_msg);
626 IF (x_status <> -1) THEN
627 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
628 RETURN;
629 END IF;
630
631 --now the body of the block
632 FOR i IN p_block_data.FIRST..p_block_data.LAST LOOP
633 l_values := p_block_data(i);
634
635 FTE_VALIDATION_PKG.VALIDATE_ORIGIN(p_values => l_values,
636 p_line_number => p_line_number+i+1,
637 p_origin => l_origin,
638 x_status => x_status,
639 x_error_msg => x_error_msg);
640
641 IF (x_status <> -1) THEN
642 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
643 RETURN;
644 END IF;
645
646 l_origin_postal := l_origin(1);
647 l_origin_country := l_origin(2);
648 l_origin_state := l_origin(3);
649 l_origin_city := l_origin(4);
650
651 GET_POSTAL_PART(p_postal => l_origin_postal);
652
653 l_origin_postal_from := g_postal_from;
654 l_origin_postal_to := g_postal_to;
655
656 g_origin_zone(FTE_VALIDATION_PKG.ZONE(1)) := 'ADD';
657 g_origin_zone(FTE_VALIDATION_PKG.ZONE(2)) := g_chart_info(1) || '-' || l_origin_postal_from;
658 g_origin_zone(FTE_VALIDATION_PKG.ZONE(5)) := l_origin_city;
659 g_origin_zone(FTE_VALIDATION_PKG.ZONE(4)) := l_origin_state;
660 g_origin_zone(FTE_VALIDATION_PKG.ZONE(3)) := l_origin_country;
661 g_origin_zone(FTE_VALIDATION_PKG.ZONE(6)) := l_origin_postal_from;
662 g_origin_zone(FTE_VALIDATION_PKG.ZONE(7)) := l_origin_postal_to;
663
664 -- enhancement for patchset I : hjpark on 12/13/2002
665 -- make the previously loaded data obsolete, if any
666
667 OBSOLETE_PREVIOUS_DATA(p_zone_name => g_chart_info(1) || '-' || l_origin_postal_from,
668 x_status => x_status,
669 x_error_msg => x_error_msg);
670
671 IF (x_status <> -1) THEN
672 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
673 RETURN;
674 END IF;
675
676 END LOOP;
677 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
678 EXCEPTION
679 WHEN OTHERS THEN
680 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
681 p_msg => sqlerrm,
682 p_category => 'O',
683 p_line_number => p_line_number);
684 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
685 x_status := 1;
686 END PROCESS_ORIGIN;
687
688 ----------------------------------------------------------------------------
689 -- PROCEDURE PROCESS_DESTINATION
690 --
691 -- Purpose: process the lines in p_table for destination
692 --
693 -- IN parameters:
694 -- 1. p_table: pl/sql table of STRINGARRAY containing the block information
695 -- 2. p_line_number: line number for the beginning of the block
696 --
697 -- OUT parameters:
698 -- 1. x_status: status of the processing, -1 means no error
699 -- 2. x_error_msg: error message if any.
700 ----------------------------------------------------------------------------
701
702 PROCEDURE PROCESS_DESTINATION(p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
703 p_line_number IN NUMBER,
704 x_status OUT NOCOPY NUMBER,
705 x_error_msg OUT NOCOPY VARCHAR2) IS
706
707 l_dest_postal VARCHAR2(200);
708 l_dest_country VARCHAR2(200);
709 l_dest_state VARCHAR2(200);
710 l_dest_city VARCHAR2(200);
711 l_dest_postal_from VARCHAR2(100);
712 l_dest_postal_to VARCHAR2(100);
713 l_values FTE_BULKLOAD_PKG.data_values_tbl;
714 l_dest_zone_name VARCHAR2(200);
715 l_services service_array := service_array(); -- name of the services
716 l_service_count NUMBER := 0; -- number of services
717 l_name_value VARCHAR2(2000);
718 l_dest_values STRINGARRAY := STRINGARRAY();
719 l_exists BOOLEAN := FALSE;
720 l_dest STRINGARRAY := STRINGARRAY();
721 l_count NUMBER;
722
723 l_module_name CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.PROCESS_DESTINATION';
724 BEGIN
725 FTE_UTIL_PKG.ENTER_DEBUG(l_module_name);
726
727 x_status := -1;
728
729 --+
730 -- Do not verify the column name for destination since it's dynamic
731 -- find out the mapping for column number to service columns
732 --+
733 FOR i IN 1..FTE_BULKLOAD_PKG.g_block_header_index.COUNT LOOP
734
735 IF (FTE_BULKLOAD_PKG.g_block_header_index(i) NOT IN ('POSTAL_CODE_RANGE', 'COUNTRY', 'STATE', 'CITY')) THEN
736 --+
737 -- If not those column names, then it's a service. Map it
738 --+
739 l_service_count := l_service_count + 1;
740 l_services.EXTEND;
741 l_services(l_service_count) := i;
742 g_service_columns.EXTEND;
743 g_service_columns(g_service_columns.COUNT) := FTE_BULKLOAD_PKG.g_block_header_index(i);
744
745 END IF;
746
747 END LOOP;
748
749 --+
750 -- process the body of the block
751 --+
752 FOR i IN p_block_data.FIRST..p_block_data.LAST LOOP
753
754 l_values := p_block_data(i);
755
756 FTE_VALIDATION_PKG.VALIDATE_DESTINATION(p_values => l_values,
757 p_line_number => p_line_number+i+1,
758 p_price_prefix => g_chart_info(5),
759 p_carrier_id => TO_NUMBER(g_chart_info(7)),
760 p_origin_zone => g_origin_zone,
761 p_service_count => l_service_count,
762 p_services => l_services,
763 p_dest => l_dest,
764 x_status => x_status,
765 x_error_msg => x_error_msg);
766
767 IF (x_status <> -1) THEN
768 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
769 RETURN;
770 END IF;
771
772 l_dest_postal := l_dest(1);
773 l_dest_country := l_dest(2);
774 l_dest_state := l_dest(3);
775 l_dest_city := l_dest(4);
776
777 GET_POSTAL_PART(p_postal => l_dest_postal);
778
779 l_dest_postal_from := g_postal_from;
780 l_dest_postal_to := g_postal_to;
781
782 l_dest_zone_name := g_origin_zone(FTE_VALIDATION_PKG.ZONE(2));
783
784 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
785 FTE_UTIL_PKG.WRITE_LogFile(l_module_name,'l_dest_zone_name',l_dest_zone_name);
786 END IF;
787
788 l_name_value := null;
789
790 FOR i IN 1..l_service_count LOOP
791 l_name_value := l_name_value || '-' || l_values(FTE_BULKLOAD_PKG.g_block_header_index(l_services(i)));
792 END LOOP;
793
794 FOR i in 1..g_dest_indexes.COUNT LOOP
795 IF (g_dest_indexes(i)(1) = l_name_value) THEN
796 l_dest_zone_name := l_dest_zone_name || '-' || g_dest_indexes(i)(2);
797 END IF;
798 END LOOP;
799
800 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
801 FTE_UTIL_PKG.WRITE_LogFile(l_module_name,'l_name_value',l_name_value);
802 FTE_UTIL_PKG.WRITE_LogFile(l_module_name,'l_dest_zone_name',l_dest_zone_name);
803 END IF;
804
805 --+
806 -- l_name_value was not found in the g_dest_indexes table
807 --+
808 IF (l_dest_zone_name = g_origin_zone(FTE_VALIDATION_PKG.ZONE(2))) THEN
809 g_dest_indexes(g_dest_indexes.COUNT+1) := STRINGARRAY(l_name_value, g_dest_id);
810 l_dest_zone_name := l_dest_zone_name || '-' || g_dest_id;
811 g_dest_id := g_dest_id + 1;
812 END IF;
813
814 l_exists := FALSE;
815
816 FOR i IN 1..g_dest_info.COUNT LOOP
817 IF (g_dest_info(i)(1) = l_dest_zone_name) THEN
818 l_exists := TRUE;
819 EXIT;
820 END IF;
821 END LOOP;
822
823 IF (NOT l_exists) THEN
824 l_dest_values := STRINGARRAY();
825 l_dest_values.EXTEND;
826 l_dest_values(l_dest_values.COUNT) := l_dest_zone_name;
827
828 FOR i IN 1..l_service_count LOOP
829 l_dest_values.EXTEND;
830 l_dest_values(l_dest_values.COUNT) := l_values(FTE_BULKLOAD_PKG.g_block_header_index(l_services(i)));
831 END LOOP;
832 g_dest_info(g_dest_info.COUNT+1) := l_dest_values;
833
834 END IF;
835
836 l_count := g_dest_zones.COUNT+1;
837 g_dest_zones(l_count)(FTE_VALIDATION_PKG.ZONE(1)) := 'ADD';
838 g_dest_zones(l_count)(FTE_VALIDATION_PKG.ZONE(2)) := l_dest_zone_name;
839 g_dest_zones(l_count)(FTE_VALIDATION_PKG.ZONE(5)) := l_dest_city;
840 g_dest_zones(l_count)(FTE_VALIDATION_PKG.ZONE(4)) := l_dest_state;
841 g_dest_zones(l_count)(FTE_VALIDATION_PKG.ZONE(3)) := l_dest_country;
842 g_dest_zones(l_count)(FTE_VALIDATION_PKG.ZONE(6)) := l_dest_postal_from;
843 g_dest_zones(l_count)(FTE_VALIDATION_PKG.ZONE(7)) := l_dest_postal_to;
844
845 END LOOP;
846
847 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
848 EXCEPTION
849 WHEN OTHERS THEN
850 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
851 p_msg => sqlerrm,
852 p_category => 'O',
853 p_line_number => p_line_number);
854 FTE_UTIL_PKG.EXIT_DEBUG(l_module_name);
855 x_status := 1;
856 END PROCESS_DESTINATION;
857
858 END FTE_PARCEL_LOADER;