DBA Data[Home] [Help]

PACKAGE BODY: APPS.FTE_BULK_DTT_PKG

Source


1 PACKAGE BODY FTE_BULK_DTT_PKG AS
2 /* $Header: FTEDISUB.pls 115.7 2004/01/27 00:41:21 ablundel noship $ */
3 -- -------------------------------------------------------------------------- --
4 --                                                                            --
5 -- NAME:        FTE_BULK_DTT_PKG                                              --
6 --                                                                            --
7 -- TYPE:        PACKAGE BODY                                                  --
8 --                                                                            --
9 -- DESCRIPTION: Read a file containing DTT data from the directory specified  --
10 --              in FTE_BULKLOAD_PKG.GET_DIRNAME and create location/mileage   --
11 --              records in FTE_LOCATION_MILEAGES table                        --
12 --                                                                            --
13 --              PROCEDURE BULK_LOAD_DTT called from BulkLoadDataCO.java to    --
14 --              start the loading process. submits a request to a concurrent  --
15 --              program to execute the loading process                        --
16 --                                                                            --
17 --              PROCEDURE LOAD_DTT_FILE called by the concurrent program to   --
18 --              execute the loading of the Distance and Transit Tine (DTT)    --
19 --              file                                                          --
20 --                                                                            --
21 --                                                                            --
22 -- CHANGE CONTROL LOG                                                         --
23 --                                                                            --
24 -- DATE        VERSION  BY        BUG      DESCRIPTION                        --
25 -- ----------  -------  --------  -------  ---------------------------------- --
26 -- 2003/07/17  J        ABLUNDEL           Created.                           --
27 --                                                                            --
28 -- 2003/12/08  J        ABLUNDEL  3301222  PROCEDURE: READ_DTT_FILE           --
29 --                                         replaced the MERGE INTO statement  --
30 --                                         with some code that is 8i compatibl--
31 --                                         as the MERGE statement can only be --
32 --                                         used with 8i or higher             --
33 --                                                                            --
34 -- 2003/12/17  J        ABLUNDEL  3325486  PROCEDURE: READ_DTT_FILE           --
35 --                                         Added a REPLACE in the substring   --
36 --                                         to remove tabs from the mileage and--
37 --                                         time return values. NB The TAB     --
38 --                                         equates to 1 space                 --
39 --                                                                            --
40 -- 2004/01/22  J        ABLUNDEL  3381771  PROCEDURE: READ_DTT_FILE           --
41 --                                         Added a check to se if the input   --
42 --                                         line is blank or contains only     --
43 --                                         space or tab chars                 --
44 --                                                                            --
45 -- -------------------------------------------------------------------------- --
46 
47 -- -------------------------------------------------------------------------- --
48 -- Global Package Variables                                                   --
49 -- ------------------------                                                   --
50 --                                                                            --
51 -- -------------------------------------------------------------------------- --
52 G_PKG_NAME               CONSTANT VARCHAR2(50)   := 'FTE_BULK_DTT_PKG';
53 g_user_id                CONSTANT NUMBER         := FND_GLOBAL.USER_ID;
54 
55 g_bulk_insert_limit      CONSTANT NUMBER := 250;
56 g_total_numcharts        NUMBER;
57 g_chart_count_temp       NUMBER         := 0;
58 
59 g_valid_date             DATE;
60 g_valid_date_string      VARCHAR2(20);
61 g_scac                   VARCHAR2(10);
62 
63 g_ret_dist_col_name      CONSTANT VARCHAR2(30) := 'RETURNDIST';
64 g_ret_time_col_name      CONSTANT VARCHAR2(30) := 'RETURNTIME';
65 
66 
67 -- AXE
68 g_time_hour              CONSTANT VARCHAR2(4)  := 'Hour';
69 g_time_minute            CONSTANT VARCHAR2(6)  := 'Minute';
70 g_distance_mile          CONSTANT VARCHAR2(4)  := 'Mile';
71 g_distance_kilometer     CONSTANT VARCHAR2(9)  := 'Kilometer';
72 
73 
74 -- -------------------------------------------------------------------------- --
75 --                                                                            --
76 -- NAME:                PROCEDURE BULK_LOAD_DTT                               --
77 --                                                                            --
78 -- TYPE:                PROCEDURE                                             --
79 --                                                                            --
80 -- PARAMETERS (IN OUT): p_load_id        IN NUMBER   The load id of the job   --
81 --                      p_src_filename   IN VARCHAR2                          --
82 --                      p_resp_id        IN NUMBER                            --
83 --                      p_resp_appl_id   IN NUMBER                            --
84 --                      p_user_id        IN NUMBER                            --
85 --                      p_user_debug     IN NUMBER                            --
86 --                                                                            --
87 -- PARAMETERS (OUT):    x_request_id: The request id of the bulkload process  --
88 --                      x_error_msg_text:                                     --
89 --                                                                            --
90 -- RETURN:              n/a                                                   --
91 --                                                                            --
92 -- DESCRIPTION:         Purpose This is the starting point of the bulkloading --
93 --                      process. Submits a request to a concurrent program,   --
94 --                      that starts the location/mileage loading process      --
95 --                      Called from $fte/java/catalog/BulkLoadDataCO.java for --
96 --                      Uploading DTT file                                    --
97 --                                                                            --
98 --                                                                            --
99 -- CHANGE CONTROL LOG                                                         --
100 -- ------------------                                                         --
101 --                                                                            --
102 -- DATE        VERSION  BY        BUG      DESCRIPTION                        --
103 -- ----------  -------  --------  -------  ---------------------------------- --
104 -- 2003/07/17  J        ABLUNDEL           Created                            --
105 --                                                                            --
106 -- -------------------------------------------------------------------------- --
107 PROCEDURE BULK_LOAD_DTT(p_load_id        IN         NUMBER,
108                         p_src_filename   IN         VARCHAR2,
109                         p_resp_id        IN         NUMBER,
110                         p_resp_appl_id   IN         NUMBER,
111                         p_user_id        IN         NUMBER,
112                         p_user_debug     IN         NUMBER,
113                         x_request_id     OUT NOCOPY NUMBER,
114                         x_error_msg_text OUT NOCOPY VARCHAR2) IS
115 
116 
117 
118 x_src_filedir  VARCHAR2(100);
119 l_debug_on     BOOLEAN;
120 l_module_name  CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.' ||'BULK_LOAD_DTT';
121 l_error_text   VARCHAR2(2000);
122 
123 
124 BEGIN
125 
126 
127    g_user_debug     := p_user_debug;
128    --
129    -- SETUP DEBUGGING
130    --
131    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
132    IF l_debug_on IS NULL THEN
133       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
134    END IF;
135 
136    IF (g_user_debug = 1) THEN
137      l_debug_on := TRUE;
138    END IF;
139 
140 
141     IF l_debug_on THEN
142       WSH_DEBUG_SV.push(l_module_name);
143       WSH_DEBUG_SV.logmsg(l_module_name,'---------------------------------');
144       WSH_DEBUG_SV.logmsg(l_module_name,'-------- INPUT PARAMETERS ------');
145       WSH_DEBUG_SV.log(l_module_name,'Procedure = ',l_module_name);
146       WSH_DEBUG_SV.log(l_module_name,'p_load_id',p_load_id);
147       WSH_DEBUG_SV.log(l_module_name,'p_src_filename',p_src_filename);
148       WSH_DEBUG_SV.log(l_module_name,'p_resp_id',p_resp_id);
149       WSH_DEBUG_SV.log(l_module_name,'p_resp_appl_id',p_resp_appl_id);
150       WSH_DEBUG_SV.log(l_module_name,'p_user_id',p_user_id);
151       WSH_DEBUG_SV.log(l_module_name,'p_user_debug',p_user_debug);
152       WSH_DEBUG_SV.logmsg(l_module_name,'---------------------------------');
153    END IF;
154 
155 
156    IF l_debug_on THEN
157       WSH_DEBUG_SV.logmsg(l_module_name,'Calling fnd_global.apps_initialize with p_user_id,p_resp_id,p_resp_appl_id');
158    END IF;
159 
160    fnd_global.apps_initialize(user_id      => p_user_id,
161                               resp_id      => p_resp_id,
162                               resp_appl_id => p_resp_appl_id);
163 
164 
165 
166     IF l_debug_on THEN
167       WSH_DEBUG_SV.logmsg(l_module_name,'Calling FTE_BULKLOAD_PKG.GET_UPLOAD_DIR to get the file directory');
168     END IF;
169 
170 
171     x_src_filedir := FTE_BULKLOAD_PKG.GET_UPLOAD_DIR;
172 
173 
174     IF l_debug_on THEN
175       WSH_DEBUG_SV.log(l_module_name,'x_src_filedir = ',x_src_filedir);
176     END IF;
177 
178 
179     IF l_debug_on THEN
180       WSH_DEBUG_SV.logmsg(l_module_name,'Calling FND_REQUEST.SUBMIT_REQUEST to submoit the request to the concurrent program');
181     END IF;
182 
183 
184     x_request_id := FND_REQUEST.SUBMIT_REQUEST(application  => 'FTE',
185                                                program      => 'FTE_BULK_DTT_LOADER',
186                                                description  => null,
187                                                start_time   => null,
188                                                sub_request  => false,
189                                                argument1    => p_load_id,
190                                                argument2    => p_src_filename,
191                                                argument3    => x_src_filedir,
192                                                argument4    => p_user_debug);
193 
194     IF l_debug_on THEN
195       WSH_DEBUG_SV.log(l_module_name,'x_request_id = ',x_request_id);
196     END IF;
197 
198 
199     x_error_msg_text := fnd_message.get;
200 
201     commit;
202 
203     IF l_debug_on THEN
204        WSH_DEBUG_SV.log(l_module_name, 'x_error_msg_text', x_error_msg_text);
205        WSH_DEBUG_SV.log(l_module_name, 'x_src_filedir', x_src_filedir);
206        WSH_DEBUG_SV.log(l_module_name, 'x_request_id', x_request_id);
207        WSH_DEBUG_SV.log(l_module_name, 'p_user_id', p_user_id);
208        WSH_DEBUG_SV.log(l_module_name, 'p_resp_id', p_resp_id);
209        WSH_DEBUG_SV.log(l_module_name, 'p_resp_appl_id', p_resp_appl_id);
210        WSH_DEBUG_SV.pop(l_module_name);
211     END IF;
212 
213     RETURN;
214 
215 EXCEPTION
216    WHEN OTHERS THEN
217       l_error_text := sqlerrm;
218       Fnd_File.Put_Line(Fnd_File.Log, 'Unexpected Error in Procedure BULK_LOAD_DTT' || sqlerrm);
219 
220       --
221       -- Debug Statements
222       --
223       IF l_debug_on THEN
224          WSH_DEBUG_SV.logmsg(l_module_name,'THE UNEXPECTED ERROR FROM FTE_BULK_DTT_PKG.BULK_LOAD_DTT IS ' ||l_error_text);
225          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||l_error_text,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
226          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
227       END IF;
228 
229       RETURN;
230 
231 
232 END BULK_LOAD_DTT;
233 
234 
235 
236 
237 -- -------------------------------------------------------------------------- --
238 --                                                                            --
239 -- NAME:                PROCEDURE LOAD_DTT_FILE                               --
240 --                                                                            --
241 -- TYPE:                PROCEDURE                                             --
242 --                                                                            --
243 -- PARAMETERS (IN OUT): p_load_id        IN NUMBER   The load id of the job   --
244 --                      p_src_filename   IN VARCHAR2                          --
245 --                      p_src_filedir    IN VARCHAR2                          --
246 --                      p_user_debug     IN NUMBER                            --
247 --                                                                            --
248 --                      1. p_load_id: The load id of the bulkload job.        --
249 --                      2. p_src_filename: The filename of the file containing--
250 --                                         the DTT data.                      --
251 --                      3. p_src_filedir: The directory containing the DTT    --
252 --                                        data file. There should be no       --
253 --                                        trailing '/', and this directory    --
254 --                                        should be readable by UTL_FILE      --
255 --                      4. p_user_debug: turns the debugger on                --
256 --                                                                            --
257 -- PARAMETERS (OUT):    p_errbuf: A buffer of error messages                  --
258 --                      p_retcode: The return code. A return code of '2'      --
259 --                                 specifies ERROR                            --
260 --                                                                            --
261 -- RETURN:              n/a                                                   --
262 --                                                                            --
263 -- DESCRIPTION:         Runs the entire DTT Bulkloading process               --
264 --                      Called from the FTE_BULK_DTT_LOADER concurrent program--
265 --                                                                            --
266 --                                                                            --
267 -- CHANGE CONTROL LOG                                                         --
268 -- ------------------                                                         --
269 --                                                                            --
270 -- DATE        VERSION  BY        BUG      DESCRIPTION                        --
271 -- ----------  -------  --------  -------  ---------------------------------- --
272 -- 2003/07/17  J        ABLUNDEL           Created                            --
273 --                                                                            --
274 -- -------------------------------------------------------------------------- --
275 PROCEDURE LOAD_DTT_FILE(p_errbuf        OUT NOCOPY VARCHAR2,
276                         p_retcode       OUT NOCOPY VARCHAR2,
277                         p_load_id       IN NUMBER,
278                         p_src_filename  IN VARCHAR2,
279                         p_src_filedir   IN VARCHAR2,
280                         p_user_debug    IN NUMBER) IS
281 
282 
283 
284 g_first_time           BOOLEAN;
285 x_status               NUMBER;
286 
287 l_debug_on     BOOLEAN;
288 l_module_name  CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.' ||'LOAD_DTT_FILE';
289 l_error_text   VARCHAR2(2000);
290 
291 
292 BEGIN
293 
294    FND_FILE.PUT_LINE(FND_FILE.log, 'LOAD_DTT_FILE');
295 
296    x_status          := -1;
297    g_user_debug      := p_user_debug;
298    g_first_time      := FIRST_TIME;
299 
300    --
301    -- SETUP DEBUGGING
302    --
303    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
304    IF l_debug_on IS NULL THEN
305       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
306    END IF;
307 
308    IF (g_user_debug = 1) THEN
309      l_debug_on := TRUE;
310    END IF;
311 
312 
313    --
314    -- Debug Statements
315    --
316    IF l_debug_on THEN
317       WSH_DEBUG_SV.push(l_module_name);
318       WSH_DEBUG_SV.logmsg(l_module_name,'-------LOAD_DTT_FILE-------');
319       WSH_DEBUG_SV.logmsg(l_module_name,'-------- INPUT PARAMETERS ------');
320       WSH_DEBUG_SV.log(l_module_name,'p_load_id',p_load_id);
321       WSH_DEBUG_SV.log(l_module_name,'p_src_filename',p_src_filename);
322       WSH_DEBUG_SV.log(l_module_name,'p_src_filedir',p_src_filedir);
323       WSH_DEBUG_SV.log(l_module_name,'p_user_debug',p_user_debug);
324       WSH_DEBUG_SV.logmsg(l_module_name,'---------------------------------');
325    END IF;
326 
327 
328    --
329    -- Debug Statements
330    --
331    IF l_debug_on THEN
332       WSH_DEBUG_SV.logmsg(l_module_name,'Check If this is the first time by calling function FIRST_TIME');
333    END IF;
334 
335    IF (FIRST_TIME) THEN
336 
337       --
338       -- Debug Statements
339       --
340       IF l_debug_on THEN
341          WSH_DEBUG_SV.logmsg(l_module_name,'This is the first time calling FTE_BULK_DTT_PKG.READ_DTT_FILE');
342          WSH_DEBUG_SV.logmsg(l_module_name,'with parameters: p_src_filedir,p_src_filename,p_load_id');
343       END IF;
344 
345       FND_FILE.PUT_LINE(FND_FILE.log, 'Calling READ_DTT_FILE');
346 
347       FTE_BULK_DTT_PKG.READ_DTT_FILE(p_src_filedir,
348                                      p_src_filename,
349                                      p_load_id,
350                                      p_errbuf,
351                                      x_status);
352 
353       --
354       -- Debug Statements
355       --
356       IF l_debug_on THEN
357          WSH_DEBUG_SV.logmsg(l_module_name,'Back from FTE_BULK_DTT_PKG.READ_DTT_FILE');
358          WSH_DEBUG_SV.log(l_module_name,'x_status',x_status);
359       END IF;
360 
361    END IF;
362 
363    IF (x_status = -1) THEN
364       --
365       -- Debug Statements
366       --
367       IF l_debug_on THEN
368          WSH_DEBUG_SV.logmsg(l_module_name,'The file Reading and upload was successful');
369       END IF;
370 
371       --
372       -- Concurrent Manager expects 0 for success.
373       --
374       p_retcode := 0;
375       p_errbuf := 'COMPLETED DTT LOADING SUCCESSFULLY';
376    ELSE
377       --
378       -- Debug Statements
379       --
380       IF l_debug_on THEN
381          WSH_DEBUG_SV.logmsg(l_module_name,'Errors occurred during the upload');
382       END IF;
383 
384       p_retcode := 2;
385       p_errbuf := 'COMPLETED WITH ERRORS. ' || p_errbuf || '. Please Check Logs for more details.';
386    END IF;
387 
388 
389    --
390    -- Debug Statements
391    --
392    IF l_debug_on THEN
393       WSH_DEBUG_SV.pop(l_module_name);
394    END IF;
395    --
396    RETURN;
397 
398 
399 EXCEPTION
400    WHEN OTHERS THEN
401       l_error_text := SQLERRM;
402       FND_FILE.PUT_LINE(FND_FILE.LOG, '*****ERROR**** '||l_error_text);
403       p_retcode := 2;
404       p_errbuf  := p_errbuf || sqlerrm;
405 
406       --
407       -- Debug Statements
408       --
409       IF l_debug_on THEN
410          WSH_DEBUG_SV.logmsg(l_module_name,'THE UNEXPECTED ERROR FROM FTE_BULK_DTT_PKG.LOAD_DTT_FILE IS ' ||l_error_text);
411          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||l_error_text,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
412          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
413       END IF;
414 
415       RETURN;
416 
417 
418 END LOAD_DTT_FILE;
419 
420 
421 
422 -- -------------------------------------------------------------------------- --
423 --                                                                            --
424 -- NAME:                READ_DTT_FILE                                         --
425 --                                                                            --
426 -- TYPE:                PROCEDURE                                             --
427 --                                                                            --
428 -- PARAMETERS (IN OUT): p_source_file_directory  IN VARCHAR2                  --
429 --                      p_source_file_name       IN VARCHAR2                  --
430 --                      p_load_id                IN VARCHAR2                  --
431 --                                                                            --
432 -- PARAMETERS (OUT):    x_return_message       OUT NOCOPY VARCHAR2            --
433 --                      x_return_status        OUT NOCOPY NUMBER              --
434 --                                                                            --
435 -- RETURN:              n/a                                                   --
436 --                                                                            --
437 -- DESCRIPTION:         Reads the DTT data file. Gets the relevant origin and --
438 --                      destination ids from fte_mile_download_lines and      --
439 --                      stores the information in a global temp table:        --
440 --                      FTE_DISTANCE_LOADER_TMP and then inserts or updates   --
441 --                      the values into the FTE_LOCATION_MILEAGES table       --
442 --                                                                            --
443 -- CHANGE CONTROL LOG                                                         --
444 -- ------------------                                                         --
445 --                                                                            --
446 -- DATE        VERSION  BY        BUG      DESCRIPTION                        --
447 -- ----------  -------  --------  -------  ---------------------------------- --
448 -- 2003/07/17  J        ABLUNDEL           Created                            --
449 --                                                                            --
450 -- 2003/12/08  J        ABLUNDEL  3301222  replaced the MERGE INTO statement  --
451 --                                         with some code that is 8i compatibl--
452 --                                         as the MERGE statement can only be --
453 --                                         used with 8i or higher             --
454 --                                                                            --
455 -- 2003/12/17  J        ABLUNDEL  3325486  Added a REPLACE in the substring   --
456 --                                         to remove tabs from the mileage and--
457 --                                         time return values. NB The TAB     --
458 --                                         equates to 1 space                 --
459 --                                                                            --
460 -- 2004/01/22  J        ABLUNDEL  3381771  Added a check to se if the input   --
461 --                                         line is blank or contains only     --
462 --                                         space or tab chars                 --
463 --                                                                            --
464 -- -------------------------------------------------------------------------- --
465 PROCEDURE READ_DTT_FILE(p_source_file_directory  IN VARCHAR2,
466                         p_source_file_name       IN VARCHAR2,
467                         p_load_id                IN VARCHAR2,
468                         x_return_message         OUT NOCOPY VARCHAR2,
469                         x_return_status          OUT NOCOPY NUMBER) IS
470 
471 
472 
473 l_upload_date              DATE;
474 l_dtt_file                 UTL_FILE.file_type;
475 l_line                     VARCHAR2(2000);
476 l_load_ctr                 PLS_INTEGER;
477 l_cur_date                 DATE;
478 l_line_ctr                 PLS_INTEGER;
479 l_dtt_file_name            VARCHAR2(50);
480 l_download_file_id         NUMBER;
481 l_template_id              NUMBER;
482 l_download_date            DATE;
483 l_download_count           NUMBER;
484 l_ret_dist_col_id          NUMBER;
485 l_ret_dist_start_pos       NUMBER;
486 l_ret_dist_length          NUMBER;
487 l_ret_dist_enabled_flag    VARCHAR2(1);
488 l_ret_dist_return_format   VARCHAR2(10);
489 l_ret_dist_db_uom          VARCHAR2(3);
490 l_ret_time_col_id          NUMBER;
491 l_ret_time_start_pos       NUMBER;
492 l_ret_time_length          NUMBER;
493 l_ret_time_enabled_flag    VARCHAR2(1);
494 l_ret_time_return_format   VARCHAR2(10);
495 l_ret_time_db_uom          VARCHAR2(3);
496 l_identifier_type          VARCHAR2(30);
497 l_conv_flag                VARCHAR2(10);
498 l_ret_time_val             VARCHAR2(50);
499 l_ret_dist_val             VARCHAR2(50);
500 l_ret_time                 NUMBER;
501 l_ret_dist                 NUMBER;
502 l_ret_mins                 NUMBER;
503 l_ret_hrs                  NUMBER;
504 l_tmp_count                PLS_INTEGER;
505 l_number_of_table_lines    NUMBER;
506 
507 
508 
509 l_origin_id_tab                   FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
510 l_destination_id_tab              FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
511 l_location_origin_id              FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
512 l_location_destination_id         FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
513 l_location_identifier_type        FTE_BULK_DTT_PKG.fte_distu_tmp_code_table;
514 l_location_distance               FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
515 l_location_distance_uom           FTE_BULK_DTT_PKG.fte_distu_tmp_uom_table;
516 l_location_transit_time           FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
517 l_location_transit_time_uom       FTE_BULK_DTT_PKG.fte_distu_tmp_uom_table;
518 l_location_creation_date          FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
519 l_location_created_by             FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
520 l_location_last_update_date       FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
521 l_location_last_updated_by        FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
522 l_location_last_update_login      FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
523 l_location_program_app_id         FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
524 l_location_program_id             FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
525 l_location_program_update_date    FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
526 l_location_request_id             FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
527 l_deleted_download_ids            FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
528 
529 
530 
531 cursor c_check_download_lines(cp_download_file_id NUMBER) IS
532 select count(fmdl.download_file_id)
533 from   fte_mile_download_lines fmdl
534 where  fmdl.download_file_id = cp_download_file_id;
535 
536 
537 cursor c_get_file_info(cp_file_name VARCHAR2) IS
538 select fmdf.download_file_id,
539        fmdf.template_id,
540        fmdf.download_date,
541        fmdf.upload_date,
542        fmdf.identifier_type
543 from   fte_mile_download_files fmdf
544 where  fmdf.file_name = cp_file_name;
545 
546 
547 cursor c_get_download_lines(cp_download_file_id NUMBER) IS
548 select fmdl.origin_id,
549        fmdl.destination_id
550 from   fte_mile_download_lines fmdl
551 where  fmdl.download_file_id = cp_download_file_id;
552 
553 
554 cursor c_get_ret_col_info(cp_column_type VARCHAR2,
555                           cp_template_id NUMBER) IS
556 select fmtc.column_id,
557        fmtc.start_position,
558        fmtc.length
559 from   fte_mile_template_columns fmtc
560 where  fmtc.column_type = cp_column_type
561 and    fmtc.template_id = cp_template_id;
562 
563 
564 cursor c_get_ret_enabled(cp_column_id NUMBER) IS
565 select fmca.enabled_flag,
566        fmca.return_format,
567        fmca.db_uom
568 from   fte_mile_column_attributes fmca
569 where  fmca.column_id = cp_column_id;
570 
571 
572 
573 FTE_DIST_NULL_FILE_NAME        EXCEPTION;
574 FTE_DIST_INV_FILENAME_LGTH     EXCEPTION;
575 FTE_DIST_NO_FILE_DOWNLOAD      EXCEPTION;
576 FTE_DIST_NO_FILE_TEMPLATE      EXCEPTION;
577 FTE_DIST_NO_FILE_DOWNLOAD_DATE EXCEPTION;
578 FTE_DIST_FILE_UPLOAD_DONE_PREV EXCEPTION;
579 FTE_DIST_NO_DOWNLOAD_LINES     EXCEPTION;
580 FTE_DIST_RET_DIST_COL_NO_DATA  EXCEPTION;
581 FTE_DIST_RET_TIME_COL_NO_DATA  EXCEPTION;
582 FTE_DIST_NO_RET_COL_ENABLED    EXCEPTION;
583 FTE_DIST_LESS_FILE_LINES       EXCEPTION;
584 FTE_DIST_MANY_FILE_LINES       EXCEPTION;
585 
586 
587 
588 
589 l_debug_on     BOOLEAN;
590 l_module_name  CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.' ||'READ_DTT_FILE';
591 l_error_text   VARCHAR2(2000);
592 
593 
594 
595 --
596 -- [ABLUNDEL][12/08/2003][BUG# 3301222]
597 --
598 -- The following variable declarations were added to support the bug fix for the
599 -- 8i - 9i compatibility problem with the MERGE statement
600 --
601 --
602 cursor c_get_merge_data is
603 select tt.origin_id,
604        tt.destination_id,
605        fdlt.origin_id,
606        fdlt.destination_id,
607        fdlt.identifier_type,
608        fdlt.distance,
609        fdlt.distance_uom,
610        fdlt.transit_time,
611        fdlt.transit_time_uom,
612        fdlt.creation_date,
613        fdlt.created_by,
614        fdlt.last_update_date,
615        fdlt.last_updated_by,
616        fdlt.last_update_login,
617        fdlt.program_application_id,
618        fdlt.program_id,
619        fdlt.program_update_date,
620        fdlt.request_id
621 from (SELECT origin_id,
622              destination_id,
623              identifier_type,
624              distance,
625              distance_uom,
626              transit_time,
627              transit_time_uom,
628              creation_date,
629              created_by,
630              last_update_date,
631              last_updated_by,
632              last_update_login,
633              program_application_id,
634              program_id,
635              program_update_date,
636              request_id FROM FTE_DISTANCE_LOADER_TMP) fdlt,
637       FTE_LOCATION_MILEAGES tt
638 where fdlt.origin_id      = tt.origin_id(+)
639 and   fdlt.destination_id = tt.destination_id(+);
640 
641 
642 l_u_origin_id_tab                 FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
643 l_u_destination_id_tab            FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
644 l_u_identifier_type_tab           FTE_BULK_DTT_PKG.fte_distu_tmp_code_table;
645 l_u_distance_tab                  FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
646 l_u_distance_uom_tab              FTE_BULK_DTT_PKG.fte_distu_tmp_uom_table;
647 l_u_transit_time_tab              FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
648 l_u_transit_time_uom_tab          FTE_BULK_DTT_PKG.fte_distu_tmp_uom_table;
649 l_u_last_update_date_tab          FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
650 l_u_last_updated_by_tab           FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
651 l_u_last_update_login_tab         FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
652 l_u_program_app_id_tab            FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
653 l_u_program_id_tab                FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
654 l_u_program_update_date_tab       FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
655 l_u_request_id_tab                FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
656 
657 l_i_origin_id_tab                 FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
658 l_i_destination_id_tab            FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
659 l_i_identifier_type_tab           FTE_BULK_DTT_PKG.fte_distu_tmp_code_table;
660 l_i_distance_tab                  FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
661 l_i_distance_uom_tab              FTE_BULK_DTT_PKG.fte_distu_tmp_uom_table;
662 l_i_transit_time_tab              FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
663 l_i_transit_time_uom_tab          FTE_BULK_DTT_PKG.fte_distu_tmp_uom_table;
664 l_i_creation_date_tab             FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
665 l_i_created_by_tab                FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
666 l_i_last_update_date_tab          FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
667 l_i_last_updated_by_tab           FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
668 l_i_last_update_login_tab         FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
669 l_i_program_app_id_tab            FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
670 l_i_program_id_tab                FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
671 l_i_program_update_date_tab       FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
672 l_i_request_id_tab                FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
673 
674 l_old_origin_id_tab               FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
675 l_old_destination_id_tab          FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
676 l_new_origin_id_tab               FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
677 l_new_destination_id_tab          FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
678 l_new_identifier_type_tab         FTE_BULK_DTT_PKG.fte_distu_tmp_code_table;
679 l_new_distance_tab                FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
680 l_new_distance_uom_tab            FTE_BULK_DTT_PKG.fte_distu_tmp_uom_table;
681 l_new_transit_time_tab            FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
682 l_new_transit_time_uom_tab        FTE_BULK_DTT_PKG.fte_distu_tmp_uom_table;
683 l_new_creation_date_tab           FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
684 l_new_created_by_tab              FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
685 l_new_last_update_date_tab        FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
686 l_new_last_updated_by_tab         FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
687 l_new_last_update_login_tab       FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
688 l_new_program_app_id_tab          FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
689 l_new_program_id_tab              FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
690 l_new_program_update_date_tab     FTE_BULK_DTT_PKG.fte_distu_tmp_date_table;
691 l_new_request_id_tab              FTE_BULK_DTT_PKG.fte_distu_tmp_num_table;
692 
693 
694 l_insert_ctr                      PLS_INTEGER;
695 l_update_ctr                      PLS_INTEGER;
696 l_current_rows                    PLS_INTEGER;
697 l_remaining_rows                  PLS_INTEGER;
698 l_previous_rows                   PLS_INTEGER;
699 l_bulk_collect_size               PLS_INTEGER := 500;
700 
701 
702 
703 FTE_DIST_ORIG_DEST_LOAD_ERR       EXCEPTION;
704 --
705 --
706 -- [ABLUNDEL][12/08/2003][BUG# 3301222] End of new variable declaration additions
707 --
708 
709 --
710 -- [ABLUNDEL][12/08/2003][BUG#        ]AXE
711 -- New cursors/variables to get the correct Time and Distance Uom
712 --
713 cursor c_get_time_uom(x_unit_of_measure VARCHAR2,
714                       x_language        VARCHAR2) IS
715 select muomv.uom_code
716 from   mtl_units_of_measure_vl muomv,
717        wsh_global_parameters   wgp
718 where  wgp.gu_time_class     = muomv.uom_class
719 and    muomv.unit_of_measure = x_unit_of_measure
720 and    muomv.language        = x_language;
721 
722 cursor c_get_distance_uom(y_unit_of_measure VARCHAR2,
723                           y_language        VARCHAR2) IS
724 select muomv.uom_code
725 from   mtl_units_of_measure_vl muomv,
726        wsh_global_parameters wgp
727 where  wgp.GU_DISTANCE_CLASS  = muomv.uom_class
728 and    muomv.UNIT_OF_MEASURE  = y_unit_of_measure
729 and    muomv.language         = y_language;
730 
731 
732 l_time_uom_code               VARCHAR2(50);
733 l_time_unit_of_measure        VARCHAR2(50);
734 l_distance_uom_code           VARCHAR2(50);
735 l_distance_unit_of_measure    VARCHAR2(50);
736 l_language                    VARCHAR2(50);
737 
738 FTE_DIST_INV_TEMP_TIME_UOM    EXCEPTION;
739 FTE_DIST_NO_TIME_UOM          EXCEPTION;
740 FTE_DIST_INV_TEMP_DIST_UOM    EXCEPTION;
741 FTE_DIST_NO_DISTANCE_UOM      EXCEPTION;
742 --
743 --
744 --
745 
746 
747 
748 
749 l_line_length                     NUMBER;
750 l_colon_check                     PLS_INTEGER;
751 
752 FTE_DIST_INV_LINE_LENGTH          EXCEPTION;
753 FTE_DIST_INV_TIME_FORMAT          EXCEPTION;
754 
755 
756 
757 BEGIN
758 
759    --
760    -- SETUP DEBUGGING
761    --
762    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
763    IF l_debug_on IS NULL THEN
764       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
765    END IF;
766 
767    IF (g_user_debug = 1) THEN
768      l_debug_on := TRUE;
769    END IF;
770 
771 
772     IF l_debug_on THEN
773       WSH_DEBUG_SV.push(l_module_name);
774       WSH_DEBUG_SV.logmsg(l_module_name,'---------------READ_DTT_FILE------------');
775       WSH_DEBUG_SV.logmsg(l_module_name,'-------- INPUT PARAMETERS ------');
776       WSH_DEBUG_SV.log(l_module_name,'Procedure = ',l_module_name);
777       WSH_DEBUG_SV.log(l_module_name,'p_source_file_directory',p_source_file_directory);
778       WSH_DEBUG_SV.log(l_module_name,'p_source_file_name',p_source_file_name);
779       WSH_DEBUG_SV.log(l_module_name,'p_load_id',p_load_id);
780       WSH_DEBUG_SV.logmsg(l_module_name,'---------------------------------');
781    END IF;
782 
783 
784      FND_FILE.PUT_LINE(FND_FILE.log, 'READ_DTT_FILE');
785 
786      --
787      -- Set the date variable
788      --
789      l_cur_date := sysdate;
790 
791      --
792      -- Set the language
793      --
794      l_language := userenv('LANG');
795 
796      --
797      -- Check the input file name is not null
798      --
799      IF (p_source_file_name is null) THEN
800         --
801         -- Input file name is null raise an error
802         --
803         IF l_debug_on THEN
804            WSH_DEBUG_SV.logmsg(l_module_name,'Input file name is null raise FTE_DIST_NULL_FILE_NAME exception');
805         END IF;
806 
807         RAISE FTE_DIST_NULL_FILE_NAME;
808         --
809         -- Debug Statements
810         --
811         IF l_debug_on THEN
812            WSH_DEBUG_SV.pop(l_module_name);
813         END IF;
814         --
815         RETURN;
816      END IF;
817 
818 
819 
820      --
821      -- Take off the file extension
822      --
823      IF l_debug_on THEN
824         WSH_DEBUG_SV.logmsg(l_module_name,'Take off the file extension');
825      END IF;
826 
827      FND_FILE.PUT_LINE(FND_FILE.log, 'Removing File Extension from file');
828 
829      l_dtt_file_name := substr(p_source_file_name,1,(instr(p_source_file_name,'.')-1));
830 
831      --
832      -- DTT Upload file should be 8 chars in length
833      --
834      IF (length(l_dtt_file_name) <> 8) THEN
835 
836         IF l_debug_on THEN
837            WSH_DEBUG_SV.logmsg(l_module_name,'Input file name is not 8 chars in length raise FTE_DIST_INV_FILENAME_LGTH exception');
838         END IF;
839 
840         RAISE FTE_DIST_INV_FILENAME_LGTH;
841 
842         --
843         -- Debug Statements
844         --
845         IF l_debug_on THEN
846            WSH_DEBUG_SV.pop(l_module_name);
847         END IF;
848         --
849         RETURN;
850      END IF;
851 
852 
853      FND_FILE.PUT_LINE(FND_FILE.log, 'Retrieving the download file id');
854      --
855      IF l_debug_on THEN
856         WSH_DEBUG_SV.log(l_module_name,'Get the download file id open cursor c_get_file_info l_dtt_file_name = ',l_dtt_file_name);
857      END IF;
858      --
859      -- Get the download file id
860      --
861      OPEN c_get_file_info(l_dtt_file_name);
862         FETCH c_get_file_info INTO l_download_file_id,
863                                    l_template_id,
864                                    l_download_date,
865                                    l_upload_date,
866                                    l_identifier_type;
867      CLOSE c_get_file_info;
868 
869 
870      IF (l_download_file_id is null) THEN
871         --
872         -- No download took place for this file
873         --
874         IF l_debug_on THEN
875            WSH_DEBUG_SV.logmsg(l_module_name,'Download file id is null, RAISE FTE_DIST_NO_FILE_DOWNLOAD exception');
876         END IF;
877         --
878         RAISE FTE_DIST_NO_FILE_DOWNLOAD;
879         --
880         IF l_debug_on THEN
881            WSH_DEBUG_SV.pop(l_module_name);
882         END IF;
883         --
884         RETURN;
885      END IF;
886 
887      IF (l_template_id is null) THEN
888         --
889         -- There is no template associated with the file
890         --
891         --
892         IF l_debug_on THEN
893            WSH_DEBUG_SV.logmsg(l_module_name,'There is no template associated with the file, RAISE FTE_DIST_NO_FILE_TEMPLATE exception');
894         END IF;
895         --
896         RAISE FTE_DIST_NO_FILE_TEMPLATE;
897         --
898         IF l_debug_on THEN
899            WSH_DEBUG_SV.pop(l_module_name);
900         END IF;
901         --
902         RETURN;
903      END IF;
904 
905 
906      IF (l_download_date is null) THEN
907         --
908         -- The download must not have completed correctly
909         -- for this file
910         --
911         IF l_debug_on THEN
912            WSH_DEBUG_SV.logmsg(l_module_name,'l_download_date is null, The download must not have completed correctly for this file, RAISE FTE_DIST_NO_FILE_DOWNLOAD_DATE exception');
913         END IF;
914         --
915         RAISE FTE_DIST_NO_FILE_DOWNLOAD_DATE;
916         --
917         IF l_debug_on THEN
918            WSH_DEBUG_SV.pop(l_module_name);
919         END IF;
920         --
921         RETURN;
922      END IF;
923 
924      IF (l_upload_date is not null) THEN
925         --
926         -- This file has already been uploaded successfull
927         -- doing it again makes no sense raise an error
928         --
929         IF l_debug_on THEN
930            WSH_DEBUG_SV.logmsg(l_module_name,'l_upload_date is not null, This file has already been uploaded successfully doing it again makes no sense raise an error RAISE FTE_DIST_FILE_UPLOAD_DONE_PREV exception');
931         END IF;
932         --
933         RAISE FTE_DIST_FILE_UPLOAD_DONE_PREV;
934         --
935         IF l_debug_on THEN
936            WSH_DEBUG_SV.pop(l_module_name);
937         END IF;
938         --
939         RETURN;
940      END IF;
941 
942 
943      IF l_debug_on THEN
944         WSH_DEBUG_SV.log(l_module_name,'For return distance column OPEN c_get_ret_col_info,g_ret_dist_col_name = ',g_ret_dist_col_name);
945          WSH_DEBUG_SV.log(l_module_name,'l_template_id = ',l_template_id);
946      END IF;
947      --
948      -- For return distance column
949      --
950      OPEN c_get_ret_col_info(g_ret_dist_col_name,
951                              l_template_id);
952         FETCH c_get_ret_col_info INTO l_ret_dist_col_id,
953                                       l_ret_dist_start_pos,
954                                       l_ret_dist_length;
955      CLOSE c_get_ret_col_info;
956 
957 
958      IF l_debug_on THEN
959         WSH_DEBUG_SV.log(l_module_name,'See if it is enabled  OPEN c_get_ret_enabled, l_ret_dist_col_id = ',l_ret_dist_col_id);
960      END IF;
961      --
962      -- See if it is enabled
963      --
964      OPEN c_get_ret_enabled(l_ret_dist_col_id);
965         FETCH c_get_ret_enabled INTO l_ret_dist_enabled_flag,
966                                      l_ret_dist_return_format,
967                                      l_ret_dist_db_uom;
968      CLOSE c_get_ret_enabled;
969 
970 
971 
972      IF (l_ret_dist_enabled_flag = 'Y') THEN
973 
974 
975         IF ((l_ret_dist_start_pos is null) OR
976             (l_ret_dist_length is null)) THEN
977            --
978            -- The column is enabled but there is no start or length or both
979            -- we will not be able to parse the file
980            --
981            --
982            IF l_debug_on THEN
983               WSH_DEBUG_SV.logmsg(l_module_name,'l_ret_dist_enabled_flag = Y, The column is enabled but there is no start or length or both we will not be able to parse the file RAISE FTE_DIST_RET_DIST_COL_NO_DATA exception');
984            END IF;
985            --
986            RAISE FTE_DIST_RET_DIST_COL_NO_DATA;
987            --
988            IF l_debug_on THEN
989               WSH_DEBUG_SV.pop(l_module_name);
990            END IF;
991            --
992            RETURN;
993         END IF;
994 
995         -- AXE
996         --
997         -- [AAB][02/23/2004][BUG#          ]AXE
998         --
999         -- Distance is enabled get the acutal Distance UoM to store in the database
1000         --
1001         IF (l_ret_dist_db_uom = 'MI') THEN
1002            l_distance_unit_of_measure := g_distance_mile;
1003         ELSIF (l_ret_dist_db_uom = 'KM') THEN
1004            l_distance_unit_of_measure := g_distance_kilometer;
1005         ELSE
1006            --
1007            -- Error, must be mile or kilometer
1008            --
1009            RAISE FTE_DIST_INV_TEMP_DIST_UOM;
1010            --
1011            IF l_debug_on THEN
1012               WSH_DEBUG_SV.pop(l_module_name);
1013            END IF;
1014            --
1015            RETURN;
1016         END IF;
1017 
1018         --
1019         -- Get the correct code from the mtl table
1020         --
1021         OPEN c_get_distance_uom(l_distance_unit_of_measure,
1022                                 l_language);
1023            FETCH c_get_distance_uom INTO l_distance_uom_code;
1024         CLOSE c_get_distance_uom;
1025 
1026         IF (l_distance_uom_code is null) THEN
1027            --
1028            -- There is no Distance UoM code from mtl table
1029            --
1030            RAISE FTE_DIST_NO_DISTANCE_UOM;
1031            --
1032            IF l_debug_on THEN
1033               WSH_DEBUG_SV.pop(l_module_name);
1034            END IF;
1035            --
1036            RETURN;
1037         END IF;
1038         --
1039         --
1040         --
1041      END IF;
1042 
1043 
1044      IF l_debug_on THEN
1045         WSH_DEBUG_SV.log(l_module_name,'Get the return time column g_ret_time_col_name = ',g_ret_time_col_name);
1046         WSH_DEBUG_SV.log(l_module_name,'l_template_id = ',l_template_id);
1047      END IF;
1048      --
1049      -- Get the return time column
1050      --
1051      OPEN c_get_ret_col_info(g_ret_time_col_name,
1052                              l_template_id);
1053         FETCH c_get_ret_col_info INTO l_ret_time_col_id,
1054                                       l_ret_time_start_pos,
1055                                       l_ret_time_length;
1056      CLOSE c_get_ret_col_info;
1057 
1058 
1059      IF l_debug_on THEN
1060         WSH_DEBUG_SV.log(l_module_name,' See if it is enabled OPEN c_get_ret_enabled, l_ret_time_col_id = ',l_ret_time_col_id);
1061      END IF;
1062      --
1063      -- See if it is enabled
1064      --
1065      OPEN c_get_ret_enabled(l_ret_time_col_id);
1066         FETCH c_get_ret_enabled INTO l_ret_time_enabled_flag,
1067                                      l_ret_time_return_format,
1068                                      l_ret_time_db_uom;
1069      CLOSE c_get_ret_enabled;
1070 
1071 
1072      IF (l_ret_time_enabled_flag = 'Y') THEN
1073         IF ((l_ret_time_start_pos is null) OR
1074             (l_ret_time_length is null)) THEN
1075            --
1076            -- The column is enabled but there is no start or length or both
1077            -- we will not be able to parse the file
1078            --
1079            --
1080            IF l_debug_on THEN
1081               WSH_DEBUG_SV.logmsg(l_module_name,'l_ret_time_enabled_flag = Y, The column is enabled but there is no start or length or both we will not be able to parse the file RAISE FTE_DIST_RET_TIME_COL_NO_DATA exception');
1082            END IF;
1083            --
1084            RAISE FTE_DIST_RET_TIME_COL_NO_DATA;
1085            --
1086            IF l_debug_on THEN
1087               WSH_DEBUG_SV.pop(l_module_name);
1088            END IF;
1089            --
1090            RETURN;
1091         END IF;
1092 
1093         --
1094         -- [AAB][02/23/2004][BUG#          ]AXE
1095         --
1096         -- Time is enabled get the acutal Time UoM to store in the database
1097         --
1098         IF (l_ret_time_db_uom = 'HR') THEN
1099            l_time_unit_of_measure := g_time_hour;
1100         ELSIF (l_ret_time_db_uom = 'MIN') THEN
1101            l_time_unit_of_measure := g_time_minute;
1102         ELSE
1103            --
1104            -- Error, must be minute or hour
1105            --
1106            RAISE FTE_DIST_INV_TEMP_TIME_UOM;
1107            RETURN;
1108         END IF;
1109 
1110         --
1111         -- Get the correct code from the mtl table
1112         --
1113         OPEN c_get_time_uom(l_time_unit_of_measure,
1114                             l_language);
1115            FETCH c_get_time_uom INTO l_time_uom_code;
1116         CLOSE c_get_time_uom;
1117 
1118         IF (l_time_uom_code is null) THEN
1119            --
1120            -- There is no Time UoM code from mtl table
1121            --
1122            RAISE FTE_DIST_NO_TIME_UOM;
1123            RETURN;
1124         END IF;
1125 
1126         --
1127 
1128 
1129      END IF;
1130 
1131 
1132      IF ((l_ret_dist_enabled_flag <> 'Y') AND
1133          (l_ret_time_enabled_flag <> 'Y')) THEN
1134         --
1135         -- Neither column is enabled? Therefore we cannot
1136         -- parse the data
1137         --
1138         --
1139         IF l_debug_on THEN
1140            WSH_DEBUG_SV.logmsg(l_module_name,'l_ret_time_enabled_flag and l_ret_dist_enabled_flag <> Y, Neither column is enabled Therefore we cannot parse the data, RAISE FTE_DIST_NO_RET_COL_ENABLED exception');
1141         END IF;
1142         --
1143         RAISE FTE_DIST_NO_RET_COL_ENABLED;
1144         --
1145         IF l_debug_on THEN
1146            WSH_DEBUG_SV.pop(l_module_name);
1147         END IF;
1148         --
1149         RETURN;
1150      END IF;
1151 
1152 
1153      --
1154      -- So we are here at least one column is enabled
1155      --
1156      -- For the return time we may have to convert from the Return Format" to
1157      -- the DB uom
1158      -- The DB UoM is either HR - Hours or MIN -  Minutes
1159      -- The return format is MIN Minutes, or HR Hours or HR:MIN Hours colon Minutes
1160      --
1161      --      UoM HR            MIN
1162      -- Format
1163      -- MIN       /60           --
1164      -- HR       --            *60
1165      -- HR:MIN    parse MIN      parse HR
1166      --          /60           *60
1167      --          add to HR     add to MIN
1168      --
1169 
1170 
1171 
1172      IF ((l_ret_time_return_format = 'MIN') AND
1173          (l_ret_time_db_uom = 'HR')) THEN
1174         l_conv_flag := 'MINHR';
1175      ELSIF ((l_ret_time_return_format = 'HR') AND
1176             (l_ret_time_db_uom = 'MIN')) THEN
1177         l_conv_flag := 'HRMIN';
1178      ELSIF ((l_ret_time_return_format = 'HR:MIN') AND
1179             (l_ret_time_db_uom = 'MIN')) THEN
1180         l_conv_flag := 'HMMIN';
1181      ELSIF ((l_ret_time_return_format = 'HR:MIN') AND
1182             (l_ret_time_db_uom = 'HR')) THEN
1183         l_conv_flag := 'HMHR';
1184      ELSE
1185         l_conv_flag := null;
1186      END IF;
1187 
1188 
1189 
1190 
1191      IF l_debug_on THEN
1192         WSH_DEBUG_SV.log(l_module_name,'l_conv_flag',l_conv_flag);
1193      END IF;
1194 
1195 
1196      IF l_debug_on THEN
1197         WSH_DEBUG_SV.log(l_module_name,'Get the download lines OPEN c_get_download_lines, l_download_file_id = ',l_download_file_id);
1198      END IF;
1199 
1200      FND_FILE.PUT_LINE(FND_FILE.log, 'Retrieving the download lines '||l_download_file_id);
1201      --
1202      -- Get the download lines
1203      --
1204      OPEN c_get_download_lines(l_download_file_id);
1205         FETCH c_get_download_lines BULK COLLECT INTO
1206            l_origin_id_tab,
1207            l_destination_id_tab;
1208      CLOSE c_get_download_lines;
1209 
1210 
1211      IF ((l_origin_id_tab.COUNT = 0) OR
1212          (l_destination_id_tab.COUNT = 0)) THEN
1213         --
1214         -- There are no download lines in the table?
1215         --
1216         IF l_debug_on THEN
1217            WSH_DEBUG_SV.logmsg(l_module_name,'There are no download lines in the table RAISE FTE_DIST_NO_DOWNLOAD_LINES exception');
1218         END IF;
1219         --
1220         RAISE FTE_DIST_NO_DOWNLOAD_LINES;
1221         --
1222         IF l_debug_on THEN
1223            WSH_DEBUG_SV.pop(l_module_name);
1224         END IF;
1225         --
1226         RETURN;
1227      END IF;
1228 
1229 
1230 
1231      --
1232      -- Get the count of lines from the table
1233      -- we can only insert records into the table is the number of lines
1234      -- in the file matches with the number of lines in the table
1235      --
1236 
1237      l_number_of_table_lines := l_origin_id_tab.COUNT;
1238 
1239      IF l_debug_on THEN
1240         WSH_DEBUG_SV.log(l_module_name,'l_number_of_table_lines = ',l_number_of_table_lines);
1241      END IF;
1242 
1243      FND_FILE.PUT_LINE(FND_FILE.log, 'Number of lines in table = '||to_char(l_number_of_table_lines));
1244 
1245 
1246 
1247      --
1248      -- Lets read the file
1249      --
1250      FND_FILE.PUT_LINE(FND_FILE.log, 'READING FILE ' || p_source_file_directory || '/' || p_source_file_name);
1251 
1252 
1253      --
1254      -- The file is read in a separate plsql block as when it is finished
1255      -- we get a no data found exception - which in this case is good
1256      --
1257      BEGIN
1258 
1259         IF l_debug_on THEN
1260            WSH_DEBUG_SV.logmsg(l_module_name,'Open the file Set the full file name for utl_file');
1261         END IF;
1262         --
1263         -- Set the full file name for utl_file
1264         --
1265         l_dtt_file := utl_file.fopen(p_source_file_directory, p_source_file_name, 'R');
1266 
1267 
1268         --
1269         -- Reset the line and loader counters
1270         --
1271         l_line_ctr := 0;
1272         l_load_ctr := 0;
1273 
1274 
1275         IF l_debug_on THEN
1276            WSH_DEBUG_SV.logmsg(l_module_name,'Start a loop to read the file contents one line at a time');
1277         END IF;
1278         --
1279         -- Start a loop to read the file
1280         --
1281         LOOP
1282 
1283 
1284            IF l_debug_on THEN
1285               WSH_DEBUG_SV.logmsg(l_module_name,'Get the next line out of the file');
1286            END IF;
1287            --
1288            -- Get the next line out of the file
1289            --
1290            utl_file.get_line(l_dtt_file, l_line);
1291 
1292 
1293            --
1294            -- [AAB][01/22/04][BUG# 3381771]
1295            -- Check that the line contains something
1296            --
1297            --
1298            IF l_debug_on THEN
1299               WSH_DEBUG_SV.logmsg(l_module_name,'check the file length');
1300            END IF;
1301            l_line_length := 0;
1302            l_line_length :=  NVL(LENGTH(l_line),0);
1303 
1304            IF (l_line_length <= 0) THEN
1305               RAISE FTE_DIST_INV_LINE_LENGTH;
1306               --
1307               IF l_debug_on THEN
1308                  WSH_DEBUG_SV.pop(l_module_name);
1309               END IF;
1310               --
1311               RETURN;
1312            ELSE
1313               --
1314               -- Line length is greater than 0, lets get rid of all spaces and see if
1315               -- there is any length left
1316               --
1317               l_line_length := NVL(LENGTH(RTRIM(LTRIM(REPLACE(substr(l_line,1, l_line_length),FND_GLOBAL.local_chr(9),' '),' '),' ')),0);
1318               IF (l_line_length <= 0) THEN
1319                  RAISE FTE_DIST_INV_LINE_LENGTH;
1320                  --
1321                  IF l_debug_on THEN
1322                     WSH_DEBUG_SV.pop(l_module_name);
1323                  END IF;
1324                  --
1325                  RETURN;
1326               END IF;
1327            END IF;
1328 
1329            --
1330 
1331            --
1332            -- Increment the line counter
1333            --
1334            l_line_ctr := l_line_ctr + 1;
1335 
1336            FND_FILE.PUT_LINE(FND_FILE.log, 'File Line #'||to_char(l_line_ctr)||': '||l_line);
1337 
1338            IF l_debug_on THEN
1339               WSH_DEBUG_SV.logmsg(l_module_name,'File Line #'||to_char(l_line_ctr)||': '||l_line);
1340            END IF;
1341 
1342            --
1343            -- Get the distance if applicable
1344            --
1345            IF (l_ret_dist_enabled_flag = 'Y') THEN
1346               --
1347               -- get rid of trailing and leading spaces
1348               --
1349               --
1350               -- [AAB][12/16/03][BUG# 3325486]
1351               -- Added Replace to the extraction to replace all occurances of TAB in the string with a space,
1352               -- The spaces are then trimmed off the left and right end
1353               --
1354               l_ret_dist_val := RTRIM(LTRIM(REPLACE(substr(l_line,l_ret_dist_start_pos, l_ret_dist_length),FND_GLOBAL.local_chr(9),' '),' '),' ');
1355 
1356               IF l_debug_on THEN
1357                  WSH_DEBUG_SV.logmsg(l_module_name,'Converting distance value to a number');
1358               END IF;
1359 
1360               FND_FILE.PUT_LINE(FND_FILE.log, 'Converting distance value to a number');
1361               --
1362               -- Convert the value to a number
1363               --
1364               IF (l_ret_dist_val is not null) THEN
1365                  l_ret_dist := to_number(l_ret_dist_val);
1366               ELSE
1367                  l_ret_dist := 0;
1368               END IF;
1369            ELSE
1370               l_ret_dist := null;
1371            END IF;
1372 
1373 
1374            --
1375            -- Get the return time if applicable
1376            --
1377            IF (l_ret_time_enabled_flag = 'Y') THEN
1378               --
1379               -- get rid of trailing and leading spaces
1380               --
1381 
1382               --
1383               -- [AAB][12/16/03][BUG# 3325486]
1384               -- Added Replace to the extraction to replace all occurances of TAB in the string with a space,
1385               -- The spaces are then trimmed off the left and right end
1386               --
1387               l_ret_time_val := RTRIM(LTRIM(REPLACE(substr(l_line,l_ret_time_start_pos, l_ret_time_length),FND_GLOBAL.local_chr(9),' '),' '),' ');
1388 
1389 
1390               l_colon_check := 0;
1391 
1392               IF (l_ret_time_val is not null) THEN
1393 
1394                  IF (l_conv_flag is not null) THEN
1395                     IF (l_conv_flag = 'MINHR') THEN
1396                        l_ret_time := (to_number(l_ret_time_val) / 60);
1397                     ELSIF (l_conv_flag = 'HRMIN') THEN
1398                        l_ret_time := (to_number(l_ret_time_val) * 60);
1399                     ELSIF (l_conv_flag = 'HMMIN') THEN
1400 
1401                        -- AXE
1402                        -- [AAB][01/23/2004][BUG#      ]
1403                        -- Check that the return value has a colon in it otherwise we could get
1404                        -- a weird value for the time
1405                        --
1406                        l_colon_check := instr(l_ret_time_val,':');
1407 
1408                        IF l_debug_on THEN
1409                           WSH_DEBUG_SV.log(l_module_name,'check HMMIN return time for a colon, l_colon_check = ',l_colon_check);
1410                        END IF;
1411 
1412                        IF (l_colon_check <= 0) THEN
1413                           --
1414                           -- Error no colon in the return time string
1415                           --
1416                           RAISE FTE_DIST_INV_TIME_FORMAT;
1417                           --
1418                           IF l_debug_on THEN
1419                              WSH_DEBUG_SV.pop(l_module_name);
1420                           END IF;
1421                           --
1422                           RETURN;
1423                        END IF;
1424 
1425 
1426                        --
1427                        IF l_debug_on THEN
1428                           WSH_DEBUG_SV.log(l_module_name,'converting HR:MIN to Minutes');
1429                        END IF;
1430 
1431                        l_ret_mins := to_number(substr(l_ret_time_val, (instr(l_ret_time_val,':')+1),LENGTH(l_ret_time_val)));
1432                        l_ret_hrs  := to_number(substr(l_ret_time_val,1,(instr(l_ret_time_val,':')-1)));
1433                        l_ret_time := ((l_ret_hrs * 60) + l_ret_mins);
1434 
1435                        IF l_debug_on THEN
1436                           WSH_DEBUG_SV.log(l_module_name,'END OF converting HR:MIN to Hours');
1437                        END IF;
1438                     ELSIF (l_conv_flag = 'HMHR') THEN
1439 
1440                        -- AXE
1441                        -- [AAB][01/23/2004][BUG#      ]
1442                        -- Check that the return value has a colon in it otherwise we could get
1443                        -- a weird value for the time
1444                        --
1445                        l_colon_check := instr(l_ret_time_val,':');
1446 
1447                        IF l_debug_on THEN
1448                           WSH_DEBUG_SV.log(l_module_name,'check HMHR return time for a colon, l_colon_check = ',l_colon_check);
1449                        END IF;
1450 
1451                        IF (l_colon_check <= 0) THEN
1452                           --
1453                           -- Error no colon in the return time string
1454                           --
1455                           RAISE FTE_DIST_INV_TIME_FORMAT;
1456                           --
1457                           IF l_debug_on THEN
1458                              WSH_DEBUG_SV.pop(l_module_name);
1459                           END IF;
1460                           --
1461                           RETURN;
1462                        END IF;
1463 
1464                        IF l_debug_on THEN
1465                           WSH_DEBUG_SV.log(l_module_name,'converting HR:MIN to Hours');
1466                        END IF;
1467 
1468                        l_ret_mins := to_number(substr(l_ret_time_val, (instr(l_ret_time_val,':')+1),LENGTH(l_ret_time_val)));
1469                        l_ret_hrs  := to_number(substr(l_ret_time_val,1,(instr(l_ret_time_val,':')-1)));
1470                        l_ret_time := ((l_ret_mins /60) + l_ret_hrs);
1471 
1472                        IF l_debug_on THEN
1473                           WSH_DEBUG_SV.log(l_module_name,'END OF converting HR:MIN to Hours');
1474                        END IF;
1475                     END IF;
1476                  ELSE
1477                     l_ret_time := to_number(l_ret_time_val);
1478                  END IF;
1479               ELSE
1480                  l_ret_time := 0;
1481               END IF;
1482            ELSE
1483               l_ret_time := null;
1484            END IF;
1485 
1486 
1487            --
1488            -- Now we have to get the orign and destination regions from
1489            -- the download line table
1490            --
1491            -- Increment the load counter
1492            --
1493            l_load_ctr := l_load_ctr + 1;
1494 
1495            IF l_debug_on THEN
1496               WSH_DEBUG_SV.log(l_module_name,'l_load_ctr',l_load_ctr);
1497            END IF;
1498 
1499            l_location_origin_id(l_load_ctr)              := l_origin_id_tab(l_line_ctr);
1500            l_location_destination_id(l_load_ctr)         := l_destination_id_tab(l_line_ctr);
1501            l_location_identifier_type(l_load_ctr)        := l_identifier_type;
1502            l_location_distance(l_load_ctr)               := l_ret_dist;
1503            l_location_distance_uom(l_load_ctr)           := l_distance_uom_code;    -- AXE l_ret_dist_db_uom;
1504            l_location_transit_time(l_load_ctr)           := l_ret_time;
1505            l_location_transit_time_uom(l_load_ctr)       := l_time_uom_code;        -- AXE l_ret_time_db_uom;
1506            l_location_creation_date(l_load_ctr)          := l_cur_date;
1507            l_location_created_by(l_load_ctr)             := g_user_id;
1508            l_location_last_update_date(l_load_ctr)       := l_cur_date;
1509            l_location_last_updated_by(l_load_ctr)        := g_user_id;
1510            l_location_last_update_login(l_load_ctr)      := null;
1511            l_location_program_app_id(l_load_ctr)         := null;
1512            l_location_program_id(l_load_ctr)             := null;
1513            l_location_program_update_date(l_load_ctr)    := null;
1514            l_location_request_id(l_load_ctr)             := p_load_id;
1515 
1516            IF (l_load_ctr = 250) THEN
1517               IF l_debug_on THEN
1518                  WSH_DEBUG_SV.logmsg(l_module_name,'we are going to insert 250 at a time into the global temp table insert into fte_distance_loader_tmp');
1519               END IF;
1520               --
1521               FND_FILE.PUT_LINE(FND_FILE.log, 'Inserting 250 records into temp table');
1522               --
1523               -- we are going to insert 250 at a time into the global
1524               -- temp table
1525               --
1526               FORALL i in l_location_origin_id.FIRST..l_location_origin_id.LAST
1527                  insert into fte_distance_loader_tmp(ORIGIN_ID,
1528                                                      DESTINATION_ID,
1529                                                      IDENTIFIER_TYPE,
1530                                                      DISTANCE,
1531                                                      DISTANCE_UOM,
1532                                                      TRANSIT_TIME,
1533                                                      TRANSIT_TIME_UOM,
1534                                                      CREATION_DATE,
1535                                                      CREATED_BY,
1536                                                      LAST_UPDATE_DATE,
1537                                                      LAST_UPDATED_BY,
1538                                                      LAST_UPDATE_LOGIN,
1539                                                      PROGRAM_APPLICATION_ID,
1540                                                      PROGRAM_ID,
1541                                                      PROGRAM_UPDATE_DATE,
1542                                                      REQUEST_ID)
1543                                               values(l_location_origin_id(i),
1544                                                      l_location_destination_id(i),
1545                                                      l_location_identifier_type(i),
1546                                                      l_location_distance(i),
1547                                                      l_location_distance_uom(i),
1548                                                      l_location_transit_time(i),
1549                                                      l_location_transit_time_uom(i),
1550                                                      l_location_creation_date(i),
1551                                                      l_location_created_by(i),
1552                                                      l_location_last_update_date(i),
1553                                                      l_location_last_updated_by(i),
1554                                                      l_location_last_update_login(i),
1555                                                      l_location_program_app_id(i),
1556                                                      l_location_program_id(i),
1557                                                      l_location_program_update_date(i),
1558                                                      l_location_request_id(i));
1559 
1560 
1561               --
1562               -- Clear the tables for the next pass
1563               --
1564               IF l_debug_on THEN
1565                  WSH_DEBUG_SV.logmsg(l_module_name,'Clearing the temp tables for the next pass');
1566               END IF;
1567 
1568               l_location_origin_id.DELETE;
1569               l_location_destination_id.DELETE;
1570               l_location_identifier_type.DELETE;
1571               l_location_distance.DELETE;
1572               l_location_distance_uom.DELETE;
1573               l_location_transit_time.DELETE;
1574               l_location_transit_time_uom.DELETE;
1575               l_location_creation_date.DELETE;
1576               l_location_created_by.DELETE;
1577               l_location_last_update_date.DELETE;
1578               l_location_last_updated_by.DELETE;
1579               l_location_last_update_login.DELETE;
1580               l_location_program_app_id.DELETE;
1581               l_location_program_id.DELETE;
1582               l_location_program_update_date.DELETE;
1583               l_location_request_id.DELETE;
1584 
1585               l_load_ctr := 0;
1586            END IF;
1587 
1588         --
1589         -- End of reading the line
1590         --
1591         END LOOP;
1592 
1593 
1594         IF l_debug_on THEN
1595            WSH_DEBUG_SV.logmsg(l_module_name,'Close the file');
1596         END IF;
1597         --
1598         -- End of reading the file - close it out
1599         --
1600         utl_file.fclose(l_dtt_file);
1601 
1602 
1603      EXCEPTION
1604         WHEN FTE_DIST_INV_TIME_FORMAT THEN
1605            --
1606            -- Close the file
1607            --
1608            IF (utl_file.is_open(l_dtt_file)) THEN
1609               utl_file.fclose(l_dtt_file);
1610            END IF;
1611            FND_MESSAGE.SET_NAME('FTE','FTE_DIST_INV_TIME_FORMAT');
1612            x_return_status  := 2;
1613            x_return_message := FND_MESSAGE.GET;
1614            FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - INV TIME FORMAT. '||x_return_message);
1615 
1616            --
1617            -- Close the cursors
1618            --
1619            IF (c_check_download_lines%ISOPEN) THEN
1620               CLOSE c_check_download_lines;
1621            END IF;
1622 
1623            IF (c_get_file_info%ISOPEN) THEN
1624               CLOSE c_get_file_info;
1625            END IF;
1626 
1627            IF (c_get_download_lines%ISOPEN) THEN
1628               CLOSE c_get_download_lines;
1629            END IF;
1630 
1631            IF (c_get_ret_col_info%ISOPEN) THEN
1632               CLOSE c_get_ret_col_info;
1633            END IF;
1634 
1635            IF (c_get_ret_enabled%ISOPEN) THEN
1636               CLOSE c_get_ret_enabled;
1637            END IF;
1638 
1639            IF (c_get_merge_data%ISOPEN) THEN
1640               CLOSE c_get_merge_data;
1641            END IF;
1642 
1643            IF (c_get_time_uom%ISOPEN) THEN
1644               CLOSE c_get_time_uom;
1645            END IF;
1646 
1647            IF (c_get_distance_uom%ISOPEN) THEN
1648               CLOSE c_get_distance_uom;
1649            END IF;
1650 
1651            --
1652            -- Debug Statements
1653            --
1654            --
1655            IF l_debug_on THEN
1656               WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_INV_TIME_FORMAT FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
1657               WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_INV_TIME_FORMAT');
1658               WSH_DEBUG_SV.pop(l_module_name);
1659            END IF;
1660            --
1661            RETURN;
1662 
1663 
1664         WHEN FTE_DIST_INV_LINE_LENGTH THEN
1665            --
1666            -- Close the file
1667            --
1668            IF (utl_file.is_open(l_dtt_file)) THEN
1669               utl_file.fclose(l_dtt_file);
1670            END IF;
1671            FND_MESSAGE.SET_NAME('FTE','FTE_DIST_INV_LINE_LENGTH');
1672            x_return_status  := 2;
1673            x_return_message := FND_MESSAGE.GET;
1674            FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - INV LINE LENGTH. '||x_return_message);
1675 
1676            --
1677            -- Close the cursors
1678            --
1679            IF (c_check_download_lines%ISOPEN) THEN
1680               CLOSE c_check_download_lines;
1681            END IF;
1682 
1683            IF (c_get_file_info%ISOPEN) THEN
1684               CLOSE c_get_file_info;
1685            END IF;
1686 
1687            IF (c_get_download_lines%ISOPEN) THEN
1688               CLOSE c_get_download_lines;
1689            END IF;
1690 
1691            IF (c_get_ret_col_info%ISOPEN) THEN
1692               CLOSE c_get_ret_col_info;
1693            END IF;
1694 
1695            IF (c_get_ret_enabled%ISOPEN) THEN
1696               CLOSE c_get_ret_enabled;
1697            END IF;
1698 
1699            IF (c_get_merge_data%ISOPEN) THEN
1700               CLOSE c_get_merge_data;
1701            END IF;
1702 
1703            IF (c_get_time_uom%ISOPEN) THEN
1704               CLOSE c_get_time_uom;
1705            END IF;
1706 
1707            IF (c_get_distance_uom%ISOPEN) THEN
1708               CLOSE c_get_distance_uom;
1709            END IF;
1710 
1711            --
1712            -- Debug Statements
1713            --
1714            --
1715            IF l_debug_on THEN
1716               WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_INV_LINE_LENGTH FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
1717               WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_INV_LINE_LENGTH');
1718               WSH_DEBUG_SV.pop(l_module_name);
1719            END IF;
1720            --
1721            RETURN;
1722 
1723 
1724         WHEN NO_DATA_FOUND THEN
1725            --
1726            -- Occurs when the entire file has been read, this is OK
1727            -- Close the file
1728            --
1729            IF (utl_file.is_open(l_dtt_file)) THEN
1730               utl_file.fclose(l_dtt_file);
1731            END IF;
1732            IF l_debug_on THEN
1733               WSH_DEBUG_SV.logmsg(l_module_name,'Finished reading file');
1734            END IF;
1735 
1736            FND_FILE.PUT_LINE(FND_FILE.LOG, 'Finished Reading File.');
1737            x_return_status := -1;
1738 
1739 
1740         WHEN UTL_FILE.INVALID_PATH THEN
1741            --
1742            -- Close the file
1743            --
1744            IF (utl_file.is_open(l_dtt_file)) THEN
1745               utl_file.fclose(l_dtt_file);
1746            END IF;
1747            x_return_message := 'FILE ' || p_source_file_directory || '/' || p_source_file_name || ' NOT ACCESSIBLE';
1748            x_return_message := x_return_message||' Also please make sure that the directory is accessible to UTL_FILE.';
1749            fnd_file.put_line(FND_FILE.log, x_return_message);
1750            x_return_status := 2;
1751            --
1752            --
1753            -- Close the cursors
1754            --
1755            IF (c_check_download_lines%ISOPEN) THEN
1756               CLOSE c_check_download_lines;
1757            END IF;
1758 
1759            IF (c_get_file_info%ISOPEN) THEN
1760               CLOSE c_get_file_info;
1761            END IF;
1762 
1763            IF (c_get_download_lines%ISOPEN) THEN
1764               CLOSE c_get_download_lines;
1765            END IF;
1766 
1767            IF (c_get_ret_col_info%ISOPEN) THEN
1768               CLOSE c_get_ret_col_info;
1769            END IF;
1770 
1771            IF (c_get_ret_enabled%ISOPEN) THEN
1772               CLOSE c_get_ret_enabled;
1773            END IF;
1774 
1775            IF (c_get_merge_data%ISOPEN) THEN
1776               CLOSE c_get_merge_data;
1777            END IF;
1778 
1779            IF (c_get_time_uom%ISOPEN) THEN
1780               CLOSE c_get_time_uom;
1781            END IF;
1782 
1783            IF (c_get_distance_uom%ISOPEN) THEN
1784               CLOSE c_get_distance_uom;
1785            END IF;
1786 
1787            IF l_debug_on THEN
1788              WSH_DEBUG_SV.logmsg(l_module_name,'ERROR UTL_FILE.INVALID_PATH FTE_BULK_DTT_PKG.READ_DTT_FILE  ' ||x_return_message);
1789               WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:UTL_FILE.INVALID_PATH');
1790               WSH_DEBUG_SV.pop(l_module_name);
1791            END IF;
1792            --
1793            RETURN;
1794 
1795 
1796         WHEN OTHERS THEN
1797            --
1798            -- Close the file
1799            --
1800            IF (utl_file.is_open(l_dtt_file)) THEN
1801               utl_file.fclose(l_dtt_file);
1802            END IF;
1803 
1804            FND_FILE.PUT_LINE(FND_FILE.log, 'UNEXPECTED ERROR IN PROCEDURE READ_DTT_FILE.'||sqlerrm);
1805            FND_FILE.PUT_LINE(FND_FILE.log, 'OFFENDING_LINE: ' || l_line);
1806            FND_FILE.PUT_LINE(FND_FILE.Log, sqlerrm);
1807            x_return_status := 2;
1808            x_return_message := ('UNEXPECTED ERROR IN PROCEDURE FTE_BULK_DTT_PKG.READ_DTT_FILE: '||sqlerrm);
1809 
1810            --
1811            -- Close the cursors
1812            --
1813            IF (c_check_download_lines%ISOPEN) THEN
1814               CLOSE c_check_download_lines;
1815            END IF;
1816 
1817            IF (c_get_file_info%ISOPEN) THEN
1818               CLOSE c_get_file_info;
1819            END IF;
1820 
1821            IF (c_get_download_lines%ISOPEN) THEN
1822               CLOSE c_get_download_lines;
1823            END IF;
1824 
1825            IF (c_get_ret_col_info%ISOPEN) THEN
1826               CLOSE c_get_ret_col_info;
1827            END IF;
1828 
1829            IF (c_get_ret_enabled%ISOPEN) THEN
1830               CLOSE c_get_ret_enabled;
1831            END IF;
1832 
1833            IF (c_get_merge_data%ISOPEN) THEN
1834               CLOSE c_get_merge_data;
1835            END IF;
1836 
1837            IF (c_get_time_uom%ISOPEN) THEN
1838               CLOSE c_get_time_uom;
1839            END IF;
1840 
1841            IF (c_get_distance_uom%ISOPEN) THEN
1842               CLOSE c_get_distance_uom;
1843            END IF;
1844 
1845            --
1846            -- Debug Statements
1847            --
1848            IF l_debug_on THEN
1849               WSH_DEBUG_SV.logmsg(l_module_name,'THE UNEXPECTED ERROR FROM FTE_BULK_DTT_PKG.READ_DTT_FILE IS ' ||sqlerrm);
1850               WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||sqlerrm,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1851               WSH_DEBUG_SV.logmsg(l_module_name,'OFFENDING_LINE: ' ||l_line);
1852               WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1853            END IF;
1854 
1855            RAISE;
1856 
1857 
1858      END;
1859 
1860 
1861 
1862      --
1863      -- insert the last few lines that did not sum upto 250
1864      -- into the Global temp table
1865      --
1866      IF (l_location_origin_id.COUNT > 0) THEN
1867 
1868         IF l_debug_on THEN
1869            WSH_DEBUG_SV.logmsg(l_module_name,'insert the last few lines that did not sum upto 250 into the Global temp table');
1870         END IF;
1871 
1872         FND_FILE.PUT_LINE(FND_FILE.log, 'Inserting remainder of records into temp table');
1873 
1874         FORALL i in l_location_origin_id.FIRST..l_location_origin_id.LAST
1875            insert into fte_distance_loader_tmp(ORIGIN_ID,
1876                                                DESTINATION_ID,
1877                                                IDENTIFIER_TYPE,
1878                                                DISTANCE,
1879                                                DISTANCE_UOM,
1880                                                TRANSIT_TIME,
1881                                                TRANSIT_TIME_UOM,
1882                                                CREATION_DATE,
1883                                                CREATED_BY,
1884                                                LAST_UPDATE_DATE,
1885                                                LAST_UPDATED_BY,
1886                                                LAST_UPDATE_LOGIN,
1887                                                PROGRAM_APPLICATION_ID,
1888                                                PROGRAM_ID,
1889                                                PROGRAM_UPDATE_DATE,
1890                                                REQUEST_ID)
1891                                         values(l_location_origin_id(i),
1892                                                l_location_destination_id(i),
1893                                                l_location_identifier_type(i),
1894                                                l_location_distance(i),
1895                                                l_location_distance_uom(i),
1896                                                l_location_transit_time(i),
1897                                                l_location_transit_time_uom(i),
1898                                                l_location_creation_date(i),
1899                                                l_location_created_by(i),
1900                                                l_location_last_update_date(i),
1901                                                l_location_last_updated_by(i),
1902                                                l_location_last_update_login(i),
1903                                                l_location_program_app_id(i),
1904                                                l_location_program_id(i),
1905                                                l_location_program_update_date(i),
1906                                                l_location_request_id(i));
1907 
1908         --
1909         -- Clean the local tables
1910         --
1911         IF l_debug_on THEN
1912            WSH_DEBUG_SV.logmsg(l_module_name,'Clean the temp tables');
1913         END IF;
1914         --
1915         l_location_origin_id.DELETE;
1916         l_location_destination_id.DELETE;
1917         l_location_identifier_type.DELETE;
1918         l_location_distance.DELETE;
1919         l_location_distance_uom.DELETE;
1920         l_location_transit_time.DELETE;
1921         l_location_transit_time_uom.DELETE;
1922         l_location_creation_date.DELETE;
1923         l_location_created_by.DELETE;
1924         l_location_last_update_date.DELETE;
1925         l_location_last_updated_by.DELETE;
1926         l_location_last_update_login.DELETE;
1927         l_location_program_app_id.DELETE;
1928         l_location_program_id.DELETE;
1929         l_location_program_update_date.DELETE;
1930         l_location_request_id.DELETE;
1931 
1932         l_load_ctr := 0;
1933      END IF;
1934 
1935      --
1936      -- Only insert all records if the number of lines in the file mathes the number of lines in the table
1937      --
1938      IF (l_number_of_table_lines = l_line_ctr) THEN
1939 
1940         FND_FILE.PUT_LINE(FND_FILE.log, 'Number of lines in the table matched the number of lines in the file, inserting and/or updating into the location mileages table');
1941 
1942         IF l_debug_on THEN
1943            WSH_DEBUG_SV.logmsg(l_module_name,'Number of lines in the table matched the number of lines in the file, inserting and/or updating into the location mileages table');
1944         END IF;
1945         --
1946 
1947 
1948 -- ----------------------------------------------------------------------------
1949 -- [ABLUNDEL][12/08/2003][BUG# 3301222]
1950 --
1951 -- The following merge SQL statement was removed as it is not compatible
1952 -- with 8i installations only 9i ort higher. This was failing when applied
1953 -- to an 8i instance. It was replaced by the code following the merge statement
1954 -- to allow for 8i compatibility
1955 --
1956 --
1957 --
1958 --      --
1959 --      -- All the records are in the temp table now we have to insert/update them into the
1960 --      -- fte_location_mileages table using the new funky MErGe stuff.....
1961 --      --
1962 --      MERGE INTO fte_location_mileages flm
1963 --      USING (SELECT origin_id,
1964 --                    destination_id,
1965 --                    identifier_type,
1966 --                    distance,
1967 --                    distance_uom,
1968 --                    transit_time,
1969 --                    transit_time_uom,
1970 --                    creation_date,
1971 --                    created_by,
1972 --                    last_update_date,
1973 --                    last_updated_by,
1974 --                    last_update_login,
1975 --                    program_application_id,
1976 --                    program_id,
1977 --                    program_update_date,
1978 --                    request_id  FROM FTE_DISTANCE_LOADER_TMP) fdlt
1979 --      ON (flm.origin_id      = fdlt.origin_id AND
1980 --          flm.destination_id = fdlt.destination_id)
1981 --      WHEN MATCHED THEN UPDATE SET flm.identifier_type        = fdlt.identifier_type,
1982 --                                   flm.distance               = fdlt.distance,
1983 --                                   flm.distance_uom           = fdlt.distance_uom,
1984 --                                   flm.transit_time           = fdlt.transit_time,
1985 --                                   flm.transit_time_uom       = fdlt.transit_time_uom,
1986 --                                   flm.last_update_date       = fdlt.last_update_date,
1987 --                                   flm.last_updated_by        = fdlt.last_updated_by,
1988 --                                   flm.last_update_login      = fdlt.last_update_login,
1989 --                                   flm.program_application_id = fdlt.program_application_id,
1990 --                                   flm.program_id             = fdlt.program_id,
1991 --                                   flm.program_update_date    = fdlt.program_update_date,
1992 --                                   flm.request_id             = fdlt.request_id
1993 --      WHEN NOT MATCHED THEN INSERT (flm.origin_id,
1994 --                                    flm.destination_id,
1995 --                                    flm.identifier_type,
1996 --                                    flm.distance,
1997 --                                    flm.distance_uom,
1998 --                                    flm.transit_time,
1999 --                                    flm.transit_time_uom,
2000 --                                    flm.creation_date,
2001 --                                    flm.created_by,
2002 --                                    flm.last_update_date,
2003 --                                    flm.last_updated_by,
2004 --                                    flm.last_update_login,
2005 --                                    flm.program_application_id,
2006 --                                    flm.program_id,
2007 --                                    flm.program_update_date,
2008 --                                    flm.request_id)
2009 --                            VALUES (fdlt.origin_id,
2010 --                                    fdlt.destination_id,
2011 --                                    fdlt.identifier_type,
2012 --                                    fdlt.distance,
2013 --                                    fdlt.distance_uom,
2014 --                                    fdlt.transit_time,
2015 --                                    fdlt.transit_time_uom,
2016 --                                    fdlt.creation_date,
2017 --                                    fdlt.created_by,
2018 --                                    fdlt.last_update_date,
2019 --                                    fdlt.last_updated_by,
2020 --                                    fdlt.last_update_login,
2021 --                                    fdlt.program_application_id,
2022 --                                    fdlt.program_id,
2023 --                                    fdlt.program_update_date,
2024 --                                    fdlt.request_id);
2025 --
2026 --
2027 --
2028 --
2029 -- [ABLUNDEL][12/08/2003][BUG# 3301222]
2030 --
2031 -- New code to replace the MERGE statement above for 8i compatibility
2032 --
2033 --
2034         FND_FILE.PUT_LINE(FND_FILE.log,'Clean up the query collections');
2035         --
2036         IF l_debug_on THEN
2037            WSH_DEBUG_SV.logmsg(l_module_name,'Clean up the query collections');
2038         END IF;
2039 
2040         --
2041         -- Clean up the query collections
2042         --
2043         l_old_origin_id_tab.DELETE;
2044         l_old_destination_id_tab.DELETE;
2045         l_new_origin_id_tab.DELETE;
2046         l_new_destination_id_tab.DELETE;
2047         l_new_identifier_type_tab.DELETE;
2048         l_new_distance_tab.DELETE;
2049         l_new_distance_uom_tab.DELETE;
2050         l_new_transit_time_tab.DELETE;
2051         l_new_transit_time_uom_tab.DELETE;
2052         l_new_creation_date_tab.DELETE;
2053         l_new_created_by_tab.DELETE;
2054         l_new_last_update_date_tab.DELETE;
2055         l_new_last_updated_by_tab.DELETE;
2056         l_new_last_update_login_tab.DELETE;
2057         l_new_program_app_id_tab.DELETE;
2058         l_new_program_id_tab.DELETE;
2059         l_new_program_update_date_tab.DELETE;
2060         l_new_request_id_tab.DELETE;
2061 
2062         --
2063         -- Set the previous rows counter to zero
2064         --
2065         l_previous_rows := 0;
2066 
2067         FND_FILE.PUT_LINE(FND_FILE.log,'Open the cursor, c_get_merge_data, to get the records to update and/or insert');
2068                  --
2069         IF l_debug_on THEN
2070            WSH_DEBUG_SV.logmsg(l_module_name,'Open the cursor, c_get_merge_data, to get the records to update and/or insert');
2071         END IF;
2072 
2073         --
2074         -- Open the cursor to get the records to update and/or insert
2075         --
2076         OPEN c_get_merge_data;
2077            LOOP
2078               FETCH c_get_merge_data BULK COLLECT INTO
2079                  l_old_origin_id_tab,
2080                  l_old_destination_id_tab,
2081                  l_new_origin_id_tab,
2082                  l_new_destination_id_tab,
2083                  l_new_identifier_type_tab,
2084                  l_new_distance_tab,
2085                  l_new_distance_uom_tab,
2086                  l_new_transit_time_tab,
2087                  l_new_transit_time_uom_tab,
2088                  l_new_creation_date_tab,
2089                  l_new_created_by_tab,
2090                  l_new_last_update_date_tab,
2091                  l_new_last_updated_by_tab,
2092                  l_new_last_update_login_tab,
2093                  l_new_program_app_id_tab,
2094                  l_new_program_id_tab,
2095                  l_new_program_update_date_tab,
2096                  l_new_request_id_tab
2097               LIMIT l_bulk_collect_size;
2098 
2099 
2100               --
2101               -- Set the current rows and remaining rows counters to be
2102               -- able to see if there are any records left in the cursor
2103               --
2104               l_current_rows   := c_get_merge_data%rowcount ;
2105               l_remaining_rows := l_current_rows - l_previous_rows;
2106 
2107 
2108 
2109               IF (l_remaining_rows <= 0) then
2110 
2111                  FND_FILE.PUT_LINE(FND_FILE.log,'There are no rows left from the cursor - exit the loop');
2112                  --
2113                  IF l_debug_on THEN
2114                     WSH_DEBUG_SV.logmsg(l_module_name,'There are no rows left from the cursor - exit the loop');
2115                  END IF;
2116                  --
2117                  -- There are no rows left from the cursor - exit the loop
2118                  --
2119                  EXIT;
2120               END IF;
2121 
2122               --
2123               -- Set the previous rows counter to equal the current rows counter
2124               --
2125               l_previous_rows := l_current_rows ;
2126 
2127 
2128 
2129               IF (l_new_origin_id_tab.COUNT > 0) THEN
2130                  --
2131                  -- We have records to insert or update
2132                  -- Clean out the Update anbd insert plsql collections
2133                  --
2134 
2135                  FND_FILE.PUT_LINE(FND_FILE.log,'cleaning the temp update tables');
2136                  --
2137                  IF l_debug_on THEN
2138                     WSH_DEBUG_SV.logmsg(l_module_name,'cleaning the temp update tables');
2139                  END IF;
2140 
2141                  l_u_origin_id_tab.DELETE;
2142                  l_u_destination_id_tab.DELETE;
2143                  l_u_identifier_type_tab.DELETE;
2144                  l_u_distance_tab.DELETE;
2145                  l_u_distance_uom_tab.DELETE;
2146                  l_u_transit_time_tab.DELETE;
2147                  l_u_transit_time_uom_tab.DELETE;
2148                  l_u_last_update_date_tab.DELETE;
2149                  l_u_last_updated_by_tab.DELETE;
2150                  l_u_last_update_login_tab.DELETE;
2151                  l_u_program_app_id_tab.DELETE;
2152                  l_u_program_id_tab.DELETE;
2153                  l_u_program_update_date_tab.DELETE;
2154                  l_u_request_id_tab.DELETE;
2155 
2156 
2157                  FND_FILE.PUT_LINE(FND_FILE.log,'cleaning the temp insert tables');
2158                  --
2159                  IF l_debug_on THEN
2160                     WSH_DEBUG_SV.logmsg(l_module_name,'cleaning the temp insert tables');
2161                  END IF;
2162 
2163                  l_i_origin_id_tab.DELETE;
2164                  l_i_destination_id_tab.DELETE;
2165                  l_i_identifier_type_tab.DELETE;
2166                  l_i_distance_tab.DELETE;
2167                  l_i_distance_uom_tab.DELETE;
2168                  l_i_transit_time_tab.DELETE;
2169                  l_i_transit_time_uom_tab.DELETE;
2170                  l_i_creation_date_tab.DELETE;
2171                  l_i_created_by_tab.DELETE;
2172                  l_i_last_update_date_tab.DELETE;
2173                  l_i_last_updated_by_tab.DELETE;
2174                  l_i_last_update_login_tab.DELETE;
2175                  l_i_program_app_id_tab.DELETE;
2176                  l_i_program_id_tab.DELETE;
2177                  l_i_program_update_date_tab.DELETE;
2178                  l_i_request_id_tab.DELETE;
2179 
2180 
2181                  --
2182                  -- Reset the insert and update counters
2183                  --
2184                  l_insert_ctr := 0;
2185                  l_update_ctr := 0;
2186 
2187 
2188 
2189                  FOR kk in l_new_origin_id_tab.FIRST..l_new_origin_id_tab.LAST LOOP  -- LOOP_02
2190                    --
2191                    -- Loop through the query return and see which records need
2192                    -- to be updated or inserted
2193                    --
2194                    FND_FILE.PUT_LINE(FND_FILE.log, 'checking for insert and update records');
2195                    --
2196                    IF l_debug_on THEN
2197                       WSH_DEBUG_SV.logmsg(l_module_name,'checking for insert and update records');
2198                    END IF;
2199 
2200                     IF ((l_old_origin_id_tab(kk) is null) AND
2201                         (l_old_destination_id_tab(kk) is null)) THEN
2202 
2203                        FND_FILE.PUT_LINE(FND_FILE.log, 'getting insert records');
2204                        --
2205                        IF l_debug_on THEN
2206                           WSH_DEBUG_SV.logmsg(l_module_name,'getting insert records');
2207                        END IF;
2208                        --
2209                        -- Must be for an insert
2210                        --
2211 
2212                        -- Increment the insert counter
2213                        l_insert_ctr := l_insert_ctr + 1;
2214 
2215                        --
2216                        -- Populate the insert collections with the queried data
2217                        --
2218                        l_i_origin_id_tab(l_insert_ctr)           := l_new_origin_id_tab(kk);
2219                        l_i_destination_id_tab(l_insert_ctr)      := l_new_destination_id_tab(kk);
2220                        l_i_identifier_type_tab(l_insert_ctr)     := l_new_identifier_type_tab(kk);
2221                        l_i_distance_tab(l_insert_ctr)            := l_new_distance_tab(kk);
2222                        l_i_distance_uom_tab(l_insert_ctr)        := l_new_distance_uom_tab(kk);
2223                        l_i_transit_time_tab(l_insert_ctr)        := l_new_transit_time_tab(kk);
2224                        l_i_transit_time_uom_tab(l_insert_ctr)    := l_new_transit_time_uom_tab(kk);
2225                        l_i_creation_date_tab(l_insert_ctr)       := l_new_creation_date_tab(kk);
2226                        l_i_created_by_tab(l_insert_ctr)          := l_new_created_by_tab(kk);
2227                        l_i_last_update_date_tab(l_insert_ctr)    := l_new_last_update_date_tab(kk);
2228                        l_i_last_updated_by_tab(l_insert_ctr)     := l_new_last_updated_by_tab(kk);
2229                        l_i_last_update_login_tab(l_insert_ctr)   := l_new_last_update_login_tab(kk);
2230                        l_i_program_app_id_tab(l_insert_ctr)      := l_new_program_app_id_tab(kk);
2231                        l_i_program_id_tab(l_insert_ctr)          := l_new_program_id_tab(kk);
2232                        l_i_program_update_date_tab(l_insert_ctr) := l_new_program_update_date_tab(kk);
2233                        l_i_request_id_tab(l_insert_ctr)          := l_new_request_id_tab(kk);
2234 
2235                     ELSIF ((l_old_origin_id_tab(kk) is not null) AND
2236                        (l_old_destination_id_tab(kk) is not null)) THEN
2237 
2238                        FND_FILE.PUT_LINE(FND_FILE.log, 'getting update records');
2239                        --
2240                        IF l_debug_on THEN
2241                           WSH_DEBUG_SV.logmsg(l_module_name,'getting update records');
2242                        END IF;
2243 
2244                        --
2245                        -- must be an update
2246                        --
2247 
2248                        -- increment the update couter
2249                        l_update_ctr := l_update_ctr + 1;
2250 
2251                        --
2252                        -- Populate the update collections with the queried data
2253                        --
2254                        l_u_origin_id_tab(l_update_ctr)           := l_old_origin_id_tab(kk);
2255                        l_u_destination_id_tab(l_update_ctr)      := l_old_destination_id_tab(kk);
2256                        l_u_identifier_type_tab(l_update_ctr)     := l_new_identifier_type_tab(kk);
2257                        l_u_distance_tab(l_update_ctr)            := l_new_distance_tab(kk);
2258                        l_u_distance_uom_tab(l_update_ctr)        := l_new_distance_uom_tab(kk);
2259                        l_u_transit_time_tab(l_update_ctr)        := l_new_transit_time_tab(kk);
2260                        l_u_transit_time_uom_tab(l_update_ctr)    := l_new_transit_time_uom_tab(kk);
2261                        l_u_last_update_date_tab(l_update_ctr)    := l_new_last_update_date_tab(kk);
2262                        l_u_last_updated_by_tab(l_update_ctr)     := l_new_last_updated_by_tab(kk);
2263                        l_u_last_update_login_tab(l_update_ctr)   := l_new_last_update_login_tab(kk);
2264                        l_u_program_app_id_tab(l_update_ctr)      := l_new_program_app_id_tab(kk);
2265                        l_u_program_id_tab(l_update_ctr)          := l_new_program_id_tab(kk);
2266                        l_u_program_update_date_tab(l_update_ctr) := l_new_program_update_date_tab(kk);
2267                        l_u_request_id_tab(l_update_ctr)          := l_new_request_id_tab(kk);
2268                     ELSE
2269                        --
2270                        -- This is an error, there should either be both or neither
2271                        --
2272                        RAISE FTE_DIST_ORIG_DEST_LOAD_ERR;
2273                        --
2274                        IF l_debug_on THEN
2275                           WSH_DEBUG_SV.pop(l_module_name);
2276                        END IF;
2277                        --
2278                        RETURN;
2279                     END IF;
2280 
2281                  END LOOP;    -- END OF LOOP_02 (checking for insert and update records
2282 
2283 
2284 
2285                  --
2286                  -- Do the update if any
2287                  --
2288                  IF (l_u_origin_id_tab.COUNT > 0) THEN
2289 
2290                     FND_FILE.PUT_LINE(FND_FILE.log, 'Bulk update of mileage records');
2291                     --
2292                     IF l_debug_on THEN
2293                        WSH_DEBUG_SV.logmsg(l_module_name,'Bulk update of mileage records');
2294                     END IF;
2295 
2296                     --
2297                     -- Update records exist, doing a bulk update
2298                     --
2299                     FORALL m in l_u_origin_id_tab.FIRST..l_u_origin_id_tab.LAST
2300                        UPDATE FTE_LOCATION_MILEAGES
2301                           SET    identifier_type        = l_u_identifier_type_tab(m),
2302                                  distance               = l_u_distance_tab(m),
2303                                  distance_uom           = l_u_distance_uom_tab(m),
2304                                  transit_time           = l_u_transit_time_tab(m),
2305                                  transit_time_uom       = l_u_transit_time_uom_tab(m),
2306                                  last_update_date       = l_u_last_update_date_tab(m),
2307                                  last_updated_by        = l_u_last_updated_by_tab(m),
2308                                  last_update_login      = l_u_last_update_login_tab(m),
2309                                  program_application_id = l_u_program_app_id_tab(m),
2310                                  program_id             = l_u_program_id_tab(m),
2311                                  program_update_date    = l_u_program_update_date_tab(m),
2312                                  request_id             = l_u_request_id_tab(m)
2313                           WHERE  origin_id = l_u_origin_id_tab(m)
2314                           AND    destination_id = l_u_destination_id_tab(m);
2315                  END IF;
2316 
2317 
2318                  --
2319                  -- now do the insert
2320                  --
2321                  IF (l_i_origin_id_tab.COUNT > 0) THEN
2322 
2323                     FND_FILE.PUT_LINE(FND_FILE.log, 'Bulk insert of mileage records');
2324                     --
2325                     IF l_debug_on THEN
2326                        WSH_DEBUG_SV.logmsg(l_module_name,'Bulk insert of mileage records');
2327                     END IF;
2328 
2329                     --
2330                     -- Insert records exist, doing a bulk insert
2331                     --
2332                     FORALL i in l_i_origin_id_tab.FIRST..l_i_origin_id_tab.LAST
2333                        insert into FTE_LOCATION_MILEAGES(origin_id,
2334                                                          destination_id,
2335                                                          identifier_type,
2336                                                          distance,
2337                                                          distance_uom,
2338                                                          transit_time,
2339                                                          transit_time_uom,
2340                                                          creation_date,
2341                                                          created_by,
2342                                                          last_update_date,
2343                                                          last_updated_by,
2344                                                          last_update_login,
2345                                                          program_application_id,
2346                                                          program_id,
2347                                                          program_update_date,
2348                                                          request_id)
2349                                                   values(l_i_origin_id_tab(i),
2350                                                          l_i_destination_id_tab(i),
2351                                                          l_i_identifier_type_tab(i),
2352                                                          l_i_distance_tab(i),
2353                                                          l_i_distance_uom_tab(i),
2354                                                          l_i_transit_time_tab(i),
2355                                                          l_i_transit_time_uom_tab(i),
2356                                                          l_i_creation_date_tab(i),
2357                                                          l_i_created_by_tab(i),
2358                                                          l_i_last_update_date_tab(i),
2359                                                          l_i_last_updated_by_tab(i),
2360                                                          l_i_last_update_login_tab(i),
2361                                                          l_i_program_app_id_tab(i),
2362                                                          l_i_program_id_tab(i),
2363                                                          l_i_program_update_date_tab(i),
2364                                                          l_i_request_id_tab(i));
2365 
2366                  END IF;
2367               END IF;
2368 
2369               EXIT WHEN c_get_merge_data%NOTFOUND OR c_get_merge_data%NOTFOUND IS NULL;
2370            END LOOP;   -- End of LOOP_01 (Cursor query loop
2371 
2372            --
2373            -- Close the cursor if open
2374            --
2375            IF (c_get_merge_data%ISOPEN) THEN
2376               CLOSE c_get_merge_data;
2377            END IF;
2378 --
2379 --
2380 --  [ABLUNDEL][12/08/2003][BUG# 3301222] End of Code Changes for bug
2381 -- ---------------------------------------------------------------------
2382 
2383 
2384         FND_FILE.PUT_LINE(FND_FILE.log, 'Updating the Download files table with upload information');
2385         --
2386         IF l_debug_on THEN
2387            WSH_DEBUG_SV.logmsg(l_module_name,'Updating the Download files table with upload information');
2388         END IF;
2389         --
2390         --
2391         -- Update FTE_MILE_DOWNLOAD_FILES with the upload date
2392         --
2393         update fte_mile_download_files
2394         set    upload_date = l_cur_date,
2395                upload_id   = p_load_id
2396         where  download_file_id =  l_download_file_id;
2397 
2398         --
2399         -- save all the changes
2400         --
2401         commit;
2402 
2403 
2404         FND_FILE.PUT_LINE(FND_FILE.log, 'Deleting data from the Download lines table');
2405         --
2406         IF l_debug_on THEN
2407            WSH_DEBUG_SV.logmsg(l_module_name,'Deleting data from the Download lines table');
2408         END IF;
2409         --
2410         --
2411         -- Delete the lines
2412         --
2413         delete fte_mile_download_lines
2414         where  download_file_id = l_download_file_id
2415         returning download_file_id BULK COLLECT INTO l_deleted_download_ids;
2416 
2417         commit;
2418 
2419 
2420         FND_FILE.PUT_LINE(FND_FILE.log, 'Returning with success');
2421 
2422         --
2423         IF l_debug_on THEN
2424            WSH_DEBUG_SV.logmsg(l_module_name,'Returning with success');
2425         END IF;
2426         --
2427         x_return_status  := -1;
2428         x_return_message := null;
2429 
2430         --
2431         IF l_debug_on THEN
2432            WSH_DEBUG_SV.pop(l_module_name);
2433         END IF;
2434         --
2435         RETURN;
2436 
2437      ELSIF (l_number_of_table_lines > l_line_ctr) THEN
2438         --
2439         -- The file has less lines than when it was created, i.e. lines from the
2440         -- file have been deleted, thus we cannot load
2441         --
2442         -- issue a commit to clear the temp table??
2443         --
2444         IF l_debug_on THEN
2445            WSH_DEBUG_SV.logmsg(l_module_name,'The file has less lines than when it was created, i.e. lines from the file have been deleted, thus we cannot load, RAISE FTE_DIST_LESS_FILE_LINES exception');
2446         END IF;
2447         --
2448         RAISE FTE_DIST_LESS_FILE_LINES;
2449         --
2450         IF l_debug_on THEN
2451            WSH_DEBUG_SV.pop(l_module_name);
2452         END IF;
2453         --
2454         RETURN;
2455 
2456      ELSIF (l_number_of_table_lines < l_line_ctr) THEN
2457         --
2458         -- There are too many lines in the file i.e. lines have been added
2459         -- we cannot load this file.
2460         --
2461         IF l_debug_on THEN
2462            WSH_DEBUG_SV.logmsg(l_module_name,'There are too many lines in the file i.e. lines have been added we cannot load this file RAISE FTE_DIST_MANY_FILE_LINES exception');
2463         END IF;
2464         --
2465         RAISE FTE_DIST_MANY_FILE_LINES;
2466         --
2467         IF l_debug_on THEN
2468            WSH_DEBUG_SV.pop(l_module_name);
2469         END IF;
2470         --
2471         RETURN;
2472 
2473      END IF;
2474 
2475 -- AXE
2476 EXCEPTION
2477    WHEN FTE_DIST_INV_TEMP_TIME_UOM THEN
2478       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_INV_TEMP_TIME_UOM');
2479       x_return_status  := 2;
2480       x_return_message := FND_MESSAGE.GET;
2481       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - INV TEMP TIME UOM. '||x_return_message);
2482       --
2483       -- Close the file
2484       --
2485       IF (utl_file.is_open(l_dtt_file)) THEN
2486          utl_file.fclose(l_dtt_file);
2487       END IF;
2488 
2489       --
2490       -- Close the cursors
2491       --
2492       IF (c_check_download_lines%ISOPEN) THEN
2493          CLOSE c_check_download_lines;
2494       END IF;
2495 
2496       IF (c_get_file_info%ISOPEN) THEN
2497          CLOSE c_get_file_info;
2498       END IF;
2499 
2500       IF (c_get_download_lines%ISOPEN) THEN
2501          CLOSE c_get_download_lines;
2502       END IF;
2503 
2504       IF (c_get_ret_col_info%ISOPEN) THEN
2505          CLOSE c_get_ret_col_info;
2506       END IF;
2507 
2508       IF (c_get_ret_enabled%ISOPEN) THEN
2509          CLOSE c_get_ret_enabled;
2510       END IF;
2511 
2512       IF (c_get_merge_data%ISOPEN) THEN
2513          CLOSE c_get_merge_data;
2514       END IF;
2515 
2516       IF (c_get_time_uom%ISOPEN) THEN
2517          CLOSE c_get_time_uom;
2518       END IF;
2519 
2520       IF (c_get_distance_uom%ISOPEN) THEN
2521          CLOSE c_get_distance_uom;
2522       END IF;
2523 
2524       --
2525       -- Debug Statements
2526       --
2527       --
2528       IF l_debug_on THEN
2529          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_INV_TEMP_TIME_UOM FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
2530          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_INV_TEMP_TIME_UOM');
2531          WSH_DEBUG_SV.pop(l_module_name);
2532       END IF;
2533       --
2534       RETURN;
2535 
2536 
2537    WHEN FTE_DIST_NO_TIME_UOM THEN
2538       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_NO_TIME_UOM');
2539       x_return_status  := 2;
2540       x_return_message := FND_MESSAGE.GET;
2541       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NO TIME UOM. '||x_return_message);
2542       --
2543       -- Close the file
2544       --
2545       IF (utl_file.is_open(l_dtt_file)) THEN
2546          utl_file.fclose(l_dtt_file);
2547       END IF;
2548 
2549       --
2550       -- Close the cursors
2551       --
2552       IF (c_check_download_lines%ISOPEN) THEN
2553          CLOSE c_check_download_lines;
2554       END IF;
2555 
2556       IF (c_get_file_info%ISOPEN) THEN
2557          CLOSE c_get_file_info;
2558       END IF;
2559 
2560       IF (c_get_download_lines%ISOPEN) THEN
2561          CLOSE c_get_download_lines;
2562       END IF;
2563 
2564       IF (c_get_ret_col_info%ISOPEN) THEN
2565          CLOSE c_get_ret_col_info;
2566       END IF;
2567 
2568       IF (c_get_ret_enabled%ISOPEN) THEN
2569          CLOSE c_get_ret_enabled;
2570       END IF;
2571 
2572       IF (c_get_merge_data%ISOPEN) THEN
2573          CLOSE c_get_merge_data;
2574       END IF;
2575 
2576       IF (c_get_time_uom%ISOPEN) THEN
2577          CLOSE c_get_time_uom;
2578       END IF;
2579 
2580       IF (c_get_distance_uom%ISOPEN) THEN
2581          CLOSE c_get_distance_uom;
2582       END IF;
2583 
2584       --
2585       -- Debug Statements
2586       --
2587       --
2588       IF l_debug_on THEN
2589          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_NO_TIME_UOM FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
2590          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_NO_TIME_UOM');
2591          WSH_DEBUG_SV.pop(l_module_name);
2592       END IF;
2593       --
2594       RETURN;
2595 
2596 
2597    WHEN FTE_DIST_INV_TEMP_DIST_UOM THEN
2598       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_INV_TEMP_DIST_UOM');
2599       x_return_status  := 2;
2600       x_return_message := FND_MESSAGE.GET;
2601       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - INV TEMP DIST UOM. '||x_return_message);
2602       --
2603       -- Close the file
2604       --
2605       IF (utl_file.is_open(l_dtt_file)) THEN
2606          utl_file.fclose(l_dtt_file);
2607       END IF;
2608 
2609       --
2610       -- Close the cursors
2611       --
2612       IF (c_check_download_lines%ISOPEN) THEN
2613          CLOSE c_check_download_lines;
2614       END IF;
2615 
2616       IF (c_get_file_info%ISOPEN) THEN
2617          CLOSE c_get_file_info;
2618       END IF;
2619 
2620       IF (c_get_download_lines%ISOPEN) THEN
2621          CLOSE c_get_download_lines;
2622       END IF;
2623 
2624       IF (c_get_ret_col_info%ISOPEN) THEN
2625          CLOSE c_get_ret_col_info;
2626       END IF;
2627 
2628       IF (c_get_ret_enabled%ISOPEN) THEN
2629          CLOSE c_get_ret_enabled;
2630       END IF;
2631 
2632       IF (c_get_merge_data%ISOPEN) THEN
2633          CLOSE c_get_merge_data;
2634       END IF;
2635 
2636       IF (c_get_time_uom%ISOPEN) THEN
2637          CLOSE c_get_time_uom;
2638       END IF;
2639 
2640       IF (c_get_distance_uom%ISOPEN) THEN
2641          CLOSE c_get_distance_uom;
2642       END IF;
2643 
2644       --
2645       -- Debug Statements
2646       --
2647       --
2648       IF l_debug_on THEN
2649          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_INV_TEMP_DIST_UOM FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
2650          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_INV_TEMP_DIST_UOM');
2651          WSH_DEBUG_SV.pop(l_module_name);
2652       END IF;
2653       --
2654       RETURN;
2655 
2656 
2657 
2658    WHEN FTE_DIST_NO_DISTANCE_UOM THEN
2659       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_NO_DISTANCE_UOM');
2660       x_return_status  := 2;
2661       x_return_message := FND_MESSAGE.GET;
2662       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NO DISTANCE UOM. '||x_return_message);
2663       --
2664       -- Close the file
2665       --
2666       IF (utl_file.is_open(l_dtt_file)) THEN
2667          utl_file.fclose(l_dtt_file);
2668       END IF;
2669 
2670       --
2671       -- Close the cursors
2672       --
2673       IF (c_check_download_lines%ISOPEN) THEN
2674          CLOSE c_check_download_lines;
2675       END IF;
2676 
2677       IF (c_get_file_info%ISOPEN) THEN
2678          CLOSE c_get_file_info;
2679       END IF;
2680 
2681       IF (c_get_download_lines%ISOPEN) THEN
2682          CLOSE c_get_download_lines;
2683       END IF;
2684 
2685       IF (c_get_ret_col_info%ISOPEN) THEN
2686          CLOSE c_get_ret_col_info;
2687       END IF;
2688 
2689       IF (c_get_ret_enabled%ISOPEN) THEN
2690          CLOSE c_get_ret_enabled;
2691       END IF;
2692 
2693       IF (c_get_merge_data%ISOPEN) THEN
2694          CLOSE c_get_merge_data;
2695       END IF;
2696 
2697       IF (c_get_time_uom%ISOPEN) THEN
2698          CLOSE c_get_time_uom;
2699       END IF;
2700 
2701       IF (c_get_distance_uom%ISOPEN) THEN
2702          CLOSE c_get_distance_uom;
2703       END IF;
2704 
2705       --
2706       -- Debug Statements
2707       --
2708       --
2709       IF l_debug_on THEN
2710          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_NO_DISTANCE_UOM FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
2711          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_NO_DISTANCE_UOM');
2712          WSH_DEBUG_SV.pop(l_module_name);
2713       END IF;
2714       --
2715       RETURN;
2716 
2717 
2718 
2719    WHEN FTE_DIST_ORIG_DEST_LOAD_ERR THEN
2720       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_ORIG_DEST_LOAD_ERR');
2721       x_return_status  := 2;
2722       x_return_message := FND_MESSAGE.GET;
2723       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - ORIG DEST LOAD ERR. '||x_return_message);
2724       --
2725       -- Close the file
2726       --
2727       IF (utl_file.is_open(l_dtt_file)) THEN
2728          utl_file.fclose(l_dtt_file);
2729       END IF;
2730 
2731       --
2732       -- Close the cursors
2733       --
2734       IF (c_check_download_lines%ISOPEN) THEN
2735          CLOSE c_check_download_lines;
2736       END IF;
2737 
2738       IF (c_get_file_info%ISOPEN) THEN
2739          CLOSE c_get_file_info;
2740       END IF;
2741 
2742       IF (c_get_download_lines%ISOPEN) THEN
2743          CLOSE c_get_download_lines;
2744       END IF;
2745 
2746       IF (c_get_ret_col_info%ISOPEN) THEN
2747          CLOSE c_get_ret_col_info;
2748       END IF;
2749 
2750       IF (c_get_ret_enabled%ISOPEN) THEN
2751          CLOSE c_get_ret_enabled;
2752       END IF;
2753 
2754       IF (c_get_merge_data%ISOPEN) THEN
2755          CLOSE c_get_merge_data;
2756       END IF;
2757 
2758       IF (c_get_time_uom%ISOPEN) THEN
2759          CLOSE c_get_time_uom;
2760       END IF;
2761 
2762       IF (c_get_distance_uom%ISOPEN) THEN
2763          CLOSE c_get_distance_uom;
2764       END IF;
2765 
2766       --
2767       -- Debug Statements
2768       --
2769       --
2770       IF l_debug_on THEN
2771          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_ORIG_DEST_LOAD_ERR FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
2772          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_ORIG_DEST_LOAD_ERR');
2773          WSH_DEBUG_SV.pop(l_module_name);
2774       END IF;
2775       --
2776       RETURN;
2777 
2778 
2779 
2780    WHEN FTE_DIST_LESS_FILE_LINES THEN
2781       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_LESS_FILE_LINES');
2782       x_return_status  := 2;
2783       x_return_message := FND_MESSAGE.GET;
2784       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - LESS FILE LINES. '||x_return_message);
2785       --
2786       -- Close the file
2787       --
2788       IF (utl_file.is_open(l_dtt_file)) THEN
2789          utl_file.fclose(l_dtt_file);
2790       END IF;
2791 
2792       --
2793       -- Close the cursors
2794       --
2795       IF (c_check_download_lines%ISOPEN) THEN
2796          CLOSE c_check_download_lines;
2797       END IF;
2798 
2799       IF (c_get_file_info%ISOPEN) THEN
2800          CLOSE c_get_file_info;
2801       END IF;
2802 
2803       IF (c_get_download_lines%ISOPEN) THEN
2804          CLOSE c_get_download_lines;
2805       END IF;
2806 
2807       IF (c_get_ret_col_info%ISOPEN) THEN
2808          CLOSE c_get_ret_col_info;
2809       END IF;
2810 
2811       IF (c_get_ret_enabled%ISOPEN) THEN
2812          CLOSE c_get_ret_enabled;
2813       END IF;
2814 
2815       IF (c_get_merge_data%ISOPEN) THEN
2816          CLOSE c_get_merge_data;
2817       END IF;
2818 
2819       IF (c_get_time_uom%ISOPEN) THEN
2820          CLOSE c_get_time_uom;
2821       END IF;
2822 
2823       IF (c_get_distance_uom%ISOPEN) THEN
2824          CLOSE c_get_distance_uom;
2825       END IF;
2826 
2827       --
2828       -- Debug Statements
2829       --
2830       --
2831       IF l_debug_on THEN
2832          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_LESS_FILE_LINES FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
2833          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_LESS_FILE_LINES');
2834          WSH_DEBUG_SV.pop(l_module_name);
2835       END IF;
2836       --
2837       RETURN;
2838 
2839 
2840    WHEN FTE_DIST_MANY_FILE_LINES THEN
2841       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_MANY_FILE_LINES');
2842       x_return_status  := 2;
2843       x_return_message := FND_MESSAGE.GET;
2844       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - TOO MANY FILE LINES. '||x_return_message);
2845       --
2846       -- Close the file
2847       --
2848       IF (utl_file.is_open(l_dtt_file)) THEN
2849          utl_file.fclose(l_dtt_file);
2850       END IF;
2851 
2852       --
2853       -- Close the cursors
2854       --
2855       IF (c_check_download_lines%ISOPEN) THEN
2856          CLOSE c_check_download_lines;
2857       END IF;
2858 
2859       IF (c_get_file_info%ISOPEN) THEN
2860          CLOSE c_get_file_info;
2861       END IF;
2862 
2863       IF (c_get_download_lines%ISOPEN) THEN
2864          CLOSE c_get_download_lines;
2865       END IF;
2866 
2867       IF (c_get_ret_col_info%ISOPEN) THEN
2868          CLOSE c_get_ret_col_info;
2869       END IF;
2870 
2871       IF (c_get_ret_enabled%ISOPEN) THEN
2872          CLOSE c_get_ret_enabled;
2873       END IF;
2874 
2875       IF (c_get_merge_data%ISOPEN) THEN
2876          CLOSE c_get_merge_data;
2877       END IF;
2878 
2879       IF (c_get_time_uom%ISOPEN) THEN
2880          CLOSE c_get_time_uom;
2881       END IF;
2882 
2883       IF (c_get_distance_uom%ISOPEN) THEN
2884          CLOSE c_get_distance_uom;
2885       END IF;
2886 
2887       --
2888       -- Debug Statements
2889       --
2890       --
2891       IF l_debug_on THEN
2892          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_MANY_FILE_LINES FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
2893          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_MANY_FILE_LINES');
2894          WSH_DEBUG_SV.pop(l_module_name);
2895       END IF;
2896       --
2897       RETURN;
2898 
2899 
2900 
2901    WHEN FTE_DIST_NULL_FILE_NAME THEN
2902       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_NULL_FILE_NAME');
2903       x_return_status  := 2;
2904       x_return_message := FND_MESSAGE.GET;
2905       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NULL FILE NAME. '||x_return_message);
2906       --
2907       -- Close the file
2908       --
2909       IF (utl_file.is_open(l_dtt_file)) THEN
2910          utl_file.fclose(l_dtt_file);
2911       END IF;
2912 
2913       --
2914       -- Close the cursors
2915       --
2916       IF (c_check_download_lines%ISOPEN) THEN
2917          CLOSE c_check_download_lines;
2918       END IF;
2919 
2920       IF (c_get_file_info%ISOPEN) THEN
2921          CLOSE c_get_file_info;
2922       END IF;
2923 
2924       IF (c_get_download_lines%ISOPEN) THEN
2925          CLOSE c_get_download_lines;
2926       END IF;
2927 
2928       IF (c_get_ret_col_info%ISOPEN) THEN
2929          CLOSE c_get_ret_col_info;
2930       END IF;
2931 
2932       IF (c_get_ret_enabled%ISOPEN) THEN
2933          CLOSE c_get_ret_enabled;
2934       END IF;
2935 
2936       IF (c_get_merge_data%ISOPEN) THEN
2937          CLOSE c_get_merge_data;
2938       END IF;
2939 
2940       IF (c_get_time_uom%ISOPEN) THEN
2941          CLOSE c_get_time_uom;
2942       END IF;
2943 
2944       IF (c_get_distance_uom%ISOPEN) THEN
2945          CLOSE c_get_distance_uom;
2946       END IF;
2947 
2948       --
2949       -- Debug Statements
2950       --
2951       --
2952       IF l_debug_on THEN
2953          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_NULL_FILE_NAME FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
2954          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_NULL_FILE_NAME');
2955          WSH_DEBUG_SV.pop(l_module_name);
2956       END IF;
2957       --
2958       RETURN;
2959 
2960 
2961 
2962    WHEN FTE_DIST_INV_FILENAME_LGTH THEN
2963       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_INVALID_FILE_LENGTH');
2964       x_return_status  := 2;
2965       x_return_message := FND_MESSAGE.GET;
2966       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - INVALID FILE LENGTH. '||x_return_message);
2967       --
2968       -- Close the file
2969       --
2970       IF (utl_file.is_open(l_dtt_file)) THEN
2971          utl_file.fclose(l_dtt_file);
2972       END IF;
2973 
2974       --
2975       -- Close the cursors
2976       --
2977       IF (c_check_download_lines%ISOPEN) THEN
2978          CLOSE c_check_download_lines;
2979       END IF;
2980 
2981       IF (c_get_file_info%ISOPEN) THEN
2982          CLOSE c_get_file_info;
2983       END IF;
2984 
2985       IF (c_get_download_lines%ISOPEN) THEN
2986          CLOSE c_get_download_lines;
2987       END IF;
2988 
2989       IF (c_get_ret_col_info%ISOPEN) THEN
2990          CLOSE c_get_ret_col_info;
2991       END IF;
2992 
2993       IF (c_get_ret_enabled%ISOPEN) THEN
2994          CLOSE c_get_ret_enabled;
2995       END IF;
2996 
2997       IF (c_get_merge_data%ISOPEN) THEN
2998          CLOSE c_get_merge_data;
2999       END IF;
3000 
3001       IF (c_get_time_uom%ISOPEN) THEN
3002          CLOSE c_get_time_uom;
3003       END IF;
3004 
3005       IF (c_get_distance_uom%ISOPEN) THEN
3006          CLOSE c_get_distance_uom;
3007       END IF;
3008 
3009       --
3010       -- Debug Statements
3011       --
3012       --
3013       IF l_debug_on THEN
3014          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_INV_FILENAME_LGTH FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
3015          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_INV_FILENAME_LGTH');
3016          WSH_DEBUG_SV.pop(l_module_name);
3017       END IF;
3018       --
3019       RETURN;
3020 
3021    WHEN FTE_DIST_NO_FILE_DOWNLOAD THEN
3022       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_NO_FILE_DOWNLOAD');
3023       x_return_status  := 2;
3024       x_return_message := FND_MESSAGE.GET;
3025       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NO FILE DOWNLOAD. '||x_return_message);
3026       --
3027       -- Close the file
3028       --
3029       IF (utl_file.is_open(l_dtt_file)) THEN
3030          utl_file.fclose(l_dtt_file);
3031       END IF;
3032 
3033       --
3034       -- Close the cursors
3035       --
3036       IF (c_check_download_lines%ISOPEN) THEN
3037          CLOSE c_check_download_lines;
3038       END IF;
3039 
3040       IF (c_get_file_info%ISOPEN) THEN
3041          CLOSE c_get_file_info;
3042       END IF;
3043 
3044       IF (c_get_download_lines%ISOPEN) THEN
3045          CLOSE c_get_download_lines;
3046       END IF;
3047 
3048       IF (c_get_ret_col_info%ISOPEN) THEN
3049          CLOSE c_get_ret_col_info;
3050       END IF;
3051 
3052       IF (c_get_ret_enabled%ISOPEN) THEN
3053          CLOSE c_get_ret_enabled;
3054       END IF;
3055 
3056       IF (c_get_merge_data%ISOPEN) THEN
3057          CLOSE c_get_merge_data;
3058       END IF;
3059 
3060       IF (c_get_time_uom%ISOPEN) THEN
3061          CLOSE c_get_time_uom;
3062       END IF;
3063 
3064       IF (c_get_distance_uom%ISOPEN) THEN
3065          CLOSE c_get_distance_uom;
3066       END IF;
3067 
3068       --
3069       -- Debug Statements
3070       --
3071       --
3072       IF l_debug_on THEN
3073          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_NO_FILE_DOWNLOAD FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
3074          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_NO_FILE_DOWNLOAD');
3075          WSH_DEBUG_SV.pop(l_module_name);
3076       END IF;
3077       --
3078       RETURN;
3079 
3080    WHEN FTE_DIST_NO_FILE_TEMPLATE THEN
3081       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_NO_FILE_TEMPLATE');
3082       x_return_status  := 2;
3083       x_return_message := FND_MESSAGE.GET;
3084       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NO FILE TEMPLATE. '||x_return_message);
3085       --
3086       -- Close the file
3087       --
3088       IF (utl_file.is_open(l_dtt_file)) THEN
3089          utl_file.fclose(l_dtt_file);
3090       END IF;
3091       --
3092       -- Close the cursors
3093       --
3094       IF (c_check_download_lines%ISOPEN) THEN
3095          CLOSE c_check_download_lines;
3096       END IF;
3097 
3098       IF (c_get_file_info%ISOPEN) THEN
3099          CLOSE c_get_file_info;
3100       END IF;
3101 
3102       IF (c_get_download_lines%ISOPEN) THEN
3103          CLOSE c_get_download_lines;
3104       END IF;
3105 
3106       IF (c_get_ret_col_info%ISOPEN) THEN
3107          CLOSE c_get_ret_col_info;
3108       END IF;
3109 
3110       IF (c_get_ret_enabled%ISOPEN) THEN
3111          CLOSE c_get_ret_enabled;
3112       END IF;
3113 
3114       IF (c_get_merge_data%ISOPEN) THEN
3115          CLOSE c_get_merge_data;
3116       END IF;
3117 
3118       IF (c_get_time_uom%ISOPEN) THEN
3119          CLOSE c_get_time_uom;
3120       END IF;
3121 
3122       IF (c_get_distance_uom%ISOPEN) THEN
3123          CLOSE c_get_distance_uom;
3124       END IF;
3125 
3126       --
3127       -- Debug Statements
3128       --
3129       IF l_debug_on THEN
3130          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_NO_FILE_TEMPLATE FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
3131          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_NO_FILE_TEMPLATE');
3132          WSH_DEBUG_SV.pop(l_module_name);
3133       END IF;
3134       --
3135       RETURN;
3136 
3137 
3138 
3139    WHEN FTE_DIST_NO_FILE_DOWNLOAD_DATE THEN
3140       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_NO_FILE_DOWNLOAD_DATE');
3141       x_return_status  := 2;
3142       x_return_message := FND_MESSAGE.GET;
3143       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NO FILE DOWNLOAD_DATE. '||x_return_message);
3144       --
3145       -- Close the file
3146       --
3147       IF (utl_file.is_open(l_dtt_file)) THEN
3148          utl_file.fclose(l_dtt_file);
3149       END IF;
3150       --
3151       -- Close the cursors
3152       --
3153       IF (c_check_download_lines%ISOPEN) THEN
3154          CLOSE c_check_download_lines;
3155       END IF;
3156 
3157       IF (c_get_file_info%ISOPEN) THEN
3158          CLOSE c_get_file_info;
3159       END IF;
3160 
3161       IF (c_get_download_lines%ISOPEN) THEN
3162          CLOSE c_get_download_lines;
3163       END IF;
3164 
3165       IF (c_get_ret_col_info%ISOPEN) THEN
3166          CLOSE c_get_ret_col_info;
3167       END IF;
3168 
3169       IF (c_get_ret_enabled%ISOPEN) THEN
3170          CLOSE c_get_ret_enabled;
3171       END IF;
3172 
3173       IF (c_get_merge_data%ISOPEN) THEN
3174          CLOSE c_get_merge_data;
3175       END IF;
3176 
3177       IF (c_get_time_uom%ISOPEN) THEN
3178          CLOSE c_get_time_uom;
3179       END IF;
3180 
3181       IF (c_get_distance_uom%ISOPEN) THEN
3182          CLOSE c_get_distance_uom;
3183       END IF;
3184 
3185       --
3186       -- Debug Statements
3187       --
3188       IF l_debug_on THEN
3189          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_NO_FILE_DOWNLOAD_DATE FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
3190          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_NO_FILE_DOWNLOAD_DATE');
3191          WSH_DEBUG_SV.pop(l_module_name);
3192       END IF;
3193       --
3194       RETURN;
3195 
3196 
3197    WHEN FTE_DIST_FILE_UPLOAD_DONE_PREV THEN
3198       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_FILE_UPLOAD_DONE_PREV');
3199       x_return_status  := 2;
3200       x_return_message := FND_MESSAGE.GET;
3201       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - PREVIOUS FILE UPLOAD EXISTS. '||x_return_message);
3202       --
3203       -- Close the file
3204       --
3205       IF (utl_file.is_open(l_dtt_file)) THEN
3206          utl_file.fclose(l_dtt_file);
3207       END IF;
3208       --
3209       -- Close the cursors
3210       --
3211       IF (c_check_download_lines%ISOPEN) THEN
3212          CLOSE c_check_download_lines;
3213       END IF;
3214 
3215       IF (c_get_file_info%ISOPEN) THEN
3216          CLOSE c_get_file_info;
3217       END IF;
3218 
3219       IF (c_get_download_lines%ISOPEN) THEN
3220          CLOSE c_get_download_lines;
3221       END IF;
3222 
3223       IF (c_get_ret_col_info%ISOPEN) THEN
3224          CLOSE c_get_ret_col_info;
3225       END IF;
3226 
3227       IF (c_get_ret_enabled%ISOPEN) THEN
3228          CLOSE c_get_ret_enabled;
3229       END IF;
3230 
3231       IF (c_get_merge_data%ISOPEN) THEN
3232          CLOSE c_get_merge_data;
3233       END IF;
3234 
3235       IF (c_get_time_uom%ISOPEN) THEN
3236          CLOSE c_get_time_uom;
3237       END IF;
3238 
3239       IF (c_get_distance_uom%ISOPEN) THEN
3240          CLOSE c_get_distance_uom;
3241       END IF;
3242 
3243       --
3244       -- Debug Statements
3245       --
3246       IF l_debug_on THEN
3247          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_FILE_UPLOAD_DONE_PREV FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
3248          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_FILE_UPLOAD_DONE_PREV');
3249          WSH_DEBUG_SV.pop(l_module_name);
3250       END IF;
3251       --
3252       RETURN;
3253 
3254 
3255    WHEN FTE_DIST_NO_DOWNLOAD_LINES THEN
3256       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_NO_DOWNLOAD_LINES');
3257       x_return_status  := 2;
3258       x_return_message := FND_MESSAGE.GET;
3259       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NO DOWNLOAD LINES. '||x_return_message);
3260       --
3261       -- Close the file
3262       --
3263       IF (utl_file.is_open(l_dtt_file)) THEN
3264          utl_file.fclose(l_dtt_file);
3265       END IF;
3266       --
3267       -- Close the cursors
3268       --
3269       IF (c_check_download_lines%ISOPEN) THEN
3270          CLOSE c_check_download_lines;
3271       END IF;
3272 
3273       IF (c_get_file_info%ISOPEN) THEN
3274          CLOSE c_get_file_info;
3275       END IF;
3276 
3277       IF (c_get_download_lines%ISOPEN) THEN
3278          CLOSE c_get_download_lines;
3279       END IF;
3280 
3281       IF (c_get_ret_col_info%ISOPEN) THEN
3282          CLOSE c_get_ret_col_info;
3283       END IF;
3284 
3285       IF (c_get_ret_enabled%ISOPEN) THEN
3286          CLOSE c_get_ret_enabled;
3287       END IF;
3288 
3289       IF (c_get_merge_data%ISOPEN) THEN
3290          CLOSE c_get_merge_data;
3291       END IF;
3292 
3293       IF (c_get_time_uom%ISOPEN) THEN
3294          CLOSE c_get_time_uom;
3295       END IF;
3296 
3297       IF (c_get_distance_uom%ISOPEN) THEN
3298          CLOSE c_get_distance_uom;
3299       END IF;
3300 
3301       --
3302       -- Debug Statements
3303       --
3304       IF l_debug_on THEN
3305          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_NO_DOWNLOAD_LINES FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
3306          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_NO_DOWNLOAD_LINES');
3307          WSH_DEBUG_SV.pop(l_module_name);
3308       END IF;
3309       --
3310       RETURN;
3311 
3312 
3313    WHEN FTE_DIST_RET_DIST_COL_NO_DATA THEN
3314       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_RET_DIST_COL_NO_DATA');
3315       x_return_status  := 2;
3316       x_return_message := FND_MESSAGE.GET;
3317       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NO RETURN DISTANCE COLUMN DATA. '||x_return_message);
3318       --
3319       -- Close the file
3320       --
3321       IF (utl_file.is_open(l_dtt_file)) THEN
3322          utl_file.fclose(l_dtt_file);
3323       END IF;
3324       --
3325       -- Close the cursors
3326       --
3327       IF (c_check_download_lines%ISOPEN) THEN
3328          CLOSE c_check_download_lines;
3329       END IF;
3330 
3331       IF (c_get_file_info%ISOPEN) THEN
3332          CLOSE c_get_file_info;
3333       END IF;
3334 
3335       IF (c_get_download_lines%ISOPEN) THEN
3336          CLOSE c_get_download_lines;
3337       END IF;
3338 
3339       IF (c_get_ret_col_info%ISOPEN) THEN
3340          CLOSE c_get_ret_col_info;
3341       END IF;
3342 
3343       IF (c_get_ret_enabled%ISOPEN) THEN
3344          CLOSE c_get_ret_enabled;
3345       END IF;
3346 
3347       IF (c_get_merge_data%ISOPEN) THEN
3348          CLOSE c_get_merge_data;
3349       END IF;
3350 
3351       IF (c_get_time_uom%ISOPEN) THEN
3352          CLOSE c_get_time_uom;
3353       END IF;
3354 
3355       IF (c_get_distance_uom%ISOPEN) THEN
3356          CLOSE c_get_distance_uom;
3357       END IF;
3358 
3359       --
3360       -- Debug Statements
3361       --
3362       IF l_debug_on THEN
3363          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_RET_DIST_COL_NO_DATA FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
3364          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_RET_DIST_COL_NO_DATA');
3365          WSH_DEBUG_SV.pop(l_module_name);
3366       END IF;
3367       --
3368       RETURN;
3369 
3370    WHEN FTE_DIST_RET_TIME_COL_NO_DATA THEN
3371       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_RET_TIME_COL_NO_DATA');
3372       x_return_status  := 2;
3373       x_return_message := FND_MESSAGE.GET;
3374       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NO RETURN TIME COLUMN DATA. '||x_return_message);
3375       --
3376       -- Close the file
3377       --
3378       IF (utl_file.is_open(l_dtt_file)) THEN
3379          utl_file.fclose(l_dtt_file);
3380       END IF;
3381       --
3382       -- Close the cursors
3383       --
3384       IF (c_check_download_lines%ISOPEN) THEN
3385          CLOSE c_check_download_lines;
3386       END IF;
3387 
3388       IF (c_get_file_info%ISOPEN) THEN
3389          CLOSE c_get_file_info;
3390       END IF;
3391 
3392       IF (c_get_download_lines%ISOPEN) THEN
3393          CLOSE c_get_download_lines;
3394       END IF;
3395 
3396       IF (c_get_ret_col_info%ISOPEN) THEN
3397          CLOSE c_get_ret_col_info;
3398       END IF;
3399 
3400       IF (c_get_ret_enabled%ISOPEN) THEN
3401          CLOSE c_get_ret_enabled;
3402       END IF;
3403 
3404       IF (c_get_merge_data%ISOPEN) THEN
3405          CLOSE c_get_merge_data;
3406       END IF;
3407 
3408       IF (c_get_time_uom%ISOPEN) THEN
3409          CLOSE c_get_time_uom;
3410       END IF;
3411 
3412       IF (c_get_distance_uom%ISOPEN) THEN
3413          CLOSE c_get_distance_uom;
3414       END IF;
3415 
3416       --
3417       -- Debug Statements
3418       --
3419       IF l_debug_on THEN
3420          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_RET_TIME_COL_NO_DATA FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
3421          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_RET_TIME_COL_NO_DATA');
3422          WSH_DEBUG_SV.pop(l_module_name);
3423       END IF;
3424       --
3425       RETURN;
3426 
3427 
3428    WHEN FTE_DIST_NO_RET_COL_ENABLED THEN
3429       FND_MESSAGE.SET_NAME('FTE','FTE_DIST_NO_RET_COL_ENABLED');
3430       x_return_status  := 2;
3431       x_return_message := FND_MESSAGE.GET;
3432       FND_FILE.PUT_LINE(FND_FILE.log, 'ERROR IN PROCEDURE READ_DTT_FILE - NO RETURN COLUMNS ENABLED. '||x_return_message);
3433       --
3434       -- Close the file
3435       --
3436       IF (utl_file.is_open(l_dtt_file)) THEN
3437          utl_file.fclose(l_dtt_file);
3438       END IF;
3439       --
3440       -- Close the cursors
3441       --
3442       IF (c_check_download_lines%ISOPEN) THEN
3443          CLOSE c_check_download_lines;
3444       END IF;
3445 
3446       IF (c_get_file_info%ISOPEN) THEN
3447          CLOSE c_get_file_info;
3448       END IF;
3449 
3450       IF (c_get_download_lines%ISOPEN) THEN
3451          CLOSE c_get_download_lines;
3452       END IF;
3453 
3454       IF (c_get_ret_col_info%ISOPEN) THEN
3455          CLOSE c_get_ret_col_info;
3456       END IF;
3457       IF (c_get_ret_enabled%ISOPEN) THEN
3458          CLOSE c_get_ret_enabled;
3459       END IF;
3460 
3461       IF (c_get_merge_data%ISOPEN) THEN
3462          CLOSE c_get_merge_data;
3463       END IF;
3464 
3465       IF (c_get_time_uom%ISOPEN) THEN
3466          CLOSE c_get_time_uom;
3467       END IF;
3468 
3469       IF (c_get_distance_uom%ISOPEN) THEN
3470          CLOSE c_get_distance_uom;
3471       END IF;
3472 
3473       --
3474       -- Debug Statements
3475       --
3476       IF l_debug_on THEN
3477          WSH_DEBUG_SV.logmsg(l_module_name,'ERROR FTE_DIST_NO_RET_COL_ENABLED FTE_BULK_DTT_PKG.READ_DTT_FILE: '||x_return_message);
3478          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION: FTE_DIST_NO_RET_COL_ENABLED');
3479          WSH_DEBUG_SV.pop(l_module_name);
3480       END IF;
3481       --
3482       RETURN;
3483 
3484 
3485    WHEN OTHERS THEN
3486       x_return_status  := 2;
3487       x_return_message := sqlerrm;
3488       FND_FILE.PUT_LINE(FND_FILE.log, 'UNEXPECTED ERROR IN PROCEDURE READ_DTT_FILE. '|| sqlerrm);
3489 
3490       --
3491       -- Debug Statements
3492       --
3493       IF l_debug_on THEN
3494          WSH_DEBUG_SV.logmsg(l_module_name,'THE UNEXPECTED ERROR FROM FTE_BULK_DTT_PKG.READ_DTT_FILE IS ' ||sqlerrm);
3495          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||sqlerrm,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3496          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3497       END IF;
3498 
3499 
3500       RETURN;
3501 
3502 END READ_DTT_FILE;
3503 
3504 
3505 
3506 
3507 -- -------------------------------------------------------------------------- --
3508 --                                                                            --
3509 -- NAME:                FIRST_TIME                                            --
3510 --                                                                            --
3511 -- TYPE:                FUNCTION                                              --
3512 --                                                                            --
3513 -- PARAMETERS (IN OUT): none                                                  --
3514 --                                                                            --
3515 -- PARAMETERS (OUT):    none                                                  --
3516 --                                                                            --
3517 -- RETURN:              TRUE, FALSE  (boolean)                                --
3518 --                                                                            --
3519 -- DESCRIPTION:         Return TRUE if this is the first call of the procedure--
3520 --                      LOAD_DTT_FILE by the concurrent manager. FALSE        --
3521 --                      otherwise.  This is necessary because the procedure   --
3522 --                      LOAD_DTT_FILE is called twice by the concurrent       --
3523 --                      manager controlling the bulkloading process. The first--
3524 --                      time to start the  process, and the second time after --
3525 --                      the sub-processes  have finished executing.           --
3526 --                                                                            --
3527 -- CHANGE CONTROL LOG                                                         --
3528 -- ------------------                                                         --
3529 --                                                                            --
3530 -- DATE        VERSION  BY        BUG      DESCRIPTION                        --
3531 -- ----------  -------  --------  -------  ---------------------------------- --
3532 -- 2003/07/17  J        ABLUNDEL           Created                            --
3533 --                                                                            --
3534 -- -------------------------------------------------------------------------- --
3535 FUNCTION FIRST_TIME RETURN BOOLEAN IS
3536 
3537 req_data      VARCHAR2(100);
3538 
3539 l_debug_on     BOOLEAN;
3540 l_module_name  CONSTANT VARCHAR2(100) := 'fte.plsql.' || G_PKG_NAME || '.' ||'FIRST_TIME';
3541 l_error_text   VARCHAR2(2000);
3542 
3543 
3544 BEGIN
3545 
3546    --
3547    -- SETUP DEBUGGING
3548    --
3549    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3550    IF l_debug_on IS NULL THEN
3551       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3552    END IF;
3553 
3554    IF (g_user_debug = 1) THEN
3555      l_debug_on := TRUE;
3556    END IF;
3557 
3558 
3559     IF l_debug_on THEN
3560       WSH_DEBUG_SV.push(l_module_name);
3561       WSH_DEBUG_SV.logmsg(l_module_name,'---------------FIRST_TIME------------');
3562     END IF;
3563 
3564 
3565    FND_FILE.PUT_LINE(FND_FILE.log, 'FIRST_TIME');
3566 
3567    req_data := FND_CONC_GLOBAL.request_data;
3568 
3569    IF (req_data IS NULL) THEN
3570       FND_FILE.PUT_LINE(FND_FILE.log, 'FIRST_TIME returning TRUE');
3571       --
3572       IF l_debug_on THEN
3573          WSH_DEBUG_SV.pop(l_module_name);
3574       END IF;
3575       --
3576       RETURN TRUE;
3577    ELSE
3578       FND_FILE.PUT_LINE(FND_FILE.log, 'FIRST_TIME returning FALSE');
3579       --
3580       IF l_debug_on THEN
3581          WSH_DEBUG_SV.pop(l_module_name);
3582       END IF;
3583       --
3584       RETURN FALSE;
3585    END IF;
3586 
3587 
3588 EXCEPTION
3589    WHEN OTHERS THEN
3590       Fnd_File.Put_Line(Fnd_File.Log, 'Unexpected Error in Procedure FIRST_TIME' || sqlerrm);
3591 
3592       --
3593       -- Debug Statements
3594       --
3595       IF l_debug_on THEN
3596          WSH_DEBUG_SV.logmsg(l_module_name,'THE UNEXPECTED ERROR FROM FTE_BULK_DTT_PKG.FIRST_TIME IS ' ||sqlerrm);
3597          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||sqlerrm,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3598          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3599       END IF;
3600 
3601       RETURN FALSE;
3602 
3603 END FIRST_TIME;
3604 
3605 
3606 
3607 END FTE_BULK_DTT_PKG;