[Home] [Help]
PACKAGE BODY: APPS.FTE_TL_LOADER
Source
1 PACKAGE BODY FTE_TL_LOADER AS
2 /* $Header: FTETLLRB.pls 120.13 2006/04/28 04:51:12 pkaliyam noship $ */
3 --================================================================================--
4 --
5 -- NAME: FTE_TL_LOADER ("TL" stands for TruckLoad)
6 --
7 --
8 -- PURPOSE : BulkLoading of TL Services, TL Base Rates, TL Surchages and
9 -- Facility charges.
10 --
11 -- PROCEDURES: PROCESS_DATA Entry point in the package
12 -- PROCESS_TL_SERVICES To process TL Services
13 -- PROCESS_FACILITY_CHARGES To process Facility Charges
14 -- PROCESS_TL_BASE_RATES To process TL Rate Charts
15 -- PROCESS_TL_SURCHARGES To process TL Accessorial Charges
16 --
17 -- CHANGE CONTROL LOG
18 --
19 -- DATE VERSION BY BUG DESCRIPTION
20 -- ---------- ------- -------- ------- ------------
21 -- Prabhakhar CREATED.
22 --=================================================================================--
23
24
25 ------------------------- GLOBAL Variables Start -----------------------------------
26
27 G_CURDATE DATE := sysdate;
28 G_MAX_NUMBER NUMBER := 9999999;
29 G_ACTION VARCHAR2(30);
30
31 G_LANE_TBL FTE_LANE_PKG.lane_tbl;
32 G_LANE_RATE_CHART_TBL FTE_LANE_PKG.lane_rate_chart_tbl;
33 G_LANE_SERVICE_TBL FTE_LANE_PKG.lane_service_tbl;
34 G_LANE_COMMODITY_TBL FTE_LANE_PKG.LANE_COMMODITY_TBL;
35
36 G_DUMMY_BLOCK_HDR_TBL FTE_BULKLOAD_PKG.block_header_tbl;
37
38 G_PKG_NAME CONSTANT VARCHAR2(50) := 'FTE_TL_LOADER';
39
40 ------------------------- GLOBAL Variables END -----------------------------------
41
42 --_________________________________________________________________________________--
43 --
44 -- FUNCTION: GET_GLOBAL_UNIT_UOM
45 --
46 -- PURPOSE Get the global unit uom from wsh_global_parameters table.
47 --
48 -- PARAMETERS
49 -- IN
50 -- NO PARAMETERS.
51 --
52 -- RETURNS, GLOBAL_UNIT_UOM defined in Shipping parameters form, if setup.
53 -- NULL otherwise.
54 --_________________________________________________________________________________--
55
56 FUNCTION GET_GLOBAL_UNIT_UOM (x_status OUT NOCOPY NUMBER,
57 x_error_msg OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
58
59 l_unit_uom VARCHAR2(10);
60 l_params WSH_SHIPPING_PARAMS_PVT.GLOBAL_PARAMETERS_REC_TYP;
61 l_return_status VARCHAR2(30);
62
63 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.GET_GLOBAL_UNIT_UOM';
64
65 BEGIN
66
67 FTE_UTIL_PKG.Enter_Debug(l_module_name);
68 x_status := -1;
69
70 WSH_SHIPPING_PARAMS_PVT.GET_GLOBAL_PARAMETERS(l_params, l_return_status);
71
72 IF (l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS, WSH_UTIL_CORE.G_RET_STS_WARNING )) THEN
73 x_status := 2;
74 FTE_UTIL_PKG.Write_LogFile(l_module_name,'CALL TO WSH_SHIPPING_PARAMS_PVT.GET_GLOBAL_PARAMETERS RETURNED WITH STATUS', l_return_status);
75 FTE_UTIL_PKG.Exit_Debug(l_module_name);
76 RETURN NULL;
77 END IF;
78
79 l_unit_uom := l_params.UOM_FOR_NUM_OF_UNITS;
80
81 IF (l_unit_uom IS NULL) THEN
82 x_status := 2;
83 x_error_msg := FTE_UTIL_PKG.Get_Msg(p_name => 'FTE_GLOBAL_UNIT_UOM_NOT_DEFINE');
84
85 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
86 p_module_name => l_module_name,
87 p_category => 'B',
88 p_line_number => 0);
89 FTE_UTIL_PKG.Exit_Debug(l_module_name);
90 RETURN NULL;
91 END IF;
92
93 FTE_UTIL_PKG.Exit_Debug(l_module_name);
94
95 RETURN l_unit_uom;
96
97 EXCEPTION
98 WHEN OTHERS THEN
99 x_status := 2;
100 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR in GET_GLOBAL_UNIT_UOM', sqlerrm);
101 FTE_UTIL_PKG.Exit_Debug(l_module_name);
102 END GET_GLOBAL_UNIT_UOM;
103
104 --_________________________________________________________________________________--
105 --
106 -- PROCEDURE: GET_CARRIER_PREFERENCES
107 --
108 -- PURPOSE: In Frieght Carriers form, we might have set the Carrier Preferences.
109 -- It queries up the preferences that have set in that
110 -- form for the carrier, p_carrier_name.
111 --
112 -- PARAMETERS:
113 --
114 -- IN
115 -- p_carrier_name, the carrier name for which the preferences to be retrieved.
116 -- p_service_level, the service level of the carrier we are looking for.
117 -- p_line_number, line number in the upload file, used for logging.
118 --
119 -- OUT
120 -- x_status, the return status, -1 for success
121 -- 2 for failure.
122 -- x_error_msg, the corresponding error message,
123 -- if any exception occurs during the process.
124 --________________________________________________________________________________
125
126 PROCEDURE GET_CARRIER_PREFERENCES ( p_carrier_name IN VARCHAR2,
127 p_service_level IN VARCHAR2,
128 p_line_number IN NUMBER,
129 x_status OUT NOCOPY NUMBER,
130 x_error_msg OUT NOCOPY VARCHAR2) IS
131
132 l_volume_uom VARCHAR2(3);
133 l_weight_uom VARCHAR2(3);
134
135 l_mode_of_trans CONSTANT VARCHAR2(25) := 'TRUCK';
136
137 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.GET_CARRIER_PREFERENCES';
138
139 BEGIN
140
141 FTE_UTIL_PKG.Enter_Debug(l_module_name);
142 x_status := -1;
143
144 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
145 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Getting Carrier Preferences for ' || p_carrier_name);
146 END IF;
147
148 -- Unit rate basis for WEIGHT/VOLUME/CONTAINER/PALLET
149 IF (g_carrier_name <> p_carrier_name OR
150 g_service_level <> p_service_level OR
151 g_carrier_id IS NULL OR
152 g_carrier_unit_basis IS NULL OR
153 g_carrier_unit_basis_uom IS NULL) THEN
154
155 BEGIN
156 SELECT
157 ca.carrier_id,
158 ca.currency_code,
159 nvl(cs.unit_rate_basis, ca.unit_rate_basis) unit_rate_basis,
160 ca.time_uom,
161 ca.distance_uom,
162 ca.weight_uom,
163 ca.volume_uom
164 INTO
165 g_carrier_id,
166 g_carrier_currency,
167 g_carrier_unit_basis,
168 g_carrier_time_uom,
169 g_carrier_distance_uom,
170 l_weight_uom,
171 l_volume_uom
172 FROM
173 WSH_CARRIER_SERVICES cs,
174 WSH_CARRIERS ca,
175 HZ_PARTIES hz
176 WHERE
177 cs.carrier_id(+) = ca.carrier_id AND
178 cs.service_level(+) = p_service_level AND
179 cs.mode_of_transport = l_mode_of_trans AND
180 hz.party_name = p_carrier_name AND
181 hz.party_id = ca.carrier_id;
182 EXCEPTION
183 WHEN NO_DATA_FOUND THEN
184 x_status := 2;
185 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_SEL_INVALID_CARRIER',
186 p_tokens => STRINGARRAY('NAME'),
187 p_values => STRINGARRAY(p_carrier_name));
188
189 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
190 p_module_name => l_module_name,
191 p_category => 'D',
192 p_line_number => p_line_number);
193 FTE_UTIL_PKG.Exit_Debug(l_module_name);
194 RETURN;
195 WHEN OTHERS THEN
196 x_status := 2;
197 x_error_msg := sqlerrm;
198 FTE_UTIL_PKG.Write_LogFile(l_module_name,'UNEXPECTED ERROR occured ' || sqlerrm );
199 FTE_UTIL_PKG.Exit_Debug(l_module_name);
200 RETURN;
201 END;
202
203 --+
204 -- Get the carrier's prefered rate basis uom.
205 --+
206 IF (g_carrier_unit_basis IS NULL) THEN
207 x_status := 2;
208 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CARRIER_RATE_BASIS_NOT_SET',
209 p_tokens => STRINGARRAY('CARRIER'),
210 p_values => STRINGARRAY(p_carrier_name));
211 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
212 p_module_name => l_module_name,
213 p_category => 'B',
214 p_line_number => p_line_number);
215 FTE_UTIL_PKG.Exit_Debug(l_module_name);
216 RETURN;
217
218 ELSIF (g_carrier_unit_basis = 'WEIGHT') THEN
219
220 g_carrier_unit_basis_uom := l_weight_uom;
221
222 ELSIF (g_carrier_unit_basis = 'VOLUME') THEN
223
224 g_carrier_unit_basis_uom := l_volume_uom;
225
226 ELSIF (g_carrier_unit_basis IN ('CONTAINER', 'PALLET')) THEN
227
228 g_carrier_unit_basis_uom := g_unit_uom;
229
230 END IF;
231
232 g_carrier_name := p_carrier_name;
233 g_service_level := p_service_level;
234
235 END IF;
236
237 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
238 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'g_carrier_name ', g_carrier_name);
239 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'g_service_level ', g_service_level);
240 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'g_carrier_id ', g_carrier_id);
241 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'g_rate_basis ', g_carrier_unit_basis);
242 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'g_rate_basis_uom',g_carrier_unit_basis_uom);
243 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'g_currency_code ',g_carrier_currency);
244 END IF;
245
246 FTE_UTIL_PKG.Exit_Debug(l_module_name);
247
248 EXCEPTION WHEN OTHERS THEN
249
250 x_status := 2;
251 x_error_msg := sqlerrm;
252 FTE_UTIL_PKG.Write_LogFile(l_module_name, sqlerrm);
253 FTE_UTIL_PKG.Exit_Debug(l_module_name);
254
255 END GET_CARRIER_PREFERENCES;
256
257 --_________________________________________________________________________________--
258 --
259 -- FUNCTION: CHECK_RATE_BASIS
260 --
261 -- PURPOSE Checks a rate basis and uom against a carrier's prefered rate bases.
262 --
263 -- PARAMETERS
264 -- IN
265 -- 1. p_carrier_name
266 -- 2. p_rate_basis
267 -- 3. p_rate_basis_uom
268 -- 4. p_service_level
269 -- 5. p_line_number
270 -- OUT
271 -- x_status, the return status, -1 for success
272 -- 2 for failure.
273 -- x_error_msg, the corresponding error meassge,
274 -- if any exception occurs during the process.
275 --
276 --_________________________________________________________________________________--
277
278 PROCEDURE CHECK_RATE_BASIS( p_carrier_name IN VARCHAR2,
279 p_rate_basis IN VARCHAR2,
280 p_rate_basis_uom IN VARCHAR2,
281 p_service_level IN VARCHAR2,
282 p_line_number IN NUMBER,
283 x_status OUT NOCOPY VARCHAR2,
284 x_error_msg OUT NOCOPY VARCHAR2) IS
285
286 l_basis_type VARCHAR2(10);
287 l_prefered_basis VARCHAR2(50);
288 l_prefered_uom VARCHAR2(50);
289
290 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.CHECK_RATE_BASIS';
291
292 BEGIN
293
294 FTE_UTIL_PKG.Enter_Debug(l_module_name);
295 x_status := -1;
296 l_basis_type := p_rate_basis;
297
298 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
299 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_carrier_name ',p_carrier_name);
300 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_rate_basis ',p_rate_basis);
301 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_rate_basis_uom',p_rate_basis_uom);
302 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_service_level',p_service_level);
303 END IF;
304
305 GET_CARRIER_PREFERENCES (p_carrier_name => p_carrier_name,
306 p_service_level => p_service_level,
307 p_line_number => p_line_number,
308 x_status => x_status,
309 x_error_msg => x_error_msg);
310
311 IF (x_status <> -1) THEN
312 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'GET_CARRIER_PREFERENCES returned with error');
313 FTE_UTIL_PKG.Exit_Debug(l_module_name);
314 RETURN;
315 END IF;
316
317 IF (p_rate_basis IN (FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT, -- Container
318 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET, -- Pallet
319 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT, -- Weight
320 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL)) THEN -- Volume
321
322 l_basis_type := 'UNIT';
323
324 IF (p_rate_basis <> g_carrier_unit_basis) THEN
325
326 x_status := 2;
327 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_RATE_BASIS_NO_MATCH',
328 p_tokens => STRINGARRAY('RATE_BASIS','CARRIER'),
329 p_values => STRINGARRAY(p_rate_basis,p_carrier_name));
330 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
331 p_module_name => l_module_name,
332 p_category => 'D',
333 p_line_number => p_line_number);
334 FTE_UTIL_PKG.Exit_Debug(l_module_name);
335 RETURN;
336
337 ELSIF (p_rate_basis_uom <> g_carrier_unit_basis_uom) THEN
338 x_status := 3;
339 END IF;
340
341 ELSIF (p_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_TIME AND
342 p_rate_basis_uom <> g_carrier_time_uom) THEN
343
344 x_status := 3;
345
346 ELSIF (p_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_DIST AND
347 p_rate_basis_uom <> g_carrier_distance_uom) THEN
348
349 x_status := 3;
350
351 END IF;
352
353 --+
354 -- The rate basis uom did not match that of the carrier
355 --+
356 IF (x_status = 3) THEN
357 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_RATE_BASIS_UOM_NO_MATCH',
358 p_tokens => STRINGARRAY('RATE_BASIS_UOM','CARRIER'),
359 p_values => STRINGARRAY(p_rate_basis_uom,p_carrier_name));
360 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
361 p_module_name => l_module_name,
362 p_category => 'D',
363 p_line_number => p_line_number);
364 FTE_UTIL_PKG.Exit_Debug(l_module_name);
365 x_status := 2;
366
367 END IF;
368
369 FTE_UTIL_PKG.Exit_Debug(l_module_name);
370
371 EXCEPTION
372 WHEN OTHERS THEN
373 x_error_msg := sqlerrm;
374 x_status := 2;
375 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR IN CHECK_RATE_BASIS ' || sqlerrm);
376 FTE_UTIL_PKG.Exit_Debug(l_module_name);
377
378 END CHECK_RATE_BASIS;
379
380 --____________________________________________________________________________--
381 --
382 -- PROCEDURE: CHECK_DUPLICATE_RATE_CHART
383 --
384 -- PURPOSE To ensure that the rate chart is qualified to be
385 -- loaded. Validate the qualifiers, rate basis and uoms.
386 --
387 -- PARAMETERS
388 -- IN
389 -- p_chart_name, The Rate Chart Name
390 -- p_chart_type, The Rate Chart Type
391 -- p_carrier_name, Carrier name
392 -- p_service_level, Service level of the carrier
393 -- p_line_number, Line Number in the upload file, used for error reporting.
394 --
395 -- OUT
396 -- x_status, the return status, -1 for success
397 -- 2 for failure.
398 -- x_error_msg, the corresponding error meassge,
399 -- if any exception occurs during the process.
400 --______________________________________________________________________________--
401
402 PROCEDURE CHECK_DUPLICATE_RATE_CHART( p_chart_name IN VARCHAR2,
403 p_chart_type IN VARCHAR2,
404 p_carrier_name IN VARCHAR2,
405 p_service_level IN VARCHAR2,
406 p_line_number IN NUMBER,
407 x_error_msg OUT NOCOPY VARCHAR2,
408 x_status OUT NOCOPY NUMBER ) IS
409
410 l_rc_names VARCHAR100_TAB;
411 l_rc_types VARCHAR100_TAB;
412
413 CURSOR GET_TL_CHARTS IS
414 SELECT
415 lh.name, b.attribute1
416 FROM
417 qp_list_headers_tl lh,
418 qp_list_headers_b b,
419 qp_qualifiers qc,
420 qp_qualifiers qs,
421 qp_qualifiers qm
422 WHERE
423 lh.list_header_id = b.list_header_id AND
424 qc.qualifier_attribute = 'QUALIFIER_ATTRIBUTE1' AND
425 qc.qualifier_context = 'PARTY' AND
426 qc.qualifier_attr_value = Fnd_Number.Number_To_Canonical(g_carrier_id) AND
427 qc.list_header_id = lh.list_header_id AND
428 qs.qualifier_attribute = 'QUALIFIER_ATTRIBUTE10' AND
429 qs.qualifier_context = 'LOGISTICS' AND
430 qs.qualifier_attr_value = p_service_level AND
431 qs.list_header_id = qc.list_header_id AND
432 qm.qualifier_attribute = 'QUALIFIER_ATTRIBUTE7' AND
433 qm.qualifier_context = 'LOGISTICS' AND
434 qm.qualifier_attr_value = 'TRUCK' AND
435 qm.list_header_id = qc.list_header_id AND
436 lh.language = userenv('LANG');
437
438 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.CHECK_DUPLICATE_RATE_CHART';
439
440 BEGIN
441
442 FTE_UTIL_PKG.Enter_Debug(l_module_name);
443 x_status := -1;
444
445 --
446 -- Ensure that there is no rate chart with the same qualifier set
447 -- already loaded (CARRIER, SERVICE_LEVEL, MODE_OF_TRANSPORT)
448 --
449
450 IF (p_chart_type IN ('TL_MODIFIER')) THEN
451
452 GET_CARRIER_PREFERENCES(p_carrier_name => p_carrier_name,
453 p_service_level => p_service_level,
454 p_line_number => p_line_number,
455 x_error_msg => x_error_msg,
456 x_status => x_status);
457
458 IF (x_status <> -1) THEN
459 FTE_UTIL_PKG.Write_LogFile(l_module_name,'GET_CARRIER_PREFERENCES returned with error' || x_error_msg);
460 FTE_UTIL_PKG.Exit_Debug(l_module_name);
461 RETURN;
462 END IF;
463
464 OPEN GET_TL_CHARTS;
465 FETCH GET_TL_CHARTS BULK COLLECT INTO l_rc_names, l_rc_types;
466 CLOSE GET_TL_CHARTS;
467
468 FOR i IN 1..l_rc_types.COUNT LOOP
469 IF (l_rc_types(i) = p_chart_type) THEN
470 x_status := 2;
471 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_DUPLICATE_CHART');
472 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
473 p_module_name => l_module_name,
474 p_category => 'C',
475 p_line_number => p_line_number);
476 FTE_UTIL_PKG.Exit_Debug(l_module_name);
477 RETURN;
478 END IF;
479 END LOOP;
480
481 END IF;
482
483 FTE_UTIL_PKG.Exit_Debug(l_module_name);
484
485 EXCEPTION
486 WHEN OTHERS THEN
487 x_status := 2;
488 FTE_UTIL_PKG.Write_LogFile(l_module_name,'UNEXPECTED ERROR in CHECK_DUPLICATE_RATE_CHART ', sqlerrm);
489 FTE_UTIL_PKG.Exit_Debug(l_module_name);
490
491 END CHECK_DUPLICATE_RATE_CHART;
492
493 --______________________________________________________________________________________--
494 -- --
495 -- FUNCTION: GET_CHART_DATA --
496 -- --
497 -- PURPOSE Store summary information about each rate chart in the current load. --
498 -- --
499 -- PARAMETERS --
500 -- IN --
501 -- p_chart_name: The rate chart name --
502 -- p_carrier_name: The carrier name --
503 -- p_currency: The Currency of the rate chart --
504 -- p_chart_type: The Chart type --
505 -- p_line_number: The line number in the upload file. --
506 -- --
507 -- IN OUT --
508 -- x_service_level: The service level --
509 -- --
510 -- OUT --
511 -- x_cur_line, The current line number of rate chart. --
512 -- x_job_id, The process ID of this job. --
513 -- x_status, The return status, -1 for success --
514 -- 2 for failure. --
515 -- x_error_msg, The corresponding error meassge, --
516 -- if any exception occurs during the process. --
517 --______________________________________________________________________________________--
518
519 PROCEDURE GET_CHART_DATA( p_chart_name IN VARCHAR2,
520 p_currency IN VARCHAR2,
521 p_chart_type IN VARCHAR2,
522 x_carrier_name IN OUT NOCOPY VARCHAR2,
523 x_service_level IN OUT NOCOPY VARCHAR2,
524 x_cur_line OUT NOCOPY NUMBER,
525 x_job_id OUT NOCOPY NUMBER,
526 p_line_number IN NUMBER,
527 x_error_msg OUT NOCOPY VARCHAR2,
528 x_status OUT NOCOPY NUMBER) IS
529
530 chart_exists BOOLEAN := FALSE;
531
532 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.GET_CHART_DATA';
533
534 BEGIN
535
536 FTE_UTIL_PKG.Enter_Debug(l_module_name);
537 x_status := -1;
538
539 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
540 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_chart_name',p_chart_name);
541 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_currency ',p_currency);
542 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_chart_type', p_chart_type);
543 END IF;
544
545 FOR i IN 1.. Chart_Names.COUNT LOOP
546
547 IF (p_chart_name = Chart_Names(i)) THEN
548 x_cur_line := Chart_LineNums(i);
549 x_job_id := Chart_Process_Ids(i);
550 x_carrier_name := Chart_Carriers(i);
551 IF (x_service_level IS NULL) THEN
552 x_service_level := chart_service_levels(i);
553 ELSIF (x_service_level <> chart_service_levels(i)) THEN
554 x_status := 2;
555 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_SERVICE_LEVELS_NOT_SAME');
556 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
557 p_module_name => l_module_name,
558 p_category => 'D',
559 p_line_number => p_line_number);
560 FTE_UTIL_PKG.Exit_Debug(l_module_name);
561 RETURN;
562 END IF;
563 chart_exists := true;
564 EXIT;
565 END IF;
566
567 END LOOP;
568
569 IF (NOT chart_exists) THEN
570
571 x_cur_line := 0;
572 Chart_Names(Chart_Names.COUNT + 1) := p_chart_name;
573 Chart_LineNums(Chart_LineNums.COUNT + 1) := x_cur_line;
574 Chart_Carriers(Chart_Carriers.COUNT + 1) := x_carrier_name;
575 Chart_Service_Levels(Chart_Service_Levels.COUNT + 1) := x_service_level;
576 Chart_Currencies(Chart_Currencies.COUNT + 1) := p_currency;
577
578 IF (p_chart_type IS NOT NULL) THEN
579 Chart_Types(Chart_Types.COUNT + 1) := p_chart_type;
580 ELSE
581 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Programmer Error: Chart_Type NOT SPECIFIED');
582 x_status := 2;
583 END IF;
584
585 x_job_id := FTE_BULKLOAD_PKG.GET_PROCESS_ID;
586 Chart_Process_Ids(Chart_Process_Ids.COUNT + 1) := x_job_id;
587
588 --+
589 -- validate the rate chart to ensure that it can be loaded.
590 --+
591 IF (G_ACTION = 'ADD') THEN
592
593 CHECK_DUPLICATE_RATE_CHART(p_chart_name => p_chart_name,
594 p_chart_type => p_chart_type,
595 p_carrier_name => x_carrier_name,
596 p_service_level => x_service_level,
597 p_line_number => p_line_number,
598 x_error_msg => x_error_msg,
599 x_status => x_status);
600
601 IF (x_status <> -1) THEN
602 FTE_UTIL_PKG.Exit_Debug(l_module_name);
603 RETURN;
604 END IF;
605 END IF;
606 END IF;
607
608 FTE_UTIL_PKG.Exit_Debug(l_module_name);
609
610 EXCEPTION
611 WHEN OTHERS THEN
612 x_status := 2;
613 FTE_UTIL_PKG.Write_LogFile(l_module_name, sqlerrm);
614 FTE_UTIL_PKG.Exit_Debug(l_module_name);
615
616 END GET_CHART_DATA;
617
618 --_________________________________________________________________________________--
619 --
620 -- FUNCTION: IS_LANE_LOADED
621 --
622 -- Purpose Returns true if the rate chart <p_chart_name> has an associated
623 -- lane that has already been loaded. If that is true, the lane
624 -- needs to be updated with the rate chart id.
625 --
626 -- PARAMETERS
627 -- IN
628 -- p_chart_name VARCHAR2 : The rate chart name
629 -- p_carrier_name VARCHAR2 : The carrier name of the rate chart.
630 --
631 -- OUT
632 -- x_carrier_id NUMBER : The carrier ID of the rate chart.
633 -- x_lane_ids NUMBER_TAB : A list of all the lanes associated with
634 -- this rate chart.
635 -- RETURN:
636 -- true , If the lane_type is of the form hold_<p_chart_name>
637 -- false, otherwise.
638 --_________________________________________________________________________________--
639
640 FUNCTION IS_LANE_LOADED( p_chart_name IN VARCHAR2,
641 p_carrier_name IN VARCHAR2,
642 p_service_level IN VARCHAR2,
643 p_line_number IN NUMBER,
644 x_lane_ids OUT NOCOPY NUMBER_TAB,
645 x_error_msg OUT NOCOPY VARCHAR2,
646 x_status OUT NOCOPY VARCHAR2)
647 RETURN BOOLEAN IS
648
649 l_lane_loaded BOOLEAN := true;
650 l_name VARCHAR2(50);
651 l_lane_numbers STRINGARRAY;
652 l_lane_services STRINGARRAY;
653 l_carrier_ids NUMBER_TAB;
654
655 l_num_of_lanes NUMBER;
656
657 CURSOR GET_LANES(p_chart_name VARCHAR2) IS
658 SELECT
659 lane_id,
660 carrier_id,
661 lane_number,
662 service_type_code
663 FROM
664 fte_lanes
665 WHERE
666 UPPER(lane_type) = UPPER('HOLD_'|| p_chart_name) AND
667 editable_flag <> 'D';
668
669 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.IS_LANE_LOADED';
670
671 BEGIN
672 FTE_UTIL_PKG.Enter_Debug(l_module_name);
673 x_status := -1;
674
675 l_name := UPPER(p_chart_name);
676
677 IF ( FTE_BULKLOAD_PKG.g_debug_on ) THEN
678 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_name ',l_name );
679 END IF;
680
681 OPEN GET_LANES(p_chart_name);
682
683 FETCH GET_LANES BULK COLLECT INTO x_lane_ids, l_carrier_ids, l_lane_numbers, l_lane_services;
684
685 l_num_of_lanes := GET_LANES % ROWCOUNT;
686
687 CLOSE GET_LANES;
688
689 l_lane_loaded := l_num_of_lanes > 0;
690
691 --+
692 -- check to make sure the carrier ids of the lanes and rate chart match
693 --+
694 IF (l_lane_loaded) THEN
695
696 GET_CARRIER_PREFERENCES(p_carrier_name => p_carrier_name,
697 p_service_level => p_service_level,
698 p_line_number => p_line_number,
699 x_error_msg => x_error_msg,
700 x_status => x_status);
701
702 IF (x_status <> -1) THEN
703 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
704 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error message from GET_CARRIER_PREFERENCES => ' || x_error_msg );
705 END IF;
706 FTE_UTIL_PKG.Exit_Debug(l_module_name);
707 RETURN FALSE;
708 END IF;
709
710 FOR i IN 1..l_carrier_ids.COUNT LOOP
711 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
712 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_lane_numbers(' || i || ')', l_lane_numbers(i));
713 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_lane_services('|| i || ')', l_lane_services(i));
714 END IF;
715
716 IF (g_carrier_id <> l_carrier_ids(i)) THEN
717 x_status := 2;
718 l_lane_loaded := false;
719 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_CARRIER_LANE_MISMATCH',
720 p_tokens => STRINGARRAY('CARRIER','RATE_CHART','SERVICE'),
721 p_values => STRINGARRAY(p_carrier_name,p_chart_name,l_lane_numbers(i)));
722 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
723 p_module_name => l_module_name,
724 p_category => 'D',
725 p_line_number => p_line_number);
726 EXIT;
727 ELSIF (p_service_level <> l_lane_services(i)) THEN
728 x_status := 2;
729 l_lane_loaded := false;
730 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_SERV_LEVEL_LANE_MISMATCH',
731 p_tokens => STRINGARRAY('RATE_CHART','SERVICE'),
732 p_values => STRINGARRAY(p_chart_name,l_lane_numbers(i)));
733 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
734 p_module_name => l_module_name,
735 p_category => 'D',
736 p_line_number => p_line_number);
737
738 EXIT;
739 END IF;
740 END LOOP;
741 END IF;
742
743 FTE_UTIL_PKG.Exit_Debug(l_module_name);
744
745 RETURN l_lane_loaded;
746
747 EXCEPTION
748 WHEN OTHERS THEN
749 IF ( GET_LANES%ISOPEN ) THEN
750 CLOSE GET_LANES;
751 END IF;
752 x_status := 2;
753 FTE_UTIL_PKG.Write_LogFile(l_module_name, sqlerrm);
754 FTE_UTIL_PKG.Exit_Debug(l_module_name);
755
756 END IS_LANE_LOADED;
757
758 --_________________________________________________________________________________--
759 --
760 -- PROCEDURE: SET_CHART_LINE
761 --
762 -- PURPOSE Update the cached rate chart information with the current line
763 -- Number of the rate chart.
764 --
765 -- PARAMETERS
766 -- IN
767 -- 1. p_chart_name : The rate chart name
768 -- 2. p_linenum : The rate chart's current line number.
769 --
770 -- OUT
771 -- 1. x_status : The exit status
772 --_________________________________________________________________________________--
773
774 PROCEDURE SET_CHART_LINE (p_chart_name IN VARCHAR2,
775 p_linenum IN NUMBER,
776 x_status OUT NOCOPY NUMBER) IS
777
778 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.SET_CHART_LINE';
779
780 BEGIN
781 FTE_UTIL_PKG.Enter_Debug(l_module_name);
782 x_status := -1;
783
784 FOR i IN 1.. Chart_Names.COUNT LOOP
785 IF (p_chart_name = Chart_Names(i)) THEN
786 Chart_LineNums(i) := p_linenum;
787 FTE_UTIL_PKG.Exit_Debug(l_module_name);
788 RETURN;
789 END IF;
790 END LOOP;
791
792 x_status := 2;
793
794 IF( FTE_BULKLOAD_PKG.g_debug_on) THEN
795 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error: Rate Chart ' || p_chart_name || ' not found');
796 END IF;
797
798 FTE_UTIL_PKG.Exit_Debug(l_module_name);
799
800 EXCEPTION
801 WHEN OTHERS THEN
802 x_status := 2;
803 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR IN SET_CHART_LINE: ' || sqlerrm);
804 FTE_UTIL_PKG.Exit_Debug(l_module_name);
805
806 END SET_CHART_LINE;
807
808 --_________________________________________________________________________________--
809 --
810 -- PROCEDURE: LINK_RC_MODIFIERS
811 --
812 -- PURPOSE: Link all processed Modifiers to their corresponding Rate Charts.
813 -- Creates a Qualifier for the Modifier and stores the Rate Chart
814 -- ID in the qualifier attribute value.
815 --
816 -- The Modifier Names and and their associated Rate Chart Names
817 -- are stored in the tables Link_ChartNames and Link_ModifierNames
818 --
819 -- PARAMETERS
820 -- IN p_chart_name, the chart name to be linked
821 --
822 -- OUT
823 -- x_status, the return status, -1 for success
824 -- 2 for failure.
825 -- x_error_msg, the corresponding error message,
826 -- if any exception occurs during the process.
827 --_________________________________________________________________________________--
828
829 PROCEDURE LINK_RC_MODIFIERS(p_chart_name IN VARCHAR2,
830 x_error_msg OUT NOCOPY VARCHAR2,
831 x_status OUT NOCOPY VARCHAR2) IS
832
833 l_rc_id NUMBER;
834 l_mod_pid NUMBER;
835 l_rc_name VARCHAR2(50);
836 l_mod_name VARCHAR2(50);
837 l_temp VARCHAR2(30);
838 l_carrier_name VARCHAR2(100);
839
840 l_qualifier_data FTE_BULKLOAD_PKG.data_values_tbl;
841 l_qualifier_data_tbl FTE_BULKLOAD_PKG.block_data_tbl;
842
843 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.LINK_RC_MODIFIERS';
844
845 BEGIN
846
847 FTE_UTIL_PKG.Enter_Debug(l_module_name);
848 x_status := -1;
849
850 --
851 -- Get the associated modifier name, if it exists.
852 --
853 FOR i IN 1..Link_ChartNames.COUNT LOOP
854
855 IF (Link_ChartNames(i) = p_chart_name) THEN
856
857 l_mod_name := Link_ModifierNames(i);
858
859 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
860 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Modifier for ' || p_chart_name || ' is ' || l_mod_name);
861 END IF;
862
863 BEGIN
864 SELECT
865 l.list_header_id
866 INTO
867 l_rc_id
868 FROM
869 qp_list_headers_tl l,
870 qp_list_headers_b b
871 WHERE
872 l.list_header_id = b.list_header_id AND
873 l.name = p_chart_name AND
874 l.language = userenv('LANG');
875
876 EXCEPTION
877 WHEN NO_DATA_FOUND THEN
878 x_status := 2;
879 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Rate Chart ' || p_chart_name || ' has not been loaded!'); --message.
880 FTE_UTIL_PKG.Exit_Debug(l_module_name);
881 RETURN;
882 END;
883
884 -- Get the process_id of the modifier, for update.
885 GET_CHART_DATA(p_chart_name => l_mod_name,
886 p_currency => l_temp,
887 p_chart_type => l_temp,
888 x_carrier_name => l_carrier_name,
889 x_service_level => l_temp,
890 x_cur_line => l_temp,
891 x_job_id => l_mod_pid,
892 p_line_number => 0,
893 x_error_msg => x_error_msg,
894 x_status => x_status);
895
896 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
897 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'p_chart_name', p_chart_name);
898 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_mod_name ', l_mod_name);
899 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rc_id ', l_rc_id);
900 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_mod_pid ', l_mod_pid);
901 END IF;
902
903 l_qualifier_data('ACTION') := 'ADD';
904 l_qualifier_data('RATE_CHART_NAME') := p_chart_name;
905 l_qualifier_data('PROCESS_ID') := l_mod_pid;
906 l_qualifier_data('ATTRIBUTE') := 'PRICE_LIST';
907 l_qualifier_data('VALUE') := l_rc_id;
908 l_qualifier_data('CONTEXT') := 'MODLIST';
909 l_qualifier_data('GROUP') := 1;
910
911 l_qualifier_data_tbl(1) := l_qualifier_data;
912
913 FTE_RATE_CHART_LOADER.PROCESS_QUALIFIER(p_block_header => g_dummy_block_hdr_tbl,
914 p_block_data => l_qualifier_data_tbl,
915 p_line_number => 0,
916 x_status => x_status,
917 x_error_msg => x_error_msg);
918 l_qualifier_data.DELETE;
919 l_qualifier_data_tbl.DELETE;
920
921 IF (x_status <> -1) THEN
922 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg);
923 FTE_UTIL_PKG.Exit_Debug(l_module_name);
924 RETURN;
925 END IF;
926
927 FTE_RATE_CHART_LOADER.SUBMIT_QP_PROCESS(p_qp_call => FALSE,
928 x_status => x_status,
929 x_error_msg => x_error_msg);
930 IF (x_status <> -1) THEN
931 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg);
932 FTE_UTIL_PKG.Exit_Debug(l_module_name);
933 RETURN;
934 END IF;
935 EXIT;
936 END IF;
937 END LOOP;
938
939 FTE_UTIL_PKG.Exit_Debug(l_module_name);
940
941 EXCEPTION
942 WHEN OTHERS THEN
943 x_status := 2;
944 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXP. ERROR in LINK_RC_MODIFIERS: ' || sqlerrm);
945 FTE_UTIL_PKG.Exit_Debug(l_module_name);
946 END LINK_RC_MODIFIERS;
947
948
949 --_________________________________________________________________________________--
950 --
951 -- FUNCTION: GET_FACILITY_RATE_BASIS
952 --
953 -- PURPOSE Get the rate basis and UOM associated with the facility modifier.
954 --
955 -- PARAMETERS
956 --
957 -- IN
958 -- p_chart_name: The rate chart name
959 --
960 -- OUT
961 -- x_rate_basis: The rate basis of the facility modifier.
962 -- x_uom: The rate basis uom.
963 --_________________________________________________________________________________--
964
965 PROCEDURE GET_FACILITY_RATE_BASIS(p_chart_name IN VARCHAR2,
966 x_rate_basis OUT NOCOPY VARCHAR2,
967 x_uom OUT NOCOPY VARCHAR2,
968 x_status OUT NOCOPY NUMBER,
969 x_error_msg OUT NOCOPY VARCHAR2) IS
970
971 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.GET_FACILITY_RATE_BASIS';
972
973 BEGIN
974
975 FTE_UTIL_PKG.Enter_Debug(l_module_name);
976 x_status := -1;
977
978 FOR i IN 1..Fac_Modifier_Names.COUNT LOOP
979 IF (p_chart_name = Fac_Modifier_Names(i)) THEN
980 x_rate_basis := Fac_Modifier_Bases(i);
981 x_uom := Fac_Modifier_Uoms(i);
982 FTE_UTIL_PKG.Exit_Debug(l_module_name);
983 RETURN;
984 END IF;
985 END LOOP;
986
987 x_status := 2;
988 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
989 x_error_msg:='Facility Rate Chart Name Not Found';
990 FTE_UTIL_PKG.Write_LogFile(l_module_name , x_error_msg);
991 FTE_UTIL_PKG.Exit_Debug(l_module_name);
992 RETURN;
993 END IF;
994
995 FTE_UTIL_PKG.Exit_Debug(l_module_name);
996 EXCEPTION
997 WHEN OTHERS THEN
998 x_status := 2;
999 FTE_UTIL_PKG.Write_LogFile(l_module_name , 'UNEXP. ERROR IN GET_FACILITY_RATE_BASIS: ' || sqlerrm);
1000 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1001
1002 END GET_FACILITY_RATE_BASIS;
1003
1004 --_________________________________________________________________________________--
1005 --
1006 -- PROCEDURE: ADD_ATTRIBUTE
1007 --
1008 -- PURPOSE Add an attribute to a rate chart line.
1009 -- Calls FTE_RATE_CHART_VAL_PKG.Validate_Attribute_Row.
1010 --
1011 -- PARAMETERS
1012 --
1013 -- IN
1014 -- p_attribute_type Attribute Type (eg. COMMODITY)
1015 -- p_attribute_value Attribute Value_From
1016 -- p_attribute_value_to Attribute Value_To
1017 -- p_context Context of the Attribute
1018 -- p_linenum Rate Chart Line Number.
1019 -- p_comp_operator Comparison Operator (eg. BETWEEN)
1020 -- p_process_id process ID of the rate chart.
1021 -- p_line_number line number in the spreadsheet, used for error logging
1022 --
1023 -- OUT
1024 -- x_status : the return status, -1 for success
1025 -- 2 for failure.
1026 -- x_error_msg: the corresponding error meassge,
1027 -- if any exception occurs during the process.
1028 --_________________________________________________________________________________--
1029
1030 PROCEDURE ADD_ATTRIBUTE(p_attribute_type IN VARCHAR2,
1031 p_attribute_value IN VARCHAR2,
1032 p_attribute_value_to IN VARCHAR2,
1033 p_context IN VARCHAR2,
1034 p_linenum IN NUMBER,
1035 p_comp_operator IN VARCHAR2,
1036 p_process_id IN NUMBER,
1037 p_line_number IN NUMBER,
1038 x_error_msg OUT NOCOPY VARCHAR2,
1039 x_status OUT NOCOPY NUMBER ) IS
1040
1041
1042 l_attribute_data FTE_BULKLOAD_PKG.data_values_tbl;
1043 l_attribute_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
1044
1045 l_module_name CONSTANT VARCHAR2(100) := 'fte.plsql.'||G_PKG_NAME||'.ADD_ATTRIBUTE';
1046
1047 BEGIN
1048
1049 FTE_UTIL_PKG.Enter_Debug(l_module_name);
1050 x_status := -1;
1051
1052 l_attribute_data('ACTION') := 'ADD';
1053 l_attribute_data('LINE_NUMBER') := Fnd_Number.Number_To_Canonical(p_linenum);
1054 l_attribute_data('ATTRIBUTE') := p_attribute_type;
1055 l_attribute_data('ATTRIBUTE_VALUE') := p_attribute_value;
1056 l_attribute_data('ATTRIBUTE_VALUE_TO') := p_attribute_value_to;
1057 l_attribute_data('CONTEXT') := p_context;
1058 l_attribute_data('COMPARISON_OPERATOR') := p_comp_operator;
1059
1060 l_attribute_block_tbl(1) := l_attribute_data;
1061
1062 FTE_RATE_CHART_LOADER.PROCESS_RATING_ATTRIBUTE( p_block_header => g_dummy_block_hdr_tbl,
1063 p_block_data => l_attribute_block_tbl,
1064 p_line_number => p_line_number,
1065 p_validate_column => FALSE,
1066 x_status => x_status,
1067 x_error_msg => x_error_msg);
1068
1069 l_attribute_data.DELETE;
1070 l_attribute_block_tbl.DELETE;
1071
1072 IF (x_status <> -1) THEN
1073 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error ',x_error_msg);
1074 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1075 RETURN;
1076 END IF;
1077
1078 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1079
1080 EXCEPTION
1081 WHEN OTHERS THEN
1082 x_status := 2;
1083 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR ', sqlerrm);
1084 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1085
1086 END ADD_ATTRIBUTE;
1087
1088 --_________________________________________________________________________________--
1089 --
1090 -- PROCEDURE: RESET_ALL
1091 --
1092 -- PURPOSE To delete all rows from all pl/sql tables, used for caching by the
1093 -- procedure GET_CHART_DATA.
1094 --
1095 --_________________________________________________________________________________--
1096
1097 PROCEDURE RESET_ALL IS
1098
1099 BEGIN
1100
1101 IF (Chart_Names.EXISTS(1)) THEN
1102 Chart_Names.DELETE;
1103 Chart_Carriers.DELETE;
1104 Chart_Service_Levels.DELETE;
1105 Chart_LineNums.DELETE;
1106 Chart_Currencies.DELETE;
1107 Chart_Process_Ids.DELETE;
1108 Chart_Types.DELETE;
1109 Chart_Min_Charges.DELETE;
1110 Chart_Ids.DELETE;
1111 Chart_Start_Dates.DELETE;
1112 Chart_End_Dates.DELETE;
1113 g_layovr_charges.DELETE;
1114 g_layovr_breaks.DELETE;
1115 Link_ChartNames.DELETE;
1116 Link_Modifiernames.DELETE;
1117 END IF;
1118
1119 g_chart_name := NULL;
1120 g_wknd_layovr_uom := NULL;
1121
1122 EXCEPTION
1123 WHEN OTHERS THEN
1124 FTE_UTIL_PKG.Write_LogFile('RESET_ALL','UNEXPECTED ERROR occured',sqlerrm);
1125 RAISE;
1126 END RESET_ALL;
1127
1128 --_________________________________________________________________________________--
1129 --
1130 -- PROCEDURE: RESET_CHART_INFO
1131 --
1132 -- Purpose To reset the chart info already stored in global variables.
1133 --
1134 --_________________________________________________________________________________--
1135
1136 PROCEDURE RESET_CHART_INFO IS
1137 BEGIN
1138 g_layovr_charges := STRINGARRAY();
1139 g_layovr_breaks := STRINGARRAY();
1140 g_chart_name := NULL;
1141 g_wknd_layovr_uom := NULL;
1142 EXCEPTION
1143 WHEN OTHERS THEN
1144 FTE_UTIL_PKG.Write_LogFile('RESET_CHART_INFO','Unexpected error');
1145 RAISE;
1146 END RESET_CHART_INFO;
1147
1148
1149 --_________________________________________________________________________________--
1150 -- --
1151 -- PROCEDURE: CREATE_BREAKS --
1152 -- --
1153 -- PURPOSE: Create rate chart break lines in qp_list_lines given the --
1154 -- charges and break ranges. --
1155 -- --
1156 -- PARAMETERS --
1157 -- IN --
1158 -- p_break_charges, The charges of the break ranges. --
1159 -- p_break_limits, The limits of the break ranges. --
1160 -- p_break_gap, The gap between the end of one break and the --
1161 -- beginning of the next break --
1162 -- p_rate_type, Rate Type (eg. STOP, FACILITY, ...) --
1163 -- p_attribute_type, The attribute type associated with the break line. --
1164 -- p_process_id, Process Id of the rate chart. --
1165 -- --
1166 -- IN OUT Parameters --
1167 -- x_linenum, The line number of the rate break header. --
1168 -- --
1169 -- OUT Parameters --
1170 -- x_status, the return status, -1 for success --
1171 -- 2 for failure. --
1172 -- x_error_msg, the corresponding error meassge, --
1173 -- if any exception occurs during the process. --
1174 --_________________________________________________________________________________--
1175
1176 PROCEDURE CREATE_BREAKS(p_break_charges IN STRINGARRAY,
1177 p_break_limits IN STRINGARRAY,
1178 p_break_start IN NUMBER,
1179 p_break_gap IN NUMBER,
1180 p_rate_type IN VARCHAR2,
1181 p_attribute_type IN VARCHAR2,
1182 p_process_id IN NUMBER,
1183 x_linenum IN OUT NOCOPY NUMBER,
1184 x_error_msg OUT NOCOPY VARCHAR2,
1185 x_status OUT NOCOPY NUMBER) IS
1186
1187 l_break_min NUMBER;
1188 l_break_max NUMBER;
1189 l_rate NUMBER;
1190 l_index1 NUMBER;
1191 l_index2 NUMBER;
1192 p_line_number NUMBER := 0;
1193
1194 l_rate_break_data FTE_BULKLOAD_PKG.data_values_tbl;
1195 l_rate_break_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
1196
1197 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.CREATE_BREAKS';
1198
1199 BEGIN
1200
1201 FTE_UTIL_PKG.Enter_Debug(l_module_name);
1202 x_status := -1;
1203
1204 l_break_max := p_break_start - p_break_gap;
1205
1206 l_index1 := p_break_charges.FIRST;
1207 l_index2 := p_break_limits.FIRST;
1208
1209 FOR i IN 1..p_break_charges.COUNT LOOP
1210
1211 l_rate := Fnd_Number.Canonical_To_Number(p_break_charges(l_index1));
1212 l_break_min := l_break_max + p_break_gap;
1213 l_break_max := Fnd_Number.Canonical_To_Number(p_break_limits(l_index2));
1214 x_linenum := x_linenum + 1;
1215
1216 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
1217 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'x_linenum ' || x_linenum);
1218 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_break_min' || l_break_min);
1219 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_break_max' || l_break_max);
1220 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate ' || l_rate);
1221 END IF;
1222
1223 l_rate_break_data('ACTION') := 'ADD'; --G_ACTION;
1224 l_rate_break_data('LINE_NUMBER'):= x_linenum;
1225 l_rate_break_data('LOWER_LIMIT'):= Fnd_Number.Number_To_Canonical(l_break_min);
1226 l_rate_break_data('UPPER_LIMIT'):= Fnd_Number.Number_To_Canonical(l_break_max);
1227 l_rate_break_data('RATE') := Fnd_Number.Number_To_Canonical(l_rate);
1228 l_rate_break_data('RATE_TYPE') := p_rate_type;
1229 l_rate_break_data('ATTRIBUTE') := p_attribute_type;
1230 l_rate_break_data('TYPE') := 'ACCESSORIAL_SURCHARGE';
1231
1232 l_rate_break_block_tbl(1) := l_rate_break_data;
1233
1234 FTE_RATE_CHART_LOADER.PROCESS_RATE_BREAK(p_block_header => g_dummy_block_hdr_tbl,
1235 p_block_data => l_rate_break_block_tbl,
1236 p_line_number => p_line_number,
1237 p_validate_column => FALSE,
1238 x_status => x_status,
1239 x_error_msg => x_error_msg);
1240
1241 l_rate_break_data.DELETE;
1242 l_rate_break_block_tbl.DELETE;
1243
1244 IF (x_status <> -1) THEN
1245 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error On Line ' || x_linenum);
1246 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1247 RETURN;
1248 END IF;
1249 l_index1 := p_break_charges.NEXT(l_index1);
1250 l_index2 := p_break_limits.NEXT(l_index2);
1251
1252 END LOOP;
1253
1254 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1255
1256 EXCEPTION
1257 WHEN OTHERS THEN
1258
1259 x_status := 2;
1260 FTE_UTIL_PKG.Write_LogFile(l_module_name, sqlerrm);
1261 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1262
1263 END CREATE_BREAKS;
1264
1265 --_________________________________________________________________________________--
1266 --
1267 -- PROCEDURE: CREATE_MINCHARGE_MODIFIER
1268 --
1269 -- PURPOSE: Create a Modifier for a rate chart that has minimum charges
1270 -- For its lines. This modifier is then later linked to the rate
1271 -- chart.
1272 --
1273 -- PARAMETERS
1274 -- IN
1275 -- p_chart_name, the rate chart name
1276 -- p_service_level, service level of the carrier
1277 -- p_carrier_name, carrier name for which the mincharge has to be attached
1278 -- p_currency, carrier currency?
1279 -- p_charge_data, minimum rate figures
1280 -- p_line_number, line number in the upload file, used for logging
1281 --
1282 -- OUT Parameters
1283 -- x_status, the return status, -1 for success
1284 -- 2 for failure.
1285 -- x_error_msg, the corresponding error meassge,
1286 -- if any exception occurs during the process.
1287 --_________________________________________________________________________________--
1288
1289 PROCEDURE CREATE_MINCHARGE_MODIFIER( p_chart_name IN VARCHAR2,
1290 p_service_level IN VARCHAR2,
1291 p_carrier_name IN VARCHAR2,
1292 p_currency IN VARCHAR2,
1293 p_charge_data IN VARCHAR2,
1294 x_mod_name OUT NOCOPY VARCHAR2,
1295 p_line_number IN NUMBER,
1296 x_status OUT NOCOPY NUMBER,
1297 x_error_msg OUT NOCOPY VARCHAR2) IS
1298 l_description VARCHAR2(100);
1299 l_vehicle_type VARCHAR2(50);
1300 l_basis VARCHAR2(30);
1301 l_attribute_type VARCHAR2(50);
1302 l_context VARCHAR2(50);
1303 l_linenum NUMBER;
1304 l_process_id NUMBER;
1305 l_mincharge NUMBER;
1306 l_service_level VARCHAR2(30);
1307 l_start_date VARCHAR2(30);
1308 l_end_date VARCHAR2(30);
1309 l_type VARCHAR2(30);
1310 l_subtype VARCHAR2(30);
1311 l_uom VARCHAR2(30);
1312 l_count NUMBER;
1313 l_chart_type VARCHAR2(30);
1314 l_charge_info STRINGARRAY;
1315 l_formula_id NUMBER;
1316 l_carrier_name VARCHAR2(100);
1317
1318 l_rate_hdr_data FTE_BULKLOAD_PKG.data_values_tbl;
1319 l_rate_hdr_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
1320
1321 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
1322 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
1323
1324 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.'||G_PKG_NAME||'.CREATE_MINCHARGE_MODIFIER';
1325
1326 BEGIN
1327
1328 FTE_UTIL_PKG.Enter_Debug(l_module_name);
1329 x_status := -1;
1330
1331 x_mod_name := p_chart_name || '_MIN';
1332 l_service_level := p_service_level;
1333 l_chart_type := 'MIN_MODIFIER';
1334 l_carrier_name := p_carrier_name;
1335
1336 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
1337 FTE_UTIL_PKG.Write_LogFile(l_module_name, p_service_level||'::'||p_chart_name||'::'||p_currency);
1338 END IF;
1339
1340 -- Store modifier data.
1341 GET_CHART_DATA(p_chart_name => x_mod_name,
1342 p_currency => p_currency,
1343 p_chart_type => l_chart_type,
1344 x_carrier_name => l_carrier_name,
1345 x_service_level => l_service_level,
1346 x_cur_line => l_linenum,
1347 x_job_id => l_process_id,
1348 p_line_number => p_line_number,
1349 x_error_msg => x_error_msg,
1350 x_status => x_status);
1351
1352 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
1353 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_linenum ', l_linenum);
1354 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_process_id ', l_process_id);
1355 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_service_level', l_service_level);
1356 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating Modifier Header For ' || x_mod_name);
1357 END IF;
1358
1359 IF (x_status <> -1) THEN
1360 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg);
1361 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1362 RETURN;
1363 END IF;
1364
1365 -- Create Modifier Header --
1366 l_description := 'Rate Chart ' || x_mod_name;
1367
1368 l_rate_hdr_data('ACTION') := 'ADD';
1369 l_rate_hdr_data('TL_MIN_CHARGE') := x_mod_name;
1370 l_rate_hdr_data('DESCRIPTION') := l_description;
1371 l_rate_hdr_data('START_DATE') := l_start_date;
1372 l_rate_hdr_data('END_DATE') := l_end_date;
1373 l_rate_hdr_data('CURRENCY') := p_currency;
1374 l_rate_hdr_data('CARRIER_NAME') := p_carrier_name;
1375 l_rate_hdr_data('SERVICE_LEVEL') := l_service_level;
1376 l_rate_hdr_data('ATTRIBUTE1') := l_chart_type;
1377
1378 l_rate_hdr_block_tbl(1) := l_rate_hdr_data;
1379
1380 FTE_RATE_CHART_LOADER.PROCESS_RATE_CHART(p_block_header => g_dummy_block_hdr_tbl,
1381 p_block_data => l_rate_hdr_block_tbl,
1382 p_line_number => p_line_number,
1383 p_validate_column => FALSE,
1384 p_process_id => l_process_id,
1385 x_status => x_status,
1386 x_error_msg => x_error_msg);
1387
1388 l_rate_hdr_data.DELETE;
1389 l_rate_hdr_block_tbl.DELETE;
1390
1391 IF (x_status <> -1) THEN
1392 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1393 RETURN;
1394 END IF;
1395
1396
1397 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
1398 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'p_charge_data', p_charge_data);
1399 END IF;
1400
1401 l_charge_info := FTE_UTIL_PKG.TOKENIZE_STRING(p_string => p_charge_data,
1402 p_delim => ':' );
1403 l_type := 'ACCESSORIAL_SURCHARGE';
1404
1405 BEGIN
1406
1407 SELECT price_formula_id
1408 INTO l_formula_id
1409 FROM qp_price_formulas_b
1410 WHERE price_formula_no = 'QP_MIN_CHARGE';
1411
1412 EXCEPTION
1413 WHEN NO_DATA_FOUND THEN
1414 x_status := 2;
1415 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_MIN_CHARGE_FORMULA_NOT_SET');
1416 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
1417 p_module_name => l_module_name,
1418 p_category => 'B',
1419 p_line_number => p_line_number);
1420 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1421 RETURN;
1422 WHEN OTHERS THEN
1423 x_status := 2;
1424 FTE_UTIL_PKG.Write_LogFile(l_module_name, sqlerrm);
1425 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1426
1427 END;
1428
1429 --+
1430 -- Create a Line for each (basis,vehicle,mincharge) combination.
1431 -- l_charge_info contains strings of the format
1432 -- (B:<basis>:V:<veh>:U:<uom>:C:<charge>:B:<basis>:...)
1433 --+
1434
1435 l_count := l_charge_info.FIRST;
1436
1437 WHILE l_count < l_charge_info.COUNT-1 LOOP
1438
1439 l_linenum := l_linenum + 1;
1440
1441 l_description := 'Line ' || l_linenum || ' Of ' ||x_mod_name;
1442
1443 l_basis := l_charge_info(l_count + 1);
1444 l_vehicle_type := l_charge_info(l_count + 3);
1445 l_uom := l_charge_info(l_count + 5);
1446 l_mincharge := Fnd_Number.Canonical_To_Number(l_charge_info(l_count+7));
1447
1448 IF (l_basis = 'DISTANCE') THEN
1449 l_subtype := FTE_RTG_GLOBALS.G_C_MIN_DISTANCE_CH;
1450 ELSIF (l_basis = 'TIME') THEN
1451 l_subtype := FTE_RTG_GLOBALS.G_C_MIN_TIME_CH;
1452 ELSE
1453 -- WEIGHT/VOLUME/PALLET/CONTAINER
1454 l_subtype := FTE_RTG_GLOBALS.G_C_MIN_UNIT_CH;
1455 END IF;
1456
1457 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
1458 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating ' || l_description);
1459 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_subtype ', l_subtype);
1460 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_basis ', l_basis);
1461 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_vehicle_type',l_vehicle_type);
1462 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_mincharge ', l_mincharge);
1463 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_uom ', l_uom);
1464 END IF;
1465
1466 --
1467 -- MinCharge Modifier lines must have the item_amount attribute for each line
1468 -- AND no item_all attribute.
1469 --
1470 l_rate_line_data('ACTION') := G_ACTION;
1471 l_rate_line_data('LINE_NUMBER') := l_linenum;
1472 l_rate_line_data('DESCRIPTION') := l_description;
1473 l_rate_line_data('FIXED_RATE') := Fnd_Number.Number_To_Canonical(l_mincharge);
1474 l_rate_line_data('UOM') := l_uom;
1475 l_rate_line_data('RATE_BREAK_TYPE') := 'POINT';
1476 l_rate_line_data('RATE_TYPE') := 'LUMPSUM';
1477 l_rate_line_data('TYPE') := l_type;
1478 l_rate_line_data('SUBTYPE') := l_subtype;
1479 l_rate_line_data('MOD_LEVEL_CODE') := 'LINEGROUP';
1480 l_rate_line_data('FORMULA_ID') := l_formula_id;
1481 l_rate_line_data('ATTRIBUTE') := 'ITEM_AMOUNT';
1482 l_rate_line_data('CONTEXT') := 'VOLUME';
1483 l_rate_line_data('COMPARISON_OPERATOR') := 'BETWEEN';
1484 l_rate_line_data('ATTRIBUTE_VALUE') := 1;
1485 l_rate_line_data('ATTRIBUTE_VALUE_TO') := g_max_number;
1486
1487 l_rate_line_block_tbl(1) := l_rate_line_data;
1488
1489 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
1490 p_block_data => l_rate_line_block_tbl,
1491 p_line_number => p_line_number,
1492 p_validate_column => FALSE,
1493 x_status => x_status,
1494 x_error_msg => x_error_msg);
1495 l_rate_line_data.DELETE;
1496 l_rate_line_block_tbl.DELETE;
1497
1498 IF (x_status <> -1) THEN
1499 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1500 RETURN;
1501 END IF;
1502
1503 ADD_ATTRIBUTE(p_attribute_type => 'TL_RATE_BASIS',
1504 p_attribute_value => l_basis,
1505 p_attribute_value_to => NULL,
1506 p_context => FTE_RTG_GLOBALS.G_AX_TL_RATE_BASIS,
1507 p_comp_operator => NULL,
1508 p_linenum => l_linenum,
1509 p_process_id => l_process_id,
1510 p_line_number => p_line_number,
1511 x_error_msg => x_error_msg,
1512 x_status => x_status);
1513
1514 ADD_ATTRIBUTE(p_attribute_type => 'TL_RATE_TYPE',
1515 p_attribute_value => 'BASE_RATE',
1516 p_attribute_value_to => NULL,
1517 p_context => FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE,
1518 p_comp_operator => NULL,
1519 p_linenum => l_linenum,
1520 p_process_id => l_process_id,
1521 p_line_number => p_line_number,
1522 x_error_msg => x_error_msg,
1523 x_status => x_status);
1524
1525
1526 -- Attribute : VEHICLE TYPE (optional)
1527 IF (l_vehicle_type IS NOT NULL AND LENGTH(l_vehicle_type) > 0) THEN
1528 --Vehicle type is already in ID form
1529 ADD_ATTRIBUTE (p_attribute_type => 'TL_VEHICLE_TYPE',
1530 p_attribute_value => l_vehicle_type,
1531 p_attribute_value_to => NULL,
1532 p_context => FTE_RTG_GLOBALS.G_AX_VEHICLE,
1533 p_comp_operator => NULL,
1534 p_linenum => l_linenum,
1535 p_process_id => l_process_id,
1536 p_line_number => p_line_number,
1537 x_error_msg => x_error_msg,
1538 x_status => x_status);
1539
1540 END IF;
1541 --
1542 -- Insert a qualifier for the associated pricelist
1543 --
1544 IF (x_status <> -1) THEN
1545 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1546 RETURN;
1547 END IF;
1548
1549 l_count := l_count + 8;
1550 END LOOP;
1551
1552 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1553 EXCEPTION
1554 WHEN OTHERS THEN
1555 x_status := 2;
1556 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR in CREATE_MINCHARGE_MODIFIER',sqlerrm);
1557 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1558
1559 END CREATE_MINCHARGE_MODIFIER;
1560
1561 --_________________________________________________________________________________--
1562 --
1563 -- PROCEDURE: STORE_MIN_CHARGE
1564 --
1565 -- Purpose: Store Minimum Charges for the the rate chart.
1566 -- Each Rate Chart has a minimum charges for each of its
1567 -- rate bases.
1568 --
1569 -- Rate Chart Basis:<val>:Veh:<val>:Uom:<val>:Charge:<val>:Basis:....
1570 -- ---------- -------------------------------------------------------
1571 -- Rate -> B:WEIGHT:V:53FT:C:30:U:Lbs:B:DIST:...
1572 --
1573 -- PARAMETERS
1574 -- OUT
1575 -- x_status, the return status, -1 for success
1576 -- 2 for failure.
1577 -- x_error_msg, the corresponding error message,
1578 -- if any exception occurs during the process.
1579 --_________________________________________________________________________________--
1580
1581 PROCEDURE STORE_MIN_CHARGE(p_chart_name IN VARCHAR2,
1582 p_charge IN NUMBER,
1583 p_basis IN VARCHAR2,
1584 p_uom IN VARCHAR2,
1585 p_vehicle IN VARCHAR2,
1586 p_line_number IN NUMBER,
1587 x_error_msg OUT NOCOPY VARCHAR2,
1588 x_status OUT NOCOPY NUMBER ) IS
1589
1590
1591 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.STORE_MIN_CHARGE';
1592
1593 l_charge_str VARCHAR2(2000);
1594 l_str VARCHAR2(100);
1595
1596 BEGIN
1597 FTE_UTIL_PKG.Enter_Debug(l_module_name);
1598 x_status := -1;
1599
1600 --+
1601 -- Create the minimum charge string.
1602 --+
1603 l_str := 'B:' || p_basis || ':V:' || p_vehicle||':U:'|| p_uom ||':C:' || Fnd_Number.Number_To_Canonical(p_charge) || ':';
1604
1605 FOR i IN 1.. Chart_Names.COUNT LOOP
1606 IF (p_chart_name = Chart_Names(i)) THEN
1607 IF (NOT Chart_Min_Charges.EXISTS(i)) THEN
1608 --+
1609 -- store a new min charge string for the rate chart
1610 --+
1611 Chart_Min_Charges(i) := l_str;
1612 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1613 RETURN;
1614 ELSE
1615 --+
1616 -- Get the stored string from the min charges table
1617 --+
1618 l_charge_str := Chart_Min_Charges(i);
1619 END IF;
1620
1621 --+
1622 -- Validate the Rate Basis, Vehicle Type, Uom, Minimum Charge combination.
1623 --+
1624 IF (l_charge_str IS NOT NULL) THEN
1625
1626 --+
1627 -- Check the stored string for the same combination of basis, vehicle, uom, charge.
1628 -- If that combination exists, then
1629 -- a. If basis is NOT distance, we have a duplicate line (ERROR).
1630 -- b. If basis is distance, this is not an error because distance
1631 -- allows different distance types to have the same combination.
1632 --+
1633 IF (INSTR(l_charge_str, l_str) > 0) THEN
1634 IF (p_basis <> 'DISTANCE') THEN
1635 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_DUPLICATE_BASIS_LINE',
1636 p_tokens => STRINGARRAY('BASIS','VEHICLE'),
1637 p_values => STRINGARRAY(p_basis,p_vehicle));
1638 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
1639 p_module_name => l_module_name,
1640 p_category => 'D',
1641 p_line_number => p_line_number);
1642
1643 x_status := 2;
1644 END IF;
1645 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1646 RETURN;
1647 --
1648 -- Check the stored string for the same combination of basis, vehicle, uom
1649 -- If that combination exists, then
1650 -- a. If basis is NOT distance, we have a duplicate line (ERROR).
1651 -- b. If basis is distance, we have an error because the different
1652 -- distance types must have the same minimum charge.
1653 --
1654 ELSIF (INSTR(l_charge_str, 'B:'||p_basis||':V:'||p_vehicle||':U:'||p_uom) > 0) THEN
1655 IF (p_basis <> 'DISTANCE') THEN
1656 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_DUPLICATE_BASIS_LINE',
1657 p_tokens => STRINGARRAY('BASIS','VEHICLE'),
1658 p_values => STRINGARRAY(p_basis,p_vehicle));
1659 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
1660 p_module_name => l_module_name,
1661 p_category => 'D',
1662 p_line_number => p_line_number);
1663 x_status := 2;
1664 ELSE
1665 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_MULTIPLE_MIN_CHARGES',
1666 p_tokens => STRINGARRAY('BASIS','VEHICLE'),
1667 p_values => STRINGARRAY(p_basis,p_vehicle));
1668 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
1669 p_module_name => l_module_name,
1670 p_category => 'D',
1671 p_line_number => p_line_number);
1672 x_status := 2;
1673 END IF;
1674
1675 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1676 RETURN;
1677
1678 --
1679 -- Check for the same combination of basis and vehicle.
1680 -- If it exists, then we have an error because we have a
1681 -- similar preceding line (basis, vehicle) with different uom.
1682 --
1683 ELSIF (INSTR(l_charge_str, 'B:' || p_basis || ':V:'||p_vehicle) > 0) THEN
1684 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_MULTIPLE_UOMS',
1685 p_tokens => STRINGARRAY('BASIS','VEHICLE'),
1686 p_values => STRINGARRAY(p_basis,p_vehicle));
1687 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
1688 p_module_name => l_module_name,
1689 p_category => 'D',
1690 p_line_number => p_line_number);
1691 x_status := 2;
1692 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1693 RETURN;
1694 END IF;
1695 END IF;
1696
1697 l_charge_str := l_charge_str || l_str;
1698 Chart_Min_Charges(i) := l_charge_str;
1699
1700 END IF;
1701 END LOOP;
1702
1703 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1704
1705 EXCEPTION
1706 WHEN OTHERS THEN
1707 x_status := 2;
1708 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR in STORE_MIN_CHARGE', sqlerrm);
1709 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1710
1711 END STORE_MIN_CHARGE;
1712
1713 --______________________________________________________________________________________--
1714 -- --
1715 -- PROCEDURE: PROCESS_WKND_LAYOVR_CHARGES --
1716 -- --
1717 -- Purpose : week end lay over charge is a type os TL surcharge. --
1718 -- This is called from PROCESS_TL_SURCHARGES to process --
1719 -- PROCESS_WKND_LAYOVR_CHARGES, if the type of charge is 'B'. --
1720 -- --
1721 -- Parameters : --
1722 -- --
1723 -- IN p_process_id, --
1724 -- p_line_number --
1725 -- OUT --
1726 -- x_linenum --
1727 -- x_status, the return status, -1 for success --
1728 -- 2 for failure. --
1729 -- x_error_msg, the corresponding error meassge, --
1730 -- if any exception occurs during the process. --
1731 --______________________________________________________________________________________--
1732
1733 PROCEDURE PROCESS_WKND_LAYOVR_CHARGES(p_process_id IN NUMBER,
1734 x_linenum IN OUT NOCOPY NUMBER,
1735 p_line_number IN NUMBER,
1736 x_error_msg OUT NOCOPY VARCHAR2,
1737 x_status OUT NOCOPY NUMBER) IS
1738 l_subtype VARCHAR2(30);
1739 l_type VARCHAR2(30);
1740 l_break_type VARCHAR2(30);
1741 l_description VARCHAR2(300);
1742 l_context VARCHAR2(50);
1743 l_attribute_value VARCHAR2(50);
1744 l_attribute_type VARCHAR2(50);
1745
1746 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
1747 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
1748
1749 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.'||G_PKG_NAME||'.PROCESS_WKND_LAYOVR_CHARGES';
1750
1751 BEGIN
1752 FTE_UTIL_PKG.Enter_Debug(l_module_name);
1753 x_status := -1;
1754
1755 x_linenum := x_linenum + 1;
1756 l_description := 'Weekend Layover Charge: Line ' || x_linenum;
1757
1758 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
1759 FTE_UTIL_PKG.Write_LogFile(l_module_name, l_description);
1760 END IF;
1761
1762 l_type := 'ACCESSORIAL_SURCHARGE';
1763 l_break_type := 'POINT';
1764 l_subtype := FTE_RTG_GLOBALS.G_C_WEEKEND_LAYOVER_CH;
1765
1766 l_rate_line_data('ACTION') := 'ADD'; --G_ACTION;
1767 l_rate_line_data('LINE_NUMBER') := x_linenum;
1768 l_rate_line_data('DESCRIPTION') := l_description;
1769 l_rate_line_data('VOLUME_TYPE') := 'TOTAL_QUANTITY';
1770 l_rate_line_data('RATE_BREAK_TYPE'):= l_break_type;
1771 l_rate_line_data('SUBTYPE') := l_subtype;
1772 l_rate_line_data('TYPE') := l_type;
1773 l_rate_line_data('RATE_TYPE') := 'FIXED';
1774 l_rate_line_data('UOM') := g_unit_uom;
1775
1776 l_rate_line_block_tbl(1) := l_rate_line_data;
1777
1778 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
1779 p_block_data => l_rate_line_block_tbl,
1780 p_line_number => p_line_number,
1781 p_validate_column => FALSE,
1782 x_status => x_status,
1783 x_error_msg => x_error_msg);
1784 IF (x_status <> -1) THEN
1785 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error: ' || x_error_msg);
1786 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1787 RETURN;
1788 END IF;
1789
1790 --+
1791 -- add Rate Type Attribute
1792 --+
1793 l_attribute_type := 'TL_RATE_TYPE';
1794 l_context := FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE;
1795 l_attribute_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_STOP;
1796
1797 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
1798 p_attribute_value => l_attribute_value,
1799 p_attribute_value_to => NULL,
1800 p_context => l_context,
1801 p_linenum => x_linenum,
1802 p_comp_operator => '=',
1803 p_process_id => p_process_id,
1804 p_line_number => p_line_number,
1805 x_error_msg => x_error_msg,
1806 x_status => x_status);
1807
1808 IF (x_status <> -1) THEN
1809 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1810 RETURN;
1811 END IF;
1812
1813 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
1814 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Begin Create Breaks');
1815 END IF;
1816
1817 CREATE_BREAKS (p_break_charges => g_layovr_charges,
1818 p_break_limits => g_layovr_breaks,
1819 p_break_start => Fnd_Number.Canonical_To_Number('0'),
1820 p_break_gap => Fnd_Number.Canonical_To_Number('0'),
1821 p_rate_type => 'LUMPSUM',
1822 p_attribute_type => 'TL_WEEKEND_LAYOVER_MILEAGE',
1823 p_process_id => p_process_id,
1824 x_linenum => x_linenum,
1825 x_error_msg => x_error_msg,
1826 x_status => x_status);
1827
1828 g_layovr_breaks.DELETE;
1829 g_layovr_charges.DELETE;
1830
1831 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1832 EXCEPTION
1833 WHEN OTHERS THEN
1834 x_status := 2;
1835 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1836 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR in PROCESS_WKND_LAYOVR_CHARGES Error',sqlerrm);
1837
1838 END PROCESS_WKND_LAYOVR_CHARGES;
1839
1840 --_________________________________________________________________________________--
1841 --
1842 -- PROCEDURE: SUBMIT_TL_CHART
1843 --
1844 -- PURPOSE: Calls FTE_RATE_CHART_LOADER.SUBMIT_QP_PROCESS, to popupulate the interface
1845 -- tables and call corresponginf QP API. The values for headers,lines, attribs,
1846 -- qualifiers have already been stored through the validation procedures.
1847 -- For instance, FTE.VALIDATION_PKG.VALIDATE_RATE_CHART stores the header info
1848 -- after all validations for header in temporary pl/sql tables.
1849 -- Inspite of name, validation procedures stores the data in temp pl/sql tables.
1850 --
1851 -- PARAMETERS
1852 --
1853 -- OUT
1854 -- x_status , -1 return status,
1855 -- > 0, otherwise
1856 --_________________________________________________________________________________--
1857
1858 PROCEDURE SUBMIT_TL_CHART (x_status OUT NOCOPY NUMBER,
1859 x_error_msg OUT NOCOPY VARCHAR2) IS
1860
1861 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.SUBMIT_TL_CHART';
1862
1863 l_lane_loaded BOOLEAN;
1864 l_chart_name VARCHAR2(60);
1865 l_carrier_name VARCHAR2(60);
1866 l_process_id NUMBER;
1867 l_lane_ids NUMBER_TAB;
1868 l_lane_id NUMBER;
1869 l_list_header_id NUMBER;
1870 l_start_date VARCHAR2(20);
1871 l_end_date VARCHAR2(20);
1872 l_service_level VARCHAR2(30);
1873 l_chart_type VARCHAR2(30);
1874 l_count NUMBER;
1875 l_linenum NUMBER;
1876 l_lane_service VARCHAR2(30);
1877
1878 -- For Facility Modifiers
1879 l_currency VARCHAR2(30);
1880 l_prc_param_ids STRINGARRAY;
1881 l_prc_param_values STRINGARRAY;
1882 l_parameter_id NUMBER;
1883 l_rate_basis VARCHAR2(30);
1884 l_rate_basis_uom VARCHAR2(30);
1885 l_modifier_id NUMBER;
1886 l_currency_tbl FTE_RATE_CHART_PKG.LH_CURRENCY_CODE_TAB;
1887 l_name FTE_RATE_CHART_PKG.LH_NAME_TAB;
1888
1889 l_carrier_name_temp VARCHAR2(60);
1890 l_service_level_temp VARCHAR2(30);
1891 l_linenum_temp NUMBER;
1892 l_process_id_temp NUMBER;
1893
1894 p_line_number NUMBER := 0;
1895
1896 BEGIN
1897
1898 FTE_UTIL_PKG.Enter_Debug(l_module_name);
1899 x_status := -1;
1900
1901 IF (g_unit_uom IS NULL) THEN
1902
1903 g_unit_uom := GET_GLOBAL_UNIT_UOM (x_status, x_error_msg);
1904
1905 IF (x_status <> -1) THEN
1906 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'ERROR Getting Global UOM' || x_error_msg);
1907 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1908 RETURN;
1909 END IF;
1910
1911 END IF;
1912
1913 IF (g_layovr_breaks.exists(1)) THEN
1914 Get_Chart_Data(p_chart_name => g_chart_name,
1915 p_currency => l_currency,
1916 p_chart_type => l_chart_type,
1917 x_carrier_name => l_carrier_name_temp,
1918 x_service_level => l_service_level_temp,
1919 x_cur_line => l_linenum_temp,
1920 x_job_id => l_process_id_temp,
1921 p_line_number => null,
1922 x_error_msg => x_error_msg,
1923 x_status => x_status);
1924
1925 IF (l_carrier_name_temp IS NULL) THEN
1926 x_status := 2;
1927 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_NO_RC');
1928 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
1929 p_msg => x_error_msg,
1930 p_category => 'D');
1931 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1932 RETURN;
1933 END IF;
1934
1935 IF (g_debug_on) THEN
1936 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, 'l_name', g_chart_name);
1937 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, 'l_process_id', l_process_id_temp);
1938 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, 'l_service_level', l_service_level_temp);
1939 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, '--------Begin Process_Weekend_Layover_Charges');
1940 END IF;
1941
1942 Process_Wknd_Layovr_Charges (p_process_id => l_process_id_temp,
1943 x_linenum => l_linenum_temp,
1944 p_line_number => null,
1945 x_error_msg => x_error_msg,
1946 x_status => x_status );
1947 IF (g_debug_on) THEN
1948 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, '--------End Process_Weekend_Layover_Charges with status :' || x_status);
1949 END IF;
1950
1951 Set_Chart_Line(g_chart_name, l_linenum_temp, x_status);
1952
1953 IF (x_status <> -1) THEN
1954 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1955 RETURN;
1956 END IF;
1957
1958 END IF;
1959
1960
1961 IF (instr(g_chart_name, 'MOD_') > 0 AND g_action <> 'DELETE') THEN
1962 Get_Chart_Data(p_chart_name => g_chart_name,
1963 p_currency => l_currency,
1964 p_chart_type => l_chart_type,
1965 x_carrier_name => l_carrier_name_temp,
1966 x_service_level => l_service_level_temp,
1967 x_cur_line => l_linenum_temp,
1968 x_job_id => l_process_id_temp,
1969 p_line_number => null,
1970 x_error_msg => x_error_msg,
1971 x_status => x_status);
1972
1973 IF (g_debug_on) THEN
1974 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, 'action: ', g_action);
1975 FTE_UTIL_PKG.WRITE_LOGFILE(l_module_name, 'linenum: ', l_linenum_temp);
1976 END IF;
1977
1978 IF (l_linenum_temp = 0 OR x_status <> -1) THEN
1979 x_status := 2;
1980 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_UI_NO_LINES',
1981 p_tokens => STRINGARRAY('TYPE'),
1982 p_values => STRINGARRAY(FTE_UTIL_PKG.GET_MSG('FTE_TL_ACCESSORIALS')));
1983 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
1984 p_msg => x_error_msg,
1985 p_category => 'D');
1986 FTE_UTIL_PKG.Exit_Debug(l_module_name);
1987 RETURN;
1988 END IF;
1989 END IF;
1990
1991 --+
1992 -- Process any remaining weekday layover charges.
1993 --+
1994 IF (g_layovr_breaks.COUNT > 0) THEN
1995
1996 GET_CHART_DATA( p_chart_name => g_chart_name,
1997 p_currency => l_currency,
1998 p_chart_type => l_chart_type,
1999 x_carrier_name => l_carrier_name,
2000 x_service_level => l_service_level,
2001 x_cur_line => l_linenum,
2002 x_job_id => l_process_id,
2003 p_line_number => p_line_number,
2004 x_error_msg => x_error_msg,
2005 x_status => x_status);
2006
2007 IF (l_linenum = 0 OR x_status <> -1) THEN
2008 x_status := 2;
2009 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'ERROR BREAK: No Rate Chart Name Previously Defined');
2010 END IF;
2011
2012 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
2013 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_name ', g_chart_name);
2014 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_process_id ', l_process_id);
2015 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_service_level', l_service_level);
2016 END IF;
2017
2018 PROCESS_WKND_LAYOVR_CHARGES ( p_process_id => l_process_id,
2019 x_linenum => l_linenum,
2020 p_line_number => p_line_number,
2021 x_error_msg => x_error_msg,
2022 x_status => x_status );
2023 IF (x_status <> -1) THEN
2024 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Returned with Error from PROCESS_WKND_LAYOVR_CHARGES',x_error_msg );
2025 END IF;
2026
2027 END IF;
2028
2029 --+
2030 -- For all previously created rate charts, we need to create a minimum charge
2031 -- modifier for the rate chart, if minimum charges exist.
2032 --+
2033
2034 l_count := Chart_Names.COUNT;
2035 FOR i IN 1..l_count LOOP
2036 IF (Chart_Min_Charges.EXISTS(i)) THEN
2037 CREATE_MINCHARGE_MODIFIER(p_chart_name => Chart_Names(i),
2038 p_service_level => Chart_Service_Levels(i),
2039 p_carrier_name => Chart_Carriers(i),
2040 p_currency => Chart_Currencies(i),
2041 p_charge_data => Chart_Min_Charges(i),
2042 x_mod_name => l_chart_name,
2043 p_line_number => p_line_number,
2044 x_status => x_status,
2045 x_error_msg => x_error_msg);
2046
2047 IF (x_status <> -1) THEN
2048 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Returned Error from CREATE_MINCHARGE_MODIFIER', x_error_msg );
2049 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2050 RETURN;
2051 ELSE
2052 Link_ChartNames(Link_ChartNames.COUNT+1) := Chart_Names(i);
2053 Link_ModifierNames(Link_ModifierNames.COUNT+1) := l_chart_name;
2054 END IF;
2055 END IF;
2056 END LOOP;
2057
2058 --+
2059 -- Now Insert All rate chart data into the QP_INTERFACE tables.
2060 -- Insert_qp_interface tables of rate chart package should not call QP_MOD_LOADER_PUB.LOAD_MOD_LIST(p
2061 -- depending on some parameters.
2062 --+
2063 FTE_RATE_CHART_LOADER.SUBMIT_QP_PROCESS(p_qp_call => FALSE,
2064 x_error_msg => x_error_msg,
2065 x_status => x_status);
2066
2067 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
2068 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Return Status from FTE_RATE_CHART_LOADER.SUBMIT_QP_PROCESS', x_status);
2069 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Return Message from FTE_RATE_CHART_LOADER.SUBMIT_QP_PROCESS', x_error_msg);
2070 END IF;
2071
2072 IF (x_status <> -1) THEN
2073 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Return status from SUBMIT_QP_PROCESS', x_status );
2074 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2075 RETURN;
2076 END IF;
2077
2078 FND_PROFILE.PUT('QP_PRICING_TRANSACTION_ENTITY', 'LOGSTX');
2079 FND_PROFILE.PUT('QP_SOURCE_SYSTEM_CODE', 'FTE');
2080
2081 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
2082 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Chart_Process_Ids.COUNT ', Chart_Process_Ids.COUNT);
2083 END IF;
2084
2085 FOR i IN 1..Chart_Process_Ids.COUNT LOOP
2086 l_chart_name := Chart_Names(i);
2087 l_carrier_name := Chart_Carriers(i);
2088 l_process_id := Chart_Process_Ids(i);
2089 l_service_level := Chart_Service_Levels(i);
2090 l_chart_type := Chart_Types(i);
2091 l_currency := Chart_Currencies(i);
2092
2093 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
2094 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_chart_name ', l_chart_name);
2095 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_carrier_name ', l_carrier_name);
2096 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_process_id ', l_process_id);
2097 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_service_level', l_service_level);
2098 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_chart_type ', l_chart_type);
2099 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_currency ', l_currency);
2100 END IF;
2101
2102 IF (l_chart_type in('TL_RATE_CHART', 'FAC_RATE_CHART')) THEN
2103 l_name(1) := l_chart_name;
2104 l_currency_tbl(1) := l_currency;
2105 FTE_RATE_CHART_PKG.QP_API_CALL(p_chart_type => l_chart_type,
2106 p_process_id => l_process_id,
2107 p_name => l_name,
2108 p_currency => l_currency_tbl,
2109 x_status => x_status,
2110 x_error_msg => x_error_msg);
2111
2112 IF (x_status <> -1) THEN
2113 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2114 RETURN;
2115 ELSE
2116
2117 --+
2118 -- We need to link the rate chart to any modifiers that
2119 -- may be attached to it, before we upload the modifiers.
2120 -- (TL_RATE_CHART => MIN_MODIFIER), (FAC_RATE_CHART => FAC_MODIFIER)
2121 --+
2122
2123 LINK_RC_MODIFIERS(p_chart_name => l_chart_name,
2124 x_error_msg => x_error_msg,
2125 x_status => x_status);
2126
2127 IF (x_status <> -1) THEN
2128 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg);
2129 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2130 RETURN;
2131 END IF;
2132 END IF;
2133
2134 ELSIF (l_chart_type IN ('TL_MODIFIER', 'FAC_MODIFIER', 'FTE_MODIFIER', 'MIN_MODIFIER')) THEN
2135 l_name(1) := l_chart_name;
2136 l_currency_tbl(1) := l_currency;
2137 FTE_RATE_CHART_PKG.QP_API_CALL(p_chart_type => l_chart_type,
2138 p_process_id => l_process_id,
2139 p_name => l_name,
2140 p_currency => l_currency_tbl,
2141 x_status => x_status,
2142 x_error_msg => x_error_msg);
2143
2144 IF (x_status <> -1) THEN
2145 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2146 RETURN;
2147 END IF;
2148
2149 ELSE
2150 x_status := 2;
2151 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Unknown Chart Type ' || l_chart_type);
2152 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Could Not Load The Rate Chart ' || l_chart_name);
2153 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2154 RETURN;
2155 END IF;
2156
2157 IF (i = 1) THEN
2158 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
2159 p_msg => 'FTE_RATECHARTS_LOADED',
2160 p_category => NULL);
2161 END IF;
2162
2163 FTE_UTIL_PKG.WRITE_OUTFILE(p_module_name => l_module_name,
2164 p_msg => l_chart_name,
2165 p_category => NULL);
2166
2167 IF (l_chart_type = 'TL_RATE_CHART') THEN
2168
2169 --+
2170 -- Update any lanes associated with this loaded rate chart.
2171 --+
2172 l_lane_loaded := IS_LANE_LOADED( p_chart_name => l_chart_name,
2173 p_carrier_name => l_carrier_name,
2174 p_service_level => l_service_level,
2175 p_line_number => p_line_number,
2176 x_lane_ids => l_lane_ids,
2177 x_error_msg => x_error_msg,
2178 x_status => x_status);
2179
2180 IF (x_status <> -1) THEN
2181 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error In Lane Status');
2182 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2183 RETURN;
2184 END IF;
2185
2186 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
2187 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Found ' || l_lane_ids.COUNT || ' lanes matching rate chart');
2188 END IF;
2189
2190 IF (l_lane_loaded) THEN
2191
2192 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
2193 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Updating Existing Lanes with Rate Chart Info');
2194 END IF;
2195
2196 BEGIN
2197
2198 SELECT
2199 lh.list_header_id,
2200 b.start_date_active,
2201 b.end_date_active
2202 INTO
2203 l_list_header_id,
2204 l_start_date,
2205 l_end_date
2206 FROM
2207 qp_list_headers_tl lh,
2208 qp_list_headers_b b,
2209 qp_qualifiers q
2210 WHERE
2211 lh.list_header_id = b.list_header_id AND
2212 lh.list_header_id = q.list_header_id AND
2213 q.qualifier_context = 'PARTY' AND
2214 q.qualifier_attr_value = Fnd_Number.Number_To_Canonical(g_carrier_id) AND
2215 lh.name = l_chart_name AND
2216 lh.language = userenv('LANG');
2217
2218 EXCEPTION
2219 WHEN NO_DATA_FOUND THEN
2220 l_list_header_id := NULL;
2221 x_status := 2;
2222 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_PRICE_NAME_MISSING');
2223 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
2224 p_module_name => l_module_name,
2225 p_category => 'D',
2226 p_line_number => p_line_number);
2227 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2228 RETURN;
2229 END;
2230
2231 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
2232 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_list_header_id', l_list_header_id);
2233 END IF;
2234
2235 --+
2236 -- Update the lane with the rate chart ID:
2237 --+
2238 FOR j IN 1..l_lane_ids.COUNT LOOP
2239 BEGIN
2240 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
2241 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'lane id('|| j|| ')',l_lane_ids(j));
2242 END IF;
2243
2244 INSERT INTO FTE_LANE_RATE_CHARTS (LANE_ID,
2245 LIST_HEADER_ID,
2246 START_DATE_ACTIVE,
2247 END_DATE_ACTIVE,
2248 CREATED_BY,
2249 CREATION_DATE,
2250 LAST_UPDATED_BY,
2251 LAST_UPDATE_DATE,
2252 LAST_UPDATE_LOGIN)
2253 VALUES (l_lane_ids(j),
2254 l_list_header_id,
2255 l_start_date,
2256 l_end_date,
2257 FND_GLOBAL.USER_ID,
2258 G_CURDATE,
2259 FND_GLOBAL.USER_ID,
2260 G_CURDATE,
2261 FND_GLOBAL.USER_ID);
2262 EXCEPTION
2263 WHEN OTHERS THEN
2264 x_status := 2;
2265 FTE_UTIL_PKG.Write_LogFile(l_module_name, sqlerrm);
2266 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2267 END;
2268
2269 BEGIN
2270 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
2271 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Updating Fte_Lanes with service level ', l_service_level);
2272 END IF;
2273
2274 UPDATE fte_lanes
2275 SET service_detail_flag ='Y',
2276 service_type_code = l_service_level,
2277 lane_type = NULL,
2278 LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
2279 LAST_UPDATE_DATE = SYSDATE,
2280 LAST_UPDATE_LOGIN = FND_GLOBAL.USER_ID
2281 WHERE lane_id = l_lane_ids(j);
2282
2283 EXCEPTION
2284 WHEN OTHERS THEN
2285 x_status := 2;
2286 FTE_UTIL_PKG.Write_LogFile(l_module_name, sqlerrm);
2287 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2288 END;
2289 END LOOP;
2290
2291 END IF;
2292
2293 ELSIF (l_chart_type = 'FAC_MODIFIER') THEN
2294
2295 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
2296 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Postprocessing Facility Modifier');
2297 END IF;
2298
2299 BEGIN
2300
2301 SELECT
2302 modc.list_header_id,
2303 Fnd_Number.Canonical_To_Number(qual.qualifier_attr_value)
2304 INTO
2305 l_modifier_id,
2306 l_list_header_id
2307 FROM
2308 qp_list_headers_tl modc,
2309 qp_list_headers_b b,
2310 qp_qualifiers qual
2311 WHERE
2312 modc.list_header_id = b.list_header_id AND
2313 qual.list_header_id = modc.list_header_id AND
2314 qual.qualifier_context = 'MODLIST' AND
2315 qual.qualifier_attribute = 'QUALIFIER_ATTRIBUTE4' AND
2316 modc.name = l_chart_name AND
2317 modc.language = userenv('LANG');
2318
2319 EXCEPTION
2320
2321 WHEN NO_DATA_FOUND THEN
2322 l_list_header_id := NULL;
2323 x_status := 2;
2324 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_PRICELIST_INVALID');
2325 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
2326 p_module_name => l_module_name,
2327 p_category => 'D',
2328 p_line_number => p_line_number);
2329 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2330 RETURN;
2331 END;
2332
2333 GET_FACILITY_RATE_BASIS(p_chart_name => l_chart_name,
2334 x_rate_basis => l_rate_basis,
2335 x_uom => l_rate_basis_uom,
2336 x_status => x_status,
2337 x_error_msg => x_error_msg);
2338
2339 IF (x_status <> -1) THEN
2340 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error In Get_Facility_Rate_Basis', x_error_msg);
2341 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2342 RETURN;
2343 END IF;
2344
2345 l_prc_param_ids := STRINGARRAY(57, 58, 59, 60);
2346 l_prc_param_values := STRINGARRAY(l_rate_basis, l_rate_basis_uom, l_list_header_id, l_currency);
2347
2348 --+
2349 -- Insert Facility Data into FTE_PRC_PARAMETERS
2350 --+
2351 BEGIN
2352 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
2353 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Inserting into FTE_PRC_PARAMETERS');
2354 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_chart_name ', l_chart_name);
2355 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_basis ', l_rate_basis);
2356 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_basis_uom', l_rate_basis_uom);
2357 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_currency ', l_currency);
2358 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_modifier_id ', l_modifier_id);
2359 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_list_header_id', l_list_header_id);
2360 END IF;
2361
2362 FORALL m IN 1..l_prc_param_ids.COUNT
2363 INSERT INTO FTE_PRC_PARAMETERS( PARAMETER_INSTANCE_ID,
2364 PARAMETER_ID,
2365 VALUE_FROM,
2366 UOM_CODE,
2367 CURRENCY_CODE,
2368 CREATION_DATE,
2369 CREATED_BY,
2370 LAST_UPDATE_DATE,
2371 LAST_UPDATED_BY,
2372 LIST_HEADER_ID)
2373 VALUES( fte_prc_parameters_s.NEXTVAL,
2374 l_prc_param_ids(m),
2375 l_prc_param_values(m),
2376 l_rate_basis_uom,
2377 l_currency,
2378 sysdate,
2379 FND_GLOBAL.User_Id,
2380 sysdate,
2381 FND_GLOBAL.User_Id,
2382 l_modifier_id);
2383 EXCEPTION
2384 WHEN OTHERS THEN
2385 x_status := 2;
2386 x_error_msg := sqlerrm;
2387 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXP. ERROR Inserting Prc_Parameters', sqlerrm);
2388 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2389 END;
2390 END IF; -- End Processing Different Chart Types
2391
2392 END LOOP;
2393
2394
2395 RESET_ALL;
2396 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2397
2398 EXCEPTION
2399 WHEN OTHERS THEN
2400 x_status := 2;
2401 x_error_msg := sqlerrm;
2402 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXP ERROR in SUBMIT_TL_CHART', sqlerrm);
2403 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2404
2405 END SUBMIT_TL_CHART;
2406
2407 --_________________________________________________________________________________--
2408 --
2409 -- PROCEDURE: PROCESS_FUEL_CHARGES
2410 --
2411 -- PURPOSE To processs the Fuel charges in the file. called by PROCESS_TL_SURCHAGRES.
2412 --
2413 -- PARAMETERS
2414 -- IN
2415 -- p_charge
2416 -- p_process_id
2417 -- p_line_number
2418 --
2419 -- OUT
2420 -- x_status, the return status, -1 for success
2421 -- 2 for failure.
2422 -- x_error_msg, the corresponding error message,
2423 -- if any exception occurs during the process.
2424 --_________________________________________________________________________________--
2425
2426 PROCEDURE PROCESS_FUEL_CHARGES(p_charge IN NUMBER,
2427 p_process_id IN NUMBER,
2428 p_line_number IN NUMBER,
2429 x_linenum IN OUT NOCOPY NUMBER,
2430 x_error_msg OUT NOCOPY VARCHAR2,
2431 x_status OUT NOCOPY NUMBER) IS
2432
2433 l_description VARCHAR2(300);
2434 l_type VARCHAR2(30);
2435 l_subtype VARCHAR2(50);
2436 l_attribute_value VARCHAR2(50);
2437 l_attribute_type VARCHAR2(50);
2438 l_context VARCHAR2(30);
2439
2440 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
2441 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
2442
2443 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.'||G_PKG_NAME||'.PROCESS_FUEL_CHARGES';
2444
2445 BEGIN
2446 FTE_UTIL_PKG.Enter_Debug(l_module_name);
2447 x_status := -1;
2448
2449 x_linenum := x_linenum + 1;
2450 l_description := 'Fuel Surcharge Line ' || x_linenum;
2451
2452 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
2453 FTE_UTIL_PKG.Write_LogFile(l_module_name, l_description);
2454 END IF;
2455
2456 l_type := 'ACCESSORIAL_SURCHARGE';
2457 l_subtype := FTE_RTG_GLOBALS.G_C_FUEL_CH;
2458
2459 l_rate_line_data('ACTION') := G_ACTION;
2460 l_rate_line_data('LINE_NUMBER') := x_linenum;
2461 l_rate_line_data('DESCRIPTION') := l_description;
2462 l_rate_line_data('VOLUME_TYPE') := 'TOTAL_QUANTITY';
2463 l_rate_line_data('SUBTYPE') := l_subtype;
2464 l_rate_line_data('TYPE') := l_type;
2465 l_rate_line_data('PERCENTAGE') := Fnd_Number.Number_To_Canonical(p_charge);
2466 l_rate_line_data('UOM') := g_unit_uom;
2467
2468 l_rate_line_block_tbl(1) := l_rate_line_data;
2469
2470 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
2471 p_block_data => l_rate_line_block_tbl,
2472 p_line_number => p_line_number,
2473 p_validate_column => FALSE,
2474 x_status => x_status,
2475 x_error_msg => x_error_msg);
2476
2477 l_rate_line_data.DELETE;
2478 l_rate_line_block_tbl.DELETE;
2479
2480 IF (x_status <> -1) THEN
2481 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg);
2482 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2483 RETURN;
2484 END IF;
2485
2486 l_context := FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE;
2487 l_attribute_type := 'TL_RATE_TYPE';
2488 l_attribute_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_LOAD;
2489
2490 ADD_ATTRIBUTE(p_attribute_type => l_attribute_type,
2491 p_attribute_value => l_attribute_value,
2492 p_attribute_value_to => NULL,
2493 p_context => l_context,
2494 p_comp_operator => NULL,
2495 p_linenum => x_linenum,
2496 p_process_id => p_process_id,
2497 p_line_number => p_line_number,
2498 x_error_msg => x_error_msg,
2499 x_status => x_status);
2500
2501 IF (x_status <> -1) THEN
2502 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error: ' || x_error_msg);
2503 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2504 RETURN;
2505 END IF;
2506
2507 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2508 EXCEPTION
2509 WHEN OTHERS THEN
2510 x_status := 2;
2511 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2512 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR in PROCESS_FUEL_CHARGES', sqlerrm);
2513
2514 END PROCESS_FUEL_CHARGES;
2515
2516 --_________________________________________________________________________________--
2517 --
2518 -- PROCEDURE: PROCESS_REGION_CHARGES
2519 --
2520 -- Purpose
2521 --
2522 -- IN Parameters
2523 --
2524 -- OUT
2525 -- x_status, the return status, -1 for success
2526 -- 2 for failure.
2527 -- x_error_msg, the corresponding error message,
2528 -- if any exception occurs during the process.
2529 --_________________________________________________________________________________--
2530
2531 PROCEDURE PROCESS_REGION_CHARGES(p_region_type IN VARCHAR2,
2532 p_region_info IN WSH_REGIONS_SEARCH_PKG.REGION_REC,
2533 p_charge IN NUMBER,
2534 p_process_id IN NUMBER,
2535 p_line_number IN NUMBER,
2536 p_region_id IN NUMBER,
2537 x_linenum IN OUT NOCOPY NUMBER,
2538 x_error_msg OUT NOCOPY VARCHAR2,
2539 x_status OUT NOCOPY NUMBER) IS
2540 l_description VARCHAR2(300);
2541 l_zone_id NUMBER;
2542 l_type VARCHAR2(30);
2543 l_subtype VARCHAR2(50);
2544 l_attribute_value VARCHAR2(50);
2545 l_attribute_type VARCHAR2(50);
2546 l_context VARCHAR2(30);
2547
2548 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
2549 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
2550
2551 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.'||G_PKG_NAME||'.PROCESS_REGION_CHARGES';
2552
2553 BEGIN
2554 FTE_UTIL_PKG.Enter_Debug(l_module_name);
2555 x_status := -1;
2556
2557 IF (p_region_id IS NOT NULL) THEN
2558 l_zone_id := p_region_id;
2559 ELSE
2560 l_zone_id := FTE_REGION_ZONE_LOADER.GET_REGION_ID(p_region_info => p_region_info);
2561 END IF;
2562
2563 IF (l_zone_id IS NULL OR l_zone_id = -1) THEN
2564 x_status := 2;
2565 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_REGION_NOT_FOUND');
2566 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
2567 p_module_name => l_module_name,
2568 p_category => 'D',
2569 p_line_number => p_line_number);
2570 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2571 RETURN;
2572 END IF;
2573
2574 x_linenum := x_linenum + 1;
2575 l_description := p_region_type || ' Surcharge Line ' || x_linenum;
2576
2577 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
2578 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Zone Id', l_zone_id);
2579 FTE_UTIL_PKG.Write_LogFile(l_module_name, l_description);
2580 END IF;
2581
2582
2583 l_type := 'ACCESSORIAL_SURCHARGE';
2584
2585 IF (p_region_type = 'ORIGIN') THEN
2586 l_subtype := FTE_RTG_GLOBALS.G_C_ORIGIN_SURCHRG;
2587 ELSIF (p_region_type = 'DESTINATION') THEN
2588 l_subtype := FTE_RTG_GLOBALS.G_C_DESTINATION_SURCHRG;
2589 END IF;
2590
2591 l_rate_line_data('ACTION') := G_ACTION;
2592 l_rate_line_data('LINE_NUMBER'):= x_linenum;
2593 l_rate_line_data('DESCRIPTION'):= l_description;
2594 l_rate_line_data('VOLUME_TYPE'):= 'TOTAL_QUANTITY';
2595 l_rate_line_data('SUBTYPE') := l_subtype;
2596 l_rate_line_data('TYPE') := l_type;
2597 l_rate_line_data('FIXED_RATE') := Fnd_Number.Number_To_Canonical(p_charge);
2598 l_rate_line_data('UOM') := g_unit_uom;
2599
2600 l_rate_line_block_tbl(1) := l_rate_line_data;
2601
2602 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
2603 p_block_data => l_rate_line_block_tbl,
2604 p_line_number => p_line_number,
2605 p_validate_column => FALSE,
2606 x_status => x_status,
2607 x_error_msg => x_error_msg);
2608 l_rate_line_data.DELETE;
2609 l_rate_line_block_tbl.DELETE;
2610
2611 IF (x_status <> -1) THEN
2612 FTE_UTIL_PKG.Write_LogFile(l_module_name,x_error_msg);
2613 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2614 RETURN;
2615 END IF;
2616
2617 l_context := FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE;
2618 l_attribute_type := 'TL_RATE_TYPE';
2619 l_attribute_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_STOP;
2620
2621 ADD_ATTRIBUTE(p_attribute_type => l_attribute_type,
2622 p_attribute_value => l_attribute_value,
2623 p_attribute_value_to => NULL,
2624 p_context => l_context,
2625 p_comp_operator => NULL,
2626 p_linenum => x_linenum,
2627 p_process_id => p_process_id,
2628 p_line_number => p_line_number,
2629 x_error_msg => x_error_msg,
2630 x_status => x_status);
2631
2632 IF (x_status <> -1) THEN
2633 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error: ' || x_error_msg);
2634 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2635 RETURN;
2636 END IF;
2637
2638 -- Add Region Attribute
2639 l_attribute_type := p_region_type || '_ZONE_ID';
2640
2641 IF (p_region_type = 'ORIGIN') THEN
2642 l_context := FTE_RTG_GLOBALS.G_AX_ORIGIN_ZONE;
2643 ELSIF (p_region_type = 'DESTINATION') THEN
2644 l_context := FTE_RTG_GLOBALS.G_AX_DESTINATION_ZONE;
2645 END IF;
2646
2647 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
2648 p_attribute_value => Fnd_Number.Number_To_Canonical(l_zone_id),
2649 p_attribute_value_to => NULL,
2650 p_context => l_context,
2651 p_comp_operator => NULL,
2652 p_linenum => x_linenum,
2653 p_process_id => p_process_id,
2654 p_line_number => p_line_number,
2655 x_error_msg => x_error_msg,
2656 x_status => x_status);
2657
2658 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2659 EXCEPTION
2660 WHEN OTHERS THEN
2661 x_status := 2;
2662 x_error_msg := sqlerrm;
2663 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2664 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXP. ERROR in Process_Region_Charges',sqlerrm);
2665
2666 END PROCESS_REGION_CHARGES;
2667
2668 --_________________________________________________________________________________--
2669 --
2670 -- PROCEDURE: PROCESS_STOPOFF_CHARGES
2671 --
2672 -- PURPOSE . Processing for stop off charges is being done here.
2673 -- Called by PROCESS_CHART_CHARGES.
2674 --
2675 -- Parameters
2676 --_________________________________________________________________________________--
2677
2678 PROCEDURE PROCESS_STOPOFF_CHARGES(p_break_charges IN STRINGARRAY,
2679 p_num_free_stops IN NUMBER,
2680 p_process_id IN NUMBER,
2681 x_linenum IN OUT NOCOPY NUMBER,
2682 p_line_number IN NUMBER,
2683 x_error_msg OUT NOCOPY VARCHAR2,
2684 x_status OUT NOCOPY NUMBER) IS
2685
2686 l_break_charges STRINGARRAY;
2687 l_break_limits STRINGARRAY := STRINGARRAY();
2688 l_subtype VARCHAR2(30);
2689 l_type VARCHAR2(30);
2690 l_rate_type VARCHAR2(30);
2691 l_break_type VARCHAR2(30);
2692 l_break_start NUMBER;
2693 l_description VARCHAR2(300);
2694 l_context VARCHAR2(50);
2695 l_attribute_value VARCHAR2(50);
2696 l_attribute_type VARCHAR2(50);
2697
2698 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
2699 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
2700
2701 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.PROCESS_STOPOFF_CHARGES';
2702
2703 BEGIN
2704 FTE_UTIL_PKG.Enter_Debug(l_module_name);
2705 x_status := -1;
2706
2707 l_break_charges := p_break_charges;
2708
2709 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
2710 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_num_free_stops', p_num_free_stops);
2711 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_process_id ', p_process_id);
2712 FTE_UTIL_PKG.Write_LogFile(l_module_name,'x_linenum ', x_linenum);
2713 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_line_number ', p_line_number);
2714
2715 FOR i IN 1..l_break_charges.COUNT LOOP
2716 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'p_break_charges(' || i || ')', l_break_charges(i));
2717 END LOOP;
2718
2719 END IF;
2720
2721 --+
2722 -- Remove any NULL breaks
2723 -- If any of the stop off charges are NULL, we delete the remaining breaks are also.
2724 -- But, check additional stop off charges, which is the last element in the STRINGARRAY.
2725 --+
2726 FOR i IN 1..l_break_charges.COUNT LOOP
2727
2728 IF (l_break_charges(i) IS NULL) THEN
2729 IF (l_break_charges(l_break_charges.COUNT) IS NULL) THEN
2730 l_break_charges.DELETE(i, l_break_charges.COUNT);
2731 ELSE
2732 l_break_charges(i) := l_break_charges(l_break_charges.COUNT);
2733 l_break_charges.DELETE(i+1, l_break_charges.COUNT);
2734 END IF;
2735 EXIT;
2736 END IF;
2737
2738 END LOOP;
2739
2740 IF (p_num_free_stops IS NULL OR p_num_free_stops <= 0) THEN
2741 l_break_charges.DELETE(1);
2742 l_break_start := 1;
2743 ELSE
2744 l_break_start := p_num_free_stops;
2745 END IF;
2746
2747 IF (l_break_charges.COUNT > 0) THEN
2748 x_linenum := x_linenum + 1;
2749 l_description := 'Stop Off Charge: Line ' || x_linenum;
2750
2751 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
2752 FTE_UTIL_PKG.Write_LogFile(l_module_name, l_description, l_description);
2753 END IF;
2754
2755 l_type := 'ACCESSORIAL_SURCHARGE';
2756 l_rate_type := 'LUMPSUM';
2757 l_break_type := 'RANGE';
2758 l_subtype := FTE_RTG_GLOBALS.G_C_STOP_OFF_CH;
2759
2760 l_rate_line_data('ACTION') := G_ACTION;
2761 l_rate_line_data('LINE_NUMBER') := x_linenum;
2762 l_rate_line_data('DESCRIPTION') := l_description;
2763 l_rate_line_data('VOLUME_TYPE') := 'TOTAL_QUANTITY';
2764 l_rate_line_data('RATE_BREAK_TYPE'):= l_break_type;
2765 l_rate_line_data('SUBTYPE') := l_subtype;
2766 l_rate_line_data('TYPE') := l_type;
2767 l_rate_line_data('RATE_TYPE') := l_rate_type;
2768 l_rate_line_data('UOM') := g_unit_uom;
2769
2770 l_rate_line_block_tbl(1) := l_rate_line_data;
2771
2772 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
2773 p_block_data => l_rate_line_block_tbl,
2774 p_line_number => p_line_number,
2775 p_validate_column => FALSE,
2776 x_status => x_status,
2777 x_error_msg => x_error_msg);
2778 l_rate_line_data.DELETE;
2779 l_rate_line_block_tbl.DELETE;
2780
2781 IF (x_status <> -1) THEN
2782 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error: ' || x_error_msg);
2783 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2784 RETURN;
2785 END IF;
2786
2787 --+
2788 -- Add Rate Type Attribute
2789 --+
2790 l_attribute_type := 'TL_RATE_TYPE';
2791 l_context := FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE;
2792 l_attribute_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_LOAD;
2793
2794 ADD_ATTRIBUTE(p_attribute_type => l_attribute_type,
2795 p_attribute_value => l_attribute_value,
2796 p_attribute_value_to => NULL,
2797 p_context => l_context,
2798 p_linenum => x_linenum,
2799 p_comp_operator => '=',
2800 p_process_id => p_process_id,
2801 p_line_number => p_line_number,
2802 x_error_msg => x_error_msg,
2803 x_status => x_status);
2804
2805 IF (x_status <> -1) THEN
2806 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error', x_error_msg);
2807 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2808 RETURN;
2809 END IF;
2810
2811 --+
2812 -- create the break limits
2813 --+
2814 l_break_limits.EXTEND;
2815 l_break_limits(1) := Fnd_Number.Number_To_Canonical(l_break_start);
2816
2817 FOR i IN 2..l_break_charges.COUNT LOOP
2818 l_break_limits.EXTEND;
2819 l_break_limits(i) := Fnd_Number.Number_To_Canonical(Fnd_Number.Canonical_To_Number(l_break_limits(i-1)) + 1);
2820 END LOOP;
2821
2822 l_break_limits(l_break_limits.COUNT) := g_max_number;
2823
2824 --+
2825 -- Create Breaks
2826 --+
2827 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
2828 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Begin Create Breaks');
2829 END IF;
2830
2831 CREATE_BREAKS(p_break_charges => l_break_charges,
2832 p_break_limits => l_break_limits,
2833 p_break_start => Fnd_Number.Canonical_To_Number('0'),
2834 p_break_gap => Fnd_Number.Canonical_To_Number('0'),
2835 p_rate_type => l_rate_type,
2836 p_attribute_type => 'TL_NUM_STOPS',
2837 p_process_id => p_process_id,
2838 x_linenum => x_linenum,
2839 x_error_msg => x_error_msg,
2840 x_status => x_status);
2841 END IF;
2842
2843 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2844 EXCEPTION
2845 WHEN OTHERS THEN
2846 x_status := 2;
2847 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Unexpected Error in PROCESS_STOP_OFF_CHARGES',sqlerrm);
2848 FTE_UTIL_PKG.Exit_Debug(l_module_name);
2849
2850 END PROCESS_STOPOFF_CHARGES;
2851
2852 --_________________________________________________________________________________--
2853 --
2854 -- PROCEDURE: PROCESS_LOADING_CHARGES
2855 --
2856 -- Purpose
2857 --
2858 -- PARAMETERS
2859 -- OUT
2860 -- x_status, the return status, -1 for success
2861 -- 2 for failure.
2862 -- x_error_msg, the corresponding error message,
2863 -- if any exception occurs during the process.
2864 --
2865 --_________________________________________________________________________________--
2866
2867 PROCEDURE PROCESS_LOADING_CHARGES(p_min_charge IN NUMBER,
2868 p_charge IN NUMBER,
2869 p_load_type IN VARCHAR2,
2870 p_basis IN VARCHAR2,
2871 p_basis_uom IN VARCHAR2,
2872 p_process_id IN NUMBER,
2873 x_linenum IN OUT NOCOPY NUMBER,
2874 p_line_number IN NUMBER,
2875 x_error_msg OUT NOCOPY VARCHAR2,
2876 x_status OUT NOCOPY NUMBER) IS
2877 l_subtype VARCHAR2(30);
2878 l_subtype_min VARCHAR2(30);
2879 l_subtype2 VARCHAR2(30);
2880 l_type VARCHAR2(30);
2881 l_rate NUMBER;
2882 l_rate_type VARCHAR2(30);
2883 l_break_type VARCHAR2(30);
2884 l_description VARCHAR2(300);
2885 l_context VARCHAR2(50);
2886 l_flat_rate BOOLEAN := FALSE;
2887 l_min_break BOOLEAN := FALSE;
2888
2889 -- attributes
2890 l_attr1_type VARCHAR2(50);
2891 l_attr2_type VARCHAR2(50);
2892 l_attr3_type VARCHAR2(50);
2893 l_attr1_value VARCHAR2(50);
2894 l_attr2_value VARCHAR2(50);
2895 l_attr3_value VARCHAR2(50);
2896 l_attr1_context VARCHAR2(50);
2897 l_attr2_context VARCHAR2(50);
2898 l_attr3_context VARCHAR2(50);
2899 l_attr_value_from VARCHAR2(50);
2900 l_attr_value_to VARCHAR2(50);
2901
2902 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
2903 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
2904
2905 l_rate_break_data FTE_BULKLOAD_PKG.data_values_tbl;
2906 l_rate_break_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
2907
2908 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.PROCESS_LOADING_CHARGES';
2909
2910 BEGIN
2911 FTE_UTIL_PKG.Enter_Debug(l_module_name);
2912 x_status := -1;
2913
2914 l_type := 'ACCESSORIAL_SURCHARGE';
2915 l_attr1_type := 'TL_RATE_TYPE';
2916 l_attr1_context := FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE;
2917
2918 l_attr3_type := 'LOADING_PROTOCOL';
2919 l_attr3_context := FTE_RTG_GLOBALS.G_AX_LOADING_PROTOCOL;
2920
2921 -- TL handling only deals with weight and volume
2922 IF (p_load_type = 'HANDLING') THEN
2923 l_attr1_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_LOAD;
2924 l_attr3_value := 'CARRIER';
2925 l_subtype_min := FTE_RTG_GLOBALS.G_C_MIN_HANDLING_CH;
2926
2927 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
2928 l_subtype := FTE_RTG_GLOBALS.G_C_HANDLING_WEIGHT_CH;
2929 l_attr2_type := 'TL_HANDLING_WT';
2930 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_HANDLING_WT;
2931 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
2932 l_subtype := FTE_RTG_GLOBALS.G_C_HANDLING_VOLUME_CH;
2933 l_attr2_type := 'TL_HANDLING_VOL';
2934 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_HANDLING_VOL;
2935 ELSIF (p_basis = 'FLAT') THEN
2936 l_flat_rate := TRUE;
2937 l_subtype := FTE_RTG_GLOBALS.G_C_HANDLING_FLAT_CH;
2938 ELSE
2939 x_status := 3;
2940 END IF;
2941 ELSIF (p_load_type = 'FACILITY_HANDLING') THEN
2942 l_attr1_value := 'FACILITY_CHARGE';
2943 l_attr3_value := 'FACILITY';
2944 l_subtype_min := FTE_RTG_GLOBALS.G_F_MIN_HANDLING_CH;
2945
2946 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
2947 l_subtype := FTE_RTG_GLOBALS.G_F_HANDLING_WEIGHT_CH;
2948 l_attr2_type := 'FAC_HANDLING_WT';
2949 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_HANDLING_WT;
2950 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
2951 l_subtype := FTE_RTG_GLOBALS.G_F_HANDLING_VOLUME_CH;
2952 l_attr2_type := 'FAC_HANDLING_VOL';
2953 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_HANDLING_VOL;
2954 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
2955 l_subtype := FTE_RTG_GLOBALS.G_F_HANDLING_PALLET_CH;
2956 l_attr2_type := 'FAC_HANDLING_PALLET';
2957 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_HANDLING_PALLET;
2958 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
2959 l_subtype := FTE_RTG_GLOBALS.G_F_HANDLING_CONTAINER_CH;
2960 l_attr2_type := 'FAC_HANDLING_CONTAINER';
2961 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_HANDLING_CONTAINER;
2962 ELSIF (p_basis = 'FLAT') THEN
2963 l_flat_rate := TRUE;
2964 l_subtype := FTE_RTG_GLOBALS.G_F_HANDLING_FLAT_CH;
2965 ELSE
2966 x_status := 3;
2967 END IF;
2968
2969 ELSIF (p_load_type = 'UNLOADING') THEN
2970 l_attr1_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_STOP;
2971 l_attr3_value := 'CARRIER';
2972 l_subtype_min := FTE_RTG_GLOBALS.G_C_MIN_UNLOADING_CH;
2973
2974 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
2975 l_subtype := FTE_RTG_GLOBALS.G_C_UNLOADING_WEIGHT_CH;
2976 l_attr2_type := 'TL_DROPOFF_WT';
2977 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_DROPOFF_WT;
2978 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
2979 l_subtype := FTE_RTG_GLOBALS.G_C_UNLOADING_VOLUME_CH;
2980 l_attr2_type := 'TL_DROPOFF_VOL';
2981 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_DROPOFF_VOL;
2982 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
2983 l_subtype := FTE_RTG_GLOBALS.G_C_UNLOADING_PALLET_CH;
2984 l_attr2_type := 'TL_DROPOFF_PALLET';
2985 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_DROPOFF_PALLET;
2986 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
2987 l_subtype := FTE_RTG_GLOBALS.G_C_UNLOADING_CONTAINER_CH;
2988 l_attr2_type := 'TL_DROPOFF_CONTAINER';
2989 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_DROPOFF_CONTAINER;
2990 ELSIF(p_basis = 'FLAT') THEN
2991 l_flat_rate := TRUE;
2992 l_subtype := FTE_RTG_GLOBALS.G_C_UNLOADING_FLAT_CH;
2993 ELSE
2994 x_status := 3;
2995 END IF;
2996
2997 ELSIF (p_load_type = 'FACILITY_UNLOADING') THEN
2998 l_attr1_value := 'FACILITY_CHARGE';
2999 l_attr3_value := 'FACILITY';
3000 l_subtype_min := FTE_RTG_GLOBALS.G_F_MIN_UNLOADING_CH;
3001
3002 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
3003 l_subtype := FTE_RTG_GLOBALS.G_F_UNLOADING_WEIGHT_CH;
3004 l_attr2_type := 'FAC_DROPOFF_WT';
3005 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_DROPOFF_WT;
3006 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
3007 l_subtype := FTE_RTG_GLOBALS.G_F_UNLOADING_VOLUME_CH;
3008 l_attr2_type := 'FAC_DROPOFF_VOL';
3009 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_DROPOFF_VOL;
3010 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
3011 l_subtype := FTE_RTG_GLOBALS.G_F_UNLOADING_PALLET_CH;
3012 l_attr2_type := 'FAC_DROPOFF_PALLET';
3013 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_DROPOFF_PALLET;
3014 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
3015 l_subtype := FTE_RTG_GLOBALS.G_F_UNLOADING_CONTAINER_CH;
3016 l_attr2_type := 'FAC_DROPOFF_CONTAINER';
3017 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_DROPOFF_CONTAINER;
3018 ELSIF(p_basis = 'FLAT') THEN
3019 l_flat_rate := TRUE;
3020 l_subtype := FTE_RTG_GLOBALS.G_F_UNLOADING_FLAT_CH;
3021 ELSE
3022 x_status := 3;
3023 END IF;
3024
3025 ELSIF (p_load_type = 'ASSISTED_UNLOADING') THEN
3026 l_attr1_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_STOP;
3027 l_attr3_value := 'JOINT';
3028 l_subtype_min := FTE_RTG_GLOBALS.G_C_MIN_AST_UNLOADING_CH;
3029
3030 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
3031 l_subtype := FTE_RTG_GLOBALS.G_C_AST_UNLOADING_WEIGHT_CH;
3032 l_attr2_type := 'TL_DROPOFF_WT';
3033 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_DROPOFF_WT;
3034 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
3035 l_subtype := FTE_RTG_GLOBALS.G_C_AST_UNLOADING_VOLUME_CH;
3036 l_attr2_type := 'TL_DROPOFF_VOL';
3037 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_DROPOFF_VOL;
3038 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
3039 l_subtype := FTE_RTG_GLOBALS.G_C_AST_UNLOADING_PALLET_CH;
3040 l_attr2_type := 'TL_DROPOFF_PALLET';
3041 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_DROPOFF_PALLET;
3042 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
3043 l_subtype := FTE_RTG_GLOBALS.G_C_AST_UNLOADING_CONTAINER_CH;
3044 l_attr2_type := 'TL_DROPOFF_CONTAINER';
3045 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_DROPOFF_CONTAINER;
3046 ELSIF(p_basis = 'FLAT') THEN
3047 l_flat_rate := TRUE;
3048 l_subtype := FTE_RTG_GLOBALS.G_C_AST_UNLOADING_FLAT_CH;
3049 ELSE
3050 x_status := 3;
3051 END IF;
3052
3053 ELSIF (p_load_type = 'FACILITY_ASSISTED_UNLOADING') THEN
3054 l_attr1_value := 'FACILITY_CHARGE';
3055 l_attr3_value := 'JOINT';
3056 l_subtype_min := FTE_RTG_GLOBALS.G_F_MIN_AST_UNLOADING_CH;
3057
3058 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
3059 l_subtype := FTE_RTG_GLOBALS.G_F_AST_UNLOADING_WEIGHT_CH;
3060 l_attr2_type := 'FAC_DROPOFF_WT';
3061 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_DROPOFF_WT;
3062 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
3063 l_subtype := FTE_RTG_GLOBALS.G_F_AST_UNLOADING_VOLUME_CH;
3064 l_attr2_type := 'FAC_DROPOFF_VOL';
3065 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_DROPOFF_VOL;
3066 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
3067 l_subtype := FTE_RTG_GLOBALS.G_F_AST_UNLOADING_PALLET_CH;
3068 l_attr2_type := 'FAC_DROPOFF_PALLET';
3069 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_DROPOFF_PALLET;
3070 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
3071 l_subtype := FTE_RTG_GLOBALS.G_F_AST_UNLOADING_CONTAINER_CH;
3072 l_attr2_type := 'FAC_DROPOFF_CONTAINER';
3073 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_DROPOFF_CONTAINER;
3074 ELSIF(p_basis = 'FLAT') THEN
3075 l_flat_rate := TRUE;
3076 l_subtype := FTE_RTG_GLOBALS.G_F_AST_UNLOADING_FLAT_CH;
3077 ELSE
3078 x_status := 3;
3079 END IF;
3080
3081 ELSIF (p_load_type = 'LOADING') THEN
3082 l_attr1_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_STOP;
3083 l_attr3_value := 'CARRIER';
3084 l_subtype_min := FTE_RTG_GLOBALS.G_C_MIN_LOADING_CH;
3085
3086 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
3087 l_subtype := FTE_RTG_GLOBALS.G_C_LOADING_WEIGHT_CH;
3088 l_attr2_type := 'TL_PICKUP_WT';
3089 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_WT;
3090 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
3091 l_subtype := FTE_RTG_GLOBALS.G_C_LOADING_VOLUME_CH;
3092 l_attr2_type := 'TL_PICKUP_VOL';
3093 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_VOL;
3094 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
3095 l_subtype := FTE_RTG_GLOBALS.G_C_LOADING_PALLET_CH;
3096 l_attr2_type := 'TL_PICKUP_PALLET';
3097 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_PALLET;
3098 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
3099 l_subtype := FTE_RTG_GLOBALS.G_C_LOADING_CONTAINER_CH;
3100 l_attr2_type := 'TL_PICKUP_CONTAINER';
3101 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_CONTAINER;
3102 ELSIF(p_basis = 'FLAT') THEN
3103 l_flat_rate := TRUE;
3104 l_subtype := FTE_RTG_GLOBALS.G_C_LOADING_FLAT_CH;
3105 ELSE
3106 x_status := 3;
3107 END IF;
3108
3109 ELSIF (p_load_type = 'FACILITY_LOADING') THEN
3110 l_attr1_value := 'FACILITY_CHARGE';
3111 l_attr3_value := 'FACILITY';
3112 l_subtype_min := FTE_RTG_GLOBALS.G_F_MIN_LOADING_CH;
3113
3114 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
3115 l_subtype := FTE_RTG_GLOBALS.G_F_LOADING_WEIGHT_CH;
3116 l_attr2_type := 'FAC_PICKUP_WT';
3117 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_WT;
3118 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
3119 l_subtype := FTE_RTG_GLOBALS.G_F_LOADING_VOLUME_CH;
3120 l_attr2_type := 'FAC_PICKUP_VOL';
3121 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_VOL;
3122 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
3123 l_subtype := FTE_RTG_GLOBALS.G_F_LOADING_PALLET_CH;
3124 l_attr2_type := 'FAC_PICKUP_PALLET';
3125 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_PALLET;
3126 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
3127 l_subtype := FTE_RTG_GLOBALS.G_F_LOADING_CONTAINER_CH;
3128 l_attr2_type := 'FAC_PICKUP_CONTAINER';
3129 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_CONTAINER;
3130 ELSIF(p_basis = 'FLAT') THEN
3131 l_flat_rate := TRUE;
3132 l_subtype := FTE_RTG_GLOBALS.G_F_LOADING_FLAT_CH;
3133 ELSE
3134 x_status := 3;
3135 END IF;
3136
3137 ELSIF (p_load_type = 'ASSISTED_LOADING') THEN
3138 l_attr1_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_STOP;
3139 l_attr3_value := 'JOINT';
3140 l_subtype_min := FTE_RTG_GLOBALS.G_C_MIN_AST_LOADING_CH;
3141
3142 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
3143 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_WEIGHT_CH;
3144 l_attr2_type := 'TL_PICKUP_WT';
3145 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_WT;
3146 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
3147 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_VOLUME_CH;
3148 l_attr2_type := 'TL_PICKUP_VOL';
3149 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_VOL;
3150 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
3151 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_PALLET_CH;
3152 l_attr2_type := 'TL_PICKUP_PALLET';
3153 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_PALLET;
3154 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
3155 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_CONTAINER_CH;
3156 l_attr2_type := 'TL_PICKUP_CONTAINER';
3157 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_CONTAINER;
3158 ELSIF(p_basis = 'FLAT') THEN
3159 l_flat_rate := TRUE;
3160 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_FLAT_CH;
3161 ELSE
3162 x_status := 3;
3163 END IF;
3164
3165 ELSIF (p_load_type = 'FACILITY_ASSISTED_LOADING') THEN
3166 l_attr1_value := 'FACILITY_CHARGE';
3167 l_attr3_value := 'JOINT';
3168 l_subtype_min := FTE_RTG_GLOBALS.G_F_MIN_AST_LOADING_CH;
3169
3170 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
3171 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_WEIGHT_CH;
3172 l_attr2_type := 'FAC_PICKUP_WT';
3173 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_WT;
3174 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
3175 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_VOLUME_CH;
3176 l_attr2_type := 'FAC_PICKUP_VOL';
3177 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_VOL;
3178 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
3179 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_PALLET_CH;
3180 l_attr2_type := 'FAC_PICKUP_PALLET';
3181 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_PALLET;
3182 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
3183 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_CONTAINER_CH;
3184 l_attr2_type := 'FAC_PICKUP_CONTAINER';
3185 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_CONTAINER;
3186 ELSIF(p_basis = 'FLAT') THEN
3187 l_flat_rate := TRUE;
3188 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_FLAT_CH;
3189 ELSE
3190 x_status := 3;
3191 END IF;
3192
3193 ELSIF (p_load_type = 'ASSISTED_LOADING') THEN
3194 l_attr1_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_STOP;
3195 l_attr3_value := 'JOINT';
3196 l_subtype_min := FTE_RTG_GLOBALS.G_C_MIN_AST_LOADING_CH;
3197
3198 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
3199 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_WEIGHT_CH;
3200 l_attr2_type := 'TL_PICKUP_WT';
3201 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_WT;
3202 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
3203 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_VOLUME_CH;
3204 l_attr2_type := 'TL_PICKUP_VOL';
3205 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_VOL;
3206 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
3207 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_PALLET_CH;
3208 l_attr2_type := 'TL_PICKUP_PALLET';
3209 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_PALLET;
3210 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
3211 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_CONTAINER_CH;
3212 l_attr2_type := 'TL_PICKUP_CONTAINER';
3213 l_attr2_context := FTE_RTG_GLOBALS.G_AX_TL_PICKUP_CONTAINER;
3214 ELSIF(p_basis = 'FLAT') THEN
3215 l_flat_rate := TRUE;
3216 l_subtype := FTE_RTG_GLOBALS.G_C_AST_LOADING_FLAT_CH;
3217 ELSE
3218 x_status := 3;
3219 END IF;
3220
3221 ELSIF (p_load_type = 'FACILITY_ASSISTED_LOADING') THEN
3222 l_attr1_value := 'FACILITY_CHARGE';
3223 l_attr3_value := 'JOINT';
3224 l_subtype_min := FTE_RTG_GLOBALS.G_F_MIN_AST_LOADING_CH;
3225
3226 IF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
3227 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_WEIGHT_CH;
3228 l_attr2_type := 'FAC_PICKUP_WT';
3229 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_WT;
3230 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
3231 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_VOLUME_CH;
3232 l_attr2_type := 'FAC_PICKUP_VOL';
3233 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_VOL;
3234 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
3235 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_PALLET_CH;
3236 l_attr2_type := 'FAC_PICKUP_PALLET';
3237 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_PALLET;
3238 ELSIF (p_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
3239 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_CONTAINER_CH;
3240 l_attr2_type := 'FAC_PICKUP_CONTAINER';
3241 l_attr2_context := FTE_RTG_GLOBALS.G_AX_FAC_PICKUP_CONTAINER;
3242 ELSIF(p_basis = 'FLAT') THEN
3243 l_flat_rate := TRUE;
3244 l_subtype := FTE_RTG_GLOBALS.G_F_AST_LOADING_FLAT_CH;
3245 ELSE
3246 x_status := 3;
3247 END IF;
3248 END IF;
3249
3250 IF (x_status = 3) THEN
3251 x_status := 2;
3252 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_INVALID_BASIS',
3253 p_tokens => STRINGARRAY('BASIS','LOAD'),
3254 p_values => STRINGARRAY(p_basis,p_load_type));
3255 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
3256 p_module_name => l_module_name,
3257 p_category => 'D',
3258 p_line_number => p_line_number );
3259 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3260 END IF;
3261
3262 --+
3263 -- Cannot Have Flat Rate With Minimum Charges
3264 --+
3265 IF (l_flat_rate AND (p_min_charge IS NOT NULL)) THEN
3266 x_status := 2;
3267 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_FLAT_CANT_HAVE_MIN');
3268 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
3269 p_module_name => l_module_name,
3270 p_category => 'D',
3271 p_line_number => p_line_number);
3272 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3273 RETURN;
3274 END IF;
3275 --+
3276 -- Find out if you need to create breaks.
3277 --+
3278 IF (p_charge IS NOT NULL AND p_min_charge IS NOT NULL) THEN
3279 l_min_break := TRUE;
3280 END IF;
3281
3282 IF (l_flat_rate) THEN
3283 l_rate := p_charge;
3284 l_rate_type := 'LUMPSUM';
3285 ELSE
3286 l_rate := NULL;
3287 l_break_type := 'POINT';
3288 l_rate_type := 'FIXED';
3289 END IF;
3290
3291 x_linenum := x_linenum + 1;
3292 l_description := p_load_type || ' : Line ' || x_linenum;
3293
3294 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
3295 FTE_UTIL_PKG.Write_LogFile(l_module_name, l_description);
3296 END IF;
3297
3298 l_rate_line_data('ACTION') := G_ACTION;
3299 l_rate_line_data('LINE_NUMBER') := x_linenum;
3300 l_rate_line_data('DESCRIPTION') := l_description;
3301 l_rate_line_data('RATE') := Fnd_Number.Number_To_Canonical(l_rate);
3302 l_rate_line_data('UOM') := g_unit_uom;
3303 l_rate_line_data('VOLUME_TYPE') := 'TOTAL_QUANTITY';
3304 l_rate_line_data('TYPE') := l_type;
3305 l_rate_line_data('RATE_TYPE') := l_rate_type;
3306 l_rate_line_data('SUBTYPE') := l_subtype;
3307 l_rate_line_data('RATE_BREAK_TYPE') := l_break_type;
3308
3309 l_rate_line_block_tbl(1) := l_rate_line_data;
3310
3311 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
3312 p_block_data => l_rate_line_block_tbl,
3313 p_line_number => p_line_number,
3314 p_validate_column => FALSE,
3315 x_status => x_status,
3316 x_error_msg => x_error_msg);
3317
3318 l_rate_line_data.DELETE;
3319 l_rate_line_block_tbl.DELETE;
3320
3321 IF (x_status <> -1) THEN
3322 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg);
3323 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3324 RETURN;
3325 END IF;
3326
3327 -- Add the Charge Type attribute.
3328 IF (l_attr1_type IS NOT NULL AND l_context IS NULL) THEN
3329 ADD_ATTRIBUTE (p_attribute_type => l_attr1_type,
3330 p_attribute_value => l_attr1_value,
3331 p_attribute_value_to => NULL,
3332 p_context => l_attr1_context,
3333 p_linenum => x_linenum,
3334 p_comp_operator => '=',
3335 p_process_id => p_process_id,
3336 p_line_number => p_line_number,
3337 x_error_msg => x_error_msg,
3338 x_status => x_status);
3339
3340 END IF;
3341
3342 -- Add the Loading_Protocol Attribute
3343 IF (p_load_type NOT IN ('HANDLING', 'FACILITY_HANDLING')) THEN
3344 ADD_ATTRIBUTE (p_attribute_type => l_attr3_type,
3345 p_attribute_value => l_attr3_value,
3346 p_attribute_value_to => NULL,
3347 p_context => l_attr3_context,
3348 p_linenum => x_linenum,
3349 p_comp_operator => NULL,
3350 p_process_id => p_process_id,
3351 p_line_number => p_line_number,
3352 x_error_msg => x_error_msg,
3353 x_status => x_status);
3354 END IF;
3355
3356 -- Add additional attributes for loading, unloading, handling if flat rate basis
3357 IF (p_basis IN ('FLAT')) THEN
3358 IF (p_load_type IN ('LOADING', 'FACILITY_LOADING','ASSISTED_LOADING', 'FACILITY_ASSISTED_LOADING')) THEN
3359
3360 ADD_ATTRIBUTE (p_attribute_type => 'TL_STOP_LOADING_ACT',
3361 p_attribute_value => 'Y',
3362 p_attribute_value_to => NULL,
3363 p_context => FTE_RTG_GLOBALS.G_AX_TL_STOP_LOADING_ACT,
3364 p_linenum => x_linenum,
3365 p_comp_operator => '=',
3366 p_process_id => p_process_id,
3367 p_line_number => p_line_number,
3368 x_error_msg => x_error_msg,
3369 x_status => x_status);
3370
3371 ELSIF (p_load_type IN ('UNLOADING', 'FACILITY_UNLOADING','ASSISTED_UNLOADING', 'FACILITY_ASSISTED_UNLOADING')) THEN
3372
3373 ADD_ATTRIBUTE ( p_attribute_type => 'TL_STOP_UNLOADING_ACT',
3374 p_attribute_value => 'Y',
3375 p_attribute_value_to => NULL,
3376 p_context => FTE_RTG_GLOBALS.G_AX_TL_STOP_UNLOADING_ACT,
3377 p_linenum => x_linenum,
3378 p_comp_operator => '=',
3379 p_process_id => p_process_id,
3380 p_line_number => p_line_number,
3381 x_error_msg => x_error_msg,
3382 x_status => x_status);
3383
3384 ELSIF (p_load_type IN ('HANDLING', 'FACILITY_HANDLING')) THEN
3385
3386 ADD_ATTRIBUTE (p_attribute_type => 'TL_HANDLING_ACT',
3387 p_attribute_value => 'Y',
3388 p_attribute_value_to => NULL,
3389 p_context => FTE_RTG_GLOBALS.G_AX_TL_HANDLING_ACT,
3390 p_linenum => x_linenum,
3391 p_comp_operator => '=',
3392 p_process_id => p_process_id,
3393 p_line_number => p_line_number,
3394 x_error_msg => x_error_msg,
3395 x_status => x_status);
3396
3397 END IF;
3398 END IF;
3399
3400 --+
3401 -- For Non-Flat Charge basis, we have to add breaks for block unit pricing.
3402 --+
3403 IF (NOT l_flat_rate) THEN
3404
3405 -- Add Break 1
3406 l_attr_value_from := 0;
3407 IF (NOT l_min_break) THEN
3408 l_attr_value_to := g_max_number;
3409 l_rate := p_charge;
3410 l_subtype2 := l_subtype;
3411 l_rate_type := 'BLOCK_UNIT';
3412 ELSE
3413 l_attr_value_to := Fnd_Number.Number_To_Canonical(ROUND(p_min_charge/p_charge, 1));
3414 l_rate := p_min_charge;
3415 l_subtype2 := l_subtype_min;
3416 l_rate_type := 'LUMPSUM';
3417 END IF;
3418
3419 x_linenum := x_linenum + 1;
3420
3421 l_rate_break_data('ACTION') := G_ACTION;
3422 l_rate_break_data('LINE_NUMBER'):= x_linenum;
3423 l_rate_break_data('LOWER_LIMIT'):= 0;
3424 l_rate_break_data('UPPER_LIMIT'):= l_attr_value_to;
3425 l_rate_break_data('RATE') := Fnd_Number.Number_To_Canonical(l_rate);
3426 l_rate_break_data('RATE_TYPE') := l_rate_type;
3427 l_rate_break_data('ATTRIBUTE') := l_attr2_type;
3428 l_rate_break_data('TYPE') := l_type;
3429 l_rate_break_data('SUBTYPE') := l_subtype2;
3430
3431 l_rate_break_block_tbl(1) := l_rate_break_data;
3432
3433 FTE_RATE_CHART_LOADER.PROCESS_RATE_BREAK(p_block_header => g_dummy_block_hdr_tbl,
3434 p_block_data => l_rate_break_block_tbl ,
3435 p_line_number => p_line_number,
3436 p_validate_column => FALSE,
3437 x_status => x_status,
3438 x_error_msg => x_error_msg);
3439
3440 l_rate_break_data.DELETE;
3441 l_rate_break_block_tbl.DELETE;
3442
3443 IF (x_status <> -1) THEN
3444 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error: ' || x_error_msg);
3445 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3446 RETURN;
3447 END IF;
3448
3449 -- Break 2
3450 IF (l_min_break) THEN
3451 x_linenum := x_linenum + 1;
3452 l_attr_value_from := Fnd_Number.Canonical_To_Number(l_attr_value_to);
3453 l_attr_value_to := g_max_number;
3454 l_rate := p_charge;
3455 l_rate_type := 'BLOCK_UNIT';
3456
3457 l_rate_break_data('ACTION') := G_ACTION;
3458 l_rate_break_data('LINE_NUMBER'):= x_linenum;
3459 l_rate_break_data('LOWER_LIMIT'):= Fnd_Number.Number_To_Canonical(l_attr_value_from);
3460 l_rate_break_data('UPPER_LIMIT'):= Fnd_Number.Number_To_Canonical(l_attr_value_to);
3461 l_rate_break_data('RATE') := Fnd_Number.Number_To_Canonical(l_rate);
3462 l_rate_break_data('RATE_TYPE') := l_rate_type;
3463 l_rate_break_data('ATTRIBUTE') := l_attr2_type;
3464 l_rate_break_data('TYPE') := l_type;
3465 l_rate_break_data('SUBTYPE') := l_subtype;
3466
3467 l_rate_break_block_tbl(1) := l_rate_break_data;
3468
3469 FTE_RATE_CHART_LOADER.PROCESS_RATE_BREAK(p_block_header => g_dummy_block_hdr_tbl,
3470 p_block_data => l_rate_break_block_tbl,
3471 p_line_number => p_line_number,
3472 p_validate_column => FALSE,
3473 x_status => x_status,
3474 x_error_msg => x_error_msg);
3475
3476 l_rate_break_data.DELETE;
3477 l_rate_break_block_tbl.DELETE;
3478
3479 IF (x_status <> -1) THEN
3480 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Error: ' || x_error_msg);
3481 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3482 RETURN;
3483 END IF;
3484 END IF;
3485 END IF;
3486
3487 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3488 EXCEPTION
3489 WHEN OTHERS THEN
3490 x_status := 2;
3491 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3492 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Process_Loading_Charges Error: ' || sqlerrm);
3493
3494 End PROCESS_LOADING_CHARGES;
3495
3496 --_________________________________________________________________________________--
3497 --
3498 -- PROCEDURE: PROCESS_BLOCK_UNIT_CHARGES
3499 --
3500 -- Purpose Process block unit charges that do not have a minimum charge.
3501 --
3502 -- Parameters
3503 --
3504 -- OUT
3505 -- x_status, the return status, -1 for success
3506 -- 2 for failure.
3507 -- x_error_msg, the corresponding error message,
3508 -- if any exception occurs during the process.
3509 --_________________________________________________________________________________--
3510
3511 PROCEDURE PROCESS_BLOCK_UNIT_CHARGES(p_charge IN NUMBER,
3512 p_subtype IN VARCHAR2,
3513 p_uom IN VARCHAR2,
3514 p_process_id IN NUMBER,
3515 x_linenum IN OUT NOCOPY NUMBER,
3516 p_line_number IN NUMBER,
3517 x_error_msg OUT NOCOPY VARCHAR2,
3518 x_status OUT NOCOPY NUMBER) IS
3519
3520 l_type VARCHAR2(30);
3521 l_break_type VARCHAR2(30);
3522 l_description VARCHAR2(300);
3523 l_context VARCHAR2(50);
3524 l_attribute_value VARCHAR2(50);
3525 l_attribute_type VARCHAR2(50);
3526 l_attr_value_to VARCHAR2(50);
3527 l_rate_type VARCHAR2(25);
3528 l_volume_type VARCHAR2(25);
3529 l_subtype VARCHAR2(30);
3530
3531 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
3532 l_rate_break_data FTE_BULKLOAD_PKG.data_values_tbl;
3533 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
3534 l_rate_break_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
3535
3536 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.PROCESS_BLOCK_UNIT_CHARGES';
3537
3538 BEGIN
3539 FTE_UTIL_PKG.Enter_Debug(l_module_name);
3540 x_status := -1;
3541
3542 x_linenum := x_linenum + 1;
3543 l_type := 'ACCESSORIAL_SURCHARGE';
3544 l_break_type := 'POINT';
3545 l_rate_type := 'FIXED';
3546 l_volume_type:= 'TOTAL_QUANTITY';
3547
3548 IF (p_subtype = FTE_RTG_GLOBALS.G_C_OUT_OF_ROUTE_CH) THEN
3549 l_description := 'Out Of Route Charge: Line ' || x_linenum;
3550 ELSIF (p_subtype = FTE_RTG_GLOBALS.G_C_WEEKDAY_LAYOVER_CH) THEN
3551 l_description := 'Weekday Layover Charge: Line ' || x_linenum;
3552 END IF;
3553
3554 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
3555 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_description', l_description);
3556 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_type ', l_type);
3557 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_break_type ', l_break_type);
3558 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'p_subtype ', p_subtype);
3559 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_type ', l_rate_type);
3560 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_volume_type', l_volume_type);
3561 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'g_unit_uom ', g_unit_uom);
3562 END IF;
3563
3564 l_rate_line_data('ACTION') := G_ACTION;
3565 l_rate_line_data('LINE_NUMBER') := x_linenum;
3566 l_rate_line_data('DESCRIPTION') := l_description;
3567 l_rate_line_data('UOM') := g_unit_uom;
3568 l_rate_line_data('VOLUME_TYPE') := l_volume_type;
3569 l_rate_line_data('TYPE') := l_type;
3570 l_rate_line_data('RATE_TYPE') := l_rate_type;
3571 l_rate_line_data('SUBTYPE') := p_subtype;
3572 l_rate_line_data('RATE_BREAK_TYPE') := l_break_type;
3573
3574 l_rate_line_block_tbl(1) := l_rate_line_data;
3575
3576 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
3577 p_block_data => l_rate_line_block_tbl,
3578 p_line_number => p_line_number,
3579 p_validate_column => FALSE,
3580 x_status => x_status,
3581 x_error_msg => x_error_msg);
3582
3583 l_rate_line_data.DELETE;
3584 l_rate_line_block_tbl.DELETE;
3585
3586 IF (x_status <> -1) THEN
3587 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg);
3588 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3589 RETURN;
3590 END IF;
3591
3592 -- add Rate Type Attribute
3593 l_attribute_type := 'TL_RATE_TYPE';
3594 l_context := FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE;
3595
3596 IF (p_subtype = FTE_RTG_GLOBALS.G_C_OUT_OF_ROUTE_CH) THEN
3597 l_attribute_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_LOAD;
3598 ELSIF (p_subtype = FTE_RTG_GLOBALS.G_C_WEEKDAY_LAYOVER_CH) THEN
3599 l_attribute_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_STOP;
3600 END IF;
3601
3602 IF (l_attribute_type IS NOT NULL AND l_context IS NOT NULL) THEN
3603 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
3604 p_attribute_value => l_attribute_value,
3605 p_attribute_value_to => NULL,
3606 p_context => l_context,
3607 p_comp_operator => '=',
3608 p_linenum => x_linenum,
3609 p_process_id => p_process_id,
3610 p_line_number => p_line_number,
3611 x_error_msg => x_error_msg,
3612 x_status => x_status);
3613 END IF;
3614
3615 -- Add Charge Type Attribute
3616 IF (p_subtype = FTE_RTG_GLOBALS.G_C_OUT_OF_ROUTE_CH) THEN
3617 l_attribute_type := 'TL_CHARGED_OUT_RT_DISTANCE';
3618 l_context := FTE_RTG_GLOBALS.G_AX_TL_CHARGED_OUT_RT_DIST;
3619
3620 ELSIF (p_subtype = FTE_RTG_GLOBALS.G_C_WEEKDAY_LAYOVER_CH) THEN
3621 l_attribute_type := 'TL_NUM_WEEKDAY_LAYOVERS';
3622 l_context := FTE_RTG_GLOBALS.G_AX_TL_NUM_WEEKDAY_LAYOVERS;
3623 END IF;
3624
3625
3626 -- NOTE: attributes with context VOLUME should not be put on the PBH.
3627
3628 -- break
3629 x_linenum := x_linenum + 1;
3630
3631 l_rate_break_data('ACTION') := G_ACTION;
3632 l_rate_break_data('LINE_NUMBER'):= x_linenum;
3633 l_rate_break_data('LOWER_LIMIT'):= 0;
3634 l_rate_break_data('UPPER_LIMIT'):= FTE_UTIL_PKG.Canonicalize_Number(g_max_number);
3635 l_rate_break_data('RATE') := p_charge;
3636 l_rate_break_data('RATE_TYPE') := 'BLOCK_UNIT';
3637 l_rate_break_data('ATTRIBUTE') := l_attribute_type;
3638 l_rate_break_data('TYPE') := l_type;
3639 l_rate_break_data('SUBTYPE') := l_subtype;
3640 l_rate_break_data('CONTEXT') := l_context;
3641
3642 l_rate_break_block_tbl(1) := l_rate_break_data;
3643
3644 FTE_RATE_CHART_LOADER.PROCESS_RATE_BREAK(p_block_header => g_dummy_block_hdr_tbl,
3645 p_block_data => l_rate_break_block_tbl,
3646 p_line_number => p_line_number,
3647 p_validate_column => FALSE,
3648 x_status => x_status,
3649 x_error_msg => x_error_msg);
3650
3651 l_rate_break_data.DELETE;
3652 l_rate_break_block_tbl.DELETE;
3653
3654 IF (x_status <> -1) THEN
3655 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg);
3656 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3657 RETURN;
3658 END IF;
3659
3660 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3661
3662 EXCEPTION
3663 WHEN OTHERS THEN
3664 x_status := 2;
3665 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Process_Block_Unit_Charges Error',sqlerrm);
3666 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3667
3668 END PROCESS_BLOCK_UNIT_CHARGES;
3669
3670 --_________________________________________________________________________________--
3671 -- --
3672 -- PROCEDURE: PROCESS_CHART_SURCHARGES
3673 --
3674 -- PURPOSE:
3675 --
3676 -- PARAMETERS
3677 -- IN
3678 -- p_values: An Associative array of data with header as key.
3679 -- p_chart_type rate chart type, may be TL_MODIFIER...
3680 -- p_process_id the load id of the current process
3681 -- p_line_number line number in the file, used for error logging
3682 -- p_doValidate to indicate whether the validations to be done or not.
3683 -- From UI, this takes the value of FALSE. Defaulted to TRUE.
3684 --
3685 -- IN OUT
3686 -- x_linenum
3687 --
3688 -- OUT
3689 -- x_status, the return status, -1 for success
3690 -- 2 for failure.
3691 -- x_error_msg, the corresponding error message,
3692 -- if any exception occurs during the process.
3693 --_________________________________________________________________________________--
3694
3695 PROCEDURE PROCESS_CHART_SURCHARGES (p_values IN FTE_BULKLOAD_PKG.data_values_tbl,
3696 p_chart_type IN VARCHAR2,
3697 p_process_id IN NUMBER,
3698 p_line_number IN NUMBER,
3699 p_doValidate IN BOOLEAN DEFAULT TRUE,
3700 x_linenum IN OUT NOCOPY NUMBER,
3701 x_error_msg OUT NOCOPY VARCHAR2,
3702 x_status OUT NOCOPY NUMBER ) IS
3703
3704 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.'||G_PKG_NAME||'.PROCESS_CHART_SURCHARGES';
3705
3706 l_num_free_stops NUMBER;
3707 l_stop_chg_1 NUMBER;
3708 l_stop_chg_2 NUMBER;
3709 l_stop_chg_3 NUMBER;
3710 l_stop_chg_4 NUMBER;
3711 l_stop_chg_5 NUMBER;
3712 l_stop_chg_x NUMBER;
3713 l_out_rt_chg NUMBER;
3714 l_handling_chg NUMBER;
3715 l_min_handling_chg NUMBER;
3716 l_ld_chg NUMBER;
3717 l_min_ld_chg NUMBER;
3718 l_asst_ld_chg NUMBER;
3719 l_unld_chg NUMBER;
3720 l_min_unld_chg NUMBER;
3721 l_asst_unld_chg NUMBER;
3722 l_min_asst_unld_chg NUMBER;
3723 l_min_asst_ld_chg NUMBER;
3724 l_cont_mv_dsct_prcnt NUMBER;
3725 l_wkday_layovr_chg NUMBER;
3726 l_out_rt_chg_uom VARCHAR2(20);
3727 l_rate_basis VARCHAR2(20);
3728 l_rate_basis_uom VARCHAR2(20);
3729 l_break_type VARCHAR2(30);
3730 l_break_charges STRINGARRAY;
3731 l_attribute_type VARCHAR2(50);
3732 l_attribute_value VARCHAR2(50);
3733 l_context VARCHAR2(50);
3734 l_load_type_prefix VARCHAR2(30);
3735 l_description VARCHAR2(100);
3736 l_type VARCHAR2(50);
3737 l_subtype VARCHAR2(50);
3738 l_carrier_name VARCHAR2(100);
3739 l_service_level VARCHAR2(30);
3740
3741 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
3742 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
3743
3744 BEGIN
3745
3746 FTE_UTIL_PKG.Enter_Debug(l_module_name);
3747 x_status := -1;
3748
3749 l_carrier_name := FTE_UTIL_PKG.GET_DATA('CARRIER_NAME', p_values);
3750 l_num_free_stops := FTE_UTIL_PKG.GET_DATA('NUMBER_OF_FREE_STOPS', p_values);
3751 l_rate_basis := FTE_UTIL_PKG.GET_DATA('BASIS_FOR_HANDLING_LOADING_UNLOADING_CHARGES', p_values);
3752 l_rate_basis_uom := FTE_UTIL_PKG.GET_DATA('UOM_FOR_HANDLING_LOADING_UNLOADING_CHARGE_BASIS', p_values);
3753 l_out_rt_chg_uom := FTE_UTIL_PKG.GET_DATA('OUT_OF_ROUTE_CHARGE_BASIS_UOM', p_values);
3754 l_stop_chg_1 := FTE_UTIL_PKG.GET_DATA('FIRST_ADD_STOP_OFF_CHARGES', p_values );
3755 l_stop_chg_2 := FTE_UTIL_PKG.GET_DATA('SECOND_ADD_STOP_OFF_CHARGES', p_values);
3756 l_stop_chg_3 := FTE_UTIL_PKG.GET_DATA('THIRD_ADD_STOP_OFF_CHARGES', p_values);
3757 l_stop_chg_4 := FTE_UTIL_PKG.GET_DATA('FOURTH_ADD_STOP_OFF_CHARGES', p_values);
3758 l_stop_chg_5 := FTE_UTIL_PKG.GET_DATA('FIFTH_ADD_STOP_OFF_CHARGES', p_values);
3759 l_stop_chg_x := FTE_UTIL_PKG.GET_DATA('ADDITIONAL_STOP_CHARGES',p_values);
3760 l_out_rt_chg := FTE_UTIL_PKG.GET_DATA('OUT_OF_ROUTE_CHARGES',p_values);
3761 l_handling_chg := FTE_UTIL_PKG.GET_DATA('HANDLING_CHARGES', p_values);
3762 l_min_handling_chg := FTE_UTIL_PKG.GET_DATA('MINIMUM_HANDLING_CHARGES', p_values);
3763 l_ld_chg := FTE_UTIL_PKG.GET_DATA('LOADING_CHARGES', p_values);
3764 l_min_ld_chg := FTE_UTIL_PKG.GET_DATA('MINIMUM_LOADING_CHARGES', p_values);
3765 l_unld_chg := FTE_UTIL_PKG.GET_DATA('UNLOADING_CHARGES', p_values);
3766 l_min_unld_chg := FTE_UTIL_PKG.GET_DATA('MINIMUM_UNLOADING_CHARGES', p_values);
3767 l_asst_unld_chg := FTE_UTIL_PKG.GET_DATA('ASSISTED_UNLOADING_CHARGES', p_values);
3768 l_min_asst_unld_chg := FTE_UTIL_PKG.GET_DATA('MINIMUM_ASSISTED_UNLOADING_CHARGES', p_values);
3769 l_asst_ld_chg := FTE_UTIL_PKG.GET_DATA('ASSISTED_LOADING_CHARGES', p_values);
3770 l_min_asst_ld_chg := FTE_UTIL_PKG.GET_DATA('MINIMUM_ASSISTED_LOADING_CHARGES', p_values);
3771 l_cont_mv_dsct_prcnt:= FTE_UTIL_PKG.GET_DATA('CONTINUOUS_MOVE_DISCOUNT_PERCENTAGE', p_values);
3772 l_wkday_layovr_chg := FTE_UTIL_PKG.GET_DATA('WEEKDAY_LAYOVER_CHARGES', p_values);
3773 l_service_level := FTE_UTIL_PKG.GET_DATA('SERVICE_LEVEL', p_values);
3774
3775 IF (NOT p_doValidate) THEN
3776 l_service_level := FTE_UTIL_PKG.GET_DATA('SERVICE_CODE', p_values);
3777 END IF;
3778
3779 l_rate_basis := UPPER(l_rate_basis);
3780
3781 BEGIN
3782 l_stop_chg_1 := Fnd_Number.Canonical_To_Number(l_stop_chg_1);
3783 l_stop_chg_2 := Fnd_Number.Canonical_To_Number(l_stop_chg_2);
3784 l_stop_chg_3 := Fnd_Number.Canonical_To_Number(l_stop_chg_3);
3785 l_stop_chg_4 := Fnd_Number.Canonical_To_Number(l_stop_chg_4);
3786 l_stop_chg_5 := Fnd_Number.Canonical_To_Number(l_stop_chg_5);
3787 l_stop_chg_x := Fnd_Number.Canonical_To_Number(l_stop_chg_x);
3788 l_out_rt_chg := Fnd_Number.Canonical_To_Number(l_out_rt_chg);
3789 l_handling_chg := Fnd_Number.Canonical_To_Number(l_handling_chg);
3790 l_min_handling_chg := Fnd_Number.Canonical_To_Number(l_min_handling_chg);
3791 l_ld_chg := Fnd_Number.Canonical_To_Number(l_ld_chg);
3792 l_min_ld_chg := Fnd_Number.Canonical_To_Number(l_min_ld_chg);
3793 l_unld_chg := Fnd_Number.Canonical_To_Number(l_unld_chg);
3794 l_min_unld_chg := Fnd_Number.Canonical_To_Number(l_min_unld_chg);
3795 l_asst_unld_chg := Fnd_Number.Canonical_To_Number(l_asst_unld_chg);
3796 l_min_asst_unld_chg := Fnd_Number.Canonical_To_Number(l_min_asst_unld_chg);
3797 l_asst_ld_chg := Fnd_Number.Canonical_To_Number(l_asst_ld_chg);
3798 l_min_asst_ld_chg := Fnd_Number.Canonical_To_Number(l_min_asst_ld_chg);
3799 l_cont_mv_dsct_prcnt:= Fnd_Number.Canonical_To_Number(l_cont_mv_dsct_prcnt);
3800 l_wkday_layovr_chg := Fnd_Number.Canonical_To_Number(l_wkday_layovr_chg);
3801 EXCEPTION
3802 WHEN OTHERS THEN
3803 x_status := 2;
3804 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Unexcepted Error ', sqlerrm);
3805 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3806 END;
3807
3808 IF ( p_doValidate ) THEN
3809 IF (p_chart_type <> 'FAC_MODIFIER') THEN
3810 l_service_level := FTE_VALIDATION_PKG.VALIDATE_SERVICE_LEVEL(p_carrier_id => NULL,
3811 p_carrier_name => l_carrier_name,
3812 p_service_level => l_service_level,
3813 p_line_number => p_line_number,
3814 x_error_msg => x_error_msg,
3815 x_status => x_status);
3816 IF (x_status <> -1) THEN
3817 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3818 RETURN;
3819 END IF;
3820 END IF;
3821 END IF;
3822
3823 IF (l_out_rt_chg < 0 OR l_stop_chg_1 < 0 OR l_handling_chg < 0 OR
3824 l_asst_unld_chg < 0 OR l_stop_chg_2 < 0 OR l_min_handling_chg < 0 OR
3825 l_min_asst_unld_chg < 0 OR l_stop_chg_3 < 0 OR l_min_ld_chg < 0 OR
3826 l_min_asst_ld_chg < 0 OR l_stop_chg_4 < 0 OR l_ld_chg < 0 OR
3827 l_asst_ld_chg < 0 OR l_stop_chg_5 < 0 OR l_unld_chg < 0 OR
3828 l_cont_mv_dsct_prcnt < 0 OR l_stop_chg_x < 0 OR l_min_unld_chg < 0 OR
3829 l_wkday_layovr_chg < 0 ) THEN
3830
3831 x_status := 2;
3832 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VALUE_ERROR',
3833 p_tokens => STRINGARRAY('ENTITY'),
3834 p_values => STRINGARRAY('Charge'));
3835 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
3836 p_module_name => l_module_name,
3837 p_category => 'D',
3838 p_line_number => p_line_number);
3839 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3840 RETURN;
3841 END IF;
3842
3843 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
3844
3845 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Validating Modifier for Process ID ' || p_process_id);
3846 FTE_UTIL_PKG.Write_LogFile(l_module_name, '-------------------------------------------');
3847 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_num_free_stops ',l_num_free_stops);
3848 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_stop_chg_1 ',l_stop_chg_1);
3849 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_stop_chg_2 ',l_stop_chg_2);
3850 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_stop_chg_3 ',l_stop_chg_3);
3851 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_stop_chg_4 ',l_stop_chg_4);
3852 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_stop_chg_5 ',l_stop_chg_5);
3853 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_stop_chg_x ',l_stop_chg_x);
3854 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_out_rt_chg ',l_out_rt_chg);
3855 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_out_rt_chg_uom ',l_out_rt_chg_uom);
3856 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_basis ',l_rate_basis);
3857 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_basis_uom ',l_rate_basis_uom);
3858 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_handling_chg ',l_handling_chg);
3859 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_min_handling_chg',l_min_handling_chg);
3860 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_ld_chg ',l_ld_chg);
3861 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_min_ld_chg ',l_min_ld_chg);
3862 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_asst_ld_chg ',l_asst_ld_chg);
3863 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_unld_chg ',l_unld_chg);
3864 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_min_unld_chg ',l_min_unld_chg);
3865 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_asst_unld_chg ',l_asst_unld_chg);
3866 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_min_asst_unld_chg ',l_min_asst_unld_chg);
3867 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_wkday_layovr_chg ',l_wkday_layovr_chg);
3868 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_cont_mv_dsct_prcnt',l_cont_mv_dsct_prcnt);
3869 END IF;
3870
3871 -- Attribute : Rate Basis, Rate Basis UOM are required
3872
3873 IF (l_rate_basis IS NULL OR LENGTH(l_rate_basis) = 0 OR l_rate_basis = 'FLAT') THEN
3874
3875 l_rate_basis := 'FLAT';
3876 l_rate_basis_uom := g_unit_uom;
3877
3878 ELSIF (l_rate_basis NOT IN (FTE_RTG_GLOBALS.G_TL_RATE_BASIS_DIST,
3879 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT,
3880 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL,
3881 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT,
3882 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET,
3883 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_TIME,
3884 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_FLAT)) THEN
3885
3886 x_status := 2;
3887 x_error_msg := FTE_UTIL_PKG.GET_MSG('FTE_BASIS_INVALID');
3888 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
3889 p_module_name => l_module_name,
3890 p_category => 'D',
3891 p_line_number => p_line_number);
3892 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3893 RETURN;
3894 --+
3895 -- UOM Required for 'DISTANCE', 'TIME', 'VOLUME', 'WEIGHT'
3896 --+
3897 ELSIF (l_rate_basis IN (FTE_RTG_GLOBALS.G_TL_RATE_BASIS_DIST,
3898 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT,
3899 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL,
3900 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_TIME)) THEN
3901 IF (l_rate_basis_uom IS NULL OR LENGTH(l_rate_basis_uom) = 0) THEN
3902 x_status := 2;
3903 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_RATE_BASIS_UOM_MISSING');
3904 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
3905 p_module_name => l_module_name,
3906 p_category => 'A',
3907 p_line_number => p_line_number);
3908
3909 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3910 RETURN;
3911 ELSE
3912 l_rate_basis_uom := FTE_UTIL_PKG.GET_UOM_CODE(p_uom => l_rate_basis_uom);
3913
3914 IF (x_status <> -1 OR l_rate_basis_uom IS NULL) THEN
3915 x_status := 2;
3916 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_UOM_INVALID',
3917 p_tokens => STRINGARRAY('UOM'),
3918 p_values => STRINGARRAY(l_rate_basis_uom));
3919 FTE_UTIL_PKG.WRITE_OUTFILE(p_msg => x_error_msg,
3920 p_module_name => l_module_name,
3921 p_category => 'D',
3922 p_line_number => p_line_number);
3923
3924 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3925 RETURN;
3926 END IF;
3927
3928 END IF;
3929
3930 ELSIF (l_rate_basis IN (FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT,
3931 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET)) THEN
3932 l_rate_basis_uom := g_unit_uom;
3933 END IF;
3934
3935 IF (p_chart_type = 'TL_MODIFIER') THEN
3936 --+
3937 -- Validate rate basis against carrier preferences
3938 --+
3939 CHECK_RATE_BASIS(p_carrier_name => l_carrier_name,
3940 p_rate_basis => l_rate_basis,
3941 p_rate_basis_uom => l_rate_basis_uom,
3942 p_service_level => l_service_level,
3943 p_line_number => p_line_number,
3944 x_status => x_status,
3945 x_error_msg => x_error_msg);
3946
3947 IF (x_status <> -1) THEN
3948 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3949 RETURN;
3950 END IF;
3951 END IF;
3952
3953 --+
3954 -- OUT OF ROUTE Charges
3955 --+
3956
3957 IF (l_out_rt_chg IS NOT NULL) THEN
3958
3959 IF (l_out_rt_chg_uom IS NULL) THEN
3960 x_status := 2;
3961 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_OUT_RTE_CHG_UOM_MISSING');
3962 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
3963 p_module_name => l_module_name,
3964 p_category => 'A',
3965 p_line_number => p_line_number);
3966 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3967 RETURN;
3968 ELSE
3969
3970 l_out_rt_chg_uom := FTE_UTIL_PKG.GET_UOM_CODE(l_out_rt_chg_uom);
3971
3972 IF (l_out_rt_chg_uom IS NULL) THEN
3973 x_status := 2;
3974 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Returned with Error from FTE_UTIL_PKG.GET_UOM_CODE');
3975 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3976 RETURN;
3977 END IF;
3978
3979 END IF;
3980
3981 PROCESS_BLOCK_UNIT_CHARGES(p_charge => l_out_rt_chg,
3982 p_subtype => FTE_RTG_GLOBALS.G_C_OUT_OF_ROUTE_CH,
3983 p_uom => g_unit_uom,
3984 p_process_id => p_process_id,
3985 x_linenum => x_linenum,
3986 p_line_number => p_line_number,
3987 x_error_msg => x_error_msg,
3988 x_status => x_status);
3989
3990 IF (x_status <> -1) THEN
3991 FTE_UTIL_PKG.Exit_Debug(l_module_name);
3992 RETURN;
3993 END IF;
3994
3995 END IF;
3996
3997 --+
3998 -- Process WEEKDAY LAYOVER Charges if specified.
3999 --+
4000
4001 IF (l_wkday_layovr_chg IS NOT NULL) THEN
4002
4003 PROCESS_BLOCK_UNIT_CHARGES(p_charge => l_wkday_layovr_chg,
4004 p_subtype => FTE_RTG_GLOBALS.G_C_WEEKDAY_LAYOVER_CH,
4005 p_uom => g_unit_uom,
4006 p_process_id => p_process_id,
4007 x_linenum => x_linenum,
4008 p_line_number => p_line_number,
4009 x_error_msg => x_error_msg,
4010 x_status => x_status);
4011
4012 IF (x_status <> -1) THEN
4013 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4014 RETURN;
4015 END IF;
4016 END IF;
4017
4018 --+
4019 -- Process CONTINUOUS MOVE Charges if specified.
4020 --+
4021
4022 IF (l_cont_mv_dsct_prcnt IS NOT NULL) THEN
4023
4024 l_type := 'DISCOUNT';
4025 l_subtype := FTE_RTG_GLOBALS.G_C_CONTINUOUS_MOVE_DISCOUNT;
4026
4027 x_linenum := x_linenum + 1;
4028 l_description := ' Continuous Move Discount Line ' || x_linenum;
4029
4030 l_rate_line_data('ACTION') := G_ACTION;
4031 l_rate_line_data('LINE_NUMBER') := x_linenum;
4032 l_rate_line_data('DESCRIPTION') := l_description;
4033 l_rate_line_data('UOM') := g_unit_uom;
4034 l_rate_line_data('VOLUME_TYPE') := 'TOTAL_QUANTITY';
4035 l_rate_line_data('TYPE') := l_type;
4036 l_rate_line_data('SUBTYPE') := l_subtype;
4037 l_rate_line_data('PERCENTAGE') := Fnd_Number.Number_To_Canonical(l_cont_mv_dsct_prcnt);
4038
4039 l_rate_line_block_tbl(1) := l_rate_line_data;
4040
4041 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
4042 p_block_data => l_rate_line_block_tbl,
4043 p_line_number => p_line_number,
4044 p_validate_column => FALSE,
4045 x_status => x_status,
4046 x_error_msg => x_error_msg);
4047
4048 l_rate_line_data.DELETE;
4049 l_rate_line_block_tbl.DELETE;
4050
4051 IF (x_status <> -1) THEN
4052 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg);
4053 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4054 RETURN;
4055 END IF;
4056
4057 -- Add CHARGE Attribute
4058 l_attribute_type := 'TL_CM_DISCOUNT_FLG';
4059 l_context := FTE_RTG_GLOBALS.G_AX_TL_CM_DISCOUNT_FLG;
4060 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
4061 p_attribute_value => 'Y',
4062 p_attribute_value_to => NULL,
4063 p_context => l_context,
4064 p_comp_operator => NULL,
4065 p_linenum => x_linenum,
4066 p_process_id => p_process_id,
4067 p_line_number => p_line_number,
4068 x_error_msg => x_error_msg,
4069 x_status => x_status);
4070 END IF;
4071
4072 --+
4073 -- Processing for STOP OFF Charges, if specified.
4074 -- l_num_free_stops is required to specify additional stop-off charges.
4075 -- It has the number of stops that are included in the base rate.
4076 --+
4077
4078 IF (l_num_free_stops IS NOT NULL AND
4079 (l_stop_chg_1 IS NULL AND l_stop_chg_2 IS NULL AND l_stop_chg_3 IS NULL AND
4080 l_stop_chg_4 IS NULL AND l_stop_chg_5 IS NULL AND l_stop_chg_x IS NULL)) THEN
4081 x_status := 2;
4082 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_LOAD_STOPOFF_CHRG_MISSING');
4083 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
4084 p_module_name => l_module_name,
4085 p_category => 'A',
4086 p_line_number => p_line_number);
4087 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4088 RETURN;
4089 END IF;
4090
4091 l_break_charges := STRINGARRAY(0,
4092 l_stop_chg_1, l_stop_chg_2,
4093 l_stop_chg_3, l_stop_chg_4,
4094 l_stop_chg_5, l_stop_chg_x);
4095
4096 PROCESS_STOPOFF_CHARGES(p_break_charges => l_break_charges,
4097 p_num_free_stops => l_num_free_stops,
4098 p_process_id => p_process_id,
4099 x_linenum => x_linenum,
4100 p_line_number => p_line_number,
4101 x_error_msg => x_error_msg,
4102 x_status => x_status);
4103
4104 IF (x_status <> -1) THEN
4105 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4106 RETURN;
4107 END IF;
4108
4109 IF (p_chart_type = 'FAC_MODIFIER') THEN
4110 l_load_type_prefix := 'FACILITY_';
4111 END IF;
4112
4113 --+
4114 -- Process HANDLING Charges if specified.
4115 --+
4116 IF (l_handling_chg IS NOT NULL) THEN
4117 PROCESS_LOADING_CHARGES(p_min_charge => l_min_handling_chg,
4118 p_charge => l_handling_chg,
4119 p_load_type => l_load_type_prefix || 'HANDLING',
4120 p_basis => l_rate_basis,
4121 p_basis_uom => g_unit_uom,
4122 p_process_id => p_process_id,
4123 x_linenum => x_linenum,
4124 p_line_number => p_line_number,
4125 x_error_msg => x_error_msg,
4126 x_status => x_status);
4127
4128 IF (x_status <> -1) THEN
4129 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4130 RETURN;
4131 END IF;
4132 END IF;
4133
4134 --+
4135 -- Process LOADING Charges if specified.
4136 --+
4137
4138 IF (l_ld_chg IS NOT NULL) THEN
4139
4140 PROCESS_LOADING_CHARGES(p_min_charge => l_min_ld_chg,
4141 p_charge => l_ld_chg,
4142 p_load_type => l_load_type_prefix || 'LOADING',
4143 p_basis => l_rate_basis,
4144 p_basis_uom => g_unit_uom,
4145 p_process_id => p_process_id,
4146 x_linenum => x_linenum,
4147 p_line_number => p_line_number,
4148 x_error_msg => x_error_msg,
4149 x_status => x_status);
4150
4151 IF (x_status <> -1) THEN
4152 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4153 RETURN;
4154 END IF;
4155
4156 END IF;
4157
4158 --+
4159 -- Process ASSISTED LOADING Charges if specified.
4160 --+
4161
4162 IF (l_asst_ld_chg IS NOT NULL) THEN
4163 PROCESS_LOADING_CHARGES(p_min_charge => l_min_asst_ld_chg,
4164 p_charge => l_asst_ld_chg,
4165 p_load_type => l_load_type_prefix || 'ASSISTED_LOADING',
4166 p_basis => l_rate_basis,
4167 p_basis_uom => g_unit_uom,
4168 p_process_id => p_process_id,
4169 x_linenum => x_linenum,
4170 p_line_number => p_line_number,
4171 x_error_msg => x_error_msg,
4172 x_status => x_status);
4173
4174 IF (x_status <> -1) THEN
4175 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4176 RETURN;
4177 END IF;
4178
4179 END IF;
4180
4181 --+
4182 -- Process UNLOADING Charges if specified
4183 --+
4184
4185 IF (l_unld_chg IS NOT NULL) THEN
4186
4187 PROCESS_LOADING_CHARGES(p_min_charge => l_min_unld_chg,
4188 p_charge => l_unld_chg,
4189 p_load_type => l_load_type_prefix || 'UNLOADING',
4190 p_basis => l_rate_basis,
4191 p_basis_uom => g_unit_uom,
4192 p_process_id => p_process_id,
4193 x_linenum => x_linenum,
4194 p_line_number => p_line_number,
4195 x_error_msg => x_error_msg,
4196 x_status => x_status);
4197
4198 IF (x_status <> -1) THEN
4199 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4200 RETURN;
4201 END IF;
4202
4203 END IF;
4204
4205 --+
4206 -- Process ASSISTED UNLOADING Charges if specified.
4207 --+
4208
4209 IF (l_asst_unld_chg IS NOT NULL) THEN
4210
4211 PROCESS_LOADING_CHARGES(p_min_charge => l_min_asst_unld_chg,
4212 p_charge => l_asst_unld_chg,
4213 p_load_type => l_load_type_prefix || 'ASSISTED_UNLOADING',
4214 p_basis => l_rate_basis,
4215 p_basis_uom => g_unit_uom,
4216 p_process_id => p_process_id,
4217 x_linenum => x_linenum,
4218 p_line_number => p_line_number,
4219 x_error_msg => x_error_msg,
4220 x_status => x_status);
4221
4222 IF (x_status <> -1) THEN
4223 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4224 RETURN;
4225 END IF;
4226 END IF;
4227
4228 --+
4229 -- For Facility Modifiers, store the rate basis and its uom. Each facility rate chart
4230 -- has a unique rate basis and basis uom. These will be used to populate
4231 -- fte_prc_parameters.
4232 --+
4233
4234 IF (p_chart_type = 'FAC_MODIFIER') THEN
4235
4236 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
4237 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Facility Modifier : Storing UOM ',l_rate_basis_uom);
4238 END IF;
4239
4240 Fac_Modifier_Names(Fac_Modifier_Names.COUNT+1) := FTE_UTIL_PKG.GET_DATA('FACILITY_RATE_CHART_NAME', p_values);
4241 Fac_Modifier_Bases(Fac_Modifier_Bases.COUNT+1) := l_rate_basis;
4242 Fac_Modifier_Uoms(Fac_Modifier_Uoms.COUNT+1) := l_rate_basis_uom;
4243
4244 END IF;
4245
4246 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4247
4248 EXCEPTION
4249 WHEN OTHERS THEN
4250 x_status := 2;
4251 FTE_UTIL_PKG.Write_LogFile(l_module_name,sqlerrm);
4252 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4253
4254 END PROCESS_CHART_SURCHARGES;
4255
4256 --_________________________________________________________________________________--
4257 -- --
4258 -- PROCEDURE: PROCESS_FACILITY_CHARGES --
4259 -- --
4260 -- Purpose: This is called by PROCESS_DATA if the type to be processed --
4261 -- is 'FACILITY_CHARGES'. --
4262 -- --
4263 -- IN Parameters --
4264 -- 1. p_block_header: An associative array with column names in the upload file,--
4265 -- as indices and integers as values. --
4266 -- 2. p_block_data : A table of associative array. Each element in the table --
4267 -- represents a single line of data in the upload file. --
4268 -- 3. p_line_number : Specifies the line number in the file where this block --
4269 -- begins.This is used for error logging, which aims --
4270 -- at ease of loader usage. --
4271 -- 4. p_doValidate : determines whether to validate the incoming data or not. --
4272 -- Normally it will have the vlue TRUE, enabling validation --
4273 -- When called from RATE CHART EDITOR UI, no need to validate--
4274 -- so they will pass FALSE for this. --
4275 -- --
4276 -- Out Parameters --
4277 -- 1. x_status : the return status, -1 for success --
4278 -- 2 for failure. --
4279 -- 2.x_error_msg: the corresponding error meassge, --
4280 -- if any exception occurs during the process. --
4281 --_________________________________________________________________________________--
4282
4283 PROCEDURE PROCESS_FACILITY_CHARGES(p_block_header IN FTE_BULKLOAD_PKG.block_header_tbl,
4284 p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
4285 p_line_number IN NUMBER,
4286 x_error_msg OUT NOCOPY VARCHAR2,
4287 x_status OUT NOCOPY NUMBER) IS
4288
4289 l_carrier_name VARCHAR2(50);
4290 l_currency VARCHAR2(20);
4291 l_start_date VARCHAR2(20);
4292 l_end_date VARCHAR2(20);
4293 l_name VARCHAR2(60);
4294 l_rc_name VARCHAR2(60);
4295 l_list_header_id NUMBER;
4296 l_description VARCHAR2(240);
4297 l_process_id NUMBER;
4298 l_linenum NUMBER;
4299 l_chart_type VARCHAR2(50);
4300 l_status VARCHAR2(4000);
4301 l_service_level VARCHAR2(30);
4302 l_assoc_rc_ids STRINGARRAY;
4303
4304 l_values FTE_BULKLOAD_PKG.data_values_tbl;
4305 l_rate_hdr_data FTE_BULKLOAD_PKG.data_values_tbl;
4306 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
4307 l_rate_hdr_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
4308 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
4309
4310 l_type CONSTANT VARCHAR2(30) := 'FACILITY_CHARGES';
4311 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.PROCESS_FACILITY_CHARGES';
4312
4313 BEGIN
4314
4315 FTE_UTIL_PKG.Enter_Debug(l_module_name);
4316 x_status := -1;
4317
4318 IF (g_unit_uom IS NULL) THEN
4319 g_unit_uom := GET_GLOBAL_UNIT_UOM(x_status, x_error_msg);
4320 IF (x_status <> -1) THEN
4321 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'FTE_UTIL_PKG.GET_GLOBAL_UNIT_UOM returned with error' || x_error_msg);
4322 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4323 RETURN;
4324 END IF;
4325 END IF;
4326
4327 FTE_VALIDATION_PKG.VALIDATE_COLUMNS(p_keys => p_block_header,
4328 p_type => l_type,
4329 p_line_number => p_line_number-1,
4330 x_status => x_status,
4331 x_error_msg => x_error_msg);
4332 IF (x_status <> -1) THEN
4333 RETURN;
4334 END IF;
4335
4336 FOR i IN 1..p_block_data.COUNT LOOP
4337
4338 l_values := p_block_data(i);
4339 G_ACTION := FTE_UTIL_PKG.GET_DATA('ACTION', l_values);
4340 l_currency := FTE_UTIL_PKG.GET_DATA('CURRENCY', l_values);
4341 l_start_date := FTE_UTIL_PKG.GET_DATA('START_DATE', l_values);
4342 l_end_date := FTE_UTIL_PKG.GET_DATA('END_DATE', l_values);
4343 l_name := FTE_UTIL_PKG.GET_DATA('FACILITY_RATE_CHART_NAME', l_values);
4344
4345 G_ACTION := UPPER(G_ACTION);
4346
4347 IF (l_start_date IS NOT NULL) THEN
4348 BEGIN
4349 l_start_date := to_char(to_date(l_start_date, 'MM/DD/YYYY'),'MM/DD/YYYY');
4350 EXCEPTION
4351 WHEN OTHERS THEN
4352 x_status := 2;
4353 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_DATE_FORMAT_ERROR');
4354 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
4355 p_module_name => l_module_name,
4356 p_category => 'D',
4357 p_line_number => p_line_number + i + 1);
4358 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4359 RETURN;
4360 END;
4361 END IF;
4362
4363 IF (l_end_date IS NOT NULL) THEN
4364 BEGIN
4365 l_end_date := to_char(to_date(l_end_date, 'MM/DD/YYYY'),'MM/DD/YYYY');
4366 EXCEPTION
4367 WHEN OTHERS THEN
4368 x_status := 2;
4369 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_DATE_FORMAT_ERROR');
4370 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
4371 p_module_name => l_module_name,
4372 p_category => 'D',
4373 p_line_number => p_line_number + i + 1);
4374 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4375 RETURN;
4376 END;
4377 END IF;
4378
4379 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
4380 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'G_ACTION ',G_ACTION);
4381 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_name ',l_name);
4382 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_currency ',l_currency);
4383 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_start_date',l_start_date);
4384 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_end_date ',l_end_date);
4385 END IF;
4386
4387 --Action
4388 IF (G_ACTION IS NULL OR LENGTH(G_ACTION) = 0) THEN
4389 x_status := 2;
4390 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_ACTION_MISSING');
4391 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
4392 p_module_name => l_module_name,
4393 p_category => 'A',
4394 p_line_number => p_line_number + i + 1);
4395 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4396 RETURN;
4397 END IF;
4398
4399 --
4400 -- Rate Chart Name
4401 --
4402 IF (l_name IS NULL OR LENGTH(l_name) = 0) THEN
4403 x_status := 2;
4404 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_PRICE_NAME_MISSING');
4405 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
4406 p_module_name => l_module_name,
4407 p_category => 'A',
4408 p_line_number => p_line_number + i + 1);
4409 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4410 RETURN;
4411 END IF;
4412
4413 -- Delete
4414 IF (G_ACTION IN('DELETE')) THEN
4415
4416 --+
4417 -- For DELETE, we delete the dummy rate chart associated with the modifier.
4418 --+
4419 l_assoc_rc_ids := FTE_RATE_CHART_PKG.GET_ASSOC_PRICELISTS(NULL, l_name);
4420
4421 FOR i IN 1..l_assoc_rc_ids.COUNT LOOP
4422
4423 FTE_RATE_CHART_PKG.G_CHART_TYPE := 'FAC_RATE_CHART';
4424 FTE_RATE_CHART_PKG.DELETE_FROM_QP(p_list_header_id => l_assoc_rc_ids(i),
4425 p_name => NULL,
4426 p_action => 'DELETE',
4427 p_line_number => p_line_number + i + 1,
4428 x_status => x_status,
4429 x_error_msg => x_error_msg);
4430 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
4431 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Deleting Rate Chart with ID '||l_assoc_rc_ids(i)|| ' of Modifier ' || l_name);
4432 END IF;
4433 END LOOP;
4434
4435 --+
4436 -- For Delete, we delete the lines and attributes and exit
4437 --+
4438
4439 FTE_RATE_CHART_PKG.G_CHART_TYPE := 'FAC_MODIFIER';
4440 FTE_RATE_CHART_PKG.DELETE_FROM_QP(p_list_header_id => NULL,
4441 p_name => l_name,
4442 p_action => G_ACTION,
4443 p_line_number => p_line_number + i + 1,
4444 x_status => x_status,
4445 x_error_msg => x_error_msg);
4446 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4447 RETURN;
4448 END IF;
4449 --+
4450 -- Currency
4451 --+
4452
4453 IF (l_currency IS NULL OR LENGTH(l_currency) = 0) THEN
4454 x_status := 2;
4455 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CURRENCY_MISSING');
4456 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
4457 p_module_name => l_module_name,
4458 p_category => 'A',
4459 p_line_number => p_line_number + i + 1);
4460 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4461 RETURN;
4462 END IF;
4463
4464 --+
4465 -- Create Dummy Rate Chart
4466 -- For update, the dummy pricelist already exists. We don't need to recreate it.
4467 --+
4468 IF (G_ACTION = 'ADD') THEN
4469
4470 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
4471 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Create Dummy Rate Chart');
4472 END IF;
4473
4474 l_rc_name := l_name || '_RC';
4475
4476 l_chart_type := 'FAC_RATE_CHART';
4477 l_description := 'Rate Chart ' || l_rc_name;
4478
4479 GET_CHART_DATA(p_chart_name => l_rc_name,
4480 p_currency => l_currency,
4481 p_chart_type => l_chart_type,
4482 x_carrier_name => l_carrier_name,
4483 x_service_level => l_service_level,
4484 x_cur_line => l_linenum,
4485 x_job_id => l_process_id,
4486 p_line_number => p_line_number,
4487 x_error_msg => x_error_msg,
4488 x_status => x_status);
4489
4490
4491 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
4492 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating Fac Chart Header');
4493 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Name', l_rc_name);
4494 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'PID ', l_process_id);
4495 END IF;
4496
4497 l_rate_hdr_data('ACTION') := G_ACTION;
4498 l_rate_hdr_data('FACILITY_RATE_CHART_NAME') := l_rc_name;
4499 l_rate_hdr_data('DESCRIPTION') := l_description;
4500 l_rate_hdr_data('START_DATE') := l_start_date;
4501 l_rate_hdr_data('END_DATE') := l_end_date;
4502 l_rate_hdr_data('CURRENCY') := l_currency;
4503 l_rate_hdr_data('ATTRIBUTE1') := 'FAC_RATE_CHART';
4504
4505 l_rate_hdr_block_tbl(1) := l_rate_hdr_data;
4506
4507 FTE_RATE_CHART_LOADER.PROCESS_RATE_CHART(p_block_header => g_dummy_block_hdr_tbl,
4508 p_block_data => l_rate_hdr_block_tbl,
4509 p_line_number => p_line_number + i + 1,
4510 p_validate_column => FALSE,
4511 p_process_id => l_process_id,
4512 x_status => x_status,
4513 x_error_msg => x_error_msg);
4514
4515 l_rate_hdr_data.DELETE;
4516 l_rate_hdr_block_tbl.DELETE;
4517
4518 IF (x_status <> -1) THEN
4519 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4520 RETURN;
4521 END IF;
4522
4523 l_rate_line_data('ACTION') := G_ACTION;
4524 l_rate_line_data('LINE_NUMBER') := 1;
4525 l_rate_line_data('DESCRIPTION') := l_description;
4526 l_rate_line_data('RATE') := 0;
4527 l_rate_line_data('UOM') := g_unit_uom;
4528 l_rate_line_data('VOLUME_TYPE') := 'TOTAL_QUANTITY';
4529 l_rate_line_data('TYPE') := l_type;
4530 l_rate_line_data('RATE_TYPE') := 'PER_UOM';
4531
4532 l_rate_line_block_tbl(1) := l_rate_line_data;
4533
4534 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
4535 p_block_data => l_rate_line_block_tbl,
4536 p_line_number => p_line_number + i + 1,
4537 p_validate_column => FALSE,
4538 x_status => x_status,
4539 x_error_msg => x_error_msg);
4540 END IF;
4541
4542 -- Now process the modifier.
4543 l_chart_type := 'FAC_MODIFIER';
4544
4545 --+
4546 -- Obtain Cached Information about the Chart, if it exists.
4547 --+
4548 GET_CHART_DATA(p_chart_name => l_name,
4549 p_currency => l_currency,
4550 p_chart_type => l_chart_type,
4551 x_carrier_name => l_carrier_name,
4552 x_service_level => l_service_level,
4553 x_cur_line => l_linenum,
4554 x_job_id => l_process_id,
4555 p_line_number => p_line_number,
4556 x_error_msg => x_error_msg,
4557 x_status => x_status);
4558
4559 IF (x_status <> -1) THEN
4560 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4561 RETURN;
4562 END IF;
4563
4564 --+
4565 -- Create Modifier Header
4566 --+
4567 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
4568 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating Modifier Header For ' || l_name);
4569 END IF;
4570
4571 l_description := 'Rate Chart ' || l_name;
4572
4573 l_rate_hdr_data('ACTION') := G_ACTION;
4574 l_rate_hdr_data('TL_FACILITY_MODIFIER_NAME') := l_name;
4575 l_rate_hdr_data('DESCRIPTION') := l_description;
4576 l_rate_hdr_data('START_DATE') := l_start_date;
4577 l_rate_hdr_data('END_DATE') := l_end_date;
4578 l_rate_hdr_data('CURRENCY') := NULL;
4579 l_rate_hdr_data('ATTRIBUTE1') := l_chart_type;
4580
4581 l_rate_hdr_block_tbl(1) := l_rate_hdr_data;
4582
4583 FTE_RATE_CHART_LOADER.PROCESS_RATE_CHART(p_block_header => g_dummy_block_hdr_tbl,
4584 p_block_data => l_rate_hdr_block_tbl,
4585 p_line_number => p_line_number + i + 1,
4586 p_validate_column => FALSE,
4587 p_process_id => l_process_id,
4588 x_status => x_status,
4589 x_error_msg => x_error_msg);
4590 l_rate_hdr_data.DELETE;
4591 l_rate_hdr_block_tbl.DELETE;
4592
4593 IF (x_status <> -1) THEN
4594 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4595 RETURN;
4596 END IF;
4597
4598 PROCESS_CHART_SURCHARGES( p_values => l_values,
4599 p_chart_type => l_chart_type,
4600 p_process_id => l_process_id,
4601 x_linenum => l_linenum,
4602 p_line_number => p_line_number,
4603 x_error_msg => x_error_msg,
4604 x_status => x_status);
4605
4606 IF (x_status <> -1) THEN
4607 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4608 RETURN;
4609 END IF;
4610
4611 Link_ChartNames(Link_ChartNames.COUNT+1) := l_rc_name;
4612 Link_ModifierNames(Link_ModifierNames.COUNT+1) := l_name;
4613
4614 END LOOP;
4615
4616 SUBMIT_TL_CHART(x_status, x_error_msg);
4617
4618 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
4619 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Return status from SUBMIT_TL_CHART',x_status);
4620 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Return Message from SUBMIT_TL_CHART',x_error_msg);
4621 END IF;
4622
4623 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4624
4625 EXCEPTION
4626 WHEN VALUE_ERROR THEN
4627 x_status := 2;
4628 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VALUE_ERROR');
4629 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
4630 p_module_name => l_module_name,
4631 p_category => 'D',
4632 p_line_number => 0);
4633 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4634
4635 WHEN OTHERS THEN
4636 x_status := 2;
4637 FTE_UTIL_PKG.Write_LogFile(l_module_name, SQLERRM);
4638 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4639
4640 END PROCESS_FACILITY_CHARGES;
4641
4642 --_________________________________________________________________________________--
4643 -- --
4644 -- PROCEDURE: PROCESS_TL_SURCHARGES --
4645 -- --
4646 -- Purpose: This is called by PROCESS_DATA if the type to be processed --
4647 -- is 'TL_SURCHARGES'. --
4648 -- IN Parameters --
4649 -- 1. p_block_header: An associative array with column names in the upload file,--
4650 -- as indices and integers as values. --
4651 -- 2. p_block_data : A table of associative array. Each element in the table --
4652 -- represents a single line of data in the upload file. --
4653 -- 3. p_line_number : Specifies the line number in the file where this block --
4654 -- begins.This is used for error logging, which aims --
4655 -- at ease of loader usage. --
4656 -- 4. p_doValidate : determines whether to validate the incoming data or not. --
4657 -- Normally it will have the vlue TRUE, enabling validation --
4658 -- When called from RATE CHART EDITOR UI, no need to validate--
4659 -- so they will pass FALSE for this. --
4660 -- --
4661 -- Out Parameters --
4662 -- 1. x_status : the return status, -1 for success --
4663 -- 2 for failure. --
4664 -- 2.x_error_msg: the corresponding error meassge, --
4665 -- if any exception occurs during the process. --
4666 --_________________________________________________________________________________--
4667
4668 PROCEDURE PROCESS_TL_SURCHARGES(p_block_header IN FTE_BULKLOAD_PKG.block_header_tbl,
4669 p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
4670 p_line_number IN NUMBER,
4671 p_doValidate IN BOOLEAN DEFAULT TRUE,
4672 x_error_msg OUT NOCOPY VARCHAR2,
4673 x_status OUT NOCOPY NUMBER) IS
4674
4675
4676 l_type VARCHAR2(30);
4677 l_service_level VARCHAR2(20);
4678 l_currency VARCHAR2(20);
4679 l_start_date VARCHAR2(20);
4680 l_end_date VARCHAR2(20);
4681 l_country VARCHAR2(60);
4682 l_state VARCHAR2(60);
4683 l_city VARCHAR2(60);
4684 l_zone_type VARCHAR2(30);
4685 l_zipcode_from VARCHAR2(30);
4686 l_zipcode_to VARCHAR2(30);
4687 l_zone VARCHAR2(60);
4688 l_name VARCHAR2(60);
4689 l_description VARCHAR2(240);
4690 l_process_id NUMBER;
4691 l_linenum NUMBER;
4692 l_subtype VARCHAR2(50);
4693 l_carrier_name VARCHAR2(100);
4694 l_carrier_id NUMBER;
4695 l_region_id NUMBER;
4696 l_rate NUMBER;
4697 l_wkend_layovr_dist_uom VARCHAR2(20);
4698 l_wkend_layovr_dist_brk NUMBER;
4699
4700 l_chart_type CONSTANT VARCHAR2(50) := 'TL_MODIFIER';
4701 l_block_type CONSTANT VARCHAR2(25) := 'TL_SURCHARGES';
4702 l_region_info wsh_regions_search_pkg.region_rec;
4703
4704 l_rate_hdr_data FTE_BULKLOAD_PKG.data_values_tbl;
4705 l_values FTE_BULKLOAD_PKG.data_values_tbl;
4706 l_rate_hdr_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
4707
4708 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.PROCESS_TL_SURCHARGES';
4709
4710 BEGIN
4711
4712 FTE_UTIL_PKG.Enter_Debug(l_module_name);
4713 x_status := -1;
4714
4715 --+
4716 -- Get the global unit UOM defined at Shipping->Setup->Global Parameters
4717 --+
4718 IF (g_unit_uom IS NULL) THEN
4719 g_unit_uom := GET_GLOBAL_UNIT_UOM (x_status, x_error_msg);
4720 IF (x_status <> -1) THEN
4721 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4722 RETURN;
4723 END IF;
4724 END IF;
4725
4726 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
4727 FTE_UTIL_PKG.Write_LogFile(l_module_name,'g_unit_uom',g_unit_uom);
4728 END IF;
4729
4730 IF( p_doValidate ) THEN
4731 FTE_VALIDATION_PKG.VALIDATE_COLUMNS(p_keys => p_block_header,
4732 p_type => l_block_type,
4733 p_line_number => p_line_number-1,
4734 x_status => x_status,
4735 x_error_msg => x_error_msg);
4736 IF (x_status <> -1) THEN
4737 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Return status from FTE_VALIDATION_PKG.VALIDATE_COLUMNS ', x_status);
4738 RETURN;
4739 END IF;
4740 END IF;
4741
4742
4743 FOR i IN 1..p_block_data.COUNT LOOP
4744
4745 l_values := p_block_data(i);
4746
4747 l_type := FTE_UTIL_PKG.GET_DATA('TYPE',l_values);
4748 l_type := UPPER(l_type);
4749
4750 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
4751 FTE_UTIL_PKG.Write_LogFile(l_module_name,'i ',i);
4752 FTE_UTIL_PKG.Write_LogFile(l_module_name,'l_type',l_type);
4753 END IF;
4754
4755 G_ACTION := FTE_UTIL_PKG.GET_DATA('ACTION', l_values);
4756
4757 /*
4758 C to specify stop-off, out-of-route, handling, minimum handling,
4759 loading, minimum loading, assisted loading, minimum assisted loading,
4760 unloading, minimum unloading, assisted unloading, minimum assisted unloading,
4761 and weekday layover charges,
4762 O to specify origin surcharges,
4763 D to specify destination surcharges,
4764 B to specify weekend layover distance breaks and the associated weekend layover charges and
4765 F to specify fuel surcharges
4766 */
4767
4768 IF (l_type NOT IN ('C','O','D','B','F')) THEN
4769 x_status := 2;
4770 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_LOAD_SURCHARGE_TYPE_INVALID');
4771 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
4772 p_module_name => l_module_name,
4773 p_category => 'D',
4774 p_line_number => 0);
4775 RETURN;
4776 END IF;
4777
4778 IF (NOT(g_action = 'DELETE' AND Upper(l_type) <> 'C')) THEN
4779
4780 IF (l_type = 'C') THEN
4781
4782 RESET_CHART_INFO;
4783
4784 l_carrier_name := FTE_UTIL_PKG.GET_DATA('CARRIER_NAME', l_values);
4785 l_currency := FTE_UTIL_PKG.GET_DATA('CURRENCY', l_values);
4786 l_start_date := FTE_UTIL_PKG.GET_DATA('START_DATE', l_values);
4787 l_end_date := FTE_UTIL_PKG.GET_DATA('END_DATE', l_values);
4788 l_service_level := FTE_UTIL_PKG.GET_DATA('SERVICE_LEVEL', l_values);
4789
4790 IF (NOT p_doValidate) THEN
4791 --+
4792 -- Get the carrier name from the ID for rate chart cretion.
4793 --+
4794 l_carrier_id := FTE_UTIL_PKG.GET_DATA('CARRIER_ID', l_values);
4795 l_carrier_name := FTE_UTIL_PKG.GET_CARRIER_NAME(p_carrier_id => l_carrier_id);
4796
4797 l_values('CARRIER_NAME') := l_carrier_name;
4798
4799 --+
4800 -- populate SERVICE LEVEL CODE.
4801 --+
4802 l_service_level := FTE_UTIL_PKG.GET_DATA('SERVICE_CODE', l_values);
4803
4804 END IF;
4805
4806 G_ACTION := UPPER(G_ACTION);
4807
4808 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
4809 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'G_ACTION ',G_ACTION);
4810 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_name ',l_name);
4811 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_service_level',l_service_level);
4812 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_carrier_name ',l_carrier_name);
4813 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_currency ',l_currency);
4814 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_start_date ',l_start_date);
4815 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_end_date ',l_end_date);
4816 END IF;
4817
4818 IF (p_doValidate) THEN
4819 FTE_VALIDATION_PKG.VALIDATE_ACTION(p_action => G_ACTION,
4820 p_type => l_block_type,
4821 p_line_number => p_line_number + i + 1,
4822 x_status => x_status,
4823 x_error_msg => x_error_msg);
4824 IF (x_status <> -1) THEN
4825 FTE_UTIL_PKG.Write_LogFile(l_module_name,'FTE_VALIDATION_PKG.VALIDATE_ACTION failed');
4826 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4827 RETURN;
4828 END IF;
4829 END IF;
4830
4831 IF (p_doValidate) THEN
4832 IF (l_start_date IS NOT NULL) THEN
4833 BEGIN
4834 IF (p_doValidate) THEN
4835 l_start_date := to_char(to_date(l_start_date, 'MM/DD/YYYY'),'MM/DD/YYYY');
4836 END IF;
4837 EXCEPTION
4838 WHEN OTHERS THEN
4839 x_status := 2;
4840 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_LOAD_INVALID_DATE');
4841 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
4842 p_module_name => l_module_name,
4843 p_category => 'D',
4844 p_line_number => p_line_number + i + 1);
4845 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4846 RETURN;
4847 END;
4848 END IF;
4849
4850 IF (l_end_date IS NOT NULL) THEN
4851 BEGIN
4852 IF (p_doValidate) THEN
4853 l_end_date := to_char(to_date(l_end_date, 'MM/DD/YYYY'),'MM/DD/YYYY');
4854 END IF;
4855 EXCEPTION
4856 WHEN OTHERS THEN
4857 x_status := 2;
4858 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_LOAD_INVALID_DATE');
4859 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
4860 p_module_name => l_module_name,
4861 p_category => 'D',
4862 p_line_number => p_line_number + i + 1);
4863
4864 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4865 RETURN;
4866 END;
4867 END IF;
4868 END IF;
4869
4870 IF (p_doValidate) THEN
4871 l_service_level := FTE_VALIDATION_PKG.VALIDATE_SERVICE_LEVEL(p_carrier_id => NULL,
4872 p_carrier_name => l_carrier_name,
4873 p_service_level => l_service_level,
4874 p_line_number => p_line_number + i + 1,
4875 x_error_msg => x_error_msg,
4876 x_status => x_status);
4877 IF (x_status <> -1) THEN
4878 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4879 RETURN;
4880 END IF;
4881 END IF;
4882
4883 IF (p_doValidate) THEN
4884 IF (l_currency IS NULL OR LENGTH(l_currency) = 0 AND G_ACTION IN ('ADD', 'UPDATE')) THEN
4885 x_status := 2;
4886 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name =>'FTE_LOAD_CURRENCY_MISSING');
4887 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
4888 p_module_name => l_module_name,
4889 p_category => 'D',
4890 p_line_number => p_line_number + i + 1);
4891 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4892 RETURN;
4893 END IF;
4894 END IF;
4895
4896 IF (p_doValidate) THEN
4897 --+
4898 -- We need the carrier ID in order
4899 -- to create the modifier rate chart name.
4900 --+
4901 BEGIN
4902 SELECT
4903 'MOD_' || hz.party_id || '_' || l_service_level INTO l_name
4904 FROM
4905 HZ_PARTIES hz,
4906 WSH_CARRIERS ca
4907 WHERE
4908 hz.party_name = l_carrier_name AND
4909 hz.party_id = ca.carrier_id;
4910 EXCEPTION
4911 WHEN NO_DATA_FOUND THEN
4912 x_status := 2;
4913 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_SEL_INVALID_CARRIER');
4914 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
4915 p_module_name => l_module_name,
4916 p_category => 'D',
4917 p_line_number => p_line_number + i + 1);
4918 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4919 RETURN;
4920 WHEN OTHERS THEN
4921 x_status := 2;
4922 FTE_UTIL_PKG.Write_LogFile(l_module_name, sqlerrm);
4923 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4924 RETURN;
4925 END;
4926 ELSE
4927 l_name := 'MOD_'||l_carrier_id||'_'||l_service_level;
4928 END IF;
4929
4930 IF (G_ACTION = 'DELETE') THEN
4931
4932 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
4933 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Deleting TL_MODIFIER ' || l_name);
4934 END IF;
4935
4936 FTE_RATE_CHART_PKG.G_CHART_TYPE := l_chart_type;
4937
4938 FTE_RATE_CHART_PKG.DELETE_FROM_QP(p_list_header_id => NULL,
4939 p_name => l_name,
4940 p_action => G_ACTION,
4941 p_line_number => p_line_number + i + 1,
4942 x_status => x_status,
4943 x_error_msg => x_error_msg);
4944 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4945 RETURN;
4946 END IF;
4947
4948 GET_CHART_DATA(p_chart_name => l_name,
4949 p_currency => l_currency,
4950 p_chart_type => l_chart_type,
4951 x_carrier_name => l_carrier_name,
4952 x_service_level => l_service_level,
4953 x_cur_line => l_linenum,
4954 x_job_id => l_process_id,
4955 p_line_number => p_line_number + i + 1,
4956 x_error_msg => x_error_msg,
4957 x_status => x_status);
4958
4959 g_chart_name := l_name;
4960
4961 --+
4962 -- If the linenum from GET_CHART_DATA is greater than o,
4963 -- it means that user is trying to upload a duplicate ratechart
4964 -- in the same spreadsheet.
4965 --+
4966 IF (l_linenum > 0) THEN
4967 x_status := 2;
4968 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_DUPLICATE_CHART');
4969 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
4970 p_module_name => l_module_name,
4971 p_category => 'D',
4972 p_line_number => p_line_number + i + 1);
4973 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4974 RETURN;
4975 ELSIF (x_status <> -1) THEN
4976 FTE_UTIL_PKG.Exit_Debug(l_module_name);
4977 RETURN;
4978 END IF;
4979
4980 --
4981 -- Create Modifier Header
4982 --
4983
4984 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
4985 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating Modifier Header For ' || l_name);
4986 END IF;
4987
4988 l_description := 'Rate Chart ' || g_chart_name;
4989
4990 l_rate_hdr_data('ACTION') := G_ACTION;
4991 l_rate_hdr_data('TL_MODIFIER_NAME') := g_chart_name;
4992 l_rate_hdr_data('DESCRIPTION') := l_description;
4993 l_rate_hdr_data('START_DATE') := l_start_date;
4994 l_rate_hdr_data('END_DATE') := l_end_date;
4995 l_rate_hdr_data('CURRENCY') := l_currency;
4996 l_rate_hdr_data('CARRIER_NAME') := l_carrier_name;
4997 l_rate_hdr_data('SERVICE_LEVEL') := l_service_level;
4998 l_rate_hdr_data('ATTRIBUTE1') := 'TL_MODIFIER';
4999
5000 l_rate_hdr_block_tbl(1) := l_rate_hdr_data;
5001
5002 FTE_RATE_CHART_LOADER.PROCESS_RATE_CHART(p_block_header => g_dummy_block_hdr_tbl,
5003 p_block_data => l_rate_hdr_block_tbl,
5004 p_line_number => p_line_number + i + 1,
5005 p_validate_column => FALSE,
5006 p_process_id => l_process_id,
5007 x_status => x_status,
5008 x_error_msg => x_error_msg);
5009
5010
5011 l_rate_hdr_data.DELETE;
5012 l_rate_hdr_block_tbl.DELETE;
5013
5014 IF (x_status <> -1) THEN
5015 FTE_UTIL_PKG.Write_LogFile(l_module_name, x_error_msg || ' [' || l_service_level || ', ' || l_carrier_name || ', TL]');
5016 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5017 RETURN;
5018 END IF;
5019
5020 PROCESS_CHART_SURCHARGES(p_values => l_values,
5021 p_chart_type => l_chart_type,
5022 p_process_id => l_process_id,
5023 p_doValidate => p_doValidate,
5024 x_linenum => l_linenum,
5025 p_line_number => p_line_number,
5026 x_error_msg => x_error_msg,
5027 x_status => x_status);
5028
5029 IF (x_status <> -1) THEN
5030 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5031 RETURN;
5032 END IF;
5033
5034 ELSIF (l_type = 'B') THEN
5035
5036 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
5037 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Weekend Layover Break.');
5038 END IF;
5039
5040 GET_CHART_DATA(p_chart_name => g_chart_name,
5041 p_currency => l_currency,
5042 p_chart_type => l_chart_type,
5043 x_carrier_name => l_carrier_name,
5044 x_service_level => l_service_level,
5045 x_cur_line => l_linenum,
5046 x_job_id => l_process_id,
5047 p_line_number => p_line_number + i + 1,
5048 x_error_msg => x_error_msg,
5049 x_status => x_status);
5050
5051
5052 l_wkend_layovr_dist_uom := FTE_UTIL_PKG.GET_DATA('DISTANCE_UOM_FOR_WEEKEND_LAYOVER_CHARGES', l_values);
5053 l_wkend_layovr_dist_brk := FTE_UTIL_PKG.GET_DATA('WEEKEND_LAYOVER_DISTANCE_BREAK', l_values);
5054 l_rate := FTE_UTIL_PKG.GET_DATA('CHARGES', l_values);
5055
5056 l_wkend_layovr_dist_brk := Fnd_Number.Canonical_To_Number(l_wkend_layovr_dist_brk);
5057 l_rate := Fnd_Number.Canonical_To_Number(l_rate);
5058
5059 IF (l_rate < 0) THEN
5060 x_status := 2;
5061 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VALUE_ERROR',
5062 p_tokens => STRINGARRAY('ENTITY'),
5063 p_values => STRINGARRAY('RATE'));
5064 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5065 p_module_name => l_module_name,
5066 p_category => 'D',
5067 p_line_number => p_line_number + i + 1);
5068 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5069 RETURN;
5070 END IF;
5071
5072 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
5073 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate ', l_rate);
5074 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'g_chart_name ', g_chart_name);
5075 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_linenum ', l_linenum);
5076 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_process_id ', l_process_id);
5077 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'G_ACTION ', G_ACTION);
5078 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_wkend_layovr_dist_uom',l_wkend_layovr_dist_uom );
5079 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_wkend_layovr_dist_brk',l_wkend_layovr_dist_brk);
5080 END IF;
5081
5082 IF (l_wkend_layovr_dist_uom IS NULL) THEN
5083 x_status := 2;
5084 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_WKEND_DIST_UOM_MISSING');
5085 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5086 p_module_name => l_module_name,
5087 p_category => 'D',
5088 p_line_number => p_line_number + i + 1);
5089 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5090 RETURN;
5091 ELSIF (l_wkend_layovr_dist_brk IS NULL) THEN
5092 x_status := 2;
5093 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_WKEND_NO_DIST_BREAK');
5094 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5095 p_module_name => l_module_name,
5096 p_category => 'D',
5097 p_line_number => p_line_number + i + 1);
5098 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5099 RETURN;
5100 ELSIF (l_rate IS NULL) THEN
5101 x_status := 2;
5102 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_RATE_MISSING');
5103 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5104 p_module_name => l_module_name,
5105 p_category => 'D',
5106 p_line_number => p_line_number + i + 1);
5107 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5108 RETURN;
5109 END IF;
5110
5111 IF (g_wknd_layovr_uom <> l_wkend_layovr_dist_uom) THEN
5112 IF (g_layovr_breaks.EXISTS(1)) THEN
5113 x_status := 2;
5114 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_DIST_UOM_MISMATCH');
5115 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5116 p_module_name => l_module_name,
5117 p_category => 'D',
5118 p_line_number => p_line_number + i + 1);
5119 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5120 RETURN;
5121 END IF;
5122 ELSE
5123 g_wknd_layovr_uom := l_wkend_layovr_dist_uom;
5124 g_layovr_breaks.EXTEND;
5125 g_layovr_charges.EXTEND;
5126 g_layovr_breaks(g_layovr_breaks.COUNT) := Fnd_Number.Number_To_Canonical(l_wkend_layovr_dist_brk);
5127 g_layovr_charges(g_layovr_charges.COUNT) := Fnd_Number.Number_To_Canonical(l_rate);
5128 END IF;
5129
5130 ELSIF (l_type IN ('O', 'D', 'F')) THEN
5131
5132 l_rate := Fnd_Number.Canonical_To_Number(FTE_UTIL_PKG.GET_DATA('SURCHARGES', l_values));
5133
5134 IF (l_rate < 0) THEN
5135 x_status := 2;
5136 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VALUE_ERROR',
5137 p_tokens => STRINGARRAY('ENTITY'),
5138 p_values => STRINGARRAY('RATE'));
5139 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
5140 p_module_name => l_module_name,
5141 p_category => 'D',
5142 p_line_number => p_line_number + i + 1);
5143 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5144 RETURN;
5145 ELSIF (l_rate IS NULL) THEN
5146 x_status := 2;
5147 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_SURCHARGE_MISSING');
5148 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5149 p_module_name => l_module_name,
5150 p_category => 'D',
5151 p_line_number => p_line_number + i + 1);
5152 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5153 RETURN;
5154 END IF;
5155
5156 GET_CHART_DATA(p_chart_name => g_chart_name,
5157 p_currency => l_currency,
5158 p_chart_type => l_chart_type,
5159 x_carrier_name => l_carrier_name,
5160 x_service_level => l_service_level,
5161 x_cur_line => l_linenum,
5162 x_job_id => l_process_id,
5163 p_line_number => p_line_number + i + 1,
5164 x_error_msg => x_error_msg,
5165 x_status => x_status);
5166
5167 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
5168 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'g_chart_name', g_chart_name);
5169 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_linenum', l_linenum);
5170 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_process_id', l_process_id);
5171 END IF;
5172
5173 IF (l_carrier_name IS NULL) THEN
5174 x_status := 2;
5175 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_RATECHART_NOT_DEFINED');
5176 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5177 p_module_name => l_module_name,
5178 p_category => 'D',
5179 p_line_number => p_line_number + i + 1);
5180 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5181 RETURN;
5182 END IF;
5183
5184 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
5185 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate', l_rate);
5186 END IF;
5187
5188 IF (l_type IN ('O', 'D')) THEN
5189
5190 IF (l_type = 'O') THEN
5191 l_zone_type := 'ORIGIN';
5192 ELSE
5193 l_zone_type := 'DESTINATION';
5194 END IF;
5195
5196 IF (p_doValidate) THEN
5197 l_country := FTE_UTIL_PKG.GET_DATA('COUNTRY', l_values);
5198 l_state := FTE_UTIL_PKG.GET_DATA('STATE', l_values);
5199 l_city := FTE_UTIL_PKG.GET_DATA('CITY', l_values);
5200 l_zipcode_from := FTE_UTIL_PKG.GET_DATA('POSTAL_CODE_FROM', l_values);
5201 l_zipcode_to := FTE_UTIL_PKG.GET_DATA('POSTAL_CODE_TO', l_values);
5202 l_zone := FTE_UTIL_PKG.GET_DATA('ZONE', l_values);
5203
5204 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
5205 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_country', l_country);
5206 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_state', l_state);
5207 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_city', l_city);
5208 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_zipcode_to', l_zipcode_to);
5209 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_zipcode_from', l_zipcode_from);
5210 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_zone', l_zone);
5211 END IF;
5212
5213 IF (l_country IS NULL AND l_state IS NULL AND l_city IS NULL AND
5214 l_zipcode_from IS NULL AND l_zipcode_to IS NULL AND l_zone IS NULL) THEN
5215
5216 x_status := 2;
5217 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_REGION_INFO_SPECIFIED');
5218 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5219 p_module_name => l_module_name,
5220 p_category => 'D',
5221 p_line_number => p_line_number + i + 1);
5222 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5223 RETURN;
5224 END IF;
5225
5226 l_region_info.country := l_country;
5227 l_region_info.state := l_state;
5228 l_region_info.city := l_city;
5229 l_region_info.postal_code_from := l_zipcode_from;
5230 l_region_info.postal_code_to := l_zipcode_to;
5231 l_region_info.zone := l_zone;
5232 ELSE
5233 l_region_id := FTE_UTIL_PKG.GET_DATA('REGION_CODE', l_values);
5234 END IF;
5235
5236 PROCESS_REGION_CHARGES(p_region_type => l_zone_type,
5237 p_region_info => l_region_info,
5238 p_charge => l_rate,
5239 p_process_id => l_process_id,
5240 x_linenum => l_linenum,
5241 p_region_id => l_region_id,
5242 p_line_number => p_line_number + i + 1,
5243 x_error_msg => x_error_msg,
5244 x_status => x_status);
5245
5246 ELSIF (l_type = 'F') THEN
5247
5248 PROCESS_FUEL_CHARGES( p_charge => l_rate,
5249 p_process_id => l_process_id,
5250 x_linenum => l_linenum,
5251 p_line_number => p_line_number + i + 1,
5252 x_error_msg => x_error_msg,
5253 x_status => x_status);
5254
5255 END IF;
5256
5257 IF (x_status <> -1) THEN
5258 x_status := 2;
5259 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5260 RETURN;
5261 END IF;
5262 END IF;
5263
5264 SET_CHART_LINE(g_chart_name, l_linenum, x_status);
5265 END IF;
5266 END LOOP;
5267
5268 SUBMIT_TL_CHART(x_status, x_error_msg);
5269
5270 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
5271 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Return status from SUBMIT_TL_CHART',x_status);
5272 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Return Message from SUBMIT_TL_CHART',x_error_msg);
5273 END IF;
5274
5275 IF (x_status <> -1) THEN
5276 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5277 RETURN;
5278 END IF;
5279
5280 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5281
5282 EXCEPTION
5283 WHEN VALUE_ERROR THEN
5284
5285 x_status := 2;
5286 FTE_UTIL_PKG.Write_LogFile(l_module_name,'Numeric Value Error while reading file. Please ensure that all data is of the right type.');
5287 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5288
5289 WHEN OTHERS THEN
5290
5291 x_status := 2;
5292 FTE_UTIL_PKG.Write_LogFile(l_module_name, sqlerrm);
5293 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5294
5295 END PROCESS_TL_SURCHARGES;
5296
5297 --_________________________________________________________________________________--
5298 -- --
5299 -- PROCEDURE: PROCESS_TL_BASE_RATES --
5300 -- --
5301 -- Purpose: This is called by PROCESS_DATA if the type to be processed --
5302 -- is 'TL_BASE_RATES'. By uploading a 'TL_BASE_RATES' block, the user is --
5303 -- creating rate chart. --
5304 -- --
5305 -- IN Parameters --
5306 -- 1. p_block_header: An associative array with column names in the upload file,--
5307 -- as indices and integers as values. --
5308 -- 2. p_block_data : A table of associative array. Each element in the table --
5309 -- represents a single line of data in the upload file. --
5310 -- 3. p_line_number : Specifies the line number in the file where this block --
5311 -- begins.This is used for error logging, which aims --
5312 -- at ease of loader usage. --
5313 -- 4. p_doValidate : determines whether to validate the incoming data or not. --
5314 -- Normally it will have the vlue TRUE, enabling validation --
5315 -- When called from RATE CHART EDITOR UI, no need to validate--
5316 -- so they will pass FALSE for this. --
5317 -- --
5318 -- Out Parameters --
5319 -- 1. x_status : the return status, -1 for success --
5320 -- 2 for failure. --
5321 -- 2.x_error_msg: the corresponding error meassge, --
5322 -- if any exception occurs during the process. --
5323 -- --
5324 -- --
5325 -- Column headers. 13 columns --
5326 -- ACTION, CARRIER_NAME, RATE_CHART_NAME, CURRENCY, RATE_BASIS, RATE_BASIS_UOM, --
5327 -- DISTANCE_TYPE, SERVICE_LEVEL,VEHICLE_TYPE, RATE, MINIMUM_CHARGE, --
5328 -- START_DATE, END_DATE --
5329 --_________________________________________________________________________________--
5330
5331 PROCEDURE PROCESS_TL_BASE_RATES(p_block_header IN FTE_BULKLOAD_PKG.block_header_tbl,
5332 p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
5333 p_line_number IN NUMBER,
5334 p_doValidate IN BOOLEAN DEFAULT TRUE,
5335 x_status OUT NOCOPY NUMBER,
5336 x_error_msg OUT NOCOPY VARCHAR2) IS
5337
5338 l_process_id NUMBER;
5339 l_carrier_name VARCHAR2(100);
5340 l_rate_chart_name VARCHAR2(100);
5341 l_currency VARCHAR2(20);
5342 l_rate_basis VARCHAR2(30);
5343 l_rate_basis_uom VARCHAR2(20);
5344 l_attribute VARCHAR2(50);
5345 l_dist_type VARCHAR2(100);
5346 l_service_level VARCHAR2(100);
5347 l_chart_type VARCHAR2(30);
5348 l_vehicle_type VARCHAR2(100);
5349 l_rate NUMBER;
5350 l_min_charge NUMBER;
5351 l_start_date VARCHAR2(20);
5352 l_end_date VARCHAR2(20);
5353 l_attribute_type VARCHAR2(50);
5354 l_attribute_value VARCHAR2(50);
5355 l_description VARCHAR2(200);
5356 l_linenum NUMBER;
5357 l_precedence NUMBER;
5358 l_deadhead BOOLEAN := FALSE;
5359 l_assoc_modifier_ids STRINGARRAY;
5360
5361 --+
5362 -- Used for Rate Chart Deletion
5363 --+
5364 l_deleted_rate_charts STRINGARRAY;
5365 l_del_count NUMBER := 0;
5366
5367
5368 --+
5369 -- Jiong's Requirement for UI
5370 --+
5371 l_carrier_id NUMBER;
5372
5373
5374 l_values FTE_BULKLOAD_PKG.data_values_tbl;
5375 l_rate_hdr_data FTE_BULKLOAD_PKG.data_values_tbl;
5376 l_rate_line_data FTE_BULKLOAD_PKG.data_values_tbl;
5377 l_rate_hdr_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
5378 l_rate_line_block_tbl FTE_BULKLOAD_PKG.block_data_tbl;
5379
5380 l_type CONSTANT VARCHAR2(25) := 'TL_BASE_RATES';
5381 l_module_name CONSTANT VARCHAR2(100):= 'FTE.PLSQL.' || G_PKG_NAME || '.PROCESS_TL_BASE_RATES';
5382
5383 BEGIN
5384
5385 FTE_UTIL_PKG.Enter_Debug(l_module_name);
5386 x_status := -1;
5387
5388 l_chart_type := 'TL_MODIFIER';
5389 l_precedence := G_CONST_PRECEDENCE_HIGH;
5390
5391 IF (g_unit_uom IS NULL) THEN
5392 g_unit_uom := GET_GLOBAL_UNIT_UOM (x_status, x_error_msg);
5393 IF (x_status <> -1) THEN
5394 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5395 RETURN;
5396 END IF;
5397 END IF;
5398
5399 IF (p_doValidate) THEN
5400 FTE_VALIDATION_PKG.VALIDATE_COLUMNS(p_keys => p_block_header,
5401 p_type => l_type,
5402 p_line_number => p_line_number-1,
5403 x_status => x_status,
5404 x_error_msg => x_error_msg);
5405 IF (x_status <> -1) THEN
5406 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5407 RETURN;
5408 END IF;
5409 END IF;
5410
5411 --+
5412 -- Start processing the elements in p_block_data.
5413 --+
5414
5415 FOR i IN 1..p_block_data.COUNT LOOP
5416
5417 l_values := p_block_data(i);
5418
5419 G_ACTION := FTE_UTIL_PKG.GET_DATA('ACTION', l_values);
5420 l_carrier_name := FTE_UTIL_PKG.GET_DATA('CARRIER_NAME', l_values);
5421 l_rate_chart_name:= FTE_UTIL_PKG.GET_DATA('RATE_CHART_NAME', l_values);
5422 l_currency := FTE_UTIL_PKG.GET_DATA('CURRENCY', l_values);
5423 l_rate_basis_uom := FTE_UTIL_PKG.GET_DATA('RATE_BASIS_UOM', l_values);
5424 l_vehicle_type := FTE_UTIL_PKG.GET_DATA('VEHICLE_TYPE', l_values);
5425 l_start_date := FTE_UTIL_PKG.GET_DATA('START_DATE', l_values);
5426 l_end_date := FTE_UTIL_PKG.GET_DATA('END_DATE', l_values);
5427 l_dist_type := FTE_UTIL_PKG.GET_DATA('DISTANCE_TYPE', l_values);
5428 l_service_level := FTE_UTIL_PKG.GET_DATA('SERVICE_LEVEL', l_values);
5429 l_rate_basis := FTE_UTIL_PKG.GET_DATA('RATE_BASIS', l_values);
5430
5431 BEGIN
5432 l_rate := FTE_UTIL_PKG.GET_DATA('RATE', l_values);
5433 IF (l_rate < 0 ) THEN
5434 x_status := 2;
5435 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VALUE_ERROR',
5436 p_tokens => STRINGARRAY('ENTITY'),
5437 p_values => STRINGARRAY('RATE'));
5438 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5439 p_module_name => l_module_name,
5440 p_category => 'D',
5441 p_line_number => p_line_number + i + 1);
5442 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5443 RETURN;
5444 END IF;
5445 EXCEPTION
5446 WHEN OTHERS THEN
5447 x_status := 2;
5448 x_error_msg := FTE_UTIL_PKG.GET_MSG('FTE_CAT_RATE_NON_NUMERIC');
5449 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
5450 p_module_name => l_module_name,
5451 p_category => 'D',
5452 p_line_number => p_line_number + i + 1);
5453 RETURN;
5454 END;
5455
5456 BEGIN
5457 l_min_charge := FTE_UTIL_PKG.GET_DATA('MINIMUM_CHARGE', l_values);
5458 IF (l_min_charge IS NOT NULL ) THEN
5459 IF (l_min_charge < 0 ) THEN
5460 x_status := 2;
5461 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VALUE_ERROR',
5462 p_tokens => STRINGARRAY('ENTITY'),
5463 p_values => STRINGARRAY('MINIMUM_CHARGE'));
5464 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5465 p_module_name => l_module_name,
5466 p_category => 'D',
5467 p_line_number => p_line_number + i + 1);
5468 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5469 RETURN;
5470 END IF;
5471 END IF;
5472 EXCEPTION
5473 WHEN OTHERS THEN
5474 x_status := 2;
5475 x_error_msg := FTE_UTIL_PKG.GET_MSG('FTE_CAT_RATE_NON_NUMERIC');
5476 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
5477 p_module_name => l_module_name,
5478 p_category => 'D',
5479 p_line_number => p_line_number + i + 1);
5480 RETURN;
5481 END;
5482
5483 --+
5484 -- Added for Jiong's Requirement.
5485 -- No check for return status done, as the validations has been done at UI level.
5486 --+
5487
5488 IF( NOT p_doValidate) THEN
5489
5490 --+
5491 -- Get the carrier name from the ID for rate chart cretion.
5492 --+
5493 l_carrier_id := FTE_UTIL_PKG.GET_DATA('CARRIER_ID', l_values);
5494 l_carrier_name := FTE_UTIL_PKG.GET_CARRIER_NAME(p_carrier_id => l_carrier_id);
5495
5496 --+
5497 -- populate SERVICE LEVEL CODE.
5498 --+
5499 l_service_level := FTE_UTIL_PKG.GET_DATA('SERVICE_CODE', l_values);
5500
5501 --+
5502 -- populate VEHICLE_TYPE_ID
5503 --+
5504 l_vehicle_type := FTE_UTIL_PKG.GET_DATA('VEHICLE_CODE', l_values);
5505 l_rate_basis_uom := FTE_UTIL_PKG.GET_DATA('RATE_BASIS_UOM_CODE', l_values);
5506
5507 IF (l_rate_basis IS NULL OR length(l_rate_basis) = 0 OR l_rate_basis = 'FLAT') THEN
5508 l_rate_basis := 'FLAT';
5509 l_rate_basis_uom := g_unit_uom;
5510 ELSIF (l_rate_basis IN (FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT,
5511 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET)) THEN
5512 l_rate_basis_uom := g_unit_uom;
5513 END IF;
5514
5515 END IF;
5516
5517 G_ACTION := UPPER(G_ACTION);
5518 l_dist_type := UPPER(l_dist_type);
5519 l_rate_basis := UPPER(l_rate_basis);
5520 l_rate := Fnd_Number.Canonical_To_Number(l_rate);
5521 l_min_charge := Fnd_Number.Canonical_To_Number(l_min_charge);
5522
5523 IF (p_doValidate) THEN
5524
5525 FTE_VALIDATION_PKG.VALIDATE_ACTION(p_action => G_ACTION,
5526 p_type => l_type,
5527 p_line_number => p_line_number + i + 1,
5528 x_status => x_status,
5529 x_error_msg => x_error_msg);
5530
5531 IF (x_status <> -1) THEN
5532 FTE_UTIL_PKG.Write_LogFile(l_module_name,'FTE_VALIDATION_PKG.VALIDATE_ACTION failed');
5533 RETURN;
5534 END IF;
5535
5536 END IF;
5537
5538 IF (l_start_date IS NOT NULL) THEN
5539 BEGIN
5540 IF (p_doValidate) THEN
5541 l_start_date := to_char(to_date(l_start_date, 'MM/DD/YYYY'), FTE_BULKLOAD_PKG.G_DATE_FORMAT);
5542 END IF;
5543 EXCEPTION
5544 WHEN OTHERS THEN
5545 x_status := 2;
5546 x_error_msg := FTE_UTIL_PKG.GET_MSG('FTE_CAT_DATE_FORMAT_ERROR');
5547 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
5548 p_module_name => l_module_name,
5549 p_category => 'D',
5550 p_line_number => p_line_number + i + 1);
5551 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5552 RETURN;
5553 END;
5554 END IF;
5555
5556 IF (l_end_date IS NOT NULL) THEN
5557 BEGIN
5558 IF (p_doValidate) THEN
5559 l_end_date := to_char(to_date(l_end_date, 'MM/DD/YYYY'), FTE_BULKLOAD_PKG.G_DATE_FORMAT);
5560 END IF;
5561 EXCEPTION
5562 WHEN OTHERS THEN
5563 x_status := 2;
5564 x_error_msg := FTE_UTIL_PKG.GET_MSG('FTE_CAT_DATE_FORMAT_ERROR');
5565 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
5566 p_module_name => l_module_name,
5567 p_category => 'D',
5568 p_line_number => p_line_number + i + 1);
5569
5570 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5571 RETURN;
5572 END;
5573 END IF;
5574
5575 IF (p_doValidate) THEN
5576 IF (l_rate < 0 ) THEN
5577 x_status := 2;
5578 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VALUE_ERROR',
5579 p_tokens => STRINGARRAY('ENTITY'),
5580 p_values => STRINGARRAY('RATE'));
5581 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5582 p_module_name => l_module_name,
5583 p_category => 'D',
5584 p_line_number => p_line_number + i + 1);
5585 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5586 RETURN;
5587 END IF;
5588
5589 IF (l_min_charge < 0) THEN
5590 x_status := 2;
5591 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VALUE_ERROR',
5592 p_tokens => STRINGARRAY('ENTITY'),
5593 p_values => STRINGARRAY('MINIMUM_CHARGE'));
5594 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5595 p_module_name => l_module_name,
5596 p_category => 'D',
5597 p_line_number => p_line_number + i + 1);
5598 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5599 RETURN;
5600 END IF;
5601
5602 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
5603 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'G_ACTION ',G_ACTION);
5604 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_chart_name',l_rate_chart_name);
5605 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_carrier_name ',l_carrier_name);
5606 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_currency ',l_currency);
5607 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_basis ',l_rate_basis);
5608 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_basis_uom ',l_rate_basis_uom);
5609 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_distance_type ',l_dist_type);
5610 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_service_level ',l_service_level);
5611 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_vehicle_type ',l_vehicle_type);
5612 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate ',l_rate);
5613 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_min_charge ',l_min_charge);
5614 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_start_date',l_start_date);
5615 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'l_rate_end_date ',l_end_date);
5616 END IF;
5617
5618 IF (l_rate_chart_name IS NULL OR LENGTH(l_rate_chart_name) = 0) THEN
5619 x_status := 2;
5620 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_PRICE_NAME_MISSING');
5621 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5622 p_module_name => l_module_name,
5623 p_category => 'D',
5624 p_line_number => p_line_number + i + 1);
5625 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5626 RETURN;
5627 END IF;
5628
5629 END IF;
5630
5631 IF (G_ACTION IN('UPDATE', 'DELETE')) THEN
5632
5633 -- For both UPDATE and DELETE, delete the associated Mincharge Modifier of the rate chart
5634
5635 l_assoc_modifier_ids := FTE_RATE_CHART_PKG.GET_ASSOC_MODIFIERS(NULL, l_rate_chart_name);
5636
5637 FOR i IN 1..l_assoc_modifier_ids.COUNT
5638 LOOP
5639 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
5640 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Deleting Modifier ' || l_assoc_modifier_ids(i) || ' of Rate Chart ' || l_rate_chart_name);
5641 END IF;
5642
5643 FTE_RATE_CHART_PKG.G_CHART_TYPE := 'TL_MODIFIER';
5644 FTE_RATE_CHART_PKG.DELETE_FROM_QP(p_list_header_id => l_assoc_modifier_ids(i),
5645 p_name => NULL,
5646 p_action => 'DELETE',
5647 p_line_number => p_line_number + i + 1,
5648 x_status => x_status,
5649 x_error_msg => x_error_msg);
5650
5651
5652 IF (x_status <> -1) THEN
5653 FTE_UTIL_PKG.Write_LogFile(l_module_name,'FTE_RATE_CHART_PKG.DELETE_FROM_QP returned with error' || x_error_msg);
5654 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5655 RETURN;
5656 END IF;
5657 END LOOP;
5658
5659 IF (G_ACTION = 'DELETE') THEN
5660 --+
5661 -- For Delete, we delete and exit
5662 --+
5663 FOR i IN 1..l_deleted_rate_charts.COUNT
5664 LOOP
5665 IF (l_rate_chart_name = l_deleted_rate_charts(i)) THEN
5666 GOTO next_record;
5667 END IF;
5668 END LOOP;
5669
5670 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
5671 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Deleting TL_RATE_CHART ' || l_rate_chart_name);
5672 END IF;
5673
5674 FTE_RATE_CHART_PKG.G_CHART_TYPE := 'TL_RATE_CHART';
5675
5676 FTE_RATE_CHART_PKG.DELETE_FROM_QP(p_list_header_id => NULL,
5677 p_name => l_rate_chart_name,
5678 p_action => G_ACTION,
5679 p_line_number => p_line_number + i + 1,
5680 x_status => x_status,
5681 x_error_msg => x_error_msg);
5682 IF (x_status <> -1) THEN
5683 FTE_UTIL_PKG.Write_LogFile(l_module_name,'FTE_RATE_CHART_PKG.DELETE_FROM_QP returned with error' || x_error_msg);
5684 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5685 RETURN;
5686 END IF;
5687
5688 l_del_count := l_del_count + 1;
5689 l_deleted_rate_charts(l_del_count) := l_rate_chart_name;
5690
5691 END IF;
5692 END IF;
5693
5694 --+
5695 -- The Carrier associated with the lane and rate chart should be the same.
5696 --+
5697 IF (p_doValidate) THEN
5698 IF (l_carrier_name IS NULL OR LENGTH(l_carrier_name) = 0) THEN
5699 x_status := 2;
5700 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_CARRIER_MISSING');
5701 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5702 p_module_name => l_module_name,
5703 p_category => 'D',
5704 p_line_number => p_line_number + i + 1);
5705 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5706 RETURN;
5707 END IF;
5708 --+
5709 -- Attribute : Rate Basis, Rate Basis UOM required
5710 --+
5711 IF (l_rate_basis IS NULL OR length(l_rate_basis) = 0 OR l_rate_basis = 'FLAT') THEN
5712
5713 l_rate_basis := 'FLAT';
5714 l_rate_basis_uom := g_unit_uom;
5715
5716 ELSIF (l_rate_basis NOT IN (FTE_RTG_GLOBALS.G_TL_RATE_BASIS_DIST,
5717 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT,
5718 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL,
5719 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT,
5720 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET,
5721 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_TIME,
5722 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_FLAT)) THEN
5723 x_status := 2;
5724 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_BASIS_INVALID');
5725 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5726 p_module_name => l_module_name,
5727 p_category => 'D',
5728 p_line_number => p_line_number + i + 1); -- add tokens
5729 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5730 RETURN;
5731 ELSIF (l_rate_basis IN (FTE_RTG_GLOBALS.G_TL_RATE_BASIS_DIST,
5732 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT,
5733 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL,
5734 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_TIME)) THEN
5735
5736 --+
5737 -- UOM is required for 'DISTANCE', 'TIME', 'VOLUME', 'WEIGHT'
5738 -- Note that when called from UI, p_doValidate will be false and we have
5739 -- already populated the l_rate_basis_uom with the l_rate_basis_uom_code
5740 --+
5741
5742 IF (l_rate_basis_uom IS NULL OR LENGTH(l_rate_basis_uom) = 0) THEN
5743 x_status := 2;
5744 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_RATE_BASIS_UOM_MISSING');
5745 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5746 p_module_name => l_module_name,
5747 p_category => 'D',
5748 p_line_number => p_line_number + i + 1);
5749 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5750 RETURN;
5751 ELSE
5752 l_rate_basis_uom := FTE_UTIL_PKG.GET_UOM_CODE(p_uom => l_rate_basis_uom);
5753
5754 IF (l_rate_basis_uom IS NULL) THEN
5755 x_status := 2;
5756 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_UOM_INVALID');
5757 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5758 p_module_name => l_module_name,
5759 p_category => 'B',
5760 p_line_number => p_line_number + i + 1);
5761 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5762 RETURN;
5763 END IF;
5764 END IF;
5765
5766 ELSIF (l_rate_basis IN (FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT,
5767 FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET)) THEN
5768 l_rate_basis_uom := g_unit_uom;
5769 END IF;
5770
5771 --+
5772 -- Distance Type(loaded, unloaded and continuous) is required if rate_basis is DISTANCE
5773 --+
5774 IF (l_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_DIST) THEN
5775 IF (l_dist_type IS NULL OR LENGTH(l_dist_type) = 0) THEN
5776 x_status := 2;
5777 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_DISTANCE_TYPE_MISSING');
5778 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5779 p_module_name => l_module_name,
5780 p_category =>'D',
5781 p_line_number => p_line_number + i + 1);
5782 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5783 RETURN;
5784 END IF;
5785 END IF;
5786
5787 IF (x_status <> -1) THEN
5788 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5789 RETURN;
5790 END IF;
5791
5792 --+
5793 -- Service Level is required.
5794 --+
5795 l_service_level := FTE_VALIDATION_PKG.VALIDATE_SERVICE_LEVEL(p_carrier_id => NULL,
5796 p_carrier_name => l_carrier_name,
5797 p_service_level => l_service_level,
5798 p_line_number => p_line_number + i + 1,
5799 x_error_msg => x_error_msg,
5800 x_status => x_status);
5801 IF (x_status <> -1) THEN
5802 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5803 RETURN;
5804 END IF;
5805
5806 IF (l_vehicle_type IS NULL ) THEN
5807 x_status := 2;
5808 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VEHICLE_MISSING');
5809 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5810 p_module_name => l_module_name,
5811 p_category =>'D',
5812 p_line_number => p_line_number + i + 1);
5813 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5814 RETURN;
5815 END IF;
5816
5817 --+
5818 -- To populate l_vehicle_type with l_vehicle_type_id
5819 -- This call is not needed when called from UI
5820 --+
5821 l_vehicle_type := FTE_UTIL_PKG.GET_VEHICLE_TYPE(p_vehicle_type => l_vehicle_type);
5822
5823 IF (l_vehicle_type IS NULL ) THEN
5824 x_status := 2;
5825 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_CAT_VEH_NOT_DEFINED');
5826 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
5827 p_module_name => l_module_name,
5828 p_category =>'D',
5829 p_line_number => p_line_number + i + 1);
5830 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5831 RETURN;
5832 END IF;
5833
5834 END IF;
5835
5836 --+
5837 -- Get the chart data, from the cache.
5838 --+
5839 GET_CHART_DATA(p_chart_name => l_rate_chart_name,
5840 p_currency => l_currency,
5841 p_chart_type => 'TL_RATE_CHART',
5842 x_carrier_name => l_carrier_name,
5843 x_service_level => l_service_level,
5844 x_cur_line => l_linenum,
5845 x_job_id => l_process_id,
5846 p_line_number => p_line_number + i + 1,
5847 x_error_msg => x_error_msg,
5848 x_status => x_status);
5849
5850 IF (x_status <> -1) THEN
5851 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5852 RETURN;
5853 END IF;
5854
5855 GET_CARRIER_PREFERENCES (p_carrier_name => l_carrier_name,
5856 p_service_level => l_service_level,
5857 p_line_number => p_line_number + i + 1,
5858 x_status => x_status,
5859 x_error_msg => x_error_msg);
5860
5861 IF (p_doValidate) THEN
5862
5863 --+
5864 -- Validate Against Carrier Preferences
5865 --+
5866 CHECK_RATE_BASIS(p_carrier_name => l_carrier_name,
5867 p_rate_basis => l_rate_basis,
5868 p_rate_basis_uom => l_rate_basis_uom,
5869 p_service_level => l_service_level,
5870 p_line_number => p_line_number + i + 1,
5871 x_status => x_status,
5872 x_error_msg => x_error_msg);
5873
5874 IF (x_status <> -1) THEN
5875 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5876 RETURN;
5877 END IF;
5878
5879 END IF;
5880
5881 --+
5882 -- Set the precedence and rate type, store min charges
5883 --+
5884 IF (l_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_DIST) THEN
5885
5886 IF (l_dist_type = FTE_RTG_GLOBALS.G_TL_DIST_TYPE_UNLOADED) THEN
5887 l_attribute := FTE_RTG_GLOBALS.G_C_UNLOADED_DISTANCE_RT;
5888 l_precedence := G_CONST_PRECEDENCE_LOW;
5889 l_deadhead := TRUE;
5890 ELSIF (l_dist_type = FTE_RTG_GLOBALS.G_TL_DIST_TYPE_CM) THEN
5891 l_attribute := FTE_RTG_GLOBALS.G_C_CONTINUOUS_MOVE_DIST_RT;
5892 l_precedence := G_CONST_PRECEDENCE_MID;
5893 ELSIF (l_dist_type = 'LOADED') THEN
5894 l_attribute := FTE_RTG_GLOBALS.G_C_LOADED_DISTANCE_RT;
5895 ELSE
5896 x_status := 2;
5897 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_DISTANCE_TYPE_INVALID');
5898 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
5899 p_module_name => l_module_name,
5900 p_category =>'D',
5901 p_line_number => p_line_number + i + 1);
5902 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5903 RETURN;
5904 END IF;
5905
5906 ELSIF (l_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_FLAT) THEN
5907 l_attribute := FTE_RTG_GLOBALS.G_C_FLAT_RT;
5908 ELSIF (l_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_TIME) THEN
5909 l_attribute := FTE_RTG_GLOBALS.G_C_TIME_RT;
5910 ELSIF (l_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_WT) THEN
5911 l_attribute := FTE_RTG_GLOBALS.G_C_UNIT_WT_RT;
5912 ELSIF (l_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_VOL) THEN
5913 l_attribute := FTE_RTG_GLOBALS.G_C_UNIT_VOL_RT;
5914 ELSIF (l_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_CONT) THEN
5915 l_attribute := FTE_RTG_GLOBALS.G_C_UNIT_CONT_RT;
5916 ELSIF (l_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_PALLET) THEN
5917 l_attribute := FTE_RTG_GLOBALS.G_C_UNIT_PALLET_RT;
5918 END IF;
5919
5920 --+
5921 -- For the first line of the RC, we have to create the header.
5922 --
5923 -- In the call to GET_CHART_DATA(), this l_line_num has been passed
5924 -- as an output parameter to get the value.
5925 --
5926 -- If it is the first time, then it should be zero
5927 -- else it will have a non-zero value equal to the number of lines processed + 1 (header)
5928 --+
5929 IF (l_linenum = 0) THEN
5930
5931 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
5932 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating Rate Chart Header For ' || l_rate_chart_name);
5933 END IF;
5934
5935 l_description := 'Rate Chart ' || l_rate_chart_name;
5936
5937 l_rate_hdr_data('ACTION') := G_ACTION;
5938 l_rate_hdr_data('TL_CHART_NAME') := l_rate_chart_name;
5939 l_rate_hdr_data('DESCRIPTION') := l_description;
5940 l_rate_hdr_data('START_DATE') := l_start_date;
5941 l_rate_hdr_data('END_DATE') := l_end_date;
5942 l_rate_hdr_data('CURRENCY') := l_currency;
5943 l_rate_hdr_data('CARRIER_NAME') := l_carrier_name;
5944 l_rate_hdr_data('SERVICE_LEVEL') := l_service_level;
5945 l_rate_hdr_data('ATTRIBUTE1') := 'TL_RATE_CHART';
5946
5947 l_rate_hdr_block_tbl(1) := l_rate_hdr_data;
5948
5949 FTE_RATE_CHART_LOADER.PROCESS_RATE_CHART(p_block_header => g_dummy_block_hdr_tbl,
5950 p_block_data => l_rate_hdr_block_tbl,
5951 p_line_number => p_line_number + i + 1,
5952 p_validate_column => FALSE,
5953 p_process_id => l_process_id,
5954 x_status => x_status,
5955 x_error_msg => x_error_msg);
5956
5957 l_rate_hdr_data.DELETE;
5958 l_rate_hdr_block_tbl.DELETE;
5959
5960 IF (x_status <> -1) THEN
5961 FTE_UTIL_PKG.Exit_Debug(l_module_name);
5962 RETURN;
5963 END IF;
5964
5965 --+
5966 -- The first two lines in each rate chart should be 'dummy' rate chart lines.
5967 -- The first one should have a rate type of 'STOP_CHARGE', and
5968 -- the second one should have a rate type of 'LOAD_CHARGE'.
5969 --
5970 -- Rate chart dummy line 1
5971 --+
5972 l_linenum := l_linenum + 1;
5973 l_description := 'Line ' || l_linenum || ' Of ' || l_rate_chart_name;
5974
5975 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
5976 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating ' || l_description);
5977 END IF;
5978
5979 l_rate_line_data('ACTION') := G_ACTION;
5980 l_rate_line_data('LINE_NUMBER') := l_linenum;
5981 l_rate_line_data('DESCRIPTION') := l_description;
5982 l_rate_line_data('RATE') := 0;
5983 l_rate_line_data('UOM') := g_unit_uom;
5984 l_rate_line_data('VOLUME_TYPE') := 'TOTAL_QUANTITY';
5985 l_rate_line_data('ATTRIBUTE1') := FTE_RTG_GLOBALS.G_C_STOP_LEVEL_CHARGES_RT;
5986 l_rate_line_data('PRECEDENCE') := l_precedence;
5987 l_rate_line_data('RATE_TYPE') := 'PER_UOM';
5988 l_rate_line_data('START_DATE_ACTIVE') := l_start_date;
5989 l_rate_line_data('END_DATE_ACTIVE') := l_end_date;
5990
5991 l_rate_line_block_tbl(1) := l_rate_line_data;
5992
5993 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
5994 p_block_data => l_rate_line_block_tbl,
5995 p_line_number => p_line_number + i + 1,
5996 p_validate_column => FALSE,
5997 x_status => x_status,
5998 x_error_msg => x_error_msg);
5999
6000 l_rate_line_data.DELETE;
6001 l_rate_line_block_tbl.DELETE;
6002
6003 IF (x_status <> -1) THEN
6004 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6005 RETURN;
6006 END IF;
6007
6008 --+
6009 -- Add Rate Type Attribute 'STOP_CHARGE'
6010 --+
6011 l_attribute_type := 'TL_RATE_TYPE';
6012 l_attribute_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_STOP;
6013 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
6014 p_attribute_value => l_attribute_value,
6015 p_attribute_value_to => NULL,
6016 p_context => FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE,
6017 p_linenum => l_linenum,
6018 p_comp_operator => NULL,
6019 p_process_id => l_process_id,
6020 p_line_number => p_line_number + i + 1,
6021 x_error_msg => x_error_msg,
6022 x_status => x_status);
6023
6024 IF (x_status <> -1) THEN
6025 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6026 RETURN;
6027 END IF;
6028
6029 --+
6030 -- Rate Chart dummy line 2
6031 --+
6032 l_linenum := l_linenum + 1;
6033 l_description := 'Line ' || l_linenum || ' Of ' || l_rate_chart_name;
6034
6035 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
6036 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating ' || l_description);
6037 END IF;
6038
6039 l_rate_line_data('ACTION') := G_ACTION;
6040 l_rate_line_data('LINE_NUMBER'):= l_linenum;
6041 l_rate_line_data('DESCRIPTION'):= l_description;
6042 l_rate_line_data('RATE') := 0;
6043 l_rate_line_data('UOM') := g_unit_uom;
6044 l_rate_line_data('VOLUME_TYPE'):= 'TOTAL_QUANTITY';
6045 l_rate_line_data('ATTRIBUTE1') := FTE_RTG_GLOBALS.G_C_LOAD_LEVEL_CHARGES_RT;
6046 l_rate_line_data('PRECEDENCE') := l_precedence;
6047 l_rate_line_data('RATE_TYPE') := 'PER_UOM';
6048 l_rate_line_data('START_DATE_ACTIVE') := l_start_date;
6049 l_rate_line_data('END_DATE_ACTIVE') := l_end_date;
6050
6051 l_rate_line_block_tbl(1) := l_rate_line_data;
6052
6053 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
6054 p_block_data => l_rate_line_block_tbl,
6055 p_line_number => p_line_number + i + 1,
6056 p_validate_column => FALSE,
6057 x_status => x_status,
6058 x_error_msg => x_error_msg);
6059 l_rate_line_data.DELETE;
6060 l_rate_line_block_tbl.DELETE;
6061
6062 IF (x_status <> -1) THEN
6063 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6064 RETURN;
6065 END IF;
6066
6067 --+
6068 -- Add Rate Type Attribute 'LOAD_CHARGE'
6069 --+
6070 l_attribute_type := 'TL_RATE_TYPE';
6071 l_attribute_value := FTE_RTG_GLOBALS.G_TL_RATE_TYPE_LOAD;
6072 ADD_ATTRIBUTE(p_attribute_type => l_attribute_type,
6073 p_attribute_value => l_attribute_value,
6074 p_attribute_value_to => NULL,
6075 p_context => FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE,
6076 p_linenum => l_linenum,
6077 p_comp_operator => NULL,
6078 p_process_id => l_process_id,
6079 p_line_number => p_line_number + i + 1,
6080 x_error_msg => x_error_msg,
6081 x_status => x_status);
6082
6083 END IF;
6084
6085 --+
6086 -- Create a RATE CHART LINE
6087 --+
6088 l_linenum := l_linenum + 1;
6089 l_description := 'Line ' || l_linenum || ' Of ' || l_rate_chart_name;
6090
6091 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
6092 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating ' || l_description);
6093 END IF;
6094
6095 l_rate_line_data('ACTION') := G_ACTION;
6096 l_rate_line_data('LINE_NUMBER') := l_linenum;
6097 l_rate_line_data('DESCRIPTION') := l_description;
6098 l_rate_line_data('RATE') := Fnd_Number.Number_To_Canonical(l_rate);
6099 l_rate_line_data('UOM') := l_rate_basis_uom;
6100 l_rate_line_data('VOLUME_TYPE') := 'TOTAL_QUANTITY';
6101 l_rate_line_data('ATTRIBUTE1') := l_attribute;
6102 l_rate_line_data('PRECEDENCE') := l_precedence;
6103 l_rate_line_data('RATE_TYPE') := 'PER_UOM';
6104 l_rate_line_data('START_DATE_ACTIVE') := l_start_date;
6105 l_rate_line_data('END_DATE_ACTIVE') := l_end_date;
6106
6107 l_rate_line_block_tbl(1) := l_rate_line_data;
6108
6109 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
6110 p_block_data => l_rate_line_block_tbl,
6111 p_line_number => p_line_number + i + 1,
6112 p_validate_column => FALSE,
6113 x_status => x_status,
6114 x_error_msg => x_error_msg);
6115 l_rate_line_data.DELETE;
6116 l_rate_line_block_tbl.DELETE;
6117
6118 IF (x_status <> -1) THEN
6119 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6120 RETURN;
6121 END IF;
6122
6123 --+
6124 -- RATE_BASIS Attribute should be attached to each line
6125 --+
6126 l_attribute_type := 'TL_RATE_BASIS';
6127 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
6128 p_attribute_value => l_rate_basis,
6129 p_attribute_value_to => NULL,
6130 p_context => FTE_RTG_GLOBALS.G_AX_TL_RATE_BASIS,
6131 p_linenum => l_linenum,
6132 p_comp_operator => NULL,
6133 p_process_id => l_process_id,
6134 p_line_number => p_line_number + i + 1,
6135 x_error_msg => x_error_msg,
6136 x_status => x_status);
6137
6138 IF (x_status <> -1) THEN
6139 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6140 RETURN;
6141 END IF;
6142
6143 --+
6144 -- Add DISTANCE_TYPE attribute if rate basis is DISTANCE
6145 -- and distance type IS NOT LOADED
6146 --+
6147 IF (l_rate_basis = FTE_RTG_GLOBALS.G_TL_RATE_BASIS_DIST AND
6148 l_dist_type IN ('UNLOADED', 'CONTINUOUS_MOVE')) THEN
6149
6150 l_attribute_type := 'TL_DISTANCE_TYPE';
6151 ADD_ATTRIBUTE(p_attribute_type => l_attribute_type,
6152 p_attribute_value => l_dist_type,
6153 p_attribute_value_to => NULL,
6154 p_context => FTE_RTG_GLOBALS.G_AX_TL_DISTANCE_TYPE,
6155 p_linenum => l_linenum,
6156 p_comp_operator => NULL,
6157 p_process_id => l_process_id,
6158 p_line_number => p_line_number + i + 1,
6159 x_error_msg => x_error_msg,
6160 x_status => x_status);
6161
6162 IF (x_status <> -1) THEN
6163 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6164 RETURN;
6165 END IF;
6166 END IF;
6167
6168 --+
6169 -- RATE_TYPE Attribute should be attached to each line
6170 --+
6171 l_attribute_type := 'TL_RATE_TYPE';
6172 l_attribute_value := 'BASE_RATE';
6173 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
6174 p_attribute_value => l_attribute_value,
6175 p_attribute_value_to => NULL,
6176 p_context => FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE,
6177 p_linenum => l_linenum,
6178 p_comp_operator => NULL,
6179 p_process_id => l_process_id,
6180 p_line_number => p_line_number + i + 1,
6181 x_error_msg => x_error_msg,
6182 x_status => x_status);
6183
6184 IF (x_status <> -1) THEN
6185 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6186 RETURN;
6187 END IF;
6188
6189 --+
6190 -- Add the VEHICLE_TYPE attribute.
6191 --+
6192 IF (l_vehicle_type IS NOT NULL AND LENGTH(l_vehicle_type) > 0) THEN
6193
6194 l_attribute_type := 'TL_VEHICLE_TYPE';
6195 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
6196 p_attribute_value => l_vehicle_type,
6197 p_attribute_value_to => NULL,
6198 p_context => FTE_RTG_GLOBALS.G_AX_VEHICLE,
6199 p_linenum => l_linenum,
6200 p_process_id => l_process_id,
6201 p_comp_operator => NULL,
6202 p_line_number => p_line_number,
6203 x_error_msg => x_error_msg,
6204 x_status => x_status);
6205
6206 IF (x_status <> -1) THEN
6207 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6208 RETURN;
6209 END IF;
6210 END IF;
6211
6212 --+
6213 -- If rate basis is 'DISTANCE' and distance type is 'UNLOADED', then
6214 -- we create an additional line and attach the
6215 -- 'CONTINUOUS_MOVE_DEADHEAD_RATING' attribute.
6216 --+
6217 IF (l_deadhead) THEN
6218
6219 l_deadhead := FALSE;
6220
6221 --+
6222 -- Create Rate Line
6223 --+
6224 l_linenum := l_linenum + 1;
6225 l_description := 'Line ' || l_linenum || ' Of ' || l_rate_chart_name;
6226
6227 l_attribute := FTE_RTG_GLOBALS.G_C_CONTINUOUS_MOVE_DH_RT;
6228 l_precedence := G_CONST_PRECEDENCE_LOW;
6229
6230 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
6231 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Creating ' || l_description);
6232 END IF;
6233
6234 l_rate_line_data('ACTION') := G_ACTION;
6235 l_rate_line_data('LINE_NUMBER') := l_linenum;
6236 l_rate_line_data('DESCRIPTION') := l_description;
6237 l_rate_line_data('RATE') := Fnd_Number.Number_To_Canonical(l_rate);
6238 l_rate_line_data('UOM') := l_rate_basis_uom;
6239 l_rate_line_data('VOLUME_TYPE') := 'TOTAL_QUANTITY';
6240 l_rate_line_data('ATTRIBUTE1') := l_attribute;
6241 l_rate_line_data('PRECEDENCE') := l_precedence;
6242 l_rate_line_data('RATE_TYPE') := 'PER_UOM';
6243 l_rate_line_data('START_DATE_ACTIVE') := l_start_date;
6244 l_rate_line_data('END_DATE_ACTIVE') := l_end_date;
6245
6246 l_rate_line_block_tbl(1) := l_rate_line_data;
6247
6248 FTE_RATE_CHART_LOADER.PROCESS_RATE_LINE(p_block_header => g_dummy_block_hdr_tbl,
6249 p_block_data => l_rate_line_block_tbl,
6250 p_line_number => p_line_number + i + 1,
6251 p_validate_column => FALSE,
6252 x_status => x_status,
6253 x_error_msg => x_error_msg);
6254 l_rate_line_data.DELETE;
6255 l_rate_line_block_tbl.DELETE;
6256
6257 IF (x_status <> -1) THEN
6258 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6259 RETURN;
6260 END IF;
6261
6262 --+
6263 -- Attach the DEADHEAD_RATING to the line
6264 --+
6265 l_attribute_type := 'TL_DEADHEAD_RT_VAR';
6266 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
6267 p_attribute_value => FTE_RTG_GLOBALS.G_TL_DEADHEAD_RT_VAR_YES,
6268 p_attribute_value_to => NULL,
6269 p_context => FTE_RTG_GLOBALS.G_AX_TL_DEADHEAD_RT_VAR,
6270 p_linenum => l_linenum,
6271 p_process_id => l_process_id,
6272 p_comp_operator => NULL,
6273 p_line_number => p_line_number + i + 1,
6274 x_error_msg => x_error_msg,
6275 x_status => x_status);
6276
6277 IF (x_status <> -1) THEN
6278 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6279 RETURN;
6280 END IF;
6281
6282 --+
6283 -- Attach the Rate Basis Attribute to the line
6284 --+
6285 l_attribute_type := 'TL_RATE_BASIS';
6286 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
6287 p_attribute_value => l_rate_basis,
6288 p_attribute_value_to => NULL,
6289 p_context => FTE_RTG_GLOBALS.G_AX_TL_RATE_BASIS,
6290 p_linenum => l_linenum,
6291 p_process_id => l_process_id,
6292 p_comp_operator => NULL,
6293 p_line_number => p_line_number + i + 1,
6294 x_error_msg => x_error_msg,
6295 x_status => x_status);
6296
6297 IF (x_status <> -1) THEN
6298 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6299 RETURN;
6300 END IF;
6301
6302 --+
6303 -- Attach the Distance Type 'CONTINUOUS_MOVE' to the line.
6304 --+
6305 l_attribute_type := 'TL_DISTANCE_TYPE';
6306 ADD_ATTRIBUTE (p_attribute_type => l_attribute_type,
6307 p_attribute_value => FTE_RTG_GLOBALS.G_TL_DIST_TYPE_CM,
6308 p_attribute_value_to => NULL,
6309 p_context => FTE_RTG_GLOBALS.G_AX_TL_DISTANCE_TYPE,
6310 p_linenum => l_linenum,
6311 p_comp_operator => NULL,
6312 p_process_id => l_process_id,
6313 p_line_number => p_line_number + i + 1,
6314 x_error_msg => x_error_msg,
6315 x_status => x_status);
6316
6317 IF (x_status <> -1) THEN
6318 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6319 RETURN;
6320 END IF;
6321
6322 --+
6323 -- Attach the Rate Type (BASE_RATE) Attribute
6324 --+
6325 l_attribute_type := 'TL_RATE_TYPE';
6326 l_attribute_value := 'BASE_RATE';
6327
6328 ADD_ATTRIBUTE(p_attribute_type => l_attribute_type,
6329 p_attribute_value => l_attribute_value,
6330 p_attribute_value_to => NULL,
6331 p_context => FTE_RTG_GLOBALS.G_AX_TL_RATE_TYPE,
6332 p_linenum => l_linenum,
6333 p_comp_operator => NULL,
6334 p_process_id => l_process_id,
6335 p_line_number => p_line_number + i + 1,
6336 x_error_msg => x_error_msg,
6337 x_status => x_status);
6338
6339 IF (x_status <> -1) THEN
6340 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6341 RETURN;
6342 END IF;
6343
6344
6345 --+
6346 -- Add the VEHICLE_TYPE (optional) attribute if the vehicle is specified
6347 --+
6348 IF (l_vehicle_type IS NOT NULL AND LENGTH(l_vehicle_type) > 0) THEN
6349 --+
6350 -- Vehicle Type has already been translated to ID format
6351 --+
6352 l_attribute_type := 'TL_VEHICLE_TYPE';
6353 ADD_ATTRIBUTE ( p_attribute_type => l_attribute_type,
6354 p_attribute_value => l_vehicle_type,
6355 p_attribute_value_to => NULL,
6356 p_context => FTE_RTG_GLOBALS.G_AX_VEHICLE,
6357 p_linenum => l_linenum,
6358 p_comp_operator => NULL,
6359 p_process_id => l_process_id,
6360 p_line_number => p_line_number + i + 1,
6361 x_error_msg => x_error_msg,
6362 x_status => x_status);
6363
6364 IF (x_status <> -1) THEN
6365 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6366 RETURN;
6367 END IF;
6368 END IF;
6369 END IF;
6370
6371
6372 --+
6373 -- Validate and store the minimum charge, if it is specified.
6374 --+
6375 IF (l_min_charge IS NOT NULL) THEN
6376 IF (l_rate_basis <> FTE_RTG_GLOBALS.G_TL_RATE_BASIS_FLAT) THEN
6377 STORE_MIN_CHARGE(p_chart_name => l_rate_chart_name,
6378 p_charge => l_min_charge,
6379 p_basis => l_rate_basis,
6380 p_uom => l_rate_basis_uom,
6381 p_vehicle => l_vehicle_type,
6382 p_line_number => p_line_number + i + 1,
6383 x_error_msg => x_error_msg,
6384 x_status => x_status);
6385
6386 ELSE
6387 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_FLAT_MIN_NOT_ALLOWED');
6388 FTE_UTIL_PKG.Write_OutFile(p_msg => x_error_msg,
6389 p_module_name => l_module_name,
6390 p_category => 'D',
6391 p_line_number => p_line_number + i + 1);
6392 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6393 x_status := 2;
6394 RETURN;
6395 END IF;
6396
6397 IF (x_status <> -1) THEN
6398 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6399 RETURN;
6400 END IF;
6401 END IF;
6402
6403 SET_CHART_LINE(l_rate_chart_name, l_linenum, x_status);
6404
6405 <<next_record>> NULL;
6406
6407 END LOOP;
6408
6409 SUBMIT_TL_CHART(x_status, x_error_msg);
6410
6411 IF (FTE_BULKLOAD_PKG.g_debug_on) THEN
6412 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Return status from SUBMIT_TL_CHART ', x_status);
6413 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'Return Message from SUBMIT_TL_CHART ', x_error_msg);
6414 END IF;
6415
6416 IF (x_status <> -1) THEN
6417 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6418 RETURN;
6419 END IF;
6420
6421 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6422
6423 EXCEPTION
6424 WHEN OTHERS THEN
6425 x_status := 2;
6426 x_error_msg := sqlerrm;
6427 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR occured in PROCESS_TL_BASE_RATES ', sqlerrm);
6428 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6429
6430 END PROCESS_TL_BASE_RATES;
6431
6432 --_________________________________________________________________________________--
6433 -- --
6434 -- PROCEDURE: PROCESS_TL_SERVICES --
6435 -- --
6436 -- Purpose: This is called by PROCESS_DATA if the type to be processed --
6437 -- is 'TL_SERVICES'. By uploading a 'TL_SERVICE' block, the user is --
6438 -- creating a tl service, a ratechart - service association and --
6439 -- a service level in the system. --
6440 -- --
6441 -- IN Parameters --
6442 -- 1. p_block_header: An associative array with column names in the upload file,--
6443 -- as indices and integers as values. --
6444 -- 2. p_block_data : A table of associative array. Each element in the table --
6445 -- represents a single line of data in the upload file. --
6446 -- 3. p_line_number : Specifies the line number in the file where this block --
6447 -- begins.This is used for error logging, which aims --
6448 -- at ease of loader usage. --
6449 -- --
6450 -- Out Parameters --
6451 -- x_status : the return status, -1 for success --
6452 -- 2 for failure. --
6453 -- x_error_msg: the corresponding error meassge, --
6454 -- if any exception occurs during the process. --
6455 --_________________________________________________________________________________--
6456
6457 PROCEDURE PROCESS_TL_SERVICES(p_block_header IN FTE_BULKLOAD_PKG.block_header_tbl,
6458 p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
6459 p_line_number IN NUMBER,
6460 x_status OUT NOCOPY NUMBER,
6461 x_error_msg OUT NOCOPY VARCHAR2) IS
6462
6463 l_action VARCHAR2(100);
6464 l_values FTE_BULKLOAD_PKG.data_values_tbl;
6465
6466 l_mode CONSTANT VARCHAR2(50) := 'TRUCK';
6467 l_type VARCHAR2(25) := 'TL_SERVICES';
6468 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.PROCESS_TL_SERVICES';
6469
6470 /* Columns in TL-Services.
6471 ACTION, CARRIER_NAME, SERVICE_NUMBER,
6472 ORIGIN_COUNTRY, ORIGIN_STATE, ORIGIN_CITY, ORIGIN_POSTAL_CODE_FROM, ORIGIN_POSTAL_CODE_TO, ORIGIN_ZONE,
6473 DESTINATION_COUNTRY, DESTINATION_STATE, DESTINATION_CITY, DESTINATION_POSTAL_CODE_FROM, DESTINATION_POSTAL_CODE_TO, DESTINATION_ZONE,
6474 SERVICE_START_DATE, SERVICE_END_DATE,
6475 SERVICE_LEVEL, RATE_CHART_NAME
6476 */
6477
6478 BEGIN
6479
6480 FTE_UTIL_PKG.Enter_Debug(l_module_name);
6481 x_status := -1;
6482
6483 FTE_VALIDATION_PKG.VALIDATE_COLUMNS(p_keys => p_block_header,
6484 p_type => l_type,
6485 p_line_number => p_line_number+1,
6486 x_status => x_status,
6487 x_error_msg => x_error_msg);
6488 IF (x_status <> -1) THEN
6489 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'VALIDATE_COLUMNS returned with Error');
6490 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6491 RETURN;
6492 END IF;
6493
6494 FOR i IN 1..p_block_data.COUNT LOOP
6495
6496 l_values := p_block_data(i);
6497
6498 -- Validate ACTION.
6499 -- The valid actions for TL are ADD, DELETE and UPDATE.
6500 l_action := FTE_UTIL_PKG.GET_DATA('ACTION', l_values);
6501
6502
6503 FTE_VALIDATION_PKG.VALIDATE_ACTION(p_action => l_action,
6504 p_type => l_type,
6505 p_line_number => p_line_number + i + 1,
6506 x_status => x_status,
6507 x_error_msg => x_error_msg);
6508 IF (x_status <> -1) THEN
6509 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'VALIDATE_ACTION returned with Error');
6510 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6511 RETURN;
6512 END IF;
6513
6514 --+
6515 -- VALIDATE_TL_SERVICE validates CARRIER,MODE etc., of the line
6516 -- and put the values in the pl/sql tables passed. We collect the values in these pl/sql
6517 -- tables and do a bulk insert after the processing all the lines.
6518 --+
6519 FTE_VALIDATION_PKG.VALIDATE_TL_SERVICE(p_values => l_values,
6520 p_line_number => p_line_number + i + 1,
6521 p_type => l_type,
6522 p_action => l_action,
6523 p_lane_tbl => g_lane_tbl,
6524 p_lane_service_tbl => g_lane_service_tbl,
6525 p_lane_rate_chart_tbl=> g_lane_rate_chart_tbl,
6526 x_status => x_status,
6527 x_error_msg => x_error_msg);
6528 IF (x_status <> -1) THEN
6529 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'VALIDATE_TL_SERVICE returned with Error');
6530 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6531 RETURN;
6532 END IF;
6533
6534 END LOOP;
6535
6536 FTE_LANE_PKG.INSERT_LANE_TABLES(p_lane_tbl => g_lane_tbl,
6537 p_lane_rate_chart_tbl => g_lane_rate_chart_tbl,
6538 p_lane_commodity_tbl => g_lane_commodity_tbl,
6539 p_lane_service_tbl => g_lane_service_tbl,
6540 x_status => x_status,
6541 x_error_msg => x_error_msg);
6542
6543 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6544
6545 EXCEPTION
6546 WHEN OTHERS THEN
6547 x_status := 2;
6548 FTE_UTIL_PKG.Write_LogFile(l_module_name,'UNEXPECTED ERROR OCCURED IN ' || l_module_name);
6549 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6550
6551 END PROCESS_TL_SERVICES;
6552
6553
6554 --_________________________________________________________________________________--
6555 -- --
6556 -- PROCEDURE: PROCESS_DATA --
6557 -- --
6558 -- PURPOSE: Call appropriate process_xxx based on the type. --
6559 -- where xxx is one of TL_SERVICES, TL_BASE_RATES,TL_SURCHARGES, --
6560 -- and FACILITY_CHARGES --
6561 -- --
6562 -- PARAMETERS: --
6563 -- IN --
6564 -- 0. p_type : Type of the block to be processed. This calls --
6565 -- the appropriate PROCESS_XXX depending on this parameter. --
6566 -- In R12, It can take the following four values. --
6567 -- TL_SERVICES, TL_BASE_RATES,TL_SURCHARGES --
6568 -- and FACILITY_CHARGES --
6569 -- 1. p_block_header: An associative array with column names in the upload file,--
6570 -- as indices and integers as values. --
6571 -- 2. p_block_data : A table of associative array. Each element in the table --
6572 -- represents a single line of data in the upload file. --
6573 -- 3. p_line_number : Specifies the line number in the file where this block --
6574 -- begins.This is used for error logging, which aims --
6575 -- at ease of loader usage. --
6576 -- --
6577 -- OUT parameters: --
6578 -- 1. x_status: status of the processing, -1 means no error --
6579 -- 2. x_error_msg: error message if any. --
6580 --_________________________________________________________________________________--
6581
6582 PROCEDURE PROCESS_DATA ( p_type IN VARCHAR2,
6583 p_block_header IN FTE_BULKLOAD_PKG.block_header_tbl,
6584 p_block_data IN FTE_BULKLOAD_PKG.block_data_tbl,
6585 p_line_number IN NUMBER,
6586 x_status OUT NOCOPY NUMBER,
6587 x_error_msg OUT NOCOPY VARCHAR2) IS
6588
6589 l_module_name CONSTANT VARCHAR2(100) := 'FTE.PLSQL.' || G_PKG_NAME || '.PROCESS_DATA';
6590
6591 BEGIN
6592
6593 FTE_UTIL_PKG.Enter_Debug(l_module_name);
6594 x_status := -1;
6595
6596 IF(FTE_BULKLOAD_PKG.g_debug_on) THEN
6597 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_type ', p_type);
6598 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_block_header count', p_block_header.COUNT);
6599 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_block_data.count ', p_block_data.count);
6600 FTE_UTIL_PKG.Write_LogFile(l_module_name,'p_line_number ', p_line_number);
6601 END IF;
6602
6603 IF(p_block_header.COUNT =0 OR p_block_data.COUNT = 0 ) THEN
6604 x_status := 2;
6605 x_error_msg := FTE_UTIL_PKG.GET_MSG(p_name => 'FTE_COLUMN_OR_DATA_MISSING');
6606 FTE_UTIL_PKG.Write_OutFile( p_msg => x_error_msg,
6607 p_module_name => l_module_name,
6608 p_category => 'D',
6609 p_line_number => p_line_number);
6610 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6611 RETURN;
6612 END IF;
6613
6614 IF (p_type = 'TL_SERVICES') THEN
6615
6616 PROCESS_TL_SERVICES(p_block_header => p_block_header,
6617 p_block_data => p_block_data,
6618 p_line_number => p_line_number,
6619 x_status => x_status,
6620 x_error_msg => x_error_msg);
6621
6622 ELSIF (p_type = 'TL_BASE_RATES') THEN
6623
6624 PROCESS_TL_BASE_RATES(p_block_header => p_block_header,
6625 p_block_data => p_block_data,
6626 p_line_number => p_line_number,
6627 p_doValidate => TRUE,
6628 x_status => x_status,
6629 x_error_msg => x_error_msg);
6630
6631 ELSIF (p_type = 'TL_SURCHARGES') THEN
6632
6633 PROCESS_TL_SURCHARGES(p_block_header => p_block_header,
6634 p_block_data => p_block_data,
6635 p_line_number => p_line_number,
6636 x_status => x_status,
6637 x_error_msg => x_error_msg);
6638
6639 ELSIF (p_type = 'FACILITY_CHARGES') THEN
6640
6641 PROCESS_FACILITY_CHARGES(p_block_header => p_block_header,
6642 p_block_data => p_block_data,
6643 p_line_number => p_line_number,
6644 x_status => x_status,
6645 x_error_msg => x_error_msg);
6646 ELSE
6647 -- Unreacheable code --
6648 x_status := 2;
6649 FTE_UTIL_PKG.Write_LogFile(l_module_name,'INVALID BLOCK TYPE');
6650
6651 END IF;
6652
6653 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6654
6655 EXCEPTION
6656
6657 WHEN OTHERS THEN
6658 x_status := 2;
6659 FTE_UTIL_PKG.Write_LogFile(l_module_name, 'UNEXPECTED ERROR OCCURED IN ' || l_module_name || sqlerrm);
6660 FTE_UTIL_PKG.Exit_Debug(l_module_name);
6661
6662 END PROCESS_DATA;
6663
6664 END FTE_TL_LOADER;